Compare commits

..

33 Commits

Author SHA1 Message Date
Danny Coates
cbd7a99e38 v3.0.8 2019-03-18 16:26:12 -07:00
Danny Coates
6a5960c254 updated CONTRIBUTORS 2019-03-18 15:38:28 -07:00
Danny Coates
b70cbd8359 Merge pull request #1259 from co16353sidak/patch-1
Updated file size limit (as of March 2019)
2019-03-18 15:33:35 -07:00
Danny Coates
ad72fa11a4 added locales to production 2019-03-18 15:26:06 -07:00
Danny Coates
cc9a5d112a added entrypoint param to fxa auth request 2019-03-18 15:01:01 -07:00
Danny Coates
122867b926 updated webcrypto-liner 2019-03-18 12:43:20 -07:00
Michal Stanke
3f7d755070 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-03-18 18:11:34 +00:00
Danny Coates
ad9070b7c6 changed webpack output filenames to use contenthash 2019-03-17 19:21:28 -07:00
Sidak Singh Aulakh
30678b824b Updated file size limit (as of March 2019)
The file size limit was previously marked as 2 hours, but now it supports 2.5GB (1GB for non signed in users)
2019-03-17 21:44:01 +05:30
josotrix
5dedad8ae7 Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Localization authors:
- josotrix <josotrix@ravmn.cl>
- ravmn <ravmn@ravmn.cl>
2019-03-17 15:53:11 +00:00
victor.gonzalezro
748f8cc7f8 Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Localization authors:
- victor.gonzalezro <victor.gonzalezro@gmail.com>
- josotrix <josotrix@ravmn.cl>
2019-03-16 19:51:52 +00:00
Victor Bychek
be9b51adbb Pontoon: Update Russian (ru) localization of Firefox Send
Localization authors:
- MytnikAA <MytnikAA@gmail.com>
- Victor Bychek <a@bychek.ru>
2019-03-16 16:32:15 +00:00
Danny Coates
7f13d4d9b6 fixed incorrect uncompressed size in zip 2019-03-16 09:19:28 -07:00
Edi Santoso
0e81ef2514 Pontoon: Update Indonesian (id) localization of Firefox Send
Localization authors:
- Edi Santoso <repopamor@gmail.com>
2019-03-16 14:12:13 +00:00
Björn I
b0907095e4 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-03-16 12:12:58 +00:00
Piotr Drąg
c4cc736cff Pontoon: Update Polish (pl) localization of Firefox Send
Localization authors:
- tomowoj <tomowoj@gmail.com>
- Piotr Drąg <piotrdrag@gmail.com>
- Paweł <bauerp@bauerp.info>
2019-03-16 11:18:13 +00:00
Piotr Drąg
c4118c5684 Pontoon: Update Polish (pl) localization of Firefox Send
Localization authors:
- tomowoj <tomowoj@gmail.com>
- Piotr Drąg <piotrdrag@gmail.com>
- Paweł <bauerp@bauerp.info>
2019-03-16 10:52:16 +00:00
Jakob Kappel
fad35cf8fc Pontoon: Update Danish (da) localization of Firefox Send
Localization authors:
- Jakob Kappel <jakobkpetersen@gmail.com>
2019-03-16 09:32:00 +00:00
Edi Santoso
062cbbd1f8 Pontoon: Update Indonesian (id) localization of Firefox Send
Localization authors:
- Francesco Lodolo <francesco.lodolo@mozillaitalia.org>
- Edi Santoso <repopamor@gmail.com>
2019-03-16 06:32:00 +00:00
dskmori
f200bd51d2 Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- dskmori <ghoti.fish.dsk@gmail.com>
2019-03-16 02:52:18 +00:00
Enol
152616574f Pontoon: Update Asturian (ast) localization of Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2019-03-15 18:52:57 +00:00
Enol
822fcb363d Pontoon: Update Asturian (ast) localization of Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2019-03-15 18:32:08 +00:00
Enol
e1c6e59495 Pontoon: Update Asturian (ast) localization of Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2019-03-15 18:12:41 +00:00
Danny Coates
d42d8f8b75 v3.0.7 2019-03-15 09:40:03 -07:00
Danny Coates
ebbb1d05d2 use crypto.timingSafeEqual in hmac and ownerToken authentication 2019-03-14 22:09:34 -07:00
Melo46
67b55d1477 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Melo46 <melo@carmu.com>
2019-03-14 23:52:14 +00:00
Danny Coates
e3391ca823 Merge pull request #1242 from mgalicer/fix-1130
[Integration-Test] Add test to ensure that file size stays consistent
2019-03-14 14:54:37 -07:00
ravmn
0cac3bd0dc Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Localization authors:
- victor.gonzalezro <victor.gonzalezro@gmail.com>
- josotrix <josotrix@ravmn.cl>
- ravmn <ravmn@ravmn.cl>
2019-03-14 21:52:00 +00:00
Juan Sián
78de0b7a22 Pontoon: Update Kaqchikel (cak) localization of Firefox Send
Localization authors:
- Juan Sián <ajtzibsyan@yahoo.com>
2019-03-14 21:51:56 +00:00
Juraj Cigáň
14308dc491 Pontoon: Update Slovak (sk) localization of Firefox Send
Localization authors:
- Juraj Cigáň <kusavica@gmail.com>
2019-03-14 21:31:50 +00:00
Danny Coates
f690e4a705 v3.0.6 2019-03-14 13:19:25 -07:00
Danny Coates
3e14d3049d only index / route 2019-03-14 13:17:47 -07:00
marigalicer
0012dec277 [Integration-Test] Add test to ensure that file size stays consistent
fixes #1130
2019-03-13 16:03:44 -04:00
24 changed files with 749 additions and 240 deletions

View File

@@ -5,17 +5,26 @@ Alberto Castro
Alexander Slovesnik Alexander Slovesnik
Alfredos-Panagiotis Damkalis Alfredos-Panagiotis Damkalis
Amin Mahmudian Amin Mahmudian
Ander Elortondo
Andreas Pettersson Andreas Pettersson
Anesu Chiodza
Anika Dorn
Arash Mousavi Arash Mousavi
Artem Polivanchuk Artem Polivanchuk
Ashikur Rahman Ashikur Rahman
Ashok kumar
Balázs Meskó Balázs Meskó
Belayet Hossain Belayet Hossain
Benjamin Forehand Jr
Besnik Bleta Besnik Bleta
Björn I
Bjørn I Bjørn I
Boopesh Mahendran Boopesh Mahendran
Brainlulz
Breana Gonzales Breana Gonzales
Christopher Ramírez
Chuck Harmston Chuck Harmston
Cloney 173741
Cláudio Esperança Cláudio Esperança
Cristian Silaghi Cristian Silaghi
Cynthia Pereira Cynthia Pereira
@@ -23,38 +32,53 @@ Daniel Thorn
Daniela Arcese Daniela Arcese
Danny Coates Danny Coates
Derek Tamsen Derek Tamsen
Dhyey Thakore
Donovan Preston
Edi Santoso
Edmund Huggett Edmund Huggett
Elisa X Elisa X
Emily
Emily Hou
Emin Mastizada Emin Mastizada
Enol Enol
Erica Erica
Erica Wright Erica Wright
Fauzan Alfi
Filip Hruška Filip Hruška
Fjoerfoks Fjoerfoks
Francesco Lodolo Francesco Lodolo
Francesco Lodolo [:flod] Francesco Lodolo [:flod]
Frederick Villaluna Frederick Villaluna
G12r
Gabriela Gabriela
Gautam krishna.R Gautam krishna.R
Georgianizator Georgianizator
Gonçalo Matos Gonçalo Matos
Hyeonseok Shin Hyeonseok Shin
Håvar Henriksen Håvar Henriksen
Ian Neal
Jae Hyeon Park Jae Hyeon Park
Jakob Kappel
Jakub Rychlý Jakub Rychlý
Jamie Jamie
Jarmo
Jim Spentzos Jim Spentzos
Jiri Grönroos
Jobava Jobava
Joergen
Johann-S Johann-S
John Gruen John Gruen
Jon Buckley
Jon Vadillo Jon Vadillo
Jonathan Claudius Jonathan Claudius
Jordi Cuevas Jordi Cuevas
Jordi Serratosa Jordi Serratosa
Juan Esteban Ajsivinac Sián Juan Esteban Ajsivinac Sián
Juan Sián
Juraj Cigáň Juraj Cigáň
Kerim Kalamujić Kerim Kalamujić
Khaled Hosny Khaled Hosny
Kim Ludvigsen
Kohei Yoshino Kohei Yoshino
Lan Glad Lan Glad
Laurent Jouanneau Laurent Jouanneau
@@ -62,11 +86,15 @@ Lobodzets
LuFlo LuFlo
Luiz Carlos de Morais Luiz Carlos de Morais
Luna Jernberg Luna Jernberg
Mahay Alam Khan
Marcelo Ghelman
Marcelo Poli Marcelo Poli
Marco Aurélio Marco Aurélio
Mark Heijl Mark Heijl
Mark Liang Mark Liang
Mark Liang (You-Wen)
Marko Andrejić Marko Andrejić
Marwan Mohamad
Matjaž Horvat Matjaž Horvat
Maykon Chagas Maykon Chagas
Melo46 Melo46
@@ -75,9 +103,13 @@ Michael Köhler
Michael Wolf Michael Wolf
Michal Stanke Michal Stanke
Michal Vašíček Michal Vašíček
Mikeyy
Miro Rauhala
Mozilla Pontoon Mozilla Pontoon
Mozinet
Moḥend Belqasem Moḥend Belqasem
Muḥend Belqasem Muḥend Belqasem
Myungjae Won
Nicholas Skinsacos Nicholas Skinsacos
Nihad Nihad
Nihad Suljić Nihad Suljić
@@ -85,14 +117,20 @@ Oscar
Peter deHaan Peter deHaan
Pierre Neter Pierre Neter
Pin-guang Chen Pin-guang Chen
Piotr Drąg
Quế Tùng
Radu Popescu Radu Popescu
Rhoslyn Prys Rhoslyn Prys
RickieES RickieES
Rimas Kudelis
Rizky Ariestiyansyah Rizky Ariestiyansyah
Rob Powell
Roberto Alvarado Roberto Alvarado
Rodrigo Rodrigo
Rodrigo Guerra Rodrigo Guerra
Rok Žerdin Rok Žerdin
Rongjian Zhang
Ruba
Sahithi Sahithi
Sairam Raavi Sairam Raavi
Sander Lepik Sander Lepik
@@ -108,25 +146,34 @@ Tema
Thomas Dalichow Thomas Dalichow
Théo Chevalier Théo Chevalier
Tiago Morais Morgado Tiago Morais Morgado
Tim Visée
Tomer Cohen
Tomáš Zelina Tomáš Zelina
Ton Ton
Tymur Faradzhev Tymur Faradzhev
Uccen Marzuq Uccen Marzuq
Varghese Thomas Varghese Thomas
Victor Bychek Victor Bychek
Vimal Raghubir
Vitaliy Krutko Vitaliy Krutko
Weihang Lo Weihang Lo
Wil Clouser Wil Clouser
YFdyh000 YFdyh000
Yongmin H
You-Wen Liang (Mark) You-Wen Liang (Mark)
aaaaalbert
aefgh39622 aefgh39622
alamanda
albertdcastro albertdcastro
alex_mayorga alex_mayorga
ariestiyansyah ariestiyansyah
avelper avelper
chilledfrogs
dgadelha dgadelha
dskmori
ehuggett ehuggett
eljuno eljuno
emily-hou1
erdem cobanoglu erdem cobanoglu
gautamkrishnar gautamkrishnar
gmontagu gmontagu
@@ -137,21 +184,36 @@ jesferman1993
jlG jlG
josotrix josotrix
jspam jspam
julenx
kenrick95 kenrick95
manxmensch manxmensch
marigalicer
mirzet.omerovic.1992 mirzet.omerovic.1992
passionforlife
paul.trevor
pyup.io bot
ravmn ravmn
rcmainak rcmainak
reza.habibi2008 reza.habibi2008
risger
robbp
ruikunai
savemore99.sm savemore99.sm
shikhar-scs shikhar-scs
siparon siparon
skystar-p skystar-p
stripTM
tatalmondmush
tiagomoraismorgado tiagomoraismorgado
timvisee timvisee
victor.gonzalezro
xcffl xcffl
ybouhamam ybouhamam
yoshimitsu002
Μιχάλης Μιχάλης
Марко Костић (Marko Kostić) Марко Костић (Marko Kostić)
صفا الفليج صفا الفليج
వీవెన్ వీవెన్
张无忌
新垣结衣松冈茉优长泽雅美门胁麦上野树里石原里美
莫非前世那一眼

