diff --git a/app/api.js b/app/api.js
index f32b5abf..f9a5d5f0 100644
--- a/app/api.js
+++ b/app/api.js
@@ -216,6 +216,7 @@ function download(id, keychain, onprogress, canceller) {
const blob = new Blob([xhr.response]);
resolve(blob);
});
+
xhr.addEventListener('progress', function(event) {
if (event.lengthComputable && event.target.status === 200) {
onprogress([event.loaded, event.total]);
@@ -224,8 +225,10 @@ function download(id, keychain, onprogress, canceller) {
const auth = await keychain.authHeader();
xhr.open('get', `/api/download/${id}`);
xhr.setRequestHeader('Authorization', auth);
+ xhr.setRequestHeader('Connection', 'close');
xhr.responseType = 'blob';
xhr.send();
+ onprogress([0, 1]);
});
}
diff --git a/app/main.js b/app/main.js
index 353afa1a..d6ee9125 100644
--- a/app/main.js
+++ b/app/main.js
@@ -4,6 +4,7 @@ import app from './routes';
import locale from '../common/locales';
import fileManager from './fileManager';
import dragManager from './dragManager';
+import pasteManager from './pasteManager';
import { canHasSend } from './utils';
import storage from './storage';
import metrics from './metrics';
@@ -48,5 +49,6 @@ app.use(metrics);
app.use(fileManager);
app.use(dragManager);
app.use(experiments);
+app.use(pasteManager);
app.mount('body');
diff --git a/app/pasteManager.js b/app/pasteManager.js
new file mode 100644
index 00000000..7fcaa1dc
--- /dev/null
+++ b/app/pasteManager.js
@@ -0,0 +1,25 @@
+/* global MAXFILESIZE */
+import { bytes } from './utils';
+
+export default function(state, emitter) {
+ window.addEventListener('paste', event => {
+ if (state.route !== '/' || state.uploading) return;
+
+ for (const item of event.clipboardData.items) {
+ if (!item.type.includes('image')) continue;
+
+ const file = item.getAsFile();
+
+ if (!file) continue; // Sometimes null
+
+ if (file.size > MAXFILESIZE) {
+ // eslint-disable-next-line no-alert
+ alert(state.translate('fileTooBig', { size: bytes(MAXFILESIZE) }));
+ continue;
+ }
+
+ emitter.emit('upload', { file, type: 'paste' });
+ return; // return here since only one file is allowed to be uploaded at a time
+ }
+ });
+}
diff --git a/app/templates/file/index.js b/app/templates/file/index.js
index 2d7d8937..0d83c1ad 100644
--- a/app/templates/file/index.js
+++ b/app/templates/file/index.js
@@ -19,7 +19,8 @@ module.exports = function(file, state, emit) {
onclick=${copyClick}
src="${assets.get('copy-16.svg')}"
class="cursor--pointer"
- title="${state.translate('copyUrlHover')}">
+ title="${state.translate('copyUrlHover')}"
+ tabindex="0">
${state.translate('copiedUrl')}
@@ -33,7 +34,8 @@ module.exports = function(file, state, emit) {
onclick=${showPopup}
src="${assets.get('close-16.svg')}"
class="cursor--pointer"
- title="${state.translate('deleteButtonHover')}">
+ title="${state.translate('deleteButtonHover')}"
+ tabindex="0">
${deletePopup(
state.translate('deletePopupText'),
state.translate('deletePopupYes'),
diff --git a/app/templates/footer/index.js b/app/templates/footer/index.js
index a0ad4de5..cfe94c55 100644
--- a/app/templates/footer/index.js
+++ b/app/templates/footer/index.js
@@ -6,8 +6,7 @@ module.exports = function(state) {
+ class="legalSection__link">
+ class="socialSection__link">
+ class="socialSection__link">
+downloadCount =
+ { $num ->
[one] 1 endirmə
*[other] { $num } endirmə
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 saat
*[other] { $num } saat
}
diff --git a/public/locales/bn-BD/send.ftl b/public/locales/bn-BD/send.ftl
index e2f88d0d..91c6581b 100644
--- a/public/locales/bn-BD/send.ftl
+++ b/public/locales/bn-BD/send.ftl
@@ -1,4 +1,4 @@
-// Firefox Send is a brand name and should not be localized.
+# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteSubtitle = ওয়েব গবেষণা
siteFeedback = প্রতিক্রিয়া
@@ -15,11 +15,13 @@ uploadingPageCancel = আপলোড বাতিল করুন
uploadCancelNotification = আপনার অাপলোড বাতিল করা হয়েছে।
uploadSuccessConfirmHeader = পাঠানোর জন্য প্রস্তুত
uploadSvgAlt = আপলোড
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 ডাউনলোড
*[other] { $num } ডাউনলোডগুলো
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 ঘন্টা
*[other] { $num } ঘন্টা
}
@@ -27,20 +29,20 @@ copyUrlFormButton = ক্লিপবোর্ডে কপি করুন
copiedUrl = কপি করা হয়েছে!
deleteFileButton = ফাইল মুছুন
sendAnotherFileLink = আরেকটি ফাইল পাঠান
-// Alternative text used on the download link/button (indicates an action).
+# Alternative text used on the download link/button (indicates an action).
downloadAltText = ডাউনলোড
downloadsFileList = ডাউনলোডগুলো
-// Used as header in a column indicating the amount of time left before a
-// download link expires (e.g. "10h 5m")
+# Used as header in a column indicating the amount of time left before a
+# download link expires (e.g. "10h 5m")
timeFileList = সময়
-// Used as header in a column indicating the number of times a file has been
-// downloaded
+# Used as header in a column indicating the number of times a file has been
+# downloaded
downloadFileName = ডাউনলোড { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = পাসওয়ার্ড লিখুন
unlockInputPlaceholder = পাসওয়ার্ড
unlockButtonLabel = আনলক করুন
-// Text and title used on the download link/button (indicates an action).
+# Text and title used on the download link/button (indicates an action).
downloadButtonLabel = ডাউনলোড
downloadNotification = আপনার ডাউনলোড সম্পন্ন হয়েছে।
downloadFinish = ডাউনলোড সম্পন্ন
@@ -53,7 +55,7 @@ updateFirefox = Firefox হালনাগাদ করুন
downloadFirefoxButtonSub = বিনামূল্যে ডাউনলোড
uploadedFile = ফাইল
copyFileList = URL অনুলিপি করুন
-// expiryFileList is used as a column header
+# expiryFileList is used as a column header
expiryFileList = মেয়াদোত্তীর্ণ তারিখ
deleteFileList = মুছে ফেলুন
nevermindButton = কিছু মনে করবেন না
@@ -64,7 +66,7 @@ deletePopupCancel = বাতিল
deleteButtonHover = মুছে ফেলুন
copyUrlHover = URL অনুলিপি করুন
footerLinkLegal = আইনগত
-// Test Pilot is a proper name and should not be localized.
+# Test Pilot is a proper name and should not be localized.
footerLinkAbout = Test Pilot পরিচিতি
footerLinkPrivacy = গোপনীয়তা
footerLinkTerms = শর্তাবলী
diff --git a/public/locales/bs/send.ftl b/public/locales/bs/send.ftl
index b7f4f735..f6c9557e 100644
--- a/public/locales/bs/send.ftl
+++ b/public/locales/bs/send.ftl
@@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Spremno za slanje
uploadSvgAlt = Otpremi
uploadSuccessTimingHeader = Veza prema vašoj datoteci će isteći nakon prvog preuzimanja ili za 24 sata.
expireInfo = Link za vašu datoteku će isteći nakon { $downloadCount } ili { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 preuzimanja
[few] { $num } preuzimanja
*[other] { $num } preuzimanja
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 sat
[few] { $num } sata
*[other] { $num } sati
diff --git a/public/locales/cak/send.ftl b/public/locales/cak/send.ftl
index de35cd84..108d5eed 100644
--- a/public/locales/cak/send.ftl
+++ b/public/locales/cak/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Ütz chik richin Nitaq
uploadSvgAlt = Tijotob'äx
uploadSuccessTimingHeader = Ri ruximonel yakb'äl xtik'is ruq'ijul toq xtiqasäx jumul o pa 24 ramaj.
expireInfo = Ri ruximöy ayakb'al xtik'is ruq'ijul chi rij ri { $downloadCount } o { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 qasanïk
*[other] { $num } taq qasanïk
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 ramaj
*[other] { $num } taq ramaj
}
diff --git a/public/locales/cs/send.ftl b/public/locales/cs/send.ftl
index ab869ef0..b838058f 100644
--- a/public/locales/cs/send.ftl
+++ b/public/locales/cs/send.ftl
@@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Připraveno k odeslání
uploadSvgAlt = Nahrát
uploadSuccessTimingHeader = Platnost odkazu na váš soubor vyprší po jeho prvním stažení, nebo po 24 hodinách.
expireInfo = Platnost odkazu na váš soubor vyprší po { $downloadCount } nebo { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] jednom stažení
[few] { $num } staženích
*[other] { $num } staženích
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] jedné hodině
[few] { $num } hodinách
*[other] { $num } hodinách
@@ -88,8 +90,8 @@ expiryFileList = Platnost vyprší za
deleteFileList = Smazat
nevermindButton = Nevadí
legalHeader = Podmínky a ochrana soukromí
-legalNoticeTestPilot = Firefox Send je ve fázi experimentu projektu Test Pilot a platí tak pro něj stejné Podmínky používání a
Zásady ochrany soukromí. Více o tomto experimentu a sbíraných datech se dozvíte
zde.
-legalNoticeMozilla = Používání webové služby Firefox Send se řídí
Zásadami ochrany soukromí a
Podmínkami používání webových stránek Mozilly.
+legalNoticeTestPilot = Firefox Send je ve fázi experimentu projektu Test Pilot a platí tak pro něj stejné
Podmínky používání a
Zásady ochrany osobních údajů. Více o tomto experimentu a sbíraných datech se dozvíte
zde.
+legalNoticeMozilla = Používání webové služby Firefox Send se řídí
Zásadami ochrany osobních údajů a
Podmínkami používání webových stránek Mozilly.
deletePopupText = Smazat tento soubor?
deletePopupYes = Ano
deletePopupCancel = Zrušit
diff --git a/public/locales/dsb/send.ftl b/public/locales/dsb/send.ftl
index c8475c84..19dd29cd 100644
--- a/public/locales/dsb/send.ftl
+++ b/public/locales/dsb/send.ftl
@@ -26,13 +26,15 @@ uploadSuccessConfirmHeader = Gótowy za słanje
uploadSvgAlt = Nagraś
uploadSuccessTimingHeader = Wótkaz k wašej dataji pó 1 ześěgnjenju abo 24 góźinach spadnjo.
expireInfo = Wótkaz k wašej dataji pó { $downloadCount } abo { $timespan } spadnjo.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 ześěgnjenje
[two] { $num } ześěgnjeni
[few] { $num } ześěgnjenja
*[other] { $num } ześěgnjenjow
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 góźina
[two] { $num } góźinje
[few] { $num } góźiny
diff --git a/public/locales/el/send.ftl b/public/locales/el/send.ftl
index 98ae627e..2a939968 100644
--- a/public/locales/el/send.ftl
+++ b/public/locales/el/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Έτοιμο για αποστολή
uploadSvgAlt = Μεταφόρτωση
uploadSuccessTimingHeader = Ο σύνδεσμος του αρχείου σας θα λήξει έπειτα από 1 λήψη ή 24 ώρες.
expireInfo = Ο σύνδεσμος για το αρχείο σας θα λήξει μετά από { $downloadCount } ή { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 λήψη
*[other] { $num } λήψεις
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 ώρα
*[other] { $num } ώρες
}
diff --git a/public/locales/en-CA/send.ftl b/public/locales/en-CA/send.ftl
new file mode 100644
index 00000000..ce9a3b46
--- /dev/null
+++ b/public/locales/en-CA/send.ftl
@@ -0,0 +1,121 @@
+# Firefox Send is a brand name and should not be localized.
+title = Firefox Send
+siteSubtitle = web experiment
+siteFeedback = Feedback
+uploadPageHeader = Private, Encrypted File Sharing
+uploadPageExplainer = Send files through a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever.
+uploadPageLearnMore = Learn more
+uploadPageDropMessage = Drop your file here to start uploading
+uploadPageSizeMessage = For the most reliable operation, it’s best to keep your file under 1GB
+uploadPageBrowseButton = Select a file on your computer
+uploadPageBrowseButton1 = Select a file to upload
+uploadPageMultipleFilesAlert = Uploading multiple files or a folder is currently not supported.
+uploadPageBrowseButtonTitle = Upload file
+uploadingPageProgress = Uploading { $filename } ({ $size })
+importingFile = Importing…
+verifyingFile = Verifying…
+encryptingFile = Encrypting…
+decryptingFile = Decrypting…
+notifyUploadDone = Your upload has finished.
+uploadingPageMessage = Once your file uploads you will be able to set expiry options.
+uploadingPageCancel = Cancel upload
+uploadCancelNotification = Your upload was cancelled.
+uploadingPageLargeFileMessage = This file is large and may take a while to upload. Sit tight!
+uploadingFileNotification = Notify me when the upload is complete.
+uploadSuccessConfirmHeader = Ready to Send
+uploadSvgAlt = Upload
+uploadSuccessTimingHeader = The link to your file will expire after 1 download or in 24 hours.
+expireInfo = The link to your file will expire after { $downloadCount } or { $timespan }.
+downloadCount =
+ { $num ->
+ [one] 1 download
+ *[other] { $num } downloads
+ }
+timespanHours =
+ { $num ->
+ [one] 1 hour
+ *[other] { $num } hours
+ }
+copyUrlFormLabelWithName = Copy and share the link to send your file: { $filename }
+copyUrlFormButton = Copy to clipboard
+copiedUrl = Copied!
+deleteFileButton = Delete file
+sendAnotherFileLink = Send another file
+# Alternative text used on the download link/button (indicates an action).
+downloadAltText = Download
+downloadsFileList = Downloads
+# Used as header in a column indicating the amount of time left before a
+# download link expires (e.g. "10h 5m")
+timeFileList = Time
+# Used as header in a column indicating the number of times a file has been
+# downloaded
+downloadFileName = Download { $filename }
+downloadFileSize = ({ $size })
+unlockInputLabel = Enter Password
+unlockInputPlaceholder = Password
+unlockButtonLabel = Unlock
+downloadFileTitle = Download Encrypted File
+# Firefox Send is a brand name and should not be localized.
+downloadMessage = Your friend is sending you a file with Firefox Send, a service that allows you to share files with a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever.
+# Text and title used on the download link/button (indicates an action).
+downloadButtonLabel = Download
+downloadNotification = Your download has completed.
+downloadFinish = Download Complete
+# This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
+fileSizeProgress = ({ $partialSize } of { $totalSize })
+# Firefox Send is a brand name and should not be localized.
+sendYourFilesLink = Try Firefox Send
+downloadingPageProgress = Downloading { $filename } ({ $size })
+downloadingPageMessage = Please leave this tab open while we fetch your file and decrypt it.
+errorAltText = Upload error
+errorPageHeader = Something went wrong!
+errorPageMessage = There has been an error uploading the file.
+errorPageLink = Send another file
+fileTooBig = That file is too big to upload. It should be less than { $size }.
+linkExpiredAlt = Link expired
+expiredPageHeader = This link has expired or never existed in the first place!
+notSupportedHeader = Your browser is not supported.
+# Firefox Send is a brand name and should not be localized.
+notSupportedDetail = Unfortunately this browser does not support the web technology that powers Firefox Send. You’ll need to try another browser. We recommend Firefox!
+notSupportedLink = Why is my browser not supported?
+notSupportedOutdatedDetail = Unfortunately this version of Firefox does not support the web technology that powers Firefox Send. You’ll need to update your browser.
+updateFirefox = Update Firefox
+downloadFirefoxButtonSub = Free Download
+uploadedFile = File
+copyFileList = Copy URL
+# expiryFileList is used as a column header
+expiryFileList = Expires In
+deleteFileList = Delete
+nevermindButton = Never mind
+legalHeader = Terms & Privacy
+legalNoticeTestPilot = Firefox Send is currently a Test Pilot experiment, and subject to the Test Pilot
Terms of Service and
Privacy Notice. You can learn more about this experiment and its data collection
here.
+legalNoticeMozilla = Use of the Firefox Send website is also subject to Mozilla’s
Websites Privacy Notice and
Websites Terms of Use.
+deletePopupText = Delete this file?
+deletePopupYes = Yes
+deletePopupCancel = Cancel
+deleteButtonHover = Delete
+copyUrlHover = Copy URL
+footerLinkLegal = Legal
+# Test Pilot is a proper name and should not be localized.
+footerLinkAbout = About Test Pilot
+footerLinkPrivacy = Privacy
+footerLinkTerms = Terms
+footerLinkCookies = Cookies
+requirePasswordCheckbox = Require a password to download this file
+addPasswordButton = Add password
+changePasswordButton = Change
+passwordTryAgain = Incorrect password. Try again.
+reportIPInfringement = Report IP Infringement
+javascriptRequired = Firefox Send requires JavaScript
+whyJavascript = Why does Firefox Send require JavaScript?
+enableJavascript = Please enable JavaScript and try again.
+# A short representation of a countdown timer containing the number of hours and minutes remaining as digits, example "13h 47m"
+expiresHoursMinutes = { $hours }h { $minutes }m
+# A short representation of a countdown timer containing the number of minutes remaining as digits, example "56m"
+expiresMinutes = { $minutes }m
+# A short status message shown when a password is successfully set
+passwordIsSet = Password set
+# A short status message shown when the user enters a long password
+maxPasswordLength = Maximum password length: { $length }
+# A short status message shown when there was an error setting the password
+passwordSetError = This password could not be set
diff --git a/public/locales/es-AR/send.ftl b/public/locales/es-AR/send.ftl
index fcb4c401..c7fab7ea 100644
--- a/public/locales/es-AR/send.ftl
+++ b/public/locales/es-AR/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace al archivo expirará después de 1 descarga o en 24 horas.
expireInfo = El enlace a tu archivo expirará después de { $downloadCount } o { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 descarga
*[other] { $num } descargas
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 hora
*[other] { $num } horas
}
diff --git a/public/locales/es-CL/send.ftl b/public/locales/es-CL/send.ftl
index c21feef3..7080f209 100644
--- a/public/locales/es-CL/send.ftl
+++ b/public/locales/es-CL/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace a tu archivo expirará tras 1 descarga o en 24 horas.
expireInfo = El enlace a tu archivo expirará después de { $downloadCount } o { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 descarga
*[other] { $num } descargas
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 hora
*[other] { $num } horas
}
diff --git a/public/locales/es-ES/send.ftl b/public/locales/es-ES/send.ftl
index 6f956372..bf289015 100644
--- a/public/locales/es-ES/send.ftl
+++ b/public/locales/es-ES/send.ftl
@@ -12,7 +12,7 @@ uploadPageBrowseButton1 = Seleccionar un archivo para subir
uploadPageMultipleFilesAlert = Aún no se pueden subir varios archivos o una carpeta.
uploadPageBrowseButtonTitle = Subir archivo
uploadingPageProgress = Subiendo { $filename } ({ $size })
-importingFile = Imporando...
+importingFile = Importando...
verifyingFile = Comprobando...
encryptingFile = Encriptando...
decryptingFile = Desencriptando...
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace al archivo caducará tras descargarlo una vez o en 24 horas.
expireInfo = El enlace al archivo expirará tras { $downloadCount } o { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 descarga
*[other] { $num } descargas
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 hora
*[other] { $num } horas
}
@@ -86,7 +88,7 @@ expiryFileList = Caduca en
deleteFileList = Eliminar
nevermindButton = Da igual
legalHeader = Términos y privacidad
-legalNoticeTestPilot = Firefox Send sigue siendo un experimento de Test Pilot y está sujero a las
Condiciones del servicio y al
Aviso de privacidad de Test Pilot.
+legalNoticeTestPilot = Firefox Send sigue siendo un experimento de Test Pilot y está sujero a las
Condiciones del servicio y al
Aviso de privacidad de Test Pilot.
Aquí podrás descubrir más sobre este experimento y su recopilación de datos.
legalNoticeMozilla = El uso de la página de Firefox Send también está sujeto al
Aviso de privacidad sobre sitios web y a los
Términos de uso sobre sitios web.
deletePopupText = ¿Eliminar el archivo?
deletePopupYes = Sí
diff --git a/public/locales/et/send.ftl b/public/locales/et/send.ftl
index 2b4f2b13..cffe4f8d 100644
--- a/public/locales/et/send.ftl
+++ b/public/locales/et/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Saatmiseks valmis
uploadSvgAlt = Laadi üles
uploadSuccessTimingHeader = Link failile aegub pärast 1. allalaadimist või 24 tunni möödumisel.
expireInfo = Link failile aegub peale { $downloadCount } või { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] üht allalaadimist
*[other] { $num } allalaadimist
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] üht tundi
*[other] { $num } tundi
}
diff --git a/public/locales/fa/send.ftl b/public/locales/fa/send.ftl
index b2dfbf82..38669dff 100644
--- a/public/locales/fa/send.ftl
+++ b/public/locales/fa/send.ftl
@@ -26,6 +26,16 @@ uploadSuccessConfirmHeader = آماده برای ارسال
uploadSvgAlt = بارگذاری
uploadSuccessTimingHeader = پیوند به پرونده شما بعد از ۱ بار دانلود یا ۲۴ ساعت حذف خواهد شد.
expireInfo = این پیوند به فایل شما پس از { $downloadCount } یا { $timespan } منقضی خواهد شد.
+downloadCount =
+ { $num ->
+ [one] ۱ بارگیری
+ *[other] { $num } بارگیری
+ }
+timespanHours =
+ { $num ->
+ [one] ۱ ساعت
+ *[other] { $num } ساعت
+ }
copyUrlFormLabelWithName = برای ارسال پرونده پیوند آن را رونوشت و به اشتراک بگذارید: { $filename }
copyUrlFormButton = رونوشت به کلیپبورد
copiedUrl = رونوشت شد!
diff --git a/public/locales/fy-NL/send.ftl b/public/locales/fy-NL/send.ftl
index d1d5715e..8571bf32 100644
--- a/public/locales/fy-NL/send.ftl
+++ b/public/locales/fy-NL/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Ree om te ferstjoeren
uploadSvgAlt = Oplaad
uploadSuccessTimingHeader = De keppeling nei jo bestân sil nei 1 download ferrinne of nei 24 oeren.
expireInfo = De keppeling nei jo bestân sil nei { $downloadCount } of { $timespan } ferrinne.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 download
*[other] { $num } downloads
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 oer
*[other] { $num } oeren
}
diff --git a/public/locales/he/send.ftl b/public/locales/he/send.ftl
index ffecb54f..433627cd 100644
--- a/public/locales/he/send.ftl
+++ b/public/locales/he/send.ftl
@@ -1,4 +1,4 @@
-// Firefox Send is a brand name and should not be localized.
+# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteSubtitle = ניסוי אינטרנט
siteFeedback = משוב
@@ -21,7 +21,7 @@ uploadCancelNotification = ההעלאה שלך בוטלה.
uploadingPageLargeFileMessage = קובץ זה גדול ועלול לקחת זמן להעלות אותו. סבלנות!
uploadingFileNotification = נא להודיע לי כשתסתיים ההעלאה.
uploadSuccessConfirmHeader = מוכן לשליחה
-uploadSvgAlt
+uploadSvgAlt =
.alt = להעלות
uploadSuccessTimingHeader = הקישור לקובץ שלך יפוג אחרי הורדה אחת או בעוד 24 שעות.
copyUrlFormLabelWithName = ניתן להעתיק ולשתף את הקישור כדי לשלוח את הקובץ שלך: { $filename }
@@ -30,32 +30,34 @@ deleteFileButton = מחיקת קובץ
.title = מחיקת קובץ
sendAnotherFileLink = שליחת קובץ נוסף
.title = שליחת קובץ נוסף
-// Alternative text used on the download link/button (indicates an action).
-downloadAltText
+# Alternative text used on the download link/button (indicates an action).
+downloadAltText =
.alt = הורדה
+# Used as header in a column indicating the number of times a file has been
+# downloaded
downloadFileName = ההורדה נכשלה
downloadFileSize = ({ $size })
-// Text and title used on the download link/button (indicates an action).
+# Text and title used on the download link/button (indicates an action).
downloadButtonLabel = הורדה
.title = הורדה
downloadNotification = ההורדה הושלמה.
downloadFinish = ההורדה הושלמה
-// This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
+# This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } מתוך { $totalSize })
downloadingPageProgress = בהורדה: { $filename } ({ $size })
-errorAltText
+errorAltText =
.alt = תקלה בהעלאה
errorPageHeader = משהו השתבש!
errorPageLink = שליחת קובץ נוסף
fileTooBig = הקובץ הזה גדול מידי להעלאה. עליו להיות קטן מ־{ $size }.
-linkExpiredAlt
+linkExpiredAlt =
.alt = קישור פג
notSupportedHeader = הדפדפן שלך לא נתמך.
notSupportedLink = למה אין תמיכה בדפדפן שלי?
downloadFirefoxButtonSub = הורדה בחינם
uploadedFile = קובץ
copyFileList = העתקת כתובת
-// expiryFileList is used as a column header
+# expiryFileList is used as a column header
expiryFileList = יפוג בעוד
deleteFileList = מחיקה
nevermindButton = לא משנה
@@ -63,9 +65,9 @@ legalHeader = תנאי שירות ופרטיות
deletePopupText = למחוק דף זה?
deletePopupYes = כן
deletePopupCancel = ביטול
-deleteButtonHover
+deleteButtonHover =
.title = מחיקה
-copyUrlHover
+copyUrlHover =
.title = העתקת קישור
footerLinkLegal = מידע משפטי
footerLinkPrivacy = פרטיות
diff --git a/public/locales/hsb/send.ftl b/public/locales/hsb/send.ftl
index 125cafca..f053aa7e 100644
--- a/public/locales/hsb/send.ftl
+++ b/public/locales/hsb/send.ftl
@@ -26,13 +26,15 @@ uploadSuccessConfirmHeader = Hotowy za słanje
uploadSvgAlt = Nahrać
uploadSuccessTimingHeader = Wotkaz k wašej dataji po 1 sćehnjenju abo 24 hodźinach spadnje.
expireInfo = Wotkaz k wašej dataji po { $downloadCount } abo { $timespan } spadnje.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 sćehnjenje
[two] { $num } sćehnjeni
[few] { $num } sćehnjenja
*[other] { $num } sćehnjenjow
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 hodźina
[two] { $num } hodźinje
[few] { $num } hodźiny
diff --git a/public/locales/hu/send.ftl b/public/locales/hu/send.ftl
index 86a1183b..b4034baa 100644
--- a/public/locales/hu/send.ftl
+++ b/public/locales/hu/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Küldésre kész
uploadSvgAlt = Feltöltés
uploadSuccessTimingHeader = A fájl hivatkozása lejár 1 letöltés vagy 24 óra múlva.
expireInfo = A fájlhoz tartozó hivatkozás { $downloadCount } vagy { $timespan } múlva lejár.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 letöltés
*[other] { $num } letöltés
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 óra
*[other] { $num } óra
}
diff --git a/public/locales/ia/send.ftl b/public/locales/ia/send.ftl
index 7da612fe..6feab6ba 100644
--- a/public/locales/ia/send.ftl
+++ b/public/locales/ia/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Preste a inviar
uploadSvgAlt = Cargamento
uploadSuccessTimingHeader = Le ligamine a tu file expirara post un discargamento o in 24 horas.
expireInfo = Le ligamine a tu file expirara post { $downloadCount } o { $timespan }
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] discargamento
*[other] discargamentos
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] hora
*[other] horas
}
diff --git a/public/locales/id/send.ftl b/public/locales/id/send.ftl
index 71ddb179..01323e01 100644
--- a/public/locales/id/send.ftl
+++ b/public/locales/id/send.ftl
@@ -112,5 +112,9 @@ enableJavascript = Silakan aktifkan JavaScript dan coba lagi.
expiresHoursMinutes = { $hours }j { $minutes }m
# A short representation of a countdown timer containing the number of minutes remaining as digits, example "56m"
expiresMinutes = { $minutes }m
+# A short status message shown when a password is successfully set
+passwordIsSet = Sandi diatur
# A short status message shown when the user enters a long password
maxPasswordLength = Panjang sandi maksimal: { $length }
+# A short status message shown when there was an error setting the password
+passwordSetError = Tidak bisa menyetel sandi ini
diff --git a/public/locales/it/send.ftl b/public/locales/it/send.ftl
index 82567e74..e0097cee 100644
--- a/public/locales/it/send.ftl
+++ b/public/locales/it/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Pronto per l’invio
uploadSvgAlt = Carica
uploadSuccessTimingHeader = Il link al file scadrà dopo 1 download o in 24 ore.
expireInfo = Il link a questo file scadrà dopo { $downloadCount } o { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 download
*[other] { $num } download
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 ora
*[other] { $num } ore
}
diff --git a/public/locales/ja/send.ftl b/public/locales/ja/send.ftl
index f800b4df..1a751c08 100644
--- a/public/locales/ja/send.ftl
+++ b/public/locales/ja/send.ftl
@@ -26,10 +26,12 @@ uploadSuccessConfirmHeader = 送信準備完了
uploadSvgAlt = アップロード
uploadSuccessTimingHeader = ファイルへのリンクは、1 回ダウンロードされた後、もしくは 24 時間以内に期限切れとなります。
expireInfo = このファイルへのリンクは { $downloadCount } あるいは { $timespan } 後に期限切れとなります。
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
*[other] { $num } 回のダウンロード
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
*[other] { $num } 時間
}
copyUrlFormLabelWithName = ファイルを送信するにはこのリンクをコピー、共有してください: { $filename }
diff --git a/public/locales/kab/send.ftl b/public/locales/kab/send.ftl
index e75ed73c..d6bbc8c2 100644
--- a/public/locales/kab/send.ftl
+++ b/public/locales/kab/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Ihegga i walluy
uploadSvgAlt = Sali
uploadSuccessTimingHeader = Aseɣwen ar ufaylu-ik ad yemmet ticki yuder-d neɣ deffir n 24 n yisragen.
expireInfo = Aseɣwen icudden ar ufaylu-inek ad yemmet send { $downloadCount } naɣ { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 usider
*[other] { $num } isidar
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 usrag
*[other] { $num } isragen
}
diff --git a/public/locales/ko/send.ftl b/public/locales/ko/send.ftl
index 7242b854..87a7b42f 100644
--- a/public/locales/ko/send.ftl
+++ b/public/locales/ko/send.ftl
@@ -18,7 +18,7 @@ verifyingFile = 확인하는 중…
encryptingFile = 암호화 중…
decryptingFile = 복호화 중…
notifyUploadDone = 업로드가 완료되었습니다.
-uploadingPageMessage = 파일이 업로드 되고나서 만료 옵션을 설정할 수 있습니다.
+uploadingPageMessage = 파일이 업로드 되고 나서 만료 옵션을 설정할 수 있습니다.
uploadingPageCancel = 업로드 취소
uploadCancelNotification = 업로드가 취소되었습니다.
uploadingPageLargeFileMessage = 이 파일은 크기가 커서 시간이 다소 걸릴 수 있습니다. 잠시만 기다려주세요!
diff --git a/public/locales/ms/send.ftl b/public/locales/ms/send.ftl
index f7e9a625..ba1d445a 100644
--- a/public/locales/ms/send.ftl
+++ b/public/locales/ms/send.ftl
@@ -26,10 +26,12 @@ uploadSuccessConfirmHeader = Sedia untuk Hantar
uploadSvgAlt = Muat naik
uploadSuccessTimingHeader = Pautan ke fail anda akan luput selepas 1 muat turun atau dalam 24 jam.
expireInfo = Pautan ke fail anda akan luput selepas { $downloadCount } atau { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
*[other] { $num } muat turun
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
*[other] { $num } jam
}
copyUrlFormLabelWithName = Salin dan kongsi pautan untuk menghantar fail anda: { $filename }
diff --git a/public/locales/nb-NO/send.ftl b/public/locales/nb-NO/send.ftl
index ff57b218..5c922211 100644
--- a/public/locales/nb-NO/send.ftl
+++ b/public/locales/nb-NO/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Klar til å sende
uploadSvgAlt = Last opp
uploadSuccessTimingHeader = Lenken til filen din utløper etter 1 nedlasting eller om 24 timer.
expireInfo = Lenken til filen din vil gå ut etter { $downloadCount } eller { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 nedlasting
*[other] { $num } nedlastinger
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 time
*[other] { $num } timer
}
diff --git a/public/locales/nl/send.ftl b/public/locales/nl/send.ftl
index 5544f8f6..7a0716a9 100644
--- a/public/locales/nl/send.ftl
+++ b/public/locales/nl/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Gereed voor verzending
uploadSvgAlt = Uploaden
uploadSuccessTimingHeader = De koppeling naar uw bestand zal na 1 download of 24 uur verlopen.
expireInfo = De koppeling naar uw bestand zal na { $downloadCount } of { $timespan } verlopen.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 download
*[other] { $num } downloads
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 uur
*[other] { $num } uur
}
diff --git a/public/locales/nn-NO/send.ftl b/public/locales/nn-NO/send.ftl
index 46ed9ca7..5b76e68e 100644
--- a/public/locales/nn-NO/send.ftl
+++ b/public/locales/nn-NO/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Klår til å senda
uploadSvgAlt = Last opp
uploadSuccessTimingHeader = Lenka til fila di går ut etter 1 nedlasting eller om 24 timar.
expireInfo = Lenka til fila di vil gå ut etter { $downloadCount } eller { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 nedlasting
*[other] { $num } nedlastingar
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 time
*[other] { $num } timar
}
diff --git a/public/locales/pt-BR/send.ftl b/public/locales/pt-BR/send.ftl
index b6806a92..5def8eeb 100644
--- a/public/locales/pt-BR/send.ftl
+++ b/public/locales/pt-BR/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Pronto para enviar
uploadSvgAlt = Enviado
uploadSuccessTimingHeader = O link para o seu arquivo expirará após 1 download ou em 24 horas.
expireInfo = O link para o seu arquivo expirará após { $downloadCount } ou { $timepan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 download
*[other] { $num } downloads
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 hora
*[other] { $num } horas
}
diff --git a/public/locales/sk/send.ftl b/public/locales/sk/send.ftl
index fe2c44dc..6c6f4e79 100644
--- a/public/locales/sk/send.ftl
+++ b/public/locales/sk/send.ftl
@@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Pripravené na odoslanie
uploadSvgAlt = Nahrať
uploadSuccessTimingHeader = Platnosť odkazu vyprší po 1 prevzatí alebo po uplynutí 24 hodín.
expireInfo = Platnosť odkazu na váš súbor vyprší po { $downloadCount } alebo po { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 prevzatí
[few] { $num } prevzatiach
*[other] { $num } prevzatiach
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 hodine
[few] { $num } hodinách
*[other] { $num } hodinách
diff --git a/public/locales/sl/send.ftl b/public/locales/sl/send.ftl
index dc322f76..bdadb7d4 100644
--- a/public/locales/sl/send.ftl
+++ b/public/locales/sl/send.ftl
@@ -26,13 +26,15 @@ uploadSuccessConfirmHeader = Pripravljeno za pošiljanje
uploadSvgAlt = Naloži
uploadSuccessTimingHeader = Povezava do vaše datoteke bo potekla po enem prenosu ali v 24 urah.
expireInfo = Povezava do vaše datoteke bo potekla čez { $downloadCount } ali { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 prenos
[two] { $num } prenosa
[few] { $num } prenosi
*[other] { $num } prenosov
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 ura
[two] { $num } uri
[few] { $num } ure
diff --git a/public/locales/sq/send.ftl b/public/locales/sq/send.ftl
index aa7a8f22..afe29381 100644
--- a/public/locales/sq/send.ftl
+++ b/public/locales/sq/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Gati për Dërgim
uploadSvgAlt = Ngarkoje
uploadSuccessTimingHeader = Lidhja për te kartela juaj do të skadojë pas 1 shkarkimi ose pas 24 orësh.
expireInfo = Lidhja për te kartela juaj do të skadojë pas { $downloadCount } ose { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 shkarkimi
*[other] { $num } shkarkimesh
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 ore
*[other] { $num } orësh
}
diff --git a/public/locales/sr/send.ftl b/public/locales/sr/send.ftl
index 57dfd4ec..816b0ab4 100644
--- a/public/locales/sr/send.ftl
+++ b/public/locales/sr/send.ftl
@@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Спреман за слање
uploadSvgAlt = Отпреми
uploadSuccessTimingHeader = Веза ка вашој датотеци ће истећи након једног преузимања или након 24 сата.
expireInfo = Веза ка вашој датотеци ће истећи након { $downloadCount } или { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] преузимања
[few] преузимања
*[other] преузимања
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] сата
[few] сата
*[other] сати
diff --git a/public/locales/sv-SE/send.ftl b/public/locales/sv-SE/send.ftl
index 5d330593..b1992148 100644
--- a/public/locales/sv-SE/send.ftl
+++ b/public/locales/sv-SE/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Klar för att skicka
uploadSvgAlt = Ladda upp
uploadSuccessTimingHeader = Länken till din fil upphör att gälla efter 1 nedladdning eller om 24 timmar.
expireInfo = Länken till din fil upphör att gälla efter { $downloadCount } eller { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 nedladdning
*[other] { $num } nedladdningar
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 timme
*[other] { $num } timmar
}
diff --git a/public/locales/te/send.ftl b/public/locales/te/send.ftl
index 2b7736cc..acbc3923 100644
--- a/public/locales/te/send.ftl
+++ b/public/locales/te/send.ftl
@@ -7,6 +7,7 @@ uploadPageDropMessage = ఎగుమతిని ప్రారంభించ
uploadPageSizeMessage = అత్యంత నమ్మకమైన కార్యం కోసం, మీ ఫైలును 1GB కంటే తక్కువగా ఉంచడం ఉత్తమం
uploadPageBrowseButton = మీ కంప్యూటర్లో ఒక ఫైలును ఎంచుకోండి
uploadPageBrowseButton1 = ఎక్కించటానికి ఒక ఫైలును ఎంచుకోండి
+uploadPageMultipleFilesAlert = పలు ఫైళ్ళను లేదా సంయచాన్ని ఎక్కించడానికి ప్రస్తుతం తోడ్పాటు లేదు.
uploadPageBrowseButtonTitle = ఫైలును ఎగుమతి చేయండి
uploadingPageProgress = { $filename } ({ $size }) ఎక్కుతోంది
importingFile = దిగుమతవుతోంది...
@@ -64,6 +65,7 @@ errorAltText = ఎగుమతిలో లోపం
errorPageHeader = ఏదో తప్పిదం జరిగింది!
errorPageMessage = ఫైల్ను ఎగుమతి చేయడంలో లోపం ఉంది.
errorPageLink = మరో ఫైలును పంపండి
+fileTooBig = ఆ ఫైలు ఎక్కించడానికి చాలా పెద్దగా ఉంది. ఫైళ్ళు { $size } కంటే తక్కువ పరిమాణంలో ఉండాలి.
linkExpiredAlt = లంకె గడువు ముగిసింది
expiredPageHeader = ఈ లంకె గడువు ముగిసింది లేదా ముందు ఎప్పుడూ ఉనికిలో లేదు!
notSupportedHeader = మీ విహారిణికి మద్దతు లేదు.
diff --git a/public/locales/tl/send.ftl b/public/locales/tl/send.ftl
index e9c90a50..6e674df4 100644
--- a/public/locales/tl/send.ftl
+++ b/public/locales/tl/send.ftl
@@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Handa nang Ipadala
uploadSvgAlt = I-upload
uploadSuccessTimingHeader = Mag-e-expire ang link sa iyong file pagkatapos ng 1 pag-download o sa loob ng 24 na oras.
expireInfo = Mag-e-expire ang link sa iyong file pagkatapos ng { $downloadCount } o { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 pag-download
*[other] { $num } na mga pag-download
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
*[one] 1 oras
}
copyUrlFormLabelWithName = Kopyahin at ibahagi ang link upang ipadala ang iyong file: { $filename }
diff --git a/public/locales/tr/send.ftl b/public/locales/tr/send.ftl
index 66a8b789..437edc2f 100644
--- a/public/locales/tr/send.ftl
+++ b/public/locales/tr/send.ftl
@@ -84,7 +84,7 @@ expiryFileList = Bitiş süresi
deleteFileList = Sil
nevermindButton = Boş ver
legalHeader = Şart ve Koşullar
-legalNoticeTestPilot = Firefox Send bir Test Pilotu deneyidir ve Test Pilotu
Hizmet Koşulları ile
Gizlilik Bildirimi’ne tabidir. Bu deney ve topladığı veriler hakkında daha fazla bilgi almak isterseniz
buraya bakabilirsiniz.
+legalNoticeTestPilot = Firefox Send bir Test Pilotu deneyidir ve Test Pilotu
Hizmet Koşulları ile
Gizlilik Bildirimi’ne tabidir. Bu deney ve topladığı veriler hakkında daha fazla bilgi almak isterseniz
buraya bakabilirsiniz.
legalNoticeMozilla = Firefox Send’i kullanmak Mozilla’nın
Web Siteleri Gizlilik Bildirimi ve
Web Siteleri Kullanım Koşulları’na da tabidir.
deletePopupText = Bu dosya silinsin mi?
deletePopupYes = Evet
diff --git a/public/locales/uk/send.ftl b/public/locales/uk/send.ftl
index 86fd7599..48bf6552 100644
--- a/public/locales/uk/send.ftl
+++ b/public/locales/uk/send.ftl
@@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Готовий до надсилання
uploadSvgAlt = Вивантажити
uploadSuccessTimingHeader = Час дії цього посилання закінчиться після 1 завантаження, або через 24 години.
expireInfo = Посилання на ваш файл стане недійсним після { $downloadCount } файла, або через { $timespan }.
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
[one] 1 завантаження
[few] { $num } завантаження
*[other] { $num } завантажень
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
[one] 1 година
[few] { $num } години
*[other] { $num } годин
diff --git a/public/locales/zh-CN/send.ftl b/public/locales/zh-CN/send.ftl
index 60d7f25f..831714c5 100644
--- a/public/locales/zh-CN/send.ftl
+++ b/public/locales/zh-CN/send.ftl
@@ -26,10 +26,12 @@ uploadSuccessConfirmHeader = 准备好发送
uploadSvgAlt = 上传
uploadSuccessTimingHeader = 您的文件的链接将在首次下载或 24 小时后过期。
expireInfo = 指向该文件的链接将在 { $downloadCount } 或 { $timespan } 后过期。
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
*[other] { $num } 次下载
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
*[other] { $num } 小时
}
copyUrlFormLabelWithName = 复制并分享链接以发送您的文件:{ $filename }
diff --git a/public/locales/zh-TW/send.ftl b/public/locales/zh-TW/send.ftl
index b441ad31..f5fa7890 100644
--- a/public/locales/zh-TW/send.ftl
+++ b/public/locales/zh-TW/send.ftl
@@ -26,10 +26,12 @@ uploadSuccessConfirmHeader = 準備好傳送
uploadSvgAlt = 上傳
uploadSuccessTimingHeader = 您的檔案鏈結將會在首次下載,或 24 小時後失效。
expireInfo = 檔案鏈結將在 { $downloadCount }或 { $timespan }後失效。
-downloadCount = { $num ->
+downloadCount =
+ { $num ->
*[other] { $num } 次下載
}
-timespanHours = { $num ->
+timespanHours =
+ { $num ->
*[other] { $num } 小時
}
copyUrlFormLabelWithName = 複製並分享鏈結來傳送您的檔案: { $filename }
diff --git a/server/routes/download.js b/server/routes/download.js
index bfd667ed..84ba715d 100644
--- a/server/routes/download.js
+++ b/server/routes/download.js
@@ -14,8 +14,17 @@ module.exports = async function(req, res) {
'WWW-Authenticate': `send-v1 ${req.nonce}`
});
const file_stream = storage.get(id);
+ let cancelled = false;
- file_stream.on('end', async () => {
+ req.on('close', () => {
+ cancelled = true;
+ file_stream.destroy();
+ });
+
+ file_stream.on('close', async () => {
+ if (cancelled) {
+ return;
+ }
const dl = meta.dl + 1;
const dlimit = meta.dlimit;
try {
@@ -28,6 +37,7 @@ module.exports = async function(req, res) {
log.info('StorageError:', id);
}
});
+
file_stream.pipe(res);
} catch (e) {
res.sendStatus(404);
diff --git a/test/frontend/tests/workflow-tests.js b/test/frontend/tests/workflow-tests.js
index eed956da..ff8b83c7 100644
--- a/test/frontend/tests/workflow-tests.js
+++ b/test/frontend/tests/workflow-tests.js
@@ -134,6 +134,27 @@ describe('Upload / Download flow', function() {
}
});
+ it('can cancel and not increase download count', async function() {
+ const fs = new FileSender(blob);
+ const file = await fs.upload();
+ const fr = new FileReceiver({
+ secretKey: file.toJSON().secretKey,
+ id: file.id,
+ nonce: file.keychain.nonce,
+ requiresPassword: false
+ });
+ await fr.getMetadata();
+ fr.once('progress', () => fr.cancel());
+
+ try {
+ await fr.download(noSave);
+ assert.fail('not cancelled');
+ } catch (e) {
+ await file.updateDownloadCount();
+ assert.equal(file.dtotal, 0);
+ }
+ });
+
it('can allow multiple downloads', async function() {
const fs = new FileSender(blob);
const file = await fs.upload();
diff --git a/test/integration/requirements.txt b/test/integration/requirements.txt
index f93b1efb..0b089ab2 100644
--- a/test/integration/requirements.txt
+++ b/test/integration/requirements.txt
@@ -1,8 +1,8 @@
-selenium==3.12.0
+selenium==3.13.0
flake8==3.5.0
flake8-isort==2.5
PyPOM==2.0.0
-pytest==3.6.0
-pytest-html==1.18.0
+pytest==3.6.3
+pytest-html==1.19.0
pytest-selenium==1.13.0
pytest-xdist==1.22.2