Merge remote-tracking branch 'origin/master' into vnext

This commit is contained in:
Danny Coates 2018-07-13 12:25:28 -07:00
commit dd0cb78ea2
No known key found for this signature in database
GPG Key ID: 4C442633C62E00CB
48 changed files with 4748 additions and 7858 deletions

View File

@ -216,6 +216,7 @@ function download(id, keychain, onprogress, canceller) {
const blob = new Blob([xhr.response]); const blob = new Blob([xhr.response]);
resolve(blob); resolve(blob);
}); });
xhr.addEventListener('progress', function(event) { xhr.addEventListener('progress', function(event) {
if (event.lengthComputable && event.target.status === 200) { if (event.lengthComputable && event.target.status === 200) {
onprogress([event.loaded, event.total]); onprogress([event.loaded, event.total]);
@ -224,8 +225,10 @@ function download(id, keychain, onprogress, canceller) {
const auth = await keychain.authHeader(); const auth = await keychain.authHeader();
xhr.open('get', `/api/download/${id}`); xhr.open('get', `/api/download/${id}`);
xhr.setRequestHeader('Authorization', auth); xhr.setRequestHeader('Authorization', auth);
xhr.setRequestHeader('Connection', 'close');
xhr.responseType = 'blob'; xhr.responseType = 'blob';
xhr.send(); xhr.send();
onprogress([0, 1]);
}); });
} }

View File

@ -4,6 +4,7 @@ import app from './routes';
import locale from '../common/locales'; import locale from '../common/locales';
import fileManager from './fileManager'; import fileManager from './fileManager';
import dragManager from './dragManager'; import dragManager from './dragManager';
import pasteManager from './pasteManager';
import { canHasSend } from './utils'; import { canHasSend } from './utils';
import storage from './storage'; import storage from './storage';
import metrics from './metrics'; import metrics from './metrics';
@ -48,5 +49,6 @@ app.use(metrics);
app.use(fileManager); app.use(fileManager);
app.use(dragManager); app.use(dragManager);
app.use(experiments); app.use(experiments);
app.use(pasteManager);
app.mount('body'); app.mount('body');

25
app/pasteManager.js Normal file
View File

@ -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
}
});
}

View File