View File

@@ -94,10 +94,12 @@ export default class User {
return this.loggedIn ? hashId(this.storage.id) : hashId(anonId); return this.loggedIn ? hashId(this.storage.id) : hashId(anonId);
} }
async startAuthFlow(source, utms = {}) { async startAuthFlow(trigger, utms = {}) {
this.utms = utms;
this.trigger = trigger;
try { try {
const params = new URLSearchParams({ const params = new URLSearchParams({
entrypoint: `send-${source}`, entrypoint: `send-${trigger}`,
form_type: 'email', form_type: 'email',
utm_source: utms.source || 'send', utm_source: utms.source || 'send',
utm_campaign: utms.campaign || 'none' utm_campaign: utms.campaign || 'none'
@@ -111,12 +113,10 @@ export default class User {
const { flowId, flowBeginTime } = await res.json(); const { flowId, flowBeginTime } = await res.json();
this.flowId = flowId; this.flowId = flowId;
this.flowBeginTime = flowBeginTime; this.flowBeginTime = flowBeginTime;
this.utms = utms;
} catch (e) { } catch (e) {
console.error(e); console.error(e);
this.flowId = null; this.flowId = null;
this.flowBeginTime = null; this.flowBeginTime = null;
this.utms = null;
} }
} }
@@ -142,6 +142,9 @@ export default class User {
options.flow_id = this.flowId; options.flow_id = this.flowId;
options.flow_begin_time = this.flowBeginTime; options.flow_begin_time = this.flowBeginTime;
} }
if (this.trigger) {
options.endpoint = `send-${this.trigger}`;
}
if (this.utms) { if (this.utms) {
options.utm_campaign = this.utms.campaign || 'none'; options.utm_campaign = this.utms.campaign || 'none';
options.utm_content = this.utms.content || 'none'; options.utm_content = this.utms.content || 'none';

View File

@@ -50,7 +50,7 @@ class File {
v.setUint32(0, 0x08074b50, true); // sig v.setUint32(0, 0x08074b50, true); // sig
v.setUint32(4, this.crc, true); // crc32 v.setUint32(4, this.crc, true); // crc32
v.setUint32(8, this.size, true); // compressed size v.setUint32(8, this.size, true); // compressed size
v.setUint16(12, this.size, true); // uncompressed size v.setUint32(12, this.size, true); // uncompressed size
return new Uint8Array(dd); return new Uint8Array(dd);
} }
@@ -60,7 +60,7 @@ class File {
v.setUint32(0, 0x02014b50, true); // sig v.setUint32(0, 0x02014b50, true); // sig
v.setUint16(4, 20, true); // version made v.setUint16(4, 20, true); // version made
v.setUint16(6, 20, true); // version required v.setUint16(6, 20, true); // version required
v.setUint16(8, 0, true); // bit flags v.setUint16(8, 8, true); // bit flags (8 = use data descriptor)
v.setUint16(10, 0, true); // compression v.setUint16(10, 0, true); // compression
v.setUint16(12, this.dateTime.time, true); // modified time v.setUint16(12, this.dateTime.time, true); // modified time
v.setUint16(14, this.dateTime.date, true); // modified date v.setUint16(14, this.dateTime.date, true); // modified date

View File

@@ -1,6 +1,6 @@
## How big of a file can I transfer with Firefox Send? ## How big of a file can I transfer with Firefox Send?
There is a 2GB file size limit built in to Send, however, in practice you may There is a 2.5GB file size limit built in to Send(1GB for non-signed in users), however, in practice you may
be unable to send files that large. Send encrypts and decrypts the files in be unable to send files that large. Send encrypts and decrypts the files in
the browser which is great for security but will tax your system resources. In the browser which is great for security but will tax your system resources. In
particular you can expect to see your memory usage go up by at least the size particular you can expect to see your memory usage go up by at least the size

234
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{ {
"name": "firefox-send", "name": "firefox-send",
"version": "3.0.5", "version": "3.0.8",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@@ -965,14 +965,29 @@
"integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==",
"dev": true "dev": true
}, },
"@dannycoates/webcrypto-liner": { "@dannycoates/elliptic": {
"version": "0.1.34", "version": "6.4.2",
"resolved": "https://registry.npmjs.org/@dannycoates/webcrypto-liner/-/webcrypto-liner-0.1.34.tgz", "resolved": "https://registry.npmjs.org/@dannycoates/elliptic/-/elliptic-6.4.2.tgz",
"integrity": "sha512-QTP7EIlNkcp3jA5XAHk3uU6q3ZOcXOHRZnmzt+yDPf9dhLa5QR99ooHC8JHrD/J4dwVKuMY995aMCGF+M0g5Cg==", "integrity": "sha512-2G4qWMB2SRBk4H75d+BFBbz2b1cseIYCI8G7duGxtxdnjGxhewpripDsVr1lCagmijyYX4zDyfKTNoId5GGyow==",
"dev": true, "dev": true,
"requires": { "requires": {
"bn.js": "^4.4.0",
"brorand": "^1.0.1",
"hash.js": "^1.0.0",
"hmac-drbg": "^1.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.0"
}
},
"@dannycoates/webcrypto-liner": {
"version": "0.1.37",
"resolved": "https://registry.npmjs.org/@dannycoates/webcrypto-liner/-/webcrypto-liner-0.1.37.tgz",
"integrity": "sha512-EM29TDkn7GJaa/oOfLeS1vrAxEkyM+WfUsmHTz7OyrxvMZNqz2SiYdZkXBIvg+QCnKTfXc2x//ORAilesugQlg==",
"dev": true,
"requires": {
"@dannycoates/elliptic": "^6.4.2",
"asmcrypto.js": "^0.22.0", "asmcrypto.js": "^0.22.0",
"elliptic": "^6.4.1",
"webcrypto-core": "github:dannycoates/webcrypto-core#8e0152a66d3ae6329cf080ccb3085eb06637070f" "webcrypto-core": "github:dannycoates/webcrypto-core#8e0152a66d3ae6329cf080ccb3085eb06637070f"
} }
}, },
@@ -2413,8 +2428,7 @@
"buffer-crc32": { "buffer-crc32": {
"version": "0.2.13", "version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
"dev": true
}, },
"buffer-equal-constant-time": { "buffer-equal-constant-time": {
"version": "1.0.1", "version": "1.0.1",
@@ -5863,8 +5877,7 @@
"fs-constants": { "fs-constants": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
"dev": true
}, },
"fs-extra": { "fs-extra": {
"version": "4.0.3", "version": "4.0.3",
@@ -8054,8 +8067,7 @@
"isexe": { "isexe": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
"dev": true
}, },
"isobject": { "isobject": {
"version": "3.0.1", "version": "3.0.1",
@@ -8305,6 +8317,15 @@
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true "dev": true
}, },
"klaw": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
"integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.9"
}
},
"known-css-properties": { "known-css-properties": {
"version": "0.11.0", "version": "0.11.0",
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.11.0.tgz", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.11.0.tgz",
@@ -9616,8 +9637,7 @@
"nice-try": { "nice-try": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
"dev": true
}, },
"nise": { "nise": {
"version": "1.4.10", "version": "1.4.10",
@@ -11426,8 +11446,7 @@
"path-key": { "path-key": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
"dev": true
}, },
"path-parse": { "path-parse": {
"version": "1.0.6", "version": "1.0.6",
@@ -11475,8 +11494,7 @@
"pend": { "pend": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
"dev": true
}, },
"perfectionist": { "perfectionist": {
"version": "2.4.0", "version": "2.4.0",
@@ -12778,8 +12796,7 @@
"progress": { "progress": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
"dev": true
}, },
"promise-inflight": { "promise-inflight": {
"version": "1.0.1", "version": "1.0.1",
@@ -12915,6 +12932,15 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true "dev": true
},
"ws": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.0.tgz",
"integrity": "sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w==",
"dev": true,
"requires": {
"async-limiter": "~1.0.0"
}
} }
} }
}, },
@@ -13840,6 +13866,130 @@
"integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
"dev": true "dev": true
}, },
"selenium-standalone": {
"version": "6.16.0",
"resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.16.0.tgz",
"integrity": "sha512-tl7HFH2FOxJD1is7Pzzsl0pY4vuePSdSWiJdPn+6ETBkpeJDiuzou8hBjvWYWpD+eIVcOrmy3L0R3GzkdHLzDw==",
"requires": {
"async": "^2.6.2",
"commander": "^2.19.0",
"cross-spawn": "^6.0.5",
"debug": "^4.1.1",
"lodash": "^4.17.11",
"minimist": "^1.2.0",
"mkdirp": "^0.5.1",
"progress": "2.0.3",
"request": "2.88.0",
"tar-stream": "2.0.0",
"urijs": "^1.19.1",
"which": "^1.3.1",
"yauzl": "^2.10.0"
},
"dependencies": {
"async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
"integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
"requires": {
"lodash": "^4.17.11"
}
},
"bl": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz",
"integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==",
"requires": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
},
"dependencies": {
"readable-stream": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
}
}
},
"commander": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
"integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
},
"cross-spawn": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"requires": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
},
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
},
"fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
"requires": {
"pend": "~1.2.0"
}
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
},
"readable-stream": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz",
"integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
},
"tar-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.0.0.tgz",
"integrity": "sha512-n2vtsWshZOVr/SY4KtslPoUlyNh06I2SGgAOCZmquCEjlbV/LjY2CY80rDtdQRHFOYXNlgBDo6Fr3ww2CWPOtA==",
"requires": {
"bl": "^2.2.0",
"end-of-stream": "^1.4.1",
"fs-constants": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.1.1"
}
},
"yauzl": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
"integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
"requires": {
"buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
}
}
}
},
"selfsigned": { "selfsigned": {
"version": "1.10.4", "version": "1.10.4",
"resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz",
@@ -14000,7 +14150,6 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"requires": { "requires": {
"shebang-regex": "^1.0.0" "shebang-regex": "^1.0.0"
} }
@@ -14008,8 +14157,7 @@
"shebang-regex": { "shebang-regex": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
"dev": true
}, },
"shell-quote": { "shell-quote": {
"version": "1.6.1", "version": "1.6.1",
@@ -16199,6 +16347,11 @@
"punycode": "^2.1.0" "punycode": "^2.1.0"
} }
}, },
"urijs": {
"version": "1.19.1",
"resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz",
"integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg=="
},
"urix": { "urix": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
@@ -16576,6 +16729,40 @@
"sauce-connect-launcher": "~1.2.3" "sauce-connect-launcher": "~1.2.3"
} }
}, },
"wdio-selenium-standalone-service": {
"version": "0.0.12",
"resolved": "https://registry.npmjs.org/wdio-selenium-standalone-service/-/wdio-selenium-standalone-service-0.0.12.tgz",
"integrity": "sha512-R8iUL30SkFfZictAG5wRofeCsHQ4bIucDtaArCQWZkUqS+DlGTStIk3TaIOCaX7dS7UW1YN/lJt9Vsn4Ekmoxg==",
"dev": true,
"requires": {
"fs-extra": "^0.30.0",
"selenium-standalone": "^6.15.4"
},
"dependencies": {
"fs-extra": {
"version": "0.30.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
"integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^2.1.0",
"klaw": "^1.0.0",
"path-is-absolute": "^1.0.0",
"rimraf": "^2.2.8"
}
},
"jsonfile": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
"integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6"
}
}
}
},
"wdio-spec-reporter": { "wdio-spec-reporter": {
"version": "0.1.5", "version": "0.1.5",
"resolved": "https://registry.npmjs.org/wdio-spec-reporter/-/wdio-spec-reporter-0.1.5.tgz", "resolved": "https://registry.npmjs.org/wdio-spec-reporter/-/wdio-spec-reporter-0.1.5.tgz",
@@ -17284,7 +17471,6 @@
"version": "1.3.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
"requires": { "requires": {
"isexe": "^2.0.0" "isexe": "^2.0.0"
} }

View File

@@ -1,7 +1,7 @@
{ {
"name": "firefox-send", "name": "firefox-send",
"description": "File Sharing Experiment", "description": "File Sharing Experiment",
"version": "3.0.5", "version": "3.0.8",
"author": "Mozilla (https://mozilla.org)", "author": "Mozilla (https://mozilla.org)",
"repository": "mozilla/send", "repository": "mozilla/send",
"homepage": "https://github.com/mozilla/send/", "homepage": "https://github.com/mozilla/send/",
@@ -64,7 +64,7 @@
"@babel/plugin-proposal-class-properties": "^7.3.4", "@babel/plugin-proposal-class-properties": "^7.3.4",
"@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/plugin-syntax-dynamic-import": "^7.2.0",
"@babel/preset-env": "^7.3.4", "@babel/preset-env": "^7.3.4",
"@dannycoates/webcrypto-liner": "^0.1.34", "@dannycoates/webcrypto-liner": "^0.1.37",
"@dannycoates/webpack-dev-server": "^3.1.4", "@dannycoates/webpack-dev-server": "^3.1.4",
"@fullhuman/postcss-purgecss": "^1.1.0", "@fullhuman/postcss-purgecss": "^1.1.0",
"@mattiasbuelens/web-streams-polyfill": "0.2.1", "@mattiasbuelens/web-streams-polyfill": "0.2.1",
@@ -159,6 +159,7 @@
}, },
"availableLanguages": [ "availableLanguages": [
"en-US", "en-US",
"ast",
"bn-BD", "bn-BD",
"ca", "ca",
"cak", "cak",
@@ -170,6 +171,7 @@
"en-CA", "en-CA",
"en-GB", "en-GB",
"es-AR", "es-AR",
"es-CL",
"es-ES", "es-ES",
"es-MX", "es-MX",
"fr", "fr",
@@ -177,6 +179,7 @@
"hr", "hr",
"hsb", "hsb",
"hu", "hu",
"ia",
"id", "id",
"it", "it",
"ja", "ja",
@@ -184,6 +187,7 @@
"lt", "lt",
"nl", "nl",
"nn-NO", "nn-NO",
"pl",
"pt-BR", "pt-BR",
"pt-PT", "pt-PT",
"ro", "ro",

View File

@@ -1,31 +1,9 @@
# 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 = esperimentu web siteFeedback = Comentarios
siteFeedback = Feedback
uploadPageHeader = Compartición privada y cifrada de ficheros
uploadPageExplainer = Unvia ficheros pente un enllaz seguru, priváu y cifráu que caduca automáticamente p'asegurar que les tos coses nun queden siempres na rede.
uploadPageLearnMore = Deprendi más
uploadPageDropMessage = Suelta equí'l to ficheru p'aniciar la xuba
uploadPageSizeMessage = Pal meyor funcionamientu, lo meyor ye que'l to ficheru seya menor de 1GB
uploadPageBrowseButton = Esbilla un ficheru nel to ordenador
uploadPageBrowseButton1 = Esbilla un ficheru pa unviar
uploadPageMultipleFilesAlert = Anguaño nun se sofita la xuba múltiple de ficheros o carpetes.
uploadPageBrowseButtonTitle = Xubir ficheru
uploadingPageProgress = Xubiendo { $filename } ({ $size })
importingFile = Importando... importingFile = Importando...
verifyingFile = Verificando...
encryptingFile = Cifrando... encryptingFile = Cifrando...
decryptingFile = Descifrando... decryptingFile = Descifrando...
notifyUploadDone = Finó la to xuba.
uploadingPageMessage = Namái que'l ficheru xuba, sedrás a afitar les opciones de caducidá.
uploadingPageCancel = Encaboxar xuba
uploadCancelNotification = Encaboxóse la to xuba.
uploadingPageLargeFileMessage = Esti ficheru ye grande y pue entardar daqué en xubir. ¡Paciencia!
uploadingFileNotification = Avísame cuando se complete la xuba.
uploadSuccessConfirmHeader = Preparáu pa unviar
uploadSvgAlt = Xubir
uploadSuccessTimingHeader = L'enllaz del to ficheru caducará dempués d'una descarga o en 24 hores.
expireInfo = L'enllaz al ficheru va caducar tres { $downloadCount } o { $timespan }.
downloadCount = downloadCount =
{ $num -> { $num ->
[one] 1 descarga [one] 1 descarga
@@ -36,75 +14,26 @@ timespanHours =
[one] 1 hora [one] 1 hora
*[other] { $num } hores *[other] { $num } hores
} }
copyUrlFormLabelWithName = Copia y comparti l'enllaz pa unviar el to ficheru: { $filename }
copyUrlFormButton = Copiar al cartafueyu
copiedUrl = ¡Copióse! copiedUrl = ¡Copióse!
deleteFileButton = Desaniciar ficheru
sendAnotherFileLink = Unviar otru ficheru
# Alternative text used on the download link/button (indicates an action).
downloadAltText = Baxar
downloadsFileList = Descargues
# Used as header in a column indicating the amount of time left before a
# download link expires (e.g. "10h 5m")
timeFileList = Tiempu
# Used as header in a column indicating the number of times a file has been
# downloaded
downloadFileName = Baxar { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Introducir contraseña
unlockInputPlaceholder = Contraseña unlockInputPlaceholder = Contraseña
unlockButtonLabel = Desbloquiar unlockButtonLabel = Desbloquiar
downloadFileTitle = Baxar ficheru cifráu
# Firefox Send is a brand name and should not be localized.
downloadMessage = El to collaciu unvióte un ficheru usando Firefox Send, un serviciu que te permite compartir ficheros con un enllaz seguru, priváu y cifráu que caduca automáticamente p'asegurar que les to coses nun queden siempres na rede.
# Text and title used on the download link/button (indicates an action).
downloadButtonLabel = Baxar downloadButtonLabel = Baxar
downloadNotification = Completóse la to descarga. downloadFinish = Completóse la descarga
downloadFinish = Descarga completada
# This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } de { $totalSize }) fileSizeProgress = ({ $partialSize } de { $totalSize })
# Firefox Send is a brand name and should not be localized. sendYourFilesLink = Probar Firefox Send
sendYourFilesLink = Prueba Firefox Send
downloadingPageProgress = Baxando { $filename } ({ $size })
downloadingPageMessage = Dexa esta llingüeta abierta entrín vamos en cata del to ficheru y lu desciframos, por favor.
errorAltText = Fallu de xuba
errorPageHeader = ¡Daqué foi mal! errorPageHeader = ¡Daqué foi mal!
errorPageMessage = Hebo un fallu xubiendo'l ficheru.
errorPageLink = Unviar otru ficheru
fileTooBig = Esti ficheru ye mui grande como pa xubilu. Debería tener menos de { $size }. fileTooBig = Esti ficheru ye mui grande como pa xubilu. Debería tener menos de { $size }.
linkExpiredAlt = Enllaz caducáu linkExpiredAlt = Caducó l'enllaz
expiredPageHeader = ¡Esti enllaz caducó o enxamás nun esistó!
notSupportedHeader = El to restolador nun ta sofitáu. notSupportedHeader = El to restolador nun ta sofitáu.
# Firefox Send is a brand name and should not be localized.
notSupportedDetail = Desafortunadamente esti restolador nun sofita la teunoloxía web qu'usa Firefox Send. Precisarás d'usar otru restolador. ¡Aconseyámoste Firefox!
notSupportedLink = ¿Por qué'l mio restolador nun ta sofitáu? notSupportedLink = ¿Por qué'l mio restolador nun ta sofitáu?
notSupportedOutdatedDetail = Desafortunadamente esta versión de Firefox nun sofita la teunoloxía web qu'usa Firefox Send. Precisarás d'anovar Firefox. notSupportedOutdatedDetail = Desafortunadamente esta versión de Firefox nun sofita la teunoloxía web qu'usa Firefox Send. Vas precisar anovar Firefox.
updateFirefox = Anovar Firefox updateFirefox = Anovar Firefox
downloadFirefoxButtonSub = Descarga de baldre
uploadedFile = Ficheru
copyFileList = Copiar URL
# expiryFileList is used as a column header
expiryFileList = Caduca en
deleteFileList = Desaniciar
nevermindButton = Nun m'importa
legalHeader = Términos y privacidá
legalNoticeTestPilot = Anguaño Firefox Send ye un esperimentu de Test Pilot y ta suxetu a los <a>Términos de serviciu</a> y l'<a>Avisu de privacidá</a> de Test Pilot. <a>Equí</a> pues deprender más tocante a esti esperimentu y la so recoyida de datos.
legalNoticeMozilla = L'usu de Firefox Send tamién ta suxetu al <a>Avisu de privacidá</a> y a los <a>Términos d'usu de la páxina web</a> de Mozilla.
deletePopupText = ¿Desaniciar esti ficheru?
deletePopupYes = Sí
deletePopupCancel = Encaboxar deletePopupCancel = Encaboxar
deleteButtonHover = Desaniciar deleteButtonHover = Desaniciar
copyUrlHover = Copiar URL
footerLinkLegal = Llegal footerLinkLegal = Llegal
# Test Pilot is a proper name and should not be localized.
footerLinkAbout = Tocante a Test Pilot
footerLinkPrivacy = Privacidá footerLinkPrivacy = Privacidá
footerLinkTerms = Términos
footerLinkCookies = Cookies footerLinkCookies = Cookies
requirePasswordCheckbox = Riquir una contraseña pa baxar esti ficheru passwordTryAgain = La contraseña ye incorreuta. Volvi tentalo.
addPasswordButton = Amestar contraseña
changePasswordButton = Camudar
passwordTryAgain = Contraseña incorreuta. Volvi tentalo.
javascriptRequired = Firefox Send rique JavaScript javascriptRequired = Firefox Send rique JavaScript
whyJavascript = ¿Por qué Firefox Send rique JavaScript? whyJavascript = ¿Por qué Firefox Send rique JavaScript?
enableJavascript = Activa JavaScript y volvi tentalo, por favor. enableJavascript = Activa JavaScript y volvi tentalo, por favor.
@@ -112,9 +41,101 @@ enableJavascript = Activa JavaScript y volvi tentalo, por favor.
expiresHoursMinutes = { $hours }h { $minutes }m expiresHoursMinutes = { $hours }h { $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 = Afitóse la contraseña
# 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 = Llargor máximu de la contraseña: { $length } maxPasswordLength = Llargor máximu de la contraseña: { $length }
# A short status message shown when there was an error setting the password # A short status message shown when there was an error setting the password
passwordSetError = Nun pudo afitase esta contraseña passwordSetError = Nun pudo afitase esta contraseña
## Send version 2 strings
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
-send-brand = Firefox Send
-send-short-brand = Send
-firefox = Firefox
-mozilla = Mozilla
introTitle = Compartición de ficheros privada y cenciella
notifyUploadEncryptDone = El ficheru ta cifráu y preparáu pa unviase
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Caduca tres { $downloadCount } ó { $timespan }
timespanMinutes =
{ $num ->
[one] 1 minutu
*[other] { $num } minutos
}
timespanDays =
{ $num ->
[one] 1 día
*[other] { $num } díes
}
timespanWeeks =
{ $num ->
[one] 1 selmana
*[other] { $num } selmanes
}
fileCount =
{ $num ->
[one] 1 ficheru
*[other] { $num } ficheros
}
# byte abbreviation
bytes = B
# kibibyte abbreviation
kb = KB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Tamañu total: { $size }
# the next line after the colon contains a file name
copyLinkDescription = Copia l'enllaz pa compartir el ficheru:
copyLinkButton = Copiar l'enllaz
downloadTitle = Descarga de ficheros
downloadDescription = Esti ficheru compartióse per { -send-brand } con cifráu puntu a puntu y un enllaz que caduca automáticamente.
trySendDescription = Prueba { -send-brand } pa una compartición de ficheros cenciella y segura.
# count will always be > 10
tooManyFiles =
{ $count ->
[one] Namái pue xubise 1 ficheru al empar.
*[other] Namái puen xubise { $count } ficheros al empar.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] Namái se permite 1 archivu
*[other] Namái se permiten { $count } archivos
}
expiredTitle = Esti enllaz caducó.
notSupportedDescription = { -send-brand } nun va funcionar con esti restolador. { -send-short-brand } funciona meyor cola versión última de { -firefox } y cola versión actual de la mayoría de restoladores.
legalTitle = Noticia de privacidá de { -send-short-brand }
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
addFilesButton = Esbillar los ficheros a unviar
uploadButton = Xubir
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Arrastra y suelta ficheros
# the second part of the string 'Drag and drop files or click to send up to 1GB'
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = o calca pa unviar hasta { $size }
addPassword = Protexer con una contraseña
emailPlaceholder = Introduz el to corréu
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Anicia sesión pa unviar hasta { $size }
signInButton = Rexistrase/aniciar sesión
accountBenefitTitle = Creación d'una cuenta { -firefox } o aniciu de sesión nella
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Comparti ficheros d'hasta { $size }
accountBenefitDownloadCount = Comparti ficheros con más xente
accountBenefitTimeLimit =
{ $count ->
[one] Caltén activos los enllaces demientres 1 día
*[other] Caltén activos los enllaces demientres 1 díes
}
accountBenefitSync = Xestiona los ficheros compartíos dende cualesquier preséu
accountBenefitMoz = Deprendi más tocante a otros servicios de { -mozilla }
signOut = Zarrar sesión
okButton = Aceutar
downloadingTitle = Baxando
noStreamsWarning = Esti restolador quiciabes nun seya a descifrar un ficheru d'esti tamañu.

View File

@@ -78,7 +78,17 @@ fileCount =
[one] 1 yakb'äl [one] 1 yakb'äl
*[other] { $num } taq yakb'äl *[other] { $num } taq yakb'äl
} }
# size is a localized number followed by a unit of bytes, ex. 2.5GB # byte abbreviation
bytes = B
# kibibyte abbreviation
kb = KB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Ronojel runimilem: { $size } totalSize = Ronojel runimilem: { $size }
# the next line after the colon contains a file name # the next line after the colon contains a file name
copyLinkDescription = Tawachib'ej ri ximonel richin nakomonij ri ayakb'al: copyLinkDescription = Tawachib'ej ri ximonel richin nakomonij ri ayakb'al:
@@ -110,15 +120,15 @@ uploadButton = Tijotob'äx
# the first part of the string 'Drag and drop files or click to send up to 1GB' # the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Keqirirëx chuqa' ke'osq'opïx taq yakb'äl dragAndDropFiles = Keqirirëx chuqa' ke'osq'opïx taq yakb'äl
# the second part of the string 'Drag and drop files or click to send up to 1GB' # the second part of the string 'Drag and drop files or click to send up to 1GB'
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = o tapitz'a' richin natäq k'a { $size } orClickWithSize = o tapitz'a' richin natäq k'a { $size }
addPassword = Tichajïx rik'in ewan tzij addPassword = Tichajïx rik'in ewan tzij
emailPlaceholder = Tatz'ib'aj ataqoya'l emailPlaceholder = Tatz'ib'aj ataqoya'l
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Tatikirisaj molojri'ïl richin natäq k'a { $size } signInSizeBump = Tatikirisaj molojri'ïl richin natäq k'a { $size }
signInButton = Tatikirisaj molojri'ïl/tatz'ib'aj ab'i' signInButton = Tatikirisaj molojri'ïl/tatz'ib'aj ab'i'
accountBenefitTitle = Tatz'uku' jun { -firefox } Rub'i' Ataqoy'al o Tatikirisaj molojri'ïl accountBenefitTitle = Tatz'uku' jun { -firefox } Rub'i' Ataqoy'al o Tatikirisaj molojri'ïl
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Ke'akomonij taq yakb'äl k'a { $size } accountBenefitLargeFiles = Ke'akomonij taq yakb'äl k'a { $size }
accountBenefitDownloadCount = Ke'akomonij taq yakb'äl kik'in ch'aqa' chik winaqi' accountBenefitDownloadCount = Ke'akomonij taq yakb'äl kik'in ch'aqa' chik winaqi'
accountBenefitTimeLimit = accountBenefitTimeLimit =

View File

@@ -166,7 +166,7 @@ dragAndDropFiles = Přetažením myší nebo kliknutím sem
# the second part of the string 'Drag and drop files or click to send up to 1GB' # the second part of the string 'Drag and drop files or click to send up to 1GB'
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB") # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = můžete poslat až { $size } orClickWithSize = můžete poslat až { $size }
addPassword = Chránit heslem addPassword = Ochránit heslem
emailPlaceholder = Zadejte svoji e-mailovou adresu emailPlaceholder = Zadejte svoji e-mailovou adresu
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB") # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Pro odesílání souborů o velikosti až { $size } se prosím přihlaste signInSizeBump = Pro odesílání souborů o velikosti až { $size } se prosím přihlaste

View File

@@ -78,7 +78,17 @@ fileCount =
[one] 1 fil [one] 1 fil
*[other] { $num } filer *[other] { $num } filer
} }
# size is a localized number followed by a unit of bytes, ex. 2.5GB # byte abbreviation
bytes = B
# kibibyte abbreviation
kb = KB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Samlet størrelse: { $size } totalSize = Samlet størrelse: { $size }
# the next line after the colon contains a file name # the next line after the colon contains a file name
copyLinkDescription = Kopier linket for at dele din fil: copyLinkDescription = Kopier linket for at dele din fil:
@@ -110,15 +120,15 @@ uploadButton = Upload
# the first part of the string 'Drag and drop files or click to send up to 1GB' # the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Træk og slip filer dragAndDropFiles = Træk og slip filer
# the second part of the string 'Drag and drop files or click to send up to 1GB' # the second part of the string 'Drag and drop files or click to send up to 1GB'
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = eller klik for at sende filer på op til { $size } orClickWithSize = eller klik for at sende filer på op til { $size }
addPassword = Beskyt med adgangskode addPassword = Beskyt med adgangskode
emailPlaceholder = Indtast din mailadresse emailPlaceholder = Indtast din mailadresse
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Log ind for at sende filer på op til { $size } signInSizeBump = Log ind for at sende filer på op til { $size }
signInButton = Log ind/tilmeld dig signInButton = Log ind/tilmeld dig
accountBenefitTitle = Opret en { -firefox }-konto eller log ind accountBenefitTitle = Opret en { -firefox }-konto eller log ind
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Del filer på op til { $size } accountBenefitLargeFiles = Del filer på op til { $size }
accountBenefitDownloadCount = Del filer med flere personer accountBenefitDownloadCount = Del filer med flere personer
accountBenefitTimeLimit = accountBenefitTimeLimit =

View File

@@ -53,6 +53,9 @@ passwordSetError = Esta contraseña no pudo ser establecida
-send-short-brand = Send -send-short-brand = Send
-firefox = Firefox -firefox = Firefox
-mozilla = Mozilla -mozilla = Mozilla
introTitle = Intercambio de archivos sencillo y privado
introDescription = { -send-brand } te permite compartir archivos con cifrado de extremo a extremo y un enlace que expira automáticamente. Así puedes mantener lo que compartes en privado y asegurarte de que tus cosas no permanezcan en línea para siempre.
notifyUploadEncryptDone = Tu archivo está cifrado y listo para enviar
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes' # downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Expira después de { $downloadCount } o { $timespan } archiveExpiryInfo = Expira después de { $downloadCount } o { $timespan }
timespanMinutes = timespanMinutes =
@@ -75,16 +78,70 @@ fileCount =
[one] 1 archivo [one] 1 archivo
*[other] { $num } archivos *[other] { $num } archivos
} }
# byte abbreviation
bytes = B
# kibibyte abbreviation
kb = KB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB") # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Tamaño total: { $size } totalSize = Tamaño total: { $size }
# the next line after the colon contains a file name
copyLinkDescription = Copiar el enlace para compartir el archivo:
copyLinkButton = Copiar enlace copyLinkButton = Copiar enlace
downloadTitle = Bajando archivos downloadTitle = Bajando archivos
downloadDescription = Este archivo fue compartido a través de { -send-brand } con cifrado de punto a punto y un enlace que expira automáticamente.
trySendDescription = Prueba { -send-brand } para compartir archivos de forma sencilla y segura.
# count will always be > 10
tooManyFiles =
{ $count ->
[one] Solo 1 archivo puede ser subido a la vez.
*[other] Solo { $count } archivos pueden ser subidos a la vez.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] Solo 1 archivo está permitido.
*[other] Solo { $count } archivos están permitidos.
}
expiredTitle = Este enlace ha expirado. expiredTitle = Este enlace ha expirado.
notSupportedDescription = { -send-brand } no funcionará con este navegador. { -send-short-brand } funciona mejor con la última versión de { -firefox } y con la versión actual de la mayoría de los navegadores.
downloadFirefox = Bajar { -firefox } downloadFirefox = Bajar { -firefox }
legalTitle = Aviso de privacidad de { -send-short-brand }
legalDateStamp = Versión 1.0 del 12 de marzo de 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m" # A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
addFilesButton = Selecciona los archivos a subir
uploadButton = Subir uploadButton = Subir
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Arrastra y suelta archivos
# the second part of the string 'Drag and drop files or click to send up to 1GB'
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = o haz clic para enviar hasta { $size }
addPassword = Protegido con contraseña
emailPlaceholder = Ingresa tu correo
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Conéctate para enviar hasta { $size }
signInButton = Conectarse/registrarse
accountBenefitTitle = Crea una cuenta de { -firefox } o conéctate
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Comparte archivos de hasta { $size }
accountBenefitDownloadCount = Comparte archivos con más personas
accountBenefitTimeLimit =
{ $count ->
[one] Mantener enlaces activos durante 1 día
*[other] Mantener enlaces activos durante { $count } días
}
accountBenefitSync = Administrar los archivos compartidos desde cualquier dispositivo
accountBenefitMoz = Aprender más acerca de otros servicios de { -mozilla }
signOut = Salir signOut = Salir
okButton = Aceptar
downloadingTitle = Bajando downloadingTitle = Bajando
noStreamsWarning = Es posible que este navegador no pueda descifrar un archivo tan grande.
noStreamsOptionCopy = Copiar el enlace para abrirlo en otro navegador
noStreamsOptionFirefox = Prueba nuestro navegador favorito noStreamsOptionFirefox = Prueba nuestro navegador favorito
noStreamsOptionDownload = Continuar con este navegador noStreamsOptionDownload = Continuar con este navegador

