From 51c905b92cc90ce93afe74858636eda6e789a50a Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Dec 07 2020 17:40:42 +0000 Subject: 🔀 Merge branch 'development' --- diff --git a/CHANGELOG b/CHANGELOG index 3b70ebd..b537a83 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ Revision history for Lufi ?.??.? ????-??-?? + - 🌐 Update translations + - 🐛 Try to avoid clients constantly hitting /download/XXX 0.05.10 2020-11-28 - 🌐 Update translations diff --git a/lib/Lufi/Controller/Auth.pm b/lib/Lufi/Controller/Auth.pm index 7405694..9913cad 100644 --- a/lib/Lufi/Controller/Auth.pm +++ b/lib/Lufi/Controller/Auth.pm @@ -51,7 +51,12 @@ sub log_out { $c->logout; } } - $c->render(template => 'logout'); + + if ($c->config('logout_custom')) { + return $c->redirect_to($c->config('logout_custom')); + } else { + $c->render(template => 'logout'); + } } 1; diff --git a/lufi.conf.template b/lufi.conf.template index f89d376..ed2f388 100644 --- a/lufi.conf.template +++ b/lufi.conf.template @@ -101,6 +101,10 @@ # optional, no domains allowed by default #allowed_domains => ['http://1.example.com', 'http://2.example.com'], + # String of the URL to be redirected to when accessing /logout + # optional, default is no redirection after logging out + #logout_custom => 'https://sso.example.com/logout?redirect_uri=https%3A%2F%2Fexample.com', + # Define a path to the upload directory, where the uploaded files will be stored # You can define it relative to lufi directory or set an absolute path # Remember that it has to be in a directory writable by Lufi user diff --git a/themes/default/lib/Lufi/I18N/en.po b/themes/default/lib/Lufi/I18N/en.po index a43b895..13b6725 100644 --- a/themes/default/lib/Lufi/I18N/en.po +++ b/themes/default/lib/Lufi/I18N/en.po @@ -41,7 +41,7 @@ msgstr "%1 sent you files" msgid "%1 used your invitation to send you files:" msgstr "%1 used your invitation to send you files:" -#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12 +#: lib/Lufi/Controller/Invitation.pm:160 lib/Lufi/Controller/Invitation.pm:85 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12 msgid "%A %d %B %Y at %T" msgstr "%A %d %B %Y at %T" @@ -118,7 +118,7 @@ msgstr "Click on the following URL to upload files on Lufi:" msgid "Click to open the file browser" msgstr "Click to open the file browser" -#: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80 +#: themes/default/templates/delays.html.ep:42 themes/default/templates/invitations/my_invitations.html.ep:80 msgid "Close" msgstr "Close" @@ -178,7 +178,7 @@ msgstr "Delete selected files" msgid "Deletion link" msgstr "Deletion link" -#: themes/default/templates/delays.html.ep:8 +#: themes/default/templates/delays.html.ep:9 msgid "Don't worry: if a user begins to download the file before the expiration and the download ends after the expiration, he will be able to get the file." msgstr "Don't worry: if a user begins to download the file before the expiration and the download ends after the expiration, he will be able to get the file." @@ -339,7 +339,7 @@ msgstr "How to install the software on my server?" msgid "How to report an illegal file?" msgstr "How to report an illegal file?" -#: themes/default/templates/delays.html.ep:7 +#: themes/default/templates/delays.html.ep:8 msgid "If you choose a delay, the file will be deleted after that delay." msgstr "If you choose a delay, the file will be deleted after that delay." @@ -364,12 +364,12 @@ msgid "Invert selection" msgstr "Invert selection" #. ($i->guest_mail, $url) -#: lib/Lufi/Controller/Invitation.pm:171 +#: lib/Lufi/Controller/Invitation.pm:172 msgid "Invitation resent to %1.
URL: %2" msgstr "Invitation resent to %1.
URL: %2" #. ($invitation->guest_mail, $url) -#: lib/Lufi/Controller/Invitation.pm:87 +#: lib/Lufi/Controller/Invitation.pm:88 msgid "Invitation sent to %1.
URL: %2" msgstr "Invitation sent to %1.
URL: %2" @@ -534,7 +534,7 @@ msgstr "Show zip content" msgid "Signin" msgstr "Signin" -#: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16 +#: lib/Lufi/Controller/Invitation.pm:284 themes/default/templates/invitations/exception.html.ep:16 msgid "Sorry, the invitation doesn’t exist. Are you sure you are on the right URL?" msgstr "Sorry, the invitation doesn’t exist. Are you sure you are on the right URL?" @@ -556,7 +556,7 @@ msgid "Sorry, your invitation has expired or has been deleted. Please contact %1 msgstr "Sorry, your invitation has expired or has been deleted. Please contact %1 to have another invitation." #. ($invitation->ldap_user_mail) -#: lib/Lufi/Controller/Invitation.pm:276 +#: lib/Lufi/Controller/Invitation.pm:277 msgid "The URLs of your files have been sent by email to %1." msgstr "The URLs of your files have been sent by email to %1." @@ -581,7 +581,7 @@ msgid "The email subject can't be empty." msgstr "The email subject can't be empty." #. ($expire_at, $max_expire_at) -#: lib/Lufi/Controller/Invitation.pm:51 +#: lib/Lufi/Controller/Invitation.pm:52 msgid "The expiration delay (%1) is not between 1 and %2 days." msgstr "The expiration delay (%1) is not between 1 and %2 days." @@ -599,17 +599,17 @@ msgid "The following email addresses are not valid: %1" msgstr "The following email addresses are not valid: %1" #. ($guest_mail) -#: lib/Lufi/Controller/Invitation.pm:48 +#: lib/Lufi/Controller/Invitation.pm:49 msgid "The guest email address (%1) is unvalid." msgstr "The guest email address (%1) is unvalid." #. ($i->token, $i->guest_mail) -#: lib/Lufi/Controller/Invitation.pm:150 +#: lib/Lufi/Controller/Invitation.pm:151 msgid "The invitation %1 can’t be resent: %2 has already sent files.
Please create a new invitation." msgstr "The invitation %1 can’t be resent: %2 has already sent files.
Please create a new invitation." #. ($i->token) -#: lib/Lufi/Controller/Invitation.pm:130 +#: lib/Lufi/Controller/Invitation.pm:131 msgid "The invitation %1 has been deleted." msgstr "The invitation %1 has been deleted." @@ -657,7 +657,7 @@ msgstr "This invitation is normally hidden" msgid "This invitation is valid until %1." msgstr "This invitation is valid until %1." -#: themes/default/templates/delays.html.ep:10 +#: themes/default/templates/delays.html.ep:13 msgid "This server sets limitations according to the file size. The expiration delay of your file will be the minimum between what you choose and the following limitations:" msgstr "This server sets limitations according to the file size. The expiration delay of your file will be the minimum between what you choose and the following limitations:" @@ -673,6 +673,10 @@ msgstr "URL" msgid "Unable to copy the link(s) to your clipboard" msgstr "Unable to copy the link(s) to your clipboard" +#: themes/default/templates/partial/render.js.ep:13 +msgid "Unable to download the file: too much unsuccessful attempts to open a websocket. Please, contact the administrator." +msgstr "Unable to download the file: too much unsuccessful attempts to open a websocket. Please, contact the administrator." + #. ($short) #: lib/Lufi/Controller/Files.pm:433 msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage." @@ -773,17 +777,17 @@ msgstr "Your file is too big: %1 (maximum size allowed: %2)" msgid "Your password is not valid. Please refresh the page to retry." msgstr "Your password is not valid. Please refresh the page to retry." -#: themes/default/templates/partial/render.js.ep:13 +#: themes/default/templates/partial/render.js.ep:14 msgid "Zip content:" msgstr "Zip content:" #. (format_bytes($keys[$i]) -#: themes/default/templates/delays.html.ep:20 +#: themes/default/templates/delays.html.ep:24 msgid "between %1 and %2, the file will be kept %3 day(s)." msgstr "between %1 and %2, the file will be kept %3 day(s)." #. (format_bytes($keys[$i]) -#: themes/default/templates/delays.html.ep:22 +#: themes/default/templates/delays.html.ep:26 msgid "between %1 and %2, the file will be kept forever." msgstr "between %1 and %2, the file will be kept forever." @@ -796,12 +800,12 @@ msgid "expires on XXX" msgstr "expires on XXX" #. (format_bytes($keys[$i]) -#: themes/default/templates/delays.html.ep:26 +#: themes/default/templates/delays.html.ep:30 msgid "for %1 and more, the file will be kept %2 day(s)" msgstr "for %1 and more, the file will be kept %2 day(s)" #. (format_bytes($keys[$i]) -#: themes/default/templates/delays.html.ep:28 +#: themes/default/templates/delays.html.ep:32 msgid "for %1 and more, the file will be kept forever." msgstr "for %1 and more, the file will be kept forever." diff --git a/themes/default/lib/Lufi/I18N/es.po b/themes/default/lib/Lufi/I18N/es.po index 03c4e12..7ad3544 100644 --- a/themes/default/lib/Lufi/I18N/es.po +++ b/themes/default/lib/Lufi/I18N/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: 2020-11-15 06:52+0000\n" +"PO-Revision-Date: 2020-12-05 01:52+0000\n" "Last-Translator: Berto Te \n" "Language-Team: Spanish \n" @@ -931,3 +931,9 @@ msgstr "Última etiqueta de esta instancia: %1" #: themes/default/templates/about.html.ep:22 msgid "Latest commit of this instance: %1" msgstr "Última confirmación de esta instancia: %1" + +#: themes/default/templates/partial/render.js.ep:13 +msgid "Unable to download the file: too much unsuccessful attempts to open a websocket. Please, contact the administrator." +msgstr "" +"No se puede descargar el archivo: demasiados intentos fallidos de abrir un " +"\"websocket\". Comuníquese con el administrador." diff --git a/themes/default/lib/Lufi/I18N/fr.po b/themes/default/lib/Lufi/I18N/fr.po index f8b3ed3..73aaf02 100644 --- a/themes/default/lib/Lufi/I18N/fr.po +++ b/themes/default/lib/Lufi/I18N/fr.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: 2020-03-22 11:51+0000\n" -"Last-Translator: Luc Didry \n" +"PO-Revision-Date: 2020-12-07 15:32+0000\n" +"Last-Translator: Framasoft \n" "Language-Team: French \n" "Language: fr\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.11.2\n" +"X-Generator: Weblate 4.1\n" #. ($delay) #. (max_delay) @@ -1014,3 +1014,9 @@ msgstr "" "pouvez l’installer sur votre propre serveur. Veuillez consulter le Wiki pour voir la procédure." + +#: themes/default/templates/partial/render.js.ep:13 +msgid "Unable to download the file: too much unsuccessful attempts to open a websocket. Please, contact the administrator." +msgstr "" +"Impossible de télécharger le fichier : trop de tentatives infructueuses d’" +"ouverture d’une websocket. Veuillez contacter l’administrateur." diff --git a/themes/default/lib/Lufi/I18N/fr_FR.po b/themes/default/lib/Lufi/I18N/fr_FR.po index aa53108..2f6ef90 100644 --- a/themes/default/lib/Lufi/I18N/fr_FR.po +++ b/themes/default/lib/Lufi/I18N/fr_FR.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: 2020-10-17 20:51+0000\n" -"Last-Translator: Numahell \n" +"PO-Revision-Date: 2020-12-07 15:33+0000\n" +"Last-Translator: Framasoft \n" "Language-Team: French (France) \n" "Language: fr_FR\n" @@ -1014,3 +1014,9 @@ msgstr "Dernier tag de cette instance : %1" #: themes/default/templates/about.html.ep:22 msgid "Latest commit of this instance: %1" msgstr "Dernier commit de cette instance : %1" + +#: themes/default/templates/partial/render.js.ep:13 +msgid "Unable to download the file: too much unsuccessful attempts to open a websocket. Please, contact the administrator." +msgstr "" +"Impossible de télécharger le fichier : trop de tentatives infructueuses d’" +"ouverture d’une websocket. Veuillez contacter l’administrateur." diff --git a/themes/default/lib/Lufi/I18N/lufi.pot b/themes/default/lib/Lufi/I18N/lufi.pot index b0dabbd..13f4672 100644 --- a/themes/default/lib/Lufi/I18N/lufi.pot +++ b/themes/default/lib/Lufi/I18N/lufi.pot @@ -41,7 +41,7 @@ msgstr "" msgid "%1 used your invitation to send you files:" msgstr "" -#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12 +#: lib/Lufi/Controller/Invitation.pm:160 lib/Lufi/Controller/Invitation.pm:85 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12 msgid "%A %d %B %Y at %T" msgstr "" @@ -118,7 +118,7 @@ msgstr "" msgid "Click to open the file browser" msgstr "" -#: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80 +#: themes/default/templates/delays.html.ep:42 themes/default/templates/invitations/my_invitations.html.ep:80 msgid "Close" msgstr "" @@ -178,7 +178,7 @@ msgstr "" msgid "Deletion link" msgstr "" -#: themes/default/templates/delays.html.ep:8 +#: themes/default/templates/delays.html.ep:9 msgid "Don't worry: if a user begins to download the file before the expiration and the download ends after the expiration, he will be able to get the file." msgstr "" @@ -339,7 +339,7 @@ msgstr "" msgid "How to report an illegal file?" msgstr "" -#: themes/default/templates/delays.html.ep:7 +#: themes/default/templates/delays.html.ep:8 msgid "If you choose a delay, the file will be deleted after that delay." msgstr "" @@ -364,12 +364,12 @@ msgid "Invert selection" msgstr "" #. ($i->guest_mail, $url) -#: lib/Lufi/Controller/Invitation.pm:171 +#: lib/Lufi/Controller/Invitation.pm:172 msgid "Invitation resent to %1.
URL: %2" msgstr "" #. ($invitation->guest_mail, $url) -#: lib/Lufi/Controller/Invitation.pm:87 +#: lib/Lufi/Controller/Invitation.pm:88 msgid "Invitation sent to %1.
URL: %2" msgstr "" @@ -534,7 +534,7 @@ msgstr "" msgid "Signin" msgstr "" -#: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16 +#: lib/Lufi/Controller/Invitation.pm:284 themes/default/templates/invitations/exception.html.ep:16 msgid "Sorry, the invitation doesn’t exist. Are you sure you are on the right URL?" msgstr "" @@ -556,7 +556,7 @@ msgid "Sorry, your invitation has expired or has been deleted. Please contact %1 msgstr "" #. ($invitation->ldap_user_mail) -#: lib/Lufi/Controller/Invitation.pm:276 +#: lib/Lufi/Controller/Invitation.pm:277 msgid "The URLs of your files have been sent by email to %1." msgstr "" @@ -581,7 +581,7 @@ msgid "The email subject can't be empty." msgstr "" #. ($expire_at, $max_expire_at) -#: lib/Lufi/Controller/Invitation.pm:51 +#: lib/Lufi/Controller/Invitation.pm:52 msgid "The expiration delay (%1) is not between 1 and %2 days." msgstr "" @@ -599,17 +599,17 @@ msgid "The following email addresses are not valid: %1" msgstr "" #. ($guest_mail) -#: lib/Lufi/Controller/Invitation.pm:48 +#: lib/Lufi/Controller/Invitation.pm:49 msgid "The guest email address (%1) is unvalid." msgstr "" #. ($i->token, $i->guest_mail) -#: lib/Lufi/Controller/Invitation.pm:150 +#: lib/Lufi/Controller/Invitation.pm:151 msgid "The invitation %1 can’t be resent: %2 has already sent files.
Please create a new invitation." msgstr "" #. ($i->token) -#: lib/Lufi/Controller/Invitation.pm:130 +#: lib/Lufi/Controller/Invitation.pm:131 msgid "The invitation %1 has been deleted." msgstr "" @@ -657,7 +657,7 @@ msgstr "" msgid "This invitation is valid until %1." msgstr "" -#: themes/default/templates/delays.html.ep:10 +#: themes/default/templates/delays.html.ep:13 msgid "This server sets limitations according to the file size. The expiration delay of your file will be the minimum between what you choose and the following limitations:" msgstr "" @@ -673,6 +673,10 @@ msgstr "" msgid "Unable to copy the link(s) to your clipboard" msgstr "" +#: themes/default/templates/partial/render.js.ep:13 +msgid "Unable to download the file: too much unsuccessful attempts to open a websocket. Please, contact the administrator." +msgstr "" + #. ($short) #: lib/Lufi/Controller/Files.pm:433 msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage." @@ -773,17 +777,17 @@ msgstr "" msgid "Your password is not valid. Please refresh the page to retry." msgstr "" -#: themes/default/templates/partial/render.js.ep:13 +#: themes/default/templates/partial/render.js.ep:14 msgid "Zip content:" msgstr "" #. (format_bytes($keys[$i]) -#: themes/default/templates/delays.html.ep:20 +#: themes/default/templates/delays.html.ep:24 msgid "between %1 and %2, the file will be kept %3 day(s)." msgstr "" #. (format_bytes($keys[$i]) -#: themes/default/templates/delays.html.ep:22 +#: themes/default/templates/delays.html.ep:26 msgid "between %1 and %2, the file will be kept forever." msgstr "" @@ -796,12 +800,12 @@ msgid "expires on XXX" msgstr "" #. (format_bytes($keys[$i]) -#: themes/default/templates/delays.html.ep:26 +#: themes/default/templates/delays.html.ep:30 msgid "for %1 and more, the file will be kept %2 day(s)" msgstr "" #. (format_bytes($keys[$i]) -#: themes/default/templates/delays.html.ep:28 +#: themes/default/templates/delays.html.ep:32 msgid "for %1 and more, the file will be kept forever." msgstr "" diff --git a/themes/default/lib/Lufi/I18N/oc.po b/themes/default/lib/Lufi/I18N/oc.po index 8055a01..bac38b3 100644 --- a/themes/default/lib/Lufi/I18N/oc.po +++ b/themes/default/lib/Lufi/I18N/oc.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: 2020-05-22 08:24+0000\n" +"PO-Revision-Date: 2020-12-05 01:52+0000\n" "Last-Translator: Quentin PAGÈS \n" "Language-Team: Occitan \n" @@ -20,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.11.2\n" +"X-Generator: Weblate 4.1\n" #. ($delay) #. (max_delay) @@ -1011,3 +1011,10 @@ msgstr "Darrièra etiqueta d’aquesta instància : %1" #: themes/default/templates/about.html.ep:22 msgid "Latest commit of this instance: %1" msgstr "Darrièr commit d’aquesta instància : %1" + +#: themes/default/templates/partial/render.js.ep:13 +msgid "Unable to download the file: too much unsuccessful attempts to open a websocket. Please, contact the administrator." +msgstr "" +"Telecargament del fichièr impossible : tròp d’ensages infructuóses de " +"dobertura de connector de tipe websocket. Mercés de contactar " +"l’administrator." diff --git a/themes/default/lib/Lufi/I18N/ru.po b/themes/default/lib/Lufi/I18N/ru.po new file mode 100644 index 0000000..4949a53 --- /dev/null +++ b/themes/default/lib/Lufi/I18N/ru.po @@ -0,0 +1,904 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-11-30 00:52+0000\n" +"Last-Translator: Vadim \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.1\n" + +#. ($delay) +#. (max_delay) +#: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66 +msgid "%1 days" +msgstr "%1 дней" + +#. (stash('ldap_user') +#: themes/default/templates/invitations/invite.mail.ep:2 +msgid "%1 invites you to send him/her files" +msgstr "%1 приглашает тебя отослать ему/ей файлы" + +#. (stash('ldap_user') +#: themes/default/templates/invitations/invite.mail.ep:6 +msgid "%1 invites you to send him/her files through Lufi." +msgstr "%1 приглашает тебя отослать ему/ей файлы через Lufi." + +#. (stash('invitation') +#: themes/default/templates/invitations/notification_files_sent.mail.ep:4 +msgid "%1 sent you files" +msgstr "%1 прислал(а) тебе файлы" + +#. (stash('invitation') +#: themes/default/templates/invitations/notification_files_sent.mail.ep:8 +msgid "%1 used your invitation to send you files:" +msgstr "%1 воспользовался/-лась твоим приглашением, чтобы отправить файлы:" + +#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12 +msgid "%A %d %B %Y at %T" +msgstr "%A %d %B %Y в %T" + +#: themes/default/templates/partial/index.js.ep:28 +msgid "(max size: XXX)" +msgstr "(макс. размер: XXX)" + +#: themes/default/templates/index.html.ep:5 +msgid "1 year" +msgstr "1 год" + +#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65 +msgid "24 hours" +msgstr "24 часа" + +#: themes/default/templates/partial/mail.js.ep:40 +msgid ":" +msgstr ":" + +#: themes/default/templates/render.html.ep:42 +msgid "Abort" +msgstr "Отменить" + +#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86 +msgid "About" +msgstr "О нас" + +#: themes/default/templates/index.html.ep:107 +msgid "Add a password to file(s)" +msgstr "Добавить пароль к файлам" + +#: themes/default/templates/mail.html.ep:16 +msgid "Adding URLs not related to this Lufi instance to the mail body or subject is prohibited." +msgstr "" +"Добавление сторонних ссылок, не имеющих отношения к этому экземпляру Lufi, в " +"теме или теле письма запрещено." + +#: themes/default/templates/partial/invitations.js.ep:3 +msgid "Are you sure you want to delete the selected invitations?" +msgstr "Уверены, что хотите удалить выбранные приглашения?" + +#: themes/default/templates/partial/invitations.js.ep:4 +msgid "Are you sure you want to resend the invitation mail for the selected invitations?" +msgstr "" +"Уверены, что хотите повторно выслать пригласительные письмо для выбранных " +"приглашений?" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Lufi — свободное ПО, и лицензирован по условиям AGPLv3, вы можете установить его " +"у себя на сервере. Взгляните на Вики, там есть " +"описание процедуры." + +#. (stash('nbslices') +#: themes/default/templates/partial/render.js.ep:10 +msgid "Asking for file part XX1 of %1" +msgstr "Запрашиваю часть файла XX1 из %1" + +#: themes/default/templates/about.html.ep:23 +msgid "Back to homepage" +msgstr "Назад на главную" + +#: lib/Lufi/Controller/Mail.pm:25 +msgid "Bad CSRF token!" +msgstr "Неверный CSRF-токен!" + +#: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49 +msgid "Bad CSRF token." +msgstr "Неверный CSRF-токен." + +#: themes/default/templates/partial/render.js.ep:5 +msgid "Click here to refresh the page and restart the download." +msgstr "Нажмите тут, чтобы перезагрузить страницу и по новой начать скачивание." + +#: themes/default/templates/invitations/invite.mail.ep:8 +msgid "Click on the following URL to upload files on Lufi:" +msgstr "Нажмите на этот URL, чтобы загрузить файлы на Lufi:" + +#: themes/default/templates/index.html.ep:126 +msgid "Click to open the file browser" +msgstr "Нажми, чтобы открыть файловый браузер" + +#: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80 +msgid "Close" +msgstr "Закрыть" + +#: themes/default/templates/mail.html.ep:23 +msgid "Comma-separated email addresses" +msgstr "Эл. адреса разделённые запятыми" + +#: themes/default/templates/index.html.ep:140 +msgid "Compressing zip file…" +msgstr "Сжимаю zip-файл…" + +#: themes/default/templates/partial/index.js.ep:15 +msgid "Copy all links to clipboard" +msgstr "Скопировать все ссылки в буфер обмена" + +#: themes/default/templates/partial/index.js.ep:18 +msgid "Copy to clipboard" +msgstr "Скопировать в буфер обмена" + +#: lib/Lufi/Controller/Files.pm:501 +msgid "Could not delete the file. You are not authenticated." +msgstr "Не удалось удалить файл. Вы не залогинены." + +#: lib/Lufi/Controller/Files.pm:483 +msgid "Could not find the file. Are you sure of the URL and the token?" +msgstr "Не получилось найти файл. Вы уверены насчет ссылки и токена?" + +#: lib/Lufi/Controller/Files.pm:394 +msgid "Could not find the file. Are you sure of the URL?" +msgstr "Не получилось найти файл. Вы уверены насчет ссылки?" + +#: themes/default/templates/files.html.ep:29 +msgid "Counter" +msgstr "Счётчик" + +#: themes/default/templates/index.html.ep:100 +msgid "Create a zip archive with the files before uploading?" +msgstr "Сделать zip архив с файлами перед загрузкой?" + +#: themes/default/templates/invitations/my_invitations.html.ep:26 +msgid "Created at" +msgstr "Создано" + +#: themes/default/templates/invitations/my_invitations.html.ep:14 +msgid "Delete" +msgstr "Удалить" + +#: themes/default/templates/files.html.ep:30 themes/default/templates/index.html.ep:90 +msgid "Delete at first download?" +msgstr "Удалить при первом скачивании?" + +#: themes/default/templates/files.html.ep:19 +msgid "Delete selected files" +msgstr "Удалить выбранные файлы" + +#: themes/default/templates/files.html.ep:33 themes/default/templates/partial/index.js.ep:19 +msgid "Deletion link" +msgstr "Ссылка на удаление" + +#: themes/default/templates/delays.html.ep:8 +msgid "Don't worry: if a user begins to download the file before the expiration and the download ends after the expiration, he will be able to get the file." +msgstr "" +"Не волнуйся: если пользователь начнет скачивание до истечения срока, а " +"закончит после, он(а) всё еще получит файл." + +#: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28 +msgid "Download" +msgstr "Скачать" + +#: themes/default/templates/partial/render.js.ep:4 +msgid "Download aborted." +msgstr "Скачивание прервалось." + +#: themes/default/templates/files.html.ep:28 themes/default/templates/partial/index.js.ep:20 +msgid "Download link" +msgstr "Ссылка на скачивание" + +#: themes/default/templates/about.html.ep:10 +msgid "Drag and drop files in the appropriate area or use the traditional way to send files and the files will be chunked, encrypted and sent to the server. You will get two links per file: a download link, that you give to the people you want to share the file with and a deletion link, allowing you to delete the file whenever you want." +msgstr "" +"Перетащите файлы в обозначенную область или выберите их традиционным " +"способом; файлы будут разбиты, зашифрованы и отправлены на сервер. Вы " +"получите две ссылки на файл: ссылку на скачивание, которой можете поделиться " +"с людьми; и ссылку на удаление, по которой сможете удалить файл в любое " +"время." + +#: themes/default/templates/index.html.ep:122 +msgid "Drop files here" +msgstr "Перетащи файлы сюда" + +#: themes/default/templates/invitations/invite.html.ep:40 +msgid "Email address of your guest" +msgstr "Эл. адрес твоего гостя" + +#: themes/default/templates/mail.html.ep:39 +msgid "Email body" +msgstr "Текст письма" + +#: themes/default/templates/mail.html.ep:31 +msgid "Email subject" +msgstr "Тема письма" + +#: themes/default/templates/mail.html.ep:25 themes/default/templates/mail.html.ep:27 +msgid "Emails" +msgstr "Электронные адреса" + +#: themes/default/templates/partial/index.js.ep:22 +msgid "Encrypting part XX1 of XX2" +msgstr "Зашифровываю часть XX1 из XX2" + +#: lib/Lufi/Controller/Files.pm:283 +msgid "Error: the file existed but was deleted." +msgstr "Ошибка: Файл был тут, но его удалили." + +#: lib/Lufi/Controller/Files.pm:363 +msgid "Error: the file has not been sent entirely." +msgstr "Ошибка: Файл не был отправлен в целиком." + +#: lib/Lufi/Controller/Files.pm:373 +msgid "Error: unable to find the file. Are you sure of your URL?" +msgstr "Ошибка: не получилось найти файл. Точно ли ссылка правильная?" + +#: themes/default/templates/partial/index.js.ep:23 +msgid "Expiration:" +msgstr "Истекает:" + +#: themes/default/templates/invitations/my_invitations.html.ep:27 +msgid "Expire at" +msgstr "Истекает" + +#: themes/default/templates/files.html.ep:32 +msgid "Expires at" +msgstr "Истекает" + +#: themes/default/templates/files.html.ep:12 +msgid "Export localStorage data" +msgstr "Экспорт данных из localStorage" + +#: lib/Lufi/Controller/Files.pm:465 +msgid "File deleted" +msgstr "Файл удалён" + +#: themes/default/templates/partial/render.js.ep:9 +msgid "File downloaded" +msgstr "Файл скачан" + +#: themes/default/templates/files.html.ep:27 +msgid "File name" +msgstr "Название файла" + +#: themes/default/templates/partial/index.js.ep:24 +msgid "File uploaded" +msgstr "Файл закачан" + +#: themes/default/templates/invitations/my_invitations.html.ep:61 +msgid "Files" +msgstr "Файлы" + +#: themes/default/templates/index.html.ep:80 +msgid "Files deleted at first download" +msgstr "Удалённые при первом скачивании файлы" + +#: themes/default/templates/invitations/my_invitations.html.ep:28 +msgid "Files sent at" +msgstr "Файлы были отправлены" + +#: themes/default/templates/partial/invitations.js.ep:8 +msgid "Files sent in invitation XX1 by XX2" +msgstr "Файлы, которые были отправлены в приглашении XX1 из XX2" + +#: themes/default/templates/partial/render.js.ep:8 +msgid "Get the file" +msgstr "Скачать файл" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"Взять исходный код из официального репозитория или зеркала на Github" + +#: themes/default/templates/invitations/my_invitations.html.ep:24 +msgid "Guest mail" +msgstr "Эл. адрес гостя" + +#. (ucfirst(stash('invitation') +#: themes/default/templates/invitations/notification_files_sent.mail.ep:6 +msgid "Hello %1," +msgstr "Привет, %1," + +#: themes/default/templates/invitations/invite.mail.ep:4 +msgid "Hello," +msgstr "Привет," + +#: themes/default/templates/partial/mail.js.ep:35 +msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" +msgstr "" +"Привет,\\n" +"\\n" +"Тут парочка файлов, которыми я хотел с тобой поделиться:\\n" + +#: themes/default/templates/mail.html.ep:35 +msgid "Here's some files" +msgstr "Тут несколько файлов" + +#: themes/default/templates/partial/invitations.js.ep:7 +msgid "Hide hidden invitations" +msgstr "Скрыть спрятанные приглашения" + +#: themes/default/templates/partial/index.js.ep:26 +msgid "Hit Enter, then Ctrl+C to copy all the download links" +msgstr "Нажми Enter, затем Ctrl+C, чтобы скопировать все ссылки на скачивание" + +#: themes/default/templates/partial/index.js.ep:25 +msgid "Hit Enter, then Ctrl+C to copy the download link" +msgstr "Нажми Enter, затем Ctrl+C, чтобы скопировать ссылку на скачивание" + +#: themes/default/templates/about.html.ep:9 +msgid "How does it work?" +msgstr "Как это работает?" + +#: themes/default/templates/invitations/invite.html.ep:46 +msgid "How many days would you like the invitation to be valid?" +msgstr "На сколько дней приглашение должно быть действительным?" + +#: themes/default/templates/about.html.ep:16 +msgid "How to install the software on my server?" +msgstr "Как установить эту программу на своем сервере?" + +#: themes/default/templates/about.html.ep:12 +msgid "How to report an illegal file?" +msgstr "Как сообщить о нелегальном файле?" + +#: themes/default/templates/delays.html.ep:7 +msgid "If you choose a delay, the file will be deleted after that delay." +msgstr "Если выберите срок, тогда файл будет удален по его истечению." + +#: themes/default/templates/mail.html.ep:15 +msgid "If you send the mail from this server, the links will be sent to the server, which may lower your privacy protection." +msgstr "" +"Если выслать письма с этого сервера, то ссылки будут отправлены на сервер, " +"что может негативно повлиять на конфиденциальность." + +#: themes/default/templates/files.html.ep:14 +msgid "Import localStorage data" +msgstr "Импортировать данные localStorage" + +#: themes/default/templates/index.html.ep:53 +msgid "Important: more information on delays" +msgstr "Важно: подробнее о сроках" + +#: themes/default/templates/delays.html.ep:5 +msgid "Information about delays" +msgstr "Информация о сроках истечения" + +#: themes/default/templates/files.html.ep:18 themes/default/templates/invitations/my_invitations.html.ep:12 +msgid "Invert selection" +msgstr "Инвертировать выбор" + +#. ($i->guest_mail, $url) +#: lib/Lufi/Controller/Invitation.pm:171 +msgid "Invitation resent to %1.
URL: %2" +msgstr "Приглашение переотправлено на %1.
Ссылка: %2" + +#. ($invitation->guest_mail, $url) +#: lib/Lufi/Controller/Invitation.pm:87 +msgid "Invitation sent to %1.
URL: %2" +msgstr "Приглашение отправлено на %1.
Ссылка: %2" + +#: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69 +msgid "Invite a guest" +msgstr "Пригласить гостя" + +#: themes/default/templates/partial/render.js.ep:6 +msgid "It seems that the key in your URL is incorrect. Please, verify your URL." +msgstr "" +"Похоже, что ключ в твоей ссылке неправилен. Пожалуйста, перепроверь ссылку." + +#: themes/default/templates/index.html.ep:12 +msgid "Javascript is disabled. You won't be able to use Lufi." +msgstr "Javascript отключен. Без него не получится пользоваться Lufi." + +#: themes/default/templates/layouts/default.html.ep:44 themes/default/templates/layouts/default.html.ep:46 themes/default/templates/layouts/default.html.ep:77 themes/default/templates/layouts/default.html.ep:79 +msgid "Language" +msgstr "Язык" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:22 +msgid "Latest commit of this instance: %1" +msgstr "Последний коммит этого экземпляра: %1" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:21 +msgid "Latest tag of this instance: %1" +msgstr "Последний тег этого экземпляра: %1" + +#: themes/default/templates/login.html.ep:15 +msgid "Login" +msgstr "Войти" + +#: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91 +msgid "Logout" +msgstr "Выйти" + +#: themes/default/templates/about.html.ep:4 +msgid "Lufi is a free (as in free speech) file hosting software." +msgstr "" +"Lufi — свободное (как свобода слова) программное обеспечение для хостинга " +"файлов." + +#: themes/default/templates/partial/files.js.ep:12 +msgid "Lufi recently changed its way to store files information.\\n\\nNo files have been found in the new localStorage location but we found files in the old one.\\nDo you want to import those informations?\\n\\nPlease note that this is the only time that we will ask you this." +msgstr "" +"Lufi недавно изменил способ хранения информации о файлах.\\n" +"\\n" +"Никакие файлы не были обнаружены в новом месте внутри localStorage, но зато " +"какие-то нашлись в старом месте.\\n" +"Стоит ли импортировать ту информацию?\\n" +"\\n" +"Обращаем внимание, что больше мы об этом спрашивать не будем." + +#: themes/default/templates/files.html.ep:34 +msgid "Mail" +msgstr "Эл. адрес" + +#: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:67 +msgid "My files" +msgstr "Мои файлы" + +#: themes/default/templates/invitations/my_invitations.html.ep:5 themes/default/templates/layouts/default.html.ep:37 themes/default/templates/layouts/default.html.ep:70 +msgid "My invitations" +msgstr "Мои приглашения" + +#: themes/default/templates/invitations/notification_files_sent.mail.ep:17 +msgid "NB: this list includes the list of files that have already been sent to you." +msgstr "" +"Напоминание: Этот список содержит список файлов, которые уже были тебе " +"отправлены." + +#: themes/default/templates/index.html.ep:115 +msgid "Name of the zip file" +msgstr "Название zip-файла" + +#. (format_bytes($json->{size}) +#: lib/Lufi/Controller/Files.pm:109 +msgid "No enough space available on the server for this file (size: %1)." +msgstr "На сервере недостаточно места для этого файла (размер: %1)." + +#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:29 +msgid "No expiration delay" +msgstr "Без срока истечения" + +#: themes/default/templates/files.html.ep:8 +msgid "Only the files sent with this browser will be listed here. This list is stored in localStorage: if you delete your localStorage data, you'll lose this list." +msgstr "" +"Тут будут показаны только файлы отправленные через этот браузер. Этот список " +"находится в localStorage: если вы очистите данные в localStorage, то список " +"будет удалён." + +#: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 +msgid "Password" +msgstr "Пароль" + +#. (config('contact') +#: themes/default/templates/about.html.ep:13 +msgid "Please contact the administrator: %1" +msgstr "Пожалуйста, свяжитесь с администратором: %1" + +#: themes/default/templates/render.html.ep:33 +msgid "Please wait while we are getting your file. We first need to download and decrypt all parts before you can get it." +msgstr "" +"Пожалуйста, подождите пока мы не получим ваш файл. Нам сначала надо его " +"скачать и дешифровать все его части, перед тем как вы сможете его получить." + +#: lib/Lufi/Controller/Auth.pm:38 +msgid "Please, check your credentials or your right to access this service: unable to authenticate." +msgstr "" +"Пожалуйста, проверь свои данные для входа или права на доступ к сервису: " +"аутентификация не удалась." + +#: themes/default/templates/about.html.ep:5 +msgid "Privacy" +msgstr "Конфиденциальность" + +#: themes/default/templates/files.html.ep:13 +msgid "Purge expired files from localStorage" +msgstr "Очистить localStorage от истекших файлов" + +#: themes/default/templates/invitations/notification_files_sent.mail.ep:20 +msgid "Regards," +msgstr "Всего хорошего," + +#: themes/default/templates/invitations/invite.mail.ep:15 +msgid "Regards." +msgstr "Всего хорошего." + +#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64 +msgid "Report file" +msgstr "Пожаловаться на файл" + +#: themes/default/templates/invitations/my_invitations.html.ep:15 +msgid "Resend invitation mail" +msgstr "Переслать пригласительное письмо" + +#: themes/default/templates/invitations/my_invitations.html.ep:9 +msgid "Rows in purple mean that the invitations have expired." +msgstr "Фиолетовые строки означают, что приглашение истекло." + +#: themes/default/templates/files.html.ep:9 +msgid "Rows in red mean that the files have expired and are no longer available." +msgstr "Красные строки означают, что файлы истекли и более не доступны." + +#: themes/default/templates/partial/index.js.ep:27 +msgid "Send all links by email" +msgstr "Отправить все ссылки по почте" + +#: themes/default/templates/invitations/invite.html.ep:50 +msgid "Send the invitation" +msgstr "Отправить приглашение" + +#: themes/default/templates/mail.html.ep:46 +msgid "Send with this server" +msgstr "Отправить с этого сервера" + +#: themes/default/templates/mail.html.ep:47 +msgid "Send with your own mail software" +msgstr "Отправить через свой почтовый клиент" + +#: themes/default/templates/partial/index.js.ep:30 +msgid "Sending part XX1 of XX2. Please, be patient, the progress bar can take a while to move." +msgstr "" +"Шлю часть XX1 из XX2. Пожалуйста, наберись терпения, индикатор прогресса " +"может долгое время не двигаться." + +#. (url_for('/') +#: themes/default/templates/partial/mail.js.ep:48 +msgid "Share your files in total privacy on %1" +msgstr "Поделись своими файлами в полной секретности на %1" + +#: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9 +msgid "Show hidden invitations" +msgstr "Показать спрятанные приглашения" + +#: themes/default/templates/partial/render.js.ep:12 +msgid "Show zip content" +msgstr "Показать данные в zip" + +#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:73 themes/default/templates/login.html.ep:28 themes/default/templates/logout.html.ep:17 +msgid "Signin" +msgstr "Войти" + +#: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16 +msgid "Sorry, the invitation doesn’t exist. Are you sure you are on the right URL?" +msgstr "Извините, этого приглашения не существует. Вы точно на правильном URL?" + +#: themes/default/templates/index.html.ep:46 +msgid "Sorry, the uploading is currently disabled. Please try again later." +msgstr "Извини, загрузка сейчас отключена. Пожалуйста, попытайся попозже." + +#: lib/Lufi/Controller/Files.pm:82 +msgid "Sorry, uploading is disabled." +msgstr "Извини, загрузка отключена." + +#: themes/default/templates/invitations/exception.html.ep:7 +msgid "Sorry, your invitation has expired or has been deleted." +msgstr "Извини, твое приглашение истекло или было удалено." + +#. ($invit->ldap_user_mail) +#: lib/Lufi/Controller/Files.pm:123 +msgid "Sorry, your invitation has expired or has been deleted. Please contact %1 to have another invitation." +msgstr "" +"Извини, твое приглашение истекло или было удалено. Пожалуйста, попроси %1 " +"выдать новое приглашение." + +#. ($invitation->ldap_user_mail) +#: lib/Lufi/Controller/Invitation.pm:276 +msgid "The URLs of your files have been sent by email to %1." +msgstr "Ссылки на твои файлы были высланы по почте на %1." + +#: themes/default/templates/about.html.ep:7 +msgid "The administrator can only see the file's name, its size and its mimetype (what kind of file it is: video, text, etc.)." +msgstr "" +"Администратор только может видеть название файла, размер и его MIME-тип (" +"какой это тип файла: видео, текст и т.п.)." + +#: lib/Lufi/Controller/Mail.pm:53 +msgid "The body of the mail must contain at least one URL pointing to a file hosted on this instance." +msgstr "" +"Текст письма должен как минимум содержать одну ссылку на файл с этого " +"сервера." + +#: themes/default/templates/partial/files.js.ep:11 +msgid "The data has been successfully imported." +msgstr "Данные успешно импортированы." + +#: lib/Lufi/Controller/Mail.pm:73 +msgid "The email body can't be empty." +msgstr "Текст письма не может быть пуст." + +#: lib/Lufi/Controller/Mail.pm:72 +msgid "The email subject can't be empty." +msgstr "Тема письма не может быть пуста." + +#. ($expire_at, $max_expire_at) +#: lib/Lufi/Controller/Invitation.pm:51 +msgid "The expiration delay (%1) is not between 1 and %2 days." +msgstr "Срок истечения (%1) не между 1 и %2 днями." + +#: lib/Lufi/Controller/Files.pm:462 +msgid "The file has already been deleted" +msgstr "Файл был уже удален" + +#: themes/default/templates/about.html.ep:6 +msgid "The files uploaded on a Lufi instance are encrypted before the upload to the server: the administrator of the server can not see the file's content." +msgstr "" +"Файлы загружаемые на экземпляры Lufi шифруются перед отправкой на сервер: " +"администратор сервера не сможет увидеть данные внутри файла." + +#. (join(', ', @bad) +#: lib/Lufi/Controller/Mail.pm:68 +msgid "The following email addresses are not valid: %1" +msgstr "Следующие эл. адреса недействительны: %1" + +#. ($guest_mail) +#: lib/Lufi/Controller/Invitation.pm:48 +msgid "The guest email address (%1) is unvalid." +msgstr "Эл. адрес гостя (%1) недействителен." + +#. ($i->token, $i->guest_mail) +#: lib/Lufi/Controller/Invitation.pm:150 +msgid "The invitation %1 can’t be resent: %2 has already sent files.
Please create a new invitation." +msgstr "" +"Приглашение на %1 не может быть отправлено: %2 уже отправлял(а) " +"файлы.
Пожалуйста, создай новое приглашение." + +#. ($i->token) +#: lib/Lufi/Controller/Invitation.pm:130 +msgid "The invitation %1 has been deleted." +msgstr "Приглашение %1 было удалено." + +#. (stash('user_mail') +#: themes/default/templates/invitations/invite.html.ep:34 +msgid "The invitation mail will be send from your email address (%1)." +msgstr "Письмо с приглашением будет отправлено с твоего эл. адреса (%1)." + +#: themes/default/templates/partial/index.js.ep:16 +msgid "The link(s) has been copied to your clipboard" +msgstr "Ссылка(-и) скопированы в буфер обмена" + +#. (stash('invitation') +#: themes/default/templates/index.html.ep:30 +msgid "The link(s) of your file(s) will automatically be sent by mail to %1 (%2)" +msgstr "" +"Ссылка(-и) на твой файл(ы) будут автоматически отправлены по почте %1 (%2)" + +#. (stash('ldap_user') +#: themes/default/templates/invitations/invite.mail.ep:11 +msgid "The links of your file(s) will automatically be sent by mail to %1." +msgstr "Ссылка(-и) на твой файл(ы) будут автоматически отправлены по почте %1." + +#: lib/Lufi/Controller/Mail.pm:97 +msgid "The mail has been sent." +msgstr "Письмо было отправлено." + +#: themes/default/templates/about.html.ep:15 +msgid "The original (and only for now) author is Luc Didry." +msgstr "" +"Изначальный (и пока единственный) автор: Luc Didry (Люк Дидри)." + +#: lib/Lufi/Controller/Files.pm:230 +msgid "The server was unable to find the file record to add your file part to. Please, contact the administrator." +msgstr "" +"Сервер не смог найти запись о файле, чтобы добавить твою часть файла. " +"Пожалуйста, свяжитесь с администратором." + +#: lib/Lufi/Controller/Files.pm:289 +msgid "This file has been deactivated by the admins. Contact them to know why." +msgstr "" +"Файл был деактивирован администратором. Свяжитесь с администратором, чтобы " +"узнать почему." + +#: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6 +msgid "This invitation is normally hidden" +msgstr "Это приглашение обычно спрятано" + +#. (stash('expires') +#: themes/default/templates/invitations/invite.mail.ep:13 +msgid "This invitation is valid until %1." +msgstr "Приглашение работает до %1." + +#: themes/default/templates/delays.html.ep:10 +msgid "This server sets limitations according to the file size. The expiration delay of your file will be the minimum between what you choose and the following limitations:" +msgstr "" +"Этот сервер задает ограничения связанные с размером файла. Срок истечения " +"будет тем наименьшим значением, между тем что вы выберете и следующими " +"ограничениями:" + +#: themes/default/templates/invitations/my_invitations.html.ep:16 +msgid "Toggle visibility" +msgstr "Переключить видимость" + +#: themes/default/templates/invitations/my_invitations.html.ep:25 +msgid "URL" +msgstr "URL" + +#: themes/default/templates/partial/index.js.ep:17 +msgid "Unable to copy the link(s) to your clipboard" +msgstr "Не удалось скопировать ссылку(-и) в буфер обмена" + +#. ($short) +#: lib/Lufi/Controller/Files.pm:433 +msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage." +msgstr "" +"Не удалось получить счетчик для %1. Этого файла нет. Запись будет удалена из " +"твоего localStorage." + +#. ($short) +#: lib/Lufi/Controller/Files.pm:423 +msgid "Unable to get counter for %1. The token is invalid." +msgstr "Не удалось получить счетчик для %1. Токен недействителен." + +#. ($short) +#: lib/Lufi/Controller/Files.pm:443 +msgid "Unable to get counter for %1. You are not authenticated." +msgstr "Не удалось получить счетчик для %1. Вы не залогинены." + +#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66 +msgid "Upload files" +msgstr "Загрузить файлы" + +#: themes/default/templates/index.html.ep:145 +msgid "Upload generated zip file" +msgstr "Загрузить сгенерированный zip-файл" + +#: themes/default/templates/files.html.ep:31 +msgid "Uploaded at" +msgstr "Загружено" + +#: themes/default/templates/index.html.ep:153 +msgid "Uploaded files" +msgstr "Загруженные файлы" + +#: themes/default/templates/about.html.ep:20 +msgid "Version" +msgstr "Версия" + +#: themes/default/templates/partial/index.js.ep:31 +msgid "Websocket communication error" +msgstr "Ошибка связи Websocket" + +#: themes/default/templates/about.html.ep:3 +msgid "What is Lufi?" +msgstr "Что такое Lufi?" + +#: themes/default/templates/about.html.ep:14 +msgid "Who wrote this software?" +msgstr "Кто написал эту программу?" + +#: themes/default/templates/partial/index.js.ep:13 +msgid "XXX file has been added to upload queue." +msgstr "XXX файл был добавлен в очередь загрузки." + +#: themes/default/templates/invitations/invite.html.ep:30 +msgid "You can invite someone to send you files through this Lufi instance even if they don’t have an account on it." +msgstr "" +"Вы можете пригласить кого-нибудь прислать вам файлы через этот Lufi-сервер, " +"даже если у них нету здесь аккаунта." + +#: themes/default/templates/about.html.ep:11 +msgid "You can see the list of your files by clicking on the \"My files\" link at the top right of this page." +msgstr "" +"Вы можете просмотреть список своих файлов нажав на кнопку \"Мои файлы\" в " +"правом верхнем углу страницы." + +#: lib/Lufi/Controller/Mail.pm:42 +msgid "You can't add URLs that are not related to this instance." +msgstr "Нельзя добавить ссылки, которые не относятся к этому серверу." + +#: themes/default/templates/about.html.ep:8 +msgid "You don't need to register yourself to upload files but be aware that, for legal reasons, your IP address will be stored when you send a file. Don't panic, this is normally the case for all sites on which you send files." +msgstr "" +"Тут не нужна регистрация (или СМС) для загрузки файлов, но знай, что по " +"правовым причинам при отправке файлов ваш IP-адрес будет сохраняться. Без " +"паники, это обычно верно для всех сайтов, где вы передаете файлы." + +#: themes/default/templates/partial/render.js.ep:11 +msgid "You don't seem to have a key in your URL. You won't be able to decrypt the file. Download canceled." +msgstr "" +"В твоей ссылке вроде нету ключа. Так не удастся расшифровать файл. " +"Скачивание отменено." + +#: themes/default/templates/partial/render.js.ep:7 +msgid "You have attempted to leave this page. The download will be canceled. Are you sure?" +msgstr "Вы попытались уйти со страницы. Скачивание будет отменено. Уверены?" + +#: themes/default/templates/partial/index.js.ep:14 +msgid "You have attempted to leave this page. The upload will be canceled. Are you sure?" +msgstr "Вы попытались уйти со страницы. Загрузка будет отменена. Уверены?" + +#: themes/default/templates/logout.html.ep:14 +msgid "You have been successfully logged out." +msgstr "Вы успешно вышли." + +#: lib/Lufi/Controller/Mail.pm:71 +msgid "You must give email addresses." +msgstr "Вы должны ввести эл. адреса." + +#: themes/default/templates/index.html.ep:38 +msgid "Your browser does not have enough entropy to generate a strong encryption key. Please wait (it's better if you do things on your computer while waiting)." +msgstr "" +"У вашего браузера нехватает энтропии для генерации стойкого ключа " +"шифрования. Пожалуйста, подождите (даже лучше если вы пока займётесь чем-" +"нибудь другим на компьютере)." + +#. (format_bytes($json->{size}) +#: lib/Lufi/Controller/Files.pm:95 +msgid "Your file is too big: %1 (maximum size allowed: %2)" +msgstr "Ваш файл слишком большой: %1 (маскимально разрешённый размер: %2)" + +#: lib/Lufi/Controller/Files.pm:345 +msgid "Your password is not valid. Please refresh the page to retry." +msgstr "" +"Ваш пароль недействителен. Пожалуйста, перезагрузите страницу и попробуйте " +"снова." + +#: themes/default/templates/partial/render.js.ep:13 +msgid "Zip content:" +msgstr "Данные в Zip:" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:20 +msgid "between %1 and %2, the file will be kept %3 day(s)." +msgstr "между %1 и %2, файл будет храниться %3 день(дней)." + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:22 +msgid "between %1 and %2, the file will be kept forever." +msgstr "между %1 и %2, файл будет храниться вечно." + +#: themes/default/templates/partial/mail.js.ep:42 +msgid "deadline: " +msgstr "Срок: " + +#: themes/default/templates/partial/invitations.js.ep:5 +msgid "expires on XXX" +msgstr "Истекает XXX" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:26 +msgid "for %1 and more, the file will be kept %2 day(s)" +msgstr "с %1 и выше, файл будет храниться %2 день(дней)" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:28 +msgid "for %1 and more, the file will be kept forever." +msgstr "с %1 и выше, файл будет храниться вечно." + +#: themes/default/templates/index.html.ep:3 +msgid "no time limit" +msgstr "без ограничения по времени" + +#: themes/default/templates/index.html.ep:124 +msgid "or" +msgstr "или" + +#. ($e->{name}, format_bytes($e->{size}) +#: themes/default/templates/invitations/notification_files_sent.mail.ep:12 +msgid "— %1 (%2), that will expire on %3" +msgstr "— %1 (%2), истечёт %3" diff --git a/themes/default/lib/Lufi/I18N/zh_Hans.po b/themes/default/lib/Lufi/I18N/zh_Hans.po new file mode 100644 index 0000000..6445020 --- /dev/null +++ b/themes/default/lib/Lufi/I18N/zh_Hans.po @@ -0,0 +1,845 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-12-06 15:52+0000\n" +"Last-Translator: zilliu \n" +"Language-Team: Chinese (Simplified) \n" +"Language: zh_Hans\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.1\n" + +#. ($delay) +#. (max_delay) +#: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66 +msgid "%1 days" +msgstr "%1 日" + +#. (stash('ldap_user') +#: themes/default/templates/invitations/invite.mail.ep:2 +msgid "%1 invites you to send him/her files" +msgstr "%1 邀请您给他发送文件" + +#. (stash('ldap_user') +#: themes/default/templates/invitations/invite.mail.ep:6 +msgid "%1 invites you to send him/her files through Lufi." +msgstr "%1 邀请您透过 Lufi 给他发送文件。" + +#. (stash('invitation') +#: themes/default/templates/invitations/notification_files_sent.mail.ep:4 +msgid "%1 sent you files" +msgstr "%1 发送了一个文件给您" + +#. (stash('invitation') +#: themes/default/templates/invitations/notification_files_sent.mail.ep:8 +msgid "%1 used your invitation to send you files:" +msgstr "%1 利用您的邀请发送文件给您:" + +#: lib/Lufi/Controller/Invitation.pm:160 lib/Lufi/Controller/Invitation.pm:85 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12 +msgid "%A %d %B %Y at %T" +msgstr "%A %d %B %Y %T" + +#: themes/default/templates/partial/index.js.ep:28 +msgid "(max size: XXX)" +msgstr "(大小上限:XXX)" + +#: themes/default/templates/index.html.ep:5 +msgid "1 year" +msgstr "1 年" + +#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65 +msgid "24 hours" +msgstr "24 小时" + +#: themes/default/templates/partial/mail.js.ep:40 +msgid ":" +msgstr ":" + +#: themes/default/templates/render.html.ep:42 +msgid "Abort" +msgstr "舍弃" + +#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86 +msgid "About" +msgstr "关于" + +#: themes/default/templates/index.html.ep:107 +msgid "Add a password to file(s)" +msgstr "为文件加设密码" + +#: themes/default/templates/mail.html.ep:16 +msgid "Adding URLs not related to this Lufi instance to the mail body or subject is prohibited." +msgstr "严禁将与此 Lufi 实例无关的网址加入到邮件内文或主旨中。" + +#: themes/default/templates/partial/invitations.js.ep:3 +msgid "Are you sure you want to delete the selected invitations?" +msgstr "您确定要删除选中的邀请吗?" + +#: themes/default/templates/partial/invitations.js.ep:4 +msgid "Are you sure you want to resend the invitation mail for the selected invitations?" +msgstr "您确定要为选中的邀请重新寄出邮件吗?" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Lufi 是基于 AGPLv3 协议的自由软件,您可以将其安装在自己的服务器上。请查看 Wiki 以了解详细信息。" + +#. (stash('nbslices') +#: themes/default/templates/partial/render.js.ep:10 +msgid "Asking for file part XX1 of %1" +msgstr "正在请求文件第 XX1 / %1 部分" + +#: themes/default/templates/about.html.ep:23 +msgid "Back to homepage" +msgstr "回到主页" + +#: lib/Lufi/Controller/Mail.pm:25 +msgid "Bad CSRF token!" +msgstr "损毁的 CSRF 令牌!" + +#: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49 +msgid "Bad CSRF token." +msgstr "损毁的 CSRF 令牌。" + +#: themes/default/templates/partial/render.js.ep:5 +msgid "Click here to refresh the page and restart the download." +msgstr "点一下刷新页面并重新下载。" + +#: themes/default/templates/invitations/invite.mail.ep:8 +msgid "Click on the following URL to upload files on Lufi:" +msgstr "点一下下列网址上传文件到 Lufi:" + +#: themes/default/templates/index.html.ep:126 +msgid "Click to open the file browser" +msgstr "点一下开启文件浏览器" + +#: themes/default/templates/delays.html.ep:42 themes/default/templates/invitations/my_invitations.html.ep:80 +msgid "Close" +msgstr "关闭" + +#: themes/default/templates/mail.html.ep:23 +msgid "Comma-separated email addresses" +msgstr "电子邮件地址,以逗号分隔" + +#: themes/default/templates/index.html.ep:140 +msgid "Compressing zip file…" +msgstr "正在压缩为 zip 文件…" + +#: themes/default/templates/partial/index.js.ep:15 +msgid "Copy all links to clipboard" +msgstr "复制所有链接到剪贴板" + +#: themes/default/templates/partial/index.js.ep:18 +msgid "Copy to clipboard" +msgstr "复制到剪贴板" + +#: lib/Lufi/Controller/Files.pm:501 +msgid "Could not delete the file. You are not authenticated." +msgstr "无法删除文件。您尚未认证。" + +#: lib/Lufi/Controller/Files.pm:483 +msgid "Could not find the file. Are you sure of the URL and the token?" +msgstr "找不到文件。您确定网址及令牌无误吗?" + +#: lib/Lufi/Controller/Files.pm:394 +msgid "Could not find the file. Are you sure of the URL?" +msgstr "找不到文件。您确定网址无误吗?" + +#: themes/default/templates/files.html.ep:29 +msgid "Counter" +msgstr "下载次数" + +#: themes/default/templates/index.html.ep:100 +msgid "Create a zip archive with the files before uploading?" +msgstr "在上传前先将文件压缩成 zip 格式?" + +#: themes/default/templates/invitations/my_invitations.html.ep:26 +msgid "Created at" +msgstr "创建时间" + +#: themes/default/templates/invitations/my_invitations.html.ep:14 +msgid "Delete" +msgstr "删除" + +#: themes/default/templates/files.html.ep:30 themes/default/templates/index.html.ep:90 +msgid "Delete at first download?" +msgstr "第一次下载后删除?" + +#: themes/default/templates/files.html.ep:19 +msgid "Delete selected files" +msgstr "删除选中文件" + +#: themes/default/templates/files.html.ep:33 themes/default/templates/partial/index.js.ep:19 +msgid "Deletion link" +msgstr "删除链接" + +#: themes/default/templates/delays.html.ep:9 +msgid "Don't worry: if a user begins to download the file before the expiration and the download ends after the expiration, he will be able to get the file." +msgstr "毋需担心:如果用户在有效期截至前开始下载,而要一直到有效期过后方能下载完成,他仍然能取得该文件。" + +#: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28 +msgid "Download" +msgstr "下载" + +#: themes/default/templates/partial/render.js.ep:4 +msgid "Download aborted." +msgstr "已舍弃下载。" + +#: themes/default/templates/files.html.ep:28 themes/default/templates/partial/index.js.ep:20 +msgid "Download link" +msgstr "下载链接" + +#: themes/default/templates/about.html.ep:10 +msgid "Drag and drop files in the appropriate area or use the traditional way to send files and the files will be chunked, encrypted and sent to the server. You will get two links per file: a download link, that you give to the people you want to share the file with and a deletion link, allowing you to delete the file whenever you want." +msgstr "" +"透过拖曳或传统方式送出文件,文件会被分块、加密然后发送到服务器。每一个成功送出的文件都会产生一条下载链接和一条删除链接。您可以将下载链接分享给其他人。在浏" +"览器开启下载链接可以下载该文件,而开启删除链接则会删除该文件。" + +#: themes/default/templates/index.html.ep:122 +msgid "Drop files here" +msgstr "拖曳文件到这里" + +#: themes/default/templates/invitations/invite.html.ep:40 +msgid "Email address of your guest" +msgstr "邀请对象的电子邮件地址" + +#: themes/default/templates/mail.html.ep:39 +msgid "Email body" +msgstr "邮件内文" + +#: themes/default/templates/mail.html.ep:31 +msgid "Email subject" +msgstr "邮件主旨" + +#: themes/default/templates/mail.html.ep:25 themes/default/templates/mail.html.ep:27 +msgid "Emails" +msgstr "电子邮件" + +#: themes/default/templates/partial/index.js.ep:22 +msgid "Encrypting part XX1 of XX2" +msgstr "正在加密第 XX1 / XX2 部分" + +#: lib/Lufi/Controller/Files.pm:283 +msgid "Error: the file existed but was deleted." +msgstr "错误:文件存在但已被删除。" + +#: lib/Lufi/Controller/Files.pm:363 +msgid "Error: the file has not been sent entirely." +msgstr "错误:文件尚未发送完全。" + +#: lib/Lufi/Controller/Files.pm:373 +msgid "Error: unable to find the file. Are you sure of your URL?" +msgstr "错误:找不到文件。您确定您的网址无误吗?" + +#: themes/default/templates/partial/index.js.ep:23 +msgid "Expiration:" +msgstr "有效期至:" + +#: themes/default/templates/invitations/my_invitations.html.ep:27 +msgid "Expire at" +msgstr "有效期至" + +#: themes/default/templates/files.html.ep:32 +msgid "Expires at" +msgstr "有效期至" + +#: themes/default/templates/files.html.ep:12 +msgid "Export localStorage data" +msgstr "导出本机存储数据" + +#: lib/Lufi/Controller/Files.pm:465 +msgid "File deleted" +msgstr "文件已删除" + +#: themes/default/templates/partial/render.js.ep:9 +msgid "File downloaded" +msgstr "文件已下载" + +#: themes/default/templates/files.html.ep:27 +msgid "File name" +msgstr "文件名称" + +#: themes/default/templates/partial/index.js.ep:24 +msgid "File uploaded" +msgstr "文件已上传" + +#: themes/default/templates/invitations/my_invitations.html.ep:61 +msgid "Files" +msgstr "文件" + +#: themes/default/templates/index.html.ep:80 +msgid "Files deleted at first download" +msgstr "文件已在第一次下载后删除" + +#: themes/default/templates/invitations/my_invitations.html.ep:28 +msgid "Files sent at" +msgstr "文件发送自" + +#: themes/default/templates/partial/invitations.js.ep:8 +msgid "Files sent in invitation XX1 by XX2" +msgstr "文件由 XX2 透过 XX1 邀请发送" + +#: themes/default/templates/partial/render.js.ep:8 +msgid "Get the file" +msgstr "取得文件" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"在 官方仓库 或其 Github 镜像 上取得原代码" + +#: themes/default/templates/invitations/my_invitations.html.ep:24 +msgid "Guest mail" +msgstr "邀请对象邮件" + +#. (ucfirst(stash('invitation') +#: themes/default/templates/invitations/notification_files_sent.mail.ep:6 +msgid "Hello %1," +msgstr "您好 %1," + +#: themes/default/templates/invitations/invite.mail.ep:4 +msgid "Hello," +msgstr "您好," + +#: themes/default/templates/partial/mail.js.ep:35 +msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" +msgstr "" +"您好,\\n" +"\\n" +"这里有一些文件我希望与您分享:\\n" + +#: themes/default/templates/mail.html.ep:35 +msgid "Here's some files" +msgstr "有文件与您分享" + +#: themes/default/templates/partial/invitations.js.ep:7 +msgid "Hide hidden invitations" +msgstr "不显示隐藏的邀请" + +#: themes/default/templates/partial/index.js.ep:26 +msgid "Hit Enter, then Ctrl+C to copy all the download links" +msgstr "按一下回车键,然后按 Ctrl+C 复制所有下载链接" + +#: themes/default/templates/partial/index.js.ep:25 +msgid "Hit Enter, then Ctrl+C to copy the download link" +msgstr "按一下回车键,然后按 Ctrl+C 复制下载链接" + +#: themes/default/templates/about.html.ep:9 +msgid "How does it work?" +msgstr "它如何运作?" + +#: themes/default/templates/invitations/invite.html.ep:46 +msgid "How many days would you like the invitation to be valid?" +msgstr "您希望邀请的有效期限为多少天?" + +#: themes/default/templates/about.html.ep:16 +msgid "How to install the software on my server?" +msgstr "怎样在我的服务器上安装此软件?" + +#: themes/default/templates/about.html.ep:12 +msgid "How to report an illegal file?" +msgstr "怎样回报非法文件?" + +#: themes/default/templates/delays.html.ep:8 +msgid "If you choose a delay, the file will be deleted after that delay." +msgstr "如果您选择了一个有效期,则文件会在有效期过后删除。" + +#: themes/default/templates/mail.html.ep:15 +msgid "If you send the mail from this server, the links will be sent to the server, which may lower your privacy protection." +msgstr "如果您从这台服务器寄出邮件,那么所有链接都将会被发送到服务器上,这会减弱您的私隐防护。" + +#: themes/default/templates/files.html.ep:14 +msgid "Import localStorage data" +msgstr "导入本机存储数据" + +#: themes/default/templates/index.html.ep:53 +msgid "Important: more information on delays" +msgstr "重要:更多信息关于有效期" + +#: themes/default/templates/delays.html.ep:5 +msgid "Information about delays" +msgstr "有效期详解" + +#: themes/default/templates/files.html.ep:18 themes/default/templates/invitations/my_invitations.html.ep:12 +msgid "Invert selection" +msgstr "反向选取" + +#. ($i->guest_mail, $url) +#: lib/Lufi/Controller/Invitation.pm:172 +msgid "Invitation resent to %1.
URL: %2" +msgstr "重新寄给 %1 的邀请。
网址:%2" + +#. ($invitation->guest_mail, $url) +#: lib/Lufi/Controller/Invitation.pm:88 +msgid "Invitation sent to %1.
URL: %2" +msgstr "寄给 %1 的邀请。
网址:%2" + +#: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69 +msgid "Invite a guest" +msgstr "邀请对象" + +#: themes/default/templates/partial/render.js.ep:6 +msgid "It seems that the key in your URL is incorrect. Please, verify your URL." +msgstr "您网址包含的密钥似乎不正确。请核验您的网址。" + +#: themes/default/templates/index.html.ep:12 +msgid "Javascript is disabled. You won't be able to use Lufi." +msgstr "Javascript 被禁用。您无法使用 Lufi。" + +#: themes/default/templates/layouts/default.html.ep:44 themes/default/templates/layouts/default.html.ep:46 themes/default/templates/layouts/default.html.ep:77 themes/default/templates/layouts/default.html.ep:79 +msgid "Language" +msgstr "语言" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:22 +msgid "Latest commit of this instance: %1" +msgstr "这个实例最近一次提交:%1" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:21 +msgid "Latest tag of this instance: %1" +msgstr "这个实例最近一个标签:%1" + +#: themes/default/templates/login.html.ep:15 +msgid "Login" +msgstr "登录" + +#: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91 +msgid "Logout" +msgstr "注销" + +#: themes/default/templates/about.html.ep:4 +msgid "Lufi is a free (as in free speech) file hosting software." +msgstr "Lufi 是一歀自由的文件托管软件。" + +#: themes/default/templates/partial/files.js.ep:12 +msgid "Lufi recently changed its way to store files information.\\n\\nNo files have been found in the new localStorage location but we found files in the old one.\\nDo you want to import those informations?\\n\\nPlease note that this is the only time that we will ask you this." +msgstr "" +"Lufi 近来变更了保存文件信息的方式。\\n" +"\\n" +"在新的本机存储数据中找不到文件,但在旧的数据中有发现文件。\\n" +"您是否想导入这些信息?\\n" +"\\n" +"请注意这个问题只会问这一次。" + +#: themes/default/templates/files.html.ep:34 +msgid "Mail" +msgstr "寄信" + +#: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:67 +msgid "My files" +msgstr "我的文件" + +#: themes/default/templates/invitations/my_invitations.html.ep:5 themes/default/templates/layouts/default.html.ep:37 themes/default/templates/layouts/default.html.ep:70 +msgid "My invitations" +msgstr "我的邀请" + +#: themes/default/templates/invitations/notification_files_sent.mail.ep:17 +msgid "NB: this list includes the list of files that have already been sent to you." +msgstr "注意:这份列表包含了您送出过的文件。" + +#: themes/default/templates/index.html.ep:115 +msgid "Name of the zip file" +msgstr "Zip 压缩文件的名称" + +#. (format_bytes($json->{size}) +#: lib/Lufi/Controller/Files.pm:109 +msgid "No enough space available on the server for this file (size: %1)." +msgstr "服务器没有足够空间存放此文件(大小:%1)。" + +#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:29 +msgid "No expiration delay" +msgstr "不设有效期" + +#: themes/default/templates/files.html.ep:8 +msgid "Only the files sent with this browser will be listed here. This list is stored in localStorage: if you delete your localStorage data, you'll lose this list." +msgstr "只有经这个浏览器送出的文件才会被列在这里。这份列表仅存于本机:若您删除了本机存储数据,此列表亦会随之而去。" + +#: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 +msgid "Password" +msgstr "密码" + +#. (config('contact') +#: themes/default/templates/about.html.ep:13 +msgid "Please contact the administrator: %1" +msgstr "请联系管理员:%1" + +#: themes/default/templates/render.html.ep:33 +msgid "Please wait while we are getting your file. We first need to download and decrypt all parts before you can get it." +msgstr "请耐心等候,在您收到文件之前我们先要下载并解密文件的所有部分。" + +#: lib/Lufi/Controller/Auth.pm:38 +msgid "Please, check your credentials or your right to access this service: unable to authenticate." +msgstr "请检查您的验证信息或对于此服务的访问权限:无法验证。" + +#: themes/default/templates/about.html.ep:5 +msgid "Privacy" +msgstr "私隐" + +#: themes/default/templates/files.html.ep:13 +msgid "Purge expired files from localStorage" +msgstr "清除本机存储数据中的过期文件" + +#: themes/default/templates/invitations/notification_files_sent.mail.ep:20 +msgid "Regards," +msgstr "保重," + +#: themes/default/templates/invitations/invite.mail.ep:15 +msgid "Regards." +msgstr "保重。" + +#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64 +msgid "Report file" +msgstr "回报文件" + +#: themes/default/templates/invitations/my_invitations.html.ep:15 +msgid "Resend invitation mail" +msgstr "重新寄出邀请邮件" + +#: themes/default/templates/invitations/my_invitations.html.ep:9 +msgid "Rows in purple mean that the invitations have expired." +msgstr "紫色行表示邀请已经过期。" + +#: themes/default/templates/files.html.ep:9 +msgid "Rows in red mean that the files have expired and are no longer available." +msgstr "红色行表示文件已经过期,无法再取得。" + +#: themes/default/templates/partial/index.js.ep:27 +msgid "Send all links by email" +msgstr "透过电子邮件寄出所有链接" + +#: themes/default/templates/invitations/invite.html.ep:50 +msgid "Send the invitation" +msgstr "寄出邀请" + +#: themes/default/templates/mail.html.ep:46 +msgid "Send with this server" +msgstr "透过这台服务器寄出" + +#: themes/default/templates/mail.html.ep:47 +msgid "Send with your own mail software" +msgstr "透过您自己的电邮软件寄出" + +#: themes/default/templates/partial/index.js.ep:30 +msgid "Sending part XX1 of XX2. Please, be patient, the progress bar can take a while to move." +msgstr "正在发送 XX1 / XX2 部分。请耐心等候,进度条可能需要一点时间才会变化。" + +#. (url_for('/') +#: themes/default/templates/partial/mail.js.ep:48 +msgid "Share your files in total privacy on %1" +msgstr "在 %1 私密地分享您的文件" + +#: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9 +msgid "Show hidden invitations" +msgstr "显示隐藏的邀请" + +#: themes/default/templates/partial/render.js.ep:12 +msgid "Show zip content" +msgstr "显示 zip 文件内容" + +#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:73 themes/default/templates/login.html.ep:28 themes/default/templates/logout.html.ep:17 +msgid "Signin" +msgstr "登录" + +#: lib/Lufi/Controller/Invitation.pm:284 themes/default/templates/invitations/exception.html.ep:16 +msgid "Sorry, the invitation doesn’t exist. Are you sure you are on the right URL?" +msgstr "抱歉,邀请不存在。您确定您的网址无误吗?" + +#: themes/default/templates/index.html.ep:46 +msgid "Sorry, the uploading is currently disabled. Please try again later." +msgstr "抱歉,上传暂时被禁用。请稍后再试。" + +#: lib/Lufi/Controller/Files.pm:82 +msgid "Sorry, uploading is disabled." +msgstr "抱歉,上传被禁用。" + +#: themes/default/templates/invitations/exception.html.ep:7 +msgid "Sorry, your invitation has expired or has been deleted." +msgstr "抱歉,您的邀请已过期或是已经被删除。" + +#. ($invit->ldap_user_mail) +#: lib/Lufi/Controller/Files.pm:123 +msgid "Sorry, your invitation has expired or has been deleted. Please contact %1 to have another invitation." +msgstr "抱歉,您的邀请已过期或是已经被删除。请联系 %1 取得另外的邀请。" + +#. ($invitation->ldap_user_mail) +#: lib/Lufi/Controller/Invitation.pm:277 +msgid "The URLs of your files have been sent by email to %1." +msgstr "您的文件的网址已经透过邮件寄给 %1。" + +#: themes/default/templates/about.html.ep:7 +msgid "The administrator can only see the file's name, its size and its mimetype (what kind of file it is: video, text, etc.)." +msgstr "管理员只能够看到文件的名称、大小以及媒体类型(视频、文本文件等)。" + +#: lib/Lufi/Controller/Mail.pm:53 +msgid "The body of the mail must contain at least one URL pointing to a file hosted on this instance." +msgstr "邮件内文至少要包含一个网址指向托管在这个实例的文件。" + +#: themes/default/templates/partial/files.js.ep:11 +msgid "The data has been successfully imported." +msgstr "已成功导入数据。" + +#: lib/Lufi/Controller/Mail.pm:73 +msgid "The email body can't be empty." +msgstr "邮件内文不能为空。" + +#: lib/Lufi/Controller/Mail.pm:72 +msgid "The email subject can't be empty." +msgstr "邮件主旨不能为空。" + +#. ($expire_at, $max_expire_at) +#: lib/Lufi/Controller/Invitation.pm:52 +msgid "The expiration delay (%1) is not between 1 and %2 days." +msgstr "有效期 (%1) 不在 1 至 %2 日之间。" + +#: lib/Lufi/Controller/Files.pm:462 +msgid "The file has already been deleted" +msgstr "文件已经被删除" + +#: themes/default/templates/about.html.ep:6 +msgid "The files uploaded on a Lufi instance are encrypted before the upload to the server: the administrator of the server can not see the file's content." +msgstr "上传到 Lufi 实例的文件在上传之前会先加密:服务器管理员无法查看文件内容。" + +#. (join(', ', @bad) +#: lib/Lufi/Controller/Mail.pm:68 +msgid "The following email addresses are not valid: %1" +msgstr "下列的电子邮件地址无效:%1" + +#. ($guest_mail) +#: lib/Lufi/Controller/Invitation.pm:49 +msgid "The guest email address (%1) is unvalid." +msgstr "邀请对象的电子邮件地址(%1)无效。" + +#. ($i->token, $i->guest_mail) +#: lib/Lufi/Controller/Invitation.pm:151 +msgid "The invitation %1 can’t be resent: %2 has already sent files.
Please create a new invitation." +msgstr "邀请 %1 无法重寄:%2 已经送出文件。
请发一份新邀请。" + +#. ($i->token) +#: lib/Lufi/Controller/Invitation.pm:131 +msgid "The invitation %1 has been deleted." +msgstr "邀请 %1 已经被删除。" + +#. (stash('user_mail') +#: themes/default/templates/invitations/invite.html.ep:34 +msgid "The invitation mail will be send from your email address (%1)." +msgstr "邀请邮件会从您的电子邮件地址(%1)寄出。" + +#: themes/default/templates/partial/index.js.ep:16 +msgid "The link(s) has been copied to your clipboard" +msgstr "链接已经复制到您的剪贴板" + +#. (stash('invitation') +#: themes/default/templates/index.html.ep:30 +msgid "The link(s) of your file(s) will automatically be sent by mail to %1 (%2)" +msgstr "您的文件的链接会自动透过邮件寄给 %1(%2)" + +#. (stash('ldap_user') +#: themes/default/templates/invitations/invite.mail.ep:11 +msgid "The links of your file(s) will automatically be sent by mail to %1." +msgstr "您的文件的链接会自动透过邮件寄给 %1。" + +#: lib/Lufi/Controller/Mail.pm:97 +msgid "The mail has been sent." +msgstr "邮件已寄出。" + +#: themes/default/templates/about.html.ep:15 +msgid "The original (and only for now) author is Luc Didry." +msgstr "" +"最初的作者(亦是至今唯一)为 Luc " +"Didry。" + +#: lib/Lufi/Controller/Files.pm:230 +msgid "The server was unable to find the file record to add your file part to. Please, contact the administrator." +msgstr "服务器找不到相应的文件纪录来加入您的文件块。请联系管理员。" + +#: lib/Lufi/Controller/Files.pm:289 +msgid "This file has been deactivated by the admins. Contact them to know why." +msgstr "这份文件已经被管理员封禁。请联系他们了解详细信息。" + +#: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6 +msgid "This invitation is normally hidden" +msgstr "这个邀请在平时会被隐藏" + +#. (stash('expires') +#: themes/default/templates/invitations/invite.mail.ep:13 +msgid "This invitation is valid until %1." +msgstr "这个邀请会一直有效至 %1。" + +#: themes/default/templates/delays.html.ep:13 +msgid "This server sets limitations according to the file size. The expiration delay of your file will be the minimum between what you choose and the following limitations:" +msgstr "这台服务器根据文件大小设置了不同上限。文件的有效期会被设置为您所选取选项与下列上限间两者之最小值:" + +#: themes/default/templates/invitations/my_invitations.html.ep:16 +msgid "Toggle visibility" +msgstr "开关隐藏邀请" + +#: themes/default/templates/invitations/my_invitations.html.ep:25 +msgid "URL" +msgstr "网址" + +#: themes/default/templates/partial/index.js.ep:17 +msgid "Unable to copy the link(s) to your clipboard" +msgstr "无法复制链接到您的剪贴板" + +#: themes/default/templates/partial/render.js.ep:13 +msgid "Unable to download the file: too much unsuccessful attempts to open a websocket. Please, contact the administrator." +msgstr "无法下载文件:太多不必要的开启 websocket 尝试。请联系管理员。" + +#. ($short) +#: lib/Lufi/Controller/Files.pm:433 +msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage." +msgstr "无法取得 %1 的下载次数。该文件不存在。其将会从您的本机存储数据中移除。" + +#. ($short) +#: lib/Lufi/Controller/Files.pm:423 +msgid "Unable to get counter for %1. The token is invalid." +msgstr "无法取得 %1 的下载次数。令牌无效。" + +#. ($short) +#: lib/Lufi/Controller/Files.pm:443 +msgid "Unable to get counter for %1. You are not authenticated." +msgstr "无法取得 %1 的下载次数。您未验证身份。" + +#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66 +msgid "Upload files" +msgstr "上传文件" + +#: themes/default/templates/index.html.ep:145 +msgid "Upload generated zip file" +msgstr "上传生成的 zip 压缩文件" + +#: themes/default/templates/files.html.ep:31 +msgid "Uploaded at" +msgstr "上传时间" + +#: themes/default/templates/index.html.ep:153 +msgid "Uploaded files" +msgstr "已上传文件" + +#: themes/default/templates/about.html.ep:20 +msgid "Version" +msgstr "版本" + +#: themes/default/templates/partial/index.js.ep:31 +msgid "Websocket communication error" +msgstr "WebSocket 交换错误" + +#: themes/default/templates/about.html.ep:3 +msgid "What is Lufi?" +msgstr "Lufi 是什么?" + +#: themes/default/templates/about.html.ep:14 +msgid "Who wrote this software?" +msgstr "谁写了这个软件?" + +#: themes/default/templates/partial/index.js.ep:13 +msgid "XXX file has been added to upload queue." +msgstr "XXX 文件已经被加入到了上传队列。" + +#: themes/default/templates/invitations/invite.html.ep:30 +msgid "You can invite someone to send you files through this Lufi instance even if they don’t have an account on it." +msgstr "您可以邀请其他人透过这个 Lufi 实例发送文件给您,他们不需要有帐号。" + +#: themes/default/templates/about.html.ep:11 +msgid "You can see the list of your files by clicking on the \"My files\" link at the top right of this page." +msgstr "您可以点一下「我的文件」选项来查看您的文件列表。" + +#: lib/Lufi/Controller/Mail.pm:42 +msgid "You can't add URLs that are not related to this instance." +msgstr "您无法加入与此实例无关的网址。" + +#: themes/default/templates/about.html.ep:8 +msgid "You don't need to register yourself to upload files but be aware that, for legal reasons, your IP address will be stored when you send a file. Don't panic, this is normally the case for all sites on which you send files." +msgstr "您毋须注册即可上传文件,但需要注意,鉴于法律原因,在您发送文件时您的 IP 地址会被记录。毋需担忧,通常所有容许您发送文件的网站都会这样做。" + +#: themes/default/templates/partial/render.js.ep:11 +msgid "You don't seem to have a key in your URL. You won't be able to decrypt the file. Download canceled." +msgstr "您的网址似乎没有包含密钥。您无法解密此文件。下载取消。" + +#: themes/default/templates/partial/render.js.ep:7 +msgid "You have attempted to leave this page. The download will be canceled. Are you sure?" +msgstr "您正试图离开此页面。下载将会被取消。您确定要这样做?" + +#: themes/default/templates/partial/index.js.ep:14 +msgid "You have attempted to leave this page. The upload will be canceled. Are you sure?" +msgstr "您正试图离开此页面。上传将会被取消。您确定要这样做?" + +#: themes/default/templates/logout.html.ep:14 +msgid "You have been successfully logged out." +msgstr "您已成功注销。" + +#: lib/Lufi/Controller/Mail.pm:71 +msgid "You must give email addresses." +msgstr "您必须填写电子邮件地址。" + +#: themes/default/templates/index.html.ep:38 +msgid "Your browser does not have enough entropy to generate a strong encryption key. Please wait (it's better if you do things on your computer while waiting)." +msgstr "您的浏览器没有足够的信息熵来生成高强度密钥。请耐心等候(最好在等待时用电脑做点其它事情)。" + +#. (format_bytes($json->{size}) +#: lib/Lufi/Controller/Files.pm:95 +msgid "Your file is too big: %1 (maximum size allowed: %2)" +msgstr "您的文件太大:%1(大小上限:%2)" + +#: lib/Lufi/Controller/Files.pm:345 +msgid "Your password is not valid. Please refresh the page to retry." +msgstr "您的密码无效。请刷新页面重新尝试。" + +#: themes/default/templates/partial/render.js.ep:14 +msgid "Zip content:" +msgstr "Zip 文件内容:" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:24 +msgid "between %1 and %2, the file will be kept %3 day(s)." +msgstr "在 %1 至 %2 之间,文件会保留 %3 日。" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:26 +msgid "between %1 and %2, the file will be kept forever." +msgstr "在 %1 至 %2 之间,文件会一直保留。" + +#: themes/default/templates/partial/mail.js.ep:42 +msgid "deadline: " +msgstr "有效期至: " + +#: themes/default/templates/partial/invitations.js.ep:5 +msgid "expires on XXX" +msgstr "在 XXX 到期" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:30 +msgid "for %1 and more, the file will be kept %2 day(s)" +msgstr "在 %1 及以上,文件会保留 %2 日" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:32 +msgid "for %1 and more, the file will be kept forever." +msgstr "在 %1 及以上,文件会一直保留。" + +#: themes/default/templates/index.html.ep:3 +msgid "no time limit" +msgstr "没有时间限制" + +#: themes/default/templates/index.html.ep:124 +msgid "or" +msgstr "或" + +#. ($e->{name}, format_bytes($e->{size}) +#: themes/default/templates/invitations/notification_files_sent.mail.ep:12 +msgid "— %1 (%2), that will expire on %3" +msgstr "— %1 (%2), 会在 %3 到期" diff --git a/themes/default/lib/Lufi/I18N/zh_Hant.po b/themes/default/lib/Lufi/I18N/zh_Hant.po index 9da2ca4..75eceef 100644 --- a/themes/default/lib/Lufi/I18N/zh_Hant.po +++ b/themes/default/lib/Lufi/I18N/zh_Hant.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: 2020-11-18 14:52+0000\n" -"Last-Translator: Zijian Liu \n" +"PO-Revision-Date: 2020-12-06 15:52+0000\n" +"Last-Translator: zilliu \n" "Language-Team: Chinese (Traditional) \n" "Language: zh_Hant\n" @@ -106,11 +106,11 @@ msgstr "回到主頁" #: lib/Lufi/Controller/Mail.pm:25 msgid "Bad CSRF token!" -msgstr "" +msgstr "損毀的 CSRF 權杖!" #: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49 msgid "Bad CSRF token." -msgstr "" +msgstr "損毀的 CSRF 權杖。" #: themes/default/templates/partial/render.js.ep:5 msgid "Click here to refresh the page and restart the download." @@ -122,7 +122,7 @@ msgstr "點一下下列網址上傳檔案到 Lufi:" #: themes/default/templates/index.html.ep:126 msgid "Click to open the file browser" -msgstr "點一下開啟檔案瀏覽器" +msgstr "點一下開啓檔案瀏覽器" #: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80 msgid "Close" @@ -150,7 +150,7 @@ msgstr "無法刪除檔案。您尚未認證。" #: lib/Lufi/Controller/Files.pm:483 msgid "Could not find the file. Are you sure of the URL and the token?" -msgstr "" +msgstr "找不到檔案。您確定網址及權杖無誤嗎?" #: lib/Lufi/Controller/Files.pm:394 msgid "Could not find the file. Are you sure of the URL?" @@ -174,7 +174,7 @@ msgstr "刪除" #: themes/default/templates/files.html.ep:30 themes/default/templates/index.html.ep:90 msgid "Delete at first download?" -msgstr "第一次下載之後刪除?" +msgstr "第一次下載後刪除?" #: themes/default/templates/files.html.ep:19 msgid "Delete selected files" @@ -203,6 +203,8 @@ msgstr "下載連結" #: themes/default/templates/about.html.ep:10 msgid "Drag and drop files in the appropriate area or use the traditional way to send files and the files will be chunked, encrypted and sent to the server. You will get two links per file: a download link, that you give to the people you want to share the file with and a deletion link, allowing you to delete the file whenever you want." msgstr "" +"透過拖曳或傳統方式送出檔案,檔案會被分塊、加密然後傳送到伺服器。每一個成功送出的檔案都會產生一條下載連結和一條刪除連結。您可以將下載連結分享給其他人。在瀏" +"覽器開啓下載連結可以下載該檔案,而開啓刪除連結則會刪除該檔案。" #: themes/default/templates/index.html.ep:122 msgid "Drop files here" @@ -210,7 +212,7 @@ msgstr "拖曳檔案到這裏" #: themes/default/templates/invitations/invite.html.ep:40 msgid "Email address of your guest" -msgstr "" +msgstr "邀請對象的電子郵件地址" #: themes/default/templates/mail.html.ep:39 msgid "Email body" @@ -282,11 +284,11 @@ msgstr "檔案已在第一次下載後刪除" #: themes/default/templates/invitations/my_invitations.html.ep:28 msgid "Files sent at" -msgstr "" +msgstr "檔案傳送自" #: themes/default/templates/partial/invitations.js.ep:8 msgid "Files sent in invitation XX1 by XX2" -msgstr "" +msgstr "檔案由 XX2 透過 XX1 邀請傳送" #: themes/default/templates/partial/render.js.ep:8 msgid "Get the file" @@ -301,7 +303,7 @@ msgstr "" #: themes/default/templates/invitations/my_invitations.html.ep:24 msgid "Guest mail" -msgstr "" +msgstr "邀請對象郵件" #. (ucfirst(stash('invitation') #: themes/default/templates/invitations/notification_files_sent.mail.ep:6 @@ -325,7 +327,7 @@ msgstr "有檔案與您分享" #: themes/default/templates/partial/invitations.js.ep:7 msgid "Hide hidden invitations" -msgstr "" +msgstr "不顯示隱藏的邀請" #: themes/default/templates/partial/index.js.ep:26 msgid "Hit Enter, then Ctrl+C to copy all the download links" @@ -353,7 +355,7 @@ msgstr "怎樣回報非法檔案?" #: themes/default/templates/delays.html.ep:7 msgid "If you choose a delay, the file will be deleted after that delay." -msgstr "如果您選取了一個有效期,則檔案會在有效期過後刪除。" +msgstr "如果您選擇了一個有效期,則檔案會在有效期過後刪除。" #: themes/default/templates/mail.html.ep:15 msgid "If you send the mail from this server, the links will be sent to the server, which may lower your privacy protection." @@ -387,11 +389,11 @@ msgstr "寄給 %1 的邀請。
網址:%2" #: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69 msgid "Invite a guest" -msgstr "" +msgstr "邀請對象" #: themes/default/templates/partial/render.js.ep:6 msgid "It seems that the key in your URL is incorrect. Please, verify your URL." -msgstr "" +msgstr "您網址包含的密鑰似乎不正確。請核驗您的網址。" #: themes/default/templates/index.html.ep:12 msgid "Javascript is disabled. You won't be able to use Lufi." @@ -404,12 +406,12 @@ msgstr "語言" #. (sprintf('%s', stash('version') #: themes/default/templates/about.html.ep:22 msgid "Latest commit of this instance: %1" -msgstr "這個實例的最新 commit:%1" +msgstr "這個實例最近一次提交:%1" #. (sprintf('%s', stash('version') #: themes/default/templates/about.html.ep:21 msgid "Latest tag of this instance: %1" -msgstr "這個實例的最新 tag:%1" +msgstr "這個實例最近一個標籤:%1" #: themes/default/templates/login.html.ep:15 msgid "Login" @@ -426,6 +428,12 @@ msgstr "Lufi 是一歀自由的檔案託管軟件。" #: themes/default/templates/partial/files.js.ep:12 msgid "Lufi recently changed its way to store files information.\\n\\nNo files have been found in the new localStorage location but we found files in the old one.\\nDo you want to import those informations?\\n\\nPlease note that this is the only time that we will ask you this." msgstr "" +"Lufi 近來變更了儲存檔案資訊的方式。\\n" +"\\n" +"在新的本機存儲數據中找不到檔案,但在舊的數據中有發現檔案。\\n" +"您是否想匯入這些資訊?\\n" +"\\n" +"請註意這個問題只會問這一次。" #: themes/default/templates/files.html.ep:34 msgid "Mail" @@ -441,7 +449,7 @@ msgstr "我的邀請" #: themes/default/templates/invitations/notification_files_sent.mail.ep:17 msgid "NB: this list includes the list of files that have already been sent to you." -msgstr "" +msgstr "注意:這份列表包含了您送出過的檔案。" #: themes/default/templates/index.html.ep:115 msgid "Name of the zip file" @@ -475,7 +483,7 @@ msgstr "請耐心等候,在您收到檔案之前我們先要下載並解密檔 #: lib/Lufi/Controller/Auth.pm:38 msgid "Please, check your credentials or your right to access this service: unable to authenticate." -msgstr "" +msgstr "請檢查您的驗證資訊或對於此服務的存取權限:無法驗證。" #: themes/default/templates/about.html.ep:5 msgid "Privacy" @@ -536,7 +544,7 @@ msgstr "在 %1 私密地分享您的檔案" #: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9 msgid "Show hidden invitations" -msgstr "" +msgstr "顯示隱藏的邀請" #: themes/default/templates/partial/render.js.ep:12 msgid "Show zip content" @@ -613,7 +621,7 @@ msgstr "下列的電子郵件地址無效:%1" #. ($guest_mail) #: lib/Lufi/Controller/Invitation.pm:48 msgid "The guest email address (%1) is unvalid." -msgstr "" +msgstr "邀請對象的電子郵件地址(%1)無效。" #. ($i->token, $i->guest_mail) #: lib/Lufi/Controller/Invitation.pm:150 @@ -656,7 +664,7 @@ msgstr "" #: lib/Lufi/Controller/Files.pm:230 msgid "The server was unable to find the file record to add your file part to. Please, contact the administrator." -msgstr "" +msgstr "伺服器找不到相應的檔案紀錄來加入您的檔案塊。請聯絡管理員。" #: lib/Lufi/Controller/Files.pm:289 msgid "This file has been deactivated by the admins. Contact them to know why." @@ -664,7 +672,7 @@ msgstr "這份檔案已經被管理員封禁。請聯絡他們瞭解詳細資訊 #: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6 msgid "This invitation is normally hidden" -msgstr "" +msgstr "這個邀請在平時會被隱藏" #. (stash('expires') #: themes/default/templates/invitations/invite.mail.ep:13 @@ -677,7 +685,7 @@ msgstr "這臺伺服器根據檔案大小設定了不同上限。檔案的有效 #: themes/default/templates/invitations/my_invitations.html.ep:16 msgid "Toggle visibility" -msgstr "" +msgstr "開關隱藏邀請" #: themes/default/templates/invitations/my_invitations.html.ep:25 msgid "URL" @@ -690,17 +698,17 @@ msgstr "無法複製連結到您的剪貼簿" #. ($short) #: lib/Lufi/Controller/Files.pm:433 msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage." -msgstr "" +msgstr "無法取得 %1 的下載次數。該檔案不存在。其將會從您的本機存儲數據中移除。" #. ($short) #: lib/Lufi/Controller/Files.pm:423 msgid "Unable to get counter for %1. The token is invalid." -msgstr "" +msgstr "無法取得 %1 的下載次數。權杖無效。" #. ($short) #: lib/Lufi/Controller/Files.pm:443 msgid "Unable to get counter for %1. You are not authenticated." -msgstr "" +msgstr "無法取得 %1 的下載次數。您未驗證身份。" #: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66 msgid "Upload files" @@ -744,7 +752,7 @@ msgstr "您可以邀請其他人透過這個 Lufi 實例傳送檔案給您,他 #: themes/default/templates/about.html.ep:11 msgid "You can see the list of your files by clicking on the \"My files\" link at the top right of this page." -msgstr "" +msgstr "您可以點一下「我的檔案」選項來檢視您的檔案列表。" #: lib/Lufi/Controller/Mail.pm:42 msgid "You can't add URLs that are not related to this instance." @@ -752,11 +760,11 @@ msgstr "您無法加入與此實例無關的網址。" #: themes/default/templates/about.html.ep:8 msgid "You don't need to register yourself to upload files but be aware that, for legal reasons, your IP address will be stored when you send a file. Don't panic, this is normally the case for all sites on which you send files." -msgstr "您毋須註冊便可上傳檔案,但需要註意,鑑於法律原因,在您傳送檔案時您的 IP 地址會被記錄。毋需驚慌,通常所有讓您傳送檔案的網站都會這樣做。" +msgstr "您毋須註冊即可上傳檔案,但需要註意,鑑於法律原因,在您傳送檔案時您的 IP 地址會被記錄。毋需擔憂,通常所有容許您傳送檔案的網站都會這樣做。" #: themes/default/templates/partial/render.js.ep:11 msgid "You don't seem to have a key in your URL. You won't be able to decrypt the file. Download canceled." -msgstr "" +msgstr "您的網址似乎没有包含密鑰。您無法解密此檔案。下載取消。" #: themes/default/templates/partial/render.js.ep:7 msgid "You have attempted to leave this page. The download will be canceled. Are you sure?" @@ -776,7 +784,7 @@ msgstr "您必須填寫電子郵件地址。" #: themes/default/templates/index.html.ep:38 msgid "Your browser does not have enough entropy to generate a strong encryption key. Please wait (it's better if you do things on your computer while waiting)." -msgstr "" +msgstr "您的瀏覽器没有足夠的資訊熵來生成高強度密鑰。請耐心等候(最好在等待時用電腦做點其它事情)。" #. (format_bytes($json->{size}) #: lib/Lufi/Controller/Files.pm:95 @@ -831,3 +839,7 @@ msgstr "或" #: themes/default/templates/invitations/notification_files_sent.mail.ep:12 msgid "— %1 (%2), that will expire on %3" msgstr "— %1 (%2), 會在 %3 到期" + +#: themes/default/templates/partial/render.js.ep:13 +msgid "Unable to download the file: too much unsuccessful attempts to open a websocket. Please, contact the administrator." +msgstr "無法下載檔案:太多不必要的開啓 websocket 嘗試。請聯絡管理員。" diff --git a/themes/default/public/js/lufi-down.js b/themes/default/public/js/lufi-down.js index 54d0c87..b117adf 100644 --- a/themes/default/public/js/lufi-down.js +++ b/themes/default/public/js/lufi-down.js @@ -47,6 +47,7 @@ function addAlert(msg) { // Spawn WebSocket function spawnWebsocket(pa) { + console.log('Spawning websocket…'); var ws = new WebSocket(ws_url); ws.onopen = function() { console.log('Connection is established!'); @@ -62,8 +63,13 @@ function spawnWebsocket(pa) { ws.onclose = function() { console.log('Connection is closed'); if (!window.completed) { - console.log('Connection closed. Retrying to get slice '+pa); - window.ws = spawnWebsocket(pa); + window.attempts++; + if (window.attempts < 10) { + console.log('Connection closed. Retrying to get slice '+pa); + window.ws = spawnWebsocket(pa); + } else { + alert(i18n.tooMuchAttempts); + } } } ws.onmessage = function(e) { @@ -71,6 +77,9 @@ function spawnWebsocket(pa) { var json = res.shift(); var data = JSON.parse(json); + // Reset counter since we succeded to open a websocket and got a message + window.attempts = 0; + if (data.msg !== undefined) { addAlert(data.msg); console.log(data.msg); @@ -78,6 +87,7 @@ function spawnWebsocket(pa) { $('.file-abort').addClass('hide'); } window.onbeforeunload = null; + window.attempts = 10; } else { console.log('Getting slice '+(data.part + 1)+' of '+data.total); var slice = JSON.parse(res.shift()); @@ -203,8 +213,13 @@ function spawnWebsocket(pa) { } } ws.onerror = function() { - console.log('Error. Retrying to get slice '+pa); - window.ws = spawnWebsocket(pa); + window.attempts++; + if (window.attempts < 10) { + console.log('Error. Retrying to get slice '+pa); + window.ws = spawnWebsocket(pa); + } else { + alert(i18n.tooMuchAttempts); + } } return ws; } @@ -225,6 +240,7 @@ $(document).ready(function(){ window.a = new Array(); window.key = pageKey(); window.completed = false; + window.attempts = 0; if (key !== '=') { var go = true; diff --git a/themes/default/templates/partial/render.js.ep b/themes/default/templates/partial/render.js.ep index 4ca1131..beb8dc1 100644 --- a/themes/default/templates/partial/render.js.ep +++ b/themes/default/templates/partial/render.js.ep @@ -1,14 +1,15 @@ % # vim:set sts=4 sw=4 ts=4 ft=javascript expandtab: var ws_url = '<%= url_for('download')->to_abs().stash('file') %>'; var i18n = { - aborted1: '<%= l('Download aborted.') %>', - aborted2: '<%= l('Click here to refresh the page and restart the download.') %>', - badkey: '<%= l('It seems that the key in your URL is incorrect. Please, verify your URL.') %>', - confirmExit: '<%= l('You have attempted to leave this page. The download will be canceled. Are you sure?') %>', - download: '<%= l('Get the file') %>', - fileDownloaded: '<%= l('File downloaded') %>', - loading: '<%= l('Asking for file part XX1 of %1', stash('nbslices')) %>', - nokey: '<%= l('You don\'t seem to have a key in your URL. You won\'t be able to decrypt the file. Download canceled.') %>', - showZipContent: '<%= l('Show zip content') %>', - zipContent: '<%= l('Zip content:') %>' + aborted1: '<%= l('Download aborted.') %>', + aborted2: '<%= l('Click here to refresh the page and restart the download.') %>', + badkey: '<%= l('It seems that the key in your URL is incorrect. Please, verify your URL.') %>', + confirmExit: '<%= l('You have attempted to leave this page. The download will be canceled. Are you sure?') %>', + download: '<%= l('Get the file') %>', + fileDownloaded: '<%= l('File downloaded') %>', + loading: '<%= l('Asking for file part XX1 of %1', stash('nbslices')) %>', + nokey: '<%= l('You don\'t seem to have a key in your URL. You won\'t be able to decrypt the file. Download canceled.') %>', + showZipContent: '<%= l('Show zip content') %>', + tooMuchAttempts: '<%= l('Unable to download the file: too much unsuccessful attempts to open a websocket. Please, contact the administrator.') %>', + zipContent: '<%= l('Zip content:') %>' }