@ -19,7 +19,8 @@ module.exports = function(file, state, emit) {
onclick=${copyClick} onclick=${copyClick}
src="${assets.get('copy-16.svg')}" src="${assets.get('copy-16.svg')}"
class="cursor--pointer" class="cursor--pointer"
title="${state.translate('copyUrlHover')}"> title="${state.translate('copyUrlHover')}"
tabindex="0">
<span hidden="true"> <span hidden="true">
${state.translate('copiedUrl')} ${state.translate('copiedUrl')}
</span> </span>
@ -33,7 +34,8 @@ module.exports = function(file, state, emit) {
onclick=${showPopup} onclick=${showPopup}
src="${assets.get('close-16.svg')}" src="${assets.get('close-16.svg')}"
class="cursor--pointer" class="cursor--pointer"
title="${state.translate('deleteButtonHover')}"> title="${state.translate('deleteButtonHover')}"
tabindex="0">
${deletePopup( ${deletePopup(
state.translate('deletePopupText'), state.translate('deletePopupText'),
state.translate('deletePopupYes'), state.translate('deletePopupYes'),

View File

@ -6,8 +6,7 @@ module.exports = function(state) {
<div class="legalSection"> <div class="legalSection">
<a <a
href="https://www.mozilla.org" href="https://www.mozilla.org"
class="legalSection__link" class="legalSection__link">
role="presentation">
<img <img
class="legalSection__mozLogo" class="legalSection__mozLogo"
src="${assets.get('mozilla-logo.svg')}" src="${assets.get('mozilla-logo.svg')}"
@ -43,8 +42,7 @@ module.exports = function(state) {
<div class="socialSection"> <div class="socialSection">
<a <a
href="https://github.com/mozilla/send" href="https://github.com/mozilla/send"
class="socialSection__link" class="socialSection__link">
role="presentation">
<img <img
class="socialSection__icon" class="socialSection__icon"
src="${assets.get('github-icon.svg')}" src="${assets.get('github-icon.svg')}"
@ -52,8 +50,7 @@ module.exports = function(state) {
</a> </a>
<a <a
href="https://twitter.com/FxTestPilot" href="https://twitter.com/FxTestPilot"
class="socialSection__link" class="socialSection__link">
role="presentation">
<img <img
class="socialSection__icon" class="socialSection__icon"
src="${assets.get('twitter-icon.svg')}" src="${assets.get('twitter-icon.svg')}"

12139
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Göndərməyə hazır
uploadSvgAlt = Yüklə uploadSvgAlt = Yüklə
uploadSuccessTimingHeader = Faylınızın keçidinin 1 endirmədən və ya 24 saatdan sonra vaxtı çıxacaq. uploadSuccessTimingHeader = Faylınızın keçidinin 1 endirmədən və ya 24 saatdan sonra vaxtı çıxacaq.
expireInfo = Faylınız üçün keçidin vaxtı { $downloadCount } sonra və ya { $timespan } tarixində keçəcək. expireInfo = Faylınız üçün keçidin vaxtı { $downloadCount } sonra və ya { $timespan } tarixində keçəcək.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 endirmə [one] 1 endirmə
*[other] { $num } endirmə *[other] { $num } endirmə
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 saat [one] 1 saat
*[other] { $num } saat *[other] { $num } saat
} }

View File

@ -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 title = Firefox Send
siteSubtitle = ওয়েব গবেষণা siteSubtitle = ওয়েব গবেষণা
siteFeedback = প্রতিক্রিয়া siteFeedback = প্রতিক্রিয়া
@ -15,11 +15,13 @@ uploadingPageCancel = আপলোড বাতিল করুন
uploadCancelNotification = আপনার অাপলোড বাতিল করা হয়েছে। uploadCancelNotification = আপনার অাপলোড বাতিল করা হয়েছে।
uploadSuccessConfirmHeader = পাঠানোর জন্য প্রস্তুত uploadSuccessConfirmHeader = পাঠানোর জন্য প্রস্তুত
uploadSvgAlt = আপলোড uploadSvgAlt = আপলোড
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 ডাউনলোড [one] 1 ডাউনলোড
*[other] { $num } ডাউনলোডগুলো *[other] { $num } ডাউনলোডগুলো
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 ঘন্টা [one] 1 ঘন্টা
*[other] { $num } ঘন্টা *[other] { $num } ঘন্টা
} }
@ -27,20 +29,20 @@ copyUrlFormButton = ক্লিপবোর্ডে কপি করুন
copiedUrl = কপি করা হয়েছে! copiedUrl = কপি করা হয়েছে!
deleteFileButton = ফাইল মুছুন deleteFileButton = ফাইল মুছুন
sendAnotherFileLink = আরেকটি ফাইল পাঠান sendAnotherFileLink = আরেকটি ফাইল পাঠান
// Alternative text used on the download link/button (indicates an action). # Alternative text used on the download link/button (indicates an action).
downloadAltText = ডাউনলোড downloadAltText = ডাউনলোড
downloadsFileList = ডাউনলোডগুলো downloadsFileList = ডাউনলোডগুলো
// Used as header in a column indicating the amount of time left before a # Used as header in a column indicating the amount of time left before a
// download link expires (e.g. "10h 5m") # download link expires (e.g. "10h 5m")
timeFileList = সময় timeFileList = সময়
// Used as header in a column indicating the number of times a file has been # Used as header in a column indicating the number of times a file has been
// downloaded # downloaded
downloadFileName = ডাউনলোড { $filename } downloadFileName = ডাউনলোড { $filename }
downloadFileSize = ({ $size }) downloadFileSize = ({ $size })
unlockInputLabel = পাসওয়ার্ড লিখুন unlockInputLabel = পাসওয়ার্ড লিখুন
unlockInputPlaceholder = পাসওয়ার্ড unlockInputPlaceholder = পাসওয়ার্ড
unlockButtonLabel = আনলক করুন 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 = ডাউনলোড downloadButtonLabel = ডাউনলোড
downloadNotification = আপনার ডাউনলোড সম্পন্ন হয়েছে। downloadNotification = আপনার ডাউনলোড সম্পন্ন হয়েছে।
downloadFinish = ডাউনলোড সম্পন্ন downloadFinish = ডাউনলোড সম্পন্ন
@ -53,7 +55,7 @@ updateFirefox = Firefox হালনাগাদ করুন
downloadFirefoxButtonSub = বিনামূল্যে ডাউনলোড downloadFirefoxButtonSub = বিনামূল্যে ডাউনলোড
uploadedFile = ফাইল uploadedFile = ফাইল
copyFileList = URL অনুলিপি করুন copyFileList = URL অনুলিপি করুন
// expiryFileList is used as a column header # expiryFileList is used as a column header
expiryFileList = মেয়াদোত্তীর্ণ তারিখ expiryFileList = মেয়াদোত্তীর্ণ তারিখ
deleteFileList = মুছে ফেলুন deleteFileList = মুছে ফেলুন
nevermindButton = কিছু মনে করবেন না nevermindButton = কিছু মনে করবেন না
@ -64,7 +66,7 @@ deletePopupCancel = বাতিল
deleteButtonHover = মুছে ফেলুন deleteButtonHover = মুছে ফেলুন
copyUrlHover = URL অনুলিপি করুন copyUrlHover = URL অনুলিপি করুন
footerLinkLegal = আইনগত 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 পরিচিতি footerLinkAbout = Test Pilot পরিচিতি
footerLinkPrivacy = গোপনীয়তা footerLinkPrivacy = গোপনীয়তা
footerLinkTerms = শর্তাবলী footerLinkTerms = শর্তাবলী

View File

@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Spremno za slanje
uploadSvgAlt = Otpremi uploadSvgAlt = Otpremi
uploadSuccessTimingHeader = Veza prema vašoj datoteci će isteći nakon prvog preuzimanja ili za 24 sata. 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 }. expireInfo = Link za vašu datoteku će isteći nakon { $downloadCount } ili { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 preuzimanja [one] 1 preuzimanja
[few] { $num } preuzimanja [few] { $num } preuzimanja
*[other] { $num } preuzimanja *[other] { $num } preuzimanja
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 sat [one] 1 sat
[few] { $num } sata [few] { $num } sata
*[other] { $num } sati *[other] { $num } sati

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Ütz chik richin Nitaq
uploadSvgAlt = Tijotob'äx uploadSvgAlt = Tijotob'äx
uploadSuccessTimingHeader = Ri ruximonel yakb'äl xtik'is ruq'ijul toq xtiqasäx jumul o pa 24 ramaj. 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 }. expireInfo = Ri ruximöy ayakb'al xtik'is ruq'ijul chi rij ri { $downloadCount } o { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 qasanïk [one] 1 qasanïk
*[other] { $num } taq qasanïk *[other] { $num } taq qasanïk
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 ramaj [one] 1 ramaj
*[other] { $num } taq ramaj *[other] { $num } taq ramaj
} }

View File

@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Připraveno k odeslání
uploadSvgAlt = Nahrát uploadSvgAlt = Nahrát
uploadSuccessTimingHeader = Platnost odkazu na váš soubor vyprší po jeho prvním stažení, nebo po 24 hodinách. 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 }. expireInfo = Platnost odkazu na váš soubor vyprší po { $downloadCount } nebo { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] jednom stažení [one] jednom stažení
[few] { $num } staženích [few] { $num } staženích
*[other] { $num } staženích *[other] { $num } staženích
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] jedné hodině [one] jedné hodině
[few] { $num } hodinách [few] { $num } hodinách
*[other] { $num } hodinách *[other] { $num } hodinách
@ -88,8 +90,8 @@ expiryFileList = Platnost vyprší za
deleteFileList = Smazat deleteFileList = Smazat
nevermindButton = Nevadí nevermindButton = Nevadí
legalHeader = Podmínky a ochrana soukromí legalHeader = Podmínky a ochrana soukromí
legalNoticeTestPilot = Firefox Send je ve fázi experimentu projektu Test Pilot a platí tak pro něj stejné <a>Podmínky používání</a> a <a>Zásady ochrany soukromí</a>. Více o tomto experimentu a sbíraných datech se dozvíte <a>zde</a>. legalNoticeTestPilot = Firefox Send je ve fázi experimentu projektu Test Pilot a platí tak pro něj stejné <a>Podmínky používání</a> a <a>Zásady ochrany osobních údajů</a>. Více o tomto experimentu a sbíraných datech se dozvíte <a>zde</a>.
legalNoticeMozilla = Používání webové služby Firefox Send se řídí <a>Zásadami ochrany soukromí</a> a <a>Podmínkami používání</a> webových stránek Mozilly. legalNoticeMozilla = Používání webové služby Firefox Send se řídí <a>Zásadami ochrany osobních údajů</a> a <a>Podmínkami používání</a> webových stránek Mozilly.
deletePopupText = Smazat tento soubor? deletePopupText = Smazat tento soubor?
deletePopupYes = Ano deletePopupYes = Ano
deletePopupCancel = Zrušit deletePopupCancel = Zrušit

View File

@ -26,13 +26,15 @@ uploadSuccessConfirmHeader = Gótowy za słanje
uploadSvgAlt = Nagraś uploadSvgAlt = Nagraś
uploadSuccessTimingHeader = Wótkaz k wašej dataji pó 1 ześěgnjenju abo 24 góźinach spadnjo. 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. expireInfo = Wótkaz k wašej dataji pó { $downloadCount } abo { $timespan } spadnjo.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 ześěgnjenje [one] 1 ześěgnjenje
[two] { $num } ześěgnjeni [two] { $num } ześěgnjeni
[few] { $num } ześěgnjenja [few] { $num } ześěgnjenja
*[other] { $num } ześěgnjenjow *[other] { $num } ześěgnjenjow
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 góźina [one] 1 góźina
[two] { $num } góźinje [two] { $num } góźinje
[few] { $num } góźiny [few] { $num } góźiny

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Έτοιμο για αποστολή
uploadSvgAlt = Μεταφόρτωση uploadSvgAlt = Μεταφόρτωση
uploadSuccessTimingHeader = Ο σύνδεσμος του αρχείου σας θα λήξει έπειτα από 1 λήψη ή 24 ώρες. uploadSuccessTimingHeader = Ο σύνδεσμος του αρχείου σας θα λήξει έπειτα από 1 λήψη ή 24 ώρες.
expireInfo = Ο σύνδεσμος για το αρχείο σας θα λήξει μετά από { $downloadCount } ή { $timespan }. expireInfo = Ο σύνδεσμος για το αρχείο σας θα λήξει μετά από { $downloadCount } ή { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 λήψη [one] 1 λήψη
*[other] { $num } λήψεις *[other] { $num } λήψεις
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 ώρα [one] 1 ώρα
*[other] { $num } ώρες *[other] { $num } ώρες
} }

View File

@ -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, its 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. Youll 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. Youll 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 <a>Terms of Service</a> and <a>Privacy Notice</a>. You can learn more about this experiment and its data collection <a>here</a>.
legalNoticeMozilla = Use of the Firefox Send website is also subject to Mozillas <a>Websites Privacy Notice</a> and <a>Websites Terms of Use</a>.
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

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace al archivo expirará después de 1 descarga o en 24 horas. 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 }. expireInfo = El enlace a tu archivo expirará después de { $downloadCount } o { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 descarga [one] 1 descarga
*[other] { $num } descargas *[other] { $num } descargas
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 hora [one] 1 hora
*[other] { $num } horas *[other] { $num } horas
} }

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace a tu archivo expirará tras 1 descarga o en 24 horas. 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 }. expireInfo = El enlace a tu archivo expirará después de { $downloadCount } o { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 descarga [one] 1 descarga
*[other] { $num } descargas *[other] { $num } descargas
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 hora [one] 1 hora
*[other] { $num } horas *[other] { $num } horas
} }

