From a62851915c6d814e2ce469cadfb86b1bd25f887a Mon Sep 17 00:00:00 2001 From: Kailash Nadh Date: Fri, 21 Jul 2023 23:46:46 +0530 Subject: [PATCH] Mask passwords on the UI accurately with the actual passwords length. This PR masks all the password fields in the UI with a pseudo dot character retaining the rune length of the original password so that the password fields on the UI appear to be containing the entered value as-is. The earlier implementation would revert to a fixed length dummy password confusing certain users and making it look like the password they entered wasn't being saved. --- cmd/settings.go | 15 ++++---- frontend/src/views/Settings.vue | 64 +++++++++++++++++---------------- i18n/ca.json | 5 +++ i18n/cs-cz.json | 5 +++ i18n/cy.json | 5 +++ i18n/de.json | 5 +++ i18n/en.json | 5 +-- i18n/es.json | 5 +++ i18n/fi.json | 5 +++ i18n/fr.json | 5 +++ i18n/hu.json | 5 +++ i18n/it.json | 5 +++ i18n/jp.json | 5 +++ i18n/ml.json | 5 +++ i18n/nl.json | 5 +++ i18n/pl.json | 5 +++ i18n/pt-BR.json | 5 +++ i18n/pt.json | 5 +++ i18n/ro.json | 7 +++- i18n/ru.json | 5 +++ i18n/se.json | 5 +++ i18n/sk.json | 5 +++ i18n/tr.json | 5 +++ i18n/vi.json | 5 +++ i18n/zh-CN.json | 5 +++ i18n/zh-TW.json | 5 +++ 26 files changed, 162 insertions(+), 39 deletions(-) diff --git a/cmd/settings.go b/cmd/settings.go index 03bacda..817db91 100644 --- a/cmd/settings.go +++ b/cmd/settings.go @@ -10,6 +10,7 @@ import ( "strings" "syscall" "time" + "unicode/utf8" "github.com/gofrs/uuid" "github.com/jmoiron/sqlx/types" @@ -21,6 +22,8 @@ import ( "github.com/labstack/echo/v4" ) +const pwdMask = "•" + type aboutHost struct { OS string `json:"os"` OSRelease string `json:"os_release"` @@ -57,17 +60,17 @@ func handleGetSettings(c echo.Context) error { // Empty out passwords. for i := 0; i < len(s.SMTP); i++ { - s.SMTP[i].Password = "" + s.SMTP[i].Password = strings.Repeat(pwdMask, utf8.RuneCountInString(s.SMTP[i].Password)) } for i := 0; i < len(s.BounceBoxes); i++ { - s.BounceBoxes[i].Password = "" + s.BounceBoxes[i].Password = strings.Repeat(pwdMask, utf8.RuneCountInString(s.BounceBoxes[i].Password)) } for i := 0; i < len(s.Messengers); i++ { - s.Messengers[i].Password = "" + s.Messengers[i].Password = strings.Repeat(pwdMask, utf8.RuneCountInString(s.Messengers[i].Password)) } - s.UploadS3AwsSecretAccessKey = "" - s.SendgridKey = "" - s.SecurityCaptchaSecret = "" + s.UploadS3AwsSecretAccessKey = strings.Repeat(pwdMask, utf8.RuneCountInString(s.UploadS3AwsSecretAccessKey)) + s.SendgridKey = strings.Repeat(pwdMask, utf8.RuneCountInString(s.SendgridKey)) + s.SecurityCaptchaSecret = strings.Repeat(pwdMask, utf8.RuneCountInString(s.SecurityCaptchaSecret)) return c.JSON(http.StatusOK, okResp{s}) } diff --git a/frontend/src/views/Settings.vue b/frontend/src/views/Settings.vue index 25b67f0..e04e4bb 100644 --- a/frontend/src/views/Settings.vue +++ b/frontend/src/views/Settings.vue @@ -77,8 +77,6 @@ import BounceSettings from './settings/bounces.vue'; import MessengerSettings from './settings/messengers.vue'; import AppearanceSettings from './settings/appearance.vue'; -const dummyPassword = ' '.repeat(8); - export default Vue.extend({ components: { GeneralSettings, @@ -113,10 +111,13 @@ export default Vue.extend({ const form = JSON.parse(JSON.stringify(this.form)); // SMTP boxes. + let hasDummy = ''; for (let i = 0; i < form.smtp.length; i += 1) { // If it's the dummy UI password placeholder, ignore it. - if (form.smtp[i].password === dummyPassword) { + if (this.isDummy(form.smtp[i].password)) { form.smtp[i].password = ''; + } else if (this.hasDummy(form.smtp[i].password)) { + hasDummy = `smtp #${i + 1}`; } if (form.smtp[i].strEmailHeaders && form.smtp[i].strEmailHeaders !== '[]') { @@ -129,30 +130,45 @@ export default Vue.extend({ // Bounces boxes. for (let i = 0; i < form['bounce.mailboxes'].length; i += 1) { // If it's the dummy UI password placeholder, ignore it. - if (form['bounce.mailboxes'][i].password === dummyPassword) { + if (this.isDummy(form['bounce.mailboxes'][i].password)) { form['bounce.mailboxes'][i].password = ''; + } else if (this.hasDummy(form['bounce.mailboxes'][i].password)) { + hasDummy = `bounce #${i + 1}`; } } - if (form['upload.s3.aws_secret_access_key'] === dummyPassword) { + if (this.isDummy(form['upload.s3.aws_secret_access_key'])) { form['upload.s3.aws_secret_access_key'] = ''; + } else if (this.hasDummy(form['upload.s3.aws_secret_access_key'])) { + hasDummy = 's3'; } - if (form['bounce.sendgrid_key'] === dummyPassword) { + if (this.isDummy(form['bounce.sendgrid_key'])) { form['bounce.sendgrid_key'] = ''; + } else if (this.hasDummy(form['bounce.sendgrid_key'])) { + hasDummy = 'sendgrid'; } - if (form['security.captcha_secret'] === dummyPassword) { + if (this.isDummy(form['security.captcha_secret'])) { form['security.captcha_secret'] = ''; + } else if (this.hasDummy(form['security.captcha_secret'])) { + hasDummy = 'captcha'; } for (let i = 0; i < form.messengers.length; i += 1) { // If it's the dummy UI password placeholder, ignore it. - if (form.messengers[i].password === dummyPassword) { + if (this.isDummy(form.messengers[i].password)) { form.messengers[i].password = ''; + } else if (this.hasDummy(form.messengers[i].password)) { + hasDummy = `messenger #${i + 1}`; } } + if (hasDummy) { + this.$utils.toast(this.$t('globals.messages.passwordChangeFull', { name: hasDummy }), 'is-danger'); + return false; + } + // Domain blocklist array from multi-line strings. form['privacy.domain_blocklist'] = form['privacy.domain_blocklist'].split('\n').map((v) => v.trim().toLowerCase()).filter((v) => v !== ''); @@ -181,6 +197,8 @@ export default Vue.extend({ }, () => { this.isLoading = false; }); + + return false; }, getSettings() { @@ -191,30 +209,8 @@ export default Vue.extend({ // Serialize the `email_headers` array map to display on the form. for (let i = 0; i < d.smtp.length; i += 1) { d.smtp[i].strEmailHeaders = JSON.stringify(d.smtp[i].email_headers, null, 4); - - // The backend doesn't send passwords, so add a dummy so that - // the password looks filled on the UI. - d.smtp[i].password = dummyPassword; } - for (let i = 0; i < d['bounce.mailboxes'].length; i += 1) { - // The backend doesn't send passwords, so add a dummy so that - // the password looks filled on the UI. - d['bounce.mailboxes'][i].password = dummyPassword; - } - - for (let i = 0; i < d.messengers.length; i += 1) { - // The backend doesn't send passwords, so add a dummy so that it - // the password looks filled on the UI. - d.messengers[i].password = dummyPassword; - } - - if (d['upload.provider'] === 's3') { - d['upload.s3.aws_secret_access_key'] = dummyPassword; - } - d['bounce.sendgrid_key'] = dummyPassword; - d['security.captcha_secret'] = dummyPassword; - // Domain blocklist array to multi-line string. d['privacy.domain_blocklist'] = d['privacy.domain_blocklist'].join('\n'); @@ -227,6 +223,14 @@ export default Vue.extend({ }); }); }, + + isDummy(pwd) { + return !pwd || (pwd.match(/•/g) || []).length === pwd.length; + }, + + hasDummy(pwd) { + return pwd.includes('•'); + }, }, computed: { diff --git a/i18n/ca.json b/i18n/ca.json index ab9cbc7..299e0ec 100644 --- a/i18n/ca.json +++ b/i18n/ca.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Servei desconegut", "bounces.view": "Veure rebots", "campaigns.addAltText": "Afegeix un missatge de text pla alternatiu", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Arxiu", "campaigns.archiveEnable": "Publica a l'arxiu públic", "campaigns.archiveHelp": "Publica (en curs, aturada, finalitzada) el missatge de campanya a l'arxiu públic ", "campaigns.archiveMeta": "Metadades de la campanya", "campaigns.archiveMetaHelp": "Dades del subscriptor de prova per ser usat en el missatge públic que inclou nom, correu electrònic i qualsevol atribut opcional emprat en el missatge de campanya o plantilla.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "No es pot actualitzar una campanya en curs o ja finalitzada.", "campaigns.clicks": "Clics", "campaigns.confirmDelete": "Esborra {name}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "Falten camps: {name}", "globals.messages.notFound": "No s'ha trobat {name} ", "globals.messages.passwordChange": "Introduïu un valor per canviar", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" actualitzat", "globals.months.1": "gen.", "globals.months.10": "oct.", @@ -438,6 +441,8 @@ "settings.media.s3.url": "URL del backend S3", "settings.media.s3.urlHelp": "Canvia només si fas servir un backend personalitzat compatible amb S3 com Minio.", "settings.media.title": "Càrrega de mèdia", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Ruta de càrrega", "settings.media.upload.pathHelp": "Ruta al directori on es carregaran els mèdia.", "settings.media.upload.uri": "Carrega URI", diff --git a/i18n/cs-cz.json b/i18n/cs-cz.json index 4f79760..4f8cb00 100644 --- a/i18n/cs-cz.json +++ b/i18n/cs-cz.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Neznámá služba.", "bounces.view": "Zobrazit převzetí", "campaigns.addAltText": "Přidat alternativní zprávu ve formátu prostého textu", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archiv", "campaigns.archiveEnable": "Zveřejnit ve veřejném archivu", "campaigns.archiveHelp": "Zveřejnit (bežící, pozastavenou, dokončenou) zprávu kampaně ve veřejném archivu", "campaigns.archiveMeta": "Metadata kampaně", "campaigns.archiveMetaHelp": "Použít prázdná data přihlášených ve veřejné zpráve včetně jména, emailu a jiných volitelných atributů použitých ve zprávách kampaně nebo šablonách.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Nelze aktualizovat spuštěnou nebo dokončenou kampaň.", "campaigns.clicks": "Klepnutí", "campaigns.confirmDelete": "Odstranit {name}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "Chybějící pole: {name}", "globals.messages.notFound": "{name} nebyl nalezen", "globals.messages.passwordChange": "Zadejte hodnotu ke změně", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" aktualizován", "globals.months.1": "Led", "globals.months.10": "Říj", @@ -438,6 +441,8 @@ "settings.media.s3.url": "Adresa URL pro S3 backend", "settings.media.s3.urlHelp": "Lze změnit, pouze pokud se použije S3 kompatibilní backend, jako je Minio.", "settings.media.title": "Odeslání médií", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Cesta odeslání", "settings.media.upload.pathHelp": "Cesta k adresáři, kam se odešlou média.", "settings.media.upload.uri": "URI odeslání", diff --git a/i18n/cy.json b/i18n/cy.json index 20b9695..d469e33 100644 --- a/i18n/cy.json +++ b/i18n/cy.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Gwasanaeth anhysbys.", "bounces.view": "Gweld beth sydd wedi sboncio", "campaigns.addAltText": "Ychwanegu neges destun blaen", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archif", "campaigns.archiveEnable": "Cyhoeddi i archif gyhoeddus", "campaigns.archiveHelp": "Cyhoeddi neges yr ymgyrch (wrthi'n rhedeg", "campaigns.archiveMeta": "Ymgyrch metaddata", "campaigns.archiveMetaHelp": "Data tanysgrifiwr ffug i'w defnyddio yn y neges gyhoeddus", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Does dim modd diweddaru ymgyrch fyw neu ymgyrch sydd wedi dod i ben.", "campaigns.clicks": "Cliciau", "campaigns.confirmDelete": "Dileu {name}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "Maes/meysydd coll: {name}", "globals.messages.notFound": "Heb ddod o hyd i {enw]", "globals.messages.passwordChange": "Rhoi gwerth i'w newid", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "Wedi diweddaru “{name}”", "globals.months.1": "Ion", "globals.months.10": "Hyd", @@ -438,6 +441,8 @@ "settings.media.s3.url": "URL cefn ôl S3", "settings.media.s3.urlHelp": "Dim ond ei newid os ydych yn defnyddio URL cefn ôl personol sy'n gydnaws â S3 fel Minio.", "settings.media.title": "Cyfryngau sydd wedi'u llwytho i fyny", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Llwytho llwybr i fyny", "settings.media.upload.pathHelp": "Llwybr i'r gyfarwyddiaeth lle bydd cyfryngau'n cael eu llwytho i fyny.", "settings.media.upload.uri": "Llwytho URI i fyny", diff --git a/i18n/de.json b/i18n/de.json index 21455ce..a870046 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Unbekannter Dienst.", "bounces.view": "Bounces anzeigen", "campaigns.addAltText": "Füge eine alternative Nachricht in unformatierten Text hinzu (falls HTML nicht angezeigt werden kann).", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archiv", "campaigns.archiveEnable": "Im öffentlichen Archiv veröffentlichen", "campaigns.archiveHelp": "Veröffentliche die Nachricht (laufende, pausierte, beendete) der Kampagne im öffentlichen Archiv.", "campaigns.archiveMeta": "Kampagne Metadaten", "campaigns.archiveMetaHelp": "Dummy-Abonnentendaten, die in der öffentlichen Nachricht verwendet werden sollen, einschließlich Name, E-Mail und alle optionalen Attribute, die in der Kampagnennachricht oder -vorlage verwendet werden.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Eine laufende oder abgeschlossene Kampagne kann nicht geändert werden.", "campaigns.clicks": "Klicks", "campaigns.confirmDelete": "Lösche {name}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "Fehlende Felder: {name}", "globals.messages.notFound": "{name} nicht gefunden", "globals.messages.passwordChange": "Gib dein Passwort für die Änderung ein", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" aktualisiert", "globals.months.1": "Jan", "globals.months.10": "Okt", @@ -438,6 +441,8 @@ "settings.media.s3.url": "S3 Backend-URL", "settings.media.s3.urlHelp": "Nur bei Verwendungen eines eigenen S3-kompatiblen Backends (wie Minio) ändern.", "settings.media.title": "Medien Uploads", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Upload Pfad", "settings.media.upload.pathHelp": "Pfad zum Upload Verzeichnis.", "settings.media.upload.uri": "Upload URI", diff --git a/i18n/en.json b/i18n/en.json index 468410d..fa06fbb 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -18,12 +18,12 @@ "bounces.view": "View bounces", "campaigns.addAltText": "Add alternate plain text message", "campaigns.addAttachments": "Add attachments", - "campaigns.attachments": "Attachments", "campaigns.archive": "Archive", "campaigns.archiveEnable": "Publish to public archive", "campaigns.archiveHelp": "Publish (running, paused, finished) the campaign message on the public archive.", "campaigns.archiveMeta": "Campaign metadata", "campaigns.archiveMetaHelp": "Dummy subscriber data to use in the public message including name, email, and any optional attributes used in the campaign message or template.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Cannot update a running or a finished campaign.", "campaigns.clicks": "Clicks", "campaigns.confirmDelete": "Delete {name}", @@ -183,6 +183,7 @@ "globals.messages.missingFields": "Missing field(s): {name}", "globals.messages.notFound": "{name} not found", "globals.messages.passwordChange": "Enter a value to change", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" updated", "globals.months.1": "Jan", "globals.months.10": "Oct", @@ -436,9 +437,9 @@ "settings.media.s3.url": "S3 backend URL", "settings.media.s3.urlHelp": "Only change if using a custom S3 compatible backend like Minio.", "settings.media.title": "Media uploads", - "settings.media.upload.path": "Upload path", "settings.media.upload.extensions": "Permitted file extensions", "settings.media.upload.extensionsHelp": "Add * to allow all extensions", + "settings.media.upload.path": "Upload path", "settings.media.upload.pathHelp": "Path to the directory where media will be uploaded.", "settings.media.upload.uri": "Upload URI", "settings.media.upload.uriHelp": "Upload URI that is visible to the outside world. The media uploaded to upload_path will be publicly accessible under {root_url}, for instance, https://listmonk.yoursite.com/uploads.", diff --git a/i18n/es.json b/i18n/es.json index 695e683..d6c9f93 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Servicio desconocido.", "bounces.view": "Ver rebotes", "campaigns.addAltText": "Agregar mensaje en texto plano alternativo", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archivo", "campaigns.archiveEnable": "Hacer el archivo público", "campaigns.archiveHelp": "Publicar los mensajes de las campañas (en marcha, pausadas y terminadas) en el archivo público.", "campaigns.archiveMeta": "Metadata de la campaña", "campaigns.archiveMetaHelp": "Información de suscripción de ejemplo (por defecto) para ser usada en el mensaje público incluido nombre, correo electrónico, o cualquier valor accesible mediante atributos `{}` opcionales tanto en el mensaje de la campaña como en la plantilla.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "No es posible actualizar una campaña iniciada o finalizada.", "campaigns.clicks": "Clics", "campaigns.confirmDelete": "Eliminar {name}", @@ -182,6 +184,7 @@ "globals.messages.missingFields": "Falta el campo(s): {name}", "globals.messages.notFound": "{name} no encontrado", "globals.messages.passwordChange": "Ingresar una contraseña para cambiar", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" actualizado", "globals.months.1": "Enero", "globals.months.10": "Octubre", @@ -439,6 +442,8 @@ "settings.media.s3.url": "URL de API de S3", "settings.media.s3.urlHelp": "Cambiar únicamente si se utiliza un servicio S3 personalizado (por ejemplo MinIO).", "settings.media.title": "Cargas multimedia", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Ruta de carga", "settings.media.upload.pathHelp": "Ruta o prefijo donde los archivos seránn cargados.", "settings.media.upload.uri": "URI de carga", diff --git a/i18n/fi.json b/i18n/fi.json index 948267f..26924b1 100644 --- a/i18n/fi.json +++ b/i18n/fi.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Tuntematon palvelu.", "bounces.view": "Näytä epäonnistuneet toimitukset", "campaigns.addAltText": "Lisää vaihtoehtoinen tekstimuotoinen viesti", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archive", "campaigns.archiveEnable": "Publish to public archive", "campaigns.archiveHelp": "Publish (running, paused, finished) the campaign message on the public archive.", "campaigns.archiveMeta": "Campaign metadata", "campaigns.archiveMetaHelp": "Dummy subscriber data to use in the public message including name, email, and any optional attributes used in the campaign message or template.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Käynnissä olevaa tai päättynyttä kampanjaa ei voi päivittää.", "campaigns.clicks": "Klikkaukset", "campaigns.confirmDelete": "Poista {name}", @@ -182,6 +184,7 @@ "globals.messages.missingFields": "Missing field(s): {name}", "globals.messages.notFound": "{name} not found", "globals.messages.passwordChange": "Enter a value to change", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" updated", "globals.months.1": "Jan", "globals.months.10": "Oct", @@ -439,6 +442,8 @@ "settings.media.s3.url": "S3 backend URL", "settings.media.s3.urlHelp": "Only change if using a custom S3 compatible backend like Minio.", "settings.media.title": "Media uploads", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Upload path", "settings.media.upload.pathHelp": "Path to the directory where media will be uploaded.", "settings.media.upload.uri": "Upload URI", diff --git a/i18n/fr.json b/i18n/fr.json index 883f329..469d587 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Service inconnu.", "bounces.view": "Voir les rebonds", "campaigns.addAltText": "Ajouter un message alternatif en texte brut", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archive", "campaigns.archiveEnable": "Publier dans l'archive publique", "campaigns.archiveHelp": "Publier (en cours, en pause, terminé) le message de la campagne sur l'archive publique.", "campaigns.archiveMeta": "Métadonnées de la campagne", "campaigns.archiveMetaHelp": "Données d'abonné fictives à utiliser dans le message public, notamment le nom, l'adresse électronique et tout attribut facultatif utilisé dans le message ou le modèle de la campagne.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Impossible de mettre à jour une campagne en cours ou terminée.", "campaigns.clicks": "Clics", "campaigns.confirmDelete": "Supprimer la campagne {name}", @@ -182,6 +184,7 @@ "globals.messages.missingFields": "Champ(s) manquant(s) : {name}", "globals.messages.notFound": "{name} introuvable", "globals.messages.passwordChange": "Entrez un nouveau mot de passe pour en changer", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "Mise à jour de \"{name}\"", "globals.months.1": "jan.", "globals.months.10": "oct.", @@ -439,6 +442,8 @@ "settings.media.s3.url": "URL du 'backend' S3", "settings.media.s3.urlHelp": "Ne changez que si vous utilisez un 'backend' personnalisé compatible S3 comme Minio.", "settings.media.title": "Mise en ligne de fichiers", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Emplacement d'envoi des fichiers", "settings.media.upload.pathHelp": "Chemin vers le répertoire où les médias seront mis en ligne", "settings.media.upload.uri": "URI d'envoi des fichiers", diff --git a/i18n/hu.json b/i18n/hu.json index 08e49a1..19f7916 100644 --- a/i18n/hu.json +++ b/i18n/hu.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Ismeretlen szolgáltatás.", "bounces.view": "Visszapattanások megtekintése", "campaigns.addAltText": "Alternatív egyszerű szöveges üzenet hozzáadása", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archívum", "campaigns.archiveEnable": "Nyilvános archívumba mentés", "campaigns.archiveHelp": "A kampány nyilvános archívumba mentése, közzététele.", "campaigns.archiveMeta": "Kapány metaadat", "campaigns.archiveMetaHelp": "A nyilvánosan közzétett kampányüzenetbe helyettesítendő adatok (pl. név, e-mail cím, és amiket a sablon használ).", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Nem lehet frissíteni futó vagy befejezett kampányt.", "campaigns.clicks": "Kattintások", "campaigns.confirmDelete": "Kampány törlése: {name}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "Hiányzó mező(k): {name}", "globals.messages.notFound": "{name} nem található", "globals.messages.passwordChange": "Adja meg az új jelszót", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" frissítve", "globals.months.1": "Jan", "globals.months.10": "Okt", @@ -438,6 +441,8 @@ "settings.media.s3.url": "S3 backend URL", "settings.media.s3.urlHelp": "Csak akkor módosítsa, ha egyéni S3-kompatibilis hátteret használ, mint például a Minio.", "settings.media.title": "Média", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Könyvtár", "settings.media.upload.pathHelp": "A feltöltött fájlok célkönyvtára.", "settings.media.upload.uri": "Nyilvános URI", diff --git a/i18n/it.json b/i18n/it.json index 6aa84fa..8ac9f23 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Servizio sconosciuto.", "bounces.view": "Visualizza i rimbalzi", "campaigns.addAltText": "Aggiungere un messaggio sostitutivo in testo semplice", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archivio", "campaigns.archiveEnable": "Rendere pubblico l'archivio", "campaigns.archiveHelp": "Pubblicare i messagi delle campagne (avviate, pausate, finite) nel archivio pubblico.", "campaigns.archiveMeta": "Metadati della campagna", "campaigns.archiveMetaHelp": "Dati di essempio di suscrizioni per essere usate nei messagi publici, inclossi nome, posta elettronica, e qualche altro attributo ozionale `{}` che sia fatto servire nell messagio della campagna o pure della sagoma.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Impossibile aggiornare una campagna in corso o già effettuata.", "campaigns.clicks": "Clic", "campaigns.confirmDelete": "Cancellare {nome}", @@ -182,6 +184,7 @@ "globals.messages.missingFields": "Valore/i mancante/i: {name}", "globals.messages.notFound": "{name} introvabile", "globals.messages.passwordChange": "Inserisci un valore da modificare", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" aggiornato", "globals.months.1": "Gen", "globals.months.10": "Ott", @@ -439,6 +442,8 @@ "settings.media.s3.url": "S3 backend URL", "settings.media.s3.urlHelp": "Modifficare soltanto se stai utilizando uno backend compatibile con S3, ad essempio Minio.", "settings.media.title": "Caricamento dei media", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Percorso del caricamento", "settings.media.upload.pathHelp": "Percorso verso il repertorio dove i media saranno caricati.", "settings.media.upload.uri": "URI del caricamento", diff --git a/i18n/jp.json b/i18n/jp.json index 0d5ff2e..6f4418a 100644 --- a/i18n/jp.json +++ b/i18n/jp.json @@ -17,11 +17,13 @@ "bounces.unknownService": "不明のサービス。", "bounces.view": "バウンスビュー", "campaigns.addAltText": "代替のプレーンテキストメッセージを追加する", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "アーカイブ", "campaigns.archiveEnable": "公開アーカイブに発行する", "campaigns.archiveHelp": "公開アーカイブにキャンペーンメッセージを発行(実行中, 停止された, 終わりましたキャンペーン全部含めて)。", "campaigns.archiveMeta": "キャンペーンメタデータ", "campaigns.archiveMetaHelp": "キャンペーンのメッセージやテンプレートに使う偽データ(名やメールアドレスや設定)。", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "実行中又は終了しているキャンペーンの更新はできません。", "campaigns.clicks": "クリック", "campaigns.confirmDelete": "削除 {name}", @@ -182,6 +184,7 @@ "globals.messages.missingFields": "フィールドがありません: {name}", "globals.messages.notFound": "{name} が見つかりません。", "globals.messages.passwordChange": "変更するには値を入力", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" 更新済み", "globals.months.1": "1月", "globals.months.10": "10月", @@ -439,6 +442,8 @@ "settings.media.s3.url": "S3バックエンドURL", "settings.media.s3.urlHelp": "MinioのようなS3互換のカスタムバックエンドを使用する場合のみ変更。", "settings.media.title": "メディアアップロード", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "パスアップロード", "settings.media.upload.pathHelp": "メディアをアップロードするディレクトリへのパス", "settings.media.upload.uri": "URIアップロード", diff --git a/i18n/ml.json b/i18n/ml.json index 517d0c2..ace1b55 100644 --- a/i18n/ml.json +++ b/i18n/ml.json @@ -17,11 +17,13 @@ "bounces.unknownService": "അറിയാത്ത സേവനം", "bounces.view": "ബൗൺസായവ കാണുക", "campaigns.addAltText": "ബദൽ സന്ദേശം ചേർക്കുക", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "ആർക്കൈവ്", "campaigns.archiveEnable": "പൊതു ആർക്കൈവിൽ പ്രസിദ്ധീകരിക്കുക", "campaigns.archiveHelp": "പ്രചാരണ സന്ദേശം (റൺ ചെയ്യുന്ന, താൽക്കാലികമായി നിർത്തിയ, പൂർത്തിയായ) പൊതു ആർക്കൈവിൽ പ്രസിദ്ധീകരിക്കുക.", "campaigns.archiveMeta": "കാമ്പെയ്‌ൻ മെറ്റാഡാറ്റ", "campaigns.archiveMetaHelp": "പേര്, ഇമെയിൽ, പ്രചാരണ സന്ദേശത്തിലോ ടെംപ്ലേറ്റിലോ ഉപയോഗിക്കുന്ന ഏതെങ്കിലും ഓപ്ഷണൽ ആട്രിബ്യൂട്ടുകൾ എന്നിവയുൾപ്പെടെ പൊതു സന്ദേശത്തിൽ ഉപയോഗിക്കാനുള്ള ഡമ്മി സബ്സ്ക്രൈബർ ഡാറ്റ.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "ഇപ്പോൾ നടന്നുകൊണ്ടിരിയ്ക്കുന്നതോ, അവസാനിച്ചതോ ആയ ക്യാമ്പേയ്ൻ പുതുക്കാനാകില്ല.", "campaigns.clicks": "ക്ലീക്കുകൾ", "campaigns.confirmDelete": "{name} നീക്കം ചെയ്യുക", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "വിട്ടുപോയ ഫീൽഡ്(കൾ): {name}", "globals.messages.notFound": "{name} കണ്ടെത്തിയില്ല", "globals.messages.passwordChange": "മാറ്റം വരുത്തേണ്ട വില രേഖപ്പെടുത്തുക", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" പുതുക്കി", "globals.months.1": "ജനുവരി", "globals.months.10": "ഒക്ടോബർ", @@ -438,6 +441,8 @@ "settings.media.s3.url": "S3 വിലാസം", "settings.media.s3.urlHelp": "Minio പോലെയുള്ള ഒരു ഇഷ്‌ടാനുസൃത S3 അനുയോജ്യമായ ബാക്കെൻഡ് ഉപയോഗിക്കുകയാണെങ്കിൽ മാത്രം മാറ്റുക.", "settings.media.title": "മീഡിയാ അപ്ലോഡുകൾ", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "അപ്ലോഡ് പാത്ത്", "settings.media.upload.pathHelp": "മീഡിയ അപ്ലോഡ് ചെയ്യുന്നതിനുള്ള ഡയറക്ടറിയിലേക്കുള്ള പാത്ത്.", "settings.media.upload.uri": "അപ്ലോഡ് യൂ. ആർ. ഐ", diff --git a/i18n/nl.json b/i18n/nl.json index e712efe..d750eb1 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Onbekende service.", "bounces.view": "Zie bounces", "campaigns.addAltText": "Voeg alternatieve tekst zonder opmaak toe", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archiveren", "campaigns.archiveEnable": "Publiceren naar publiek archief", "campaigns.archiveHelp": "Publiceer (lopende, gepauzeerde, afgeronde) het campange bericht naar het publiek archief.", "campaigns.archiveMeta": "Campagne metadata", "campaigns.archiveMetaHelp": "Dummy subscriber data to use in the public message including name, email, and any optional attributes used in the campaign message or template.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Kan een lopende of afgelopen campagne niet updaten.", "campaigns.clicks": "Kliks", "campaigns.confirmDelete": "Verwijder {name}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "Ontbrekend(e) veld(en): {name}", "globals.messages.notFound": "{name} niet gevonden", "globals.messages.passwordChange": "Geef een nieuw wachtwoord in", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" geüpdatet", "globals.months.1": "Jan", "globals.months.10": "Okt", @@ -438,6 +441,8 @@ "settings.media.s3.url": "S3 backend URL", "settings.media.s3.urlHelp": "Enkel veranderen als je een custom S3-compatibele backend gebruikt zoals Minio.", "settings.media.title": "Media uploads", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Upload pad", "settings.media.upload.pathHelp": "Pad naar de map waar media geüpload zal worden.", "settings.media.upload.uri": "Upload URI", diff --git a/i18n/pl.json b/i18n/pl.json index 32ef10d..8b04dcc 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Nieznane usługi.", "bounces.view": "Zobacz odbicia", "campaigns.addAltText": "Dodaj alternatywną wiadomość jako plain text", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archiwizacja", "campaigns.archiveEnable": "Opublikuj do publicznego archiwum", "campaigns.archiveHelp": "Opublikuj (w trakcie, zatrzymane, zakończone) treść kampanii do publicznego archiwum.", "campaigns.archiveMeta": "Metadane kampanii", "campaigns.archiveMetaHelp": "Dane podstawione subskrybenta do użycia w publicznym archiwum. W tym nazwa, email, i dowolne opcjonalne atrybuty użyte w szablonie kampanii.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Nie można aktualizować aktywnej ani zakończonej kampanii", "campaigns.clicks": "Kliknięcia", "campaigns.confirmDelete": "Usuń {name}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "Brakujące pole(a): {name}", "globals.messages.notFound": "{name} nie znaleziono", "globals.messages.passwordChange": "Podaj wartość do zmiany", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" zaktualizowano", "globals.months.1": "Sty", "globals.months.10": "Paź", @@ -438,6 +441,8 @@ "settings.media.s3.url": "S3 backend URL", "settings.media.s3.urlHelp": "Zmień tylko, jeśli używasz niestandardowego backendu kompatybilnego z S3, takiego jak Minio.", "settings.media.title": "Wysyłka mediów", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Ścieżka do wysyłki", "settings.media.upload.pathHelp": "Ścieżka do folderu do którego media będą wrzucane.", "settings.media.upload.uri": "URI wysyłki", diff --git a/i18n/pt-BR.json b/i18n/pt-BR.json index 44edb92..a44da03 100644 --- a/i18n/pt-BR.json +++ b/i18n/pt-BR.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Serviço desconhecido.", "bounces.view": "Ver bounces", "campaigns.addAltText": "Adicionar mensagem alternativa em texto simples", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Arquivo", "campaigns.archiveEnable": "Publicar no arquivo publico", "campaigns.archiveHelp": "Publicar (executando, pausada, finalizada) a mensagem da campanha no arquivo publico.", "campaigns.archiveMeta": "Metadados da campanha", "campaigns.archiveMetaHelp": "Dados de assinante fictício para utilizar na mensagem publica incluindo nome, email e qualquer atributo opcional usado na mensagem ou template da campanha.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Não é possível atualizar uma campanha em execução ou finalizada.", "campaigns.clicks": "Cliques", "campaigns.confirmDelete": "Excluir {name}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "Campos ausente(s): {name}", "globals.messages.notFound": "{name} não encontrado", "globals.messages.passwordChange": "Digite um valor para alterar", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\"atualizado", "globals.months.1": "Jan", "globals.months.10": "Out", @@ -438,6 +441,8 @@ "settings.media.s3.url": "URL backend do S3", "settings.media.s3.urlHelp": "Altere apenas se usar um backnd customizado compatível com S3, como o Minio.", "settings.media.title": "Envios de mídias", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Caminho de envio", "settings.media.upload.pathHelp": "Caminho para o diretório onde a mídia será enviado.", "settings.media.upload.uri": "URI de envio", diff --git a/i18n/pt.json b/i18n/pt.json index 432505d..771d641 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Serviço desconhecido.", "bounces.view": "Ver bounces", "campaigns.addAltText": "Adicionar mensagem alternativa em texto simples", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Arquivo", "campaigns.archiveEnable": "Publicar para o arquivo público", "campaigns.archiveHelp": "Publicar (em execução, em pausa e terminadas) as mensagens da campanha no arquivo público.", "campaigns.archiveMeta": "Metadados da campanha", "campaigns.archiveMetaHelp": "Dados do subscritor modelo a usar em mensagens públicas, tais como nome, email e quais quer outros atributos opcionais usados na mensagem ou template da campanha.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Não é possível atualizar uma campanha em curso ou terminada.", "campaigns.clicks": "Cliques", "campaigns.confirmDelete": "Eliminar {name}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "Campo(s) em falta: {name}", "globals.messages.notFound": "{name} não encontrado", "globals.messages.passwordChange": "Insere um valor para alterar", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" atualizado", "globals.months.1": "Jan", "globals.months.10": "Out", @@ -438,6 +441,8 @@ "settings.media.s3.url": "URL do backend S3", "settings.media.s3.urlHelp": "Apenas alterar quando um backend customizado compatível com S3, como Minio, está em uso.", "settings.media.title": "Upload de mídia", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Caminho de upload", "settings.media.upload.pathHelp": "Caminho para a pasta onde será enviada a mídia.", "settings.media.upload.uri": "URI de envio", diff --git a/i18n/ro.json b/i18n/ro.json index 15a9d43..ed9bab4 100644 --- a/i18n/ro.json +++ b/i18n/ro.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Serviciu necunoscut.", "bounces.view": "Vizualizarea bounce-urilor", "campaigns.addAltText": "Adăugarea unui mesaj text alternativ simplu", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Arhivă", "campaigns.archiveEnable": "Publicarea în arhiva publică", "campaigns.archiveHelp": "Publicați (rulând, întrerupt, terminat) mesajul campaniei în arhiva publică.", "campaigns.archiveMeta": "Metadatele campaniei", "campaigns.archiveMetaHelp": "Datele abonaților inactivi de utilizat în mesajul public, inclusiv numele, e-mailul și orice atribute opționale utilizate în mesajul sau șablonul campaniei.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Nu se poate actualiza o campanie care rulează sau s-a terminat.", "campaigns.clicks": "Click-uri", "campaigns.confirmDelete": "Ștergerea {name}", @@ -182,6 +184,7 @@ "globals.messages.missingFields": "Câmp(e) lipsă: {name}", "globals.messages.notFound": "{name} nu a fost găsit", "globals.messages.passwordChange": "Introducerea unei valori de modificat", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" actualizat", "globals.months.1": "Ian", "globals.months.10": "Oct", @@ -439,6 +442,8 @@ "settings.media.s3.url": "S3 backend URL-ul", "settings.media.s3.urlHelp": "Schimbă numai dacă folosești un backend personalizat compatibil S3, cum ar fi Minio.", "settings.media.title": "Încărcări media", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Calea de încărcare", "settings.media.upload.pathHelp": "Calea către directorul în care va fi încărcat conținutul media.", "settings.media.upload.uri": "Încărcați URI-ul", @@ -571,4 +576,4 @@ "templates.subject": "Subiect", "users.login": "Conectează-te", "users.logout": "Deconectare" -} \ No newline at end of file +} diff --git a/i18n/ru.json b/i18n/ru.json index f3e52d8..ee4c6fe 100644 --- a/i18n/ru.json +++ b/i18n/ru.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Неизвестная услуга.", "bounces.view": "Просмотр отскоков", "campaigns.addAltText": "Добавить альтернативное простое текстовое сообщение", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Архив", "campaigns.archiveEnable": "Опубликовать в общедоступном архиве", "campaigns.archiveHelp": "Опубликовать (запущено, на паузе, завершено) сообщение кампании в общедоступном архиве.", "campaigns.archiveMeta": "Метаданные кампании", "campaigns.archiveMetaHelp": "Данные фиктивных подписчиков для использования в публичном сообщении, включая имя, электронную почту и любые дополнительные атрибуты, используемые в сообщении или шаблоне кампании.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Не возможно обновить запущенную или завершённую кампанию.", "campaigns.clicks": "Клики", "campaigns.confirmDelete": "Удалить {name}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "Отсутствующее поле (поля): {name}", "globals.messages.notFound": "{name} не найдено", "globals.messages.passwordChange": "Введите значение для изменения", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" обновлено", "globals.months.1": "Янв", "globals.months.10": "Окт", @@ -438,6 +441,8 @@ "settings.media.s3.url": "URL бэкенда S3", "settings.media.s3.urlHelp": "Измените только в случае использования бэкенда, совместимого с S3, например, Minio.", "settings.media.title": "Выгрузки медиа", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Путь для выгрузок", "settings.media.upload.pathHelp": "Путь до каталога, куда будут выгружаться медиа-файлы.", "settings.media.upload.uri": "URI выгрузок", diff --git a/i18n/se.json b/i18n/se.json index 20b846d..50eb737 100644 --- a/i18n/se.json +++ b/i18n/se.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Unknown service.", "bounces.view": "View bounces", "campaigns.addAltText": "Add alternate plain text message", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archive", "campaigns.archiveEnable": "Publish to public archive", "campaigns.archiveHelp": "Publish (running, paused, finished) the campaign message on the public archive.", "campaigns.archiveMeta": "Campaign metadata", "campaigns.archiveMetaHelp": "Dummy subscriber data to use in the public message including name, email, and any optional attributes used in the campaign message or template.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Cannot update a running or a finished campaign.", "campaigns.clicks": "Clicks", "campaigns.confirmDelete": "Delete {name}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "Missing field(s): {name}", "globals.messages.notFound": "{name} not found", "globals.messages.passwordChange": "Enter a value to change", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" updated", "globals.months.1": "Jan", "globals.months.10": "Oct", @@ -438,6 +441,8 @@ "settings.media.s3.url": "S3 backend URL", "settings.media.s3.urlHelp": "Only change if using a custom S3 compatible backend like Minio.", "settings.media.title": "Media uploads", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Upload path", "settings.media.upload.pathHelp": "Path to the directory where media will be uploaded.", "settings.media.upload.uri": "Upload URI", diff --git a/i18n/sk.json b/i18n/sk.json index 0f65838..712018b 100644 --- a/i18n/sk.json +++ b/i18n/sk.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Neznáma služba.", "bounces.view": "Zobraziť prevzetie", "campaigns.addAltText": "Pridať alternatívnu správu vo formáte obyčajného textu", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archív", "campaigns.archiveEnable": "Zverejniť vo verejnom archíve", "campaigns.archiveHelp": "Zverejniť (prebiehajúcu, pozastavenú, dokončenú) správu kampane vo verejnom archíve", "campaigns.archiveMeta": "Metadáta kampane", "campaigns.archiveMetaHelp": "Použíť prázdne dáta prihlásených vo verejnom archíve vrátane mena, emailu a iných voliteľných atribútov použitých v správach kampane aleebo šablónach.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Nedá sa aktualizovať spustená alebo dokončená kampaň.", "campaigns.clicks": "Kliknutia", "campaigns.confirmDelete": "Odstrániť {name}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "Chýbajúce pole: {name}", "globals.messages.notFound": "{name} sa nenašlo", "globals.messages.passwordChange": "Zadajte zmenenú hodnotu", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" upravené", "globals.months.1": "Jan", "globals.months.10": "Okt", @@ -438,6 +441,8 @@ "settings.media.s3.url": "Adresa URL pre S3 backend", "settings.media.s3.urlHelp": "Dá sa nastaviť ak používateľ S3 kompatibilný backend ako napr. Minio.", "settings.media.title": "Nahrávanie médií", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Cesta nahrávania", "settings.media.upload.pathHelp": "Cesta k priečinku, kde se nahrávajú médiá.", "settings.media.upload.uri": "URI nahrávania", diff --git a/i18n/tr.json b/i18n/tr.json index 6ebd3f6..5018304 100644 --- a/i18n/tr.json +++ b/i18n/tr.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Bilinmeyen servis.", "bounces.view": "Sıçramaları görüntüleyin", "campaigns.addAltText": "Alternatif düz metin ekleyin", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Arşiv", "campaigns.archiveEnable": "Halka açık arşivde yayınlayın", "campaigns.archiveHelp": "Kampanya mesajını genel arşivde yayınlayın (çalışıyor, duraklatıldı, bitti).", "campaigns.archiveMeta": "Kampanya meta verisi", "campaigns.archiveMetaHelp": "Ad, e-posta ve kampanya mesajında veya şablonunda kullanılan tüm isteğe bağlı öznitelikler dahil olmak üzere genel mesajda kullanılacak kukla abone verileri.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Gönderilmekte olan veya gönderilmiş kampaynalar güncellenemez.", "campaigns.clicks": "Tıklama", "campaigns.confirmDelete": "Sil {name}", @@ -182,6 +184,7 @@ "globals.messages.missingFields": "Eksik alan(lar): {name}", "globals.messages.notFound": "{name} bulunamadı", "globals.messages.passwordChange": "Değiştirmek için değer gir", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" güncellendi", "globals.months.1": "Oca", "globals.months.10": "Eki", @@ -439,6 +442,8 @@ "settings.media.s3.url": "S3 arka uç URL'si", "settings.media.s3.urlHelp": "Yalnızca Minio gibi özel bir S3 uyumlu arka uç kullanıyorsanız değiştirin.", "settings.media.title": "Medya yüklemeleri", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Yükleme yolu", "settings.media.upload.pathHelp": "Medyanın yükleneceği dizinin yolu.", "settings.media.upload.uri": "Yüklwmw URI si", diff --git a/i18n/vi.json b/i18n/vi.json index 7ca0a8b..b87a915 100644 --- a/i18n/vi.json +++ b/i18n/vi.json @@ -17,11 +17,13 @@ "bounces.unknownService": "Dịch vụ không xác định.", "bounces.view": "Xem thư bị trả lại", "campaigns.addAltText": "Thêm tin nhắn văn bản thuần túy thay thế", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archive", "campaigns.archiveEnable": "Publish to public archive", "campaigns.archiveHelp": "Publish (running, paused, finished) the campaign message on the public archive.", "campaigns.archiveMeta": "Campaign metadata", "campaigns.archiveMetaHelp": "Dummy subscriber data to use in the public message including name, email, and any optional attributes used in the campaign message or template.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "Không thể cập nhật chiến dịch đang chạy hoặc đã kết thúc.", "campaigns.clicks": "Số lần nhấp chuột", "campaigns.confirmDelete": "Xóa {name}", @@ -182,6 +184,7 @@ "globals.messages.missingFields": "Lỗi field(s): {name}", "globals.messages.notFound": "{name} không tìm thấy", "globals.messages.passwordChange": "Nhập một giá trị để thay đổi", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "\"{name}\" đã cập nhật", "globals.months.1": "Tháng 1", "globals.months.10": "Tháng 10", @@ -439,6 +442,8 @@ "settings.media.s3.url": "URL phụ trợ S3", "settings.media.s3.urlHelp": "Chỉ thay đổi nếu sử dụng chương trình phụ trợ tương thích S3 tùy chỉnh như Minio.", "settings.media.title": "Tải lên phương tiện", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "Đường dẫn tải lên", "settings.media.upload.pathHelp": "Đường dẫn đến thư mục nơi phương tiện sẽ được tải lên.", "settings.media.upload.uri": "Tải lên URI", diff --git a/i18n/zh-CN.json b/i18n/zh-CN.json index ac381a1..0322a96 100644 --- a/i18n/zh-CN.json +++ b/i18n/zh-CN.json @@ -17,11 +17,13 @@ "bounces.unknownService": "未知的服务。", "bounces.view": "查看退回邮", "campaigns.addAltText": "添加备用纯文本消息", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "存档", "campaigns.archiveEnable": "发布到公开存档", "campaigns.archiveHelp": "在公共档案中发布(运行、暂停、完成)活动消息。", "campaigns.archiveMeta": "活动元数据", "campaigns.archiveMetaHelp": "在公共消息中使用的模拟订阅者数据,包括姓名、电子邮件以及活动消息或模板中使用的任何可选属性。", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "无法更新正在运行或已完成的广告系列。", "campaigns.clicks": "点击次数", "campaigns.confirmDelete": "删除{名称}", @@ -181,6 +183,7 @@ "globals.messages.missingFields": "缺少字段:{name}", "globals.messages.notFound": "{name} 未找到", "globals.messages.passwordChange": "输入要更改的值", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "“{name}”已更新", "globals.months.1": "一月", "globals.months.10": "十月", @@ -438,6 +441,8 @@ "settings.media.s3.url": "S3后端URL", "settings.media.s3.urlHelp": "只有在使用像Minio这样的自定义S3兼容后端时才进行更改。", "settings.media.title": "媒体上传", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "上传路径", "settings.media.upload.pathHelp": "将上传媒体的目录的路径。", "settings.media.upload.uri": "上传URI", diff --git a/i18n/zh-TW.json b/i18n/zh-TW.json index 3e482f8..256e4da 100644 --- a/i18n/zh-TW.json +++ b/i18n/zh-TW.json @@ -17,11 +17,13 @@ "bounces.unknownService": "未知的服務。", "bounces.view": "查看退回郵", "campaigns.addAltText": "添加備用純文本消息", + "campaigns.addAttachments": "Add attachments", "campaigns.archive": "Archive", "campaigns.archiveEnable": "Publish to public archive", "campaigns.archiveHelp": "Publish (running, paused, finished) the campaign message on the public archive.", "campaigns.archiveMeta": "Campaign metadata", "campaigns.archiveMetaHelp": "Dummy subscriber data to use in the public message including name, email, and any optional attributes used in the campaign message or template.", + "campaigns.attachments": "Attachments", "campaigns.cantUpdate": "無法更新正在運行或已完成的廣告系列。", "campaigns.clicks": "點擊次數", "campaigns.confirmDelete": "刪除{名稱}", @@ -182,6 +184,7 @@ "globals.messages.missingFields": "缺少字段:{name}", "globals.messages.notFound": "{name} 未找到", "globals.messages.passwordChange": "輸入要更改的值", + "globals.messages.passwordChangeFull": "Clear and re-enter the full password in '{name}'.", "globals.messages.updated": "“{name}”已更新", "globals.months.1": "一月", "globals.months.10": "十月", @@ -439,6 +442,8 @@ "settings.media.s3.url": "S3後端URL", "settings.media.s3.urlHelp": "只有在使用像Minio這樣的自定義S3兼容後端時才進行更改。", "settings.media.title": "媒體上傳", + "settings.media.upload.extensions": "Permitted file extensions", + "settings.media.upload.extensionsHelp": "Add * to allow all extensions", "settings.media.upload.path": "上傳路徑", "settings.media.upload.pathHelp": "將上傳媒體的目錄的路徑。", "settings.media.upload.uri": "上傳URI",