From 68c42c386acd71b85cc5a8fff538238416b67c9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Lagier?= Date: Wed, 4 Nov 2026 08:31:51 +0100 Subject: [PATCH 1/2] feat: i18n check CI + add missings translations --- .../complete-i18n-translations/SKILL.md | 44 ++ .github/workflows/dev_opened_or_updated.yml | 15 + README.md | 12 +- package.json | 1 + scripts/i18n-check.mjs | 115 +++++ src/i18n/lang/de.json | 104 +++- src/i18n/lang/en.json | 29 +- src/i18n/lang/es.json | 104 +++- src/i18n/lang/it.json | 264 +++++++++- src/i18n/lang/nl.json | 468 +++++++++++++----- src/i18n/lang/no.json | 452 ++++++++++++----- 11 files changed, 1332 insertions(+), 276 deletions(-) create mode 100644 .github/skills/complete-i18n-translations/SKILL.md create mode 100644 scripts/i18n-check.mjs diff --git a/.github/skills/complete-i18n-translations/SKILL.md b/.github/skills/complete-i18n-translations/SKILL.md new file mode 100644 index 000000000..011a75824 --- /dev/null +++ b/.github/skills/complete-i18n-translations/SKILL.md @@ -0,0 +1,44 @@ +--- +name: complete-i18n-translations +description: "Use when adding, changing, or reviewing i18n strings, translation keys, or src/i18n/lang/*.json files. Ensure every supported language is complete before finishing." +--- + +# Complete i18n translations + +When changing user-facing text or translation keys, complete all supported +translations in the same change. Do not leave missing keys, empty values, or +English placeholders in other locales. + +## Supported languages + +The translation files are in `src/i18n/lang/`. The current supported languages +are `de`, `en`, `es`, `fr`, `it`, `nl`, and `no`. Check the files in that +directory, `src/i18n/index.js` and `src/i18n/datetime.js` if the supported +locales may have changed; do not rely on a hard-coded list if the repository +has moved on. + +## Procedure + +1. Add every new key, with an accurate, non-empty translation, to every + supported locale in `src/i18n/lang/.json`. When changing a string, + update all locale versions of that key. Preserve nested JSON structure, + placeholders (such as `{name}`), plural forms (`singular | plural`), and + existing terminology. +2. When removing a key from the code, remove it from every locale. +3. When adding a new language, add its `lang/.json` file and register + it in both `src/i18n/index.js` and `src/i18n/datetime.js`. +4. If a translation is uncertain, do not silently copy English into another + locale as a placeholder. Ask for a translation decision or clearly flag + the unresolved language to the user. +5. Run `npm run i18n:check` and resolve every reported issue. This check + validates key parity, non-empty string values, locale registration, and + JSON validity. It is required before reporting i18n work as complete. + +## Completion criteria + +- All translation files contain the changed keys in every supported language. +- No translation value is empty or a placeholder copied from another locale + without an explicit decision. +- Every supported locale is registered in `src/i18n/index.js` and + `src/i18n/datetime.js`. +- `npm run i18n:check` passes. diff --git a/.github/workflows/dev_opened_or_updated.yml b/.github/workflows/dev_opened_or_updated.yml index d4175d409..f7370b842 100644 --- a/.github/workflows/dev_opened_or_updated.yml +++ b/.github/workflows/dev_opened_or_updated.yml @@ -14,6 +14,21 @@ env: permissions: {} jobs: + i18n: + permissions: + contents: read + runs-on: [self-hosted, common] + steps: + - uses: actions/checkout@v7 + with: + persist-credentials: false + - uses: actions/setup-node@v7 + with: + node-version: "24" + check-latest: true + - name: Check missing translations + run: npm run i18n:check + build-and-push: permissions: contents: read diff --git a/README.md b/README.md index 0931168a0..183346c9a 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,17 @@ When a new stable version of the Viewer is released, the `release` branch is aut ### Internationalization -When adding code in `develop` branch it will trigger an update on POEditor. +Translations live in `src/i18n/lang/.json`. The supported languages are the ones available in this directory, +and each of them must be registered in `src/i18n/index.js` and `src/i18n/datetime.js`. + +The CI fails on pull requests if a translation is missing: every key must exist, with a non-empty value, +in all supported languages. + +Run the check locally with: + +```bash +npm run i18n:check +``` ## License diff --git a/package.json b/package.json index 3091b67ef..36897358c 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "lint": "eslint --fix", "test:unit": "jest", "test:e2e": "cypress open", + "i18n:check": "node scripts/i18n-check.mjs", "release": "semantic-release" }, "dependencies": { diff --git a/scripts/i18n-check.mjs b/scripts/i18n-check.mjs new file mode 100644 index 000000000..f52a5448a --- /dev/null +++ b/scripts/i18n-check.mjs @@ -0,0 +1,115 @@ +#! /usr/bin/env node + +/* eslint-disable */ + +/** + * Check that every translation key exists, with a non-empty value, in every + * supported language. + * + * Supported languages are the ones available in `src/i18n/lang`. + * Exit with code 1 if anything is missing. + */ + +import fs from "node:fs"; +import path, { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const ROOT_DIR = path.join(__dirname, ".."); +const LANG_DIR = path.join(ROOT_DIR, "src/i18n/lang"); +const I18N_INDEX_FILE = path.join(ROOT_DIR, "src/i18n/index.js"); +const DATETIME_FILE = path.join(ROOT_DIR, "src/i18n/datetime.js"); +const LANG_FILE_REGEXP = /^([a-z]{2})\.json$/; +const IS_GITHUB_ACTIONS = process.env.GITHUB_ACTIONS === "true"; + +const LANGUAGES = fs + .readdirSync(LANG_DIR) + .map(file => file.match(LANG_FILE_REGEXP)?.[1]) + .filter(Boolean) + .sort(); + +const errors = []; + +function report(file, message) { + errors.push({ file: path.relative(ROOT_DIR, file), message }); +} + +function flatten(obj, prefix = "", acc = new Map()) { + for (const [key, value] of Object.entries(obj)) { + const fullKey = prefix ? `${prefix}.${key}` : key; + if (value !== null && typeof value === "object" && !Array.isArray(value)) { + flatten(value, fullKey, acc); + } else { + acc.set(fullKey, value); + } + } + return acc; +} + +/** + * Every key found in any language must exist with a non-empty string value + * in all languages. + */ +function checkLangFiles() { + const translations = {}; + for (const lang of LANGUAGES) { + const file = path.join(LANG_DIR, `${lang}.json`); + try { + translations[lang] = flatten(JSON.parse(fs.readFileSync(file, "utf-8"))); + } catch (error) { + report(file, `Invalid JSON: ${error.message}`); + } + } + + const allKeys = new Set( + Object.values(translations).flatMap(keys => [...keys.keys()]) + ); + + for (const [lang, keys] of Object.entries(translations)) { + const file = path.join(LANG_DIR, `${lang}.json`); + const missing = [...allKeys].filter(key => !keys.has(key)).sort(); + const empty = [...keys] + .filter(([, value]) => typeof value !== "string" || value.trim() === "") + .map(([key]) => key) + .sort(); + if (missing.length > 0) { + report(file, `${missing.length} missing key(s): ${missing.join(", ")}`); + } + if (empty.length > 0) { + report(file, `${empty.length} empty or non-string value(s): ${empty.join(", ")}`); + } + } +} + +/** + * Check that every language is registered in the given source file. + */ +function checkRegistration(file, pattern) { + const source = fs.readFileSync(file, "utf-8"); + const missing = LANGUAGES.filter(lang => !pattern(lang).test(source)); + if (missing.length > 0) { + report(file, `Language(s) not registered: ${missing.join(", ")}`); + } +} + +// ~~~{ Main }~~~ + +checkLangFiles(); +checkRegistration(I18N_INDEX_FILE, lang => new RegExp(`import\\s+${lang}\\s+from\\s+["']\\./lang/${lang}\\.json["']`)); +checkRegistration(DATETIME_FILE, lang => new RegExp(`\\b${lang}\\s*:`)); + +if (errors.length > 0) { + for (const { file, message } of errors) { + if (IS_GITHUB_ACTIONS) { + console.log(`::error file=${file}::${message}`); + } else { + console.error(`✖ ${file}: ${message}`); + } + } + console.error(`\ni18n check failed: ${errors.length} error(s) for languages [${LANGUAGES.join(", ")}].`); + process.exit(1); +} + +console.log(`i18n check passed for languages [${LANGUAGES.join(", ")}].`); diff --git a/src/i18n/lang/de.json b/src/i18n/lang/de.json index d12b95fb7..29b2d8547 100644 --- a/src/i18n/lang/de.json +++ b/src/i18n/lang/de.json @@ -24,6 +24,74 @@ "permission": "Sie haben die erforderlichen Rechte nicht.", "size": "Sie haben nicht mehr genug Speicherplatz." }, + "title": "Projektaktivität", + "historyActivityTab": "Aktivitätsverlauf", + "notificationSettingsTab": "E-Mail-Benachrichtigungen", + "activity": { + "empty": "Keine aktuellen Aktivitäten", + "title": "Aktivitätsverlauf", + "folderTitle": "Ordner:", + "newPathTitle": "Neuer Pfad:", + "oldPathTitle": "Alter Pfad:", + "roleTitle": "Rolle:", + "newPermissionTitle": "Neue Rechte:", + "oldPermissionTitle": "Alte Rechte:", + "oldNameTitle": "Alter Name:", + "newNameTitle": "Neuer Name:", + "document_created": "Datei hochgeladen:", + "document_deleted": "Datei gelöscht:", + "document_renamed": "Datei umbenannt:", + "document_moved": "Datei verschoben:", + "folder_created": "Ordner erstellt:", + "folder_deleted": "Ordner gelöscht:", + "folder_permissions_updated": "Ordnerrechte geändert:", + "folder_renamed": "Ordner umbenannt:", + "folder_moved": "Ordner verschoben:", + "cloud_invitation_sent": "Einladung gesendet an:", + "cloud_invitation_canceled": "Einladung storniert für:", + "cloud_invitation_accepted": "Einladung angenommen von:", + "cloud_invitation_denied": "Einladung abgelehnt von:", + "project_invitation_sent": "Projekteinladung gesendet an:", + "project_invitation_canceled": "Projekteinladung storniert für:", + "project_invitation_accepted": "Projekteinladung angenommen von:", + "project_invitation_denied": "Projekteinladung abgelehnt von:", + "filters": { + "title": "Filter", + "types": "Typen", + "users": "Benutzer", + "period": "Zeitraum" + }, + "roles": { + "admin": "Administrator", + "user": "Benutzer", + "guest": "Gast" + }, + "permissions": { + "default": "Standard", + "accessDenied": "Zugang verweigert", + "readOnly": "Schreibgeschützt", + "readWrite": "Lesen / schreiben" + }, + "badge": { + "document_created": "Datei hochgeladen ", + "document_deleted": "Datei gelöscht ", + "document_renamed": "Datei umbenannt ", + "document_moved": "Datei verschoben ", + "folder_created": "Ordner erstellt ", + "folder_deleted": "Ordner gelöscht ", + "folder_permissions_updated": "Ordnerrechte geändert", + "folder_renamed": "Ordner umbenannt", + "folder_moved": "Ordner verschoben", + "cloud_invitation_sent": "Einladung gesendet", + "cloud_invitation_canceled": "Einladung storniert", + "cloud_invitation_accepted": "Einladung angenommen", + "cloud_invitation_denied": "Einladung abgelehnt", + "project_invitation_sent": "Projekteinladung gesendet", + "project_invitation_canceled": "Projekteinladung storniert", + "project_invitation_accepted": "Projekteinladung angenommen", + "project_invitation_denied": "Projekteinladung abgelehnt" + } + }, "notifications": { "title": "Einstellungen Benachrichtigung per Email", "headerText": "Die Projektkonfiguration auf BIMData ermöglicht die Anpassung der Art und Häufigkeit der Benachrichtigungen für eine personalisierte Nachbearbeitung", @@ -130,6 +198,10 @@ "previewModelButtonText": "Vorschau", "createPhotosphereButtonText": "Als Photosphere festlegen" }, + "FileNameCell": { + "modelFile": "Modell", + "photosphereFile": "Photosphäre" + }, "FilesActionBar": { "moveButtonText": "Verschieben nach" }, @@ -141,13 +213,16 @@ "FilesManager": { "title": "Projektdokumente", "createModelNotification": "Vorlage erfolgreich erstellt", + "createModelsNotification": "Modelle erfolgreich erstellt", "structureImport": "Eine GED-Struktur importieren", + "removeModelsNotification": "Modelle erfolgreich entfernt", "gedDownload": "EDM herunterladen", "folderImport": "Einen Ordner importieren", "foldersTab": "Ordner", "filesTab": "Dateien", "visasTab": "Meine Visum", - "createPhotosphereNotification": "Photosphere erfolgreich erstellt" + "createPhotosphereNotification": "Photosphere erfolgreich erstellt", + "createPhotospheresNotification": "Photosphären erfolgreich erstellt" }, "FilesManagerOnboarding": { "text": "Erste Datei hochladen", @@ -218,7 +293,9 @@ "submitButtonText": "Einladen", "successNotifText": "Einladung versendet", "successUserToAdmin": "Der Nutzer wurde zum Administrator befördert.", - "projectUserAlreadyExistError": "Der Nutzer ist bereits in Ihren Projekt." + "projectUserAlreadyExistError": "Der Nutzer ist bereits in Ihren Projekt.", + "spaceUserAlreadyExistError": "Der Benutzer {email} ist bereits im Raum", + "spaceAdminAlreadyExistError": "Der Benutzer {email} ist bereits Administrator des Raums" }, "ModelActionsCell": { "addTagsButtonText": "Tags hinzufügen", @@ -230,7 +307,8 @@ "addLocationButtonText": "Nachfragen" }, "ModelLocationForm": { - "addressInputPlaceholder": "Adresse eingeben" + "addressInputPlaceholder": "Adresse eingeben", + "applyToAllModels": "Auf alle Modelle anwenden" }, "ModelsActionBar": { "mergeButtonText": "Zusammenschließen" @@ -360,6 +438,7 @@ "title": "Verwaltung der Gruppenmitglieder" }, "Errors": { + "logsFetchError": "Projektprotokolle konnten nicht abgerufen werden", "spacesFetchError": "Unmöglich, die Bereichsliste abzurufen", "spaceCreateError": "Fehler beim Erstellen des Bereichs", "spaceUpdateError": "Fehler bei der Aktualisierung des Bereichs", @@ -675,6 +754,7 @@ "deletedUser": "Gelöschter Nutzer", "validatorList": { "accept": "Bestätigt", + "delayed": "Verspätet", "deny": "Abgelehnt", "commented": "Kommentiert", "pending": "Ausstehend", @@ -682,6 +762,15 @@ "refresh": "Die Bestätigung neu starten" } }, + "VisaValidatorCell": { + "title": "Details der Validatoren", + "noGroup": "Keine Gruppe", + "accept": "Bestätigt", + "delayed": "Verspätet", + "deny": "Abgelehnt", + "pending": "Ausstehend", + "multipleGroups": "{count} Gruppen" + }, "comments": { "commentary": "Kommentar", "publish": "Veröffentlichen", @@ -891,6 +980,7 @@ "t": { "add": "Hinzufügen", "amount": "Summe", + "apply": "Anwenden", "archive": "Archiv", "back": "Zurück", "cancel": "Abbrechen", @@ -901,6 +991,7 @@ "createdBy": "Erstellt von", "close": "Schließen", "date": "Datum", + "days_ago": "vor {count} Tag | vor {count} Tagen", "delete": "Löschen", "description": "Beschreibung", "download": "Herunterladen", @@ -909,9 +1000,12 @@ "error": "Fehler", "export": "Exportieren", "file": "Datei", + "filters": "Filter", "folder": "Ordner", + "hours_ago": "vor {count} Stunde | vor {count} Stunden", "import": "Importieren", "invalidName": "Ungültiger Name", + "just_now": "Gerade eben", "leave": "Verlassen", "modifiedOn": "Geändert am", "modify": "Ändern", @@ -920,21 +1014,25 @@ "open": "Öffnen", "or": "oder", "rename": "Umbenennen", + "reset": "Zurücksetzen", "search": "Suchen", "size": "Größe", "space": "Raum", "status": "Status", "success": "Erfolg", + "today": "Heute", "type": "Art", "unarchive": "Dearchivieren", "validate": "Bestätigen", "verify": "Verifizieren", + "yesterday": "Gestern", "exportXlsx": "Nach Excel exportieren", "project": "Projekt", "projects": "Projekte", "spaces": "Bereiche", "notSpecified": "Nicht angegeben", "location": "Speicherort", + "minutes_ago": "vor {count} Minute | vor {count} Minuten", "rootFolder": "Stammordner", "dueDate": "Abgabetermin", "emptyFile": "Keine Dateien", diff --git a/src/i18n/lang/en.json b/src/i18n/lang/en.json index 34c903bab..572a9b786 100644 --- a/src/i18n/lang/en.json +++ b/src/i18n/lang/en.json @@ -198,6 +198,10 @@ "previewModelButtonText": "Preview", "createPhotosphereButtonText": "Define as photosphere" }, + "FileNameCell": { + "modelFile": "Model", + "photosphereFile": "Photosphere" + }, "FilesActionBar": { "moveButtonText": "Move to" }, @@ -209,13 +213,16 @@ "FilesManager": { "title": "Project Files", "createModelNotification": "Model successfully created", + "createModelsNotification": "Models created successfully", "structureImport": "Import a GED structure", + "removeModelsNotification": "Models removed successfully", "gedDownload": "Download the GED", "folderImport": "Import a folder", "foldersTab": "Folders", "filesTab": "Documents", "visasTab": "Visas", - "createPhotosphereNotification": "Photosphere created successfully" + "createPhotosphereNotification": "Photosphere created successfully", + "createPhotospheresNotification": "Photospheres created successfully" }, "FilesManagerOnboarding": { "text": "Upload your first file", @@ -300,7 +307,8 @@ "addLocationButtonText": "Fill in" }, "ModelLocationForm": { - "addressInputPlaceholder": "Enter address" + "addressInputPlaceholder": "Enter address", + "applyToAllModels": "Apply to all models" }, "ModelsActionBar": { "mergeButtonText": "Merge" @@ -430,6 +438,7 @@ "title": "Manage group members" }, "Errors": { + "logsFetchError": "Unable to retrieve project logs", "spacesFetchError": "Fail to fetch spaces", "spaceCreateError": "Fail to create space", "spaceUpdateError": "Fail to update space", @@ -745,6 +754,7 @@ "deletedUser": "User removed", "validatorList": { "accept": "Validated", + "delayed": "Overdue", "deny": "Refused", "commented": "Commented", "pending": "Awaiting", @@ -752,6 +762,15 @@ "refresh": "Reset validation" } }, + "VisaValidatorCell": { + "title": "Validator details", + "noGroup": "No group", + "accept": "Validated", + "delayed": "Overdue", + "deny": "Refused", + "pending": "Pending", + "multipleGroups": "{count} groups" + }, "comments": { "commentary": "Commentry", "publish": "Publish", @@ -972,6 +991,7 @@ "createdBy": "Created by", "close": "Close", "date": "Date", + "days_ago": "{count} day ago | {count} days ago", "delete": "Delete", "description": "Description", "download": "Download", @@ -982,8 +1002,10 @@ "file": "File", "filters": "Filters", "folder": "Folder", + "hours_ago": "{count} hour ago | {count} hours ago", "import": "Import", "invalidName": "Invalid name", + "just_now": "Just now", "leave": "Leave", "modifiedOn": "Last modified", "modify": "Edit", @@ -998,16 +1020,19 @@ "space": "Space", "status": "Status", "success": "Success", + "today": "Today", "type": "Type", "unarchive": "Unarchive", "validate": "Validate", "verify": "Check", + "yesterday": "Yesterday", "exportXlsx": "Export as xlsx", "project": "Project", "projects": "Projects", "spaces": "Spaces", "notSpecified": "Not specified", "location": "Location", + "minutes_ago": "{count} minute ago | {count} minutes ago", "rootFolder": "Root folder", "dueDate": "Due date", "emptyFile": "No file", diff --git a/src/i18n/lang/es.json b/src/i18n/lang/es.json index a17dc7201..f2b10b3e8 100644 --- a/src/i18n/lang/es.json +++ b/src/i18n/lang/es.json @@ -24,6 +24,74 @@ "permission": "No tiene los derechos requeridos", "size": "Ya no tiene suficiente espacio de almacenamiento" }, + "title": "Actividad del proyecto", + "historyActivityTab": "Historial de actividad", + "notificationSettingsTab": "Notificaciones por correo", + "activity": { + "empty": "No hay actividad reciente", + "title": "Historial de actividad", + "folderTitle": "Carpeta:", + "newPathTitle": "Nueva ruta:", + "oldPathTitle": "Ruta anterior:", + "roleTitle": "Rol:", + "newPermissionTitle": "Nuevos derechos:", + "oldPermissionTitle": "Derechos anteriores:", + "oldNameTitle": "Nombre anterior:", + "newNameTitle": "Nuevo nombre:", + "document_created": "Archivo subido:", + "document_deleted": "Archivo eliminado:", + "document_renamed": "Archivo renombrado:", + "document_moved": "Archivo movido:", + "folder_created": "Carpeta creada:", + "folder_deleted": "Carpeta eliminada:", + "folder_permissions_updated": "Permisos de la carpeta modificados:", + "folder_renamed": "Carpeta renombrada:", + "folder_moved": "Carpeta movida:", + "cloud_invitation_sent": "Invitación enviada a:", + "cloud_invitation_canceled": "Invitación cancelada para:", + "cloud_invitation_accepted": "Invitación aceptada por:", + "cloud_invitation_denied": "Invitación rechazada por:", + "project_invitation_sent": "Invitación al proyecto enviada a:", + "project_invitation_canceled": "Invitación al proyecto cancelada para:", + "project_invitation_accepted": "Invitación al proyecto aceptada por:", + "project_invitation_denied": "Invitación al proyecto rechazada por:", + "filters": { + "title": "Filtros", + "types": "Tipos", + "users": "Usuarios", + "period": "Periodo" + }, + "roles": { + "admin": "Administrador", + "user": "Usuario", + "guest": "Invitado" + }, + "permissions": { + "default": "Por defecto", + "accessDenied": "Acceso denegado", + "readOnly": "Solo lectura", + "readWrite": "Lectura / Escritura" + }, + "badge": { + "document_created": "Archivo subido ", + "document_deleted": "Archivo eliminado ", + "document_renamed": "Archivo renombrado ", + "document_moved": "Archivo movido ", + "folder_created": "Carpeta creada ", + "folder_deleted": "Carpeta eliminada ", + "folder_permissions_updated": "Permisos de la carpeta modificados", + "folder_renamed": "Carpeta renombrada", + "folder_moved": "Carpeta movida", + "cloud_invitation_sent": "Invitación enviada", + "cloud_invitation_canceled": "Invitación cancelada", + "cloud_invitation_accepted": "Invitación aceptada", + "cloud_invitation_denied": "Invitación rechazada", + "project_invitation_sent": "Invitación al proyecto enviada", + "project_invitation_canceled": "Invitación al proyecto cancelada", + "project_invitation_accepted": "Invitación al proyecto aceptada", + "project_invitation_denied": "Invitación al proyecto rechazada" + } + }, "notifications": { "title": "Ajustes de notificaciones por correo electrónico", "headerText": "Los ajustes del proyecto de BIMData permiten gestionar los tipos y la frecuencia de las notificaciones para un seguimiento personalizado.", @@ -130,6 +198,10 @@ "previewModelButtonText": "Vista previa", "createPhotosphereButtonText": "Definir como Photosphere" }, + "FileNameCell": { + "modelFile": "Modelo", + "photosphereFile": "Fotosfera" + }, "FilesActionBar": { "moveButtonText": "Moverse hacia" }, @@ -141,13 +213,16 @@ "FilesManager": { "title": "Documentos del proyecto", "createModelNotification": "Modelo creado con éxito", + "createModelsNotification": "Modelos creados con éxito", "structureImport": "Importar una estructura EDM", + "removeModelsNotification": "Modelos retirados con éxito", "gedDownload": "Descargar el EDM", "folderImport": "Importar una carpeta", "foldersTab": "Archivos", "filesTab": "Documentos", "visasTab": "Confirmaciones", - "createPhotosphereNotification": "Photosphere creada con éxito" + "createPhotosphereNotification": "Photosphere creada con éxito", + "createPhotospheresNotification": "Fotosferas creadas con éxito" }, "FilesManagerOnboarding": { "text": "Suba su primer archivo", @@ -218,7 +293,9 @@ "submitButtonText": "Invitar", "successNotifText": "Invitación enviada", "successUserToAdmin": "El usuario ha sido ascendido a administrador", - "projectUserAlreadyExistError": "El usuario ya está en su proyecto" + "projectUserAlreadyExistError": "El usuario ya está en su proyecto", + "spaceUserAlreadyExistError": "El usuario {email} ya está en el espacio", + "spaceAdminAlreadyExistError": "El usuario {email} ya es administrador del espacio" }, "ModelActionsCell": { "addTagsButtonText": "Añadir etiquetas", @@ -230,7 +307,8 @@ "addLocationButtonText": "Infórmese" }, "ModelLocationForm": { - "addressInputPlaceholder": "Introduzca una dirección" + "addressInputPlaceholder": "Introduzca una dirección", + "applyToAllModels": "Aplicar a todos los modelos" }, "ModelsActionBar": { "mergeButtonText": "Fusionar" @@ -360,6 +438,7 @@ "title": "Gestión de los miembros del grupo" }, "Errors": { + "logsFetchError": "Imposible recuperar los registros del proyecto", "spacesFetchError": "Imposible recuperar la lista de espacios", "spaceCreateError": "Error durante la creación del espacio", "spaceUpdateError": "Error de puesta en marcha del espacio", @@ -675,6 +754,7 @@ "deletedUser": "Usuario eliminado", "validatorList": { "accept": "Confirmado", + "delayed": "Con retraso", "deny": "Rechazado", "commented": "Comentado", "pending": "En espera", @@ -682,6 +762,15 @@ "refresh": "Reiniciar la confirmación" } }, + "VisaValidatorCell": { + "title": "Detalles de los validadores", + "noGroup": "Sin grupo", + "accept": "Confirmado", + "delayed": "Con retraso", + "deny": "Rechazado", + "pending": "En espera", + "multipleGroups": "{count} grupos" + }, "comments": { "commentary": "Comentario", "publish": "Publicar", @@ -891,6 +980,7 @@ "t": { "add": "Añadir", "amount": "Monto", + "apply": "Aplicar", "archive": "Archivar", "back": "Retorno", "cancel": "Cancelar", @@ -901,6 +991,7 @@ "createdBy": "Creado por", "close": "Cerrar", "date": "Fecha", + "days_ago": "hace {count} día | hace {count} días", "delete": "Eliminar", "description": "Descripción", "download": "Descargar", @@ -909,9 +1000,12 @@ "error": "Error", "export": "Exportar", "file": "Archivo", + "filters": "Filtros", "folder": "Carpeta", + "hours_ago": "hace {count} hora | hace {count} horas", "import": "Importar", "invalidName": "Nombre no válido", + "just_now": "Justo ahora", "leave": "Salir", "modifiedOn": "Modificado el", "modify": "Editar", @@ -920,21 +1014,25 @@ "open": "Abrir", "or": "o", "rename": "Renombrar", + "reset": "Restablecer", "search": "Buscar", "size": "Tamaño", "space": "Espacio", "status": "Estado", "success": "Éxito", + "today": "Hoy", "type": "Tipo", "unarchive": "Desarchivar", "validate": "Validar", "verify": "Verificar", + "yesterday": "Ayer", "exportXlsx": "Exportar en Excél", "project": "Proyecto", "projects": "Proyectos", "spaces": "Espacios", "notSpecified": "No especificado", "location": "Ubicación", + "minutes_ago": "hace {count} minuto | hace {count} minutos", "rootFolder": "Carpeta raíz", "dueDate": "Fecha de vencimiento", "emptyFile": "Sin archivo", diff --git a/src/i18n/lang/it.json b/src/i18n/lang/it.json index ac654b924..7460730e5 100644 --- a/src/i18n/lang/it.json +++ b/src/i18n/lang/it.json @@ -23,6 +23,141 @@ "uploadDisableMessage": { "permission": "Non avete i diritti richiesti.", "size": "Non avete più spazio sufficiente di salvataggio a disposizione." + }, + "title": "Attività del progetto", + "historyActivityTab": "Cronologia delle attività", + "notificationSettingsTab": "Notifiche e-mail", + "activity": { + "empty": "Nessuna attività recente", + "title": "Cronologia delle attività", + "folderTitle": "Cartella:", + "newPathTitle": "Nuovo percorso:", + "oldPathTitle": "Percorso precedente:", + "roleTitle": "Ruolo:", + "newPermissionTitle": "Nuovi diritti:", + "oldPermissionTitle": "Diritti precedenti:", + "oldNameTitle": "Nome precedente:", + "newNameTitle": "Nuovo nome:", + "document_created": "File caricato:", + "document_deleted": "File eliminato:", + "document_renamed": "File rinominato:", + "document_moved": "File spostato:", + "folder_created": "Cartella creata:", + "folder_deleted": "Cartella eliminata:", + "folder_permissions_updated": "Permessi della cartella modificati:", + "folder_renamed": "Cartella rinominata:", + "folder_moved": "Cartella spostata:", + "cloud_invitation_sent": "Invito inviato a:", + "cloud_invitation_canceled": "Invito annullato per:", + "cloud_invitation_accepted": "Invito accettato da:", + "cloud_invitation_denied": "Invito rifiutato da:", + "project_invitation_sent": "Invito al progetto inviato a:", + "project_invitation_canceled": "Invito al progetto annullato per:", + "project_invitation_accepted": "Invito al progetto accettato da:", + "project_invitation_denied": "Invito al progetto rifiutato da:", + "filters": { + "title": "Filtri", + "types": "Tipi", + "users": "Utenti", + "period": "Periodo" + }, + "roles": { + "admin": "Amministratore", + "user": "Utente", + "guest": "Ospite" + }, + "permissions": { + "default": "Predefinito", + "accessDenied": "Accesso negato", + "readOnly": "Sola lettura", + "readWrite": "Lettura/Scrittura" + }, + "badge": { + "document_created": "File caricato ", + "document_deleted": "File eliminato ", + "document_renamed": "File rinominato ", + "document_moved": "File spostato ", + "folder_created": "Cartella creata ", + "folder_deleted": "Cartella eliminata ", + "folder_permissions_updated": "Permessi della cartella modificati", + "folder_renamed": "Cartella rinominata", + "folder_moved": "Cartella spostata", + "cloud_invitation_sent": "Invito inviato", + "cloud_invitation_canceled": "Invito annullato", + "cloud_invitation_accepted": "Invito accettato", + "cloud_invitation_denied": "Invito rifiutato", + "project_invitation_sent": "Invito al progetto inviato", + "project_invitation_canceled": "Invito al progetto annullato", + "project_invitation_accepted": "Invito al progetto accettato", + "project_invitation_denied": "Invito al progetto rifiutato" + } + }, + "notifications": { + "title": "Impostazioni delle notifiche e-mail", + "headerText": "Le impostazioni del progetto BIMData consentono di gestire i tipi e la frequenza delle notifiche per un monitoraggio personalizzato.", + "validateButton": "Conferma le impostazioni del progetto", + "settings": { + "general": { + "sendNever": "Non inviare mai e-mail di notifica", + "sendEventOccurs": "Quando si verifica l'evento", + "sendEvery": "Invia un'e-mail ogni:", + "sendAt": "Alle:", + "monday": "Lunedì", + "tuesday": "Martedì", + "wednesday": "Mercoledì", + "thursday": "Giovedì", + "friday": "Venerdì", + "saturday": "Sabato", + "sunday": "Domenica", + "successNotifText": "Notifiche aggiornate!", + "errorNotifText": "Aggiornamento delle notifiche non riuscito.", + "successDeleteNotifText": "Le notifiche sono state disattivate.", + "errorDeleteNotifText": "Si è verificato un errore durante la disattivazione delle notifiche." + }, + "activity": { + "title": "Notifiche sull'attività del progetto", + "recipientsNotificationsText": "Destinatari", + "recipientsNotificationsButton": "Destinatari delle notifiche", + "ged": { + "title": "File", + "fileUpload": "Caricamento di un file", + "fileDeletion": "Eliminazione di un file", + "newVersion": "Nuova versione", + "folderCreation": "Creazione di una cartella", + "folderDeletion": "Eliminazione di una cartella" + }, + "visa": { + "title": "VISA", + "visaCreation": "Creazione di un visto", + "visaDeletion": "Eliminazione di un visto", + "visaValidation": "Approvazione di un visto", + "visaRejection": "Rifiuto di un visto" + }, + "bcf": { + "title": "BCF", + "bcfCreation": "Creazione BCF", + "bcfDeletion": "Eliminazione BCF" + }, + "otherEvents": { + "title": "Altri eventi", + "acceptInvit": "Accettazione di un invito", + "removeModels": "Rimozione di modelli", + "createMetaBuilding": "Creazione di un meta-building", + "deleteMetaBuilding": "Eliminazione di un meta-building" + } + } + }, + "recipients": { + "title": "Destinatari delle notifiche", + "text": "Seleziona i gruppi di utenti che riceveranno le notifiche via e-mail.", + "noGroupsText": "Nessun gruppo è attualmente configurato per ricevere notifiche.", + "validateButtonText": "Conferma i destinatari", + "createGroupButtonText": "Crea un gruppo" + }, + "timezone": { + "title": "Selezione del fuso orario", + "validateButtonText": "Conferma il fuso orario" + } } }, "LanguageSelector": { @@ -53,14 +188,20 @@ }, "FileActionsCell": { "openViewerButtonText": "Apri nel visualizzatore", + "previewModelButtonText": "Anteprima", "addTagsButtonText": "Aggiungi tag", "addVersionButtonText": "Aggiungi versione", "manageAccessButtonText": "Gestisci l'accesso", "createModelButtonText": "Definire come modello", + "createPhotosphereButtonText": "Definire come fotosfera", "removeModelButtonText": "Rimuovi dai modelli", "versioningButtonText": "Aggiungi una versione", "visaButtonText": "Richiesta di convalida" }, + "FileNameCell": { + "modelFile": "Modello", + "photosphereFile": "Fotosfera" + }, "FilesActionBar": { "moveButtonText": "Sposta in" }, @@ -72,9 +213,16 @@ "FilesManager": { "title": "File del progetto", "createModelNotification": "Modello creato correttamente", + "createModelsNotification": "Modelli creati correttamente", + "createPhotosphereNotification": "Fotosfera creata correttamente", + "createPhotospheresNotification": "Fotosfere create correttamente", "structureImport": "Importare una struttura GED", + "removeModelsNotification": "Modelli rimossi correttamente", "gedDownload": "Scaricare la GED", - "folderImport": "Importare una cartella" + "folderImport": "Importare una cartella", + "foldersTab": "Cartelle", + "filesTab": "Documenti", + "visasTab": "Visti" }, "FilesManagerOnboarding": { "text": "Carica il tuo primo file", @@ -99,7 +247,12 @@ "title": "Gestisci i diritti di accesso", "rightsHeader": "Diritti", "membersHeader": "Membri", - "groupHeader": "Gruppo" + "groupHeader": "Gruppo", + "propagate": "Per propagare i diritti alle sottocartelle (in modo ricorsivo), seleziona la casella prima di confermare il modulo.", + "safeZoneModal": { + "title": "Attenzione!", + "text": "I diritti di accesso sono stati modificati ma non salvati; sei sicuro di voler chiudere il gestore dei diritti? (Le modifiche andranno perse)" + } }, "FolderSelector": { "selectedFolder": "Cartella selezionata", @@ -131,6 +284,9 @@ "InvitationForm": { "emailInputPlaceholder": "Indirizzo e-mail", "emailInputErrorMessage": "E-mail non valida", + "projectUserAlreadyExistError": "L'utente {email} è già nel progetto", + "spaceUserAlreadyExistError": "L'utente {email} è già nello spazio", + "spaceAdminAlreadyExistError": "L'utente {email} è già amministratore dello spazio", "roleInputLabel": "Ruolo", "roles": { "admin": "Amministratore", @@ -151,7 +307,8 @@ "addLocationButtonText": "Riempi" }, "ModelLocationForm": { - "addressInputPlaceholder": "Inserisci l'indirizzo" + "addressInputPlaceholder": "Inserisci l'indirizzo", + "applyToAllModels": "Applica a tutti i modelli" }, "ModelsActionBar": { "mergeButtonText": "Unisci" @@ -172,6 +329,7 @@ "archive": "Archivia", "dwg": "DWG", "metaBuildings": "Meta Buildings", + "photosphereBuildings": "Edifici fotosfera", "upload": "Upload" } }, @@ -188,6 +346,8 @@ }, "ModelsTable": { "headers": { + "tags": "Tag", + "location": "Posizione", "version": "Versione" }, "emptyTablePlaceholder": { @@ -214,6 +374,8 @@ "free": "Gratuito" }, "SpaceCardActionMenu": { + "addToFavorite": "Aggiungi ai preferiti", + "removeFavorite": "Rimuovi dai preferiti", "removeImageButtonText": "Rimuovi immagine" }, "SpaceCardDeleteGuard": { @@ -232,7 +394,8 @@ "admins": "Amministratori", "users": "Utenti" }, - "addAdminButtonText": "Aggiungi nuovo amministratore" + "addAdminButtonText": "Aggiungi nuovo amministratore", + "addUserButtonText": "Aggiungi un utente" }, "UserCard": { "self": "tu" @@ -244,8 +407,10 @@ } }, "UserRoleBadge": { - "admin": "Amministratore", - "user": "Utente", + "spaceAdmin": "Admin spazio", + "projectAdmin": "Admin progetto", + "spaceUser": "Utente spazio", + "projectUser": "Utente progetto", "guest": "Ospite" }, "UsersManagerOnboarding": { @@ -263,6 +428,7 @@ "FolderPermissionSelector": { "label": "Tutti", "options": { + "default": "Predefinito", "accessDenied": "Accesso negato", "readOnly": "Sola lettura", "readWrite": "Lettura/Scrittura" @@ -271,15 +437,8 @@ "GroupMembersSelector": { "title": "Gestisci membri del gruppo" }, - "GroupPermissionSelector": { - "options": { - "accessDenied": "Accesso negato", - "readOnly": "Sola lettura", - "readWrite": "Lettura/scrittura", - "default": "Predefinito" - } - }, "Errors": { + "logsFetchError": "Impossibile recuperare i log del progetto", "spacesFetchError": "Impossibile recuperare gli spazi", "spaceCreateError": "Impossibile creare spazio", "spaceUpdateError": "Impossibile caricare spazio", @@ -343,6 +502,7 @@ "fileFetchError": "Si è verificato un errore durante il recupero di questo file/cartella", "bcfImportError": "Si è verificato un errore durante l'importazione", "bcfExportError": "L'esportazione non è riuscita...", + "bcfExportXlsxError": "Esportazione xlsx non riuscita...", "fileVersionsFetchError": "Impossibile recuperare le versioni di questo documento", "fileVersionsMakeHeadError": "Aggiornamento del documento alla versione attuale non riuscito", "fileVersionDelete": "Eliminazione del documento non riuscita", @@ -372,9 +532,7 @@ "paused": "IN PAUSA" }, "Dashboard": { - "spacesTileTitle": "Spazi attivi", "spacesTileBottomText": "Vedi gli spazi", - "projectsTileTitle": "Progetti attivi", "projectsTileBottomText": "Vedi i progetti", "subscriptionsTileTitle": "Fatturazione", "subscriptionsTileText": "Qui trovi tutte le tue fatture e i tuoi ultimi dati di pagamento.", @@ -596,7 +754,7 @@ "deletedUser": "Utente eliminato", "validatorList": { "accept": "Convalidato", - "delegate": "Delegato", + "delayed": "In ritardo", "deny": "Respinto", "commented": "Commentato", "pending": "In attesa", @@ -604,6 +762,15 @@ "refresh": "Ripristina la convalida" } }, + "VisaValidatorCell": { + "title": "Dettagli dei revisori", + "noGroup": "Nessun gruppo", + "accept": "Convalidato", + "delayed": "In ritardo", + "deny": "Respinto", + "pending": "In attesa", + "multipleGroups": "{count} gruppi" + }, "comments": { "commentary": "Commento", "publish": "Pubblica", @@ -613,6 +780,17 @@ "selectionValidator": { "warning": "Questo utente non dispone dell'autorizzazione per accedere al file." }, + "view": { + "visaPending": "Visto in attesa", + "visaClosed": "Visto chiuso", + "myRequests": "Le mie richieste", + "valid": "Convalidato", + "pending": "In attesa", + "denied": "Respinto", + "overdue": "In ritardo", + "openVisaBtn": "Apri il visto", + "validateVisaBtn": "Convalida il visto" + }, "noVisa": "Nessun VISA creato", "accept": "Accetta", "close": "Chiudi", @@ -655,7 +833,9 @@ "noSearchResultsText": "La tua ricerca non ha restituito nessun risultato. Verifica i filtri o le parole chiave.", "importBcfNotificationSuccess": "File BCF importato correttamente", "importBcfNotificationError": "Errore durante l'importazione del file BCF", + "deleteBcfTitle": "Elimina {bcfCount} BCF", "exportBcfNotificationSuccess": "File BCF esportato correttamente", + "exportBcfXlsxNotificationSuccess": "Esportazione xlsx riuscita!", "exportBcfNotificationError": "Errore durante l'esportazione del file BCF", "selectedTopicCount": "Numero di BCF selezionati", "deleteBcfText": "Stai per eliminare la selezione da BCF", @@ -745,7 +925,8 @@ "list": "Lista dei tag", "addTag": "aggiungere un tag", "addNewTag": "Aggiungere un nuovo tag", - "deleteTag": "Cancellare questo tag" + "deleteTag": "Cancellare questo tag", + "emptyTag": "Nessun tag" }, "SubscriptionModal": { "title": "Ottenere più spazio", @@ -783,20 +964,30 @@ "invitAccepted": "Invito accetato", "invitDenied": "Invito rifiutato", "invitPending": "Invito in sospeso", - "goToProjectLong": "Accedi al progetto", - "goToProjectShort": "Progetto", - "goToSpaceLong": "Accedi allo spazio", - "goToSpaceShort": "Spazio" + "goToProject": "Apri il progetto", + "goToSpace": "Apri lo spazio" }, "DocumentViewer": { "viewerButton": "Apri nel visualizzatore", "docPlaceholder": "Nessuna anteprima per questo documento" }, + "MainModelSelector": { + "title": "Scegli l'anteprima del progetto" + }, + "UserFavoritesManager": { + "title": "Spazi / Progetti preferiti" + }, + "VisasDeleteModal": { + "title": "Elimina {visasCount} visti", + "message": "Stai per eliminare i visti dei seguenti file:" + }, "GroupImport": { "title": "Importare un gruppo", "selectAll": "Seleziona tutto", "notAdmin": "Devi essere un amministratore del progetto", - "noGroup": "Non ci sono gruppi in questo progetto" + "noGroup": "Non ci sono gruppi in questo progetto", + "noProject": "Non ci sono altri progetti", + "noResult": "Nessun progetto con questo nome" }, "UploadCard": { "cancelMessage": "Annullato", @@ -806,6 +997,7 @@ "t": { "add": "Aggiungi", "amount": "Importo", + "apply": "Applica", "archive": "Archivia", "back": "Indietro", "cancel": "Annulla", @@ -816,34 +1008,55 @@ "createdBy": "Creato da", "close": "Chiudi", "date": "Data", + "days_ago": "{count} giorno fa | {count} giorni fa", "delete": "Elimina", "description": "Descrizione", "download": "Scarica", + "dueDate": "Scadenza", "edit": "Modifica", + "emptyFile": "Nessun file", "emptyFolder": "Cartella vuota", + "emptyVisa": "Nessun visto", "error": "Errore", "export": "Esporta", + "exportXlsx": "Esporta in xlsx", "file": "File", + "filters": "Filtri", "folder": "Cartella", + "hours_ago": "{count} ora fa | {count} ore fa", "import": "Importa", "invalidName": "Nome non valido", + "just_now": "Proprio ora", "leave": "Esci", + "location": "Posizione", + "minutes_ago": "{count} minuto fa | {count} minuti fa", "modifiedOn": "Ultima modifica", "modify": "Modifica", "name": "Nome", + "notSpecified": "Non specificato", "ok": "OK", "open": "Apri", "or": "o", + "project": "Progetto", + "projects": "Progetti", "rename": "Rinomina", + "reset": "Reimposta", + "rootFolder": "Cartella principale", + "save": "Salva", "search": "Cerca", "size": "Dimensione", "space": "Spazio", + "spaces": "Spazi", "status": "Stato", "success": "Riuscito", + "today": "Oggi", "type": "Tipo", "unarchive": "Dearchivia", "validate": "Convalida", - "verify": "Controlla" + "validation": "Convalide", + "validator": "Revisori", + "verify": "Controlla", + "yesterday": "Ieri" }, "FolderCreationButton": { "text": "Nuova cartella" @@ -855,6 +1068,7 @@ "text": "Cambiare l'imagine" }, "FileTreePreviewModal": { - "title": "Importa la struttura del file da" + "title": "Importa la struttura del file da", + "emptySource": "Questo progetto non ha cartelle" } } \ No newline at end of file diff --git a/src/i18n/lang/nl.json b/src/i18n/lang/nl.json index 8680aa46c..6e435a2d8 100644 --- a/src/i18n/lang/nl.json +++ b/src/i18n/lang/nl.json @@ -1,7 +1,7 @@ { "OidcCallbackError": { "message": "Er heeft zich een fout voorgedaan bij de authenticatie", - "retryButtonText": "" + "retryButtonText": "Opnieuw proberen" }, "ProjectBoard": { "tabs": { @@ -19,7 +19,146 @@ }, "ProjectOverview": { "openFileUploadButtonText": "Voeg een model toe", - "forbiddenUploadNotification": "" + "forbiddenUploadNotification": "Selecteer een modelbestand: {extensions}", + "uploadDisableMessage": { + "permission": "U heeft niet de vereiste rechten", + "size": "U heeft niet genoeg opslagruimte" + }, + "title": "Projectactiviteit", + "historyActivityTab": "Activiteitengeschiedenis", + "notificationSettingsTab": "E-mailmeldingen", + "activity": { + "empty": "Geen recente activiteit", + "title": "Activiteitengeschiedenis", + "folderTitle": "Map:", + "newPathTitle": "Nieuw pad:", + "oldPathTitle": "Oud pad:", + "roleTitle": "Rol:", + "newPermissionTitle": "Nieuwe rechten:", + "oldPermissionTitle": "Oude rechten:", + "oldNameTitle": "Oude naam:", + "newNameTitle": "Nieuwe naam:", + "document_created": "Bestand geüpload:", + "document_deleted": "Bestand verwijderd:", + "document_renamed": "Bestand hernoemd:", + "document_moved": "Bestand verplaatst:", + "folder_created": "Map aangemaakt:", + "folder_deleted": "Map verwijderd:", + "folder_permissions_updated": "Maprechten gewijzigd:", + "folder_renamed": "Map hernoemd:", + "folder_moved": "Map verplaatst:", + "cloud_invitation_sent": "Uitnodiging verzonden naar:", + "cloud_invitation_canceled": "Uitnodiging geannuleerd voor:", + "cloud_invitation_accepted": "Uitnodiging geaccepteerd door:", + "cloud_invitation_denied": "Uitnodiging geweigerd door:", + "project_invitation_sent": "Projectuitnodiging verzonden naar:", + "project_invitation_canceled": "Projectuitnodiging geannuleerd voor:", + "project_invitation_accepted": "Projectuitnodiging geaccepteerd door:", + "project_invitation_denied": "Projectuitnodiging geweigerd door:", + "filters": { + "title": "Filters", + "types": "Types", + "users": "Gebruikers", + "period": "Periode" + }, + "roles": { + "admin": "Beheerder", + "user": "Gebruiker", + "guest": "Gast" + }, + "permissions": { + "default": "Standaard", + "accessDenied": "Toegang geweigerd", + "readOnly": "Alleen lezen", + "readWrite": "Lezen / schrijven" + }, + "badge": { + "document_created": "Bestand geüpload ", + "document_deleted": "Bestand verwijderd ", + "document_renamed": "Bestand hernoemd ", + "document_moved": "Bestand verplaatst ", + "folder_created": "Map aangemaakt ", + "folder_deleted": "Map verwijderd ", + "folder_permissions_updated": "Maprechten gewijzigd", + "folder_renamed": "Map hernoemd", + "folder_moved": "Map verplaatst", + "cloud_invitation_sent": "Uitnodiging verzonden", + "cloud_invitation_canceled": "Uitnodiging geannuleerd", + "cloud_invitation_accepted": "Uitnodiging geaccepteerd", + "cloud_invitation_denied": "Uitnodiging geweigerd", + "project_invitation_sent": "Projectuitnodiging verzonden", + "project_invitation_canceled": "Projectuitnodiging geannuleerd", + "project_invitation_accepted": "Projectuitnodiging geaccepteerd", + "project_invitation_denied": "Projectuitnodiging geweigerd" + } + }, + "notifications": { + "title": "Instellingen e-mailmeldingen", + "headerText": "Met de BIMData-projectinstellingen beheert u de soorten en de frequentie van meldingen voor een persoonlijke opvolging.", + "validateButton": "Projectinstellingen bevestigen", + "settings": { + "general": { + "sendNever": "Nooit meldingsmails versturen", + "sendEventOccurs": "Wanneer de gebeurtenis plaatsvindt", + "sendEvery": "Een e-mail versturen elke:", + "sendAt": "Om:", + "monday": "Maandag", + "tuesday": "Dinsdag", + "wednesday": "Woensdag", + "thursday": "Donderdag", + "friday": "Vrijdag", + "saturday": "Zaterdag", + "sunday": "Zondag", + "successNotifText": "Meldingen bijgewerkt!", + "errorNotifText": "Bijwerken van meldingen mislukt.", + "successDeleteNotifText": "Meldingen zijn uitgeschakeld.", + "errorDeleteNotifText": "Er is een fout opgetreden bij het uitschakelen van meldingen." + }, + "activity": { + "title": "Meldingen over projectactiviteit", + "recipientsNotificationsText": "Ontvangers", + "recipientsNotificationsButton": "Ontvangers van meldingen", + "ged": { + "title": "Bestanden", + "fileUpload": "Bestand geüpload", + "fileDeletion": "Bestand verwijderd", + "newVersion": "Nieuwe versie", + "folderCreation": "Map aangemaakt", + "folderDeletion": "Map verwijderd" + }, + "visa": { + "title": "VISA", + "visaCreation": "Visum aangemaakt", + "visaDeletion": "Visum verwijderd", + "visaValidation": "Visum goedgekeurd", + "visaRejection": "Visum afgewezen" + }, + "bcf": { + "title": "BCF", + "bcfCreation": "BCF aangemaakt", + "bcfDeletion": "BCF verwijderd" + }, + "otherEvents": { + "title": "Andere gebeurtenissen", + "acceptInvit": "Uitnodiging geaccepteerd", + "removeModels": "Modellen verwijderd", + "createMetaBuilding": "Meta-building aangemaakt", + "deleteMetaBuilding": "Meta-building verwijderd" + } + } + }, + "recipients": { + "title": "Ontvangers van meldingen", + "text": "Selecteer de gebruikersgroepen die e-mailmeldingen ontvangen.", + "noGroupsText": "Er is momenteel geen groep ingesteld om meldingen te ontvangen.", + "validateButtonText": "Ontvangers bevestigen", + "createGroupButtonText": "Een groep aanmaken" + }, + "timezone": { + "title": "Tijdzone kiezen", + "validateButtonText": "Tijdzone bevestigen" + } + } }, "LanguageSelector": { "title": "Kies een taal" @@ -49,13 +188,19 @@ }, "FileActionsCell": { "openViewerButtonText": "In viewer openen", + "previewModelButtonText": "Voorbeeld", "addTagsButtonText": "Labels toevoegen", "addVersionButtonText": "Versie toevoegen", "manageAccessButtonText": "Toegang beheren", "createModelButtonText": "Aanmerken als model", + "createPhotosphereButtonText": "Aanmerken als fotosfeer", "removeModelButtonText": "Modellen verwijderen", - "versioningButtonText": "", - "visaButtonText": "" + "versioningButtonText": "Een versie toevoegen", + "visaButtonText": "Validatieverzoek" + }, + "FileNameCell": { + "modelFile": "Model", + "photosphereFile": "Fotosfeer" }, "FilesActionBar": { "moveButtonText": "Verplaatsen naar" @@ -68,16 +213,23 @@ "FilesManager": { "title": "Projectbestanden", "createModelNotification": "Model succesvol aangemaakt", - "structureImport": "", - "gedDownload": "", - "folderImport": "" + "createModelsNotification": "Modellen succesvol aangemaakt", + "createPhotosphereNotification": "Fotosfeer succesvol aangemaakt", + "createPhotospheresNotification": "Fotosferen succesvol aangemaakt", + "structureImport": "Een DMS-structuur importeren", + "removeModelsNotification": "Modellen succesvol verwijderd", + "gedDownload": "Het DMS downloaden", + "folderImport": "Een map importeren", + "foldersTab": "Mappen", + "filesTab": "Documenten", + "visasTab": "Visums" }, "FilesManagerOnboarding": { "text": "Upload uw eerste bestand", "uploadFileButtonText": "Upload een bestand", "createFolderButtonText": "Maak een map aan", - "GEDStructureImport": "", - "folderImport": "" + "GEDStructureImport": "Een DMS-structuur importeren", + "folderImport": "Een map importeren" }, "FilesTable": { "headers": { @@ -96,11 +248,15 @@ "rightsHeader": "Rechten", "membersHeader": "Leden", "groupHeader": "Groep", - "propagate": "" + "propagate": "Vink het vakje aan voordat u het formulier bevestigt om de rechten (recursief) door te geven aan submappen.", + "safeZoneModal": { + "title": "Let op!", + "text": "De toegangsrechten zijn gewijzigd maar niet opgeslagen; weet u zeker dat u de rechtenbeheerder wilt sluiten? (De wijzigingen gaan verloren)" + } }, "FolderSelector": { "selectedFolder": "Geselecteerde map", - "moveHere": "" + "moveHere": "Hierheen verplaatsen" }, "GroupCardActionMenu": { "changeColorButtonText": "Kleur veranderen" @@ -128,6 +284,9 @@ "InvitationForm": { "emailInputPlaceholder": "E-mailadres", "emailInputErrorMessage": "Ongeldig e-mailadres", + "projectUserAlreadyExistError": "Gebruiker {email} maakt al deel uit van het project", + "spaceUserAlreadyExistError": "Gebruiker {email} maakt al deel uit van de ruimte", + "spaceAdminAlreadyExistError": "Gebruiker {email} is al beheerder van de ruimte", "roleInputLabel": "Rol", "roles": { "admin": "Beheerder", @@ -135,7 +294,8 @@ "guest": "Gast" }, "submitButtonText": "Uitnodiging versturen", - "successNotifText": "Uitnodiging verzonden" + "successNotifText": "Uitnodiging verzonden", + "successUserToAdmin": "De gebruiker is nu beheerder" }, "ModelActionsCell": { "addTagsButtonText": "Labels toevoegen", @@ -147,7 +307,8 @@ "addLocationButtonText": "Invullen" }, "ModelLocationForm": { - "addressInputPlaceholder": "Voer het adres in" + "addressInputPlaceholder": "Voer het adres in", + "applyToAllModels": "Toepassen op alle modellen" }, "ModelsActionBar": { "mergeButtonText": "Samenvoegen" @@ -168,6 +329,7 @@ "archive": "Archieven", "dwg": "DWG", "metaBuildings": "Meta-gebouwen", + "photosphereBuildings": "Fotosfeer-gebouwen", "upload": "Uploaden" } }, @@ -184,11 +346,13 @@ }, "ModelsTable": { "headers": { + "tags": "Tags", + "location": "Locatie", "version": "Versie" }, "emptyTablePlaceholder": { - "text": "", - "textPdf": "" + "text": "Geen model", + "textPdf": "Klik in het menu \"bestand\" van het DMS op \"Aanmerken als model\" om uw pdf-plannen beschikbaar te maken in het modellenbeheer." } }, "ProjectCardDeleteGuard": { @@ -210,6 +374,8 @@ "free": "Gratis" }, "SpaceCardActionMenu": { + "addToFavorite": "Toevoegen aan favorieten", + "removeFavorite": "Verwijderen uit favorieten", "removeImageButtonText": "Afbeelding verwijderen" }, "SpaceCardDeleteGuard": { @@ -228,7 +394,8 @@ "admins": "Beheerders", "users": "Gebruikers" }, - "addAdminButtonText": "Nieuwe beheerder toevoegen" + "addAdminButtonText": "Nieuwe beheerder toevoegen", + "addUserButtonText": "Gebruiker toevoegen" }, "UserCard": { "self": "u" @@ -240,8 +407,10 @@ } }, "UserRoleBadge": { - "admin": "Beheerder", - "user": "Gebruiker", + "spaceAdmin": "Beheerder ruimte", + "projectAdmin": "Projectbeheerder", + "spaceUser": "Gebruiker ruimte", + "projectUser": "Projectgebruiker", "guest": "Gast" }, "UsersManagerOnboarding": { @@ -259,6 +428,7 @@ "FolderPermissionSelector": { "label": "Alle", "options": { + "default": "Standaard", "accessDenied": "Toegang geweigerd", "readOnly": "Alleen lezen", "readWrite": "Lezen / schrijven" @@ -267,15 +437,8 @@ "GroupMembersSelector": { "title": "Groepsleden beheren" }, - "GroupPermissionSelector": { - "options": { - "accessDenied": "Toegang geweigerd", - "readOnly": "Alleen lezen", - "readWrite": "Lezen / schrijven", - "default": "Standaard" - } - }, "Errors": { + "logsFetchError": "Kan de projectlogboeken niet ophalen", "spacesFetchError": "Ophalen van ruimtes mislukt", "spaceCreateError": "Aanmaken van ruimte mislukt", "spaceUpdateError": "Bijwerken van ruimte mislukt", @@ -339,27 +502,28 @@ "fileFetchError": "Fout tijdens het ophalen van deze map/dit bestand", "bcfImportError": "Er is een fout opgetreden bij het importeren", "bcfExportError": "Exporteren mislukt...", + "bcfExportXlsxError": "Xlsx-export mislukt...", "fileVersionsFetchError": "De versies van dit document kunnen niet worden opgehaald.", "fileVersionsMakeHeadError": "Naar huidige versie gaan niet gelukt.", "fileVersionDelete": "Document verwijderen mislukt", "userAlreadyExistsError": "Deze gebruiker is al een lid van de ruimte/het project.", - "tagsFetchError": "", - "tagsCreateError": "", - "tagsUpdateError": "", - "tagsDeleteError": "", - "tagsAddDocumentError": "", - "tagsDeleteDocumentError": "", - "spaceSizeFullError": "", - "spaceFetchError": "", - "projectFolderTreeFetchError": "", - "fileStructureCreateError": "", - "documentCreateError": "", + "tagsFetchError": "Kan tags niet ophalen", + "tagsCreateError": "Fout bij het aanmaken van de tag", + "tagsUpdateError": "Fout bij het wijzigen van de tag", + "tagsDeleteError": "Fout bij het verwijderen van de tag", + "tagsAddDocumentError": "Fout bij het koppelen van de tag aan het document", + "tagsDeleteDocumentError": "Fout bij het ontkoppelen van de tag van het document", + "spaceSizeFullError": "Uw opslagruimte is vol", + "spaceFetchError": "Kan de gegevens van de ruimte niet ophalen", + "projectFolderTreeFetchError": "Kan de projectlijst niet ophalen", + "fileStructureCreateError": "Kan de bestandsstructuur niet aanmaken", + "documentCreateError": "Kan dit document niet uploaden", "invitationViewFetchError": "Ophalen van uitnodigingen mislukt", - "invitationViewAcceptError": "", - "invitationViewDeclineError": "", - "folderFetchFolder": "", - "bcfDeleteError": "", - "groupImportError": "" + "invitationViewAcceptError": "Kan de uitnodiging niet accepteren", + "invitationViewDeclineError": "Kan de uitnodiging niet weigeren", + "folderFetchFolder": "Ophalen van mapgegevens mislukt", + "bcfDeleteError": "Verwijderen mislukt", + "groupImportError": "Importeren van groepen mislukt" }, "ProjectStatusBadge": { "new": "NIEUW", @@ -368,9 +532,7 @@ "paused": "GEPAUZEERD" }, "Dashboard": { - "spacesTileTitle": "Actieve ruimtes", "spacesTileBottomText": "Ruimtes bekijken", - "projectsTileTitle": "Actieve projecten", "projectsTileBottomText": "Projecten bekeken", "subscriptionsTileTitle": "Facturering en facturen", "subscriptionsTileText": "Vind hier al je rekeningen en de laatste betalingsinformatie.", @@ -424,7 +586,7 @@ "deleted": "Verwijderd", "paused": "Gepauzeerd", "custom": "Beheerd door BIMData.io", - "past_due": "" + "past_due": "Opgeschort" } }, "DatapackForm": { @@ -600,34 +762,54 @@ "refresh": "Verificatie opnieuw initialiseren" } }, + "VisaValidatorCell": { + "title": "Details van de validators", + "noGroup": "Geen groep", + "accept": "Gevalideerd", + "delayed": "Te laat", + "deny": "Geweigerd", + "pending": "In afwachting", + "multipleGroups": "{count} groepen" + }, "comments": { "commentary": "Toelichting", "publish": "Publiceren", - "commentInputPlaceholder": "", - "confirmDelete": "" + "commentInputPlaceholder": "Een reactie plaatsen", + "confirmDelete": "Deze reactie verwijderen?" }, "selectionValidator": { "warning": "Deze gebruiker heeft geen toegang tot het bestand." }, + "view": { + "visaPending": "Visum in afwachting", + "visaClosed": "Visum afgesloten", + "myRequests": "Mijn verzoeken", + "valid": "Gevalideerd", + "pending": "In afwachting", + "denied": "Geweigerd", + "overdue": "Te laat", + "openVisaBtn": "Visum openen", + "validateVisaBtn": "Visum valideren" + }, "noVisa": "Er is nog geen VISA aangemaakt", - "accept": "", - "close": "", + "accept": "Accepteren", + "close": "Afsluiten", "deny": "Weigeren", "term": "Vervaldatum", - "validator": "", - "validators": "", + "validator": "Validator", + "validators": "Validators", "safeZone": { "add": { - "text": "" + "text": "Weet u zeker dat u deze pagina wilt verlaten? Er kunnen niet-gevalideerde gegevens zijn." }, "delete": { - "text": "" + "text": "Weet u zeker dat u dit visum wilt verwijderen?" }, "close": { - "text": "" + "text": "Weet u zeker dat u dit visum wilt afsluiten?" }, "deleteComment": { - "text": "" + "text": "Weet u zeker dat u deze reactie wilt verwijderen?" } } }, @@ -649,17 +831,19 @@ "metricsEmptyText": "Voeg problemen toe om hier de bijbehorende statistieken te bekijken.", "noSearchResultsTitle": "Geen resultaten", "noSearchResultsText": "Je zoekopdracht heeft geen resultaten opgeleverd, bekijk nog een keer je filters en zoekwoorden.", - "importBcfNotificationSuccess": "", - "importBcfNotificationError": "", - "exportBcfNotificationSuccess": "", - "exportBcfNotificationError": "", - "selectedTopicCount": "", - "deleteBcfText": "", - "deleteInProgress": "", + "importBcfNotificationSuccess": "BCF-bestand succesvol geïmporteerd", + "importBcfNotificationError": "Fout bij het importeren van het BCF-bestand", + "deleteBcfTitle": "{bcfCount} BCF verwijderen", + "exportBcfNotificationSuccess": "BCF succesvol geëxporteerd", + "exportBcfXlsxNotificationSuccess": "Xlsx-export geslaagd!", + "exportBcfNotificationError": "Fout bij het exporteren van de BCF naar xlsx", + "selectedTopicCount": "Aantal geselecteerde topics", + "deleteBcfText": "U staat op het punt alle geselecteerde topics te verwijderen", + "deleteInProgress": "Bezig met verwijderen", "deleteInProgressSub": "Dit kan even duren.", - "deleteBcfNotificationSuccess": "", - "deleteBcfNotificationError": "", - "onlyAdminParameters": "" + "deleteBcfNotificationSuccess": "Topics verwijderd", + "deleteBcfNotificationError": "Fout bij het verwijderen van topics", + "onlyAdminParameters": "U moet projectbeheerder zijn" }, "GuidedTour": { "platform": { @@ -723,7 +907,7 @@ "AddVersion": "Voeg een nieuwe versie toe", "loading": { "subMessage": "Dit kan even duren.", - "downloadMessage": "", + "downloadMessage": "Bezig met laden.", "deleteMessage": "Verwijdering bezig." }, "getToHead": "Ga naar de huidige versie", @@ -737,34 +921,35 @@ "emptyArea": "Je hebt momenteel geen versiegeschiedenis voor dit bestand." }, "Tag": { - "title": "", - "list": "", - "addTag": "", - "addNewTag": "", - "deleteTag": "" + "title": "Tags beheren", + "list": "Lijst met tags", + "addTag": "een tag toevoegen", + "addNewTag": "Een nieuwe tag toevoegen", + "deleteTag": "Deze tag verwijderen", + "emptyTag": "Geen tag" }, "SubscriptionModal": { - "title": "", - "subtitle": "", + "title": "Meer ruimte krijgen", + "subtitle": "U heeft momenteel {size} opslagcapaciteit", "soon": "SOON", "upgrade": { - "title": "", - "subtitle": "" + "title": "Upgraden naar het pro-platform", + "subtitle": "Abonneer u op BIMData Pro om meer ruimte te krijgen." }, "referal": { - "title": "", - "subtitle": "" + "title": "Doe mee aan ons verwijzingsprogramma!", + "subtitle": "Deel uw verwijzingscode om ruimte te verdienen." }, "linkedin": { - "title": "", - "subtitle": "" + "title": "Koppel uw LinkedIn-account", + "subtitle": "Volg de BIMData-pagina om ruimte te verdienen." } }, "GroupMemberCard": { - "pending": "" + "pending": "Uitnodiging in behandeling" }, "UserProfile": { - "title": "", + "title": "Profielinstellingen", "loading": { "message": "Verwijdering bezig.", "subMessage": "Dit kan even duren." @@ -772,36 +957,47 @@ }, "Invitations": { "title": "Mijn uitnodigingen", - "invitCounter": "", - "acceptAll": "", - "invitedInProject": "", - "invitedInSpace": "", - "invitAccepted": "", - "invitDenied": "", - "invitPending": "", - "goToProjectLong": "Project", - "goToProjectShort": "Project", - "goToSpaceLong": "Ruimte", - "goToSpaceShort": "Ruimte" + "invitCounter": "Openstaande uitnodigingen -", + "acceptAll": "Alles accepteren", + "invitedInProject": "U bent door {sender} uitgenodigd om deel te nemen aan het project {project} in de ruimte {cloud}", + "invitedInSpace": "U bent door {sender} uitgenodigd om deel te nemen aan de ruimte {cloud}", + "invitAccepted": "Uitnodiging geaccepteerd", + "invitDenied": "Uitnodiging geweigerd", + "invitPending": "Uitnodiging in behandeling", + "goToProject": "Project openen", + "goToSpace": "Ruimte openen" }, "DocumentViewer": { - "viewerButton": "", - "docPlaceholder": "" + "viewerButton": "Openen in de viewer", + "docPlaceholder": "Geen voorbeeld voor dit document" + }, + "MainModelSelector": { + "title": "Projectvoorbeeld kiezen" + }, + "UserFavoritesManager": { + "title": "Favoriete ruimtes / projecten" + }, + "VisasDeleteModal": { + "title": "{visasCount} visums verwijderen", + "message": "U staat op het punt de visums van de volgende bestanden te verwijderen:" }, "GroupImport": { - "title": "", - "selectAll": "", - "notAdmin": "", - "noGroup": "" + "title": "Een groep importeren", + "selectAll": "Alles selecteren", + "notAdmin": "U moet projectbeheerder zijn", + "noGroup": "Er is geen groep voor dit project", + "noProject": "Er zijn geen andere projecten", + "noResult": "Geen project met deze naam" }, "UploadCard": { "cancelMessage": "Geannuleerd", "errorMessage": "Upload mislukt", - "upload": "" + "upload": "{uploaded} van {total} ({percentage}% geüpload)" }, "t": { "add": "Toevoegen", "amount": "Bedrag", + "apply": "Toepassen", "archive": "Archiveren", "back": "Terug", "cancel": "Annuleren", @@ -812,45 +1008,67 @@ "createdBy": "Gemaakt door", "close": "Sluiten", "date": "Datum", + "days_ago": "{count} dag geleden | {count} dagen geleden", "delete": "Verwijderen", "description": "Beschrijving", "download": "Downloaden", + "dueDate": "Vervaldatum", "edit": "Bewerken", + "emptyFile": "Geen bestand", "emptyFolder": "Lege map", + "emptyVisa": "Geen visum", "error": "Fout", - "export": "", - "file": "", - "folder": "", - "import": "", - "invalidName": "", - "leave": "", - "modifiedOn": "", - "modify": "", - "name": "", - "ok": "", - "open": "", - "or": "", - "rename": "", - "search": "", - "size": "", - "space": "", - "status": "", - "success": "", - "type": "", - "unarchive": "", - "validate": "", - "verify": "" + "export": "Exporteren", + "exportXlsx": "Exporteren als xlsx", + "file": "Bestand", + "filters": "Filters", + "folder": "Map", + "hours_ago": "{count} uur geleden | {count} uur geleden", + "import": "Importeren", + "invalidName": "Ongeldige naam", + "just_now": "Zojuist", + "leave": "Verlaten", + "location": "Locatie", + "minutes_ago": "{count} minuut geleden | {count} minuten geleden", + "modifiedOn": "Laatst gewijzigd", + "modify": "Bewerken", + "name": "Naam", + "notSpecified": "Niet opgegeven", + "ok": "OK", + "open": "Openen", + "or": "of", + "project": "Project", + "projects": "Projecten", + "rename": "Hernoemen", + "reset": "Resetten", + "rootFolder": "Hoofdmap", + "save": "Opslaan", + "search": "Zoeken", + "size": "Grootte", + "space": "Ruimte", + "spaces": "Ruimtes", + "status": "Status", + "success": "Gelukt", + "today": "Vandaag", + "type": "Type", + "unarchive": "Dearchiveren", + "validate": "Valideren", + "validation": "Validaties", + "validator": "Validators", + "verify": "Controleren", + "yesterday": "Gisteren" }, "FolderCreationButton": { - "text": "" + "text": "Nieuwe map" }, "FolderCreationForm": { - "title": "" + "title": "Map aanmaken" }, "SpaceCardImageButton": { - "text": "" + "text": "Afbeelding wijzigen" }, "FileTreePreviewModal": { - "title": "" + "title": "DMS-structuur importeren uit", + "emptySource": "Dit project heeft geen mappen" } } \ No newline at end of file diff --git a/src/i18n/lang/no.json b/src/i18n/lang/no.json index 610a8e9d8..3ccce14dd 100644 --- a/src/i18n/lang/no.json +++ b/src/i18n/lang/no.json @@ -1,7 +1,7 @@ { "OidcCallbackError": { "message": "En feil oppsto under autentiseringen...", - "retryButtonText": "" + "retryButtonText": "Prøv igjen" }, "ProjectBoard": { "tabs": { @@ -19,7 +19,146 @@ }, "ProjectOverview": { "openFileUploadButtonText": "Legg til en modell", - "forbiddenUploadNotification": "" + "forbiddenUploadNotification": "Velg en modellfil: {extensions}", + "uploadDisableMessage": { + "permission": "Du har ikke de nødvendige rettighetene", + "size": "Du har ikke nok lagringsplass" + }, + "title": "Prosjektaktivitet", + "historyActivityTab": "Aktivitetshistorikk", + "notificationSettingsTab": "E-postvarsler", + "activity": { + "empty": "Ingen nylig aktivitet", + "title": "Aktivitetshistorikk", + "folderTitle": "Mappe:", + "newPathTitle": "Ny bane:", + "oldPathTitle": "Gammel bane:", + "roleTitle": "Rolle:", + "newPermissionTitle": "Nye rettigheter:", + "oldPermissionTitle": "Gamle rettigheter:", + "oldNameTitle": "Gammelt navn:", + "newNameTitle": "Nytt navn:", + "document_created": "Fil lastet opp:", + "document_deleted": "Fil slettet:", + "document_renamed": "Fil omdøpt:", + "document_moved": "Fil flyttet:", + "folder_created": "Mappe opprettet:", + "folder_deleted": "Mappe slettet:", + "folder_permissions_updated": "Mappetillatelser endret:", + "folder_renamed": "Mappe omdøpt:", + "folder_moved": "Mappe flyttet:", + "cloud_invitation_sent": "Invitasjon sendt til:", + "cloud_invitation_canceled": "Invitasjon kansellert for:", + "cloud_invitation_accepted": "Invitasjon godtatt av:", + "cloud_invitation_denied": "Invitasjon avslått av:", + "project_invitation_sent": "Prosjektinvitasjon sendt til:", + "project_invitation_canceled": "Prosjektinvitasjon kansellert for:", + "project_invitation_accepted": "Prosjektinvitasjon godtatt av:", + "project_invitation_denied": "Prosjektinvitasjon avslått av:", + "filters": { + "title": "Filtre", + "types": "Typer", + "users": "Brukere", + "period": "Periode" + }, + "roles": { + "admin": "Administrator", + "user": "Bruker", + "guest": "Gjest" + }, + "permissions": { + "default": "Standard", + "accessDenied": "Ingen tilgang", + "readOnly": "Skrivebeskyttet", + "readWrite": "Lese-/skrivetilgang" + }, + "badge": { + "document_created": "Fil lastet opp ", + "document_deleted": "Fil slettet ", + "document_renamed": "Fil omdøpt ", + "document_moved": "Fil flyttet ", + "folder_created": "Mappe opprettet ", + "folder_deleted": "Mappe slettet ", + "folder_permissions_updated": "Mappetillatelser endret", + "folder_renamed": "Mappe omdøpt", + "folder_moved": "Mappe flyttet", + "cloud_invitation_sent": "Invitasjon sendt", + "cloud_invitation_canceled": "Invitasjon kansellert", + "cloud_invitation_accepted": "Invitasjon godtatt", + "cloud_invitation_denied": "Invitasjon avslått", + "project_invitation_sent": "Prosjektinvitasjon sendt", + "project_invitation_canceled": "Prosjektinvitasjon kansellert", + "project_invitation_accepted": "Prosjektinvitasjon godtatt", + "project_invitation_denied": "Prosjektinvitasjon avslått" + } + }, + "notifications": { + "title": "Innstillinger for e-postvarsler", + "headerText": "BIMData-prosjektinnstillingene lar deg administrere typer og hyppighet for varsler for en tilpasset oppfølging.", + "validateButton": "Bekreft prosjektinnstillingene", + "settings": { + "general": { + "sendNever": "Aldri send varslings-e-post", + "sendEventOccurs": "Når hendelsen inntreffer", + "sendEvery": "Send en e-post hver:", + "sendAt": "Kl.:", + "monday": "Mandag", + "tuesday": "Tirsdag", + "wednesday": "Onsdag", + "thursday": "Torsdag", + "friday": "Fredag", + "saturday": "Lørdag", + "sunday": "Søndag", + "successNotifText": "Varsler oppdatert!", + "errorNotifText": "Kunne ikke oppdatere varsler.", + "successDeleteNotifText": "Varsler er deaktivert.", + "errorDeleteNotifText": "Det oppstod en feil under deaktivering av varsler." + }, + "activity": { + "title": "Varsler om prosjektaktivitet", + "recipientsNotificationsText": "Mottakere", + "recipientsNotificationsButton": "Mottakere av varsler", + "ged": { + "title": "Filer", + "fileUpload": "Opplasting av fil", + "fileDeletion": "Sletting av fil", + "newVersion": "Ny versjon", + "folderCreation": "Oppretting av mappe", + "folderDeletion": "Sletting av mappe" + }, + "visa": { + "title": "VISA", + "visaCreation": "Oppretting av visum", + "visaDeletion": "Sletting av visum", + "visaValidation": "Godkjenning av visum", + "visaRejection": "Avslag på visum" + }, + "bcf": { + "title": "BCF", + "bcfCreation": "Oppretting av BCF", + "bcfDeletion": "Sletting av BCF" + }, + "otherEvents": { + "title": "Andre hendelser", + "acceptInvit": "Godtatt invitasjon", + "removeModels": "Fjerning av modeller", + "createMetaBuilding": "Oppretting av meta-bygning", + "deleteMetaBuilding": "Sletting av meta-bygning" + } + } + }, + "recipients": { + "title": "Mottakere av varsler", + "text": "Velg brukergruppene som skal motta e-postvarsler.", + "noGroupsText": "Ingen gruppe er for øyeblikket satt opp til å motta varsler.", + "validateButtonText": "Bekreft mottakere", + "createGroupButtonText": "Opprett en gruppe" + }, + "timezone": { + "title": "Valg av tidssone", + "validateButtonText": "Bekreft tidssonen" + } + } }, "LanguageSelector": { "title": "Velg et språk" @@ -49,13 +188,19 @@ }, "FileActionsCell": { "openViewerButtonText": "Åpne i fremviser", + "previewModelButtonText": "Forhåndsvis", "addTagsButtonText": "Legg til tags", "addVersionButtonText": "Legg til versjon", "manageAccessButtonText": "Administrer tilgang", "createModelButtonText": "Definer som modell", + "createPhotosphereButtonText": "Definer som fotosfære", "removeModelButtonText": "Fjern modeller", - "versioningButtonText": "", - "visaButtonText": "" + "versioningButtonText": "Legg til en versjon", + "visaButtonText": "Forespørsel om godkjenning" + }, + "FileNameCell": { + "modelFile": "Modell", + "photosphereFile": "Fotosfære" }, "FilesActionBar": { "moveButtonText": "Flytt til" @@ -68,16 +213,23 @@ "FilesManager": { "title": "Prosjektfiler", "createModelNotification": "Modell opprettet", - "structureImport": "", - "gedDownload": "", - "folderImport": "" + "createModelsNotification": "Modeller opprettet", + "createPhotosphereNotification": "Fotosfære opprettet", + "createPhotospheresNotification": "Fotosfærer opprettet", + "structureImport": "Importer en DMS-struktur", + "removeModelsNotification": "Modeller fjernet", + "gedDownload": "Last ned DMS", + "folderImport": "Importer en mappe", + "foldersTab": "Mapper", + "filesTab": "Dokumenter", + "visasTab": "Visum" }, "FilesManagerOnboarding": { "text": "Last opp din første fil", "uploadFileButtonText": "Last opp en fil", "createFolderButtonText": "Opprett en mappe", - "GEDStructureImport": "", - "folderImport": "" + "GEDStructureImport": "Importer en DMS-struktur", + "folderImport": "Importer en mappe" }, "FilesTable": { "headers": { @@ -96,11 +248,15 @@ "rightsHeader": "Rettigheter", "membersHeader": "Medlemmer", "groupHeader": "Gruppe", - "propagate": "" + "propagate": "For å overføre rettighetene til undermapper (rekursivt), merk av i boksen før du bekrefter skjemaet.", + "safeZoneModal": { + "title": "Advarsel!", + "text": "Tilgangsrettighetene er endret, men ikke lagret. Er du sikker på at du vil lukke rettighetsbehandleren? (Endringene vil gå tapt)" + } }, "FolderSelector": { "selectedFolder": "Valgt mappe", - "moveHere": "" + "moveHere": "Flytt hit" }, "GroupCardActionMenu": { "changeColorButtonText": "Endre farge" @@ -128,6 +284,9 @@ "InvitationForm": { "emailInputPlaceholder": "E-postadresse", "emailInputErrorMessage": "Ugyldig e-post", + "projectUserAlreadyExistError": "Brukeren {email} er allerede med i prosjektet", + "spaceUserAlreadyExistError": "Brukeren {email} er allerede med i området", + "spaceAdminAlreadyExistError": "Brukeren {email} er allerede administrator for området", "roleInputLabel": "Rolle", "roles": { "admin": "Administrator", @@ -135,7 +294,8 @@ "guest": "Gjest" }, "submitButtonText": "Send invitasjon", - "successNotifText": "Invitasjon sendt" + "successNotifText": "Invitasjon sendt", + "successUserToAdmin": "Brukeren er nå administrator" }, "ModelActionsCell": { "addTagsButtonText": "Legg til tags", @@ -147,7 +307,8 @@ "addLocationButtonText": "Fyll ut" }, "ModelLocationForm": { - "addressInputPlaceholder": "Skriv inn adresse" + "addressInputPlaceholder": "Skriv inn adresse", + "applyToAllModels": "Bruk på alle modeller" }, "ModelsActionBar": { "mergeButtonText": "Slå sammen" @@ -168,6 +329,7 @@ "archive": "Arkiver", "dwg": "DWG", "metaBuildings": "Meta-bygninger", + "photosphereBuildings": "Fotosfærebygninger", "upload": "Last opp" } }, @@ -184,11 +346,13 @@ }, "ModelsTable": { "headers": { + "tags": "Tagger", + "location": "Plassering", "version": "Versjon" }, "emptyTablePlaceholder": { - "text": "", - "textPdf": "" + "text": "Ingen modell", + "textPdf": "Klikk på «Definer som modell» i «fil»-menyen i DMS for å gjøre pdf-tegningene dine tilgjengelige i modellbehandleren." } }, "ProjectCardDeleteGuard": { @@ -210,6 +374,8 @@ "free": "Gratis" }, "SpaceCardActionMenu": { + "addToFavorite": "Legg til i favoritter", + "removeFavorite": "Fjern fra favoritter", "removeImageButtonText": "Fjern bilde" }, "SpaceCardDeleteGuard": { @@ -228,7 +394,8 @@ "admins": "Administratorer", "users": "Brukere" }, - "addAdminButtonText": "Legg til ny administrator" + "addAdminButtonText": "Legg til ny administrator", + "addUserButtonText": "Legg til bruker" }, "UserCard": { "self": "deg" @@ -240,8 +407,10 @@ } }, "UserRoleBadge": { - "admin": "Administrator", - "user": "Bruker", + "spaceAdmin": "Områdeadministrator", + "projectAdmin": "Prosjektadministrator", + "spaceUser": "Områdebruker", + "projectUser": "Prosjektbruker", "guest": "Gjest" }, "UsersManagerOnboarding": { @@ -259,6 +428,7 @@ "FolderPermissionSelector": { "label": "Alle", "options": { + "default": "Standard", "accessDenied": "Ingen tilgang", "readOnly": "Skrivebeskyttet", "readWrite": "Lese-/skrivetilgang" @@ -267,15 +437,8 @@ "GroupMembersSelector": { "title": "Administrer gruppemedlemmer" }, - "GroupPermissionSelector": { - "options": { - "accessDenied": "Ingen tilgang", - "readOnly": "Skrivebeskyttet", - "readWrite": "Lese-/skrivetilgang", - "default": "som standard" - } - }, "Errors": { + "logsFetchError": "Kunne ikke hente prosjektloggene", "spacesFetchError": "Kunne ikke hente frem områder", "spaceCreateError": "Kunne ikke opprette område", "spaceUpdateError": "Kunne ikke oppdatere område", @@ -339,27 +502,28 @@ "fileFetchError": "Feil ved gjenoppretting av mappe/fil", "bcfImportError": "Det oppstod en feil ved importering", "bcfExportError": "Eksportering feilet...", + "bcfExportXlsxError": "Xlsx-eksport mislyktes...", "fileVersionsFetchError": "Denne versjonen av dokumentet kan ikke gjenopprettes.", "fileVersionsMakeHeadError": "Bytte av dokument til nåværende versjon feilet.", "fileVersionDelete": "Sletting av dokumentet feilet", "userAlreadyExistsError": "Brukeren er allerede medlem av dette området/prosjektet.", - "tagsFetchError": "", - "tagsCreateError": "", - "tagsUpdateError": "", - "tagsDeleteError": "", - "tagsAddDocumentError": "", - "tagsDeleteDocumentError": "", - "spaceSizeFullError": "", - "spaceFetchError": "", - "projectFolderTreeFetchError": "", - "fileStructureCreateError": "", - "documentCreateError": "", + "tagsFetchError": "Kunne ikke hente tagger", + "tagsCreateError": "Feil ved oppretting av taggen", + "tagsUpdateError": "Feil ved endring av taggen", + "tagsDeleteError": "Feil ved sletting av taggen", + "tagsAddDocumentError": "Feil ved tilknytning av taggen til dokumentet", + "tagsDeleteDocumentError": "Feil ved fjerning av taggen fra dokumentet", + "spaceSizeFullError": "Lagringsplassen din er full", + "spaceFetchError": "Kunne ikke hente informasjon om området", + "projectFolderTreeFetchError": "Kunne ikke hente prosjektlisten", + "fileStructureCreateError": "Kunne ikke opprette filstrukturen", + "documentCreateError": "Kunne ikke laste opp dette dokumentet", "invitationViewFetchError": "Kunne ikke hente frem invitasjoner", - "invitationViewAcceptError": "", - "invitationViewDeclineError": "", - "folderFetchFolder": "", - "bcfDeleteError": "", - "groupImportError": "" + "invitationViewAcceptError": "Kunne ikke godta invitasjonen", + "invitationViewDeclineError": "Kunne ikke avslå invitasjonen", + "folderFetchFolder": "Kunne ikke hente mappedata", + "bcfDeleteError": "Sletting mislyktes", + "groupImportError": "Import av grupper mislyktes" }, "ProjectStatusBadge": { "new": "NY", @@ -368,9 +532,7 @@ "paused": "SATT PÅ PAUSE" }, "Dashboard": { - "spacesTileTitle": "Aktive områder", "spacesTileBottomText": "Vis områder", - "projectsTileTitle": "Aktive prosjekter", "projectsTileBottomText": "Se prosjekter", "subscriptionsTileTitle": "Fakturahåndtering", "subscriptionsTileText": "Finn alle dine fakturaer og informasjon om dine siste betalinger her.", @@ -424,7 +586,7 @@ "deleted": "Slettet", "paused": "Satt på pause", "custom": "Administrert av BIMData.io", - "past_due": "" + "past_due": "Suspendert" } }, "DatapackForm": { @@ -600,6 +762,15 @@ "refresh": "Reinitialiser verifisering" } }, + "VisaValidatorCell": { + "title": "Detaljer om verifiserere", + "noGroup": "Ingen gruppe", + "accept": "Verifisert", + "delayed": "Forsinket", + "deny": "Avslått", + "pending": "Avventer", + "multipleGroups": "{count} grupper" + }, "comments": { "commentary": "Kommentar", "publish": "Publiser", @@ -609,6 +780,17 @@ "selectionValidator": { "warning": "Brukeren kan ikke åpne denne filen." }, + "view": { + "visaPending": "Visum venter", + "visaClosed": "Visum lukket", + "myRequests": "Mine forespørsler", + "valid": "Godkjent", + "pending": "Venter", + "denied": "Avslått", + "overdue": "Forsinket", + "openVisaBtn": "Åpne visum", + "validateVisaBtn": "Godkjenn visum" + }, "noVisa": "Et visum har ikke blitt opprettet enda", "accept": "Aksepter", "close": "Lukk", @@ -649,17 +831,19 @@ "metricsEmptyText": "Legg til problemer for å se assosiert statistikk her.", "noSearchResultsTitle": "Ingen resultater", "noSearchResultsText": "Søket ditt ga ingen resultater, vennligst sjekk filter eller nøkkelord", - "importBcfNotificationSuccess": "", - "importBcfNotificationError": "", - "exportBcfNotificationSuccess": "", - "exportBcfNotificationError": "", - "selectedTopicCount": "", - "deleteBcfText": "", - "deleteInProgress": "", + "importBcfNotificationSuccess": "BCF-filen ble importert", + "importBcfNotificationError": "Feil ved import av BCF-filen", + "deleteBcfTitle": "Slett {bcfCount} BCF", + "exportBcfNotificationSuccess": "BCF ble eksportert", + "exportBcfXlsxNotificationSuccess": "Xlsx-eksport fullført!", + "exportBcfNotificationError": "Feil ved eksport av BCF til xlsx", + "selectedTopicCount": "Antall valgte saker", + "deleteBcfText": "Du er i ferd med å slette alle valgte saker", + "deleteInProgress": "Sletting pågår", "deleteInProgressSub": "Denne prosessen kan ta en liten stund.", - "deleteBcfNotificationSuccess": "", - "deleteBcfNotificationError": "", - "onlyAdminParameters": "" + "deleteBcfNotificationSuccess": "Saker slettet", + "deleteBcfNotificationError": "Feil ved sletting av saker", + "onlyAdminParameters": "Du må være prosjektadministrator" }, "GuidedTour": { "platform": { @@ -723,8 +907,8 @@ "AddVersion": "Legg til ny versjon", "loading": { "subMessage": "Denne prosessen kan ta en liten stund.", - "downloadMessage": "", - "deleteMessage": "" + "downloadMessage": "Lasting pågår.", + "deleteMessage": "Sletting pågår." }, "getToHead": "Bytt til nåværende versjon", "show": "Se", @@ -737,71 +921,83 @@ "emptyArea": "Du har for øyeblikket ingen versjonshistorikk for denne filen." }, "Tag": { - "title": "", - "list": "", - "addTag": "", - "addNewTag": "", - "deleteTag": "" + "title": "Administrasjon av tagger", + "list": "Liste over tagger", + "addTag": "legg til en tagg", + "addNewTag": "Legg til en ny tagg", + "deleteTag": "Slett denne taggen", + "emptyTag": "Ingen tagg" }, "SubscriptionModal": { - "title": "", - "subtitle": "", + "title": "Få mer plass", + "subtitle": "Du har for øyeblikket {size} lagringskapasitet", "soon": "SOON", "upgrade": { - "title": "", - "subtitle": "" + "title": "Oppgrader til pro-plattformen", + "subtitle": "Abonner på BIMData Pro for å få mer plass." }, "referal": { - "title": "", - "subtitle": "" + "title": "Bli med i vervingsprogrammet vårt!", + "subtitle": "Del vervekoden din for å tjene plass." }, "linkedin": { - "title": "", - "subtitle": "" + "title": "Koble til LinkedIn-kontoen din", + "subtitle": "Følg BIMData-siden for å tjene plass." } }, "GroupMemberCard": { - "pending": "" + "pending": "Invitasjon venter" }, "UserProfile": { - "title": "", + "title": "Profilinnstillinger", "loading": { - "message": "", - "subMessage": "" + "message": "Sletting pågår.", + "subMessage": "Denne prosessen kan ta litt tid. Ikke forlat siden." } }, "Invitations": { - "title": "", - "invitCounter": "", - "acceptAll": "", - "invitedInProject": "", - "invitedInSpace": "", - "invitAccepted": "", - "invitDenied": "", - "invitPending": "", - "goToProjectLong": "Prosjekt", - "goToProjectShort": "Prosjekt", - "goToSpaceLong": "Område", - "goToSpaceShort": "Område" + "title": "Mine invitasjoner", + "invitCounter": "Ventende invitasjoner -", + "acceptAll": "Godta alle", + "invitedInProject": "Du er invitert av {sender} til å bli med i prosjektet {project} i området {cloud}", + "invitedInSpace": "Du er invitert av {sender} til å bli med i området {cloud}", + "invitAccepted": "Invitasjon godtatt", + "invitDenied": "Invitasjon avslått", + "invitPending": "Invitasjon venter", + "goToProject": "Åpne prosjekt", + "goToSpace": "Åpne område" }, "DocumentViewer": { - "viewerButton": "", - "docPlaceholder": "" + "viewerButton": "Åpne i visningsprogrammet", + "docPlaceholder": "Ingen forhåndsvisning for dette dokumentet" + }, + "MainModelSelector": { + "title": "Velg forhåndsvisning av prosjektet" + }, + "UserFavoritesManager": { + "title": "Favorittområder / -prosjekter" + }, + "VisasDeleteModal": { + "title": "Slett {visasCount} visum", + "message": "Du er i ferd med å slette visumene på følgende filer:" }, "GroupImport": { - "title": "", + "title": "Importer en gruppe", "selectAll": "Velg alle", - "notAdmin": "", - "noGroup": "" + "notAdmin": "Du må være prosjektadministrator", + "noGroup": "Det finnes ingen grupper for dette prosjektet", + "noProject": "Det finnes ingen andre prosjekter", + "noResult": "Ingen prosjekter med dette navnet" }, "UploadCard": { "cancelMessage": "Avbrutt", "errorMessage": "Opplasting feilet", - "upload": "" + "upload": "{uploaded} av {total} ({percentage}% lastet opp)" }, "t": { "add": "Legg til", "amount": "Mengde", + "apply": "Bruk", "archive": "Arkiv", "back": "Tilbake", "cancel": "Avbryt", @@ -812,45 +1008,67 @@ "createdBy": "Laget av", "close": "Lukk", "date": "Dato", + "days_ago": "for {count} dag siden | for {count} dager siden", "delete": "Slett", "description": "Beskrivelse", "download": "Last ned", + "dueDate": "Frist", "edit": "Rediger", + "emptyFile": "Ingen fil", "emptyFolder": "Tom mappe", + "emptyVisa": "Ingen visum", "error": "Feil", - "export": "", - "file": "", - "folder": "", - "import": "", - "invalidName": "", - "leave": "", - "modifiedOn": "", - "modify": "", - "name": "", - "ok": "", - "open": "", - "or": "", - "rename": "", - "search": "", - "size": "", - "space": "", - "status": "", - "success": "", - "type": "", - "unarchive": "", - "validate": "", - "verify": "" + "export": "Eksporter", + "exportXlsx": "Eksporter som xlsx", + "file": "Fil", + "filters": "Filtre", + "folder": "Mappe", + "hours_ago": "for {count} time siden | for {count} timer siden", + "import": "Importer", + "invalidName": "Ugyldig navn", + "just_now": "Akkurat nå", + "leave": "Forlat", + "location": "Plassering", + "minutes_ago": "for {count} minutt siden | for {count} minutter siden", + "modifiedOn": "Sist endret", + "modify": "Rediger", + "name": "Navn", + "notSpecified": "Ikke angitt", + "ok": "OK", + "open": "Åpne", + "or": "eller", + "project": "Prosjekt", + "projects": "Prosjekter", + "rename": "Gi nytt navn", + "reset": "Tilbakestill", + "rootFolder": "Rotmappe", + "save": "Lagre", + "search": "Søk", + "size": "Størrelse", + "space": "Område", + "spaces": "Områder", + "status": "Status", + "success": "Vellykket", + "today": "I dag", + "type": "Type", + "unarchive": "Gjenopprett fra arkiv", + "validate": "Godkjenn", + "validation": "Godkjenninger", + "validator": "Verifiserere", + "verify": "Kontroller", + "yesterday": "I går" }, "FolderCreationButton": { - "text": "" + "text": "Ny mappe" }, "FolderCreationForm": { - "title": "" + "title": "Opprett mappe" }, "SpaceCardImageButton": { "text": "Last opp bilde" }, "FileTreePreviewModal": { - "title": "" + "title": "Importer DMS-struktur fra", + "emptySource": "Dette prosjektet har ingen mapper" } } \ No newline at end of file From 0751dba3d1b6880205475f69a57403d2eccc90ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Lagier?= Date: Wed, 4 Nov 2026 08:53:12 +0100 Subject: [PATCH 2/2] i18n: add missing translations --- src/i18n/lang/de.json | 97 ++++++++++++++++++++++++++++++++++++++++++- src/i18n/lang/en.json | 9 +++- src/i18n/lang/es.json | 97 ++++++++++++++++++++++++++++++++++++++++++- src/i18n/lang/it.json | 97 ++++++++++++++++++++++++++++++++++++++++++- src/i18n/lang/nl.json | 97 ++++++++++++++++++++++++++++++++++++++++++- src/i18n/lang/no.json | 97 ++++++++++++++++++++++++++++++++++++++++++- 6 files changed, 487 insertions(+), 7 deletions(-) diff --git a/src/i18n/lang/de.json b/src/i18n/lang/de.json index 47d609264..57fc4e0c7 100644 --- a/src/i18n/lang/de.json +++ b/src/i18n/lang/de.json @@ -2,33 +2,126 @@ "NamingConstraint": { "managerTitle": "Verwaltung der Namenskonventionen", "constraintsTab": "Benennungsregeln", + "listsTab": "Listenverwaltung", + "rulesSectionTitle": "Regelliste", + "addRuleButton": "Regel hinzufügen", + "searchConstraintPlaceholder": "Regel suchen", + "searchListPlaceholder": "Liste suchen", + "rulesEmptyTitle": "Keine Regel hinzugefügt", + "rulesEmptyText": "Sie haben noch keine Regel. Fügen Sie zunächst eine hinzu.", + "rulesEmptyPrerequisitesText": "Benennungsregeln gelten nur für Dateien innerhalb eines Ordners.", + "manageListsButton": "Listen verwalten", + "listsSectionTitle": "Listenverwaltung", + "createListButton": "Liste erstellen", + "listsEmptyTitle": "Keine Liste hinzugefügt", + "listsEmptyText": "Sie haben noch keine Liste. Erstellen Sie zunächst eine.", "strictBadge": "Strikt", "createConstraintTitle": "Regel erstellen", "updateConstraintTitle": "Regel bearbeiten", "createListTitle": "Meine Liste erstellen", "updateListTitle": "Meine Liste bearbeiten", "nameLabel": "Name", + "ruleNameStep": "Name der Regel", + "ruleNamePlaceholder": "Name der Regel", + "separatorStep": "Trennzeichen", + "separatorDashOption": "- (Bindestrich)", + "separatorDotOption": ". (Punkt)", + "separatorUnderscoreOption": "_ (Unterstrich)", + "structureSectionTitle": "Aufbau der Regel", "strictLabel": "Strikte Regel", "strictHelp": "Wenn Sie dieses Kästchen aktivieren, müssen Sie alle Dateien umbenennen, die nicht dieser neuen Regel entsprechen.", "previewLabel": "Vorschau", "ruleSectionTitle": "Regel", + "emptyStateHelp": "Fügen Sie Ihr erstes Element hinzu, um mit dem Aufbau Ihrer Regel zu beginnen.", "addPartButton": "Element hinzufügen", "emptyParts": "Fügen Sie mindestens ein Element hinzu, um die Regel zu definieren.", "partTypeLabel": "Typ", "partTypeValuesIn": "Liste", "partTypeBounded": "Begrenzte Werte", "partTypeNChars": "N Zeichen", + "selectListPlaceholder": "Liste auswählen", + "noList": "Keine Liste erstellt", "elementsHelp": "Kommagetrennte Liste zulässiger Werte.", "minLabel": "Min", "maxLabel": "Max", "maxLengthLabel": "Max. Länge", + "partNameLabel": "Feldname (optional)", + "partNamePlaceholder": "Namen eingeben", + "saveRuleButton": "Regel speichern", + "listNameStep": "Name der Liste", + "listNamePlaceholder": "Name der Liste", + "addElementsStep": "Elemente hinzufügen", + "addOneElementLabel": "Element hinzufügen", + "elementNamePlaceholder": "Name des Elements", + "removeElementButton": "Entfernen", + "addElementButton": "Element hinzufügen", + "bulkImportLabel": "Mehrere Elemente hinzufügen", + "bulkImportPlaceholder": "z. B.: PLAN, VISA, DOE", + "bulkImportHint": "Geben Sie Ihre Elemente durch Kommas getrennt ein", + "importButton": "Liste erstellen", + "saveListButton": "Liste speichern", "emptyElementsError": "Geben Sie mindestens einen Wert an.", "invalidBoundsError": "Max muss größer oder gleich Min sein.", "missingBoundsError": "Min und Max sind für begrenzte Werte erforderlich.", "invalidMaxLengthError": "Die maximale Länge muss mindestens 1 betragen.", "missingListError": "Wählen Sie für jedes Listenelement eine Liste aus.", "listInUseErrorTitle": "Liste in Verwendung", - "listInUseErrorMessage": "Diese Liste wird von den folgenden Regeln verwendet: {constraints}. Bearbeiten Sie diese, bevor Sie die Liste löschen." + "listInUseErrorMessage": "Diese Liste wird von den folgenden Regeln verwendet: {constraints}. Bearbeiten Sie diese, bevor Sie die Liste löschen.", + "folderRuleMenuItem": "Namenskonvention", + "recursiveLabel": "Unterordner einbeziehen", + "recursiveHelp": "Wenn Sie dieses Kästchen ankreuzen, gilt diese Regel auch für Dateien in den Unterordnern Ihres Hauptordners.", + "applyRuleSuccessTitle": "Benennungsregel angewendet", + "applyRuleSuccessMessage": "Die Namenskonvention wurde auf den Ordner \"{folder}\" angewendet.", + "applyRuleWithConflictsSuccessTitle": "Regel mit Konflikten angewendet", + "applyRuleWithConflictsSuccessMessage": "Die Benennungsregel wurde auf den Ordner \"{folder}\" angewendet. Einige Dateien können noch in Konflikt stehen.", + "applyRuleError": "Die Namenskonvention konnte nicht angewendet werden.", + "applyRuleWarningTitle": "Der Name entspricht nicht der Regel", + "conflictTooltip": "Diese Datei entspricht nicht der Namenskonvention des Ordners.", + "conflictModalWarning": "Benennen Sie die betroffenen Dokumente um oder löschen Sie sie, um fortzufahren", + "conflictCurrentNameLabel": "Aktueller Name", + "conflictNewNameLabel": "Neuer Name", + "conflictStatusDeleted": "Gelöscht", + "conflictStatusValid": "Konform", + "conflictStatusInvalid": "Nicht konform", + "conflictSourceFolderLabel": "Quellordner:", + "conflictDeleteFileButton": "Datei löschen", + "conflictRestoreFileButton": "Wiederherstellen", + "maxCharsHint": "Maximal {count} Zeichen", + "errorMessage": "Die Anzahl der Zeichen überschreitet die zulässige Grenze.", + "renameButton": "Neuen Namen bestätigen", + "applyRenameButton": "Neue Namen anwenden", + "confirmRenameButton": "Namen übernehmen", + "renameConflictsMenuItem": "Betroffene Dateien umbenennen", + "noConflictsTitle": "Keine betroffenen Dateien", + "noConflictsMessage": "Alle Dateien entsprechen der Namenskonvention ihres Ordners.", + "noDirectRuleOption": "Keine eigene Regel für diesen Ordner", + "inheritedRuleTitle": "Für diesen Ordner gilt eine geerbte Regel", + "inheritedRuleDescription": "Die Regel « {rule} » ist für den Ordner « {folder} » festgelegt und gilt auch für dessen Unterordner. Das Entfernen der eigenen Regel dieses Ordners deaktiviert diese geerbte Regel nicht.", + "searchPlaceholder": "Regel suchen", + "removeRuleError": "Die Benennungsregel konnte nicht entfernt werden.", + "removeRuleSuccessTitle": "Benennungsregel entfernt", + "removeRuleSuccessMessage": "Die Benennungsregel wurde erfolgreich entfernt.", + "modal": { + "noStrictTitle": "Nicht konforme Dateien umbenennen", + "strictTitle": "Nicht konforme Dateien umbenennen", + "strictDescription": "Dieser Ordner erzwingt eine strikte Namenskonvention. Der Upload kann erst abgeschlossen werden, wenn die folgenden Dateien der erwarteten Regel entsprechen.", + "noStrictDescription": "Bilden Sie den neuen Namen aus den zulässigen Listen. Freitextfelder werden geprüft und die Vorschau wird automatisch erstellt.", + "expectedConventionLabel": "Erwartete Konvention in diesem Ordner" + }, + "safeZoneModal": { + "title": "Achtung!", + "text": "Die Benennungsregel wurde geändert, aber nicht gespeichert. Möchten Sie die Regelverwaltung wirklich schließen? (Die Änderungen gehen verloren)" + }, + "partListInUseModal": { + "title": "Löschen nicht möglich", + "description": "Diese Liste kann nicht gelöscht werden.", + "listLabel": "Betroffene Liste:", + "rulesDescription": "Diese Liste wird von den folgenden Benennungsregeln verwendet:", + "resolution": "Um diese Liste zu löschen, ändern Sie zuerst die betroffenen Regeln, damit sie sie nicht mehr verwenden." + } + }, + "FolderNamingConstraint": { + "ruleSectionTitle": "Auf den Ordner angewendete Regeln: " }, "OidcCallbackError": { "message": "Bei der Authentifizierung ist ein Fehler aufgetreten...", @@ -1029,6 +1122,7 @@ "back": "Zurück", "cancel": "Abbrechen", "change": "Ändern", + "clear": "Leeren", "comment": "Kommentar", "confirm": "Bestätigen", "create": "Erstellen", @@ -1049,6 +1143,7 @@ "hours_ago": "vor {count} Stunde | vor {count} Stunden", "import": "Importieren", "invalidName": "Ungültiger Name", + "invalidNameFormat": "Der Name entspricht nicht der Benennungsregel (z. B. {example}).", "just_now": "Gerade eben", "leave": "Verlassen", "modifiedOn": "Geändert am", diff --git a/src/i18n/lang/en.json b/src/i18n/lang/en.json index 1de8cc9c0..440a05ee9 100644 --- a/src/i18n/lang/en.json +++ b/src/i18n/lang/en.json @@ -2,6 +2,7 @@ "NamingConstraint": { "managerTitle": "Naming convention management", "constraintsTab": "Naming rules", + "listsTab": "Lists management", "rulesSectionTitle": "Rules list", "addRuleButton": "add a rule", "searchConstraintPlaceholder": "Search for a rule", @@ -31,6 +32,7 @@ "strictHelp": "If you check this box, you will have to rename every file that does not match this new rule.", "previewLabel": "Preview", "ruleSectionTitle": "Rule", + "emptyStateHelp": "Add your first element to start building your rule.", "addPartButton": "Add an element", "emptyParts": "Add at least one element to define the rule.", "partTypeLabel": "Type", @@ -70,10 +72,11 @@ "recursiveHelp": "If you check this box, this rule will also apply to files contained in the subfolders of your main folder.", "applyRuleSuccessTitle": "Naming rule applied", "applyRuleSuccessMessage": "The naming convention has been applied to the folder \"{folder}\".", + "applyRuleWithConflictsSuccessTitle": "Rule applied with conflicts", + "applyRuleWithConflictsSuccessMessage": "The naming rule has been applied to the folder \"{folder}\". Some files may still be in conflict.", "applyRuleError": "The naming convention could not be applied.", "applyRuleWarningTitle": "Name does not match the rule", "conflictTooltip": "This file does not match the folder naming convention.", - "conflictModalIntro": "Rename here the files that do not match the strict rule you set.", "conflictModalWarning": "Rename or delete the conflicting documents to continue", "conflictCurrentNameLabel": "Current name", "conflictNewNameLabel": "New name", @@ -88,7 +91,6 @@ "renameButton": "Confirm new name", "applyRenameButton": "Apply new names", "confirmRenameButton": "Accept names", - "renameFilePlaceholder": "Rename the file", "renameConflictsMenuItem": "Rename conflicting files", "noConflictsTitle": "No conflicting files", "noConflictsMessage": "All files match their folder naming convention.", @@ -118,6 +120,9 @@ "resolution": "To delete this list, first update the affected rules so that they no longer use it." } }, + "FolderNamingConstraint": { + "ruleSectionTitle": "Rules applied to the folder: " + }, "OidcCallbackError": { "message": "An error occured during authentication...", "retryButtonText": "Try Again" diff --git a/src/i18n/lang/es.json b/src/i18n/lang/es.json index 4c3b61964..23ed92008 100644 --- a/src/i18n/lang/es.json +++ b/src/i18n/lang/es.json @@ -2,33 +2,126 @@ "NamingConstraint": { "managerTitle": "Gestión de convenciones de nomenclatura", "constraintsTab": "Reglas de nomenclatura", + "listsTab": "Gestión de listas", + "rulesSectionTitle": "Lista de reglas", + "addRuleButton": "añadir una regla", + "searchConstraintPlaceholder": "Buscar una regla", + "searchListPlaceholder": "Buscar una lista", + "rulesEmptyTitle": "No se ha añadido ninguna regla", + "rulesEmptyText": "Todavía no tiene ninguna regla, empiece añadiendo una.", + "rulesEmptyPrerequisitesText": "Las reglas de nomenclatura solo se aplican a los archivos dentro de una carpeta.", + "manageListsButton": "Gestionar las listas", + "listsSectionTitle": "Gestión de listas", + "createListButton": "Crear una lista", + "listsEmptyTitle": "No se ha añadido ninguna lista", + "listsEmptyText": "Todavía no tiene ninguna lista, empiece creando una.", "strictBadge": "Estricta", "createConstraintTitle": "Creación de una regla", "updateConstraintTitle": "Modificación de una regla", "createListTitle": "Creación de mi lista", "updateListTitle": "Modificación de mi lista", "nameLabel": "Nombre", + "ruleNameStep": "Nombre de la regla", + "ruleNamePlaceholder": "Nombre de la regla", + "separatorStep": "Tipo de separador", + "separatorDashOption": "- (guion)", + "separatorDotOption": ". (punto)", + "separatorUnderscoreOption": "_ (guion bajo)", + "structureSectionTitle": "Estructura de la regla", "strictLabel": "Regla estricta", "strictHelp": "Si marca esta casilla, deberá renombrar todos los archivos que no cumplan esta nueva regla.", "previewLabel": "Vista previa", "ruleSectionTitle": "Regla", + "emptyStateHelp": "Añada su primer elemento para empezar a construir su regla.", "addPartButton": "Añadir un elemento", "emptyParts": "Añada al menos un elemento para definir la regla.", "partTypeLabel": "Tipo", "partTypeValuesIn": "Lista", "partTypeBounded": "Valores acotados", "partTypeNChars": "N caracteres", + "selectListPlaceholder": "Seleccionar una lista", + "noList": "No se ha creado ninguna lista", "elementsHelp": "Lista de valores permitidos separados por comas.", "minLabel": "Mín", "maxLabel": "Máx", "maxLengthLabel": "Longitud máx", + "partNameLabel": "Nombre del campo (opcional)", + "partNamePlaceholder": "Introducir un nombre", + "saveRuleButton": "Guardar la regla", + "listNameStep": "Nombre de la lista", + "listNamePlaceholder": "Nombre de la lista", + "addElementsStep": "Añadir elementos", + "addOneElementLabel": "Añadir un elemento", + "elementNamePlaceholder": "Nombre del elemento", + "removeElementButton": "Eliminar", + "addElementButton": "Añadir un elemento", + "bulkImportLabel": "Añadir varios elementos", + "bulkImportPlaceholder": "p. ej.: PLAN, VISA, DOE", + "bulkImportHint": "Introduzca sus elementos separados por comas", + "importButton": "Generar la lista", + "saveListButton": "Guardar la lista", "emptyElementsError": "Indique al menos un valor.", "invalidBoundsError": "El máximo debe ser mayor o igual que el mínimo.", "missingBoundsError": "El mínimo y el máximo son obligatorios para los valores acotados.", "invalidMaxLengthError": "La longitud máxima debe ser de al menos 1.", "missingListError": "Seleccione una lista para cada elemento de tipo lista.", "listInUseErrorTitle": "Lista en uso", - "listInUseErrorMessage": "Esta lista es utilizada por las siguientes reglas: {constraints}. Modifíquelas antes de eliminar la lista." + "listInUseErrorMessage": "Esta lista es utilizada por las siguientes reglas: {constraints}. Modifíquelas antes de eliminar la lista.", + "folderRuleMenuItem": "Convención de nomenclatura", + "recursiveLabel": "Incluir las subcarpetas", + "recursiveHelp": "Si marca esta casilla, esta regla también se aplicará a los archivos contenidos en las subcarpetas de su carpeta principal.", + "applyRuleSuccessTitle": "Regla de nomenclatura aplicada", + "applyRuleSuccessMessage": "La convención de nomenclatura se ha aplicado a la carpeta \"{folder}\".", + "applyRuleWithConflictsSuccessTitle": "Regla aplicada con conflictos", + "applyRuleWithConflictsSuccessMessage": "La regla de nomenclatura se ha aplicado a la carpeta \"{folder}\". Es posible que algunos archivos sigan en conflicto.", + "applyRuleError": "No se ha podido aplicar la convención de nomenclatura.", + "applyRuleWarningTitle": "El nombre no cumple la regla", + "conflictTooltip": "Este archivo no cumple la convención de nomenclatura de la carpeta.", + "conflictModalWarning": "Cambie el nombre de los documentos en conflicto o elimínelos para continuar", + "conflictCurrentNameLabel": "Nombre actual", + "conflictNewNameLabel": "Nuevo nombre", + "conflictStatusDeleted": "Eliminado", + "conflictStatusValid": "Conforme", + "conflictStatusInvalid": "No conforme", + "conflictSourceFolderLabel": "Carpeta de origen:", + "conflictDeleteFileButton": "Eliminar el archivo", + "conflictRestoreFileButton": "Restaurar", + "maxCharsHint": "Máximo {count} caracteres", + "errorMessage": "El número de caracteres supera el límite permitido.", + "renameButton": "Confirmar el nuevo nombre", + "applyRenameButton": "Aplicar los nuevos nombres", + "confirmRenameButton": "Aceptar los nombres", + "renameConflictsMenuItem": "Cambiar el nombre de los archivos en conflicto", + "noConflictsTitle": "Ningún archivo en conflicto", + "noConflictsMessage": "Todos los archivos cumplen la convención de nomenclatura de su carpeta.", + "noDirectRuleOption": "Ninguna regla propia para esta carpeta", + "inheritedRuleTitle": "Se aplica una regla heredada a esta carpeta", + "inheritedRuleDescription": "La regla « {rule} » está definida en la carpeta « {folder} » y también se aplica a sus subcarpetas. Quitar la regla propia de esta carpeta no desactivará esta regla heredada.", + "searchPlaceholder": "Buscar una regla", + "removeRuleError": "No se ha podido eliminar la regla de nomenclatura.", + "removeRuleSuccessTitle": "Regla de nomenclatura eliminada", + "removeRuleSuccessMessage": "La regla de nomenclatura se ha eliminado correctamente.", + "modal": { + "noStrictTitle": "Cambiar el nombre de los archivos no conformes", + "strictTitle": "Cambiar el nombre de los archivos no conformes", + "strictDescription": "Esta carpeta impone una convención de nomenclatura estricta. La subida no podrá completarse hasta que los archivos siguientes cumplan la regla esperada.", + "noStrictDescription": "Construya el nuevo nombre a partir de las listas permitidas. Los campos de texto libre se validan y la vista previa se genera automáticamente.", + "expectedConventionLabel": "Convención esperada en esta carpeta" + }, + "safeZoneModal": { + "title": "¡Atención!", + "text": "La regla de nomenclatura se ha modificado pero no se ha guardado. ¿Seguro que desea cerrar el gestor de reglas? (Los cambios se perderán)" + }, + "partListInUseModal": { + "title": "No se puede eliminar", + "description": "Esta lista no se puede eliminar.", + "listLabel": "Lista afectada:", + "rulesDescription": "Esta lista se utiliza en las siguientes reglas de nomenclatura:", + "resolution": "Para eliminar esta lista, modifique primero las reglas afectadas para que dejen de utilizarla." + } + }, + "FolderNamingConstraint": { + "ruleSectionTitle": "Reglas aplicadas a la carpeta: " }, "OidcCallbackError": { "message": "Ha ocurrido un error de autenticación...", @@ -1029,6 +1122,7 @@ "back": "Retorno", "cancel": "Cancelar", "change": "Cambiar", + "clear": "Borrar", "comment": "Comentario", "confirm": "Confirmar", "create": "Crear", @@ -1049,6 +1143,7 @@ "hours_ago": "hace {count} hora | hace {count} horas", "import": "Importar", "invalidName": "Nombre no válido", + "invalidNameFormat": "El nombre no cumple la regla de nomenclatura (p. ej. {example}).", "just_now": "Justo ahora", "leave": "Salir", "modifiedOn": "Modificado el", diff --git a/src/i18n/lang/it.json b/src/i18n/lang/it.json index a258d0aa1..880882022 100644 --- a/src/i18n/lang/it.json +++ b/src/i18n/lang/it.json @@ -2,33 +2,126 @@ "NamingConstraint": { "managerTitle": "Gestione delle convenzioni di denominazione", "constraintsTab": "Regole di denominazione", + "listsTab": "Gestione delle liste", + "rulesSectionTitle": "Elenco delle regole", + "addRuleButton": "aggiungi una regola", + "searchConstraintPlaceholder": "Cerca una regola", + "searchListPlaceholder": "Cerca una lista", + "rulesEmptyTitle": "Nessuna regola aggiunta", + "rulesEmptyText": "Non hai ancora nessuna regola, inizia aggiungendone una.", + "rulesEmptyPrerequisitesText": "Le regole di denominazione si applicano solo ai file all'interno di una cartella.", + "manageListsButton": "Gestisci le liste", + "listsSectionTitle": "Gestione delle liste", + "createListButton": "Crea una lista", + "listsEmptyTitle": "Nessuna lista aggiunta", + "listsEmptyText": "Non hai ancora nessuna lista, inizia creandone una.", "strictBadge": "Rigida", "createConstraintTitle": "Creazione di una regola", "updateConstraintTitle": "Modifica di una regola", "createListTitle": "Creazione della mia lista", "updateListTitle": "Modifica della mia lista", "nameLabel": "Nome", + "ruleNameStep": "Nome della regola", + "ruleNamePlaceholder": "Nome della regola", + "separatorStep": "Tipo di separatore", + "separatorDashOption": "- (trattino)", + "separatorDotOption": ". (punto)", + "separatorUnderscoreOption": "_ (trattino basso)", + "structureSectionTitle": "Struttura della regola", "strictLabel": "Regola rigida", "strictHelp": "Se selezioni questa casella, dovrai rinominare tutti i file che non rispettano questa nuova regola.", "previewLabel": "Anteprima", "ruleSectionTitle": "Regola", + "emptyStateHelp": "Aggiungi il tuo primo elemento per iniziare a costruire la regola.", "addPartButton": "Aggiungi un elemento", "emptyParts": "Aggiungi almeno un elemento per definire la regola.", "partTypeLabel": "Tipo", "partTypeValuesIn": "Lista", "partTypeBounded": "Valori delimitati", "partTypeNChars": "N caratteri", + "selectListPlaceholder": "Seleziona una lista", + "noList": "Nessuna lista creata", "elementsHelp": "Elenco di valori consentiti separati da virgole.", "minLabel": "Min", "maxLabel": "Max", "maxLengthLabel": "Lunghezza max", + "partNameLabel": "Nome del campo (facoltativo)", + "partNamePlaceholder": "Inserisci un nome", + "saveRuleButton": "Salva la regola", + "listNameStep": "Nome della lista", + "listNamePlaceholder": "Nome della lista", + "addElementsStep": "Aggiungi elementi", + "addOneElementLabel": "Aggiungi un elemento", + "elementNamePlaceholder": "Nome dell'elemento", + "removeElementButton": "Rimuovi", + "addElementButton": "Aggiungi un elemento", + "bulkImportLabel": "Aggiungi più elementi", + "bulkImportPlaceholder": "es.: PLAN, VISA, DOE", + "bulkImportHint": "Inserisci i tuoi elementi separati da virgole", + "importButton": "Genera la lista", + "saveListButton": "Salva la lista", "emptyElementsError": "Indica almeno un valore.", "invalidBoundsError": "Il massimo deve essere maggiore o uguale al minimo.", "missingBoundsError": "Il minimo e il massimo sono obbligatori per i valori delimitati.", "invalidMaxLengthError": "La lunghezza massima deve essere almeno 1.", "missingListError": "Seleziona una lista per ogni elemento di tipo lista.", "listInUseErrorTitle": "Lista in uso", - "listInUseErrorMessage": "Questa lista è utilizzata dalle seguenti regole: {constraints}. Modificale prima di eliminare la lista." + "listInUseErrorMessage": "Questa lista è utilizzata dalle seguenti regole: {constraints}. Modificale prima di eliminare la lista.", + "folderRuleMenuItem": "Convenzione di denominazione", + "recursiveLabel": "Includi le sottocartelle", + "recursiveHelp": "Se selezioni questa casella, la regola si applicherà anche ai file contenuti nelle sottocartelle della cartella principale.", + "applyRuleSuccessTitle": "Regola di denominazione applicata", + "applyRuleSuccessMessage": "La convenzione di denominazione è stata applicata alla cartella \"{folder}\".", + "applyRuleWithConflictsSuccessTitle": "Regola applicata con conflitti", + "applyRuleWithConflictsSuccessMessage": "La regola di denominazione è stata applicata alla cartella \"{folder}\". Alcuni file potrebbero essere ancora in conflitto.", + "applyRuleError": "Impossibile applicare la convenzione di denominazione.", + "applyRuleWarningTitle": "Il nome non rispetta la regola", + "conflictTooltip": "Questo file non rispetta la convenzione di denominazione della cartella.", + "conflictModalWarning": "Rinomina o elimina i documenti in conflitto per continuare", + "conflictCurrentNameLabel": "Nome attuale", + "conflictNewNameLabel": "Nuovo nome", + "conflictStatusDeleted": "Eliminato", + "conflictStatusValid": "Conforme", + "conflictStatusInvalid": "Non conforme", + "conflictSourceFolderLabel": "Cartella di origine:", + "conflictDeleteFileButton": "Elimina il file", + "conflictRestoreFileButton": "Ripristina", + "maxCharsHint": "Massimo {count} caratteri", + "errorMessage": "Il numero di caratteri supera il limite consentito.", + "renameButton": "Conferma il nuovo nome", + "applyRenameButton": "Applica i nuovi nomi", + "confirmRenameButton": "Accetta i nomi", + "renameConflictsMenuItem": "Rinomina i file in conflitto", + "noConflictsTitle": "Nessun file in conflitto", + "noConflictsMessage": "Tutti i file rispettano la convenzione di denominazione della propria cartella.", + "noDirectRuleOption": "Nessuna regola propria per questa cartella", + "inheritedRuleTitle": "A questa cartella si applica una regola ereditata", + "inheritedRuleDescription": "La regola « {rule} » è definita sulla cartella « {folder} » e si applica anche alle sue sottocartelle. Rimuovere la regola propria di questa cartella non disattiverà questa regola ereditata.", + "searchPlaceholder": "Cerca una regola", + "removeRuleError": "Impossibile rimuovere la regola di denominazione.", + "removeRuleSuccessTitle": "Regola di denominazione rimossa", + "removeRuleSuccessMessage": "La regola di denominazione è stata rimossa correttamente.", + "modal": { + "noStrictTitle": "Rinomina i file non conformi", + "strictTitle": "Rinomina i file non conformi", + "strictDescription": "Questa cartella impone una convenzione di denominazione rigida. Il caricamento non può essere completato finché i file seguenti non rispettano la regola prevista.", + "noStrictDescription": "Componi il nuovo nome a partire dalle liste consentite. I campi di testo libero vengono verificati e l'anteprima viene generata automaticamente.", + "expectedConventionLabel": "Convenzione prevista in questa cartella" + }, + "safeZoneModal": { + "title": "Attenzione!", + "text": "La regola di denominazione è stata modificata ma non salvata. Sei sicuro di voler chiudere il gestore delle regole? (Le modifiche andranno perse)" + }, + "partListInUseModal": { + "title": "Eliminazione impossibile", + "description": "Questa lista non può essere eliminata.", + "listLabel": "Lista interessata:", + "rulesDescription": "Questa lista è utilizzata dalle seguenti regole di denominazione:", + "resolution": "Per eliminare questa lista, modifica prima le regole interessate in modo che non la utilizzino più." + } + }, + "FolderNamingConstraint": { + "ruleSectionTitle": "Regole applicate alla cartella: " }, "OidcCallbackError": { "message": "Si è verificato un errore durante l'autenticazione...", @@ -1046,6 +1139,7 @@ "back": "Indietro", "cancel": "Annulla", "change": "Cambia", + "clear": "Cancella", "comment": "Commento", "confirm": "Conferma", "create": "Creare", @@ -1070,6 +1164,7 @@ "hours_ago": "{count} ora fa | {count} ore fa", "import": "Importa", "invalidName": "Nome non valido", + "invalidNameFormat": "Il nome non rispetta la regola di denominazione (es. {example}).", "just_now": "Proprio ora", "leave": "Esci", "location": "Posizione", diff --git a/src/i18n/lang/nl.json b/src/i18n/lang/nl.json index 55ad11ad8..1fb01ad64 100644 --- a/src/i18n/lang/nl.json +++ b/src/i18n/lang/nl.json @@ -2,33 +2,126 @@ "NamingConstraint": { "managerTitle": "Beheer van naamgevingsconventies", "constraintsTab": "Naamgevingsregels", + "listsTab": "Lijstbeheer", + "rulesSectionTitle": "Lijst met regels", + "addRuleButton": "een regel toevoegen", + "searchConstraintPlaceholder": "Een regel zoeken", + "searchListPlaceholder": "Een lijst zoeken", + "rulesEmptyTitle": "Geen regel toegevoegd", + "rulesEmptyText": "U heeft nog geen regel, begin met er een toe te voegen.", + "rulesEmptyPrerequisitesText": "Naamgevingsregels zijn alleen van toepassing op bestanden in een map.", + "manageListsButton": "Lijsten beheren", + "listsSectionTitle": "Lijstbeheer", + "createListButton": "Een lijst aanmaken", + "listsEmptyTitle": "Geen lijst toegevoegd", + "listsEmptyText": "U heeft nog geen lijst, begin met er een aan te maken.", "strictBadge": "Strikt", "createConstraintTitle": "Regel aanmaken", "updateConstraintTitle": "Regel bewerken", "createListTitle": "Mijn lijst aanmaken", "updateListTitle": "Mijn lijst bewerken", "nameLabel": "Naam", + "ruleNameStep": "Naam van de regel", + "ruleNamePlaceholder": "Naam van de regel", + "separatorStep": "Type scheidingsteken", + "separatorDashOption": "- (streepje)", + "separatorDotOption": ". (punt)", + "separatorUnderscoreOption": "_ (underscore)", + "structureSectionTitle": "Structuur van de regel", "strictLabel": "Strikte regel", "strictHelp": "Als u dit vakje aanvinkt, moet u alle bestanden hernoemen die niet aan deze nieuwe regel voldoen.", "previewLabel": "Voorbeeld", "ruleSectionTitle": "Regel", + "emptyStateHelp": "Voeg uw eerste element toe om uw regel op te bouwen.", "addPartButton": "Element toevoegen", "emptyParts": "Voeg ten minste één element toe om de regel te definiëren.", "partTypeLabel": "Type", "partTypeValuesIn": "Lijst", "partTypeBounded": "Begrensde waarden", "partTypeNChars": "N tekens", + "selectListPlaceholder": "Een lijst selecteren", + "noList": "Geen lijst aangemaakt", "elementsHelp": "Door komma's gescheiden lijst van toegestane waarden.", "minLabel": "Min", "maxLabel": "Max", "maxLengthLabel": "Max. lengte", + "partNameLabel": "Veldnaam (optioneel)", + "partNamePlaceholder": "Voer een naam in", + "saveRuleButton": "Regel opslaan", + "listNameStep": "Naam van de lijst", + "listNamePlaceholder": "Naam van de lijst", + "addElementsStep": "Elementen toevoegen", + "addOneElementLabel": "Een element toevoegen", + "elementNamePlaceholder": "Naam van het element", + "removeElementButton": "Verwijderen", + "addElementButton": "Een element toevoegen", + "bulkImportLabel": "Meerdere elementen toevoegen", + "bulkImportPlaceholder": "bijv.: PLAN, VISA, DOE", + "bulkImportHint": "Voer uw elementen in, gescheiden door komma's", + "importButton": "De lijst genereren", + "saveListButton": "Lijst opslaan", "emptyElementsError": "Geef ten minste één waarde op.", "invalidBoundsError": "Max moet groter dan of gelijk aan min zijn.", "missingBoundsError": "Min en max zijn verplicht voor begrensde waarden.", "invalidMaxLengthError": "De maximale lengte moet ten minste 1 zijn.", "missingListError": "Selecteer een lijst voor elk lijstelement.", "listInUseErrorTitle": "Lijst in gebruik", - "listInUseErrorMessage": "Deze lijst wordt gebruikt door de volgende regels: {constraints}. Pas ze aan voordat u de lijst verwijdert." + "listInUseErrorMessage": "Deze lijst wordt gebruikt door de volgende regels: {constraints}. Pas ze aan voordat u de lijst verwijdert.", + "folderRuleMenuItem": "Naamgevingsconventie", + "recursiveLabel": "Submappen meenemen", + "recursiveHelp": "Als u dit vakje aanvinkt, geldt deze regel ook voor bestanden in de submappen van uw hoofdmap.", + "applyRuleSuccessTitle": "Naamgevingsregel toegepast", + "applyRuleSuccessMessage": "De naamgevingsconventie is toegepast op de map \"{folder}\".", + "applyRuleWithConflictsSuccessTitle": "Regel toegepast met conflicten", + "applyRuleWithConflictsSuccessMessage": "De naamgevingsregel is toegepast op de map \"{folder}\". Sommige bestanden kunnen nog in conflict zijn.", + "applyRuleError": "De naamgevingsconventie kon niet worden toegepast.", + "applyRuleWarningTitle": "De naam voldoet niet aan de regel", + "conflictTooltip": "Dit bestand voldoet niet aan de naamgevingsconventie van de map.", + "conflictModalWarning": "Hernoem of verwijder de conflicterende documenten om door te gaan", + "conflictCurrentNameLabel": "Huidige naam", + "conflictNewNameLabel": "Nieuwe naam", + "conflictStatusDeleted": "Verwijderd", + "conflictStatusValid": "Conform", + "conflictStatusInvalid": "Niet conform", + "conflictSourceFolderLabel": "Bronmap:", + "conflictDeleteFileButton": "Bestand verwijderen", + "conflictRestoreFileButton": "Herstellen", + "maxCharsHint": "Maximaal {count} tekens", + "errorMessage": "Het aantal tekens overschrijdt de toegestane limiet.", + "renameButton": "Nieuwe naam bevestigen", + "applyRenameButton": "Nieuwe namen toepassen", + "confirmRenameButton": "Namen accepteren", + "renameConflictsMenuItem": "Conflicterende bestanden hernoemen", + "noConflictsTitle": "Geen conflicterende bestanden", + "noConflictsMessage": "Alle bestanden voldoen aan de naamgevingsconventie van hun map.", + "noDirectRuleOption": "Geen eigen regel voor deze map", + "inheritedRuleTitle": "Op deze map is een overgenomen regel van toepassing", + "inheritedRuleDescription": "De regel « {rule} » is ingesteld op de map « {folder} » en geldt ook voor de submappen ervan. Het verwijderen van de eigen regel van deze map schakelt deze overgenomen regel niet uit.", + "searchPlaceholder": "Een regel zoeken", + "removeRuleError": "De naamgevingsregel kon niet worden verwijderd.", + "removeRuleSuccessTitle": "Naamgevingsregel verwijderd", + "removeRuleSuccessMessage": "De naamgevingsregel is succesvol verwijderd.", + "modal": { + "noStrictTitle": "Niet-conforme bestanden hernoemen", + "strictTitle": "Niet-conforme bestanden hernoemen", + "strictDescription": "Deze map hanteert een strikte naamgevingsconventie. Het uploaden kan pas worden voltooid wanneer de onderstaande bestanden aan de verwachte regel voldoen.", + "noStrictDescription": "Stel de nieuwe naam samen uit de toegestane lijsten. Vrije tekstvelden worden gecontroleerd en het voorbeeld wordt automatisch gegenereerd.", + "expectedConventionLabel": "Verwachte conventie in deze map" + }, + "safeZoneModal": { + "title": "Let op!", + "text": "De naamgevingsregel is gewijzigd maar niet opgeslagen. Weet u zeker dat u het regelbeheer wilt sluiten? (De wijzigingen gaan verloren)" + }, + "partListInUseModal": { + "title": "Verwijderen niet mogelijk", + "description": "Deze lijst kan niet worden verwijderd.", + "listLabel": "Betreffende lijst:", + "rulesDescription": "Deze lijst wordt gebruikt door de volgende naamgevingsregels:", + "resolution": "Om deze lijst te verwijderen, past u eerst de betreffende regels aan zodat ze deze niet meer gebruiken." + } + }, + "FolderNamingConstraint": { + "ruleSectionTitle": "Regels toegepast op de map: " }, "OidcCallbackError": { "message": "Er heeft zich een fout voorgedaan bij de authenticatie", @@ -1031,6 +1124,7 @@ "back": "Terug", "cancel": "Annuleren", "change": "Veranderen", + "clear": "Wissen", "comment": "Opmerking", "confirm": "Bevestigen", "create": "Aanmaken", @@ -1048,6 +1142,7 @@ "folder": "Map", "import": "Importeren", "invalidName": "Ongeldige naam", + "invalidNameFormat": "De naam voldoet niet aan de naamgevingsregel (bijv. {example}).", "leave": "Verlaten", "modifiedOn": "Laatst gewijzigd", "modify": "Bewerken", diff --git a/src/i18n/lang/no.json b/src/i18n/lang/no.json index 1aa0d578b..fa43ca6a0 100644 --- a/src/i18n/lang/no.json +++ b/src/i18n/lang/no.json @@ -2,33 +2,126 @@ "NamingConstraint": { "managerTitle": "Administrasjon av navnekonvensjoner", "constraintsTab": "Navneregler", + "listsTab": "Administrasjon av lister", + "rulesSectionTitle": "Regelliste", + "addRuleButton": "legg til en regel", + "searchConstraintPlaceholder": "Søk etter en regel", + "searchListPlaceholder": "Søk etter en liste", + "rulesEmptyTitle": "Ingen regel lagt til", + "rulesEmptyText": "Du har ingen regler ennå. Start med å legge til en.", + "rulesEmptyPrerequisitesText": "Navneregler gjelder bare for filer i en mappe.", + "manageListsButton": "Administrer lister", + "listsSectionTitle": "Administrasjon av lister", + "createListButton": "Opprett en liste", + "listsEmptyTitle": "Ingen liste lagt til", + "listsEmptyText": "Du har ingen lister ennå. Start med å opprette en.", "strictBadge": "Streng", "createConstraintTitle": "Opprette en regel", "updateConstraintTitle": "Redigere en regel", "createListTitle": "Opprette listen min", "updateListTitle": "Redigere listen min", "nameLabel": "Navn", + "ruleNameStep": "Navn på regelen", + "ruleNamePlaceholder": "Navn på regelen", + "separatorStep": "Type skilletegn", + "separatorDashOption": "- (bindestrek)", + "separatorDotOption": ". (punktum)", + "separatorUnderscoreOption": "_ (understrek)", + "structureSectionTitle": "Regelens struktur", "strictLabel": "Streng regel", "strictHelp": "Hvis du krysser av i denne boksen, må du gi nytt navn til alle filer som ikke samsvarer med denne nye regelen.", "previewLabel": "Forhåndsvisning", "ruleSectionTitle": "Regel", + "emptyStateHelp": "Legg til det første elementet for å begynne å bygge regelen.", "addPartButton": "Legg til et element", "emptyParts": "Legg til minst ett element for å definere regelen.", "partTypeLabel": "Type", "partTypeValuesIn": "Liste", "partTypeBounded": "Avgrensede verdier", "partTypeNChars": "N tegn", + "selectListPlaceholder": "Velg en liste", + "noList": "Ingen liste opprettet", "elementsHelp": "Kommaseparert liste over tillatte verdier.", "minLabel": "Min", "maxLabel": "Maks", "maxLengthLabel": "Maks lengde", + "partNameLabel": "Feltnavn (valgfritt)", + "partNamePlaceholder": "Skriv inn et navn", + "saveRuleButton": "Lagre regelen", + "listNameStep": "Navn på listen", + "listNamePlaceholder": "Navn på listen", + "addElementsStep": "Legg til elementer", + "addOneElementLabel": "Legg til et element", + "elementNamePlaceholder": "Navn på elementet", + "removeElementButton": "Fjern", + "addElementButton": "Legg til et element", + "bulkImportLabel": "Legg til flere elementer", + "bulkImportPlaceholder": "f.eks.: PLAN, VISA, DOE", + "bulkImportHint": "Skriv inn elementene dine adskilt med komma", + "importButton": "Generer listen", + "saveListButton": "Lagre listen", "emptyElementsError": "Oppgi minst én verdi.", "invalidBoundsError": "Maks må være større enn eller lik min.", "missingBoundsError": "Min og maks er påkrevd for avgrensede verdier.", "invalidMaxLengthError": "Maks lengde må være minst 1.", "missingListError": "Velg en liste for hvert listeelement.", "listInUseErrorTitle": "Liste i bruk", - "listInUseErrorMessage": "Denne listen brukes av følgende regler: {constraints}. Rediger dem før du sletter listen." + "listInUseErrorMessage": "Denne listen brukes av følgende regler: {constraints}. Rediger dem før du sletter listen.", + "folderRuleMenuItem": "Navnekonvensjon", + "recursiveLabel": "Inkluder undermapper", + "recursiveHelp": "Hvis du krysser av i denne boksen, gjelder regelen også for filer i undermappene til hovedmappen din.", + "applyRuleSuccessTitle": "Navneregel brukt", + "applyRuleSuccessMessage": "Navnekonvensjonen er brukt på mappen «{folder}».", + "applyRuleWithConflictsSuccessTitle": "Regel brukt med konflikter", + "applyRuleWithConflictsSuccessMessage": "Navneregelen er brukt på mappen «{folder}». Noen filer kan fortsatt være i konflikt.", + "applyRuleError": "Navnekonvensjonen kunne ikke brukes.", + "applyRuleWarningTitle": "Navnet samsvarer ikke med regelen", + "conflictTooltip": "Denne filen samsvarer ikke med mappens navnekonvensjon.", + "conflictModalWarning": "Gi nytt navn til eller slett dokumentene i konflikt for å fortsette", + "conflictCurrentNameLabel": "Nåværende navn", + "conflictNewNameLabel": "Nytt navn", + "conflictStatusDeleted": "Slettet", + "conflictStatusValid": "I samsvar", + "conflictStatusInvalid": "Ikke i samsvar", + "conflictSourceFolderLabel": "Kildemappe:", + "conflictDeleteFileButton": "Slett filen", + "conflictRestoreFileButton": "Gjenopprett", + "maxCharsHint": "Maksimalt {count} tegn", + "errorMessage": "Antall tegn overskrider den tillatte grensen.", + "renameButton": "Bekreft nytt navn", + "applyRenameButton": "Bruk nye navn", + "confirmRenameButton": "Godta navnene", + "renameConflictsMenuItem": "Gi nytt navn til filer i konflikt", + "noConflictsTitle": "Ingen filer i konflikt", + "noConflictsMessage": "Alle filer samsvarer med navnekonvensjonen for mappen sin.", + "noDirectRuleOption": "Ingen egen regel for denne mappen", + "inheritedRuleTitle": "En arvet regel gjelder for denne mappen", + "inheritedRuleDescription": "Regelen « {rule} » er satt på mappen « {folder} » og gjelder også for undermappene. Å fjerne mappens egen regel deaktiverer ikke denne arvede regelen.", + "searchPlaceholder": "Søk etter en regel", + "removeRuleError": "Navneregelen kunne ikke fjernes.", + "removeRuleSuccessTitle": "Navneregel fjernet", + "removeRuleSuccessMessage": "Navneregelen ble fjernet.", + "modal": { + "noStrictTitle": "Gi nytt navn til filer som ikke samsvarer", + "strictTitle": "Gi nytt navn til filer som ikke samsvarer", + "strictDescription": "Denne mappen krever en streng navnekonvensjon. Opplastingen kan ikke fullføres før filene nedenfor samsvarer med den forventede regelen.", + "noStrictDescription": "Bygg det nye navnet fra de tillatte listene. Fritekstfelt kontrolleres, og forhåndsvisningen genereres automatisk.", + "expectedConventionLabel": "Forventet konvensjon i denne mappen" + }, + "safeZoneModal": { + "title": "Advarsel!", + "text": "Navneregelen er endret, men ikke lagret. Er du sikker på at du vil lukke regelbehandleren? (Endringene vil gå tapt)" + }, + "partListInUseModal": { + "title": "Kan ikke slette", + "description": "Denne listen kan ikke slettes.", + "listLabel": "Berørt liste:", + "rulesDescription": "Denne listen brukes av følgende navneregler:", + "resolution": "For å slette denne listen må du først endre de berørte reglene slik at de ikke lenger bruker den." + } + }, + "FolderNamingConstraint": { + "ruleSectionTitle": "Regler brukt på mappen: " }, "OidcCallbackError": { "message": "En feil oppsto under autentiseringen...", @@ -1031,6 +1124,7 @@ "back": "Tilbake", "cancel": "Avbryt", "change": "Endre", + "clear": "Tøm", "comment": "Kommentar", "confirm": "Bekrefte", "create": "Opprett", @@ -1048,6 +1142,7 @@ "folder": "Mappe", "import": "Importer", "invalidName": "Ugyldig navn", + "invalidNameFormat": "Navnet samsvarer ikke med navneregelen (f.eks. {example}).", "leave": "Forlat", "modifiedOn": "Sist endret", "modify": "Rediger",