View File

@ -12,7 +12,7 @@ uploadPageBrowseButton1 = Seleccionar un archivo para subir
uploadPageMultipleFilesAlert = Aún no se pueden subir varios archivos o una carpeta. uploadPageMultipleFilesAlert = Aún no se pueden subir varios archivos o una carpeta.
uploadPageBrowseButtonTitle = Subir archivo uploadPageBrowseButtonTitle = Subir archivo
uploadingPageProgress = Subiendo { $filename } ({ $size }) uploadingPageProgress = Subiendo { $filename } ({ $size })
importingFile = Imporando... importingFile = Importando...
verifyingFile = Comprobando... verifyingFile = Comprobando...
encryptingFile = Encriptando... encryptingFile = Encriptando...
decryptingFile = Desencriptando... decryptingFile = Desencriptando...
@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace al archivo caducará tras descargarlo una vez o en 24 horas. uploadSuccessTimingHeader = El enlace al archivo caducará tras descargarlo una vez o en 24 horas.
expireInfo = El enlace al archivo expirará tras { $downloadCount } o { $timespan }. expireInfo = El enlace al archivo expirará tras { $downloadCount } o { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 descarga [one] 1 descarga
*[other] { $num } descargas *[other] { $num } descargas
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 hora [one] 1 hora
*[other] { $num } horas *[other] { $num } horas
} }
@ -86,7 +88,7 @@ expiryFileList = Caduca en
deleteFileList = Eliminar deleteFileList = Eliminar
nevermindButton = Da igual nevermindButton = Da igual
legalHeader = Términos y privacidad legalHeader = Términos y privacidad
legalNoticeTestPilot = Firefox Send sigue siendo un experimento de Test Pilot y está sujero a las <a>Condiciones del servicio</a> y al <a>Aviso de privacidad</a> de Test Pilot. legalNoticeTestPilot = Firefox Send sigue siendo un experimento de Test Pilot y está sujero a las <a>Condiciones del servicio</a> y al <a>Aviso de privacidad</a> de Test Pilot. <a>Aquí</a> 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 <a>Aviso de privacidad sobre sitios web</a> y a los <a>Términos de uso sobre sitios web</a>. legalNoticeMozilla = El uso de la página de Firefox Send también está sujeto al <a>Aviso de privacidad sobre sitios web</a> y a los <a>Términos de uso sobre sitios web</a>.
deletePopupText = ¿Eliminar el archivo? deletePopupText = ¿Eliminar el archivo?
deletePopupYes = Sí deletePopupYes = Sí

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Saatmiseks valmis
uploadSvgAlt = Laadi üles uploadSvgAlt = Laadi üles
uploadSuccessTimingHeader = Link failile aegub pärast 1. allalaadimist või 24 tunni möödumisel. uploadSuccessTimingHeader = Link failile aegub pärast 1. allalaadimist või 24 tunni möödumisel.
expireInfo = Link failile aegub peale { $downloadCount } või { $timespan }. expireInfo = Link failile aegub peale { $downloadCount } või { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] üht allalaadimist [one] üht allalaadimist
*[other] { $num } allalaadimist *[other] { $num } allalaadimist
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] üht tundi [one] üht tundi
*[other] { $num } tundi *[other] { $num } tundi
} }