View File

@@ -90,6 +90,18 @@ totalSize = Dimension total: { $size }
copyLinkDescription = Copia le ligamine pro compartir le file: copyLinkDescription = Copia le ligamine pro compartir le file:
copyLinkButton = Copiar ligamine copyLinkButton = Copiar ligamine
downloadTitle = Discargar files downloadTitle = Discargar files
# count will always be > 10
tooManyFiles =
{ $count ->
[one] Solo 1 file al vice pote ser cargate.
*[other] Solo { $count } files al vice pote ser cargate.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] Solo 1 archivo es consentite.
*[other] Solo { $count } archivos es consentite.
}
expiredTitle = Iste ligamine ha expirate. expiredTitle = Iste ligamine ha expirate.
downloadFirefox = Discargar { -firefox } downloadFirefox = Discargar { -firefox }
legalTitle = Politica de confidentialitate de { -send-short-brand } legalTitle = Politica de confidentialitate de { -send-short-brand }

View File

@@ -1,109 +1,37 @@
# 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 = eksperimen web
siteFeedback = Saran siteFeedback = Saran
uploadPageHeader = Pribadi, Berbagi Berkas Terenskripsi
uploadPageExplainer = Kirim berkas melalui tautan yang aman, pribadi, dan terenkripsi yang secara otomatis kedaluwarsa untuk memastikan berkas Anda tidak daring selamanya.
uploadPageLearnMore = Pelajari lebih lanjut
uploadPageDropMessage = Lepas berkas Anda di sini untuk mulai mengunggah
uploadPageSizeMessage = Untuk pengoperasian yang paling andal, sebaiknya jaga berkas Anda di bawah 1GB
uploadPageBrowseButton = Pilih berkas pada komputer Anda
uploadPageBrowseButton1 = Pilih berkas untuk diunggah
uploadPageMultipleFilesAlert = Saat ini belum mendukung pengunggahan beberapa berkas atau folder.
uploadPageBrowseButtonTitle = Unggah berkas
uploadingPageProgress = Mengunggah { $filename } ({ $size })
importingFile = Mengimpor… importingFile = Mengimpor…
verifyingFile = Memverifikasi…
encryptingFile = Mengenkripsi... encryptingFile = Mengenkripsi...
decryptingFile = Mendekripsi... decryptingFile = Mendekripsi...
notifyUploadDone = Unggahan Anda telah selesai.
uploadingPageMessage = Setelah berkas diunggah, Anda dapat mengatur pilihan kedaluwarsa.
uploadingPageCancel = Batal unggah
uploadCancelNotification = Unggahan Anda dibatalkan.
uploadingPageLargeFileMessage = Berkas ini berukuran besar dan mungkin perlu beberapa saat untuk mengunggahnya. Silakan tunggu!
uploadingFileNotification = Beri tahu saya ketika unggahan telah selesai.
uploadSuccessConfirmHeader = Siap untuk Dikirim
uploadSvgAlt = Unggah
uploadSuccessTimingHeader = Tautan ke berkas Anda akan berakhir setelah 1 unduhan atau dalam 24 jam.
expireInfo = Tautan ke berkas Anda akan kedaluwarsa setelah { $downloadCount } atau { $timespan }.
downloadCount = downloadCount =
{ $num -> { $num ->
*[other] { $number } unduhan *[other] { $num } unduhan
} }
timespanHours = timespanHours =
{ $num -> { $num ->
*[other] { $number } jam *[other] { $num } jam
} }
copyUrlFormLabelWithName = Salin dan bagikan tautan untuk mengirim berkas Anda: { $filename }
copyUrlFormButton = Salin ke papan klip
copiedUrl = Tersalin! copiedUrl = Tersalin!
deleteFileButton = Hapus berkas
sendAnotherFileLink = Kirim berkas lain
# Alternative text used on the download link/button (indicates an action).
downloadAltText = Unduh
downloadsFileList = Unduhan
# Used as header in a column indicating the amount of time left before a
# download link expires (e.g. "10h 5m")
timeFileList = Waktu
# Used as header in a column indicating the number of times a file has been
# downloaded
downloadFileName = Unduh { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Masukkan Sandi
unlockInputPlaceholder = Sandi unlockInputPlaceholder = Sandi
unlockButtonLabel = Buka unlockButtonLabel = Buka
downloadFileTitle = Unduh Berkas Terenkripsi
# Firefox Send is a brand name and should not be localized.
downloadMessage = Teman Anda mengirimkan berkas dengan Firefox Send, layanan yang memungkinkan Anda berbagi berkas dengan tautan yang aman, pribadi, dan terenkripsi yang secara otomatis berakhir untuk memastikan berkas Anda tidak daring selamanya.
# Text and title used on the download link/button (indicates an action).
downloadButtonLabel = Unduh downloadButtonLabel = Unduh
downloadNotification = Unduhan Anda telah selesai.
downloadFinish = Unduhan Selesai downloadFinish = Unduhan Selesai
# This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } dari { $totalSize }) fileSizeProgress = ({ $partialSize } dari { $totalSize })
# Firefox Send is a brand name and should not be localized.
sendYourFilesLink = Coba Firefox Send sendYourFilesLink = Coba Firefox Send
downloadingPageProgress = Mengunduh { $filename } ({ $size })
downloadingPageMessage = Sila biarkan tab ini terbuka sementara kami memproses berkas Anda dan mendekripsinya.
errorAltText = Unggahan bermasalah
errorPageHeader = Terjadi kesalahan! errorPageHeader = Terjadi kesalahan!
errorPageMessage = Terjadi kesalahan saat mengunggah berkas.
errorPageLink = Kirim berkas lain
fileTooBig = Berkas terlalu besar untuk diunggah. Harus kurang dari { $size }. fileTooBig = Berkas terlalu besar untuk diunggah. Harus kurang dari { $size }.
linkExpiredAlt = Tautan kedaluwarsa linkExpiredAlt = Tautan kedaluwarsa
expiredPageHeader = Tautan ini telah kedaluwarsa atau tidak pernah ada!
notSupportedHeader = Peramban Anda tidak mendukung. notSupportedHeader = Peramban Anda tidak mendukung.
# Firefox Send is a brand name and should not be localized.
notSupportedDetail = Sayangnya peramban ini tidak mendukung teknologi web yang menggerakkan Firefox Send. Anda perlu mencoba peramban lain. Kami merekomendasikan Firefox!
notSupportedLink = Mengapa peramban saya tidak didukung? notSupportedLink = Mengapa peramban saya tidak didukung?
notSupportedOutdatedDetail = Sayangnya Firefox versi ini tidak mendukung teknologi web yang menggerakkan Firefox Send. Anda perlu memperbarui peramban Anda. notSupportedOutdatedDetail = Sayangnya Firefox versi ini tidak mendukung teknologi web yang menggerakkan Firefox Send. Anda perlu memperbarui peramban Anda.
updateFirefox = Perbarui Firefox updateFirefox = Perbarui Firefox
downloadFirefoxButtonSub = Unduh Gratis
uploadedFile = Berkas
copyFileList = Salin URL
# expiryFileList is used as a column header
expiryFileList = Kedaluwarsa Pada
deleteFileList = Hapus
nevermindButton = Abaikan
legalHeader = Syarat & Privasi
legalNoticeTestPilot = Saat ini Firefox Send merupakan eksperimen Test Pilot, dan merupakan subyek dari <a>Ketentuan Layanan</a> dan <a>Pemberitahuan Privasi</a> Test Pilot. Anda dapat mempelajari lebih lanjut tentang eksperimen ini dan pengumpulan datanya <a>di sini</a>.
legalNoticeMozilla = Penggunaan situs Firefox Send juga merupakan subyek dari <a>Pemberitahuan Privasi Situs Web</a> dan <a>Persyaratan Penggunaan Situs Web</a> Mozilla.
deletePopupText = Hapus berkas ini?
deletePopupYes = Ya
deletePopupCancel = Batal deletePopupCancel = Batal
deleteButtonHover = Hapus deleteButtonHover = Hapus
copyUrlHover = Salin URL
footerLinkLegal = Legal footerLinkLegal = Legal
# Test Pilot is a proper name and should not be localized.
footerLinkAbout = Tentang Test Pilot
footerLinkPrivacy = Privasi footerLinkPrivacy = Privasi
footerLinkTerms = Ketentuan
footerLinkCookies = Kuki footerLinkCookies = Kuki
requirePasswordCheckbox = Membutuhkan sandi untuk mengunduh berkas ini
addPasswordButton = Tambahkan Sandi
changePasswordButton = Ubah
passwordTryAgain = Sandi salah. Silakan coba lagi. passwordTryAgain = Sandi salah. Silakan coba lagi.
reportIPInfringement = Laporkan Pelanggaran IP
javascriptRequired = Firefox Send membutuhkan JavaScript. javascriptRequired = Firefox Send membutuhkan JavaScript.
whyJavascript = Mengapa Firefox Send membutuhkan JavaScript? whyJavascript = Mengapa Firefox Send membutuhkan JavaScript?
enableJavascript = Silakan aktifkan JavaScript dan coba lagi. enableJavascript = Silakan aktifkan JavaScript dan coba lagi.
@@ -111,14 +39,12 @@ 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 # A short status message shown when there was an error setting the password
passwordSetError = Tidak bisa menyetel sandi ini passwordSetError = Tidak bisa menyetel sandi ini
## New strings for the vNext version of Firefox Send ## Send version 2 strings
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized # Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
-send-brand = Firefox Send -send-brand = Firefox Send
@@ -132,21 +58,31 @@ notifyUploadEncryptDone = Berkas Anda terenkripsi dan siap untuk dikirim
archiveExpiryInfo = Berakhir setelah { $downloadCount } atau { $timespan } archiveExpiryInfo = Berakhir setelah { $downloadCount } atau { $timespan }
timespanMinutes = timespanMinutes =
{ $num -> { $num ->
*[other] menit *[other] { $num } menit
} }
timespanDays = timespanDays =
{ $num -> { $num ->
*[other] hari *[other] { $num } hari
} }
timespanWeeks = timespanWeeks =
{ $num -> { $num ->
*[other] pekan *[other] { $num } pekan
} }
fileCount = fileCount =
{ $num -> { $num ->
*[other] berkas *[other] { $num } berkas
} }
# size is a localized number followed by a unit of bytes, ex. 2.5GB # byte abbreviation
bytes = B
# kibibyte abbreviation
kb = KB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Total ukuran: { $size } totalSize = Total ukuran: { $size }
# the next line after the colon contains a file name # the next line after the colon contains a file name
copyLinkDescription = Salin tautan untuk membagikan berkas Anda: copyLinkDescription = Salin tautan untuk membagikan berkas Anda:
@@ -176,15 +112,15 @@ uploadButton = Unggah
# the first part of the string 'Drag and drop files or click to send up to 1GB' # the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Seret dan jatuhkan berkas dragAndDropFiles = Seret dan jatuhkan berkas
# the second part of the string 'Drag and drop files or click to send up to 1GB' # the second part of the string 'Drag and drop files or click to send up to 1GB'
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = atau klik untuk mengirim hingga { $size } orClickWithSize = atau klik untuk mengirim hingga { $size }
addPassword = Lindungi dengan kata sandi addPassword = Lindungi dengan kata sandi
emailPlaceholder = Masukkan surel Anda emailPlaceholder = Masukkan surel Anda
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Masuk untuk dapat mengirim hingga { $size } signInSizeBump = Masuk untuk dapat mengirim hingga { $size }
signInButton = Masuk/Daftar signInButton = Masuk/Daftar
accountBenefitTitle = Buat { -firefox } Account atau masuk accountBenefitTitle = Buat { -firefox } Account atau masuk
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Bagikan berkas hingga { $size } accountBenefitLargeFiles = Bagikan berkas hingga { $size }
accountBenefitDownloadCount = Bagikan berkas kepada lebih banyak orang accountBenefitDownloadCount = Bagikan berkas kepada lebih banyak orang
accountBenefitTimeLimit = accountBenefitTimeLimit =

View File

@@ -72,7 +72,17 @@ fileCount =
{ $num -> { $num ->
*[other] { $num } ファイル *[other] { $num } ファイル
} }
# size is a localized number followed by a unit of bytes, ex. 2.5GB # byte abbreviation
bytes = B
# kibibyte abbreviation
kb = KB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = 合計サイズ: { $size } totalSize = 合計サイズ: { $size }
# the next line after the colon contains a file name # the next line after the colon contains a file name
copyLinkDescription = リンクをコピーしてファイルを共有: copyLinkDescription = リンクをコピーしてファイルを共有:
@@ -102,15 +112,15 @@ uploadButton = アップロード
# the first part of the string 'Drag and drop files or click to send up to 1GB' # the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = ファイルをドラッグ&ドロップ dragAndDropFiles = ファイルをドラッグ&ドロップ
# the second part of the string 'Drag and drop files or click to send up to 1GB' # the second part of the string 'Drag and drop files or click to send up to 1GB'
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = または、クリックして最大 { $size } のファイルを送信 orClickWithSize = または、クリックして最大 { $size } のファイルを送信
addPassword = パスワードで保護 addPassword = パスワードで保護
emailPlaceholder = メールアドレスを入力 emailPlaceholder = メールアドレスを入力
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = ログインすると最大 { $size } のファイルを送信できます signInSizeBump = ログインすると最大 { $size } のファイルを送信できます
signInButton = ログイン/登録 signInButton = ログイン/登録
accountBenefitTitle = { -firefox } アカウントを作成またはログイン accountBenefitTitle = { -firefox } アカウントを作成またはログイン
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = 最大 { $size } までのファイルを共有 accountBenefitLargeFiles = 最大 { $size } までのファイルを共有
accountBenefitDownloadCount = より多くの人とファイルを共有 accountBenefitDownloadCount = より多くの人とファイルを共有
accountBenefitTimeLimit = accountBenefitTimeLimit =

View File

@@ -77,7 +77,17 @@ fileCount =
[one] 1 fil [one] 1 fil
*[other] { $num } filer *[other] { $num } filer
} }
# size is a localized number followed by a unit of bytes, ex. 2.5GB # byte abbreviation
bytes = B
# kibibyte abbreviation
kb = KB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Total storleik: { $size } totalSize = Total storleik: { $size }
# the next line after the colon contains a file name # the next line after the colon contains a file name
copyLinkDescription = Kopier lenka for å dele fila di: copyLinkDescription = Kopier lenka for å dele fila di:
@@ -107,15 +117,15 @@ uploadButton = Last opp
# the first part of the string 'Drag and drop files or click to send up to 1GB' # the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Dra og slepp filer dragAndDropFiles = Dra og slepp filer
# the second part of the string 'Drag and drop files or click to send up to 1GB' # the second part of the string 'Drag and drop files or click to send up to 1GB'
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = eller klikk for å senda opp til { $size } orClickWithSize = eller klikk for å senda opp til { $size }
addPassword = Vern med passord addPassword = Vern med passord
emailPlaceholder = Skriv inn e-postadressa di emailPlaceholder = Skriv inn e-postadressa di
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = LOgg inn for å senda opp til { $size } signInSizeBump = LOgg inn for å senda opp til { $size }
signInButton = Logg inn/Registrer deg signInButton = Logg inn/Registrer deg
accountBenefitTitle = Lag ein { -firefox }-konto eller logg inn accountBenefitTitle = Lag ein { -firefox }-konto eller logg inn
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Del filer opp til { $size } accountBenefitLargeFiles = Del filer opp til { $size }
accountBenefitDownloadCount = Del filer med fleire personar accountBenefitDownloadCount = Del filer med fleire personar
accountBenefitTimeLimit = accountBenefitTimeLimit =

