From e6a201487537cc407006a2b92184b57c88569482 Mon Sep 17 00:00:00 2001 From: Elias Schneider Date: Sat, 22 Jul 2023 12:49:07 +0200 Subject: [PATCH] chore: update translations via Crowdin (#204) * New translations en.ts (French) * New translations en.ts (Spanish) * New translations en.ts (Danish) * New translations en.ts (German) * New translations en.ts (Portuguese) * New translations en.ts (Chinese Simplified) * New translations en.ts (Thai) --- frontend/src/i18n/translations/da-DK.ts | 320 ++++++++++++++++++++++++ frontend/src/i18n/translations/de-DE.ts | 320 ++++++++++++++++++++++++ frontend/src/i18n/translations/es-ES.ts | 320 ++++++++++++++++++++++++ frontend/src/i18n/translations/fr-FR.ts | 320 ++++++++++++++++++++++++ frontend/src/i18n/translations/pt-PT.ts | 320 ++++++++++++++++++++++++ frontend/src/i18n/translations/th-TH.ts | 320 ++++++++++++++++++++++++ frontend/src/i18n/translations/zh-CN.ts | 222 ++++------------ 7 files changed, 1973 insertions(+), 169 deletions(-) create mode 100644 frontend/src/i18n/translations/da-DK.ts create mode 100644 frontend/src/i18n/translations/de-DE.ts create mode 100644 frontend/src/i18n/translations/es-ES.ts create mode 100644 frontend/src/i18n/translations/fr-FR.ts create mode 100644 frontend/src/i18n/translations/pt-PT.ts create mode 100644 frontend/src/i18n/translations/th-TH.ts diff --git a/frontend/src/i18n/translations/da-DK.ts b/frontend/src/i18n/translations/da-DK.ts new file mode 100644 index 00000000..1b479ddf --- /dev/null +++ b/frontend/src/i18n/translations/da-DK.ts @@ -0,0 +1,320 @@ +export default { + // Navbar + "navbar.upload": "Upload", + "navbar.signin": "Log ind", + "navbar.home": "Hjem", + "navbar.signup": "Opret bruger", + "navbar.links.shares": "Mine delte filer", + "navbar.links.reverse": "Omvendt deling", + "navbar.avatar.account": "Min bruger", + "navbar.avatar.admin": "Administration", + "navbar.avatar.signout": "Log ud", + // END navbar + // / + "home.title": "En self-hosted fildelingsplatform.", + "home.description": "Er du sikker på, at du vil overlade dine personlige filer til tredjeparter som WeTransfer?", + "home.bullet.a.name": "Self-Hosted", + "home.bullet.a.description": "Host Pingvin Share på din egen maskine.", + "home.bullet.b.name": "Privatliv", + "home.bullet.b.description": "Dine filer er dine filer og bør ikke komme i hænderne på tredjeparter.", + "home.bullet.c.name": "Ingen irriterende grænse for filstørrelse", + "home.bullet.c.description": "Upload så store filer, som du vil. Kun din harddisk sætter grænsen.", + "home.button.start": "Kom i gang", + "home.button.source": "Source code", + // END / + // /auth/signin + "signin.title": "Velkommen tilbage", + "signin.description": "Har du ikke en bruger endnu?", + "signin.button.signup": "Opret bruger", + "signin.input.email-or-username": "E-mail eller brugernavn", + "signin.input.email-or-username.placeholder": "Din e-mail eller dit brugernavn", + "signin.input.password": "Adgangskode", + "signin.input.password.placeholder": "Din adgangskode", + "signin.button.submit": "Log ind", + "signIn.notify.totp-required.title": "2-faktor login påkrævet", + "signIn.notify.totp-required.description": "Indtast den aktuelle engangskode fra din 2-faktor Authenticator", + // END /auth/signin + // /auth/signup + "signup.title": "Opret en bruger", + "signup.description": "Har du allerede en bruger?", + "signup.button.signin": "Log ind", + "signup.input.username": "Brugernavn", + "signup.input.username.placeholder": "Dit brugernavn", + "signup.input.email": "E-mail", + "signup.input.email.placeholder": "Din e-mail", + "signup.button.submit": "Lad os komme i gang", + // END /auth/signup + // /auth/reset-password + "resetPassword.title": "Glemt din adgangskode?", + "resetPassword.description": "Indtast din e-mail for at nulstille din adgangskode.", + "resetPassword.notify.success": "En e-mail er blevet sendt med et link til at nulstille din adgangskode.", + "resetPassword.button.back": "Tilbage til login", + "resetPassword.text.resetPassword": "Nulstil adgangskode", + "resetPassword.text.enterNewPassword": "Indtast din nye adgangskode", + "resetPassword.input.password": "Ny adgangskode", + "resetPassword.notify.passwordReset": "Adgangskoden er blevet nulstillet.", + // /account + "account.title": "Min bruger", + "account.card.info.title": "Brugerinfo", + "account.card.info.username": "Brugernavn", + "account.card.info.email": "E-mail", + "account.notify.info.success": "Brugeren blev opdateret med succes", + "account.card.password.title": "Adgangskode", + "account.card.password.old": "Gammel adgangskode", + "account.card.password.new": "Ny adgangskode", + "account.notify.password.success": "Adgangskoden er ændret", + "account.card.security.title": "Sikkerhed", + "account.card.security.totp.enable.description": "Indtast din nuværende adgangskode for at begynde opsætningen af 2-faktor login", + "account.card.security.totp.disable.description": "Enter your current password to disable TOTP", + "account.card.security.totp.button.start": "Start", + "account.modal.totp.title": "Aktiver 2-faktor login", + "account.modal.totp.step1": "Trin 1: Tilføj din 2-faktor Authenticator", + "account.modal.totp.step2": "Trin 2: Valider din kode", + "account.modal.totp.enterManually": "Indtast manuelt", + "account.modal.totp.code": "Kode", + "account.modal.totp.clickToCopy": "Klik for at kopiere", + "account.modal.totp.verify": "Bekræft", + "account.notify.totp.disable": "2-faktor blev deaktiveret", + "account.notify.totp.enable": "2-faktor blev deaktiveret", + "account.card.language.title": "Sprog", + "account.card.color.title": "Farveskema", + // ThemeSwitcher.tsx + "account.theme.dark": "Mørkt", + "account.theme.light": "Lyst", + "account.theme.system": "System", + "account.button.delete": "Slet bruger", + "account.modal.delete.title": "Slet bruger", + "account.modal.delete.description": "Er du sikker på at du vil slette din bruger, herunder alle dine aktive delinger?", + // END /account + // /account/shares + "account.shares.title": "Mine delte filer", + "account.shares.title.empty": "Der er tomt her 👀", + "account.shares.description.empty": "Du har ingen delinger.", + "account.shares.button.create": "Opret en", + "account.shares.info.title": "Share informations", + "account.shares.table.id": "ID", + "account.shares.table.name": "Navn", + "account.shares.table.description": "Beskrivelse", + "account.shares.table.visitors": "Besøgende", + "account.shares.table.expiresAt": "Udløber d", + "account.shares.table.createdAt": "Oprettet d.", + "account.shares.table.size": "Størrelse", + "account.shares.modal.share-informations": "Share informations", + "account.shares.modal.share-link": "Del link", + "account.shares.modal.delete.title": "Delete share {share}", + "account.shares.modal.delete.description": "Ønsker du virkelig at slette denne deling?", + // END /account/shares + // /account/reverseShares + "account.reverseShares.title": "Omvendt deling", + "account.reverseShares.description": "A reverse share allows you to generate a unique URL that allows external users to create a share.", + "account.reverseShares.title.empty": "Der er tomt her 👀", + "account.reverseShares.description.empty": "You don't have any reverse shares.", + // showCreateReverseShareModal.tsx + "account.reverseShares.modal.expiration.label": "Udløb", + "account.reverseShares.modal.expiration.minute-singular": "Minut", + "account.reverseShares.modal.expiration.minute-plural": "Minutter", + "account.reverseShares.modal.expiration.hour-singular": "Time", + "account.reverseShares.modal.expiration.hour-plural": "Timer", + "account.reverseShares.modal.expiration.day-singular": "Dag", + "account.reverseShares.modal.expiration.day-plural": "Dage", + "account.reverseShares.modal.expiration.week-singular": "Uge", + "account.reverseShares.modal.expiration.week-plural": "Uger", + "account.reverseShares.modal.expiration.month-singular": "Måned", + "account.reverseShares.modal.expiration.month-plural": "Måneder", + "account.reverseShares.modal.expiration.year-singular": "År", + "account.reverseShares.modal.expiration.year-plural": "År", + "account.reverseShares.modal.max-size.label": "Maksimal størrelse for deling", + "account.reverseShares.modal.send-email": "Send e-mail notifikation", + "account.reverseShares.modal.send-email.description": "Send en e-mail notifikation, når der oprettes en deling med dette omvendte delingslink.", + "account.reverseShares.modal.max-use.label": "Maksimal anvendelser", + "account.reverseShares.modal.max-use.description": "Det maksimale antal gange, denne URL kan bruges til at oprette en deling.", + "account.reverseShare.never-expires": "Denne omvendte deling udløber aldrig.", + "account.reverseShare.expires-on": "Denne omvendte deling udløber den {expiration}.", + "account.reverseShares.table.no-shares": "Der er ikke oprettet nogle delinger endnu", + "account.reverseShares.table.count.singular": "del", + "account.reverseShares.table.count.plural": "delinger", + "account.reverseShares.table.shares": "Delinger", + "account.reverseShares.table.remaining": "Resterende anvendelser", + "account.reverseShares.table.max-size": "Maksimal størrelse for deling", + "account.reverseShares.table.expires": "Udløber d", + "account.reverseShares.modal.reverse-share-link": "Omvendt deling", + "account.reverseShares.modal.delete.title": "Delete reverse share", + "account.reverseShares.modal.delete.description": "Ønsker du virkelig at slette denne omvendte deling? Hvis du gør det, vil de tilknyttede delinger også blive slettet.", + // END /account/reverseShares + // /admin + "admin.title": "Administration", + "admin.button.users": "Brugeradministration", + "admin.button.config": "Konfiguration", + "admin.version": "Version", + // END /admin + // /admin/users + "admin.users.title": "Brugeradministration", + "admin.users.table.username": "Brugernavn", + "admin.users.table.email": "E-mail", + "admin.users.table.admin": "Admin", + "admin.users.edit.update.title": "Opdater bruger {username}", + "admin.users.edit.update.admin-privileges": "Admin rettigheder", + "admin.users.edit.update.change-password.title": "Skift adgangskode", + "admin.users.edit.update.change-password.field": "Ny adgangskode", + "admin.users.edit.update.change-password.button": "Gem ny adgangskode", + "admin.users.edit.update.notify.password.success": "Adgangskoden er ændret", + "admin.users.edit.delete.title": "Slet bruger {username}", + "admin.users.edit.delete.description": "Er du sikker på du vil slette denne bruger og tilhørende delinger?", + // showCreateUserModal.tsx + "admin.users.modal.create.title": "Opret bruger", + "admin.users.modal.create.username": "Brugernavn", + "admin.users.modal.create.email": "E-mail", + "admin.users.modal.create.password": "Adgangskode", + "admin.users.modal.create.manual-password": "Angiv adgangskode manuelt", + "admin.users.modal.create.manual-password.description": "If not checked, the user will receive an email with a link to set their password.", + "admin.users.modal.create.admin": "Admin privileges", + "admin.users.modal.create.admin.description": "If checked, the user will be able to access the admin panel.", + // END /admin/users + // /upload + "upload.title": "Upload", + "upload.notify.generic-error": "Der opstod en fejl under afslutningen af din deling.", + "upload.notify.count-failed": "{count} files failed to upload. Trying again.", + // Dropzone.tsx + "upload.dropzone.title": "Upload filer", + "upload.dropzone.description": "Drag'n'drop files here to start your share. We can accept only files that are less than {maxSize} in total.", + "upload.dropzone.notify.file-too-big": "Your files exceed the maximum share size of {maxSize}.", + // FileList.tsx + "upload.filelist.name": "Navn", + "upload.filelist.size": "Størrelse", + // showCreateUploadModal.tsx + "upload.modal.title": "Opret Deling", + "upload.modal.link.error.invalid": "Can only contain letters, numbers, underscores, and hyphens", + "upload.modal.link.error.taken": "Det valgte link er allerede i brug", + "upload.modal.not-signed-in": "Du er ikke logget ind", + "upload.modal.not-signed-in-description": "Du vil ikke være i stand til at slette din deling manuelt og se antallet af besøgende.", + "upload.modal.expires.never": "aldrig", + "upload.modal.expires.never-long": "Udløber aldrig", + "upload.modal.link.label": "Link", + "upload.modal.link.placeholder": "minAwesomeDeling", + "upload.modal.expires.label": "Udløb", + "upload.modal.expires.minute-singular": "Minut", + "upload.modal.expires.minute-plural": "Minutter", + "upload.modal.expires.hour-singular": "Time", + "upload.modal.expires.hour-plural": "Timer", + "upload.modal.expires.day-singular": "Dag", + "upload.modal.expires.day-plural": "Dage", + "upload.modal.expires.week-singular": "Uge", + "upload.modal.expires.week-plural": "Uger", + "upload.modal.expires.month-singular": "Måned", + "upload.modal.expires.month-plural": "Måneder", + "upload.modal.expires.year-singular": "År", + "upload.modal.expires.year-plural": "År", + "upload.modal.accordion.description.title": "Beskrivelse", + "upload.modal.accordion.description.placeholder": "Note for the recipients of this share", + "upload.modal.accordion.email.title": "E-mail modtagere", + "upload.modal.accordion.email.placeholder": "Indtast e-mail modtagere", + "upload.modal.accordion.email.invalid-email": "Ugyldig e-mailadresse", + "upload.modal.accordion.security.title": "Sikkerhedsindstillinger", + "upload.modal.accordion.security.password.label": "Adgangskodebeskyttelse", + "upload.modal.accordion.security.password.placeholder": "Ingen adgangskode", + "upload.modal.accordion.security.max-views.label": "Max antal visninger", + "upload.modal.accordion.security.max-views.placeholder": "Ingen begrænsning", + // showCompletedUploadModal.tsx + "upload.modal.completed.never-expires": "Denne deling vil aldrig udløbe.", + "upload.modal.completed.expires-on": "Denne omvendte deling udløber den {expiration}.", + "upload.modal.completed.share-ready": "Delingen er klar", + // END /upload + // /share/[id] + "share.title": "Del {shareId}", + "share.description": "Se hvad jeg har delt med dig!", + "share.error.visitor-limit-exceeded.title": "Grænsen for besøgende overskredet", + "share.error.visitor-limit-exceeded.description": "Besøgsgrænsen for denne deling er blevet overskredet.", + "share.error.removed.title": "Deling fjernet", + "share.error.not-found.title": "Delingen blev ikke fundet", + "share.error.not-found.description": "Den deling, du leder efter, eksisterer ikke.", + "share.modal.password.title": "Adgangskode påkrævet", + "share.modal.password.description": "For at få adgang til denne deling, indtast venligst adgangskoden til delingen.", + "share.modal.password": "Adgangskode", + "share.modal.error.invalid-password": "Ugyldig adgangskode", + "share.button.download-all": "Download alle", + "share.notify.download-all-preparing": "Delingen forberedes. Prøv igen om et par minutter.", + "share.modal.file-link": "Fil link", + "share.table.name": "Navn", + "share.table.size": "Størrelse", + "share.modal.file-preview.error.not-supported.title": "Forhåndsvisning ikke understøttet", + "share.modal.file-preview.error.not-supported.description": "En forhåndsvisning for thise filtype er ikke understøttet. Download venligst filen for at se den.", + // END /share/[id] + // /admin/config + "admin.config.title": "Konfiguration", + "admin.config.category.general": "Generelt", + "admin.config.category.share": "Del", + "admin.config.category.email": "E-mail", + "admin.config.category.smtp": "SMTP", + "admin.config.general.app-name": "App-navn", + "admin.config.general.app-name.description": "Navnet på applikationen", + "admin.config.general.app-url": "App URL", + "admin.config.general.app-url.description": "På hvilken URL Pingvin Share er tilgængelig", + "admin.config.general.show-home-page": "Vis forside", + "admin.config.general.show-home-page.description": "Om forsiden skal vises", + "admin.config.general.logo": "Logo", + "admin.config.general.logo.description": "Skift dit logo ved at uploade et nyt billede. Billedet skal være PNG og skal have formatet 1:1.", + "admin.config.general.logo.placeholder": "Vælg billede", + "admin.config.email.enable-share-email-recipients": "Aktiver deling til e-mail modtagere", + "admin.config.email.enable-share-email-recipients.description": "Whether to allow emails to share recipients. Only enable this if you have enabled SMTP.", + "admin.config.email.share-recipients-subject": "Share recipients subject", + "admin.config.email.share-recipients-subject.description": "Subject of the email which gets sent to the share recipients.", + "admin.config.email.share-recipients-message": "Share recipients message", + "admin.config.email.share-recipients-message.description": "Message which gets sent to the share recipients. Available variables:\n {creator} - The username of the creator of the share\n {shareUrl} - The URL of the share\n {desc} - The description of the share\n {expires} - The expiration date of the share\n The variables will be replaced with the actual value.", + "admin.config.email.reverse-share-subject": "Reverse share subject", + "admin.config.email.reverse-share-subject.description": "Subject of the email which gets sent when someone created a share with your reverse share link.", + "admin.config.email.reverse-share-message": "Reverse share message", + "admin.config.email.reverse-share-message.description": "Message which gets sent when someone created a share with your reverse share link. {shareUrl} will be replaced with the creator's name and the share URL.", + "admin.config.email.reset-password-subject": "Reset password subject", + "admin.config.email.reset-password-subject.description": "Subject of the email which gets sent when a user requests a password reset.", + "admin.config.email.reset-password-message": "Nulstil adgangskode besked", + "admin.config.email.reset-password-message.description": "Message which gets sent when a user requests a password reset. {url} will be replaced with the reset password URL.", + "admin.config.email.invite-subject": "Invitations emne", + "admin.config.email.invite-subject.description": "Emne for den e-mail, der sendes, når en administrator inviterer en ny bruger.", + "admin.config.email.invite-message": "Invitations besked", + "admin.config.email.invite-message.description": "Besked som bliver sendt, når en administrator inviterer en bruger. {url} vil blive erstattet med invitations-URL'en og {password} med adgangskoden.", + "admin.config.share.allow-registration": "Tillad oprettelser", + "admin.config.share.allow-registration.description": "Om alle skal kunne oprette en bruger", + "admin.config.share.allow-unauthenticated-shares": "Tillad uautoriserede delinger", + "admin.config.share.allow-unauthenticated-shares.description": "Whether unauthenticated users can create shares", + "admin.config.share.max-size": "Maks. størrelse", + "admin.config.share.max-size.description": "Maksimal filstørrelse i bytes", + "admin.config.smtp.enabled": "Aktiveret", + "admin.config.smtp.enabled.description": "Om SMTP er aktiveret. Aktiver kun SMTP, hvis du har indtastet SMTP-server vært, port, e-mail, bruger og adgangskode.", + "admin.config.smtp.host": "Vært", + "admin.config.smtp.host.description": "Vært for SMTP serveren", + "admin.config.smtp.port": "Port", + "admin.config.smtp.port.description": "Porten til SMTP serveren", + "admin.config.smtp.email": "E-mail", + "admin.config.smtp.email.description": "E-mail adressen som der skal afsendes fra", + "admin.config.smtp.username": "Brugernavn", + "admin.config.smtp.username.description": "Brugernavnet til SMTP serveren", + "admin.config.smtp.password": "Adgangskode", + "admin.config.smtp.password.description": "Adgangskoden til SMTP serveren", + "admin.config.smtp.button.test": "Send test e-mail", + // 404 + "404.description": "Ups! Denne side findes ikke.", + "404.button.home": "Bring me back home", + // Common translations + "common.button.save": "Gem", + "common.button.create": "Opret", + "common.button.submit": "Submit", + "common.button.delete": "Slet", + "common.button.cancel": "Annuller", + "common.button.confirm": "Bekræft", + "common.button.disable": "Deaktiver", + "common.button.share": "Del", + "common.button.generate": "Generer", + "common.button.done": "Færdig", + "common.text.link": "Link", + "common.text.or": "eller", + "common.button.go-back": "Gå tilbage", + "common.notify.copied": "Linket blev kopieret til udklipsholderen", + "common.error": "Fejl", + "common.error.unknown": "En ukendt fejl opstod", + "common.error.invalid-email": "Ugyldig e-mail", + "common.error.too-short": "Skal være på mindst {length} tegn", + "common.error.too-long": "Må højst være {length} tegn", + "common.error.exact-length": "Skal være præcis {length} tegn", + "common.error.invalid-number": "Skal være et tal", + "common.error.field-required": "Dette felt er påkrævet" +}; \ No newline at end of file diff --git a/frontend/src/i18n/translations/de-DE.ts b/frontend/src/i18n/translations/de-DE.ts new file mode 100644 index 00000000..7456cfb1 --- /dev/null +++ b/frontend/src/i18n/translations/de-DE.ts @@ -0,0 +1,320 @@ +export default { + // Navbar + "navbar.upload": "Hochladen", + "navbar.signin": "Anmelden", + "navbar.home": "Startseite", + "navbar.signup": "Registrieren", + "navbar.links.shares": "Meine Freigaben", + "navbar.links.reverse": "Reverse shares", + "navbar.avatar.account": "Mein Konto", + "navbar.avatar.admin": "Administration", + "navbar.avatar.signout": "Abmelden", + // END navbar + // / + "home.title": "Eine selbst gehostete Dateifreigabe-Plattform.", + "home.description": "Do you really want to give your personal files in the hand of third parties like WeTransfer?", + "home.bullet.a.name": "Selbst gehostet", + "home.bullet.a.description": "Host Pingvin Share on your own machine.", + "home.bullet.b.name": "Privatsphäre", + "home.bullet.b.description": "Your files are your files and should never get into the hands of third parties.", + "home.bullet.c.name": "Keine lästige Dateigrößenbegrenzung", + "home.bullet.c.description": "Upload as big files as you want. Only your hard drive will be your limit.", + "home.button.start": "Lege los", + "home.button.source": "Quellcode", + // END / + // /auth/signin + "signin.title": "Willkommen zurück", + "signin.description": "Du hast noch kein Konto?", + "signin.button.signup": "Registrieren", + "signin.input.email-or-username": "Email oder Benutzername", + "signin.input.email-or-username.placeholder": "Deine Email Adresse oder Benutzername", + "signin.input.password": "Passwort", + "signin.input.password.placeholder": "Dein Passwort", + "signin.button.submit": "Anmelden", + "signIn.notify.totp-required.title": "Zwei-Faktor-Authentifizierung benötigt", + "signIn.notify.totp-required.description": "Bitte füge deinen Zwei-Faktor-Authentifizierungscode ein", + // END /auth/signin + // /auth/signup + "signup.title": "Erstelle ein Konto", + "signup.description": "Besitzt du bereits ein Konto?", + "signup.button.signin": "Anmelden", + "signup.input.username": "Benutzername", + "signup.input.username.placeholder": "Dein Benutzername", + "signup.input.email": "Email", + "signup.input.email.placeholder": "Deine Emailadresse", + "signup.button.submit": "Lass uns loslegen", + // END /auth/signup + // /auth/reset-password + "resetPassword.title": "Passwort vergessen?", + "resetPassword.description": "Gib deine Email Adresse ein, um dein Passwort zurückzusetzen.", + "resetPassword.notify.success": "Ein Link zum Rücksetzen des Passwortes wurde an deine Emailadresse versandt.", + "resetPassword.button.back": "Zurück zur Anmeldeseite", + "resetPassword.text.resetPassword": "Passwort zurücksetzen", + "resetPassword.text.enterNewPassword": "Gib dein neues Passwort ein", + "resetPassword.input.password": "Neues Passwort", + "resetPassword.notify.passwordReset": "Dein Passwort wurde erfolgreich zurückgesetzt.", + // /account + "account.title": "Mein Konto", + "account.card.info.title": "Kontoinformationen", + "account.card.info.username": "Benutzername", + "account.card.info.email": "Email", + "account.notify.info.success": "Konto erfolgreich aktualisiert", + "account.card.password.title": "Passwort", + "account.card.password.old": "Altes Passwort", + "account.card.password.new": "Neues Passwort", + "account.notify.password.success": "Passwort erfolgreich geändert", + "account.card.security.title": "Sicherheit", + "account.card.security.totp.enable.description": "Geben dein aktuelles Passwort ein, um TOTP zu aktivieren", + "account.card.security.totp.disable.description": "Geben dein aktuelles Passwort ein, um TOTP zu deaktivieren", + "account.card.security.totp.button.start": "Starten", + "account.modal.totp.title": "TOTP aktivieren", + "account.modal.totp.step1": "Step 1: Add your authenticator", + "account.modal.totp.step2": "Step 2: Validate your code", + "account.modal.totp.enterManually": "Manuell eingeben", + "account.modal.totp.code": "Code", + "account.modal.totp.clickToCopy": "Klicken zum Kopieren", + "account.modal.totp.verify": "Überprüfen", + "account.notify.totp.disable": "TOTP erfolgreich deaktiviert", + "account.notify.totp.enable": "TOTP erfolgreich aktiviert", + "account.card.language.title": "Sprache", + "account.card.color.title": "Farbschema", + // ThemeSwitcher.tsx + "account.theme.dark": "Dunkel", + "account.theme.light": "Hell", + "account.theme.system": "System", + "account.button.delete": "Konto löschen", + "account.modal.delete.title": "Konto löschen", + "account.modal.delete.description": "Do you really want to delete your account including all your active shares?", + // END /account + // /account/shares + "account.shares.title": "My shares", + "account.shares.title.empty": "It's empty here 👀", + "account.shares.description.empty": "You don't have any shares.", + "account.shares.button.create": "Erstelle eine", + "account.shares.info.title": "Share informations", + "account.shares.table.id": "ID", + "account.shares.table.name": "Name", + "account.shares.table.description": "Beschreibung", + "account.shares.table.visitors": "Besucher", + "account.shares.table.expiresAt": "Läuft ab am", + "account.shares.table.createdAt": "Erstellt am", + "account.shares.table.size": "Size", + "account.shares.modal.share-informations": "Share informations", + "account.shares.modal.share-link": "Share link", + "account.shares.modal.delete.title": "Delete share {share}", + "account.shares.modal.delete.description": "Do you really want to delete this share?", + // END /account/shares + // /account/reverseShares + "account.reverseShares.title": "Reverse shares", + "account.reverseShares.description": "A reverse share allows you to generate a unique URL that allows external users to create a share.", + "account.reverseShares.title.empty": "Es ist leer hier 👀", + "account.reverseShares.description.empty": "You don't have any reverse shares.", + // showCreateReverseShareModal.tsx + "account.reverseShares.modal.expiration.label": "Ablauf", + "account.reverseShares.modal.expiration.minute-singular": "Minute", + "account.reverseShares.modal.expiration.minute-plural": "Minuten", + "account.reverseShares.modal.expiration.hour-singular": "Stunde", + "account.reverseShares.modal.expiration.hour-plural": "Stunden", + "account.reverseShares.modal.expiration.day-singular": "Tag", + "account.reverseShares.modal.expiration.day-plural": "Tage", + "account.reverseShares.modal.expiration.week-singular": "Woche", + "account.reverseShares.modal.expiration.week-plural": "Wochen", + "account.reverseShares.modal.expiration.month-singular": "Monat", + "account.reverseShares.modal.expiration.month-plural": "Monate", + "account.reverseShares.modal.expiration.year-singular": "Jahr", + "account.reverseShares.modal.expiration.year-plural": "Jahre", + "account.reverseShares.modal.max-size.label": "Max share size", + "account.reverseShares.modal.send-email": "Send email notification", + "account.reverseShares.modal.send-email.description": "Send an email notification when a share is created with this reverse share link.", + "account.reverseShares.modal.max-use.label": "Maximale Verwendungen", + "account.reverseShares.modal.max-use.description": "The maximum amount of times this URL can be used to create a share.", + "account.reverseShare.never-expires": "This reverse share will never expire.", + "account.reverseShare.expires-on": "This reverse share will expire on {expiration}.", + "account.reverseShares.table.no-shares": "No shares created yet", + "account.reverseShares.table.count.singular": "Freigabe", + "account.reverseShares.table.count.plural": "Freigaben", + "account.reverseShares.table.shares": "Freigaben", + "account.reverseShares.table.remaining": "Verbleibende Verwendungen", + "account.reverseShares.table.max-size": "Maximale Freigabegröße", + "account.reverseShares.table.expires": "Läuft ab am", + "account.reverseShares.modal.reverse-share-link": "Reverse share link", + "account.reverseShares.modal.delete.title": "Delete reverse share", + "account.reverseShares.modal.delete.description": "Do you really want to delete this reverse share? If you do, the associated shares will be deleted as well.", + // END /account/reverseShares + // /admin + "admin.title": "Administration", + "admin.button.users": "Benutzerverwaltung", + "admin.button.config": "Konfiguration", + "admin.version": "Version", + // END /admin + // /admin/users + "admin.users.title": "Benutzerverwaltung", + "admin.users.table.username": "Benutzername", + "admin.users.table.email": "Email", + "admin.users.table.admin": "Admin", + "admin.users.edit.update.title": "Benutzer {username} aktualisieren", + "admin.users.edit.update.admin-privileges": "Administratorrechte", + "admin.users.edit.update.change-password.title": "Passwort ändern", + "admin.users.edit.update.change-password.field": "Neues Passwort", + "admin.users.edit.update.change-password.button": "Neues Passwort speichern", + "admin.users.edit.update.notify.password.success": "Passwort erfolgreich geändert", + "admin.users.edit.delete.title": "Delete user {username}", + "admin.users.edit.delete.description": "Do you really want to delete this user and all his shares?", + // showCreateUserModal.tsx + "admin.users.modal.create.title": "Create user", + "admin.users.modal.create.username": "Username", + "admin.users.modal.create.email": "Email", + "admin.users.modal.create.password": "Passwort", + "admin.users.modal.create.manual-password": "Set password manually", + "admin.users.modal.create.manual-password.description": "If not checked, the user will receive an email with a link to set their password.", + "admin.users.modal.create.admin": "Admin privileges", + "admin.users.modal.create.admin.description": "If checked, the user will be able to access the admin panel.", + // END /admin/users + // /upload + "upload.title": "Upload", + "upload.notify.generic-error": "An error occurred while finishing your share.", + "upload.notify.count-failed": "{count} files failed to upload. Trying again.", + // Dropzone.tsx + "upload.dropzone.title": "Upload files", + "upload.dropzone.description": "Drag'n'drop files here to start your share. We can accept only files that are less than {maxSize} in total.", + "upload.dropzone.notify.file-too-big": "Your files exceed the maximum share size of {maxSize}.", + // FileList.tsx + "upload.filelist.name": "Name", + "upload.filelist.size": "Size", + // showCreateUploadModal.tsx + "upload.modal.title": "Create Share", + "upload.modal.link.error.invalid": "Can only contain letters, numbers, underscores, and hyphens", + "upload.modal.link.error.taken": "This link is already in use", + "upload.modal.not-signed-in": "You're not signed in", + "upload.modal.not-signed-in-description": "You will be unable to delete your share manually and view the visitor count.", + "upload.modal.expires.never": "never", + "upload.modal.expires.never-long": "Never Expires", + "upload.modal.link.label": "Link", + "upload.modal.link.placeholder": "myAwesomeShare", + "upload.modal.expires.label": "Expiration", + "upload.modal.expires.minute-singular": "Minute", + "upload.modal.expires.minute-plural": "Minutes", + "upload.modal.expires.hour-singular": "Hour", + "upload.modal.expires.hour-plural": "Hours", + "upload.modal.expires.day-singular": "Day", + "upload.modal.expires.day-plural": "Days", + "upload.modal.expires.week-singular": "Week", + "upload.modal.expires.week-plural": "Weeks", + "upload.modal.expires.month-singular": "Month", + "upload.modal.expires.month-plural": "Months", + "upload.modal.expires.year-singular": "Year", + "upload.modal.expires.year-plural": "Years", + "upload.modal.accordion.description.title": "Description", + "upload.modal.accordion.description.placeholder": "Note for the recipients of this share", + "upload.modal.accordion.email.title": "Email recipients", + "upload.modal.accordion.email.placeholder": "Enter email recipients", + "upload.modal.accordion.email.invalid-email": "Invalid email address", + "upload.modal.accordion.security.title": "Security options", + "upload.modal.accordion.security.password.label": "Password protection", + "upload.modal.accordion.security.password.placeholder": "No password", + "upload.modal.accordion.security.max-views.label": "Maximum views", + "upload.modal.accordion.security.max-views.placeholder": "No limit", + // showCompletedUploadModal.tsx + "upload.modal.completed.never-expires": "This share will never expire.", + "upload.modal.completed.expires-on": "This share will expire on {expiration}.", + "upload.modal.completed.share-ready": "Share ready", + // END /upload + // /share/[id] + "share.title": "Share {shareId}", + "share.description": "Look what I've shared with you!", + "share.error.visitor-limit-exceeded.title": "Visitor limit exceeded", + "share.error.visitor-limit-exceeded.description": "The visitor limit from this share has been exceeded.", + "share.error.removed.title": "Share removed", + "share.error.not-found.title": "Share not found", + "share.error.not-found.description": "The share you're looking for doesn't exist.", + "share.modal.password.title": "Password required", + "share.modal.password.description": "To access this share please enter the password for the share.", + "share.modal.password": "Password", + "share.modal.error.invalid-password": "Ungültiges Passwort", + "share.button.download-all": "Alle herunterladen", + "share.notify.download-all-preparing": "The share is preparing. Try again in a few minutes.", + "share.modal.file-link": "File link", + "share.table.name": "Name", + "share.table.size": "Size", + "share.modal.file-preview.error.not-supported.title": "Preview not supported", + "share.modal.file-preview.error.not-supported.description": "A preview for thise file type is unsupported. Please download the file to view it.", + // END /share/[id] + // /admin/config + "admin.config.title": "Konfiguration", + "admin.config.category.general": "Allgemein", + "admin.config.category.share": "Freigabe", + "admin.config.category.email": "E-Mail", + "admin.config.category.smtp": "SMTP", + "admin.config.general.app-name": "App-Name", + "admin.config.general.app-name.description": "Name der Applikation", + "admin.config.general.app-url": "App-URL", + "admin.config.general.app-url.description": "Auf welcher URL Pingvin Share verfügbar ist", + "admin.config.general.show-home-page": "Startseite anzeigen", + "admin.config.general.show-home-page.description": "Ob die Startseite angezeigt werden soll", + "admin.config.general.logo": "Logo", + "admin.config.general.logo.description": "Change your logo by uploading a new image. The image must be a PNG and should have the format 1:1.", + "admin.config.general.logo.placeholder": "Bild auswählen", + "admin.config.email.enable-share-email-recipients": "Enable share email recipients", + "admin.config.email.enable-share-email-recipients.description": "Whether to allow emails to share recipients. Only enable this if you have enabled SMTP.", + "admin.config.email.share-recipients-subject": "Share recipients subject", + "admin.config.email.share-recipients-subject.description": "Subject of the email which gets sent to the share recipients.", + "admin.config.email.share-recipients-message": "Share recipients message", + "admin.config.email.share-recipients-message.description": "Message which gets sent to the share recipients. Available variables:\n {creator} - The username of the creator of the share\n {shareUrl} - The URL of the share\n {desc} - The description of the share\n {expires} - The expiration date of the share\n The variables will be replaced with the actual value.", + "admin.config.email.reverse-share-subject": "Reverse share subject", + "admin.config.email.reverse-share-subject.description": "Subject of the email which gets sent when someone created a share with your reverse share link.", + "admin.config.email.reverse-share-message": "Reverse share message", + "admin.config.email.reverse-share-message.description": "Message which gets sent when someone created a share with your reverse share link. {shareUrl} will be replaced with the creator's name and the share URL.", + "admin.config.email.reset-password-subject": "Reset password subject", + "admin.config.email.reset-password-subject.description": "Subject of the email which gets sent when a user requests a password reset.", + "admin.config.email.reset-password-message": "Reset password message", + "admin.config.email.reset-password-message.description": "Message which gets sent when a user requests a password reset. {url} will be replaced with the reset password URL.", + "admin.config.email.invite-subject": "Invite subject", + "admin.config.email.invite-subject.description": "Subject of the email which gets sent when an admin invites a user.", + "admin.config.email.invite-message": "Invite message", + "admin.config.email.invite-message.description": "Message which gets sent when an admin invites a user. {url} will be replaced with the invite URL and {password} with the password.", + "admin.config.share.allow-registration": "Allow registration", + "admin.config.share.allow-registration.description": "Whether registration is allowed", + "admin.config.share.allow-unauthenticated-shares": "Allow unauthenticated shares", + "admin.config.share.allow-unauthenticated-shares.description": "Whether unauthenticated users can create shares", + "admin.config.share.max-size": "Max size", + "admin.config.share.max-size.description": "Maximum share size in bytes", + "admin.config.smtp.enabled": "Enabled", + "admin.config.smtp.enabled.description": "Whether SMTP is enabled. Only set this to true if you entered the host, port, email, user and password of your SMTP server.", + "admin.config.smtp.host": "Host", + "admin.config.smtp.host.description": "Host of the SMTP server", + "admin.config.smtp.port": "Port", + "admin.config.smtp.port.description": "Port des SMTP-Servers", + "admin.config.smtp.email": "E-Mail", + "admin.config.smtp.email.description": "E-Mail-Adresse, von der die E-Mails gesendet werden", + "admin.config.smtp.username": "Benutzername", + "admin.config.smtp.username.description": "Benutzername des SMTP-Servers", + "admin.config.smtp.password": "Passwort", + "admin.config.smtp.password.description": "Passwort des SMTP-Servers", + "admin.config.smtp.button.test": "Test-E-Mail senden", + // 404 + "404.description": "Ups, diese Seite existiert nicht.", + "404.button.home": "Bring me back home", + // Common translations + "common.button.save": "Speichern", + "common.button.create": "Erstellen", + "common.button.submit": "Bestätigen", + "common.button.delete": "Löschen", + "common.button.cancel": "Abbrechen", + "common.button.confirm": "Bestätigen", + "common.button.disable": "Deaktivieren", + "common.button.share": "Teilen", + "common.button.generate": "Generieren", + "common.button.done": "Fertig", + "common.text.link": "Link", + "common.text.or": "oder", + "common.button.go-back": "Zurück", + "common.notify.copied": "Dein Link wurde in die Zwischenablage kopiert", + "common.error": "Fehler", + "common.error.unknown": "Ein unbekannter Fehler ist aufgetreten", + "common.error.invalid-email": "Ungültige E-Mail-Adresse", + "common.error.too-short": "Muss mindestens {length} Zeichen enthalten", + "common.error.too-long": "Muss maximal {length} Zeichen enthalten", + "common.error.exact-length": "Muss genau {length} Zeichen lang sein", + "common.error.invalid-number": "Muss eine Zahl sein", + "common.error.field-required": "Dieses Feld ist erforderlich" +}; \ No newline at end of file diff --git a/frontend/src/i18n/translations/es-ES.ts b/frontend/src/i18n/translations/es-ES.ts new file mode 100644 index 00000000..f4c98125 --- /dev/null +++ b/frontend/src/i18n/translations/es-ES.ts @@ -0,0 +1,320 @@ +export default { + // Navbar + "navbar.upload": "Subir", + "navbar.signin": "Iniciar sesión", + "navbar.home": "Inicio", + "navbar.signup": "Registrarse", + "navbar.links.shares": "Mis compartidos", + "navbar.links.reverse": "Compartidos conmigo", + "navbar.avatar.account": "Mi cuenta", + "navbar.avatar.admin": "Administración", + "navbar.avatar.signout": "Cerrar sesión", + // END navbar + // / + "home.title": "Una plataforma autoalojada para compartir archivos.", + "home.description": "¿En realidad quieres dejar tus archivos personales en manos de terceros como WeTransfer?", + "home.bullet.a.name": "Autoalojada", + "home.bullet.a.description": "Aloja Pingvin Share en tu propio equipo.", + "home.bullet.b.name": "Privacidad", + "home.bullet.b.description": "Tus archivos son tus archivos y nunca deberían terminar en manos de terceros.", + "home.bullet.c.name": "Sin molestos límites de tamaño de archivo", + "home.bullet.c.description": "Sube archivos tan grandes como quieras. El único límite es la capacidad de tu disco duro.", + "home.button.start": "Comenzar", + "home.button.source": "Código fuente", + // END / + // /auth/signin + "signin.title": "Bienvenido nuevamente", + "signin.description": "¿Todavía no tienes una cuenta?", + "signin.button.signup": "Registrarse", + "signin.input.email-or-username": "Correo o nombre de usuario", + "signin.input.email-or-username.placeholder": "Tu correo o nombre de usuario", + "signin.input.password": "Contraseña", + "signin.input.password.placeholder": "Tu contraseña", + "signin.button.submit": "Iniciar sesión", + "signIn.notify.totp-required.title": "Se requiere autenticación de dos factores", + "signIn.notify.totp-required.description": "Por favor ingrese su código de autenticación de dos factores", + // END /auth/signin + // /auth/signup + "signup.title": "Crear una cuenta", + "signup.description": "¿Ya tienes una cuenta?", + "signup.button.signin": "Iniciar sesión", + "signup.input.username": "Nombre de usuario", + "signup.input.username.placeholder": "Tu nombre de usuario", + "signup.input.email": "Correo", + "signup.input.email.placeholder": "Tu correo", + "signup.button.submit": "Comencemos", + // END /auth/signup + // /auth/reset-password + "resetPassword.title": "¿Olvidaste tu contraseña?", + "resetPassword.description": "Ingresa tu correo para restablecer tu contraseña.", + "resetPassword.notify.success": "Se ha enviado un correo con el enlace para restablecer tu contraseña.", + "resetPassword.button.back": "Volver al inicio de sesión", + "resetPassword.text.resetPassword": "Restablecer contraseña", + "resetPassword.text.enterNewPassword": "Ingresa tu nueva contraseña", + "resetPassword.input.password": "Nueva contraseña", + "resetPassword.notify.passwordReset": "Tu contraseña se ha restablecido correctamente.", + // /account + "account.title": "Mi cuenta", + "account.card.info.title": "Información de cuenta", + "account.card.info.username": "Nombre de usuario", + "account.card.info.email": "Correo", + "account.notify.info.success": "Cuenta actualizada correctamente", + "account.card.password.title": "Contraseña", + "account.card.password.old": "Anterior contraseña", + "account.card.password.new": "Nueva contraseña", + "account.notify.password.success": "Contraseña cambiada correctamente", + "account.card.security.title": "Seguridad", + "account.card.security.totp.enable.description": "Ingrese su contraseña actual para habilitar TOTP", + "account.card.security.totp.disable.description": "Ingrese su contraseña actual para deshabilitar TOTP", + "account.card.security.totp.button.start": "Iniciar", + "account.modal.totp.title": "Habilitar TOTP", + "account.modal.totp.step1": "Paso 1: Añadir tu autentificador", + "account.modal.totp.step2": "Paso 2: Validar tu código", + "account.modal.totp.enterManually": "Ingresar manualmente", + "account.modal.totp.code": "Código", + "account.modal.totp.clickToCopy": "Clic para copiar", + "account.modal.totp.verify": "Verificar", + "account.notify.totp.disable": "TOTP deshabilitado correctamente", + "account.notify.totp.enable": "TOTP habilitado correctamente", + "account.card.language.title": "Idioma", + "account.card.color.title": "Esquema de colores", + // ThemeSwitcher.tsx + "account.theme.dark": "Oscuro", + "account.theme.light": "Claro", + "account.theme.system": "Sistema", + "account.button.delete": "Eliminar Cuenta", + "account.modal.delete.title": "Eliminar Cuenta", + "account.modal.delete.description": "¿Realmente quieres eliminar tu cuenta con todos los archivos que estás compartiendo actualmente?", + // END /account + // /account/shares + "account.shares.title": "Mis compartidos", + "account.shares.title.empty": "Aquí está vacío 👀", + "account.shares.description.empty": "No tienes nada compartido.", + "account.shares.button.create": "Crear uno", + "account.shares.info.title": "Información del archivo compartido", + "account.shares.table.id": "ID", + "account.shares.table.name": "Nombre", + "account.shares.table.description": "Descripción", + "account.shares.table.visitors": "Visitas", + "account.shares.table.expiresAt": "Expira en", + "account.shares.table.createdAt": "Creado en", + "account.shares.table.size": "Tamaño", + "account.shares.modal.share-informations": "Share informations", + "account.shares.modal.share-link": "Enlace", + "account.shares.modal.delete.title": "Eliminar archivo {share}", + "account.shares.modal.delete.description": "¿Seguro que quieres eliminar este archivo compartido?", + // END /account/shares + // /account/reverseShares + "account.reverseShares.title": "Reverse shares", + "account.reverseShares.description": "Un reverse share te permite generar una URL única con la que usuarios externos pueden compartir archivos.", + "account.reverseShares.title.empty": "Aquí está vacío 👀", + "account.reverseShares.description.empty": "No tienes ninguna reverse share.", + // showCreateReverseShareModal.tsx + "account.reverseShares.modal.expiration.label": "Expiración", + "account.reverseShares.modal.expiration.minute-singular": "Minuto", + "account.reverseShares.modal.expiration.minute-plural": "Minutos", + "account.reverseShares.modal.expiration.hour-singular": "Hora", + "account.reverseShares.modal.expiration.hour-plural": "Horas", + "account.reverseShares.modal.expiration.day-singular": "Día", + "account.reverseShares.modal.expiration.day-plural": "Días", + "account.reverseShares.modal.expiration.week-singular": "Semana", + "account.reverseShares.modal.expiration.week-plural": "Semanas", + "account.reverseShares.modal.expiration.month-singular": "Mes", + "account.reverseShares.modal.expiration.month-plural": "Meses", + "account.reverseShares.modal.expiration.year-singular": "Año", + "account.reverseShares.modal.expiration.year-plural": "Años", + "account.reverseShares.modal.max-size.label": "Tamaño máximo a compartir", + "account.reverseShares.modal.send-email": "Enviar notificación por correo", + "account.reverseShares.modal.send-email.description": "Enviar una notificación por correo cuando se comparta algo con este enlace de Reverse Share.", + "account.reverseShares.modal.max-use.label": "Máximo de usos", + "account.reverseShares.modal.max-use.description": "Cantidad máxima de veces que esta URL se puede usar para crear un archivo compartido.", + "account.reverseShare.never-expires": "Esta Reverse Share nunca expirará.", + "account.reverseShare.expires-on": "Esta Reverse Share expirará en {expiration}.", + "account.reverseShares.table.no-shares": "Todavía no has compartido un archivo", + "account.reverseShares.table.count.singular": "compartido", + "account.reverseShares.table.count.plural": "compartidos", + "account.reverseShares.table.shares": "Compartidos", + "account.reverseShares.table.remaining": "Usos restantes", + "account.reverseShares.table.max-size": "Tamaño máximo de archivo", + "account.reverseShares.table.expires": "Expira en", + "account.reverseShares.modal.reverse-share-link": "Enlace de Reverse Share", + "account.reverseShares.modal.delete.title": "Eliminar Reverse Share", + "account.reverseShares.modal.delete.description": "¿Seguro que quieres eliminar esta Reverse Share? Si lo haces, todos los archivos asociados también serán eliminados.", + // END /account/reverseShares + // /admin + "admin.title": "Administración", + "admin.button.users": "Gestión de usuarios", + "admin.button.config": "Configuración", + "admin.version": "Versión", + // END /admin + // /admin/users + "admin.users.title": "Gestión de usuarios", + "admin.users.table.username": "Nombre de usuario", + "admin.users.table.email": "Correo", + "admin.users.table.admin": "Administrador", + "admin.users.edit.update.title": "Actualizar usuario {username}", + "admin.users.edit.update.admin-privileges": "Privilegios de administrador", + "admin.users.edit.update.change-password.title": "Cambiar contraseña", + "admin.users.edit.update.change-password.field": "Nueva contraseña", + "admin.users.edit.update.change-password.button": "Guardar nueva contraseña", + "admin.users.edit.update.notify.password.success": "Contraseña cambiada correctamente", + "admin.users.edit.delete.title": "Eliminar usuario {username}", + "admin.users.edit.delete.description": "¿Realmente quiere eliminar este usuario y todos sus archivos compartidos?", + // showCreateUserModal.tsx + "admin.users.modal.create.title": "Crear usuario", + "admin.users.modal.create.username": "Nombre de usuario", + "admin.users.modal.create.email": "Correo", + "admin.users.modal.create.password": "Contraseña", + "admin.users.modal.create.manual-password": "Establecer contraseña manualmente", + "admin.users.modal.create.manual-password.description": "Si no se marca, el usuario recibirá un correo con un enlace para configurar su contraseña.", + "admin.users.modal.create.admin": "Privilegios de administrador", + "admin.users.modal.create.admin.description": "Si se marca, el usuario podrá acceder al panel de administrador.", + // END /admin/users + // /upload + "upload.title": "Subir", + "upload.notify.generic-error": "Ha ocurrido un error mientras se compartía tu archivo.", + "upload.notify.count-failed": "No se pudo cargar {count} archivos. Intentando nuevamente.", + // Dropzone.tsx + "upload.dropzone.title": "Subir archivos", + "upload.dropzone.description": "Arrastra archivos aquí para comenzar a compartir. Aceptamos archivos de un tamaño menor a {maxSize} en total.", + "upload.dropzone.notify.file-too-big": "Tus archivos exceden el tamaño máximo de {maxSize}.", + // FileList.tsx + "upload.filelist.name": "Nombre", + "upload.filelist.size": "Tamaño", + // showCreateUploadModal.tsx + "upload.modal.title": "Crear archivo compartido", + "upload.modal.link.error.invalid": "Solo puede contener letras, números, guiones y guiones bajos", + "upload.modal.link.error.taken": "Este enlace ya está en uso", + "upload.modal.not-signed-in": "No has iniciado sesión", + "upload.modal.not-signed-in-description": "No podrás eliminar tus archivos compartidos manualmente ni ver el número de visitas.", + "upload.modal.expires.never": "nunca", + "upload.modal.expires.never-long": "Nunca Expira", + "upload.modal.link.label": "Enlace", + "upload.modal.link.placeholder": "myAwesomeShare", + "upload.modal.expires.label": "Expiración", + "upload.modal.expires.minute-singular": "Minuto", + "upload.modal.expires.minute-plural": "Minutos", + "upload.modal.expires.hour-singular": "Hora", + "upload.modal.expires.hour-plural": "Horas", + "upload.modal.expires.day-singular": "Día", + "upload.modal.expires.day-plural": "Días", + "upload.modal.expires.week-singular": "Semana", + "upload.modal.expires.week-plural": "Semanas", + "upload.modal.expires.month-singular": "Mes", + "upload.modal.expires.month-plural": "Meses", + "upload.modal.expires.year-singular": "Año", + "upload.modal.expires.year-plural": "Años", + "upload.modal.accordion.description.title": "Descripción", + "upload.modal.accordion.description.placeholder": "Nota para los destinatarios de este archivo", + "upload.modal.accordion.email.title": "Correo de los destinatarios", + "upload.modal.accordion.email.placeholder": "Ingresa los correos de los destinatarios", + "upload.modal.accordion.email.invalid-email": "Dirección de correo inválida", + "upload.modal.accordion.security.title": "Opciones de seguridad", + "upload.modal.accordion.security.password.label": "Protección por contraseña", + "upload.modal.accordion.security.password.placeholder": "Sin contraseña", + "upload.modal.accordion.security.max-views.label": "Máximo de vistas", + "upload.modal.accordion.security.max-views.placeholder": "Sin límite", + // showCompletedUploadModal.tsx + "upload.modal.completed.never-expires": "Este archivo nunca expirará.", + "upload.modal.completed.expires-on": "Este archivo expira en {expiration}.", + "upload.modal.completed.share-ready": "Archivo listo", + // END /upload + // /share/[id] + "share.title": "Archivo {shareId}", + "share.description": "¡Mira lo que he compartido contigo!", + "share.error.visitor-limit-exceeded.title": "Se excedió el límite de visitas", + "share.error.visitor-limit-exceeded.description": "Se ha excedido el límite de visitas para este archivo.", + "share.error.removed.title": "Archivo eliminado", + "share.error.not-found.title": "Archivo no encontrado", + "share.error.not-found.description": "El archivo que estás buscando no existe.", + "share.modal.password.title": "Se requiere contraseña", + "share.modal.password.description": "Por favor ingrese la contraseña para poder acceder a este archivo compartido.", + "share.modal.password": "Contraseña", + "share.modal.error.invalid-password": "Contraseña inválida", + "share.button.download-all": "Descargar todo", + "share.notify.download-all-preparing": "Se está preparando el archivo. Intente de nuevo en unos minutos.", + "share.modal.file-link": "Enlace del archivo", + "share.table.name": "Nombre", + "share.table.size": "Tamaño", + "share.modal.file-preview.error.not-supported.title": "Vista previa no disponible", + "share.modal.file-preview.error.not-supported.description": "La vista previa para este tipo de archivo no está disponible. Por favor descargue el archivo para verlo.", + // END /share/[id] + // /admin/config + "admin.config.title": "Configuración", + "admin.config.category.general": "General", + "admin.config.category.share": "Share", + "admin.config.category.email": "Correo", + "admin.config.category.smtp": "SMTP", + "admin.config.general.app-name": "Nombre de la App", + "admin.config.general.app-name.description": "Nombre de la aplicación", + "admin.config.general.app-url": "App URL", + "admin.config.general.app-url.description": "En cuál URL está disponible Pingvin Share", + "admin.config.general.show-home-page": "Mostrar página de inicio", + "admin.config.general.show-home-page.description": "Whether to show the home page", + "admin.config.general.logo": "Logo", + "admin.config.general.logo.description": "Change your logo by uploading a new image. The image must be a PNG and should have the format 1:1.", + "admin.config.general.logo.placeholder": "Elegir imagen", + "admin.config.email.enable-share-email-recipients": "Enable share email recipients", + "admin.config.email.enable-share-email-recipients.description": "Whether to allow emails to share recipients. Only enable this if you have enabled SMTP.", + "admin.config.email.share-recipients-subject": "Share recipients subject", + "admin.config.email.share-recipients-subject.description": "Subject of the email which gets sent to the share recipients.", + "admin.config.email.share-recipients-message": "Share recipients message", + "admin.config.email.share-recipients-message.description": "Message which gets sent to the share recipients. Available variables:\n {creator} - The username of the creator of the share\n {shareUrl} - The URL of the share\n {desc} - The description of the share\n {expires} - The expiration date of the share\n The variables will be replaced with the actual value.", + "admin.config.email.reverse-share-subject": "Reverse share subject", + "admin.config.email.reverse-share-subject.description": "Subject of the email which gets sent when someone created a share with your reverse share link.", + "admin.config.email.reverse-share-message": "Reverse share message", + "admin.config.email.reverse-share-message.description": "Message which gets sent when someone created a share with your reverse share link. {shareUrl} will be replaced with the creator's name and the share URL.", + "admin.config.email.reset-password-subject": "Reset password subject", + "admin.config.email.reset-password-subject.description": "Subject of the email which gets sent when a user requests a password reset.", + "admin.config.email.reset-password-message": "Reset password message", + "admin.config.email.reset-password-message.description": "Message which gets sent when a user requests a password reset. {url} will be replaced with the reset password URL.", + "admin.config.email.invite-subject": "Invite subject", + "admin.config.email.invite-subject.description": "Subject of the email which gets sent when an admin invites a user.", + "admin.config.email.invite-message": "Invite message", + "admin.config.email.invite-message.description": "Message which gets sent when an admin invites a user. {url} will be replaced with the invite URL and {password} with the password.", + "admin.config.share.allow-registration": "Allow registration", + "admin.config.share.allow-registration.description": "Whether registration is allowed", + "admin.config.share.allow-unauthenticated-shares": "Allow unauthenticated shares", + "admin.config.share.allow-unauthenticated-shares.description": "Whether unauthenticated users can create shares", + "admin.config.share.max-size": "Max size", + "admin.config.share.max-size.description": "Maximum share size in bytes", + "admin.config.smtp.enabled": "Enabled", + "admin.config.smtp.enabled.description": "Whether SMTP is enabled. Only set this to true if you entered the host, port, email, user and password of your SMTP server.", + "admin.config.smtp.host": "Host", + "admin.config.smtp.host.description": "Host of the SMTP server", + "admin.config.smtp.port": "Port", + "admin.config.smtp.port.description": "Port of the SMTP server", + "admin.config.smtp.email": "Email", + "admin.config.smtp.email.description": "Email address which the emails get sent from", + "admin.config.smtp.username": "Username", + "admin.config.smtp.username.description": "Username of the SMTP server", + "admin.config.smtp.password": "Password", + "admin.config.smtp.password.description": "Password of the SMTP server", + "admin.config.smtp.button.test": "Send test email", + // 404 + "404.description": "Oops this page doesn't exist.", + "404.button.home": "Bring me back home", + // Common translations + "common.button.save": "Save", + "common.button.create": "Create", + "common.button.submit": "Submit", + "common.button.delete": "Delete", + "common.button.cancel": "Cancel", + "common.button.confirm": "Confirm", + "common.button.disable": "Disable", + "common.button.share": "Share", + "common.button.generate": "Generate", + "common.button.done": "Done", + "common.text.link": "Enlace", + "common.text.or": "or", + "common.button.go-back": "Go back", + "common.notify.copied": "Your link was copied to the clipboard", + "common.error": "Error", + "common.error.unknown": "An unknown error occurred", + "common.error.invalid-email": "Invalid email address", + "common.error.too-short": "Must be at least {length} characters", + "common.error.too-long": "Must be at most {length} characters", + "common.error.exact-length": "Must be exactly {length} characters", + "common.error.invalid-number": "Must be a number", + "common.error.field-required": "This field is required" +}; \ No newline at end of file diff --git a/frontend/src/i18n/translations/fr-FR.ts b/frontend/src/i18n/translations/fr-FR.ts new file mode 100644 index 00000000..561ba304 --- /dev/null +++ b/frontend/src/i18n/translations/fr-FR.ts @@ -0,0 +1,320 @@ +export default { + // Navbar + "navbar.upload": "Envoyer", + "navbar.signin": "Se connecter", + "navbar.home": "Accueil", + "navbar.signup": "S'inscrire", + "navbar.links.shares": "Mes partages", + "navbar.links.reverse": "Partages inversés", + "navbar.avatar.account": "Mon compte", + "navbar.avatar.admin": "Administration", + "navbar.avatar.signout": "Se déconnecter", + // END navbar + // / + "home.title": "Une plateforme de partage de fichier auto-hébergée.", + "home.description": "Voulez-vous vraiment remettre vos fichiers personnels dans les mains de tiers comme WeTransfer ?", + "home.bullet.a.name": "Auto-hébergé", + "home.bullet.a.description": "Hébergez Pingvin Share sur votre propre machine.", + "home.bullet.b.name": "Confidentialité", + "home.bullet.b.description": "Vos fichiers sont vos fichiers et ne devraient jamais être mis entre les mains de tiers.", + "home.bullet.c.name": "Aucune rébarbative limite de taille", + "home.bullet.c.description": "Téléchargez des fichiers volumineux que vous le souhaitez. Seul votre disque dur est la limite.", + "home.button.start": "Commencer", + "home.button.source": "Code source", + // END / + // /auth/signin + "signin.title": "Content de vous revoir", + "signin.description": "Pas encore de compte ?", + "signin.button.signup": "S'inscrire", + "signin.input.email-or-username": "Email ou pseudo", + "signin.input.email-or-username.placeholder": "Votre email ou pseudo", + "signin.input.password": "Mot de passe", + "signin.input.password.placeholder": "Votre mot de passe", + "signin.button.submit": "Se connecter", + "signIn.notify.totp-required.title": "Une authentification à deux facteurs est requise", + "signIn.notify.totp-required.description": "Veuillez entrer votre code d'authentification à deux facteurs", + // END /auth/signin + // /auth/signup + "signup.title": "Créer un compte", + "signup.description": "Vous avez déjà un compte ?", + "signup.button.signin": "Se connecter", + "signup.input.username": "Pseudo", + "signup.input.username.placeholder": "Votre pseudo", + "signup.input.email": "Email", + "signup.input.email.placeholder": "Votre adresse mail", + "signup.button.submit": "Commençons", + // END /auth/signup + // /auth/reset-password + "resetPassword.title": "Mot de passe oublié ?", + "resetPassword.description": "Saisissez votre email pour réinitialiser votre mot de passe.", + "resetPassword.notify.success": "Un mail a été envoyé avec un lien pour réinitialiser votre mot de passe.", + "resetPassword.button.back": "Retour à la page de connexion", + "resetPassword.text.resetPassword": "Réinitialiser le mot de passe", + "resetPassword.text.enterNewPassword": "Saisissez votre nouveau mot de passe", + "resetPassword.input.password": "Nouveau mot de passe", + "resetPassword.notify.passwordReset": "Votre mot de passe a bien été réinitialisé.", + // /account + "account.title": "Mon compte", + "account.card.info.title": "Détails du compte", + "account.card.info.username": "Pseudo", + "account.card.info.email": "Adresse mail", + "account.notify.info.success": "Compte mis à jour avec succès", + "account.card.password.title": "Mot de passe", + "account.card.password.old": "Ancien mot de passe", + "account.card.password.new": "Nouveau mot de passe", + "account.notify.password.success": "Le mot de passe a été modifié avec succès", + "account.card.security.title": "Sécurité", + "account.card.security.totp.enable.description": "Entrez votre mot de passe actuel pour commencer à activer TOTP", + "account.card.security.totp.disable.description": "Entrez votre mot de passe pour désactiver TOTP", + "account.card.security.totp.button.start": "Commencer", + "account.modal.totp.title": "Activer TOTP", + "account.modal.totp.step1": "Étape 1 : Ajouter votre authentificateur", + "account.modal.totp.step2": "Étape 2 : Valider votre code", + "account.modal.totp.enterManually": "Saisir manuellement", + "account.modal.totp.code": "Code", + "account.modal.totp.clickToCopy": "Cliquez pour copier", + "account.modal.totp.verify": "Vérifier", + "account.notify.totp.disable": "TOTP désactivé", + "account.notify.totp.enable": "TOTP activé", + "account.card.language.title": "Langue", + "account.card.color.title": "Thème de couleurs", + // ThemeSwitcher.tsx + "account.theme.dark": "Sombre", + "account.theme.light": "Clair", + "account.theme.system": "Système", + "account.button.delete": "Supprimer le compte", + "account.modal.delete.title": "Supprimer le compte", + "account.modal.delete.description": "Voulez-vous vraiment supprimer votre compte, y compris tous vos partages actifs ?", + // END /account + // /account/shares + "account.shares.title": "Mes partages", + "account.shares.title.empty": "Il n'y a rien ici 👀", + "account.shares.description.empty": "Vous n’avez aucun partage.", + "account.shares.button.create": "Créez-en un", + "account.shares.info.title": "Détails du partage", + "account.shares.table.id": "ID", + "account.shares.table.name": "Nom", + "account.shares.table.description": "Description", + "account.shares.table.visitors": "Visiteurs", + "account.shares.table.expiresAt": "Expire le", + "account.shares.table.createdAt": "Créé le", + "account.shares.table.size": "Taille", + "account.shares.modal.share-informations": "Share informations", + "account.shares.modal.share-link": "Lien de partage", + "account.shares.modal.delete.title": "Supprimer le partage {share}", + "account.shares.modal.delete.description": "Voulez-vous vraiment supprimer ce partage ?", + // END /account/shares + // /account/reverseShares + "account.reverseShares.title": "Partages inversés", + "account.reverseShares.description": "Un partage inversé vous permet de générer une URL unique qui permet à des utilisateurs externes de créer un partage.", + "account.reverseShares.title.empty": "Il n'y a rien ici 👀", + "account.reverseShares.description.empty": "Vous n'avez aucun partage inversé.", + // showCreateReverseShareModal.tsx + "account.reverseShares.modal.expiration.label": "Expiration", + "account.reverseShares.modal.expiration.minute-singular": "Minute", + "account.reverseShares.modal.expiration.minute-plural": "Minutes", + "account.reverseShares.modal.expiration.hour-singular": "Heure", + "account.reverseShares.modal.expiration.hour-plural": "Heures", + "account.reverseShares.modal.expiration.day-singular": "Jour", + "account.reverseShares.modal.expiration.day-plural": "Jours", + "account.reverseShares.modal.expiration.week-singular": "Semaine", + "account.reverseShares.modal.expiration.week-plural": "Semaines", + "account.reverseShares.modal.expiration.month-singular": "Mois", + "account.reverseShares.modal.expiration.month-plural": "Mois", + "account.reverseShares.modal.expiration.year-singular": "An", + "account.reverseShares.modal.expiration.year-plural": "Ans", + "account.reverseShares.modal.max-size.label": "Taille maximale du partage", + "account.reverseShares.modal.send-email": "Envoyer un mail de notification", + "account.reverseShares.modal.send-email.description": "Envoyer une notification par courriel lorsqu'un partage est créé depuis ce partage inversé.", + "account.reverseShares.modal.max-use.label": "Nombre d'utilisation max", + "account.reverseShares.modal.max-use.description": "Le nombre maximal de fois que cette URL peut être utilisée pour créer un partage.", + "account.reverseShare.never-expires": "Ce partage inversé n'expirera jamais.", + "account.reverseShare.expires-on": "Ce partage inversé expirera le {expiration}.", + "account.reverseShares.table.no-shares": "Aucun partage créé pour le moment", + "account.reverseShares.table.count.singular": "partage", + "account.reverseShares.table.count.plural": "partages", + "account.reverseShares.table.shares": "Partages", + "account.reverseShares.table.remaining": "Utilisations restantes", + "account.reverseShares.table.max-size": "Taille maximale du partage", + "account.reverseShares.table.expires": "Expire dans", + "account.reverseShares.modal.reverse-share-link": "Lien du partage inversé", + "account.reverseShares.modal.delete.title": "Supprimer le partage inversé", + "account.reverseShares.modal.delete.description": "Voulez-vous vraiment supprimer ce partage inversé ? Si vous le faites, les partages qu'il contient seront également supprimés.", + // END /account/reverseShares + // /admin + "admin.title": "Administration", + "admin.button.users": "Gestion des utilisateurs", + "admin.button.config": "Paramètres", + "admin.version": "Version", + // END /admin + // /admin/users + "admin.users.title": "Gestion des utilisateurs", + "admin.users.table.username": "Pseudo", + "admin.users.table.email": "Adresse mail", + "admin.users.table.admin": "Admin", + "admin.users.edit.update.title": "Modifier l'utilisateur {username}", + "admin.users.edit.update.admin-privileges": "Privilèges admin", + "admin.users.edit.update.change-password.title": "Changer le mot de passe", + "admin.users.edit.update.change-password.field": "Nouveau mot de passe", + "admin.users.edit.update.change-password.button": "Enregistrer le nouveau mot de passe", + "admin.users.edit.update.notify.password.success": "Le mot de passe a été modifié", + "admin.users.edit.delete.title": "Supprimer l'utilisateur {username}", + "admin.users.edit.delete.description": "Voulez-vous vraiment supprimer cet utilisateur et toutes ses partages ?", + // showCreateUserModal.tsx + "admin.users.modal.create.title": "Créer un utilisateur", + "admin.users.modal.create.username": "Surnom", + "admin.users.modal.create.email": "Courriel", + "admin.users.modal.create.password": "Mot de passe", + "admin.users.modal.create.manual-password": "Définir le mot de passe manuellement", + "admin.users.modal.create.manual-password.description": "S'il n'est pas coché, l'utilisateur recevra un mail avec un lien pour définir son mot de passe.", + "admin.users.modal.create.admin": "Privilèges admin", + "admin.users.modal.create.admin.description": "Si coché, l'utilisateur pourra accéder au panneau d'administration.", + // END /admin/users + // /upload + "upload.title": "Téléverser", + "upload.notify.generic-error": "Une erreur est survenue durant le traitement de votre partage.", + "upload.notify.count-failed": "{count} fichier(s) n'a(ont) pas pu être envoyé(s). Veuillez réessayer.", + // Dropzone.tsx + "upload.dropzone.title": "Téléverser des fichiers", + "upload.dropzone.description": "Glissez-déposez des fichiers ici pour commencer votre partage. Ils ne peuvent avoir une taille supérieur à {maxSize} au total.", + "upload.dropzone.notify.file-too-big": "Vos fichiers dépassent la taille maximale de {maxSize}.", + // FileList.tsx + "upload.filelist.name": "Nom", + "upload.filelist.size": "Taille", + // showCreateUploadModal.tsx + "upload.modal.title": "Créer un partage", + "upload.modal.link.error.invalid": "Ne peut contenir que des lettres, des chiffres, des tirets bas et des traits d'union", + "upload.modal.link.error.taken": "Ce lien est déjà utilisé", + "upload.modal.not-signed-in": "Vous n'êtes pas connecté", + "upload.modal.not-signed-in-description": "Vous ne pourrez pas supprimer votre partage manuellement et afficher le nombre de visiteurs.", + "upload.modal.expires.never": "jamais", + "upload.modal.expires.never-long": "N'expire jamais", + "upload.modal.link.label": "Lien", + "upload.modal.link.placeholder": "monSuperPartage", + "upload.modal.expires.label": "Expiration", + "upload.modal.expires.minute-singular": "Minute", + "upload.modal.expires.minute-plural": "Minutes", + "upload.modal.expires.hour-singular": "Heure", + "upload.modal.expires.hour-plural": "Heures", + "upload.modal.expires.day-singular": "Jour", + "upload.modal.expires.day-plural": "Jours", + "upload.modal.expires.week-singular": "Semaine", + "upload.modal.expires.week-plural": "Semaines", + "upload.modal.expires.month-singular": "Mois", + "upload.modal.expires.month-plural": "Mois", + "upload.modal.expires.year-singular": "An", + "upload.modal.expires.year-plural": "Ans", + "upload.modal.accordion.description.title": "Description", + "upload.modal.accordion.description.placeholder": "Note pour les destinataires de ce partage", + "upload.modal.accordion.email.title": "Destinataires du mail", + "upload.modal.accordion.email.placeholder": "Saisir les destinataires du mail", + "upload.modal.accordion.email.invalid-email": "Adresse mail invalide", + "upload.modal.accordion.security.title": "Options de sécurité", + "upload.modal.accordion.security.password.label": "Protection par mot de passe", + "upload.modal.accordion.security.password.placeholder": "Aucun mot de passe", + "upload.modal.accordion.security.max-views.label": "Nombre de vues maximum", + "upload.modal.accordion.security.max-views.placeholder": "Aucune limite", + // showCompletedUploadModal.tsx + "upload.modal.completed.never-expires": "Ce partage n'expirera jamais.", + "upload.modal.completed.expires-on": "Ce partage expirera le {expiration}.", + "upload.modal.completed.share-ready": "Partage prêt", + // END /upload + // /share/[id] + "share.title": "Partage {shareId}", + "share.description": "Regardez ce que j'ai partagé !", + "share.error.visitor-limit-exceeded.title": "Limite de visiteurs dépassée", + "share.error.visitor-limit-exceeded.description": "La limite de visiteurs de ce partage a été dépassée.", + "share.error.removed.title": "Partage supprimé", + "share.error.not-found.title": "Partage introuvable", + "share.error.not-found.description": "Le partage que vous cherchez n'existe pas.", + "share.modal.password.title": "Mot de passe requis", + "share.modal.password.description": "Pour accéder à ce partage, veuillez entrer le mot de passe du partage.", + "share.modal.password": "Mot de passe", + "share.modal.error.invalid-password": "Mot de passe incorrect", + "share.button.download-all": "Télécharger tout", + "share.notify.download-all-preparing": "Le partage est en préparation. Réessayez dans quelques minutes.", + "share.modal.file-link": "Lien du fichier", + "share.table.name": "Nom", + "share.table.size": "Taille", + "share.modal.file-preview.error.not-supported.title": "Aperçu non supporté", + "share.modal.file-preview.error.not-supported.description": "Un aperçu pour ce type de fichier n'est pas pris en charge. Veuillez télécharger le fichier pour le voir.", + // END /share/[id] + // /admin/config + "admin.config.title": "Paramètres", + "admin.config.category.general": "Général", + "admin.config.category.share": "Partage", + "admin.config.category.email": "Adresse mail", + "admin.config.category.smtp": "SMTP", + "admin.config.general.app-name": "Nom de l'app", + "admin.config.general.app-name.description": "Nom de l'application", + "admin.config.general.app-url": "URL de l’application", + "admin.config.general.app-url.description": "Depuis quel URL le partage Pingvin est disponible", + "admin.config.general.show-home-page": "Afficher la page d'accueil", + "admin.config.general.show-home-page.description": "Afficher ou non la page d'accueil", + "admin.config.general.logo": "Logo", + "admin.config.general.logo.description": "Changez votre logo en téléchargeant une nouvelle image. L'image doit être un PNG et doit avoir un ratio 1:1.", + "admin.config.general.logo.placeholder": "Sélectionner une image", + "admin.config.email.enable-share-email-recipients": "Activer les destinataires du courriel du partage", + "admin.config.email.enable-share-email-recipients.description": "Autorise les mails des destinataires du partage. N'activez cette option que si vous avez activé SMTP.", + "admin.config.email.share-recipients-subject": "Sujet des destinataires du partage", + "admin.config.email.share-recipients-subject.description": "Sujet du mail qui est envoyé aux destinataires du partage.", + "admin.config.email.share-recipients-message": "Message des destinataires du partage", + "admin.config.email.share-recipients-message.description": "Message qui est envoyé aux destinataires du partage. Variables possibles :\n {creator} - Le pseudo de l'auteur du partage\n {shareUrl} - L'URL du partage\n {desc} - La description du partage\n {expires} - La date d'expiration du partage\nLes variables seront remplacées par leur valeur réelle.", + "admin.config.email.reverse-share-subject": "Sujet du partage inversé", + "admin.config.email.reverse-share-subject.description": "Sujet du courriel qui est envoyé lorsque quelqu'un a créé un partage avec le lien de votre partage inversé.", + "admin.config.email.reverse-share-message": "Message du partage inversé", + "admin.config.email.reverse-share-message.description": "Message qui est envoyé lorsque quelqu'un créé un partage avec le lien de votre partage inversé. {shareUrl} sera remplacé par le nom du créateur et l'URL de partage.", + "admin.config.email.reset-password-subject": "Sujet de réinitialisation du mot de passe", + "admin.config.email.reset-password-subject.description": "Sujet de l'email envoyé lorsqu'un utilisateur demande une réinitialisation du mot de passe.", + "admin.config.email.reset-password-message": "Message de réinitialisation du mot de passe", + "admin.config.email.reset-password-message.description": "Message qui est envoyé lorsqu'un utilisateur demande à réinitialiser son mot de passe. {url} sera remplacé par l'URL de réinitialisation du mot de passe.", + "admin.config.email.invite-subject": "Sujet de l'invitation", + "admin.config.email.invite-subject.description": "Sujet du courriel qui est envoyé lorsqu'un administrateur invite un utilisateur.", + "admin.config.email.invite-message": "Message de l'invitation", + "admin.config.email.invite-message.description": "Message qui est envoyé lorsqu'un administrateur invite un utilisateur. {url} sera remplacé par l'URL d'invitation et {password} avec le mot de passe.", + "admin.config.share.allow-registration": "Autoriser les inscriptions", + "admin.config.share.allow-registration.description": "Autorise l'inscription", + "admin.config.share.allow-unauthenticated-shares": "Autoriser les partages non authentifiés", + "admin.config.share.allow-unauthenticated-shares.description": "Autorise des utilisateurs non authentifiés à créer des partages", + "admin.config.share.max-size": "Taille max", + "admin.config.share.max-size.description": "Taille maximale du fichier en octets", + "admin.config.smtp.enabled": "Activé", + "admin.config.smtp.enabled.description": "Active SMTP. Activez ceci uniquement si vous avez saisit l'hôte, le port, le courriel, l'utilisateur et le mot de passe de votre serveur SMTP.", + "admin.config.smtp.host": "Hôte", + "admin.config.smtp.host.description": "Hôte du serveur SMTP", + "admin.config.smtp.port": "Port", + "admin.config.smtp.port.description": "Port du serveur SMTP", + "admin.config.smtp.email": "Adresse mail", + "admin.config.smtp.email.description": "Adresse à partir de laquelle les mails sont envoyés", + "admin.config.smtp.username": "Nom d'utilisateur", + "admin.config.smtp.username.description": "Nom d'utilisateur du serveur SMTP", + "admin.config.smtp.password": "Mot de passe", + "admin.config.smtp.password.description": "Mot de passe du serveur SMTP", + "admin.config.smtp.button.test": "Envoyer un mail de test", + // 404 + "404.description": "Désolé, mais cette page n’existe pas.", + "404.button.home": "Retour à l'accueil", + // Common translations + "common.button.save": "Sauvegarder", + "common.button.create": "Créer", + "common.button.submit": "Envoyer", + "common.button.delete": "Supprimer", + "common.button.cancel": "Annuler", + "common.button.confirm": "Confirmer", + "common.button.disable": "Désactiver", + "common.button.share": "Partager", + "common.button.generate": "Générer", + "common.button.done": "Terminer", + "common.text.link": "Lien", + "common.text.or": "ou", + "common.button.go-back": "Précédent", + "common.notify.copied": "Votre lien a été copié dans le presse-papiers", + "common.error": "Erreur", + "common.error.unknown": "Une erreur inconnue est survenue", + "common.error.invalid-email": "Adresse email invalide", + "common.error.too-short": "Doit comporter au moins {length} caractères", + "common.error.too-long": "Doit comporter au plus {length} caractères", + "common.error.exact-length": "Doit comporter exactement {length} caractères", + "common.error.invalid-number": "Doit être un nombre", + "common.error.field-required": "Ce champ est obligatoire" +}; \ No newline at end of file diff --git a/frontend/src/i18n/translations/pt-PT.ts b/frontend/src/i18n/translations/pt-PT.ts new file mode 100644 index 00000000..aa981d57 --- /dev/null +++ b/frontend/src/i18n/translations/pt-PT.ts @@ -0,0 +1,320 @@ +export default { + // Navbar + "navbar.upload": "Carregar", + "navbar.signin": "Iniciar sessão", + "navbar.home": "Início", + "navbar.signup": "Registar-se", + "navbar.links.shares": "My shares", + "navbar.links.reverse": "Reverse shares", + "navbar.avatar.account": "A minha conta", + "navbar.avatar.admin": "Administração", + "navbar.avatar.signout": "Terminar sessão", + // END navbar + // / + "home.title": "A self-hosted file sharing platform.", + "home.description": "Deseja realmente dar os seus arquivos pessoais na mão de terceiros como o WeTransfer?", + "home.bullet.a.name": "Self-Hosted", + "home.bullet.a.description": "Host Pingvin Share on your own machine.", + "home.bullet.b.name": "Privacidade", + "home.bullet.b.description": "Your files are your files and should never get into the hands of third parties.", + "home.bullet.c.name": "No annoying file size limit", + "home.bullet.c.description": "Upload as big files as you want. Only your hard drive will be your limit.", + "home.button.start": "Get started", + "home.button.source": "Source code", + // END / + // /auth/signin + "signin.title": "Welcome back", + "signin.description": "You don't have an account yet?", + "signin.button.signup": "Sign up", + "signin.input.email-or-username": "Email or username", + "signin.input.email-or-username.placeholder": "Your email or username", + "signin.input.password": "Password", + "signin.input.password.placeholder": "Your password", + "signin.button.submit": "Sign in", + "signIn.notify.totp-required.title": "Two-factor authentication required", + "signIn.notify.totp-required.description": "Please enter your two-factor authentication code", + // END /auth/signin + // /auth/signup + "signup.title": "Create an account", + "signup.description": "Already have an account?", + "signup.button.signin": "Sign in", + "signup.input.username": "Username", + "signup.input.username.placeholder": "Your username", + "signup.input.email": "Email", + "signup.input.email.placeholder": "Your email", + "signup.button.submit": "Let's get started", + // END /auth/signup + // /auth/reset-password + "resetPassword.title": "Forgot your password?", + "resetPassword.description": "Enter your email to reset your password.", + "resetPassword.notify.success": "An email has been sent with a link to reset your password.", + "resetPassword.button.back": "Back to sign in page", + "resetPassword.text.resetPassword": "Reset password", + "resetPassword.text.enterNewPassword": "Enter your new password", + "resetPassword.input.password": "New password", + "resetPassword.notify.passwordReset": "Your password has been reset successfully.", + // /account + "account.title": "My account", + "account.card.info.title": "Account info", + "account.card.info.username": "Username", + "account.card.info.email": "Email", + "account.notify.info.success": "Account updated successfully", + "account.card.password.title": "Password", + "account.card.password.old": "Old password", + "account.card.password.new": "New password", + "account.notify.password.success": "Password changed successfully", + "account.card.security.title": "Security", + "account.card.security.totp.enable.description": "Enter your current password to start enabling TOTP", + "account.card.security.totp.disable.description": "Enter your current password to disable TOTP", + "account.card.security.totp.button.start": "Start", + "account.modal.totp.title": "Enable TOTP", + "account.modal.totp.step1": "Step 1: Add your authenticator", + "account.modal.totp.step2": "Step 2: Validate your code", + "account.modal.totp.enterManually": "Enter manually", + "account.modal.totp.code": "Code", + "account.modal.totp.clickToCopy": "Click to copy", + "account.modal.totp.verify": "Verify", + "account.notify.totp.disable": "TOTP disabled successfully", + "account.notify.totp.enable": "TOTP enabled successfully", + "account.card.language.title": "Language", + "account.card.color.title": "Color scheme", + // ThemeSwitcher.tsx + "account.theme.dark": "Dark", + "account.theme.light": "Light", + "account.theme.system": "System", + "account.button.delete": "Delete Account", + "account.modal.delete.title": "Delete Account", + "account.modal.delete.description": "Do you really want to delete your account including all your active shares?", + // END /account + // /account/shares + "account.shares.title": "My shares", + "account.shares.title.empty": "It's empty here 👀", + "account.shares.description.empty": "You don't have any shares.", + "account.shares.button.create": "Create one", + "account.shares.info.title": "Share informations", + "account.shares.table.id": "ID", + "account.shares.table.name": "Name", + "account.shares.table.description": "Description", + "account.shares.table.visitors": "Visitors", + "account.shares.table.expiresAt": "Expires at", + "account.shares.table.createdAt": "Created at", + "account.shares.table.size": "Size", + "account.shares.modal.share-informations": "Share informations", + "account.shares.modal.share-link": "Share link", + "account.shares.modal.delete.title": "Delete share {share}", + "account.shares.modal.delete.description": "Do you really want to delete this share?", + // END /account/shares + // /account/reverseShares + "account.reverseShares.title": "Reverse shares", + "account.reverseShares.description": "A reverse share allows you to generate a unique URL that allows external users to create a share.", + "account.reverseShares.title.empty": "It's empty here 👀", + "account.reverseShares.description.empty": "You don't have any reverse shares.", + // showCreateReverseShareModal.tsx + "account.reverseShares.modal.expiration.label": "Expiration", + "account.reverseShares.modal.expiration.minute-singular": "Minute", + "account.reverseShares.modal.expiration.minute-plural": "Minutes", + "account.reverseShares.modal.expiration.hour-singular": "Hour", + "account.reverseShares.modal.expiration.hour-plural": "Hours", + "account.reverseShares.modal.expiration.day-singular": "Day", + "account.reverseShares.modal.expiration.day-plural": "Days", + "account.reverseShares.modal.expiration.week-singular": "Week", + "account.reverseShares.modal.expiration.week-plural": "Weeks", + "account.reverseShares.modal.expiration.month-singular": "Month", + "account.reverseShares.modal.expiration.month-plural": "Months", + "account.reverseShares.modal.expiration.year-singular": "Year", + "account.reverseShares.modal.expiration.year-plural": "Years", + "account.reverseShares.modal.max-size.label": "Max share size", + "account.reverseShares.modal.send-email": "Send email notification", + "account.reverseShares.modal.send-email.description": "Send an email notification when a share is created with this reverse share link.", + "account.reverseShares.modal.max-use.label": "Max uses", + "account.reverseShares.modal.max-use.description": "The maximum amount of times this URL can be used to create a share.", + "account.reverseShare.never-expires": "This reverse share will never expire.", + "account.reverseShare.expires-on": "This reverse share will expire on {expiration}.", + "account.reverseShares.table.no-shares": "No shares created yet", + "account.reverseShares.table.count.singular": "share", + "account.reverseShares.table.count.plural": "shares", + "account.reverseShares.table.shares": "Shares", + "account.reverseShares.table.remaining": "Remaining uses", + "account.reverseShares.table.max-size": "Max share size", + "account.reverseShares.table.expires": "Expires at", + "account.reverseShares.modal.reverse-share-link": "Reverse share link", + "account.reverseShares.modal.delete.title": "Delete reverse share", + "account.reverseShares.modal.delete.description": "Do you really want to delete this reverse share? If you do, the associated shares will be deleted as well.", + // END /account/reverseShares + // /admin + "admin.title": "Administration", + "admin.button.users": "User management", + "admin.button.config": "Configuration", + "admin.version": "Version", + // END /admin + // /admin/users + "admin.users.title": "User management", + "admin.users.table.username": "Username", + "admin.users.table.email": "Email", + "admin.users.table.admin": "Admin", + "admin.users.edit.update.title": "Update user {username}", + "admin.users.edit.update.admin-privileges": "Admin privileges", + "admin.users.edit.update.change-password.title": "Change password", + "admin.users.edit.update.change-password.field": "New password", + "admin.users.edit.update.change-password.button": "Save new password", + "admin.users.edit.update.notify.password.success": "Password changed successfully", + "admin.users.edit.delete.title": "Delete user {username}", + "admin.users.edit.delete.description": "Do you really want to delete this user and all his shares?", + // showCreateUserModal.tsx + "admin.users.modal.create.title": "Create user", + "admin.users.modal.create.username": "Username", + "admin.users.modal.create.email": "Email", + "admin.users.modal.create.password": "Password", + "admin.users.modal.create.manual-password": "Set password manually", + "admin.users.modal.create.manual-password.description": "If not checked, the user will receive an email with a link to set their password.", + "admin.users.modal.create.admin": "Admin privileges", + "admin.users.modal.create.admin.description": "If checked, the user will be able to access the admin panel.", + // END /admin/users + // /upload + "upload.title": "Upload", + "upload.notify.generic-error": "An error occurred while finishing your share.", + "upload.notify.count-failed": "{count} files failed to upload. Trying again.", + // Dropzone.tsx + "upload.dropzone.title": "Upload files", + "upload.dropzone.description": "Drag'n'drop files here to start your share. We can accept only files that are less than {maxSize} in total.", + "upload.dropzone.notify.file-too-big": "Your files exceed the maximum share size of {maxSize}.", + // FileList.tsx + "upload.filelist.name": "Name", + "upload.filelist.size": "Size", + // showCreateUploadModal.tsx + "upload.modal.title": "Create Share", + "upload.modal.link.error.invalid": "Can only contain letters, numbers, underscores, and hyphens", + "upload.modal.link.error.taken": "This link is already in use", + "upload.modal.not-signed-in": "You're not signed in", + "upload.modal.not-signed-in-description": "You will be unable to delete your share manually and view the visitor count.", + "upload.modal.expires.never": "never", + "upload.modal.expires.never-long": "Never Expires", + "upload.modal.link.label": "Link", + "upload.modal.link.placeholder": "myAwesomeShare", + "upload.modal.expires.label": "Expiration", + "upload.modal.expires.minute-singular": "Minute", + "upload.modal.expires.minute-plural": "Minutes", + "upload.modal.expires.hour-singular": "Hour", + "upload.modal.expires.hour-plural": "Hours", + "upload.modal.expires.day-singular": "Day", + "upload.modal.expires.day-plural": "Days", + "upload.modal.expires.week-singular": "Week", + "upload.modal.expires.week-plural": "Weeks", + "upload.modal.expires.month-singular": "Month", + "upload.modal.expires.month-plural": "Months", + "upload.modal.expires.year-singular": "Year", + "upload.modal.expires.year-plural": "Years", + "upload.modal.accordion.description.title": "Description", + "upload.modal.accordion.description.placeholder": "Note for the recipients of this share", + "upload.modal.accordion.email.title": "Email recipients", + "upload.modal.accordion.email.placeholder": "Enter email recipients", + "upload.modal.accordion.email.invalid-email": "Invalid email address", + "upload.modal.accordion.security.title": "Security options", + "upload.modal.accordion.security.password.label": "Password protection", + "upload.modal.accordion.security.password.placeholder": "No password", + "upload.modal.accordion.security.max-views.label": "Maximum views", + "upload.modal.accordion.security.max-views.placeholder": "No limit", + // showCompletedUploadModal.tsx + "upload.modal.completed.never-expires": "This share will never expire.", + "upload.modal.completed.expires-on": "This share will expire on {expiration}.", + "upload.modal.completed.share-ready": "Share ready", + // END /upload + // /share/[id] + "share.title": "Share {shareId}", + "share.description": "Look what I've shared with you!", + "share.error.visitor-limit-exceeded.title": "Visitor limit exceeded", + "share.error.visitor-limit-exceeded.description": "The visitor limit from this share has been exceeded.", + "share.error.removed.title": "Share removed", + "share.error.not-found.title": "Share not found", + "share.error.not-found.description": "The share you're looking for doesn't exist.", + "share.modal.password.title": "Password required", + "share.modal.password.description": "To access this share please enter the password for the share.", + "share.modal.password": "Password", + "share.modal.error.invalid-password": "Invalid password", + "share.button.download-all": "Download all", + "share.notify.download-all-preparing": "The share is preparing. Try again in a few minutes.", + "share.modal.file-link": "File link", + "share.table.name": "Name", + "share.table.size": "Size", + "share.modal.file-preview.error.not-supported.title": "Preview not supported", + "share.modal.file-preview.error.not-supported.description": "A preview for thise file type is unsupported. Please download the file to view it.", + // END /share/[id] + // /admin/config + "admin.config.title": "Configuration", + "admin.config.category.general": "General", + "admin.config.category.share": "Share", + "admin.config.category.email": "Email", + "admin.config.category.smtp": "SMTP", + "admin.config.general.app-name": "App name", + "admin.config.general.app-name.description": "Name of the application", + "admin.config.general.app-url": "App URL", + "admin.config.general.app-url.description": "On which URL Pingvin Share is available", + "admin.config.general.show-home-page": "Show home page", + "admin.config.general.show-home-page.description": "Whether to show the home page", + "admin.config.general.logo": "Logo", + "admin.config.general.logo.description": "Change your logo by uploading a new image. The image must be a PNG and should have the format 1:1.", + "admin.config.general.logo.placeholder": "Pick image", + "admin.config.email.enable-share-email-recipients": "Enable share email recipients", + "admin.config.email.enable-share-email-recipients.description": "Whether to allow emails to share recipients. Only enable this if you have enabled SMTP.", + "admin.config.email.share-recipients-subject": "Share recipients subject", + "admin.config.email.share-recipients-subject.description": "Subject of the email which gets sent to the share recipients.", + "admin.config.email.share-recipients-message": "Share recipients message", + "admin.config.email.share-recipients-message.description": "Message which gets sent to the share recipients. Available variables:\n {creator} - The username of the creator of the share\n {shareUrl} - The URL of the share\n {desc} - The description of the share\n {expires} - The expiration date of the share\n The variables will be replaced with the actual value.", + "admin.config.email.reverse-share-subject": "Reverse share subject", + "admin.config.email.reverse-share-subject.description": "Subject of the email which gets sent when someone created a share with your reverse share link.", + "admin.config.email.reverse-share-message": "Reverse share message", + "admin.config.email.reverse-share-message.description": "Message which gets sent when someone created a share with your reverse share link. {shareUrl} will be replaced with the creator's name and the share URL.", + "admin.config.email.reset-password-subject": "Reset password subject", + "admin.config.email.reset-password-subject.description": "Subject of the email which gets sent when a user requests a password reset.", + "admin.config.email.reset-password-message": "Reset password message", + "admin.config.email.reset-password-message.description": "Message which gets sent when a user requests a password reset. {url} will be replaced with the reset password URL.", + "admin.config.email.invite-subject": "Invite subject", + "admin.config.email.invite-subject.description": "Subject of the email which gets sent when an admin invites a user.", + "admin.config.email.invite-message": "Invite message", + "admin.config.email.invite-message.description": "Message which gets sent when an admin invites a user. {url} will be replaced with the invite URL and {password} with the password.", + "admin.config.share.allow-registration": "Allow registration", + "admin.config.share.allow-registration.description": "Whether registration is allowed", + "admin.config.share.allow-unauthenticated-shares": "Allow unauthenticated shares", + "admin.config.share.allow-unauthenticated-shares.description": "Whether unauthenticated users can create shares", + "admin.config.share.max-size": "Max size", + "admin.config.share.max-size.description": "Maximum share size in bytes", + "admin.config.smtp.enabled": "Enabled", + "admin.config.smtp.enabled.description": "Whether SMTP is enabled. Only set this to true if you entered the host, port, email, user and password of your SMTP server.", + "admin.config.smtp.host": "Host", + "admin.config.smtp.host.description": "Host of the SMTP server", + "admin.config.smtp.port": "Port", + "admin.config.smtp.port.description": "Port of the SMTP server", + "admin.config.smtp.email": "Email", + "admin.config.smtp.email.description": "Email address which the emails get sent from", + "admin.config.smtp.username": "Username", + "admin.config.smtp.username.description": "Username of the SMTP server", + "admin.config.smtp.password": "Password", + "admin.config.smtp.password.description": "Password of the SMTP server", + "admin.config.smtp.button.test": "Send test email", + // 404 + "404.description": "Oops this page doesn't exist.", + "404.button.home": "Bring me back home", + // Common translations + "common.button.save": "Save", + "common.button.create": "Create", + "common.button.submit": "Submit", + "common.button.delete": "Delete", + "common.button.cancel": "Cancel", + "common.button.confirm": "Confirm", + "common.button.disable": "Disable", + "common.button.share": "Share", + "common.button.generate": "Generate", + "common.button.done": "Done", + "common.text.link": "Link", + "common.text.or": "or", + "common.button.go-back": "Go back", + "common.notify.copied": "Your link was copied to the clipboard", + "common.error": "Error", + "common.error.unknown": "An unknown error occurred", + "common.error.invalid-email": "Invalid email address", + "common.error.too-short": "Must be at least {length} characters", + "common.error.too-long": "Must be at most {length} characters", + "common.error.exact-length": "Must be exactly {length} characters", + "common.error.invalid-number": "Must be a number", + "common.error.field-required": "This field is required" +}; \ No newline at end of file diff --git a/frontend/src/i18n/translations/th-TH.ts b/frontend/src/i18n/translations/th-TH.ts new file mode 100644 index 00000000..37f61da0 --- /dev/null +++ b/frontend/src/i18n/translations/th-TH.ts @@ -0,0 +1,320 @@ +export default { + // Navbar + "navbar.upload": "Upload", + "navbar.signin": "Sign in", + "navbar.home": "Home", + "navbar.signup": "Sign Up", + "navbar.links.shares": "My shares", + "navbar.links.reverse": "Reverse shares", + "navbar.avatar.account": "My account", + "navbar.avatar.admin": "Administration", + "navbar.avatar.signout": "Sign out", + // END navbar + // / + "home.title": "A self-hosted file sharing platform.", + "home.description": "Do you really want to give your personal files in the hand of third parties like WeTransfer?", + "home.bullet.a.name": "Self-Hosted", + "home.bullet.a.description": "Host Pingvin Share on your own machine.", + "home.bullet.b.name": "Privacy", + "home.bullet.b.description": "Your files are your files and should never get into the hands of third parties.", + "home.bullet.c.name": "No annoying file size limit", + "home.bullet.c.description": "Upload as big files as you want. Only your hard drive will be your limit.", + "home.button.start": "Get started", + "home.button.source": "Source code", + // END / + // /auth/signin + "signin.title": "Welcome back", + "signin.description": "You don't have an account yet?", + "signin.button.signup": "Sign up", + "signin.input.email-or-username": "Email or username", + "signin.input.email-or-username.placeholder": "Your email or username", + "signin.input.password": "Password", + "signin.input.password.placeholder": "Your password", + "signin.button.submit": "Sign in", + "signIn.notify.totp-required.title": "Two-factor authentication required", + "signIn.notify.totp-required.description": "Please enter your two-factor authentication code", + // END /auth/signin + // /auth/signup + "signup.title": "Create an account", + "signup.description": "Already have an account?", + "signup.button.signin": "Sign in", + "signup.input.username": "Username", + "signup.input.username.placeholder": "Your username", + "signup.input.email": "Email", + "signup.input.email.placeholder": "Your email", + "signup.button.submit": "Let's get started", + // END /auth/signup + // /auth/reset-password + "resetPassword.title": "Forgot your password?", + "resetPassword.description": "Enter your email to reset your password.", + "resetPassword.notify.success": "An email has been sent with a link to reset your password.", + "resetPassword.button.back": "Back to sign in page", + "resetPassword.text.resetPassword": "Reset password", + "resetPassword.text.enterNewPassword": "Enter your new password", + "resetPassword.input.password": "New password", + "resetPassword.notify.passwordReset": "Your password has been reset successfully.", + // /account + "account.title": "My account", + "account.card.info.title": "Account info", + "account.card.info.username": "Username", + "account.card.info.email": "Email", + "account.notify.info.success": "Account updated successfully", + "account.card.password.title": "Password", + "account.card.password.old": "Old password", + "account.card.password.new": "New password", + "account.notify.password.success": "Password changed successfully", + "account.card.security.title": "Security", + "account.card.security.totp.enable.description": "Enter your current password to start enabling TOTP", + "account.card.security.totp.disable.description": "Enter your current password to disable TOTP", + "account.card.security.totp.button.start": "Start", + "account.modal.totp.title": "Enable TOTP", + "account.modal.totp.step1": "Step 1: Add your authenticator", + "account.modal.totp.step2": "Step 2: Validate your code", + "account.modal.totp.enterManually": "Enter manually", + "account.modal.totp.code": "Code", + "account.modal.totp.clickToCopy": "Click to copy", + "account.modal.totp.verify": "Verify", + "account.notify.totp.disable": "TOTP disabled successfully", + "account.notify.totp.enable": "TOTP enabled successfully", + "account.card.language.title": "Language", + "account.card.color.title": "Color scheme", + // ThemeSwitcher.tsx + "account.theme.dark": "Dark", + "account.theme.light": "Light", + "account.theme.system": "System", + "account.button.delete": "Delete Account", + "account.modal.delete.title": "Delete Account", + "account.modal.delete.description": "Do you really want to delete your account including all your active shares?", + // END /account + // /account/shares + "account.shares.title": "My shares", + "account.shares.title.empty": "It's empty here 👀", + "account.shares.description.empty": "You don't have any shares.", + "account.shares.button.create": "Create one", + "account.shares.info.title": "Share informations", + "account.shares.table.id": "ID", + "account.shares.table.name": "Name", + "account.shares.table.description": "Description", + "account.shares.table.visitors": "Visitors", + "account.shares.table.expiresAt": "Expires at", + "account.shares.table.createdAt": "Created at", + "account.shares.table.size": "Size", + "account.shares.modal.share-informations": "Share informations", + "account.shares.modal.share-link": "Share link", + "account.shares.modal.delete.title": "Delete share {share}", + "account.shares.modal.delete.description": "Do you really want to delete this share?", + // END /account/shares + // /account/reverseShares + "account.reverseShares.title": "Reverse shares", + "account.reverseShares.description": "A reverse share allows you to generate a unique URL that allows external users to create a share.", + "account.reverseShares.title.empty": "It's empty here 👀", + "account.reverseShares.description.empty": "You don't have any reverse shares.", + // showCreateReverseShareModal.tsx + "account.reverseShares.modal.expiration.label": "Expiration", + "account.reverseShares.modal.expiration.minute-singular": "Minute", + "account.reverseShares.modal.expiration.minute-plural": "Minutes", + "account.reverseShares.modal.expiration.hour-singular": "Hour", + "account.reverseShares.modal.expiration.hour-plural": "Hours", + "account.reverseShares.modal.expiration.day-singular": "Day", + "account.reverseShares.modal.expiration.day-plural": "Days", + "account.reverseShares.modal.expiration.week-singular": "Week", + "account.reverseShares.modal.expiration.week-plural": "Weeks", + "account.reverseShares.modal.expiration.month-singular": "Month", + "account.reverseShares.modal.expiration.month-plural": "Months", + "account.reverseShares.modal.expiration.year-singular": "Year", + "account.reverseShares.modal.expiration.year-plural": "Years", + "account.reverseShares.modal.max-size.label": "Max share size", + "account.reverseShares.modal.send-email": "Send email notification", + "account.reverseShares.modal.send-email.description": "Send an email notification when a share is created with this reverse share link.", + "account.reverseShares.modal.max-use.label": "Max uses", + "account.reverseShares.modal.max-use.description": "The maximum amount of times this URL can be used to create a share.", + "account.reverseShare.never-expires": "This reverse share will never expire.", + "account.reverseShare.expires-on": "This reverse share will expire on {expiration}.", + "account.reverseShares.table.no-shares": "No shares created yet", + "account.reverseShares.table.count.singular": "share", + "account.reverseShares.table.count.plural": "shares", + "account.reverseShares.table.shares": "Shares", + "account.reverseShares.table.remaining": "Remaining uses", + "account.reverseShares.table.max-size": "Max share size", + "account.reverseShares.table.expires": "Expires at", + "account.reverseShares.modal.reverse-share-link": "Reverse share link", + "account.reverseShares.modal.delete.title": "Delete reverse share", + "account.reverseShares.modal.delete.description": "Do you really want to delete this reverse share? If you do, the associated shares will be deleted as well.", + // END /account/reverseShares + // /admin + "admin.title": "Administration", + "admin.button.users": "User management", + "admin.button.config": "Configuration", + "admin.version": "Version", + // END /admin + // /admin/users + "admin.users.title": "User management", + "admin.users.table.username": "Username", + "admin.users.table.email": "Email", + "admin.users.table.admin": "Admin", + "admin.users.edit.update.title": "Update user {username}", + "admin.users.edit.update.admin-privileges": "Admin privileges", + "admin.users.edit.update.change-password.title": "Change password", + "admin.users.edit.update.change-password.field": "New password", + "admin.users.edit.update.change-password.button": "Save new password", + "admin.users.edit.update.notify.password.success": "Password changed successfully", + "admin.users.edit.delete.title": "Delete user {username}", + "admin.users.edit.delete.description": "Do you really want to delete this user and all his shares?", + // showCreateUserModal.tsx + "admin.users.modal.create.title": "Create user", + "admin.users.modal.create.username": "Username", + "admin.users.modal.create.email": "Email", + "admin.users.modal.create.password": "Password", + "admin.users.modal.create.manual-password": "Set password manually", + "admin.users.modal.create.manual-password.description": "If not checked, the user will receive an email with a link to set their password.", + "admin.users.modal.create.admin": "Admin privileges", + "admin.users.modal.create.admin.description": "If checked, the user will be able to access the admin panel.", + // END /admin/users + // /upload + "upload.title": "Upload", + "upload.notify.generic-error": "An error occurred while finishing your share.", + "upload.notify.count-failed": "{count} files failed to upload. Trying again.", + // Dropzone.tsx + "upload.dropzone.title": "Upload files", + "upload.dropzone.description": "Drag'n'drop files here to start your share. We can accept only files that are less than {maxSize} in total.", + "upload.dropzone.notify.file-too-big": "Your files exceed the maximum share size of {maxSize}.", + // FileList.tsx + "upload.filelist.name": "Name", + "upload.filelist.size": "Size", + // showCreateUploadModal.tsx + "upload.modal.title": "Create Share", + "upload.modal.link.error.invalid": "Can only contain letters, numbers, underscores, and hyphens", + "upload.modal.link.error.taken": "This link is already in use", + "upload.modal.not-signed-in": "You're not signed in", + "upload.modal.not-signed-in-description": "You will be unable to delete your share manually and view the visitor count.", + "upload.modal.expires.never": "never", + "upload.modal.expires.never-long": "Never Expires", + "upload.modal.link.label": "Link", + "upload.modal.link.placeholder": "myAwesomeShare", + "upload.modal.expires.label": "Expiration", + "upload.modal.expires.minute-singular": "Minute", + "upload.modal.expires.minute-plural": "Minutes", + "upload.modal.expires.hour-singular": "Hour", + "upload.modal.expires.hour-plural": "Hours", + "upload.modal.expires.day-singular": "Day", + "upload.modal.expires.day-plural": "Days", + "upload.modal.expires.week-singular": "Week", + "upload.modal.expires.week-plural": "Weeks", + "upload.modal.expires.month-singular": "Month", + "upload.modal.expires.month-plural": "Months", + "upload.modal.expires.year-singular": "Year", + "upload.modal.expires.year-plural": "Years", + "upload.modal.accordion.description.title": "Description", + "upload.modal.accordion.description.placeholder": "Note for the recipients of this share", + "upload.modal.accordion.email.title": "Email recipients", + "upload.modal.accordion.email.placeholder": "Enter email recipients", + "upload.modal.accordion.email.invalid-email": "Invalid email address", + "upload.modal.accordion.security.title": "Security options", + "upload.modal.accordion.security.password.label": "Password protection", + "upload.modal.accordion.security.password.placeholder": "No password", + "upload.modal.accordion.security.max-views.label": "Maximum views", + "upload.modal.accordion.security.max-views.placeholder": "No limit", + // showCompletedUploadModal.tsx + "upload.modal.completed.never-expires": "This share will never expire.", + "upload.modal.completed.expires-on": "This share will expire on {expiration}.", + "upload.modal.completed.share-ready": "Share ready", + // END /upload + // /share/[id] + "share.title": "Share {shareId}", + "share.description": "Look what I've shared with you!", + "share.error.visitor-limit-exceeded.title": "Visitor limit exceeded", + "share.error.visitor-limit-exceeded.description": "The visitor limit from this share has been exceeded.", + "share.error.removed.title": "Share removed", + "share.error.not-found.title": "Share not found", + "share.error.not-found.description": "The share you're looking for doesn't exist.", + "share.modal.password.title": "Password required", + "share.modal.password.description": "To access this share please enter the password for the share.", + "share.modal.password": "Password", + "share.modal.error.invalid-password": "Invalid password", + "share.button.download-all": "Download all", + "share.notify.download-all-preparing": "The share is preparing. Try again in a few minutes.", + "share.modal.file-link": "File link", + "share.table.name": "Name", + "share.table.size": "Size", + "share.modal.file-preview.error.not-supported.title": "Preview not supported", + "share.modal.file-preview.error.not-supported.description": "A preview for thise file type is unsupported. Please download the file to view it.", + // END /share/[id] + // /admin/config + "admin.config.title": "Configuration", + "admin.config.category.general": "General", + "admin.config.category.share": "Share", + "admin.config.category.email": "Email", + "admin.config.category.smtp": "SMTP", + "admin.config.general.app-name": "App name", + "admin.config.general.app-name.description": "Name of the application", + "admin.config.general.app-url": "App URL", + "admin.config.general.app-url.description": "On which URL Pingvin Share is available", + "admin.config.general.show-home-page": "Show home page", + "admin.config.general.show-home-page.description": "Whether to show the home page", + "admin.config.general.logo": "Logo", + "admin.config.general.logo.description": "Change your logo by uploading a new image. The image must be a PNG and should have the format 1:1.", + "admin.config.general.logo.placeholder": "Pick image", + "admin.config.email.enable-share-email-recipients": "Enable share email recipients", + "admin.config.email.enable-share-email-recipients.description": "Whether to allow emails to share recipients. Only enable this if you have enabled SMTP.", + "admin.config.email.share-recipients-subject": "Share recipients subject", + "admin.config.email.share-recipients-subject.description": "Subject of the email which gets sent to the share recipients.", + "admin.config.email.share-recipients-message": "Share recipients message", + "admin.config.email.share-recipients-message.description": "Message which gets sent to the share recipients. Available variables:\n {creator} - The username of the creator of the share\n {shareUrl} - The URL of the share\n {desc} - The description of the share\n {expires} - The expiration date of the share\n The variables will be replaced with the actual value.", + "admin.config.email.reverse-share-subject": "Reverse share subject", + "admin.config.email.reverse-share-subject.description": "Subject of the email which gets sent when someone created a share with your reverse share link.", + "admin.config.email.reverse-share-message": "Reverse share message", + "admin.config.email.reverse-share-message.description": "Message which gets sent when someone created a share with your reverse share link. {shareUrl} will be replaced with the creator's name and the share URL.", + "admin.config.email.reset-password-subject": "Reset password subject", + "admin.config.email.reset-password-subject.description": "Subject of the email which gets sent when a user requests a password reset.", + "admin.config.email.reset-password-message": "Reset password message", + "admin.config.email.reset-password-message.description": "Message which gets sent when a user requests a password reset. {url} will be replaced with the reset password URL.", + "admin.config.email.invite-subject": "Invite subject", + "admin.config.email.invite-subject.description": "Subject of the email which gets sent when an admin invites a user.", + "admin.config.email.invite-message": "Invite message", + "admin.config.email.invite-message.description": "Message which gets sent when an admin invites a user. {url} will be replaced with the invite URL and {password} with the password.", + "admin.config.share.allow-registration": "Allow registration", + "admin.config.share.allow-registration.description": "Whether registration is allowed", + "admin.config.share.allow-unauthenticated-shares": "Allow unauthenticated shares", + "admin.config.share.allow-unauthenticated-shares.description": "Whether unauthenticated users can create shares", + "admin.config.share.max-size": "Max size", + "admin.config.share.max-size.description": "Maximum share size in bytes", + "admin.config.smtp.enabled": "Enabled", + "admin.config.smtp.enabled.description": "Whether SMTP is enabled. Only set this to true if you entered the host, port, email, user and password of your SMTP server.", + "admin.config.smtp.host": "Host", + "admin.config.smtp.host.description": "Host of the SMTP server", + "admin.config.smtp.port": "Port", + "admin.config.smtp.port.description": "Port of the SMTP server", + "admin.config.smtp.email": "Email", + "admin.config.smtp.email.description": "Email address which the emails get sent from", + "admin.config.smtp.username": "Username", + "admin.config.smtp.username.description": "Username of the SMTP server", + "admin.config.smtp.password": "Password", + "admin.config.smtp.password.description": "Password of the SMTP server", + "admin.config.smtp.button.test": "Send test email", + // 404 + "404.description": "Oops this page doesn't exist.", + "404.button.home": "Bring me back home", + // Common translations + "common.button.save": "Save", + "common.button.create": "Create", + "common.button.submit": "Submit", + "common.button.delete": "Delete", + "common.button.cancel": "Cancel", + "common.button.confirm": "Confirm", + "common.button.disable": "Disable", + "common.button.share": "Share", + "common.button.generate": "Generate", + "common.button.done": "Done", + "common.text.link": "Link", + "common.text.or": "or", + "common.button.go-back": "Go back", + "common.notify.copied": "Your link was copied to the clipboard", + "common.error": "Error", + "common.error.unknown": "An unknown error occurred", + "common.error.invalid-email": "Invalid email address", + "common.error.too-short": "Must be at least {length} characters", + "common.error.too-long": "Must be at most {length} characters", + "common.error.exact-length": "Must be exactly {length} characters", + "common.error.invalid-number": "Must be a number", + "common.error.field-required": "This field is required" +}; \ No newline at end of file diff --git a/frontend/src/i18n/translations/zh-CN.ts b/frontend/src/i18n/translations/zh-CN.ts index f6a72025..1d8b0214 100644 --- a/frontend/src/i18n/translations/zh-CN.ts +++ b/frontend/src/i18n/translations/zh-CN.ts @@ -4,33 +4,24 @@ export default { "navbar.signin": "登录", "navbar.home": "首页", "navbar.signup": "注册", - "navbar.links.shares": "我的共享", "navbar.links.reverse": "预留共享", - "navbar.avatar.account": "我的账户", "navbar.avatar.admin": "管理", "navbar.avatar.signout": "登出", // END navbar - // / "home.title": "自建 文件共享平台!", - - "home.description": - "你真的放心把文件交到第三方文件平台手中吗?", + "home.description": "你真的放心把文件交到第三方文件平台手中吗?", "home.bullet.a.name": "完全自建", "home.bullet.a.description": "轻松使用私有服务器搭建文件共享平台", "home.bullet.b.name": "完全隐私", - "home.bullet.b.description": - "你的文件只属于你!不要将它放到第三方文件平台", + "home.bullet.b.description": "你的文件只属于你!不要将它放到第三方文件平台", "home.bullet.c.name": "完全无限", - "home.bullet.c.description": - "想上传多大都可以,更需要担心的是你的存储卷容量", - + "home.bullet.c.description": "想上传多大都可以,更需要担心的是你的存储卷容量", "home.button.start": "开始使用", "home.button.source": "源代码", // END / - // /auth/signin "signin.title": "欢迎回来", "signin.description": "还没有账户吗?请", @@ -41,11 +32,8 @@ export default { "signin.input.password.placeholder": "请输入密码", "signin.button.submit": "登录", "signIn.notify.totp-required.title": "请继续两步验证", - "signIn.notify.totp-required.description": - "请输入一次性验证码", - + "signIn.notify.totp-required.description": "请输入一次性验证码", // END /auth/signin - // /auth/signup "signup.title": "创建账户", "signup.description": "已经有账户了?请", @@ -55,39 +43,29 @@ export default { "signup.input.email": "电子邮件", "signup.input.email.placeholder": "请输入电子邮件", "signup.button.submit": "注册", - // END /auth/signup - // /auth/reset-password "resetPassword.title": "忘记密码?", "resetPassword.description": "请输入电子邮件接受重置密码邮件", - "resetPassword.notify.success": - "一封包含密码重置地址的邮件已发送到你的邮箱中", + "resetPassword.notify.success": "一封包含密码重置地址的邮件已发送到你的邮箱中", "resetPassword.button.back": "返回登录页面", "resetPassword.text.resetPassword": "重置密码", "resetPassword.text.enterNewPassword": "请输入新密码", "resetPassword.input.password": "新密码", - "resetPassword.notify.passwordReset": - "密码重置成功!", - + "resetPassword.notify.passwordReset": "密码重置成功!", // /account "account.title": "我的账户", - "account.card.info.title": "账户信息", "account.card.info.username": "用户名", "account.card.info.email": "电子邮件", "account.notify.info.success": "账户信息更新成功!", - "account.card.password.title": "密码", "account.card.password.old": "旧密码", "account.card.password.new": "新密码", "account.notify.password.success": "密码更改成功!", - "account.card.security.title": "安全", - "account.card.security.totp.enable.description": - "请输入当前密码开启两步验证", - "account.card.security.totp.disable.description": - "请输入当前密码关闭两步验证", + "account.card.security.totp.enable.description": "请输入当前密码开启两步验证", + "account.card.security.totp.disable.description": "请输入当前密码关闭两步验证", "account.card.security.totp.button.start": "开启", "account.modal.totp.title": "开启两步验证", "account.modal.totp.step1": "第一步:添加验证器 Authenticator", @@ -98,27 +76,21 @@ export default { "account.modal.totp.verify": "确定", "account.notify.totp.disable": "成功关闭两步验证!", "account.notify.totp.enable": "成功开启两步验证!", - "account.card.language.title": "语言", "account.card.color.title": "颜色外观", - // ThemeSwitcher.tsx "account.theme.dark": "暗黑模式", "account.theme.light": "明亮模式", "account.theme.system": "跟随系统", - "account.button.delete": "删除账户", "account.modal.delete.title": "删除账户", - "account.modal.delete.description": - "你真的想删除你的账户,并删除所有的共享吗?", + "account.modal.delete.description": "你真的想删除你的账户,并删除所有的共享吗?", // END /account - // /account/shares "account.shares.title": "我的共享", "account.shares.title.empty": "这里空空如也 👀", "account.shares.description.empty": "你没有创建任何共享", "account.shares.button.create": "创建共享", - "account.shares.info.title": "共享信息", "account.shares.table.id": "ID", "account.shares.table.name": "共享后缀", @@ -127,25 +99,16 @@ export default { "account.shares.table.expiresAt": "过期时间", "account.shares.table.createdAt": "创建时间", "account.shares.table.size": "文件大小", - "account.shares.modal.share-informations": "共享信息", "account.shares.modal.share-link": "共享链接", - "account.shares.modal.delete.title": "删除 {share}", - "account.shares.modal.delete.description": - "你真的想删除这个共享吗?", - + "account.shares.modal.delete.description": "你真的想删除这个共享吗?", // END /account/shares - // /account/reverseShares "account.reverseShares.title": "预留共享", - "account.reverseShares.description": - "预留共享允许你创建一个特定共享链接,以便外部用户以此创建共享", - + "account.reverseShares.description": "预留共享允许你创建一个特定共享链接,以便外部用户以此创建共享", "account.reverseShares.title.empty": "这里空空如也 👀", - "account.reverseShares.description.empty": - "你没有创建任何预留共享", - + "account.reverseShares.description.empty": "你没有创建任何预留共享", // showCreateReverseShareModal.tsx "account.reverseShares.modal.expiration.label": "过期时间", "account.reverseShares.modal.expiration.minute-singular": "1 分钟", @@ -160,20 +123,13 @@ export default { "account.reverseShares.modal.expiration.month-plural": "月", "account.reverseShares.modal.expiration.year-singular": "1 年", "account.reverseShares.modal.expiration.year-plural": "年", - "account.reverseShares.modal.max-size.label": "共享文件上限", - "account.reverseShares.modal.send-email": "发送邮件提醒", - "account.reverseShares.modal.send-email.description": - "当这个预留共享链接被用于共享时,发送邮件提醒", - + "account.reverseShares.modal.send-email.description": "当这个预留共享链接被用于共享时,发送邮件提醒", "account.reverseShares.modal.max-use.label": "最大使用次数", - "account.reverseShares.modal.max-use.description": - "这个预留共享链接可被用于创建共享的最大使用次数", + "account.reverseShares.modal.max-use.description": "这个预留共享链接可被用于创建共享的最大使用次数", "account.reverseShare.never-expires": "这个预留共享永不过期", - "account.reverseShare.expires-on": - "这个预留共享将过期于 {expiration}", - + "account.reverseShare.expires-on": "这个预留共享将过期于 {expiration}", "account.reverseShares.table.no-shares": "当前没有创建任何共享", "account.reverseShares.table.count.singular": "共享", "account.reverseShares.table.count.plural": "共享", @@ -181,88 +137,60 @@ export default { "account.reverseShares.table.remaining": "剩余使用次数", "account.reverseShares.table.max-size": "共享文件上限", "account.reverseShares.table.expires": "过期时间", - "account.reverseShares.modal.reverse-share-link": "预留共享链接", - - "account.reverseShares.modal.delete.title": - "删除预留共享链接", - "account.reverseShares.modal.delete.description": - "你真的想删除此预留共享链接吗?链接下所有关联的共享都将被删除", - + "account.reverseShares.modal.delete.title": "删除预留共享链接", + "account.reverseShares.modal.delete.description": "你真的想删除此预留共享链接吗?链接下所有关联的共享都将被删除", // END /account/reverseShares - // /admin "admin.title": "管理", "admin.button.users": "用户管理", "admin.button.config": "配置管理", "admin.version": "版本", // END /admin - // /admin/users "admin.users.title": "用户管理", "admin.users.table.username": "用户名", "admin.users.table.email": "电子邮件", "admin.users.table.admin": "管理员", - "admin.users.edit.update.title": "更新用户 {username}", "admin.users.edit.update.admin-privileges": "管理员", "admin.users.edit.update.change-password.title": "更改密码", "admin.users.edit.update.change-password.field": "新密码", "admin.users.edit.update.change-password.button": "保存新密码", - "admin.users.edit.update.notify.password.success": - "密码更新成功!", - + "admin.users.edit.update.notify.password.success": "密码更新成功!", "admin.users.edit.delete.title": "删除用户 {username}", - "admin.users.edit.delete.description": - "你真的想删除这个账户,并删除该用户所有的共享吗?", - + "admin.users.edit.delete.description": "你真的想删除这个账户,并删除该用户所有的共享吗?", // showCreateUserModal.tsx "admin.users.modal.create.title": "创建用户", "admin.users.modal.create.username": "用户名", "admin.users.modal.create.email": "电子邮件", "admin.users.modal.create.password": "密码", "admin.users.modal.create.manual-password": "手动设置密码", - "admin.users.modal.create.manual-password.description": - "如果不勾选,用户将会收到一封电子邮件来设置他们的密码", + "admin.users.modal.create.manual-password.description": "如果不勾选,用户将会收到一封电子邮件来设置他们的密码", "admin.users.modal.create.admin": "管理员", - "admin.users.modal.create.admin.description": - "如果勾选,用户将能访问管理员面板", - + "admin.users.modal.create.admin.description": "如果勾选,用户将能访问管理员面板", // END /admin/users - // /upload "upload.title": "上传", - - "upload.notify.generic-error": - "创建共享的过程中发生了错误", + "upload.notify.generic-error": "创建共享的过程中发生了错误", "upload.notify.count-failed": "{count} 文件上传失败,请重试", - // Dropzone.tsx "upload.dropzone.title": "上传文件", - "upload.dropzone.description": - "拖放至此以上传文件,文件大小不能超过上限 {maxSize}", - "upload.dropzone.notify.file-too-big": - "你的文件超过了最大上传限制 {maxSize}", - + "upload.dropzone.description": "拖放至此以上传文件,文件大小不能超过上限 {maxSize}", + "upload.dropzone.notify.file-too-big": "你的文件超过了最大上传限制 {maxSize}", // FileList.tsx "upload.filelist.name": "文件名", "upload.filelist.size": "文件大小", - // showCreateUploadModal.tsx "upload.modal.title": "创建共享", - "upload.modal.link.error.invalid": - "只能包括字母,数字,下划线(_),和横线(-)", + "upload.modal.link.error.invalid": "只能包括字母,数字,下划线(_),和横线(-)", "upload.modal.link.error.taken": "这个链接已经存在了", "upload.modal.not-signed-in": "当前没有登录", - "upload.modal.not-signed-in-description": - "你将不能删除你的共享或查看访问次数", - + "upload.modal.not-signed-in-description": "你将不能删除你的共享或查看访问次数", "upload.modal.expires.never": "永不", "upload.modal.expires.never-long": "永不过期", - "upload.modal.link.label": "共享链接", "upload.modal.link.placeholder": "共享链接", - "upload.modal.expires.label": "过期时间", "upload.modal.expires.minute-singular": "1 分钟", "upload.modal.expires.minute-plural": "分钟", @@ -276,139 +204,96 @@ export default { "upload.modal.expires.month-plural": "月", "upload.modal.expires.year-singular": "1 年", "upload.modal.expires.year-plural": "年", - "upload.modal.accordion.description.title": "描述", - "upload.modal.accordion.description.placeholder": - "共享文件备注信息", - + "upload.modal.accordion.description.placeholder": "共享文件备注信息", "upload.modal.accordion.email.title": "邮件提醒", "upload.modal.accordion.email.placeholder": "收件人电子邮件地址", "upload.modal.accordion.email.invalid-email": "邮件地址不可用", - "upload.modal.accordion.security.title": "安全选项", "upload.modal.accordion.security.password.label": "密码保护", "upload.modal.accordion.security.password.placeholder": "无密码", "upload.modal.accordion.security.max-views.label": "最大访问次数", "upload.modal.accordion.security.max-views.placeholder": "无限", - // showCompletedUploadModal.tsx "upload.modal.completed.never-expires": "这个共享永不过期", - "upload.modal.completed.expires-on": - "这个共享将过期于 {expiration}.", + "upload.modal.completed.expires-on": "这个共享将过期于 {expiration}.", "upload.modal.completed.share-ready": "共享创建完毕", - // END /upload - // /share/[id] "share.title": "共享 {shareId}", "share.description": "瞧瞧我给你共享了些什么!", "share.error.visitor-limit-exceeded.title": "访问次数达到上限", - "share.error.visitor-limit-exceeded.description": - "访问次数达到上限", + "share.error.visitor-limit-exceeded.description": "访问次数达到上限", "share.error.removed.title": "共享已删除", "share.error.not-found.title": "共享未找到", - "share.error.not-found.description": - "共享文件走丢了", - + "share.error.not-found.description": "共享文件走丢了", "share.modal.password.title": "需要密码", - "share.modal.password.description": - "请输入密码来访问此共享", + "share.modal.password.description": "请输入密码来访问此共享", "share.modal.password": "密码", "share.modal.error.invalid-password": "密码错误", - "share.button.download-all": "全部下载", - "share.notify.download-all-preparing": - "该共享正在处理中,请稍等片刻", - + "share.notify.download-all-preparing": "该共享正在处理中,请稍等片刻", "share.modal.file-link": "文件链接", "share.table.name": "文件名", "share.table.size": "文件大小", - "share.modal.file-preview.error.not-supported.title": "该文件类型不支持预览", - "share.modal.file-preview.error.not-supported.description": - "该文件类型不支持预览,请下载后打开查看", - + "share.modal.file-preview.error.not-supported.description": "该文件类型不支持预览,请下载后打开查看", // END /share/[id] - // /admin/config "admin.config.title": "配置管理", "admin.config.category.general": "通用", "admin.config.category.share": "共享", "admin.config.category.email": "电子邮件", "admin.config.category.smtp": "SMTP", - "admin.config.general.app-name": "App 名称", "admin.config.general.app-name.description": "这个 App 的名称", "admin.config.general.app-url": "App 的地址", - "admin.config.general.app-url.description": - "Pingvin Share 的 URL 地址", + "admin.config.general.app-url.description": "Pingvin Share 的 URL 地址", "admin.config.general.show-home-page": "显示首页", - "admin.config.general.show-home-page.description": - "是否显示首页", + "admin.config.general.show-home-page.description": "是否显示首页", "admin.config.general.logo": "Logo", - "admin.config.general.logo.description": - "上传个性化 Logo,图片必须是长宽比 1:1 的 PNG 格式", + "admin.config.general.logo.description": "上传个性化 Logo,图片必须是长宽比 1:1 的 PNG 格式", "admin.config.general.logo.placeholder": "选择图片", - - "admin.config.email.enable-share-email-recipients": - "开启共享邮件通知", - "admin.config.email.enable-share-email-recipients.description": - "是否允许通过邮件通知发送共享信息,只有设置了 SMTP 后该选项才有效", + "admin.config.email.enable-share-email-recipients": "开启共享邮件通知", + "admin.config.email.enable-share-email-recipients.description": "是否允许通过邮件通知发送共享信息,只有设置了 SMTP 后该选项才有效", "admin.config.email.share-recipients-subject": "共享邮件通知主题", - "admin.config.email.share-recipients-subject.description": - "发送共享邮件通知的邮件主题", + "admin.config.email.share-recipients-subject.description": "发送共享邮件通知的邮件主题", "admin.config.email.share-recipients-message": "共享邮件通知内容", - "admin.config.email.share-recipients-message.description": - "发送到接收者的共享邮件通知具体内容。可选的变量有:\n {creator} - 共享创建者\n {shareUrl} - 共享链接\n {desc} - 共享描述\n {expires} - 共享过期时间\n 这些变量会被实际的值所替代", + "admin.config.email.share-recipients-message.description": "发送到接收者的共享邮件通知具体内容。可选的变量有:\n {creator} - 共享创建者\n {shareUrl} - 共享链接\n {desc} - 共享描述\n {expires} - 共享过期时间\n 这些变量会被实际的值所替代", "admin.config.email.reverse-share-subject": "预留共享邮件通知主题", - "admin.config.email.reverse-share-subject.description": - "当有人使用了你的预留共享链接时,发送的预留共享邮件通知主题", + "admin.config.email.reverse-share-subject.description": "当有人使用了你的预留共享链接时,发送的预留共享邮件通知主题", "admin.config.email.reverse-share-message": "预留共享邮件通知内容", - "admin.config.email.reverse-share-message.description": - "当有人使用了你的预留共享链接时,发送的通知内容。{shareUrl} 会被创建者的用户名和共享链接代替", + "admin.config.email.reverse-share-message.description": "当有人使用了你的预留共享链接时,发送的通知内容。{shareUrl} 会被创建者的用户名和共享链接代替", "admin.config.email.reset-password-subject": "重置密码邮件通知主题", - "admin.config.email.reset-password-subject.description": - "当用户发起重置密码时,发送的重置密码邮件通知主题", + "admin.config.email.reset-password-subject.description": "当用户发起重置密码时,发送的重置密码邮件通知主题", "admin.config.email.reset-password-message": "重置密码邮件通知内容", - "admin.config.email.reset-password-message.description": - "当用户发起重置密码时,重置密码邮件通知内容。{url} 会被重置密码链接代替", + "admin.config.email.reset-password-message.description": "当用户发起重置密码时,重置密码邮件通知内容。{url} 会被重置密码链接代替", "admin.config.email.invite-subject": "邀请邮件通知主题", - "admin.config.email.invite-subject.description": - "当管理员邀请用户时,发送的邀请邮件通知主题", + "admin.config.email.invite-subject.description": "当管理员邀请用户时,发送的邀请邮件通知主题", "admin.config.email.invite-message": "邀请邮件通知内容", - "admin.config.email.invite-message.description": - "当管理员邀请用户时,发送的邀请邮件通知内容。{url} 会被邀请链接代替,{password} 会被密码代替", + "admin.config.email.invite-message.description": "当管理员邀请用户时,发送的邀请邮件通知内容。{url} 会被邀请链接代替,{password} 会被密码代替", "admin.config.share.allow-registration": "允许注册", - "admin.config.share.allow-registration.description": - "是否允许注册", - "admin.config.share.allow-unauthenticated-shares": - "是否允许未验证的共享", - "admin.config.share.allow-unauthenticated-shares.description": - "是否允许未验证的用户创建共享", + "admin.config.share.allow-registration.description": "是否允许注册", + "admin.config.share.allow-unauthenticated-shares": "是否允许未验证的共享", + "admin.config.share.allow-unauthenticated-shares.description": "是否允许未验证的用户创建共享", "admin.config.share.max-size": "最大文件上限", "admin.config.share.max-size.description": "最大文件上限,单位 bytes (1GB=1024MB=1048576KB=1073741824bytes)", - "admin.config.smtp.enabled": "启用", - "admin.config.smtp.enabled.description": - "是否开启 SMTP,仅当输入主机名、端口、发送邮箱、用户名和密码后开启", + "admin.config.smtp.enabled.description": "是否开启 SMTP,仅当输入主机名、端口、发送邮箱、用户名和密码后开启", "admin.config.smtp.host": "主机名", "admin.config.smtp.host.description": "SMTP 主机名", "admin.config.smtp.port": "端口", "admin.config.smtp.port.description": "SMTP 主机端口", "admin.config.smtp.email": "发送邮箱", - "admin.config.smtp.email.description": - "发送邮箱地址", + "admin.config.smtp.email.description": "发送邮箱地址", "admin.config.smtp.username": "用户名", "admin.config.smtp.username.description": "SMTP 主机用户名", "admin.config.smtp.password": "密码", "admin.config.smtp.password.description": "SMTP 主机密码", "admin.config.smtp.button.test": "发送测试邮件", - // 404 - "404.title": "404", "404.description": "当前的页面走丢啦", "404.button.home": "返回主页", - // Common translations "common.button.save": "保存", "common.button.create": "创建", @@ -424,7 +309,6 @@ export default { "common.text.or": "或", "common.button.go-back": "返回", "common.notify.copied": "已复制到剪贴板", - "common.error": "错误", "common.error.unknown": "发生未知错误", "common.error.invalid-email": "邮件地址不可用", @@ -432,5 +316,5 @@ export default { "common.error.too-long": "必须不超过 {length} 个字符", "common.error.exact-length": "必须为 {length} 个字符", "common.error.invalid-number": "必须为数字", - "common.error.field-required": "必填项", -}; + "common.error.field-required": "必填项" +}; \ No newline at end of file