View File

@ -26,6 +26,16 @@ uploadSuccessConfirmHeader = آماده برای ارسال
uploadSvgAlt = بارگذاری uploadSvgAlt = بارگذاری
uploadSuccessTimingHeader = پیوند به پرونده شما بعد از ۱ بار دانلود یا ۲۴ ساعت حذف خواهد شد. uploadSuccessTimingHeader = پیوند به پرونده شما بعد از ۱ بار دانلود یا ۲۴ ساعت حذف خواهد شد.
expireInfo = این پیوند به فایل شما پس از { $downloadCount } یا { $timespan } منقضی خواهد شد. expireInfo = این پیوند به فایل شما پس از { $downloadCount } یا { $timespan } منقضی خواهد شد.
downloadCount =
{ $num ->
[one] ۱ بارگیری
*[other] { $num } بارگیری
}
timespanHours =
{ $num ->
[one] ۱ ساعت
*[other] { $num } ساعت
}
copyUrlFormLabelWithName = برای ارسال پرونده پیوند آن را رونوشت و به اشتراک بگذارید: { $filename } copyUrlFormLabelWithName = برای ارسال پرونده پیوند آن را رونوشت و به اشتراک بگذارید: { $filename }
copyUrlFormButton = رونوشت به کلیپ‌بورد copyUrlFormButton = رونوشت به کلیپ‌بورد
copiedUrl = رونوشت شد! copiedUrl = رونوشت شد!

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Ree om te ferstjoeren
uploadSvgAlt = Oplaad uploadSvgAlt = Oplaad
uploadSuccessTimingHeader = De keppeling nei jo bestân sil nei 1 download ferrinne of nei 24 oeren. 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. expireInfo = De keppeling nei jo bestân sil nei { $downloadCount } of { $timespan } ferrinne.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 download [one] 1 download
*[other] { $num } downloads *[other] { $num } downloads
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 oer [one] 1 oer
*[other] { $num } oeren *[other] { $num } oeren
} }

View File

@ -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 title = Firefox Send
siteSubtitle = ניסוי אינטרנט siteSubtitle = ניסוי אינטרנט
siteFeedback = משוב siteFeedback = משוב
@ -21,7 +21,7 @@ uploadCancelNotification = ההעלאה שלך בוטלה.
uploadingPageLargeFileMessage = קובץ זה גדול ועלול לקחת זמן להעלות אותו. סבלנות! uploadingPageLargeFileMessage = קובץ זה גדול ועלול לקחת זמן להעלות אותו. סבלנות!
uploadingFileNotification = נא להודיע לי כשתסתיים ההעלאה. uploadingFileNotification = נא להודיע לי כשתסתיים ההעלאה.
uploadSuccessConfirmHeader = מוכן לשליחה uploadSuccessConfirmHeader = מוכן לשליחה
uploadSvgAlt uploadSvgAlt =
.alt = להעלות .alt = להעלות
uploadSuccessTimingHeader = הקישור לקובץ שלך יפוג אחרי הורדה אחת או בעוד 24 שעות. uploadSuccessTimingHeader = הקישור לקובץ שלך יפוג אחרי הורדה אחת או בעוד 24 שעות.
copyUrlFormLabelWithName = ניתן להעתיק ולשתף את הקישור כדי לשלוח את הקובץ שלך: { $filename } copyUrlFormLabelWithName = ניתן להעתיק ולשתף את הקישור כדי לשלוח את הקובץ שלך: { $filename }
@ -30,32 +30,34 @@ deleteFileButton = מחיקת קובץ
.title = מחיקת קובץ .title = מחיקת קובץ
sendAnotherFileLink = שליחת קובץ נוסף sendAnotherFileLink = שליחת קובץ נוסף
.title = שליחת קובץ נוסף .title = שליחת קובץ נוסף
// Alternative text used on the download link/button (indicates an action). # Alternative text used on the download link/button (indicates an action).
downloadAltText downloadAltText =
.alt = הורדה .alt = הורדה
# Used as header in a column indicating the number of times a file has been
# downloaded
downloadFileName = ההורדה נכשלה downloadFileName = ההורדה נכשלה
downloadFileSize = ({ $size }) 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 = הורדה downloadButtonLabel = הורדה
.title = הורדה .title = הורדה
downloadNotification = ההורדה הושלמה. downloadNotification = ההורדה הושלמה.
downloadFinish = ההורדה הושלמה 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 }) fileSizeProgress = ({ $partialSize } מתוך { $totalSize })
downloadingPageProgress = בהורדה: { $filename } ({ $size }) downloadingPageProgress = בהורדה: { $filename } ({ $size })
errorAltText errorAltText =
.alt = תקלה בהעלאה .alt = תקלה בהעלאה
errorPageHeader = משהו השתבש! errorPageHeader = משהו השתבש!
errorPageLink = שליחת קובץ נוסף errorPageLink = שליחת קובץ נוסף
fileTooBig = הקובץ הזה גדול מידי להעלאה. עליו להיות קטן מ־{ $size }. fileTooBig = הקובץ הזה גדול מידי להעלאה. עליו להיות קטן מ־{ $size }.
linkExpiredAlt linkExpiredAlt =
.alt = קישור פג .alt = קישור פג
notSupportedHeader = הדפדפן שלך לא נתמך. notSupportedHeader = הדפדפן שלך לא נתמך.
notSupportedLink = למה אין תמיכה בדפדפן שלי? notSupportedLink = למה אין תמיכה בדפדפן שלי?
downloadFirefoxButtonSub = הורדה בחינם downloadFirefoxButtonSub = הורדה בחינם
uploadedFile = קובץ uploadedFile = קובץ
copyFileList = העתקת כתובת copyFileList = העתקת כתובת
// expiryFileList is used as a column header # expiryFileList is used as a column header
expiryFileList = יפוג בעוד expiryFileList = יפוג בעוד
deleteFileList = מחיקה deleteFileList = מחיקה
nevermindButton = לא משנה nevermindButton = לא משנה
@ -63,9 +65,9 @@ legalHeader = תנאי שירות ופרטיות
deletePopupText = למחוק דף זה? deletePopupText = למחוק דף זה?
deletePopupYes = כן deletePopupYes = כן
deletePopupCancel = ביטול deletePopupCancel = ביטול
deleteButtonHover deleteButtonHover =
.title = מחיקה .title = מחיקה
copyUrlHover copyUrlHover =
.title = העתקת קישור .title = העתקת קישור
footerLinkLegal = מידע משפטי footerLinkLegal = מידע משפטי
footerLinkPrivacy = פרטיות footerLinkPrivacy = פרטיות