View File

@@ -1,5 +1,52 @@
# 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
siteFeedback = Wyślij opinię
importingFile = Importowanie…
encryptingFile = Szyfrowanie…
decryptingFile = Odszyfrowywanie…
downloadCount =
{ $num ->
[one] 1 pobraniu
[few] { $num } pobraniach
*[many] { $num } pobraniach
}
timespanHours =
{ $num ->
[one] godzinie
[few] { $num } godzinach
*[many] { $num } godzinach
}
copiedUrl = Skopiowano
unlockInputPlaceholder = Hasło
unlockButtonLabel = Odblokuj
downloadButtonLabel = Pobierz
downloadFinish = Ukończono pobieranie
fileSizeProgress = ({ $partialSize } z { $totalSize })
sendYourFilesLink = Wypróbuj Firefox Send
errorPageHeader = Coś się nie udało.
fileTooBig = Ten plik jest za duży, aby go wysłać. Musi być mniejszy niż { $size }
linkExpiredAlt = Odnośnik wygasł
notSupportedHeader = Używana przeglądarka nie jest obsługiwana.
notSupportedLink = Dlaczego ta przeglądarka nie jest obsługiwana?
notSupportedOutdatedDetail = Ta wersja Firefoksa nie obsługuje technologii internetowej, która napędza Firefox Send. Należy uaktualnić przeglądarkę.
updateFirefox = Uaktualnij Firefoksa
deletePopupCancel = Anuluj
deleteButtonHover = Usuń
footerLinkLegal = Kwestie prawne
footerLinkPrivacy = Prywatność
footerLinkCookies = Ciasteczka
passwordTryAgain = Niepoprawne hasło. Spróbuj ponownie.
javascriptRequired = Firefox Send wymaga języka JavaScript
whyJavascript = Dlaczego Firefox Send wymaga języka JavaScript?
enableJavascript = Włącz obsługę języka JavaScript i spróbuj ponownie.
# A short representation of a countdown timer containing the number of hours and minutes remaining as digits, example "13h 47m"
expiresHoursMinutes = { $hours } godz. { $minutes } min
# A short representation of a countdown timer containing the number of minutes remaining as digits, example "56m"
expiresMinutes = { $minutes } min
# A short status message shown when the user enters a long password
maxPasswordLength = Maksymalna długość hasła: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = Nie można ustawić tego hasła
## Send version 2 strings ## Send version 2 strings
@@ -8,6 +55,35 @@ title = Firefox Send
-send-short-brand = Send -send-short-brand = Send
-firefox = Firefox -firefox = Firefox
-mozilla = Mozilla -mozilla = Mozilla
introTitle = Proste, prywatne udostępnianie plików
introDescription = { -send-brand } umożliwia udostępnianie plików za pomocą szyfrowania typu „end-to-end” i odnośników, które automatycznie wygasają. Dzięki temu możesz mieć pewność, że to co udostępniasz jest bezpieczne i nie pozostanie w Internecie na zawsze.
notifyUploadEncryptDone = Plik jest zaszyfrowany i gotowy do wysłania
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Wygasa po { $downloadCount } lub { $timespan }
timespanMinutes =
{ $num ->
[one] minucie
[few] { $num } minutach
*[many] { $num } minutach
}
timespanDays =
{ $num ->
[one] dniu
[few] { $num } dniach
*[many] { $num } dniach
}
timespanWeeks =
{ $num ->
[one] tygodniu
[few] { $num } tygodniach
*[many] { $num } tygodniach
}
fileCount =
{ $num ->
[one] 1 plik
[few] { $num } pliki
*[many] { $num } plików
}
# byte abbreviation # byte abbreviation
bytes = B bytes = B
# kibibyte abbreviation # kibibyte abbreviation
@@ -18,3 +94,63 @@ mb = MB
gb = GB gb = GB
# localized number and byte abbreviation. example "2.5MB" # localized number and byte abbreviation. example "2.5MB"
fileSize = { $num } { $units } fileSize = { $num } { $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Całkowity rozmiar: { $size }
# the next line after the colon contains a file name
copyLinkDescription = Skopiuj odnośnik, aby udostępnić plik:
copyLinkButton = Kopiuj odnośnik
downloadTitle = Pobierz pliki
downloadDescription = Ten plik został udostępniony przez { -send-brand } za pomocą szyfrowania typu „end-to-end” i odnośnika, który automatycznie wygasa.
trySendDescription = Wypróbuj { -send-brand }, aby prosto i bezpiecznie udostępniać pliki.
# count will always be > 10
tooManyFiles =
{ $count ->
[one] Jednocześnie można wysyłać tylko jeden plik.
[few] Jednocześnie można wysyłać tylko { $count } pliki.
*[many] Jednocześnie można wysyłać tylko { $count } plików.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] Dozwolone jest tylko jedno archiwum.
[few] Dozwolone są tylko { $count } archiwa.
*[many] Dozwolonych jest tylko { $count } archiwów.
}
expiredTitle = Ten odnośnik wygasł.
notSupportedDescription = { -send-brand } nie będzie działało w tej przeglądarce. { -send-short-brand } najlepiej działa w najnowszej wersji Firefoksa, ale będzie działać także w aktualnych wersjach większości przeglądarek.
downloadFirefox = Pobierz Firefoksa
legalTitle = Zasady ochrony prywatności serwisu { -send-short-brand }
legalDateStamp = Wersja 1.0 z 12 marca 2019 r.
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days } d. { $hours } godz. { $minutes } min
addFilesButton = Wybierz pliki do wysłania
uploadButton = Wyślij
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Przeciągnij pliki
# the second part of the string 'Drag and drop files or click to send up to 1GB'
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = lub kliknij, aby wysłać do { $size }
addPassword = Chroń hasłem
emailPlaceholder = Wpisz adres e-mail
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Zaloguj się, aby wysłać do { $size }
signInButton = Zaloguj/zarejestruj się
accountBenefitTitle = Utwórz konto Firefoksa lub zaloguj się
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Udostępniaj pliki do { $size }
accountBenefitDownloadCount = Udostępniaj pliki większej liczbie osób
accountBenefitTimeLimit =
{ $count ->
[one] Odnośniki aktywne przez jeden dzień
[few] Odnośniki aktywne przez { $count } dni
*[many] Odnośniki aktywne przez { $count } dni
}
accountBenefitSync = Zarządzaj udostępnionymi plikami z każdego urządzenia
accountBenefitMoz = Poznaj inne serwisy Mozilli
signOut = Wyloguj się
okButton = OK
downloadingTitle = Pobieranie
noStreamsWarning = Ta przeglądarka może nie być w stanie odszyfrować tak dużego pliku.
noStreamsOptionCopy = Skopiuj odnośnik, aby otworzyć w innej przeglądarce
noStreamsOptionFirefox = Wypróbuj naszą ulubioną przeglądarkę
noStreamsOptionDownload = Kontynuuj za pomocą tej przeglądarki

