diff --git a/dashboard/TRANSLATIONS.md b/dashboard/TRANSLATIONS.md
index 495616821..ac0412e91 100644
--- a/dashboard/TRANSLATIONS.md
+++ b/dashboard/TRANSLATIONS.md
@@ -72,3 +72,10 @@ In general, we put just "Delete User" in Title and provide the username in the c
Title = action (what you’re doing)
Description = context (to whom it applies)
+### Description Text
+
+| Context | Verb form | Example |
+| --------------------------------- | ------------------------ | ---------------------------------------------------------------------- |
+| **Action / Button / Instruction** | **Imperative** → “Add” | Button: **Add**, Tooltip: “Add a new link” |
+| **Section / View description** | **Descriptive** → “Adds” | Description: **Adds shortcuts to external services on the dashboard.** |
+
diff --git a/dashboard/public/translation/de.json b/dashboard/public/translation/de.json
index 794409770..7115d7877 100644
--- a/dashboard/public/translation/de.json
+++ b/dashboard/public/translation/de.json
@@ -1593,9 +1593,6 @@
},
"email": "E-Mail",
"passwordToken": "Passwort/Token",
- "dialog": {
- "title": "Docker-Registry"
- },
"emptyPlaceholder": "Keine Docker-Registries"
},
"dockerRegistres": {
diff --git a/dashboard/public/translation/en.json b/dashboard/public/translation/en.json
index 5326c238f..f71417fff 100644
--- a/dashboard/public/translation/en.json
+++ b/dashboard/public/translation/en.json
@@ -625,7 +625,7 @@
},
"services": {
"title": "Services",
- "description": "Services implement functionality such as databases, email and authentication.",
+ "description": "Services provide functionality such as databases, email and authentication.",
"service": "Service",
"memoryUsage": "Memory Usage",
"memoryLimit": "Memory Limit",
@@ -658,7 +658,7 @@
},
"timezone": {
"title": "System Time Zone",
- "description": "Used for scheduling backups and updates. UI timestamps always follow the browser’s time zone."
+ "description": "Used to schedule backups and updates. UI timestamps always follow the browser’s time zone."
},
"updates": {
"title": "Updates",
@@ -666,8 +666,8 @@
"updateAvailableAction": "Update Available",
"stopUpdateAction": "Stop Update",
"disabled": "Disabled",
- "schedule": "Schedule",
- "description": "Platform and app updates are applied on the schedule set here, using the System Time Zone.",
+ "schedule": "Update Schedule",
+ "description": "Platform and app updates are applied on the configured schedule, using the System Time Zone.",
"onLatest": "latest"
},
"updateScheduleDialog": {
@@ -677,7 +677,7 @@
"selectOne": "Select at least one day and time",
"days": "Days",
"hours": "Hours",
- "description": "Set the days and times for automatic platform and app updates. Make sure this schedule does not overlap with the backup schedules."
+ "description": "Set the days and times for automatic platform and app updates. Ensure this schedule doesn’t overlap with backup schedules."
},
"updateDialog": {
"title": "Update Cloudron to",
@@ -1604,20 +1604,21 @@
"provider": "Provider",
"username": "Username",
"title": "Docker Registries",
- "description": "Cloudron can pull and install custom apps from a private docker registry.",
+ "description": "Configure access to private Docker registries for installing custom apps.",
"removeDialog": {
- "title": "Delete {{ serverAddress }}"
+ "title": "Remove Docker Registry"
},
"email": "Email",
"passwordToken": "Password/Token",
+ "emptyPlaceholder": "No docker registries",
"dialog": {
- "title": "Docker Registry"
- },
- "emptyPlaceholder": "No docker registries"
+ "addTitle": "Add Docker Registry",
+ "editTitle": "Edit Docker Registry"
+ }
},
"dockerRegistres": {
"removeDialog": {
- "description": "Really remove this registry?"
+ "description": "Remove Docker registry \"{{ serverAddress }}\"?"
}
},
"appearance": {
@@ -1628,7 +1629,7 @@
},
"externallinks": {
"label": "External Links",
- "description": "Add shortcuts to external services on the dashboard."
+ "description": "Adds shortcuts to external services on the dashboard."
},
"server": {
"title": "Server"
diff --git a/dashboard/public/translation/es.json b/dashboard/public/translation/es.json
index 7082b5a3c..056299c12 100644
--- a/dashboard/public/translation/es.json
+++ b/dashboard/public/translation/es.json
@@ -1592,9 +1592,6 @@
},
"email": "Correo electrónico",
"passwordToken": "Contraseña/Token",
- "dialog": {
- "title": "Registro de Docker"
- },
"emptyPlaceholder": "No hay registros de Docker"
},
"dockerRegistres": {
diff --git a/dashboard/public/translation/nl.json b/dashboard/public/translation/nl.json
index 3ac24319d..5011f13cb 100644
--- a/dashboard/public/translation/nl.json
+++ b/dashboard/public/translation/nl.json
@@ -46,9 +46,9 @@
"next": "Volgende"
},
"rebootDialog": {
- "title": "Weet je zeker dat je de server wilt herstarten?",
+ "title": "Herstart Server",
"rebootAction": "Herstart nu",
- "description": "Gebruik dit om veiligheidsupdates te installeren of indien je onverwachte problemen ervaart. Alle apps en services die momenteel werken op deze Cloudron zullen automatisch opstarten zodra de herstart is voltooid."
+ "description": "Herstart de server om updates toe te passen of onverwacht gedrag te verhelpen. Alle apps en services worden daarna automatisch opnieuw opgestart."
},
"offline": "Cloudron is offline. Opnieuw verbinden…",
"searchPlaceholder": "Zoeken",
@@ -164,18 +164,18 @@
"displayName": "Weergavenaam",
"primaryEmail": "Primair E-mailadres",
"recoveryEmail": "Wachtwoordherstel e-mailadres",
- "activeCheckbox": "Actieve Gebruiker",
+ "activeCheckbox": "Gebruiker is actief",
"usernamePlaceholder": "Optioneel. Indien niet ingevuld mag de gebruiker bij registratie zelf kiezen",
"fallbackEmailPlaceholder": "Indien niet ingevoerd zal de primaire e-mail gebruikt worden",
"displayNamePlaceholder": "Optioneel. Indien niet ingevoerd kan de gebruiker het kiezen tijdens eerste aanmelding"
},
"deleteUserDialog": {
"deleteAction": "Verwijder",
- "title": "Verwijder Gebruiker {{ username }}",
- "description": "Na verwijdering heeft de gebruiker geen toegang meer tot het Dashboard of apps. Let op: de gebruikersgegevens in de apps worden niet verwijderd."
+ "title": "Verwijder Gebruiker",
+ "description": "Na verwijdering heeft de gebruiker geen toegang meer tot het Dashboard of apps. Let op: de gebruikersgegevens in de apps worden niet verwijderd.
Verwijder gebruiker \"{{ username }}\" ?"
},
"editUserDialog": {
- "title": "Gebruiker {{ username }} bewerken",
+ "title": "Gebruiker bewerken",
"externalLdapWarning": "Deze gebruiker wordt gesynchroniseerd met het externe LDAP adresboek."
},
"addGroupDialog": {
@@ -188,12 +188,12 @@
"allowedApps": "Toegestane Apps"
},
"editGroupDialog": {
- "title": "Groep {{ name }} bewerken",
+ "title": "Groep bewerken",
"externalLdapWarning": "Deze groep wordt gesynchroniseerd met het externe LDAP adresboek."
},
"deleteGroupDialog": {
- "title": "Groep {{ name }} verwijderen",
- "description": "Deze groep heeft {{ memberCount }} lid/leden. Weet je zeker dat je deze groep wilt verwijderen?",
+ "title": "Groep verwijderen",
+ "description": "Deze groep heeft {{ memberCount }} lid/leden.
Verwijder groep \"{{ name }}\"?",
"deleteAction": "Verwijder"
},
"passwordResetDialog": {
@@ -233,7 +233,7 @@
},
"exposedLdap": {
"ipRestriction": {
- "placeholder": "Regelgescheiden IP adres of Subnet",
+ "placeholder": "Regelgescheiden IP adressen of Subnets",
"description": "Beperk de toegang tot de Directory Server tot specifieke IP's of bereiken. Regels die starten met # worden beschouwd als commentaar.",
"label": "Beperk toegang"
},
@@ -418,7 +418,7 @@
"diskPath": "Schijf pad",
"user": "Gebruiker",
"privateKey": "Private sleutel",
- "cifsSealSupport": "Gebruik seal versleuteling. SMB v3 is hiervoor minimaal benodigd",
+ "cifsSealSupport": "Gebruik seal versleuteling (SMB v3 is hiervoor minimaal benodigd)",
"chown": "Extern bestandssysteem ondersteunt chown",
"encryptFilenames": "Versleutel bestandsnamen",
"preserveAttributesLabel": "Behoud bestand attributen",
@@ -456,12 +456,12 @@
"deleteAction": "Verwijder"
},
"deleteArchiveDialog": {
- "description": "Na verwijdering zal het Archief worden opgeschoond op basis van het backup-beleid.",
- "title": "Verwijder Archief van {{appTitle}} ({{fqdn}})"
+ "description": "Na verwijdering zal het Archief worden opgeschoond op basis van het backup-beleid.
Verwijder \"{{ appTitle }} ({{ appFqdn }})\"?",
+ "title": "Verwijder Archief"
},
"restoreArchiveDialog": {
"title": "Herstel vanuit Archief",
- "description": "Hiermee installeer je {{appId}} op de aangegeven locatie met de backup van {{creationTime}}.",
+ "description": "Zet {{appId}} terug op de aangegeven locatie met de backup van {{creationTime}}.",
"restoreAction": "Herstel",
"restoreActionOverwrite": "Herstel en overschrijf DNS"
},
@@ -580,7 +580,7 @@
"nameComUsername": "Name.com Gebruikersnaam",
"namecheapInfo": "Het IP adres van deze server moet opgenomen worden in de toegangslijst voor deze API Sleutel",
"addTitle": "Domein toevoegen",
- "editTitle": "Configureer {{ domain }}",
+ "editTitle": "Bewerk Domein",
"provider": "DNS Aanbieder",
"route53AccessKeyId": "Toegangssleutel Id",
"route53SecretAccessKey": "Geheime toegangssleutel",
@@ -640,12 +640,12 @@
"renewCerts": {
"title": "Vernieuw Certificaten",
"renewAllAction": "Vernieuw alle Certificaten",
- "description": "Let's Encrypt certificaten worden automatisch vernieuwd. Gebruik deze optie om nu te vernieuwen."
+ "description": "Let's Encrypt certificaten worden automatisch vernieuwd. Je kunt ze indien nodig handmatig vernieuwen."
},
"changeDashboardDomain": {
"changeAction": "Domein aanpassen",
"title": "Dashboard Domein",
- "description": "Hierdoor verhuist het Dashboard naar het my subdomein van het geselecteerde domein."
+ "description": "Verhuis het Dashboard naar het “my” subdomein van het geselecteerde domein."
},
"removeDialog": {
"title": "Verwijder domein",
@@ -654,7 +654,7 @@
},
"syncDns": {
"syncAction": "Sync DNS",
- "description": "Hiermee worden de app en e-mail DNS records van alle domeinen opnieuw aangemaakt.",
+ "description": "Update app en e-mail DNS records van alle domeinen.",
"title": "Sync DNS"
},
"domainWellKnown": {
@@ -662,7 +662,8 @@
},
"tooltipWellKnown": "Well-Known locaties",
"emptyPlaceholder": "Geen Domeinen",
- "noMatchesPlaceholder": "Geen bijbehorende domein"
+ "noMatchesPlaceholder": "Geen bijbehorende domein",
+ "description": "Het toevoegen van een domein maakt het mogelijk om apps te installeren op de subdomeinen ervan."
},
"app": {
"email": {
@@ -987,7 +988,7 @@
"interface": "Naam netwerkinterface",
"configure": "Configureer",
"interfaceDescription": "Toon beschikbare apparaten op deze server met:",
- "description": "Dit IPv4 adres is gebruikt om de DNS records in te stellen.",
+ "description": "Het IPv4 adres is gebruikt voor DNS A records.",
"detected": "gedetecteerd",
"address": "IP adres"
},
@@ -995,18 +996,18 @@
"title": "Firewall",
"configure": {
"title": "Firewall Configuratie",
- "blocklistPlaceholder": "Regelgescheiden IP adressen of subnet",
- "description": "Deze IP-adressen worden door de firewall geblokkeerd. Ze kunnen geen verbinding maken met de server, ook niet met de e-mailserver, het Dashboard en de apps. Let op: zorg ervoor dat je jezelf niet buitensluit."
+ "blocklistPlaceholder": "Regelgescheiden IP adressen of subnets",
+ "description": "Deze IP-adressen worden door de firewall geblokkeerd voor toegang tot de server, inclusief de e-mailserver, het Dashboard en alle apps. Let op: zorg ervoor dat je jezelf niet buitensluit."
},
"blockedIpRanges": "Geblokkeerde IP's & bereiken",
"blocklist": "{{ blockCount }} IP('s) geblokkeerd"
},
"dyndns": {
"title": "Dynamische DNS",
- "description": "Schakel deze optie in om je DNS records synchroon te houden met je veranderende IP adres. Dit is handig als je Cloudron opgenomen is in een netwerk waarbij het publieke IP adres steeds wisselt zoals in een thuissituatie."
+ "description": "Houdt DNS records synchroon met een veranderend publiek IP adres. Handig als je Cloudron opgenomen is in een netwerk waarbij het IP adres steeds wisselt zoals in een thuissituatie."
},
"configureIp": {
- "title": "Configureer IPv4 aanbieder",
+ "title": "Configureer IPv4",
"providerGenericDescription": "Het publieke IP adres van deze server wordt automatisch gedetecteerd."
},
"ipv4": {
@@ -1015,10 +1016,10 @@
"ipv6": {
"address": "IPv6 adres",
"title": "IPv6",
- "description": "Dit IPv6 adres is gebruikt om DNS AAAA records te configureren."
+ "description": "Het IPv6 adres gebruikt voor DNS AAAA records ."
},
"configureIpv6": {
- "title": "Configureer IPv6 aanbieder"
+ "title": "Configureer IPv6"
},
"trustedIps": {
"description": "HTTP headers van bijbehorende IP adressen worden vertrouwd.",
@@ -1039,7 +1040,7 @@
"recoveryModeDescription": "Indien de dienst continue herstart of niet reageert vanwege datacorruptie, plaats de dienst in dan Herstelmodus. Bekijk de volgende instructies om de dienst weer werkend te krijgen.",
"enableRecoveryMode": "Inschakelen Herstelmodus"
},
- "description": "Diensten bestaan uit functionaliteiten zoals databases, e-mail en authenticatie."
+ "description": "Diensten leveren functionaliteiten zoals databases, e-mail en authenticatie."
},
"settings": {
"appstoreAccount": {
@@ -1061,16 +1062,16 @@
},
"timezone": {
"title": "Systeem Tijdzone",
- "description": "Deze instelling wordt gebruikt voor backups en updates. Tijden zijn op basis van jouw browser’s tijdzone."
+ "description": "Gebruikt voor geplande backups en updates. Tijden zijn op basis van jouw browser’s tijdzone."
},
"updates": {
"title": "Updates",
"checkForUpdatesAction": "Controleer op updates",
"updateAvailableAction": "Update beschikbaar",
"stopUpdateAction": "Stop Update",
- "description": "Platform en app updates worden toegepast met deze planning en deze Systeem Tijdzone.",
+ "description": "Platform en app updates worden toegepast met de geconfigureerde planning met deze Systeem Tijdzone.",
"disabled": "Uitgeschakeld",
- "schedule": "Planning",
+ "schedule": "Update Planning",
"onLatest": "Laatste"
},
"updateScheduleDialog": {
@@ -1457,9 +1458,11 @@
"backToLoginAction": "Terug naar inloggen"
},
"volumes": {
- "description": "Volumes zijn lokale of externe bestandssystemen. Ze kunnen gebruikt worden als app data opslag of als gedeelde opslag tussen apps.",
+ "description": "Volumes zijn lokale of externe bestandssystemen. Ze kunnen gebruikt worden als primaire app data opslag of gedeelde opslag tussen apps.",
"removeVolumeDialog": {
- "removeAction": "Verwijder"
+ "removeAction": "Verwijder",
+ "title": "Verwijder Volume",
+ "description": "Verwijder volume \"{{ volumeName }}\"?"
},
"addVolumeDialog": {
"title": "Volume toevoegen",
@@ -1479,7 +1482,7 @@
"localDirectory": "Lokale map",
"remountActionTooltip": "Her-koppel",
"editVolumeDialog": {
- "title": "Bewerk volume {{ name }}"
+ "title": "Bewerk Volume"
},
"emptyPlaceholder": "Geen volumes"
},
@@ -1545,15 +1548,16 @@
"id": "Client ID",
"secret": "Client geheim",
"signingAlgorithm": "Ondertekeningsalgoritme",
- "loginRedirectUri": "Login Callback URL's (met komma gescheiden)"
+ "loginRedirectUri": "Inlog Callback URL's",
+ "loginRedirectUriPlaceholder": "Komma-gescheiden URL's"
},
- "description": "De OpenID aanbieder kan gebruikt worden door externe applicaties voor single sign-on.",
+ "description": "Cloudron's OpenID aanbieder kan gebruikt worden voor single sign-on door externe applicaties.",
"editClientDialog": {
- "title": "Bewerk Client {{ client }}"
+ "title": "Bewerk Client"
},
"deleteClientDialog": {
- "title": "Weet je zeker dat je Client {{ client }} wilt verwijderen?",
- "description": "Door het verwijderen van deze OIDC Client worden toegang tokens ongeldig. Apps die deze OIDC Client gebruiken kunnen zich niet meer authenticeren."
+ "title": "Verwijder Client",
+ "description": "Na het verwijderen worden toegang tokens, uitgegeven door deze client, ongeldig. Apps die deze gebruiken kunnen niet meer authenticeren.
Verwijder client \"{{ clientName }}\"?"
},
"env": {
"discoveryUrl": "Discovery URL"
@@ -1561,6 +1565,10 @@
"clients": {
"title": "OpenID Clients",
"empty": "Geen OpenID clients"
+ },
+ "clientCredentials": {
+ "title": "Clientreferenties",
+ "description": "Kopieer de inloggegevens voor client \"{{ clientName }}\"."
}
},
"userdirectory": {
@@ -1596,20 +1604,21 @@
"provider": "Aanbieder",
"username": "Gebruikersnaam",
"title": "Docker Registries",
- "description": "Cloudron kan aangepaste apps ophalen en installeren vanuit een privé Docker-registry.",
+ "description": "Configureer toegang tot private Docker registers voor het installeren van aangepaste apps.",
"removeDialog": {
- "title": "Verwijder {{ serverAddress }}"
+ "title": "Verwijder Docker Register"
},
"email": "E-mail",
"passwordToken": "Wachtwoord/Token",
+ "emptyPlaceholder": "Geen Docker registries",
"dialog": {
- "title": "Docker Registry"
- },
- "emptyPlaceholder": "Geen Docker registries"
+ "addTitle": "Docker Registry toevoegen",
+ "editTitle": "Bewerk Docker Registry"
+ }
},
"dockerRegistres": {
"removeDialog": {
- "description": "Wil je deze registry verwijderen?"
+ "description": "Verwijder Docker registry \"{{ serverAddress }}\"?"
}
},
"appearance": {
@@ -1620,7 +1629,7 @@
},
"externallinks": {
"label": "Externe Links",
- "description": "Voeg snelkoppelingen naar externe diensten toe aan het dashboard."
+ "description": "Voegt snelkoppelingen naar externe diensten toe aan het dashboard."
},
"server": {
"title": "Server"
diff --git a/dashboard/public/translation/ru.json b/dashboard/public/translation/ru.json
index 339b6e914..57310f6c5 100644
--- a/dashboard/public/translation/ru.json
+++ b/dashboard/public/translation/ru.json
@@ -1597,9 +1597,6 @@
},
"email": "Email",
"passwordToken": "Пароль/Токен",
- "dialog": {
- "title": "Реестр Docker"
- },
"emptyPlaceholder": "Реестры Docker отсутствуют"
},
"dockerRegistres": {
diff --git a/dashboard/src/components/DockerRegistries.vue b/dashboard/src/components/DockerRegistries.vue
index e048d3be1..dc0117849 100644
--- a/dashboard/src/components/DockerRegistries.vue
+++ b/dashboard/src/components/DockerRegistries.vue
@@ -62,11 +62,12 @@ function onEditOrAdd(registry = null) {
async function onRemove(registry) {
const yes = await inputDialog.value.confirm({
- title: t('dockerRegistries.removeDialog.title', { serverAddress: registry.serverAddress}),
- message: t('dockerRegistres.removeDialog.description'),
+ title: t('dockerRegistries.removeDialog.title'),
+ message: t('dockerRegistres.removeDialog.description', { serverAddress: registry.serverAddress }),
confirmStyle: 'danger',
- confirmLabel: t('main.dialog.delete'),
- rejectLabel: t('main.dialog.cancel')
+ confirmLabel: t('main.action.remove'),
+ rejectLabel: t('main.dialog.cancel'),
+ rejectStyle: 'secondary'
});
if (!yes) return;
diff --git a/dashboard/src/components/DockerRegistryDialog.vue b/dashboard/src/components/DockerRegistryDialog.vue
index 6223a3a02..8970ef571 100644
--- a/dashboard/src/components/DockerRegistryDialog.vue
+++ b/dashboard/src/components/DockerRegistryDialog.vue
@@ -82,8 +82,8 @@ defineExpose({