View File

@ -26,13 +26,15 @@ uploadSuccessConfirmHeader = Hotowy za słanje
uploadSvgAlt = Nahrać uploadSvgAlt = Nahrać
uploadSuccessTimingHeader = Wotkaz k wašej dataji po 1 sćehnjenju abo 24 hodźinach spadnje. 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. expireInfo = Wotkaz k wašej dataji po { $downloadCount } abo { $timespan } spadnje.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 sćehnjenje [one] 1 sćehnjenje
[two] { $num } sćehnjeni [two] { $num } sćehnjeni
[few] { $num } sćehnjenja [few] { $num } sćehnjenja
*[other] { $num } sćehnjenjow *[other] { $num } sćehnjenjow
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 hodźina [one] 1 hodźina
[two] { $num } hodźinje [two] { $num } hodźinje
[few] { $num } hodźiny [few] { $num } hodźiny

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Küldésre kész
uploadSvgAlt = Feltöltés uploadSvgAlt = Feltöltés
uploadSuccessTimingHeader = A fájl hivatkozása lejár 1 letöltés vagy 24 óra múlva. 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. expireInfo = A fájlhoz tartozó hivatkozás { $downloadCount } vagy { $timespan } múlva lejár.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 letöltés [one] 1 letöltés
*[other] { $num } letöltés *[other] { $num } letöltés
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 óra [one] 1 óra
*[other] { $num } óra *[other] { $num } óra
} }

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Preste a inviar
uploadSvgAlt = Cargamento uploadSvgAlt = Cargamento
uploadSuccessTimingHeader = Le ligamine a tu file expirara post un discargamento o in 24 horas. 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 } expireInfo = Le ligamine a tu file expirara post { $downloadCount } o { $timespan }
downloadCount = { $num -> downloadCount =
{ $num ->
[one] discargamento [one] discargamento
*[other] discargamentos *[other] discargamentos
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] hora [one] hora
*[other] horas *[other] horas
} }

View File

@ -112,5 +112,9 @@ enableJavascript = Silakan aktifkan JavaScript dan coba lagi.
expiresHoursMinutes = { $hours }j { $minutes }m expiresHoursMinutes = { $hours }j { $minutes }m
# A short representation of a countdown timer containing the number of minutes remaining as digits, example "56m" # A short representation of a countdown timer containing the number of minutes remaining as digits, example "56m"
expiresMinutes = { $minutes }m 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 # A short status message shown when the user enters a long password
maxPasswordLength = Panjang sandi maksimal: { $length } maxPasswordLength = Panjang sandi maksimal: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = Tidak bisa menyetel sandi ini

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Pronto per linvio
uploadSvgAlt = Carica uploadSvgAlt = Carica
uploadSuccessTimingHeader = Il link al file scadrà dopo 1 download o in 24 ore. uploadSuccessTimingHeader = Il link al file scadrà dopo 1 download o in 24 ore.
expireInfo = Il link a questo file scadrà dopo { $downloadCount } o { $timespan }. expireInfo = Il link a questo file scadrà dopo { $downloadCount } o { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 download [one] 1 download
*[other] { $num } download *[other] { $num } download
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 ora [one] 1 ora
*[other] { $num } ore *[other] { $num } ore
} }

View File