View File

@@ -84,7 +84,17 @@ fileCount =
[few] { $num } файла [few] { $num } файла
*[other] { $num } файлов *[other] { $num } файлов
} }
# size is a localized number followed by a unit of bytes, ex. 2.5GB # byte abbreviation
bytes = Б
# kibibyte abbreviation
kb = КБ
# mebibyte abbreviation
mb = МБ
# gibibyte abbreviation
gb = ГБ
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Общий размер: { $size } totalSize = Общий размер: { $size }
# the next line after the colon contains a file name # the next line after the colon contains a file name
copyLinkDescription = Скопируйте ссылку, чтобы поделиться своим файлом: copyLinkDescription = Скопируйте ссылку, чтобы поделиться своим файлом:
@@ -118,15 +128,15 @@ uploadButton = Выгрузить
# the first part of the string 'Drag and drop files or click to send up to 1GB' # the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Перетащите файлы сюда dragAndDropFiles = Перетащите файлы сюда
# the second part of the string 'Drag and drop files or click to send up to 1GB' # the second part of the string 'Drag and drop files or click to send up to 1GB'
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = или щёлкните здесь, чтобы отправить их (до { $size }) orClickWithSize = или щёлкните здесь, чтобы отправить их (до { $size })
addPassword = Защитить паролем addPassword = Защитить паролем
emailPlaceholder = Введите ваш адрес электронной почты emailPlaceholder = Введите ваш адрес электронной почты
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Войдите, чтобы отправлять файлы до { $size } signInSizeBump = Войдите, чтобы отправлять файлы до { $size }
signInButton = Войти/Зарегистрироваться signInButton = Войти/Зарегистрироваться
accountBenefitTitle = Создайте Аккаунт { -firefox } или войдите accountBenefitTitle = Создайте Аккаунт { -firefox } или войдите
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Делитесь файлами до { $size } accountBenefitLargeFiles = Делитесь файлами до { $size }
accountBenefitDownloadCount = Делитесь файлами с несколькими людьми accountBenefitDownloadCount = Делитесь файлами с несколькими людьми
accountBenefitTimeLimit = accountBenefitTimeLimit =