@ -26,10 +26,12 @@ uploadSuccessConfirmHeader = 送信準備完了
uploadSvgAlt = アップロード uploadSvgAlt = アップロード
uploadSuccessTimingHeader = ファイルへのリンクは、1 回ダウンロードされた後、もしくは 24 時間以内に期限切れとなります。 uploadSuccessTimingHeader = ファイルへのリンクは、1 回ダウンロードされた後、もしくは 24 時間以内に期限切れとなります。
expireInfo = このファイルへのリンクは { $downloadCount } あるいは { $timespan } 後に期限切れとなります。 expireInfo = このファイルへのリンクは { $downloadCount } あるいは { $timespan } 後に期限切れとなります。
downloadCount = { $num -> downloadCount =
{ $num ->
*[other] { $num } 回のダウンロード *[other] { $num } 回のダウンロード
} }
timespanHours = { $num -> timespanHours =
{ $num ->
*[other] { $num } 時間 *[other] { $num } 時間
} }
copyUrlFormLabelWithName = ファイルを送信するにはこのリンクをコピー、共有してください: { $filename } copyUrlFormLabelWithName = ファイルを送信するにはこのリンクをコピー、共有してください: { $filename }

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Ihegga i walluy
uploadSvgAlt = Sali uploadSvgAlt = Sali
uploadSuccessTimingHeader = Aseɣwen ar ufaylu-ik ad yemmet ticki yuder-d neɣ deffir n 24 n yisragen. 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 }. expireInfo = Aseɣwen icudden ar ufaylu-inek ad yemmet send { $downloadCount } naɣ { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 usider [one] 1 usider
*[other] { $num } isidar *[other] { $num } isidar
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 usrag [one] 1 usrag
*[other] { $num } isragen *[other] { $num } isragen
} }

View File

@ -18,7 +18,7 @@ verifyingFile = 확인하는 중…
encryptingFile = 암호화 중… encryptingFile = 암호화 중…
decryptingFile = 복호화 중… decryptingFile = 복호화 중…
notifyUploadDone = 업로드가 완료되었습니다. notifyUploadDone = 업로드가 완료되었습니다.
uploadingPageMessage = 파일이 업로드 되고나서 만료 옵션을 설정할 수 있습니다. uploadingPageMessage = 파일이 업로드 되고 나서 만료 옵션을 설정할 수 있습니다.
uploadingPageCancel = 업로드 취소 uploadingPageCancel = 업로드 취소
uploadCancelNotification = 업로드가 취소되었습니다. uploadCancelNotification = 업로드가 취소되었습니다.
uploadingPageLargeFileMessage = 이 파일은 크기가 커서 시간이 다소 걸릴 수 있습니다. 잠시만 기다려주세요! uploadingPageLargeFileMessage = 이 파일은 크기가 커서 시간이 다소 걸릴 수 있습니다. 잠시만 기다려주세요!

View File

@ -26,10 +26,12 @@ uploadSuccessConfirmHeader = Sedia untuk Hantar
uploadSvgAlt = Muat naik uploadSvgAlt = Muat naik
uploadSuccessTimingHeader = Pautan ke fail anda akan luput selepas 1 muat turun atau dalam 24 jam. 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 }. expireInfo = Pautan ke fail anda akan luput selepas { $downloadCount } atau { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
*[other] { $num } muat turun *[other] { $num } muat turun
} }
timespanHours = { $num -> timespanHours =
{ $num ->
*[other] { $num } jam *[other] { $num } jam
} }
copyUrlFormLabelWithName = Salin dan kongsi pautan untuk menghantar fail anda: { $filename } copyUrlFormLabelWithName = Salin dan kongsi pautan untuk menghantar fail anda: { $filename }

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Klar til å sende
uploadSvgAlt = Last opp uploadSvgAlt = Last opp
uploadSuccessTimingHeader = Lenken til filen din utløper etter 1 nedlasting eller om 24 timer. 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 }. expireInfo = Lenken til filen din vil gå ut etter { $downloadCount } eller { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 nedlasting [one] 1 nedlasting
*[other] { $num } nedlastinger *[other] { $num } nedlastinger
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 time [one] 1 time
*[other] { $num } timer *[other] { $num } timer
} }

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Gereed voor verzending
uploadSvgAlt = Uploaden uploadSvgAlt = Uploaden
uploadSuccessTimingHeader = De koppeling naar uw bestand zal na 1 download of 24 uur verlopen. 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. expireInfo = De koppeling naar uw bestand zal na { $downloadCount } of { $timespan } verlopen.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 download [one] 1 download
*[other] { $num } downloads *[other] { $num } downloads
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 uur [one] 1 uur
*[other] { $num } uur *[other] { $num } uur
} }

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Klår til å senda
uploadSvgAlt = Last opp uploadSvgAlt = Last opp
uploadSuccessTimingHeader = Lenka til fila di går ut etter 1 nedlasting eller om 24 timar. 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 }. expireInfo = Lenka til fila di vil gå ut etter { $downloadCount } eller { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 nedlasting [one] 1 nedlasting
*[other] { $num } nedlastingar *[other] { $num } nedlastingar
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 time [one] 1 time
*[other] { $num } timar *[other] { $num } timar
} }

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Pronto para enviar
uploadSvgAlt = Enviado uploadSvgAlt = Enviado
uploadSuccessTimingHeader = O link para o seu arquivo expirará após 1 download ou em 24 horas. 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 }. expireInfo = O link para o seu arquivo expirará após { $downloadCount } ou { $timepan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 download [one] 1 download
*[other] { $num } downloads *[other] { $num } downloads
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 hora [one] 1 hora
*[other] { $num } horas *[other] { $num } horas
} }

View File

@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Pripravené na odoslanie
uploadSvgAlt = Nahrať uploadSvgAlt = Nahrať
uploadSuccessTimingHeader = Platnosť odkazu vyprší po 1 prevzatí alebo po uplynutí 24 hodín. 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 }. expireInfo = Platnosť odkazu na váš súbor vyprší po { $downloadCount } alebo po { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 prevzatí [one] 1 prevzatí
[few] { $num } prevzatiach [few] { $num } prevzatiach
*[other] { $num } prevzatiach *[other] { $num } prevzatiach
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 hodine [one] 1 hodine
[few] { $num } hodinách [few] { $num } hodinách
*[other] { $num } hodinách *[other] { $num } hodinách

View File

@ -26,13 +26,15 @@ uploadSuccessConfirmHeader = Pripravljeno za pošiljanje
uploadSvgAlt = Naloži uploadSvgAlt = Naloži
uploadSuccessTimingHeader = Povezava do vaše datoteke bo potekla po enem prenosu ali v 24 urah. 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 }. expireInfo = Povezava do vaše datoteke bo potekla čez { $downloadCount } ali { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 prenos [one] 1 prenos
[two] { $num } prenosa [two] { $num } prenosa
[few] { $num } prenosi [few] { $num } prenosi
*[other] { $num } prenosov *[other] { $num } prenosov
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 ura [one] 1 ura
[two] { $num } uri [two] { $num } uri
[few] { $num } ure [few] { $num } ure

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Gati për Dërgim
uploadSvgAlt = Ngarkoje uploadSvgAlt = Ngarkoje
uploadSuccessTimingHeader = Lidhja për te kartela juaj do të skadojë pas 1 shkarkimi ose pas 24 orësh. 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 }. expireInfo = Lidhja për te kartela juaj do të skadojë pas { $downloadCount } ose { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 shkarkimi [one] 1 shkarkimi
*[other] { $num } shkarkimesh *[other] { $num } shkarkimesh
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 ore [one] 1 ore
*[other] { $num } orësh *[other] { $num } orësh
} }

View File

@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Спреман за слање
uploadSvgAlt = Отпреми uploadSvgAlt = Отпреми
uploadSuccessTimingHeader = Веза ка вашој датотеци ће истећи након једног преузимања или након 24 сата. uploadSuccessTimingHeader = Веза ка вашој датотеци ће истећи након једног преузимања или након 24 сата.
expireInfo = Веза ка вашој датотеци ће истећи након { $downloadCount } или { $timespan }. expireInfo = Веза ка вашој датотеци ће истећи након { $downloadCount } или { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] преузимања [one] преузимања
[few] преузимања [few] преузимања
*[other] преузимања *[other] преузимања
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] сата [one] сата
[few] сата [few] сата
*[other] сати *[other] сати

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Klar för att skicka
uploadSvgAlt = Ladda upp uploadSvgAlt = Ladda upp
uploadSuccessTimingHeader = Länken till din fil upphör att gälla efter 1 nedladdning eller om 24 timmar. 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 }. expireInfo = Länken till din fil upphör att gälla efter { $downloadCount } eller { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 nedladdning [one] 1 nedladdning
*[other] { $num } nedladdningar *[other] { $num } nedladdningar
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 timme [one] 1 timme
*[other] { $num } timmar *[other] { $num } timmar
} }

View File

@ -7,6 +7,7 @@ uploadPageDropMessage = ఎగుమతిని ప్రారంభించ
uploadPageSizeMessage = అత్యంత నమ్మకమైన కార్యం కోసం, మీ ఫైలును 1GB కంటే తక్కువగా ఉంచడం ఉత్తమం uploadPageSizeMessage = అత్యంత నమ్మకమైన కార్యం కోసం, మీ ఫైలును 1GB కంటే తక్కువగా ఉంచడం ఉత్తమం
uploadPageBrowseButton = మీ కంప్యూటర్లో ఒక ఫైలును ఎంచుకోండి uploadPageBrowseButton = మీ కంప్యూటర్లో ఒక ఫైలును ఎంచుకోండి
uploadPageBrowseButton1 = ఎక్కించటానికి ఒక ఫైలును ఎంచుకోండి uploadPageBrowseButton1 = ఎక్కించటానికి ఒక ఫైలును ఎంచుకోండి
uploadPageMultipleFilesAlert = పలు ఫైళ్ళను లేదా సంయచాన్ని ఎక్కించడానికి ప్రస్తుతం తోడ్పాటు లేదు.
uploadPageBrowseButtonTitle = ఫైలును ఎగుమతి చేయండి uploadPageBrowseButtonTitle = ఫైలును ఎగుమతి చేయండి
uploadingPageProgress = { $filename } ({ $size }) ఎక్కుతోంది uploadingPageProgress = { $filename } ({ $size }) ఎక్కుతోంది
importingFile = దిగుమతవుతోంది... importingFile = దిగుమతవుతోంది...
@ -64,6 +65,7 @@ errorAltText = ఎగుమతిలో లోపం
errorPageHeader = ఏదో తప్పిదం జరిగింది! errorPageHeader = ఏదో తప్పిదం జరిగింది!
errorPageMessage = ఫైల్ను ఎగుమతి చేయడంలో లోపం ఉంది. errorPageMessage = ఫైల్ను ఎగుమతి చేయడంలో లోపం ఉంది.
errorPageLink = మరో ఫైలును పంపండి errorPageLink = మరో ఫైలును పంపండి
fileTooBig = ఆ ఫైలు ఎక్కించడానికి చాలా పెద్దగా ఉంది. ఫైళ్ళు { $size } కంటే తక్కువ పరిమాణంలో ఉండాలి.
linkExpiredAlt = లంకె గడువు ముగిసింది linkExpiredAlt = లంకె గడువు ముగిసింది
expiredPageHeader = ఈ లంకె గడువు ముగిసింది లేదా ముందు ఎప్పుడూ ఉనికిలో లేదు! expiredPageHeader = ఈ లంకె గడువు ముగిసింది లేదా ముందు ఎప్పుడూ ఉనికిలో లేదు!
notSupportedHeader = మీ విహారిణికి మద్దతు లేదు. notSupportedHeader = మీ విహారిణికి మద్దతు లేదు.

View File

@ -26,11 +26,13 @@ uploadSuccessConfirmHeader = Handa nang Ipadala
uploadSvgAlt = I-upload uploadSvgAlt = I-upload
uploadSuccessTimingHeader = Mag-e-expire ang link sa iyong file pagkatapos ng 1 pag-download o sa loob ng 24 na oras. 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 }. expireInfo = Mag-e-expire ang link sa iyong file pagkatapos ng { $downloadCount } o { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 pag-download [one] 1 pag-download
*[other] { $num } na mga pag-download *[other] { $num } na mga pag-download
} }
timespanHours = { $num -> timespanHours =
{ $num ->
*[one] 1 oras *[one] 1 oras
} }
copyUrlFormLabelWithName = Kopyahin at ibahagi ang link upang ipadala ang iyong file: { $filename } copyUrlFormLabelWithName = Kopyahin at ibahagi ang link upang ipadala ang iyong file: { $filename }

View File