View File

@@ -84,7 +84,17 @@ fileCount =
[few] { $num } súbory [few] { $num } súbory
*[other] { $num } súborov *[other] { $num } súborov
} }
# size is a localized number followed by a unit of bytes, ex. 2.5GB # byte abbreviation
bytes = B
# kibibyte abbreviation
kb = kB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num } { $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Celková veľkosť: { $size } totalSize = Celková veľkosť: { $size }
# the next line after the colon contains a file name # the next line after the colon contains a file name
copyLinkDescription = Súbor môžete zdieľať pomocou tohto odkazu: copyLinkDescription = Súbor môžete zdieľať pomocou tohto odkazu:
@@ -118,15 +128,15 @@ uploadButton = Nahrať
# the first part of the string 'Drag and drop files or click to send up to 1GB' # the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Pretiahnutím súboru alebo kliknutím sem dragAndDropFiles = Pretiahnutím súboru alebo kliknutím sem
# the second part of the string 'Drag and drop files or click to send up to 1GB' # the second part of the string 'Drag and drop files or click to send up to 1GB'
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = môžete poslať až { $size } orClickWithSize = môžete poslať až { $size }
addPassword = Chrániť heslom addPassword = Chrániť heslom
emailPlaceholder = Zadajte e-mailovú adresu emailPlaceholder = Zadajte e-mailovú adresu
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Pre odoslanie súborov s veľkosťou až { $size }, sa, prosím, prihláste signInSizeBump = Pre odoslanie súborov s veľkosťou až { $size }, sa, prosím, prihláste
signInButton = Prihlásiť sa/Zaregistrovať sa signInButton = Prihlásiť sa/Zaregistrovať sa
accountBenefitTitle = Vytvorte si účet { -firefox } alebo sa prihláste accountBenefitTitle = Vytvorte si účet { -firefox } alebo sa prihláste
# size is a localized number followed by a unit of bytes, ex. 2.5GB # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Zdieľanie súborov s veľkosťou až { $size } accountBenefitLargeFiles = Zdieľanie súborov s veľkosťou až { $size }
accountBenefitDownloadCount = Zdieľanie súborov s viacerými ľuďmi accountBenefitDownloadCount = Zdieľanie súborov s viacerými ľuďmi
accountBenefitTimeLimit = accountBenefitTimeLimit =

View File

@@ -9,10 +9,7 @@ module.exports = function(state, body = '') {
<head> <head>
<title>${state.title}</title> <title>${state.title}</title>
<base href="/" /> <base href="/" />
<meta <meta name="robots" content="${state.robots},noarchive" />
name="robots"
content="${state.route === 'download/:id' ? 'none' : 'all'},noarchive"
/>
<meta name="google" content="nositelinkssearchbox" /> <meta name="google" content="nositelinkssearchbox" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta charset="utf-8" /> <meta charset="utf-8" />

View File

@@ -1,3 +1,4 @@
const assert = require('assert');
const crypto = require('crypto'); const crypto = require('crypto');
const storage = require('../storage'); const storage = require('../storage');
const fxa = require('../fxa'); const fxa = require('../fxa');
@@ -19,7 +20,7 @@ module.exports = {
); );
hmac.update(Buffer.from(meta.nonce, 'base64')); hmac.update(Buffer.from(meta.nonce, 'base64'));
const verifyHash = hmac.digest(); const verifyHash = hmac.digest();
if (verifyHash.equals(Buffer.from(auth, 'base64'))) { if (crypto.timingSafeEqual(verifyHash, Buffer.from(auth, 'base64'))) {
req.nonce = crypto.randomBytes(16).toString('base64'); req.nonce = crypto.randomBytes(16).toString('base64');
storage.setField(id, 'nonce', req.nonce); storage.setField(id, 'nonce', req.nonce);
res.set('WWW-Authenticate', `send-v1 ${req.nonce}`); res.set('WWW-Authenticate', `send-v1 ${req.nonce}`);
@@ -48,7 +49,11 @@ module.exports = {
if (!req.meta) { if (!req.meta) {
return res.sendStatus(404); return res.sendStatus(404);
} }
req.authorized = req.meta.owner === ownerToken; const metaOwner = Buffer.from(req.meta.owner, 'utf8');
const owner = Buffer.from(ownerToken, 'utf8');
assert(metaOwner.length > 0);
assert(metaOwner.length === owner.length);
req.authorized = crypto.timingSafeEqual(metaOwner, owner);
} catch (e) { } catch (e) {
req.authorized = false; req.authorized = false;
} }

View File

@@ -7,6 +7,10 @@ const { getFxaConfig } = require('./fxa');
module.exports = async function(req) { module.exports = async function(req) {
const locale = req.language || 'en-US'; const locale = req.language || 'en-US';
let authConfig = null; let authConfig = null;
let robots = 'none';
if (req.route && req.route.path === '/') {
robots = 'all';
}
if (config.fxa_client_id) { if (config.fxa_client_id) {
try { try {
authConfig = await getFxaConfig(); authConfig = await getFxaConfig();
@@ -33,7 +37,7 @@ module.exports = async function(req) {
fileInfo: {}, fileInfo: {},
cspNonce: req.cspNonce, cspNonce: req.cspNonce,
user: { avatar: assets.get('user.svg'), loggedIn: false }, user: { avatar: assets.get('user.svg'), loggedIn: false },
route: req.route ? req.route.path : null, robots,
authConfig, authConfig,
layout layout
}; };

View File

@@ -32,7 +32,7 @@ describe('Owner Middleware', function() {
const next = sinon.stub(); const next = sinon.stub();
storage.metadata.returns(Promise.resolve(null)); storage.metadata.returns(Promise.resolve(null));
const res = response(); const res = response();
await ownerMiddleware(request('x', 'y'), res); await ownerMiddleware(request('a', 'y'), res, next);
sinon.assert.notCalled(next); sinon.assert.notCalled(next);
sinon.assert.calledWith(res.sendStatus, 404); sinon.assert.calledWith(res.sendStatus, 404);
}); });
@@ -42,7 +42,7 @@ describe('Owner Middleware', function() {
const meta = { owner: 'y' }; const meta = { owner: 'y' };
storage.metadata.returns(Promise.resolve(meta)); storage.metadata.returns(Promise.resolve(meta));
const res = response(); const res = response();
await ownerMiddleware(request('x', null), res); await ownerMiddleware(request('b', null), res, next);
sinon.assert.notCalled(next); sinon.assert.notCalled(next);
sinon.assert.calledWith(res.sendStatus, 401); sinon.assert.calledWith(res.sendStatus, 401);
}); });
@@ -52,7 +52,7 @@ describe('Owner Middleware', function() {
const meta = { owner: 'y' }; const meta = { owner: 'y' };
storage.metadata.returns(Promise.resolve(meta)); storage.metadata.returns(Promise.resolve(meta));
const res = response(); const res = response();
await ownerMiddleware(request('x', 'z'), res); await ownerMiddleware(request('c', 'z'), res, next);
sinon.assert.notCalled(next); sinon.assert.notCalled(next);
sinon.assert.calledWith(res.sendStatus, 401); sinon.assert.calledWith(res.sendStatus, 401);
}); });
@@ -61,7 +61,7 @@ describe('Owner Middleware', function() {
const next = sinon.stub(); const next = sinon.stub();
storage.metadata.returns(Promise.reject(new Error())); storage.metadata.returns(Promise.reject(new Error()));
const res = response(); const res = response();
await ownerMiddleware(request('x', 'y'), res); await ownerMiddleware(request('d', 'y'), res, next);
sinon.assert.notCalled(next); sinon.assert.notCalled(next);
sinon.assert.calledWith(res.sendStatus, 401); sinon.assert.calledWith(res.sendStatus, 401);
}); });
@@ -70,7 +70,7 @@ describe('Owner Middleware', function() {
const next = sinon.stub(); const next = sinon.stub();
const meta = { owner: 'y' }; const meta = { owner: 'y' };
storage.metadata.returns(Promise.resolve(meta)); storage.metadata.returns(Promise.resolve(meta));
const req = request('x', 'y'); const req = request('e', 'y');
const res = response(); const res = response();
await ownerMiddleware(req, res, next); await ownerMiddleware(req, res, next);
assert.equal(req.meta, meta); assert.equal(req.meta, meta);

View File

@@ -57,4 +57,29 @@ describe('Firefox Send', function() {
.includes('Expires after 1 download') .includes('Expires after 1 download')
); );
}); });
it('should ensure that the downloaded file size matches the uploaded file size', function() {
browser.chooseFile(
homePage.uploadInput,
`${testFilesPath}/${testFiles[0]}`
);
// get the file size for upload
const uploadSize = fs.statSync(`${testFilesPath}/${testFiles[0]}`).size;
browser.waitForExist(homePage.uploadButton);
browser.click(homePage.uploadButton);
browser.waitForExist(homePage.shareUrl);
const downloadPage = new DownloadPage(browser.getValue(homePage.shareUrl));
downloadPage.open();
downloadPage.download();
browser.waitForExist(downloadPage.downloadComplete);
// get the file size for download
const downloadFile = path.join(downloadDir, `${testFiles[0]}`);
const downloadSize = fs.statSync(downloadFile).size;
// check if upload and download file sizes are equal
assert.equal(uploadSize, downloadSize);
});
}); });