@ -84,7 +84,7 @@ expiryFileList = Bitiş süresi
deleteFileList = Sil deleteFileList = Sil
nevermindButton = Boş ver nevermindButton = Boş ver
legalHeader = Şart ve Koşullar legalHeader = Şart ve Koşullar
legalNoticeTestPilot = Firefox Send bir Test Pilotu deneyidir ve Test Pilotu <a>Hizmet Koşulları</a> ile <a>Gizlilik Bildirimi</a>ne tabidir. Bu deney ve topladığı veriler hakkında daha fazla bilgi almak isterseniz <a>buraya</a> bakabilirsiniz. legalNoticeTestPilot = Firefox Send bir Test Pilotu deneyidir ve Test Pilotu <a>Hizmet Koşulları</a> ile <a>Gizlilik Bildirimi</a>ne tabidir. Bu deney ve topladığı veriler hakkında daha fazla bilgi almak isterseniz <a>buraya</a> bakabilirsiniz.
legalNoticeMozilla = Firefox Sendi kullanmak Mozillanın <a>Web Siteleri Gizlilik Bildirimi</a> ve <a>Web Siteleri Kullanım Koşulları</a>na da tabidir. legalNoticeMozilla = Firefox Sendi kullanmak Mozillanın <a>Web Siteleri Gizlilik Bildirimi</a> ve <a>Web Siteleri Kullanım Koşulları</a>na da tabidir.
deletePopupText = Bu dosya silinsin mi? deletePopupText = Bu dosya silinsin mi?
deletePopupYes = Evet deletePopupYes = Evet

View File

@ -26,12 +26,14 @@ uploadSuccessConfirmHeader = Готовий до надсилання
uploadSvgAlt = Вивантажити uploadSvgAlt = Вивантажити
uploadSuccessTimingHeader = Час дії цього посилання закінчиться після 1 завантаження, або через 24 години. uploadSuccessTimingHeader = Час дії цього посилання закінчиться після 1 завантаження, або через 24 години.
expireInfo = Посилання на ваш файл стане недійсним після { $downloadCount } файла, або через { $timespan }. expireInfo = Посилання на ваш файл стане недійсним після { $downloadCount } файла, або через { $timespan }.
downloadCount = { $num -> downloadCount =
{ $num ->
[one] 1 завантаження [one] 1 завантаження
[few] { $num } завантаження [few] { $num } завантаження
*[other] { $num } завантажень *[other] { $num } завантажень
} }
timespanHours = { $num -> timespanHours =
{ $num ->
[one] 1 година [one] 1 година
[few] { $num } години [few] { $num } години
*[other] { $num } годин *[other] { $num } годин

View File

@ -26,10 +26,12 @@ uploadSuccessConfirmHeader = 准备好发送
uploadSvgAlt = 上传 uploadSvgAlt = 上传
uploadSuccessTimingHeader = 您的文件的链接将在首次下载或 24 小时后过期。 uploadSuccessTimingHeader = 您的文件的链接将在首次下载或 24 小时后过期。
expireInfo = 指向该文件的链接将在 { $downloadCount } 或 { $timespan } 后过期。 expireInfo = 指向该文件的链接将在 { $downloadCount } 或 { $timespan } 后过期。
downloadCount = { $num -> downloadCount =
{ $num ->
*[other] { $num } 次下载 *[other] { $num } 次下载
} }
timespanHours = { $num -> timespanHours =
{ $num ->
*[other] { $num } 小时 *[other] { $num } 小时
} }
copyUrlFormLabelWithName = 复制并分享链接以发送您的文件:{ $filename } copyUrlFormLabelWithName = 复制并分享链接以发送您的文件:{ $filename }

View File

@ -26,10 +26,12 @@ uploadSuccessConfirmHeader = 準備好傳送
uploadSvgAlt = 上傳 uploadSvgAlt = 上傳
uploadSuccessTimingHeader = 您的檔案鏈結將會在首次下載,或 24 小時後失效。 uploadSuccessTimingHeader = 您的檔案鏈結將會在首次下載,或 24 小時後失效。
expireInfo = 檔案鏈結將在 { $downloadCount }或 { $timespan }後失效。 expireInfo = 檔案鏈結將在 { $downloadCount }或 { $timespan }後失效。
downloadCount = { $num -> downloadCount =
{ $num ->
*[other] { $num } 次下載 *[other] { $num } 次下載
} }
timespanHours = { $num -> timespanHours =
{ $num ->
*[other] { $num } 小時 *[other] { $num } 小時
} }
copyUrlFormLabelWithName = 複製並分享鏈結來傳送您的檔案: { $filename } copyUrlFormLabelWithName = 複製並分享鏈結來傳送您的檔案: { $filename }

View File

@ -14,8 +14,17 @@ module.exports = async function(req, res) {
'WWW-Authenticate': `send-v1 ${req.nonce}` 'WWW-Authenticate': `send-v1 ${req.nonce}`
}); });
const file_stream = storage.get(id); 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 dl = meta.dl + 1;
const dlimit = meta.dlimit; const dlimit = meta.dlimit;
try { try {
@ -28,6 +37,7 @@ module.exports = async function(req, res) {
log.info('StorageError:', id); log.info('StorageError:', id);
} }
}); });
file_stream.pipe(res); file_stream.pipe(res);
} catch (e) { } catch (e) {
res.sendStatus(404); res.sendStatus(404);

View File

@ -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() { it('can allow multiple downloads', async function() {
const fs = new FileSender(blob); const fs = new FileSender(blob);
const file = await fs.upload(); const file = await fs.upload();

View File

@ -1,8 +1,8 @@
selenium==3.12.0 selenium==3.13.0
flake8==3.5.0 flake8==3.5.0
flake8-isort==2.5 flake8-isort==2.5
PyPOM==2.0.0 PyPOM==2.0.0
pytest==3.6.0 pytest==3.6.3
pytest-html==1.18.0 pytest-html==1.19.0
pytest-selenium==1.13.0 pytest-selenium==1.13.0
pytest-xdist==1.22.2 pytest-xdist==1.22.2