View File

@@ -40,7 +40,7 @@ const serviceWorker = {
test: /\.(png|jpg)$/, test: /\.(png|jpg)$/,
loader: 'file-loader', loader: 'file-loader',
options: { options: {
name: '[name].[hash:8].[ext]' name: '[name].[contenthash:8].[ext]'
} }
}, },
{ {
@@ -49,7 +49,7 @@ const serviceWorker = {
{ {
loader: 'file-loader', loader: 'file-loader',
options: { options: {
name: '[name].[hash:8].[ext]' name: '[name].[contenthash:8].[ext]'
} }
}, },
{ {
@@ -82,7 +82,8 @@ const web = {
ios: ['./ios/ios.js'] ios: ['./ios/ios.js']
}, },
output: { output: {
filename: '[name].[hash:8].js', chunkFilename: '[name].[contenthash:8].js',
filename: '[name].[contenthash:8].js',
path: path.resolve(__dirname, 'dist') path: path.resolve(__dirname, 'dist')
}, },
module: { module: {
@@ -124,7 +125,7 @@ const web = {
test: /\.(png|jpg)$/, test: /\.(png|jpg)$/,
loader: 'file-loader', loader: 'file-loader',
options: { options: {
name: '[name].[hash:8].[ext]' name: '[name].[contenthash:8].[ext]'
} }
}, },
{ {
@@ -133,7 +134,7 @@ const web = {
{ {
loader: 'file-loader', loader: 'file-loader',
options: { options: {
name: '[name].[hash:8].[ext]' name: '[name].[contenthash:8].[ext]'
} }
}, },
{ {
@@ -189,7 +190,7 @@ const web = {
new webpack.EnvironmentPlugin(['NODE_ENV']), new webpack.EnvironmentPlugin(['NODE_ENV']),
new webpack.IgnorePlugin(/\.\.\/dist/), // used in common/*.js new webpack.IgnorePlugin(/\.\.\/dist/), // used in common/*.js
new ExtractTextPlugin({ new ExtractTextPlugin({
filename: '[name].[hash:8].css' filename: '[name].[md5:contenthash:8].css'
}), }),
new VersionPlugin(), // used for the /__version__ route new VersionPlugin(), // used for the /__version__ route
new AndroidIndexPlugin(), new AndroidIndexPlugin(),