Compare commits

...

277 Commits

Author SHA1 Message Date
Danny Coates
df1b00fa2c v2.2.0 2017-12-06 15:57:55 -08:00
Danny Coates
6434329f61 added utm params to unsupported page download link 2017-12-06 15:43:36 -08:00
Arash Mousavi
454853dc93 Pontoon: Update Persian (fa) localization of Test Pilot: Firefox Send
Localization authors:
- Arash Mousavi <mousavi.arash@gmail.com>
2017-12-06 21:51:17 +00:00
Filip Hruška
b663bf94e4 Pontoon: Update Czech (cs) localization of Test Pilot: Firefox Send
Localization authors:
- Filip Hruška <fhr@fhrnet.eu>
2017-12-06 20:50:37 +00:00
Kohei Yoshino
081cf081c5 Pontoon: Update Japanese (ja) localization of Test Pilot: Firefox Send
Localization authors:
- Kohei Yoshino <kohei.yoshino@gmail.com>
2017-12-06 18:10:58 +00:00
Selim Şumlu
f86b164c62 Pontoon: Update Turkish (tr) localization of Test Pilot: Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2017-12-06 16:50:46 +00:00
Marko Andrejić
92b79e8272 Pontoon: Update Serbian (sr) localization of Test Pilot: Firefox Send
Localization authors:
- Marko Andrejić <marko.andrejic93@gmail.com>
2017-12-06 15:30:40 +00:00
Marcelo Poli
335086c9d7 Pontoon: Update Spanish (Argentina) (es-AR) localization of Test Pilot: Firefox Send
Localization authors:
- Marcelo Poli <enzomatrix@gmail.com>
2017-12-06 15:11:09 +00:00
Bjørn I
60806a3954 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Test Pilot: Firefox Send
Localization authors:
- Bjørn I. <bjorn.svindseth@online.no>
2017-12-06 15:11:02 +00:00
Lan Glad
e0e96e7b9b Pontoon: Update Slovenian (sl) localization of Test Pilot: Firefox Send
Localization authors:
- Rok Žerdin <rok.zerdin1990@gmail.com>
- Lan Glad <upwinxp@gmail.com>
2017-12-06 14:50:51 +00:00
Håvar Henriksen
cda35eb127 Pontoon: Update Norwegian Bokmål (nb-NO) localization of Test Pilot: Firefox Send
Localization authors:
- Håvar Henriksen <havar@firefox.no>
2017-12-06 13:11:06 +00:00
ravmn
bf1ef345a2 Pontoon: Update Spanish (Chile) (es-CL) localization of Test Pilot: Firefox Send
Localization authors:
- ravmn <ravmn@ravmn.cl>
2017-12-06 12:51:59 +00:00
Håvar Henriksen
e54ae7a51f Pontoon: Update Norwegian Bokmål (nb-NO) localization of Test Pilot: Firefox Send
Localization authors:
- Håvar Henriksen <havar@firefox.no>
2017-12-06 12:51:57 +00:00
Rhoslyn Prys
a5a2d654ae Pontoon: Update Welsh (cy) localization of Test Pilot: Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@yahoo.com>
2017-12-06 09:50:53 +00:00
Alexander Slovesnik
b6340d8657 Pontoon: Update Russian (ru) localization of Test Pilot: Firefox Send
Localization authors:
- Alexander Slovesnik <unghost@mozilla-russia.org>
- Victor Bychek <a@bychek.ru>
2017-12-06 09:50:50 +00:00
Balázs Meskó
cdb87e2ac2 Pontoon: Update Hungarian (hu) localization of Test Pilot: Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2017-12-06 08:51:11 +00:00
Michael Wolf
a0baed4e14 Pontoon: Update Sorbian, Lower (dsb) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2017-12-06 06:50:51 +00:00
Francesco Lodolo
573a2d4fb1 Pontoon: Update Italian (it) localization of Test Pilot: Firefox Send
Localization authors:
- Francesco Lodolo <francesco.lodolo@mozillaitalia.org>
2017-12-06 06:50:48 +00:00
Michael Köhler
df3ae9e22d Pontoon: Update German (de) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Köhler <michael.koehler1@gmx.de>
2017-12-06 06:50:46 +00:00
Ton
52bffa024e Pontoon: Update Dutch (nl) localization of Test Pilot: Firefox Send
Localization authors:
- Ton <tonnes.mb@gmail.com>
2017-12-06 06:30:46 +00:00
Danny Coates
459499d5f5 fixed password ui 2017-12-05 19:41:53 -08:00
Pin-guang Chen
7cc94f6829 Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Test Pilot: Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2017-12-06 03:11:15 +00:00
Danny Coates
53d5b08559 rename number to num in ftl 2017-12-05 19:07:23 -08:00
Marco Aurélio
c517b074f1 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Test Pilot: Firefox Send
Localization authors:
- Marco Aurélio <fxhelp@yahoo.com>
2017-12-06 00:50:52 +00:00
Michael Wolf
503ba43ebc Pontoon: Update Sorbian, Upper (hsb) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2017-12-05 23:31:32 +00:00
manxmensch
b0755f4bc5 Pontoon: Update Malay (ms) localization of Test Pilot: Firefox Send
Localization authors:
- manxmensch <manxmensch@gmail.com>
2017-12-05 23:11:03 +00:00
Théo Chevalier
89ece1ec4c Pontoon: Update French (fr) localization of Test Pilot: Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
2017-12-05 23:11:00 +00:00
YFdyh000
9fcaefbd99 Pontoon: Update Chinese (China) (zh-CN) localization of Test Pilot: Firefox Send
Localization authors:
- YFdyh000 <yfdyh000@gmail.com>
2017-12-05 23:10:57 +00:00
Rodrigo
81f33c7bbd Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send
Localization authors:
- Rodrigo <rodrigo.mcunha@hotmail.com>
2017-12-05 22:51:14 +00:00
Georgianizator
0ce1bf2360 Pontoon: Update Georgian (ka) localization of Test Pilot: Firefox Send
Localization authors:
- Georgianizator <georgianization@outlook.com>
2017-12-05 22:51:10 +00:00
Danny Coates
bb10c1aa9d added 'report IP infringement' footer link 2017-12-05 14:16:22 -08:00
Danny Coates
b2c1daa6c7 color promo experiment 2017-12-05 14:06:40 -08:00
Danny Coates
da4338ed69 fixed ftl variable names 2017-12-05 12:58:48 -08:00
Danny Coates
1849d712b1 added ver to qsurvey url 2017-12-05 12:51:37 -08:00
Jordi Cuevas
28a7e0f717 Pontoon: Update Spanish (Spain) (es-ES) localization of Test Pilot: Firefox Send
Localization authors:
- avelper <avelper@mozilla-hispano.org>
- Jordi Cuevas <jordicuevas@gmail.com>
2017-12-05 19:51:18 +00:00
Andreas Pettersson
ddbfc79cae Pontoon: Update Swedish (sv-SE) localization of Test Pilot: Firefox Send
Localization authors:
- Andreas Pettersson <az@kth.se>
2017-12-05 19:10:53 +00:00
Marco Aurélio
ec8900d38f Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Test Pilot: Firefox Send
Localization authors:
- Marco Aurélio <fxhelp@yahoo.com>
2017-12-05 17:10:33 +00:00
Michael Köhler
8aadd5d775 Pontoon: Update German (de) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Köhler <michael.koehler1@gmx.de>
2017-12-05 16:51:22 +00:00
Ton
268f9306d9 Pontoon: Update Dutch (nl) localization of Test Pilot: Firefox Send
Localization authors:
- Ton <tonnes.mb@gmail.com>
2017-12-05 16:30:45 +00:00
Francesco Lodolo
866552254c Pontoon: Update Italian (it) localization of Test Pilot: Firefox Send
Localization authors:
- Francesco Lodolo <francesco.lodolo@mozillaitalia.org>
2017-12-05 15:10:38 +00:00
Kohei Yoshino
42f87424c6 Pontoon: Update Japanese (ja) localization of Test Pilot: Firefox Send
Localization authors:
- Kohei Yoshino <kohei.yoshino@gmail.com>
2017-12-05 14:30:41 +00:00
ravmn
4899fb27ec Pontoon: Update Spanish (Chile) (es-CL) localization of Test Pilot: Firefox Send
Localization authors:
- ravmn <ravmn@ravmn.cl>
2017-12-05 14:10:59 +00:00
Fjoerfoks
c2c8d2bdaa Pontoon: Update Frisian (fy-NL) localization of Test Pilot: Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2017-12-05 11:50:56 +00:00
Amin Mahmudian
daa373967f Pontoon: Update Persian (fa) localization of Test Pilot: Firefox Send
Localization authors:
- Amin Mahmudian <amin.mahmudian@gmail.com>
2017-12-05 11:30:57 +00:00
Fjoerfoks
dccc9bfbcd Pontoon: Update Frisian (fy-NL) localization of Test Pilot: Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2017-12-05 11:30:51 +00:00
Marko Andrejić
f51a873752 Pontoon: Update Serbian (sr) localization of Test Pilot: Firefox Send
Localization authors:
- Marko Andrejić <marko.andrejic93@gmail.com>
2017-12-05 10:50:52 +00:00
YFdyh000
bad5efc5e8 Pontoon: Update Chinese (China) (zh-CN) localization of Test Pilot: Firefox Send
Localization authors:
- YFdyh000 <yfdyh000@gmail.com>
2017-12-05 10:31:06 +00:00
Rodrigo
edf8384348 Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send
Localization authors:
- Rodrigo <rodrigo.mcunha@hotmail.com>
2017-12-05 10:10:42 +00:00
manxmensch
65c2f0e191 Pontoon: Update Malay (ms) localization of Test Pilot: Firefox Send
Localization authors:
- manxmensch <manxmensch@gmail.com>
2017-12-05 10:10:40 +00:00
Rodrigo
427a09296c Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send
Localization authors:
- Rodrigo <rodrigo.mcunha@hotmail.com>
2017-12-05 09:50:40 +00:00
Georgianizator
ba11d62003 Pontoon: Update Georgian (ka) localization of Test Pilot: Firefox Send
Localization authors:
- Georgianizator <georgianization@outlook.com>
2017-12-05 09:30:37 +00:00
Balázs Meskó
900dbe781e Pontoon: Update Hungarian (hu) localization of Test Pilot: Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2017-12-05 08:11:19 +00:00
Bjørn I
ee19aa8f2e Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Test Pilot: Firefox Send
Localization authors:
- Bjørn I. <bjorn.svindseth@online.no>
2017-12-05 07:30:40 +00:00
Nihad Suljić
e9cff66852 Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- Nihad Suljić <nihad.suljic92@gmail.com>
2017-12-05 06:50:58 +00:00
Frederick Villaluna
f63894bea7 Pontoon: Update Tagalog (tl) localization of Test Pilot: Firefox Send
Localization authors:
- Frederick Villaluna <fv_comscie@yahoo.com>
2017-12-05 05:11:02 +00:00
Roberto Alvarado
35a285d71a Pontoon: Update Spanish (Mexico) (es-MX) localization of Test Pilot: Firefox Send
Localization authors:
- Roberto Alvarado <ralv888@gmail.com>
2017-12-05 04:11:10 +00:00
Pin-guang Chen
ba80b01150 Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Test Pilot: Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2017-12-05 04:11:08 +00:00
Théo Chevalier
c9be359db4 Pontoon: Update French (fr) localization of Test Pilot: Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
2017-12-05 03:50:56 +00:00
Danny Coates
46a3933dbb Merge pull request #654 from mozilla/multi
Multiple download UI
2017-12-04 19:29:03 -08:00
Danny Coates
7b4060f9e1 Added multiple download option 2017-12-04 15:52:31 -08:00
Danny Coates
beb3a6e67b Merge pull request #650 from ovlb/hotfix/ios-input-appearance
#634: overwrite appearance of password submit input
2017-11-28 11:45:06 -08:00
Alberto Castro
b393c35284 Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send
Localization authors:
- Alberto Castro <albertdcastro@gmail.com>
2017-11-28 11:51:09 +00:00
Rodrigo
ad371553ba Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send
Localization authors:
- Rodrigo <rodrigo.mcunha@hotmail.com>
2017-11-24 13:31:30 +00:00
albertdcastro
0107fb9486 Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send
Localization authors:
- albertdcastro <albertdcastro@gmail.com>
2017-11-24 12:11:53 +00:00
Oscar
7cf70317e8 #634: overwrite appearance of password submit input
Bug: The button to set a password had a different look than other buttons on the site

Fix: add -webkit-appearance none on the button element to force browser to discard the default styling. For a reduced test case demonstrating the fix see https://codepen.io/ovl/full/qVYgoO/
2017-11-23 15:28:32 +01:00
Danny Coates
7d8aaac5d2 Merge pull request #649 from ovlb/hotfix/share-interface-button-alignment
#609 share interface: align text in input and button
2017-11-22 11:57:08 -08:00
Oscar
2b5f7d126f share interface: align text in input and button
Bug: Text in inout and button are not aligned on the middle axis

Fix: Add padding-bottom on the button elements to push their contents a bit higher
2017-11-22 20:36:22 +01:00
Théo Chevalier
3cbc71ca1b Pontoon: Update French (fr) localization of Test Pilot: Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
2017-11-17 02:30:26 +00:00
Tymur Faradzhev
9c4ac38a6c Pontoon: Update Ukrainian (uk) localization of Test Pilot: Firefox Send
Localization authors:
- Tymur Faradzhev <faradzhev.timur@gmail.com>
2017-11-16 21:51:21 +00:00
Arash Mousavi
9ae64a97ba Pontoon: Update Persian (fa) localization of Test Pilot: Firefox Send
Localization authors:
- Arash Mousavi <mousavi.arash@gmail.com>
2017-11-16 19:10:59 +00:00
Danny Coates
2807b1cad5 bump version to v2.1.2 2017-11-16 11:03:40 -08:00
Danny Coates
157e832c95 Merge pull request #645 from laurentj/patch-1
Remove the leak of the password into the console
2017-11-16 10:58:50 -08:00
Danny Coates
d78fcd3721 fixed promo position while ondrag is set. fixes 2017-11-16 10:50:29 -08:00
Radu Popescu
ac7ab79aef Pontoon: Update Romanian (ro) localization of Test Pilot: Firefox Send
Localization authors:
- Radu Popescu <ra.mi.90@gmail.com>
- Jobava <jobaval10n@gmail.com>
2017-11-16 17:52:07 +00:00
Laurent Jouanneau
00fb353465 Remove the leak of the password into the console 2017-11-16 12:28:16 +01:00
Hyeonseok Shin
f0ec5a9496 Pontoon: Update Korean (ko) localization of Test Pilot: Firefox Send
Localization authors:
- Hyeonseok Shin <hyeonseok@gmail.com>
2017-11-16 05:51:26 +00:00
Danny Coates
7a31082da1 bump version to v2.1.1 2017-11-15 10:59:03 -08:00
Danny Coates
b54f4575ee allow inline styles. fixes #644 2017-11-15 10:54:13 -08:00
Danny Coates
490a1e88eb don't disable copy while setting password. fixes #638 2017-11-14 19:07:24 -08:00
Danny Coates
2f8a3c9904 Merge pull request #641 from mozilla/banners
Added experiment for firefox download promo
2017-11-14 18:59:21 -08:00
Danny Coates
e7fdf76120 Added experiment for firefox download promo 2017-11-14 12:24:54 -08:00
Sahithi
d0d41b743a Pontoon: Update Telugu (te) localization of Test Pilot: Firefox Send
Localization authors:
- Sahithi <sahithi.thinker@gmail.com>
2017-11-13 10:30:34 +00:00
Enol
a2995411d6 Pontoon: Update Asturian (ast) localization of Test Pilot: Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2017-11-11 16:30:55 +00:00
Merike Sell
3246c4a621 Pontoon: Update Estonian (et) localization of Test Pilot: Firefox Send
Localization authors:
- Merike Sell <merikes@gmail.com>
2017-11-11 14:10:36 +00:00
Juraj Cigáň
48faf929a4 Pontoon: Update Slovak (sk) localization of Test Pilot: Firefox Send
Localization authors:
- Juraj Cigáň <kusavica@gmail.com>
2017-11-10 22:50:36 +00:00
Danny Coates
b7f922a999 Merge pull request #640 from mozilla/i586
use fluent-langneg for subtag support
2017-11-10 13:01:20 -08:00
Danny Coates
bfcdf9340d use fluent-langneg for subtag support 2017-11-10 12:40:18 -08:00
Danny Coates
4ed515f5a3 updated deps 2017-11-09 15:07:03 -08:00
Danny Coates
84b2737ffb Merge pull request #639 from mozilla/i586
wrap number localization in try/catch
2017-11-09 14:17:11 -08:00
Danny Coates
deabca5a94 wrap number localization in try/catch 2017-11-09 13:58:20 -08:00
صفا الفليج
e9a49e23e8 Pontoon: Update Arabic (ar) localization of Test Pilot: Firefox Send
Localization authors:
- صفا الفليج <safa1996alfulaij@gmail.com>
2017-11-09 16:31:40 +00:00
Danny Coates
cfdef23365 v2.0.0 2017-11-07 21:31:12 -08:00
Juan Esteban Ajsivinac Sián
7c4b6a9de4 Pontoon: Update Kaqchikel (cak) localization of Test Pilot: Firefox Send
Localization authors:
- Juan Esteban Ajsivinac Sián <ajtzibsyan@yahoo.com>
2017-11-07 23:11:16 +00:00
Elisa X
bb8866f73f Pontoon: Update Spanish (Mexico) (es-MX) localization of Test Pilot: Firefox Send
Localization authors:
- Elisa X. <ee.sf2000@gmail.com>
2017-11-07 17:51:47 +00:00
Fjoerfoks
33c42648ef Pontoon: Update Frisian (fy-NL) localization of Test Pilot: Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2017-11-07 13:51:57 +00:00
Selim Şumlu
7feddd2eee Pontoon: Update Turkish (tr) localization of Test Pilot: Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2017-11-07 11:10:57 +00:00
Georgianizator
1344b84cf5 Pontoon: Update Georgian (ka) localization of Test Pilot: Firefox Send
Localization authors:
- Georgianizator <georgianization@outlook.com>
2017-11-07 11:10:54 +00:00
Sara Todaro
ef03b750c5 Pontoon: Update Italian (it) localization of Test Pilot: Firefox Send
Localization authors:
- Sara Todaro <sara.todaro@mozillaitalia.org>
2017-11-07 10:10:32 +00:00
Rhoslyn Prys
0c07d78a37 Pontoon: Update Welsh (cy) localization of Test Pilot: Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@yahoo.com>
2017-11-07 09:10:43 +00:00
Balázs Meskó
b5885e446c Pontoon: Update Hungarian (hu) localization of Test Pilot: Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2017-11-07 09:10:40 +00:00
Marko Andrejić
0fa3d4481a Pontoon: Update Serbian (sr) localization of Test Pilot: Firefox Send
Localization authors:
- Marko Andrejić <marko.andrejic93@gmail.com>
2017-11-07 08:31:30 +00:00
Kohei Yoshino
49e7c2e05b Pontoon: Update Japanese (ja) localization of Test Pilot: Firefox Send
Localization authors:
- Kohei Yoshino <kohei.yoshino@gmail.com>
2017-11-07 07:11:28 +00:00
Nihad
2dc7d046ef Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- Nihad <nihad.suljic92@gmail.com>
2017-11-07 07:11:26 +00:00
Frederick Villaluna
3e0bd41efd Pontoon: Update Tagalog (tl) localization of Test Pilot: Firefox Send
Localization authors:
- Frederick Villaluna <fv_comscie@yahoo.com>
2017-11-07 02:51:16 +00:00
ravmn
929eaca2d8 Pontoon: Update Spanish (Chile) (es-CL) localization of Test Pilot: Firefox Send
Localization authors:
- ravmn <ravmn@ravmn.cl>
2017-11-07 01:51:10 +00:00
manxmensch
60517c5ab6 Pontoon: Update Malay (ms) localization of Test Pilot: Firefox Send
Localization authors:
- manxmensch <manxmensch@gmail.com>
2017-11-07 01:51:08 +00:00
Bjørn I
97a8a2b305 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Test Pilot: Firefox Send
Localization authors:
- Bjørn I. <bjorn.svindseth@online.no>
2017-11-06 22:31:54 +00:00
Maykon Chagas
8fc54bdbe2 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Test Pilot: Firefox Send
Localization authors:
- Maykon Chagas <mchagas@riseup.net>
2017-11-06 22:10:59 +00:00
Danny Coates
6ff251b24a fixes #319 - unsupported redirect 2017-11-06 14:09:23 -08:00
Michael Wolf
7237800a91 Pontoon: Update Sorbian, Upper (hsb) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2017-11-06 21:51:15 +00:00
Michael Wolf
b4cc8e92c7 Pontoon: Update Sorbian, Lower (dsb) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2017-11-06 21:51:12 +00:00
Danny Coates
2e233da16d unsupport MS Edge (for now, sorry) and some http header nits 2017-11-06 13:36:56 -08:00
Michael Wolf
b703f78db9 Pontoon: Update Sorbian, Upper (hsb) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2017-11-06 21:32:06 +00:00
Marcelo Poli
13e792cf4d Pontoon: Update Spanish (Argentina) (es-AR) localization of Test Pilot: Firefox Send
Localization authors:
- Marcelo Poli <enzomatrix@gmail.com>
2017-11-06 21:11:09 +00:00
Ton
552c2d74f3 Pontoon: Update Dutch (nl) localization of Test Pilot: Firefox Send
Localization authors:
- Ton <tonnes.mb@gmail.com>
2017-11-06 21:11:06 +00:00
Håvar Henriksen
593f23b021 Pontoon: Update Norwegian Bokmål (nb-NO) localization of Test Pilot: Firefox Send
Localization authors:
- Håvar Henriksen <havar@firefox.no>
2017-11-06 20:10:55 +00:00
Andreas Pettersson
1baf83bac3 Pontoon: Update Swedish (sv-SE) localization of Test Pilot: Firefox Send
Localization authors:
- Andreas Pettersson <az@kth.se>
2017-11-06 19:31:27 +00:00
Lan Glad
d43ca3190e Pontoon: Update Slovenian (sl) localization of Test Pilot: Firefox Send
Localization authors:
- Lan Glad <upwinxp@gmail.com>
2017-11-06 19:11:14 +00:00
Victor Bychek
c4c7860876 Pontoon: Update Russian (ru) localization of Test Pilot: Firefox Send
Localization authors:
- Victor Bychek <a@bychek.ru>
2017-11-06 19:11:06 +00:00
Michael Köhler
0decdeb37c Pontoon: Update German (de) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Köhler <michael.koehler1@gmx.de>
2017-11-06 18:51:08 +00:00
Pin-guang Chen
47505dcc31 Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Test Pilot: Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2017-11-06 18:51:03 +00:00
avelper
e71d6e792b Pontoon: Update Spanish (Spain) (es-ES) localization of Test Pilot: Firefox Send
Localization authors:
- avelper <avelper@mozilla-hispano.org>
2017-11-06 18:32:04 +00:00
Rodrigo
29796cfec8 Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send
Localization authors:
- Rodrigo <rodrigo.mcunha@hotmail.com>
2017-11-06 18:31:56 +00:00
Filip Hruška
4bdf255c3a Pontoon: Update Czech (cs) localization of Test Pilot: Firefox Send
Localization authors:
- Filip Hruška <fhr@fhrnet.eu>
2017-11-06 18:31:49 +00:00
Théo Chevalier
11efe8b8d1 Pontoon: Update French (fr) localization of Test Pilot: Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
2017-11-06 18:10:45 +00:00
YFdyh000
3dd2d09584 Pontoon: Update Chinese (China) (zh-CN) localization of Test Pilot: Firefox Send
Localization authors:
- YFdyh000 <yfdyh000@gmail.com>
2017-11-06 18:10:41 +00:00
Danny Coates
ed4e8e8f25 Merge pull request #633 from ehuggett/563-regres
Keyboard navigation/visual feedback regression
2017-11-06 10:01:43 -08:00
Danny Coates
181a74df88 Merge pull request #632 from mozilla/pwd
display the 'add password' button only when the input field isn't empty
2017-11-06 09:41:06 -08:00
ehuggett
166b2f3a52 fix keyboard navigation/visual feedback for upload 2017-11-05 13:00:58 +00:00
Muḥend Belqasem
bd5cdc52f9 Pontoon: Update Kabyle (kab) localization of Test Pilot: Firefox Send
Localization authors:
- Muḥend Belqasem <belkacem77@gmail.com>
2017-11-04 20:31:17 +00:00
Sander Lepik
5d0318c102 Pontoon: Update Estonian (et) localization of Test Pilot: Firefox Send
Localization authors:
- Sander Lepik <sander.lepik@eesti.ee>
2017-11-04 19:11:01 +00:00
Danny Coates
17adc644fb display the 'add password' button only when the input field isn't empty 2017-11-02 14:27:54 -07:00
صفا الفليج
f48159dc0b Pontoon: Update Arabic (ar) localization of Test Pilot: Firefox Send
Localization authors:
- Abdalrahman Hwoij <howij1995@gmail.com>
- صفا الفليج <safa1996alfulaij@gmail.com>
2017-11-02 18:31:51 +00:00
Danny Coates
360697c034 Merge pull request #626 from ehuggett/623-password-field
Partial fix for #623
2017-11-02 11:02:58 -07:00
ravmn
45dd833b27 Pontoon: Update Spanish (Chile) (es-CL) localization of Test Pilot: Firefox Send
Localization authors:
- ravmn <ravmn@ravmn.cl>
2017-11-02 01:30:49 +00:00
ehuggett
98491eed01 set autocomplete off for addPassword checkbox 2017-11-02 00:08:36 +00:00
ehuggett
fdafc1c59e minor fix for togglePasswordInput 2017-11-01 23:36:45 +00:00
Марко Костић (Marko Kostić)
a32638ed4c Pontoon: Update Serbian (sr) localization of Test Pilot: Firefox Send
Localization authors:
- Марко Костић (Marko Kostić) <marko.m.kostic@gmail.com>
2017-11-01 17:30:55 +00:00
avelper
39080a6046 Pontoon: Update Spanish (Spain) (es-ES) localization of Test Pilot: Firefox Send
Localization authors:
- avelper <avelper@mozilla-hispano.org>
2017-11-01 11:51:43 +00:00
Frederick Villaluna
a124d36714 Pontoon: Update Tagalog (tl) localization of Test Pilot: Firefox Send
Localization authors:
- Frederick Villaluna <fv_comscie@yahoo.com>
2017-11-01 09:30:46 +00:00
Frederick Villaluna
7f9e619643 Pontoon: Update Tagalog (tl) localization of Test Pilot: Firefox Send
Localization authors:
- Frederick Villaluna <fv_comscie@yahoo.com>
2017-11-01 09:10:58 +00:00
Marcelo Poli
db12f2f5c8 Pontoon: Update Spanish (Argentina) (es-AR) localization of Test Pilot: Firefox Send
Localization authors:
- Marcelo Poli <enzomatrix@gmail.com>
2017-10-31 21:51:16 +00:00
Georgianizator
415e0b70f3 Pontoon: Update Georgian (ka) localization of Test Pilot: Firefox Send
Localization authors:
- Georgianizator <georgianization@outlook.com>
2017-10-31 21:11:40 +00:00
Jakub Rychlý
0e4b1e5ec7 Pontoon: Update Czech (cs) localization of Test Pilot: Firefox Send
Localization authors:
- Jakub Rychlý <jrychly@jakubrychly.cz>
2017-10-31 20:11:34 +00:00
Danny Coates
054a97371c Merge pull request #624 from ehuggett/nit
set a default MIME type in file metadata
2017-10-31 11:09:01 -07:00
Roberto Alvarado
2b25b6a6ea Pontoon: Update Spanish (Mexico) (es-MX) localization of Test Pilot: Firefox Send
Localization authors:
- Roberto Alvarado <ralv888@gmail.com>
2017-10-31 16:52:02 +00:00
Francesco Lodolo
780ed3120e Pontoon: Update Italian (it) localization of Test Pilot: Firefox Send
Localization authors:
- Francesco Lodolo <francesco.lodolo@mozillaitalia.org>
2017-10-31 16:31:20 +00:00
Bjørn I
bdd3cbd4c7 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Test Pilot: Firefox Send
Localization authors:
- Bjørn I. <bjorn.svindseth@online.no>
2017-10-31 15:11:35 +00:00
Rhoslyn Prys
0c8013038f Pontoon: Update Welsh (cy) localization of Test Pilot: Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@yahoo.com>
2017-10-31 13:54:03 +00:00
Selim Şumlu
c020d59c56 Pontoon: Update Turkish (tr) localization of Test Pilot: Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2017-10-31 13:53:56 +00:00
Juraj Cigáň
a5c336494b Pontoon: Update Slovak (sk) localization of Test Pilot: Firefox Send
Localization authors:
- Juraj Cigáň <kusavica@gmail.com>
2017-10-31 13:53:51 +00:00
Luiz Carlos de Morais
aaa4655f45 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Test Pilot: Firefox Send
Localization authors:
- Luiz Carlos de Morais <lcom_flip@hotmail.com>
2017-10-31 13:53:48 +00:00
reza.habibi2008
ed18ec0bc5 Pontoon: Update Persian (fa) localization of Test Pilot: Firefox Send
Localization authors:
- reza.habibi2008 <reza.habibi2008@gmail.com>
2017-10-31 13:53:42 +00:00
Håvar Henriksen
1de43f31b6 Pontoon: Update Norwegian Bokmål (nb-NO) localization of Test Pilot: Firefox Send
Localization authors:
- Håvar Henriksen <havar@firefox.no>
2017-10-31 13:53:38 +00:00
manxmensch
1a04c86edd Pontoon: Update Malay (ms) localization of Test Pilot: Firefox Send
Localization authors:
- manxmensch <manxmensch@gmail.com>
2017-10-31 13:53:34 +00:00
YFdyh000
2bbdcae82e Pontoon: Update Chinese (China) (zh-CN) localization of Test Pilot: Firefox Send
Localization authors:
- YFdyh000 <yfdyh000@gmail.com>
2017-10-31 13:53:30 +00:00
Nihad
9b0aa5d601 Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- Nihad <nihad.suljic92@gmail.com>
2017-10-31 13:53:27 +00:00
Pin-guang Chen
cdc261e30a Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Test Pilot: Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2017-10-31 04:51:09 +00:00
Enol
09133a66b0 Pontoon: Update Asturian (ast) localization of Test Pilot: Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2017-10-31 00:31:16 +00:00
Matjaž Horvat
64f1a31533 Pontoon: Update Slovenian (sl) localization of Test Pilot: Firefox Send
Localization authors:
- Matjaž Horvat <matjaz.horvat@gmail.com>
2017-10-30 23:11:54 +00:00
manxmensch
9a92a50a5f Pontoon: Update Malay (ms) localization of Test Pilot: Firefox Send
Localization authors:
- manxmensch <manxmensch@gmail.com>
2017-10-30 23:11:40 +00:00
Juan Esteban Ajsivinac Sián
2afd93e82f Pontoon: Update Kaqchikel (cak) localization of Test Pilot: Firefox Send
Localization authors:
- Juan Esteban Ajsivinac Sián <ajtzibsyan@yahoo.com>
2017-10-30 23:11:36 +00:00
Kohei Yoshino
cb62cc1e9d Pontoon: Update Japanese (ja) localization of Test Pilot: Firefox Send
Localization authors:
- Kohei Yoshino <kohei.yoshino@gmail.com>
2017-10-30 23:11:25 +00:00
Luna Jernberg
2cd3fc5af9 Pontoon: Update Swedish (sv-SE) localization of Test Pilot: Firefox Send
Localization authors:
- Luna Jernberg <bittin@cafe8bitar.se>
2017-10-30 22:51:11 +00:00
Michael Köhler
bac710a17f Pontoon: Update German (de) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Köhler <michael.koehler1@gmx.de>
2017-10-30 21:30:48 +00:00
Ton
fb8b0f78ca Pontoon: Update Dutch (nl) localization of Test Pilot: Firefox Send
Localization authors:
- Ton <tonnes.mb@gmail.com>
2017-10-30 21:11:34 +00:00
Michael Wolf
e18ce15753 Pontoon: Update Sorbian, Upper (hsb) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2017-10-30 20:51:39 +00:00
Michael Wolf
ed8ce9e3ca Pontoon: Update Sorbian, Lower (dsb) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2017-10-30 20:51:36 +00:00
Victor Bychek
af5ef04115 Pontoon: Update Russian (ru) localization of Test Pilot: Firefox Send
Localization authors:
- Victor Bychek <a@bychek.ru>
2017-10-30 20:51:33 +00:00
Théo Chevalier
9530a3df52 Pontoon: Update French (fr) localization of Test Pilot: Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
2017-10-30 20:51:29 +00:00
albertdcastro
2794ac653f Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send
Localization authors:
- albertdcastro <albertdcastro@gmail.com>
2017-10-30 20:30:56 +00:00
Balázs Meskó
43eb758d73 Pontoon: Update Hungarian (hu) localization of Test Pilot: Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2017-10-30 20:30:53 +00:00
Fjoerfoks
d0364cd101 Pontoon: Update Frisian (fy-NL) localization of Test Pilot: Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2017-10-30 20:30:50 +00:00
Danny Coates
6a008bf312 Merge pull request #612 from mozilla/password-nits
Password UI nits
2017-10-30 12:59:29 -07:00
Danny Coates
dfb271410c use relative path for the url() in css so webpack can substitute the hashed asset name 2017-10-30 12:54:59 -07:00
Danny Coates
789d67209c Merge pull request #617 from mozilla/drop-nav
allow drag and drop if navigating from shared page
2017-10-30 10:20:56 -07:00
Erica
a31f6b75d9 Merge pull request #608 from mozilla/link-copy
disable copying link when password not completed
2017-10-30 10:42:09 -04:00
Erica Wright
f814427a7d clear password input on toggle off 2017-10-30 10:29:49 -04:00
Jae Hyeon Park
b0307e92d4 Pontoon: Update Korean (ko) localization of Test Pilot: Firefox Send
Localization authors:
- Hyeonseok Shin <hyeonseok@gmail.com>
- Jae Hyeon Park <wogus150@naver.com>
2017-10-30 02:30:30 +00:00
Cristian Silaghi
7fa3d69aa1 Pontoon: Update Romanian (ro) localization of Test Pilot: Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2017-10-29 16:51:08 +00:00
ehuggett
58555a6b85 set a default MIME type 2017-10-27 22:41:20 +01:00
Abdalrahman Hwoij
52113395db Pontoon: Update Arabic (ar) localization of Test Pilot: Firefox Send
Localization authors:
- Abdalrahman Hwoij <howij1995@gmail.com>
- صفا الفليج <safa1996alfulaij@gmail.com>
2017-10-26 18:51:13 +00:00
صفا الفليج
8dd1309c21 Pontoon: Update Arabic (ar) localization of Test Pilot: Firefox Send
Localization authors:
- Abdalrahman Hwoij <howij1995@gmail.com>
- صفا الفليج <safa1996alfulaij@gmail.com>
2017-10-26 18:31:41 +00:00
Erica Wright
202e428412 display spaces as they were originally in the password 2017-10-25 15:48:01 -04:00
Erica Wright
6e7ed3cea3 password maxlength and wrapping 2017-10-25 10:50:37 -04:00
Erica Wright
41cb49141b allow drag and drop if navigating from shared page 2017-10-24 16:45:05 -04:00
Erica Wright
82a8283b6e remove unsightly auto-applied margin from safari buttons 2017-10-24 15:08:57 -04:00
Erica Wright
a5d28adc44 focus password field when clicking password checkbox 2017-10-24 12:47:03 -04:00
Erica Wright
82e206bccf password input at smaller screens 2017-10-24 12:36:09 -04:00
Erica Wright
1e4d6646c6 style password checkbox 2017-10-23 15:36:05 -04:00
Erica
acbf9fc32f Merge pull request #605 from mozilla/password-alignment
align the "Password" and "Copy to clipboard" fields.
2017-10-23 13:31:20 -04:00
Erica Wright
046f227003 disable copying link when password not completed 2017-10-23 09:53:12 -04:00
eljuno
50ac9e32be Pontoon: Update Indonesian (id) localization of Test Pilot: Firefox Send
Localization authors:
- eljuno <eljunotrie_anggoro@yahoo.co.id>
2017-10-21 17:10:38 +00:00
Erica Wright
3459dcaa15 align the "Password" and "Copy to clipboard" fields. 2017-10-20 16:21:04 -04:00
Enol
9410defab6 Pontoon: Update Asturian (ast) localization of Test Pilot: Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2017-10-19 21:31:42 +00:00
Nihad
b5a26e11f8 Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- Nihad <nihad.suljic92@gmail.com>
2017-10-19 09:11:14 +00:00
Nihad
c51481628d Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- Nihad <nihad.suljic92@gmail.com>
2017-10-19 08:51:17 +00:00
Nihad
24fa51a12c Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- Nihad <nihad.suljic92@gmail.com>
2017-10-19 07:51:22 +00:00
Nihad
7328520d05 Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- Nihad <nihad.suljic92@gmail.com>
2017-10-19 07:31:28 +00:00
Nihad
409d206f1e Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- Nihad <nihad.suljic92@gmail.com>
2017-10-19 07:11:04 +00:00
Nihad
b0b393f3d9 Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- Nihad <nihad.suljic92@gmail.com>
2017-10-19 06:51:09 +00:00
Nihad
c4499088c8 Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- Nihad <nihad.suljic92@gmail.com>
2017-10-19 06:31:38 +00:00
Nihad
4cccd6ac5c Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- Nihad <nihad.suljic92@gmail.com>
2017-10-19 06:10:50 +00:00
Michal Stanke
188b28fce3 Pontoon: Update Czech (cs) localization of Test Pilot: Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2017-10-17 12:31:48 +00:00
Sander Lepik
24adda6c7d Pontoon: Update Estonian (et) localization of Test Pilot: Firefox Send
Localization authors:
- Sander Lepik <sander.lepik@eesti.ee>
2017-10-16 20:10:49 +00:00
Sander Lepik
4b49302fbe Pontoon: Update Estonian (et) localization of Test Pilot: Firefox Send
Localization authors:
- Sander Lepik <sander.lepik@eesti.ee>
2017-10-16 19:51:40 +00:00
Emin Mastizada
402ab350de Pontoon: Update Azerbaijani (az) localization of Test Pilot: Firefox Send
Localization authors:
- Emin Mastizada <emin@mastizada.com>
2017-10-16 02:51:20 +00:00
Juraj Cigáň
47b68770af Pontoon: Update Slovak (sk) localization of Test Pilot: Firefox Send
Localization authors:
- Juraj Cigáň <kusavica@gmail.com>
2017-10-15 21:31:54 +00:00
Marcelo Poli
60aa16a327 Pontoon: Update Spanish (Argentina) (es-AR) localization of Test Pilot: Firefox Send
Localization authors:
- Marcelo Poli <enzomatrix@gmail.com>
2017-10-15 18:10:48 +00:00
Μιχάλης
5702a4806b Pontoon: Update Greek (el) localization of Test Pilot: Firefox Send
Localization authors:
- Jim Spentzos <jamesspentzos@hotmail.com>
- Μιχάλης <mikem132@protonmail.com>
2017-10-14 22:10:56 +00:00
mirzet.omerovic.1992
74c4bdb660 Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- mirzet.omerovic.1992 <mirzet.omerovic.1992@gmail.com>
2017-10-14 12:10:55 +00:00
mirzet.omerovic.1992
203a2cf7fb Pontoon: Update Bosnian (bs) localization of Test Pilot: Firefox Send
Localization authors:
- mirzet.omerovic.1992 <mirzet.omerovic.1992@gmail.com>
2017-10-14 11:51:07 +00:00
eljuno
1faa2733b3 Pontoon: Update Indonesian (id) localization of Test Pilot: Firefox Send
Localization authors:
- eljuno <eljunotrie_anggoro@yahoo.co.id>
2017-10-13 18:10:42 +00:00
Georgianizator
ffa432a876 Pontoon: Update Georgian (ka) localization of Test Pilot: Firefox Send
Localization authors:
- Georgianizator <georgianization@outlook.com>
2017-10-13 02:51:30 +00:00
Georgianizator
009fd29265 Pontoon: Update Georgian (ka) localization of Test Pilot: Firefox Send
Localization authors:
- Georgianizator <georgianization@outlook.com>
2017-10-13 02:31:25 +00:00
Georgianizator
8f05c2324e Pontoon: Update Georgian (ka) localization of Test Pilot: Firefox Send
Localization authors:
- Georgianizator <georgianization@outlook.com>
2017-10-13 02:10:59 +00:00
Michael Wolf
e1ab515883 Pontoon: Update Sorbian, Lower (dsb) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2017-10-12 20:11:08 +00:00
Mark Heijl
a68a7a60a7 Pontoon: Update Dutch (nl) localization of Test Pilot: Firefox Send
Localization authors:
- Mark Heijl <markh@babelzilla.org>
- Ton <tonnes.mb@gmail.com>
2017-10-12 02:51:16 +00:00
Roberto Alvarado
b4dc274646 Pontoon: Update Spanish (Mexico) (es-MX) localization of Test Pilot: Firefox Send
Localization authors:
- Roberto Alvarado <ralv888@gmail.com>
2017-10-11 16:51:41 +00:00
Arash Mousavi
b31892bdc6 Pontoon: Update Persian (fa) localization of Test Pilot: Firefox Send
Localization authors:
- Arash Mousavi <mousavi.arash@gmail.com>
2017-10-11 16:12:18 +00:00
Maykon Chagas
f388a1348d Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Test Pilot: Firefox Send
Localization authors:
- Maykon Chagas <mchagas@riseup.net>
2017-10-11 15:32:02 +00:00
Francesco Lodolo
52dacbddf9 Pontoon: Update Italian (it) localization of Test Pilot: Firefox Send
Localization authors:
- Francesco Lodolo <francesco.lodolo@mozillaitalia.org>
2017-10-11 13:51:50 +00:00
savemore99.sm
cc52f60aa1 Pontoon: Update Italian (it) localization of Test Pilot: Firefox Send
Localization authors:
- Francesco Lodolo <francesco.lodolo@mozillaitalia.org>
- savemore99.sm <savemore99.sm@gmail.com>
2017-10-11 13:33:29 +00:00
Victor Bychek
1af818b691 Pontoon: Update Russian (ru) localization of Test Pilot: Firefox Send
Localization authors:
- Victor Bychek <a@bychek.ru>
2017-10-11 12:51:50 +00:00
Balázs Meskó
d76f7758e7 Pontoon: Update Hungarian (hu) localization of Test Pilot: Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2017-10-11 12:31:59 +00:00
Selim Şumlu
48ab2f2400 Pontoon: Update Turkish (tr) localization of Test Pilot: Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2017-10-11 12:11:35 +00:00
Balázs Meskó
0aa844eebc Pontoon: Update Hungarian (hu) localization of Test Pilot: Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2017-10-11 12:11:32 +00:00
Bjørn I
481b02ccf2 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Test Pilot: Firefox Send
Localization authors:
- Bjørn I. <bjorn.svindseth@online.no>
2017-10-11 11:11:27 +00:00
Rok Žerdin
67e6ef6fda Pontoon: Update Slovenian (sl) localization of Test Pilot: Firefox Send
Localization authors:
- Rok Žerdin <rok.zerdin1990@gmail.com>
2017-10-11 08:31:40 +00:00
Fjoerfoks
7d19f86d7a Pontoon: Update Frisian (fy-NL) localization of Test Pilot: Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2017-10-11 08:31:33 +00:00
Rhoslyn Prys
2d27d8a47c Pontoon: Update Welsh (cy) localization of Test Pilot: Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@yahoo.com>
2017-10-11 07:51:11 +00:00
Håvar Henriksen
10fac130ef Pontoon: Update Norwegian Bokmål (nb-NO) localization of Test Pilot: Firefox Send
Localization authors:
- Håvar Henriksen <havar@firefox.no>
2017-10-11 07:31:25 +00:00
Rok Žerdin
c6b632543d Pontoon: Update Slovenian (sl) localization of Test Pilot: Firefox Send
Localization authors:
- Rok Žerdin <rok.zerdin1990@gmail.com>
2017-10-11 05:31:31 +00:00
Kohei Yoshino
32eb8157eb Pontoon: Update Japanese (ja) localization of Test Pilot: Firefox Send
Localization authors:
- Kohei Yoshino <kohei.yoshino@gmail.com>
2017-10-11 03:51:18 +00:00
Pin-guang Chen
3628f22114 Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Test Pilot: Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2017-10-11 03:51:15 +00:00
Théo Chevalier
177fa37041 Pontoon: Update French (fr) localization of Test Pilot: Firefox Send
Localization authors:
- Théo Chevalier <theo.chevalier11@gmail.com>
2017-10-11 01:31:39 +00:00
Andreas Pettersson
717f6576ea Pontoon: Update Swedish (sv-SE) localization of Test Pilot: Firefox Send
Localization authors:
- Andreas Pettersson <az@kth.se>
2017-10-11 00:31:17 +00:00
Marko Andrejić
f1b2ffa0fa Pontoon: Update Serbian (sr) localization of Test Pilot: Firefox Send
Localization authors:
- Marko Andrejić <marko.andrejic93@gmail.com>
2017-10-10 23:51:34 +00:00
Juan Esteban Ajsivinac Sián
ac73c23c73 Pontoon: Update Kaqchikel (cak) localization of Test Pilot: Firefox Send
Localization authors:
- Juan Esteban Ajsivinac Sián <ajtzibsyan@yahoo.com>
2017-10-10 23:31:25 +00:00
manxmensch
ac40308b1c Pontoon: Update Malay (ms) localization of Test Pilot: Firefox Send
Localization authors:
- manxmensch <manxmensch@gmail.com>
2017-10-10 22:51:19 +00:00
ravmn
6fb81aa78c Pontoon: Update Spanish (Chile) (es-CL) localization of Test Pilot: Firefox Send
Localization authors:
- ravmn <ravmn@ravmn.cl>
2017-10-10 22:31:22 +00:00
manxmensch
92430c78c2 Pontoon: Update Malay (ms) localization of Test Pilot: Firefox Send
Localization authors:
- manxmensch <manxmensch@gmail.com>
2017-10-10 22:31:18 +00:00
jlG
cb7ddaa295 Pontoon: Update Spanish (Spain) (es-ES) localization of Test Pilot: Firefox Send
Localization authors:
- jlG <jlg.l10n.es@gmail.com>
2017-10-10 22:11:16 +00:00
Michael Wolf
786d079632 Pontoon: Update Sorbian, Upper (hsb) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2017-10-10 21:31:34 +00:00
Rodrigo
4af25a505a Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Test Pilot: Firefox Send
Localization authors:
- Rodrigo <rodrigo.mcunha@hotmail.com>
2017-10-10 21:31:31 +00:00
YFdyh000
3218803aae Pontoon: Update Chinese (China) (zh-CN) localization of Test Pilot: Firefox Send
Localization authors:
- YFdyh000 <yfdyh000@gmail.com>
2017-10-10 21:11:17 +00:00
Michael Köhler
2311d5bcef Pontoon: Update German (de) localization of Test Pilot: Firefox Send
Localization authors:
- Michael Köhler <michael.koehler1@gmx.de>
2017-10-10 20:11:27 +00:00
Danny Coates
e56d92334f Merge pull request #582 from mozilla/split
Add optional password to the download url
2017-10-10 12:42:53 -07:00
Danny Coates
bc24a069da Add optional password to the download url 2017-10-10 10:45:10 -07:00
Danny Coates
837747f8f7 bump version 2017-10-10 10:34:45 -07:00
Danny Coates
a8c32ae49c Merge pull request #583 from mozilla/beef
Promote the beefy UI to default
2017-10-10 10:27:10 -07:00
Danny Coates
32c5b414de use beefy ui 2017-10-10 10:20:49 -07:00
Danny Coates
12c81a22e8 updated deps 2017-10-10 10:08:11 -07:00
Danny Coates
0c5d0d4bb2 Merge pull request #581 from tiagomoraismorgado88/patch-4
introducing ToC to README.md
2017-10-09 14:10:12 -07:00
tiagomoraismorgado
234f9c624d introducing ToC to README.md
**this PR does basically aim at:**
- *introducing ToC to README.md file*
2017-10-06 20:03:14 +01:00
Danny Coates
da669b44ff Merge pull request #579 from mozilla/cancel
Hide cancel button when upload reaches 100%
2017-10-06 11:41:09 -07:00
Danny Coates
3c39f5f085 Merge pull request #580 from mozilla/favicon
Change Favicon in to look better in a variety of cases
2017-10-06 11:40:06 -07:00
Erica Wright
6de91b5872 Change Favicon in to look better in a variety of cases 2017-10-06 11:24:17 -04:00
Rhoslyn Prys
ff9a0979f6 Pontoon: Update Welsh (cy) localization of Test Pilot: Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@yahoo.com>
2017-10-05 16:13:35 +00:00
Erica Wright
e1e8af2489 Hide cancel button when upload reached 100% 2017-10-04 16:34:41 -04:00
Erica
1eb000f615 Merge pull request #571 from ehuggett/svg-logo
Centre logo
2017-10-04 13:25:35 -04:00
ehuggett
e20fd97e59 Centre logo by using transform (not optimal) 2017-10-04 00:05:45 +01:00
Erica
d10ceacd67 Merge pull request #574 from ehuggett/tab-upload
Make upload button focusable (accessibility/tab navigation)
2017-10-02 20:15:37 -04:00
ehuggett
208c28ee01 Make upload button focusable (accessibility/tab navigation) 2017-10-02 23:04:55 +01:00
Danny Coates
cdd1bb3c29 updated deps 2017-10-02 13:03:56 -07:00
Danny Coates
3d9c4fa320 added .nsprc 2017-10-02 12:04:03 -07:00
Danny Coates
9c4d18ef3b updated deps 2017-10-02 11:44:35 -07:00
Juraj Cigáň
ce9ff3959f Pontoon: Update Slovak (sk) localization of Test Pilot: Firefox Send
Localization authors:
- Juraj Cigáň <kusavica@gmail.com>
2017-09-30 17:51:09 +00:00
eljuno
51aef4e1e5 Pontoon: Update Indonesian (id) localization of Test Pilot: Firefox Send
Localization authors:
- eljuno <eljunotrie_anggoro@yahoo.co.id>
2017-09-28 18:50:47 +00:00
hello
90247059d0 Pontoon: Update Hebrew (he) localization of Test Pilot: Firefox Send
Localization authors:
- Yaron Shahrabani <sh.yaron@gmail.com>
- hello <hello@ira.abramov.org>
2017-09-27 18:11:56 +00:00
Danny Coates
c97abb46ed bump version 2017-09-26 10:29:26 -07:00
Danny Coates
b8f5e371c7 updated deps 2017-09-26 10:23:30 -07:00
Danny Coates
401311a05f updated deps. removed choo-log 2017-09-20 13:09:33 -07:00
Sahithi
652b8e4e15 Pontoon: Update Telugu (te) localization of Test Pilot: Firefox Send
Localization authors:
- Sahithi <sahithi.thinker@gmail.com>
2017-09-19 11:31:21 +00:00
Merike Sell
99b7e7c0f1 Pontoon: Update Estonian (et) localization of Test Pilot: Firefox Send
Localization authors:
- Merike Sell <merikes@gmail.com>
2017-09-16 12:52:29 +00:00
Danny Coates
81442bb6f2 set default server states for fira and fileInfo 2017-09-14 12:15:08 -07:00
Danny Coates
137f474b69 fixed A/B test control group selection 2017-09-14 10:02:47 -07:00
114 changed files with 5243 additions and 2129 deletions

3
.nsprc Normal file
View File

@@ -0,0 +1,3 @@
{
"exceptions": ["https://nodesecurity.io/advisories/534"]
}

View File

@@ -7,6 +7,20 @@
---
## Table of Contents
* [What it does](#what-it-does)
* [Requirements](#requirements)
* [Development](#development)
* [Commands](#commands)
* [Configuration](#configuration)
* [Localization](#localization)
* [Contributing](#contributing)
* [Testing](#testing)
* [License](#license)
---
## What it does
A file sharing experiment which allows you to send encrypted files to other users.

View File

@@ -1,28 +1,20 @@
import hash from 'string-hash';
const experiments = {
'5YHCzn2CQTmBwWwTmZupBA': {
id: '5YHCzn2CQTmBwWwTmZupBA',
XnN0idVWSxO6A0kiNkxzGw: {
id: 'XnN0idVWSxO6A0kiNkxzGw',
run: function(variant, state, emitter) {
state.experiment = {
xid: this.id,
xvar: variant
};
// Beefy UI
if (variant === 1) {
state.config.uploadWindowStyle = 'upload-window upload-window-b';
state.config.uploadButtonStyle = 'btn browse browse-b';
} else {
state.config.uploadWindowStyle = 'upload-window';
state.config.uploadButtonStyle = 'btn browse';
}
state.promo = variant === 1 ? 'blue' : 'grey';
emitter.emit('render');
},
eligible: function(state) {
return this.luckyNumber(state) >= 0.5;
eligible: function() {
return (
!/firefox/i.test(navigator.userAgent) &&
document.querySelector('html').lang === 'en-US'
);
},
variant: function(state) {
return this.luckyNumber(state) < 0.5 ? 0 : 1;
return this.luckyNumber(state) > 0.5 ? 1 : 0;
},
luckyNumber: function(state) {
return luckyNumber(
@@ -33,6 +25,7 @@ const experiments = {
};
//Returns a number between 0 and 1
// eslint-disable-next-line no-unused-vars
function luckyNumber(str) {
return hash(str) / 0xffffffff;
}
@@ -61,12 +54,12 @@ export default function initialize(state, emitter) {
checkExperiments(state, emitter);
});
} else {
const enrolled = state.storage.enrolled;
enrolled.forEach(([id, variant]) => {
const enrolled = state.storage.enrolled.filter(([id, variant]) => {
const xp = experiments[id];
if (xp) {
xp.run(variant, state, emitter);
}
return !!xp;
});
// single experiment per session for now
if (enrolled.length === 0) {

View File

@@ -97,6 +97,13 @@ export default function(state, emitter) {
lastRender = Date.now();
});
emitter.on('changeLimit', async ({ file, value }) => {
await FileSender.changeLimit(file.id, file.ownerToken, value);
file.dlimit = value;
state.storage.writeFiles();
metrics.changedDownloadLimit(file);
});
emitter.on('delete', async ({ file, location }) => {
try {
metrics.deletedUpload({
@@ -108,7 +115,7 @@ export default function(state, emitter) {
location
});
state.storage.remove(file.id);
await FileSender.delete(file.id, file.deleteToken);
await FileSender.delete(file.id, file.ownerToken);
} catch (e) {
state.raven.captureException(e);
}
@@ -135,6 +142,7 @@ export default function(state, emitter) {
const time = Date.now() - start;
const speed = size / (time / 1000);
metrics.completedUpload({ size, time, speed, type });
document.getElementById('cancel-upload').hidden = 'hidden';
await delay(1000);
await fadeOut('upload-progress');
info.name = file.name;
@@ -152,6 +160,7 @@ export default function(state, emitter) {
state.storage.totalUploads += 1;
emitter.emit('pushState', `/share/${info.id}`);
} catch (err) {
console.error(err);
state.transfer = null;
if (err.message === '0') {
//cancelled. do nothing
@@ -160,39 +169,69 @@ export default function(state, emitter) {
}
state.raven.captureException(err);
metrics.stoppedUpload({ size, type, err });
emitter.emit('replaceState', '/error');
emitter.emit('pushState', '/error');
}
});
emitter.on('download', async file => {
const size = file.size;
emitter.on('password', async ({ password, file }) => {
try {
await FileSender.setPassword(password, file);
metrics.addedPassword({ size: file.size });
file.password = password;
state.storage.writeFiles();
} catch (e) {
console.error(e);
}
render();
});
emitter.on('preview', async () => {
const file = state.fileInfo;
const url = `/api/download/${file.id}`;
const receiver = new FileReceiver(url, file.key);
const receiver = new FileReceiver(url, file);
receiver.on('progress', updateProgress);
receiver.on('decrypting', render);
state.transfer = receiver;
const links = openLinksInNewTab();
try {
await receiver.getMetadata(file.nonce);
} catch (e) {
if (e.message === '401') {
file.password = null;
if (!file.pwd) {
return emitter.emit('pushState', '/404');
}
}
}
render();
});
emitter.on('download', async file => {
state.transfer.on('progress', render);
state.transfer.on('decrypting', render);
const links = openLinksInNewTab();
const size = file.size;
try {
const start = Date.now();
metrics.startedDownload({ size: file.size, ttl: file.ttl });
const f = await receiver.download();
const f = await state.transfer.download(file.nonce);
const time = Date.now() - start;
const speed = size / (time / 1000);
await delay(1000);
await fadeOut('download-progress');
saveFile(f);
state.storage.totalDownloads += 1;
state.transfer = null;
metrics.completedDownload({ size, time, speed });
emitter.emit('pushState', '/completed');
} catch (err) {
console.error(err);
// TODO cancelled download
const location = err.message === 'notfound' ? '/404' : '/error';
if (location === '/error') {
state.raven.captureException(err);
metrics.stoppedDownload({ size, err });
}
emitter.emit('replaceState', location);
emitter.emit('pushState', location);
} finally {
state.transfer = null;
openLinksInNewTab(links, false);

View File

@@ -1,25 +1,103 @@
import Nanobus from 'nanobus';
import { hexToArray, bytes } from './utils';
import { arrayToB64, b64ToArray, bytes } from './utils';
export default class FileReceiver extends Nanobus {
constructor(url, k) {
constructor(url, file) {
super('FileReceiver');
this.key = window.crypto.subtle.importKey(
'jwk',
{
k,
kty: 'oct',
alg: 'A128GCM',
ext: true
},
{
name: 'AES-GCM'
},
this.secretKeyPromise = window.crypto.subtle.importKey(
'raw',
b64ToArray(file.key),
'HKDF',
false,
['decrypt']
['deriveKey']
);
this.encryptKeyPromise = this.secretKeyPromise.then(sk => {
const encoder = new TextEncoder();
return window.crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: new Uint8Array(),
info: encoder.encode('encryption'),
hash: 'SHA-256'
},
sk,
{
name: 'AES-GCM',
length: 128
},
false,
['decrypt']
);
});
if (file.pwd) {
const encoder = new TextEncoder();
this.authKeyPromise = window.crypto.subtle
.importKey(
'raw',
encoder.encode(file.password),
{ name: 'PBKDF2' },
false,
['deriveKey']
)
.then(pwdKey =>
window.crypto.subtle.deriveKey(
{
name: 'PBKDF2',
salt: encoder.encode(file.url),
iterations: 100,
hash: 'SHA-256'
},
pwdKey,
{
name: 'HMAC',
hash: 'SHA-256'
},
true,
['sign']
)
);
} else {
this.authKeyPromise = this.secretKeyPromise.then(sk => {
const encoder = new TextEncoder();
return window.crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: new Uint8Array(),
info: encoder.encode('authentication'),
hash: 'SHA-256'
},
sk,
{
name: 'HMAC',
hash: { name: 'SHA-256' }
},
false,
['sign']
);
});
}
this.metaKeyPromise = this.secretKeyPromise.then(sk => {
const encoder = new TextEncoder();
return window.crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: new Uint8Array(),
info: encoder.encode('metadata'),
hash: 'SHA-256'
},
sk,
{
name: 'AES-GCM',
length: 128
},
false,
['decrypt']
);
});
this.file = file;
this.url = url;
this.msg = 'fileSizeProgress';
this.state = 'initialized';
this.progress = [0, 1];
}
@@ -38,7 +116,71 @@ export default class FileReceiver extends Nanobus {
// TODO
}
downloadFile() {
async fetchMetadata(nonce) {
const authHeader = await this.getAuthHeader(nonce);
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState === XMLHttpRequest.DONE) {
const nonce = xhr.getResponseHeader('WWW-Authenticate').split(' ')[1];
this.file.nonce = nonce;
if (xhr.status === 200) {
return resolve(xhr.response);
}
const err = new Error(xhr.status);
err.nonce = nonce;
reject(err);
}
};
xhr.onerror = () => reject(new Error(0));
xhr.ontimeout = () => reject(new Error(0));
xhr.open('get', `/api/metadata/${this.file.id}`);
xhr.setRequestHeader('Authorization', authHeader);
xhr.responseType = 'json';
xhr.timeout = 2000;
xhr.send();
});
}
async getMetadata(nonce) {
let data = null;
try {
try {
data = await this.fetchMetadata(nonce);
} catch (e) {
if (e.message === '401' && nonce !== e.nonce) {
// allow one retry for changed nonce
data = await this.fetchMetadata(e.nonce);
} else {
throw e;
}
}
const metaKey = await this.metaKeyPromise;
const json = await window.crypto.subtle.decrypt(
{
name: 'AES-GCM',
iv: new Uint8Array(12),
tagLength: 128
},
metaKey,
b64ToArray(data.metadata)
);
const decoder = new TextDecoder();
const meta = JSON.parse(decoder.decode(json));
this.file.name = meta.name;
this.file.type = meta.type;
this.file.iv = meta.iv;
this.file.size = data.size;
this.file.ttl = data.ttl;
this.state = 'ready';
} catch (e) {
this.state = 'invalid';
throw e;
}
}
async downloadFile(nonce) {
const authHeader = await this.getAuthHeader(nonce);
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
@@ -49,52 +191,81 @@ export default class FileReceiver extends Nanobus {
}
};
xhr.onload = function(event) {
xhr.onload = event => {
if (xhr.status === 404) {
reject(new Error('notfound'));
return;
}
if (xhr.status !== 200) {
const err = new Error(xhr.status);
err.nonce = xhr.getResponseHeader('WWW-Authenticate').split(' ')[1];
return reject(err);
}
const blob = new Blob([this.response]);
const meta = JSON.parse(xhr.getResponseHeader('X-File-Metadata'));
const blob = new Blob([xhr.response]);
const fileReader = new FileReader();
fileReader.onload = function() {
resolve({
data: this.result,
name: meta.filename,
type: meta.mimeType,
iv: meta.id
});
resolve(this.result);
};
fileReader.readAsArrayBuffer(blob);
};
xhr.open('get', this.url);
xhr.setRequestHeader('Authorization', authHeader);
xhr.responseType = 'blob';
xhr.send();
});
}
async download() {
const key = await this.key;
const file = await this.downloadFile();
this.msg = 'decryptingFile';
this.emit('decrypting');
const plaintext = await window.crypto.subtle.decrypt(
async getAuthHeader(nonce) {
const authKey = await this.authKeyPromise;
const sig = await window.crypto.subtle.sign(
{
name: 'AES-GCM',
iv: hexToArray(file.iv),
tagLength: 128
name: 'HMAC'
},
key,
file.data
authKey,
b64ToArray(nonce)
);
this.msg = 'downloadFinish';
return {
plaintext,
name: decodeURIComponent(file.name),
type: file.type
};
return `send-v1 ${arrayToB64(new Uint8Array(sig))}`;
}
async download(nonce) {
this.state = 'downloading';
this.emit('progress', this.progress);
try {
const encryptKey = await this.encryptKeyPromise;
let ciphertext = null;
try {
ciphertext = await this.downloadFile(nonce);
} catch (e) {
if (e.message === '401' && nonce !== e.nonce) {
ciphertext = await this.downloadFile(e.nonce);
} else {
throw e;
}
}
this.msg = 'decryptingFile';
this.emit('decrypting');
const plaintext = await window.crypto.subtle.decrypt(
{
name: 'AES-GCM',
iv: b64ToArray(this.file.iv),
tagLength: 128
},
encryptKey,
ciphertext
);
this.msg = 'downloadFinish';
this.state = 'complete';
return {
plaintext,
name: decodeURIComponent(this.file.name),
type: this.file.type
};
} catch (e) {
this.state = 'invalid';
throw e;
}
}
}

View File

@@ -1,5 +1,16 @@
import Nanobus from 'nanobus';
import { arrayToHex, bytes } from './utils';
import { arrayToB64, b64ToArray, bytes } from './utils';
async function getAuthHeader(authKey, nonce) {
const sig = await window.crypto.subtle.sign(
{
name: 'HMAC'
},
authKey,
b64ToArray(nonce)
);
return `send-v1 ${arrayToB64(new Uint8Array(sig))}`;
}
export default class FileSender extends Nanobus {
constructor(file) {
@@ -10,13 +21,13 @@ export default class FileSender extends Nanobus {
this.cancelled = false;
this.iv = window.crypto.getRandomValues(new Uint8Array(12));
this.uploadXHR = new XMLHttpRequest();
this.key = window.crypto.subtle.generateKey(
{
name: 'AES-GCM',
length: 128
},
true,
['encrypt']
this.rawSecret = window.crypto.getRandomValues(new Uint8Array(16));
this.secretKey = window.crypto.subtle.importKey(
'raw',
this.rawSecret,
'HKDF',
false,
['deriveKey']
);
}
@@ -35,7 +46,26 @@ export default class FileSender extends Nanobus {
}
};
xhr.send(JSON.stringify({ delete_token: token }));
xhr.send(JSON.stringify({ owner_token: token }));
});
}
static changeLimit(id, owner_token, dlimit) {
return new Promise((resolve, reject) => {
if (!id || !owner_token) {
return reject();
}
const xhr = new XMLHttpRequest();
xhr.open('POST', `/api/params/${id}`);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = () => {
if (xhr.readyState === XMLHttpRequest.DONE) {
resolve();
}
};
xhr.send(JSON.stringify({ owner_token, dlimit }));
});
}
@@ -71,14 +101,12 @@ export default class FileSender extends Nanobus {
});
}
uploadFile(encrypted, keydata) {
uploadFile(encrypted, metadata, rawAuth) {
return new Promise((resolve, reject) => {
const file = this.file;
const id = arrayToHex(this.iv);
const dataView = new DataView(encrypted);
const blob = new Blob([dataView], { type: file.type });
const blob = new Blob([dataView], { type: 'application/octet-stream' });
const fd = new FormData();
fd.append('data', blob, file.name);
fd.append('data', blob);
const xhr = this.uploadXHR;
@@ -92,14 +120,18 @@ export default class FileSender extends Nanobus {
xhr.onreadystatechange = () => {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
const nonce = xhr
.getResponseHeader('WWW-Authenticate')
.split(' ')[1];
this.progress = [1, 1];
this.msg = 'notifyUploadDone';
const responseObj = JSON.parse(xhr.responseText);
return resolve({
url: responseObj.url,
id: responseObj.id,
secretKey: keydata.k,
deleteToken: responseObj.delete
secretKey: arrayToB64(this.rawSecret),
ownerToken: responseObj.owner,
nonce
});
}
this.msg = 'errorPageHeader';
@@ -110,18 +142,62 @@ export default class FileSender extends Nanobus {
xhr.open('post', '/api/upload', true);
xhr.setRequestHeader(
'X-File-Metadata',
JSON.stringify({
id: id,
filename: encodeURIComponent(file.name)
})
arrayToB64(new Uint8Array(metadata))
);
xhr.setRequestHeader('Authorization', `send-v1 ${arrayToB64(rawAuth)}`);
xhr.send(fd);
this.msg = 'fileSizeProgress';
});
}
async upload() {
const key = await this.key;
const encoder = new TextEncoder();
const secretKey = await this.secretKey;
const encryptKey = await window.crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: new Uint8Array(),
info: encoder.encode('encryption'),
hash: 'SHA-256'
},
secretKey,
{
name: 'AES-GCM',
length: 128
},
false,
['encrypt']
);
const authKey = await window.crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: new Uint8Array(),
info: encoder.encode('authentication'),
hash: 'SHA-256'
},
secretKey,
{
name: 'HMAC',
hash: 'SHA-256'
},
true,
['sign']
);
const metaKey = await window.crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: new Uint8Array(),
info: encoder.encode('metadata'),
hash: 'SHA-256'
},
secretKey,
{
name: 'AES-GCM',
length: 128
},
false,
['encrypt']
);
const plaintext = await this.readFile();
if (this.cancelled) {
throw new Error(0);
@@ -134,13 +210,103 @@ export default class FileSender extends Nanobus {
iv: this.iv,
tagLength: 128
},
key,
encryptKey,
plaintext
);
const metadata = await window.crypto.subtle.encrypt(
{
name: 'AES-GCM',
iv: new Uint8Array(12),
tagLength: 128
},
metaKey,
encoder.encode(
JSON.stringify({
iv: arrayToB64(this.iv),
name: this.file.name,
type: this.file.type || 'application/octet-stream'
})
)
);
const rawAuth = await window.crypto.subtle.exportKey('raw', authKey);
if (this.cancelled) {
throw new Error(0);
}
const keydata = await window.crypto.subtle.exportKey('jwk', key);
return this.uploadFile(encrypted, keydata);
return this.uploadFile(encrypted, metadata, new Uint8Array(rawAuth));
}
static async setPassword(password, file) {
const encoder = new TextEncoder();
const secretKey = await window.crypto.subtle.importKey(
'raw',
b64ToArray(file.secretKey),
'HKDF',
false,
['deriveKey']
);
const authKey = await window.crypto.subtle.deriveKey(
{
name: 'HKDF',
salt: new Uint8Array(),
info: encoder.encode('authentication'),
hash: 'SHA-256'
},
secretKey,
{
name: 'HMAC',
hash: 'SHA-256'
},
true,
['sign']
);
const authHeader = await getAuthHeader(authKey, file.nonce);
const pwdKey = await window.crypto.subtle.importKey(
'raw',
encoder.encode(password),
{ name: 'PBKDF2' },
false,
['deriveKey']
);
const newAuthKey = await window.crypto.subtle.deriveKey(
{
name: 'PBKDF2',
salt: encoder.encode(file.url),
iterations: 100,
hash: 'SHA-256'
},
pwdKey,
{
name: 'HMAC',
hash: 'SHA-256'
},
true,
['sign']
);
const rawAuth = await window.crypto.subtle.exportKey('raw', newAuthKey);
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
return resolve(xhr.response);
}
if (xhr.status === 401) {
const nonce = xhr
.getResponseHeader('WWW-Authenticate')
.split(' ')[1];
file.nonce = nonce;
}
reject(new Error(xhr.status));
}
};
xhr.onerror = () => reject(new Error(0));
xhr.ontimeout = () => reject(new Error(0));
xhr.open('post', `/api/password/${file.id}`);
xhr.setRequestHeader('Authorization', authHeader);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.responseType = 'json';
xhr.timeout = 2000;
xhr.send(JSON.stringify({ auth: arrayToB64(new Uint8Array(rawAuth)) }));
});
}
}

View File

@@ -1,5 +1,5 @@
import 'fluent-intl-polyfill';
import app from './routes';
import log from 'choo-log';
import locale from '../common/locales';
import fileManager from './fileManager';
import dragManager from './dragManager';
@@ -14,8 +14,6 @@ if (navigator.doNotTrack !== '1' && window.RAVEN_CONFIG) {
Raven.config(window.SENTRY_ID, window.RAVEN_CONFIG).install();
}
app.use(log());
app.use((state, emitter) => {
// init state
state.transfer = null;
@@ -23,22 +21,24 @@ app.use((state, emitter) => {
state.translate = locale.getTranslator();
state.storage = storage;
state.raven = Raven;
state.config = {
uploadWindowStyle: 'upload-window',
uploadButtonStyle: 'browse btn'
};
emitter.on('DOMContentLoaded', async () => {
let reason = null;
if (
/firefox/i.test(navigator.userAgent) &&
parseInt(navigator.userAgent.match(/firefox\/*([^\n\r]*)\./i)[1], 10) <=
49
) {
return emitter.emit('replaceState', '/unsupported/outdated');
reason = 'outdated';
}
if (/edge\/\d+/i.test(navigator.userAgent)) {
reason = 'edge';
}
const ok = await canHasSend(assets.get('cryptofill.js'));
if (!ok) {
const reason = /firefox/i.test(navigator.userAgent) ? 'outdated' : 'gcm';
emitter.emit('replaceState', `/unsupported/${reason}`);
reason = /firefox/i.test(navigator.userAgent) ? 'outdated' : 'gcm';
}
if (reason) {
setTimeout(() => emitter.emit('replaceState', `/unsupported/${reason}`));
}
});
});
@@ -48,4 +48,4 @@ app.use(fileManager);
app.use(dragManager);
app.use(experiments);
app.mount('#page-one');
app.mount('body');

View File

@@ -20,7 +20,7 @@ let experiment = null;
export default function initialize(state, emitter) {
appState = state;
emitter.on('DOMContentLoaded', () => {
addExitHandlers();
// addExitHandlers();
experiment = storage.enrolled[0];
sendEvent(category(), 'visit', {
cm5: storage.totalUploads,
@@ -29,6 +29,9 @@ export default function initialize(state, emitter) {
});
//TODO restart handlers... somewhere
});
emitter.on('exit', evt => {
exitEvent(evt);
});
}
function category() {
@@ -81,6 +84,8 @@ function urlToMetric(url) {
case 'https://testpilot.firefox.com/':
case 'https://testpilot.firefox.com/experiments/send':
return 'testpilot';
case 'https://www.mozilla.org/firefox/new/?utm_campaign=send-acquisition&utm_medium=referral&utm_source=send.firefox.com':
return 'promo';
default:
return 'other';
}
@@ -147,6 +152,15 @@ function completedUpload(params) {
});
}
function addedPassword(params) {
return sendEvent('sender', 'password-added', {
cm1: params.size,
cm5: storage.totalUploads,
cm6: storage.files.length,
cm7: storage.totalDownloads
});
}
function startedDownload(params) {
return sendEvent('recipient', 'download-started', {
cm1: params.size,
@@ -191,6 +205,16 @@ function stoppedUpload(params) {
});
}
function changedDownloadLimit(params) {
return sendEvent('sender', 'download-limit-changed', {
cm1: params.size,
cm5: storage.totalUploads,
cm6: storage.files.length,
cm7: storage.totalDownloads,
cm8: params.dlimit
});
}
function completedDownload(params) {
return sendEvent('recipient', 'download-stopped', {
cm1: params.size,
@@ -235,6 +259,7 @@ function exitEvent(target) {
});
}
// eslint-disable-next-line no-unused-vars
function addExitHandlers() {
const links = Array.from(document.querySelectorAll('a'));
links.forEach(l => {
@@ -257,11 +282,13 @@ export {
cancelledUpload,
stoppedUpload,
completedUpload,
changedDownloadLimit,
deletedUpload,
startedDownload,
cancelledDownload,
stoppedDownload,
completedDownload,
addedPassword,
restart,
unsupported
};

View File

@@ -3,7 +3,10 @@ const download = require('../templates/download');
module.exports = function(state, emit) {
if (state.transfer) {
return download(state, emit);
const s = state.transfer.state;
if (s === 'downloading' || s === 'complete') {
return download(state, emit);
}
}
return preview(state, emit);
};

View File

@@ -2,7 +2,8 @@ const welcome = require('../templates/welcome');
const upload = require('../templates/upload');
module.exports = function(state, emit) {
if (state.transfer) {
if (state.transfer && state.transfer.iv) {
//TODO relying on 'iv' is gross
return upload(state, emit);
}
return welcome(state, emit);

View File

@@ -1,17 +1,43 @@
const choo = require('choo');
const html = require('choo/html');
const download = require('./download');
const header = require('../templates/header');
const footer = require('../templates/footer');
const fxPromo = require('../templates/fxPromo');
const app = choo();
app.route('/', require('./home'));
app.route('/share/:id', require('../templates/share'));
app.route('/download/:id', download);
app.route('/download/:id/:key', download);
app.route('/completed', require('../templates/completed'));
app.route('/unsupported/:reason', require('../templates/unsupported'));
app.route('/legal', require('../templates/legal'));
app.route('/error', require('../templates/error'));
app.route('/blank', require('../templates/blank'));
app.route('*', require('../templates/notFound'));
function body(template) {
return function(state, emit) {
const b = html`<body>
${state.promo ? fxPromo(state, emit) : ''}
${header(state)}
<div class="all">
<noscript>
<h2>Firefox Send requires JavaScript</h2>
<p><a href="https://github.com/mozilla/send/blob/master/docs/faq.md#why-does-firefox-send-require-javascript">Why does Firefox Send require JavaScript?</a></p>
<p>Please enable JavaScript and try again.</p>
</noscript>
${template(state, emit)}
</div>
${footer(state)}
</body>`;
if (state.layout) {
return state.layout(state, b);
}
return b;
};
}
app.route('/', body(require('./home')));
app.route('/share/:id', body(require('../templates/share')));
app.route('/download/:id', body(download));
app.route('/download/:id/:key', body(download));
app.route('/completed', body(require('../templates/completed')));
app.route('/unsupported/:reason', body(require('../templates/unsupported')));
app.route('/legal', body(require('../templates/legal')));
app.route('/error', body(require('../templates/error')));
app.route('/blank', body(require('../templates/blank')));
app.route('*', body(require('../templates/notFound')));
module.exports = app;

View File

@@ -92,11 +92,7 @@ class Storage {
}
getFileById(id) {
try {
return JSON.parse(this.engine.getItem(id));
} catch (e) {
return null;
}
return this._files.find(f => f.id === id);
}
get(id) {
@@ -114,6 +110,10 @@ class Storage {
this._files.push(file);
this.engine.setItem(file.id, JSON.stringify(file));
}
writeFiles() {
this._files.forEach(f => this.engine.setItem(f.id, JSON.stringify(f)));
}
}
export default new Storage();

View File

@@ -1,9 +1,6 @@
const html = require('choo/html');
module.exports = function(state) {
module.exports = function() {
const div = html`<div id="page-one"></div>`;
if (state.layout) {
return state.layout(state, div);
}
return div;
};

View File

@@ -4,6 +4,7 @@ const { fadeOut } = require('../utils');
module.exports = function(state, emit) {
const div = html`
<div id="page-one">
<div id="download" class="fadeIn">
<div id="download-progress">
<div id="dl-title" class="title">${state.translate(
@@ -15,9 +16,10 @@ module.exports = function(state, emit) {
<div class="progress-text"></div>
</div>
</div>
<a class="send-new" data-state="completed" href="/" onclick=${sendNew}>${state.translate(
'sendYourFilesLink'
)}</a>
<a class="send-new" data-state="completed" href="/" onclick=${
sendNew
}>${state.translate('sendYourFilesLink')}</a>
</div>
</div>
`;

View File

@@ -5,6 +5,7 @@ const { bytes } = require('../utils');
module.exports = function(state) {
const transfer = state.transfer;
const div = html`
<div id="page-one">
<div id="download-progress" class="fadeIn">
<div id="dl-title" class="title">${state.translate(
'downloadingPageProgress',
@@ -21,6 +22,7 @@ module.exports = function(state) {
transfer.sizes
)}</div>
</div>
</div>
</div>
`;

View File

@@ -0,0 +1,56 @@
const html = require('choo/html');
module.exports = function(state, emit) {
const fileInfo = state.fileInfo;
const label =
fileInfo.password === null
? html`
<label class="red"
for="unlock-input">${state.translate('passwordTryAgain')}</label>`
: html`
<label for="unlock-input">
${state.translate('unlockInputLabel')}
</label>`;
const div = html`
<div class="enterPassword">
${label}
<form id="unlock" onsubmit=${checkPassword} data-no-csrf>
<input id="unlock-input"
class="unlock-input input-no-btn"
maxlength="64"
autocomplete="off"
placeholder="${state.translate('unlockInputPlaceholder')}"
oninput=${inputChanged}
type="password"/>
<input type="submit"
id="unlock-btn"
class="btn btn-hidden"
value="${state.translate('unlockButtonLabel')}"/>
</form>
</div>`;
function inputChanged() {
const input = document.getElementById('unlock-input');
const btn = document.getElementById('unlock-btn');
if (input.value.length > 0) {
btn.classList.remove('btn-hidden');
input.classList.remove('input-no-btn');
} else {
btn.classList.add('btn-hidden');
input.classList.add('input-no-btn');
}
}
function checkPassword(event) {
event.preventDefault();
const password = document.getElementById('unlock-input').value;
if (password.length > 0) {
document.getElementById('unlock-btn').disabled = true;
state.fileInfo.url = window.location.href;
state.fileInfo.password = password;
emit('preview');
}
}
return div;
};

View File

@@ -18,7 +18,9 @@ module.exports = function(file, state, emit) {
const remaining = timeLeft(ttl) || state.translate('linkExpiredAlt');
const row = html`
<tr id="${file.id}">
<td class="overflow-col" title="${file.name}">${file.name}</td>
<td class="overflow-col" title="${
file.name
}"><a class="link" href="/share/${file.id}">${file.name}</a></td>
<td class="center-col">
<img onclick=${copyClick} src="${assets.get(
'copy-16.svg'

34
app/templates/footer.js Normal file
View File

@@ -0,0 +1,34 @@
const html = require('choo/html');
const assets = require('../../common/assets');
module.exports = function(state) {
return html`<div class="footer">
<div class="legal-links">
<a href="https://www.mozilla.org" role="presentation"><img class="mozilla-logo" src="${assets.get(
'mozilla-logo.svg'
)}" alt="mozilla"/></a>
<a href="https://www.mozilla.org/about/legal">${state.translate(
'footerLinkLegal'
)}</a>
<a href="https://testpilot.firefox.com/about">${state.translate(
'footerLinkAbout'
)}</a>
<a href="/legal">${state.translate('footerLinkPrivacy')}</a>
<a href="/legal">${state.translate('footerLinkTerms')}</a>
<a href="https://www.mozilla.org/privacy/websites/#cookies">${state.translate(
'footerLinkCookies'
)}</a>
<a href="https://www.mozilla.org/about/legal/report-infringement/">${state.translate(
'reportIPInfringement'
)}</a>
</div>
<div class="social-links">
<a href="https://github.com/mozilla/send" role="presentation"><img class="github" src="${assets.get(
'github-icon.svg'
)}" alt="github"/></a>
<a href="https://twitter.com/FxTestPilot" role="presentation"><img class="twitter" src="${assets.get(
'twitter-icon.svg'
)}" alt="twitter"/></a>
</div>
</div>`;
};

46
app/templates/fxPromo.js Normal file
View File

@@ -0,0 +1,46 @@
const html = require('choo/html');
const assets = require('../../common/assets');
// function replaceLinks(str, urls) {
// let i = -1;
// const s = str.replace(/<a>([^<]+)<\/a>/g, (m, v) => {
// i++;
// return `<a class="link" href="${urls[i]}">${v}</a>`;
// });
// return [`<span>${s}</span>`];
// }
module.exports = function(state, emit) {
// function close() {
// document.querySelector('.banner').remove();
// }
function clicked(evt) {
emit('exit', evt);
}
const classes = state.promo === 'blue' ? 'banner banner-blue' : 'banner';
return html`
<div class="${classes}">
<div>
<img
src="${assets.get('firefox_logo-only.svg')}"
class="firefox-logo-small"
alt="Firefox"/>
<span>Send is brought to you by the all-new Firefox.
<a
class="link"
href="https://www.mozilla.org/firefox/new/?utm_campaign=send-acquisition&utm_medium=referral&utm_source=send.firefox.com"
onclick=${clicked}
>Download Firefox now ≫</a></span>
</div>
</div>`;
};
/*
<img
src="${assets.get('close-16.svg')}"
class="icon-delete"
onclick=${close}>
*/

33
app/templates/header.js Normal file
View File

@@ -0,0 +1,33 @@
const html = require('choo/html');
const assets = require('../../common/assets');
/*
The current weback config uses package.json to generate
version.json for /__version__ meaning `require` returns the
string 'version.json' in the frontend context but the json
on the server.
We want `version` to be constant at build time so this file
has a custom loader (/build/version_loader.js) just to replace
string with the value from package.json. 🤢
*/
const version = require('../../package.json').version || 'VERSION';
module.exports = function(state) {
return html`<header class="header">
<div class="send-logo">
<a href="/">
<img src="${assets.get(
'send_logo.svg'
)}" alt="Send"/><h1 class="site-title">Send</h1>
</a>
<div class="site-subtitle">
<a href="https://testpilot.firefox.com">Firefox Test Pilot</a>
<div>${state.translate('siteSubtitle')}</div>
</div>
</div>
<a href="https://qsurvey.mozilla.com/s3/txp-firefox-send?ver=${version}"
rel="noreferrer noopener"
class="feedback"
target="_blank">${state.translate('siteFeedback')}</a>
</header>`;
};

View File

@@ -30,9 +30,5 @@ module.exports = function(state) {
</div>
</div>
`;
if (state.layout) {
return state.layout(state, div);
}
return div;
};

View File

@@ -17,9 +17,5 @@ module.exports = function(state) {
)}</a>
</div>
</div>`;
if (state.layout) {
return state.layout(state, div);
}
return div;
};

View File

@@ -1,6 +1,7 @@
const html = require('choo/html');
const assets = require('../../common/assets');
const notFound = require('./notFound');
const downloadPassword = require('./downloadPassword');
const { bytes } = require('../utils');
function getFileFromDOM() {
@@ -8,11 +9,9 @@ function getFileFromDOM() {
if (!el) {
return null;
}
const data = el.dataset;
return {
name: data.name,
size: parseInt(data.size, 10),
ttl: parseInt(data.ttl, 10)
nonce: el.getAttribute('data-nonce'),
pwd: !!+el.getAttribute('data-requires-password')
};
}
@@ -24,47 +23,50 @@ module.exports = function(state, emit) {
state.fileInfo.id = state.params.id;
state.fileInfo.key = state.params.key;
const fileInfo = state.fileInfo;
const size = bytes(fileInfo.size);
const size = fileInfo.size
? state.translate('downloadFileSize', { size: bytes(fileInfo.size) })
: '';
let action = html`
<div>
<img src="${assets.get('illustration_download.svg')}"
id="download-img"
alt="${state.translate('downloadAltText')}"/>
<div>
<button id="download-btn"
class="btn"
onclick=${download}>${state.translate('downloadButtonLabel')}
</button>
</div>
</div>`;
if (fileInfo.pwd && !fileInfo.password) {
action = downloadPassword(state, emit);
} else if (!state.transfer) {
emit('preview');
}
const title = fileInfo.name
? state.translate('downloadFileName', { filename: fileInfo.name })
: state.translate('downloadFileTitle');
const div = html`
<div id="page-one">
<div id="download">
<div id="download-page-one">
<div class="title">
<span id="dl-file"
data-name="${fileInfo.name}"
data-size="${fileInfo.size}"
data-ttl="${fileInfo.ttl}">${state.translate('downloadFileName', {
filename: fileInfo.name
})}</span>
<span id="dl-filesize">${' ' +
state.translate('downloadFileSize', { size })}</span>
data-nonce="${fileInfo.nonce}"
data-requires-password="${fileInfo.pwd}">${title}</span>
<span id="dl-filesize">${' ' + size}</span>
</div>
<div class="description">${state.translate('downloadMessage')}</div>
<img
src="${assets.get('illustration_download.svg')}"
id="download-img"
alt="${state.translate('downloadAltText')}"/>
<div>
<button
id="download-btn"
class="btn"
title="${state.translate('downloadButtonLabel')}"
onclick=${download}>${state.translate(
'downloadButtonLabel'
)}</button>
</div>
${action}
</div>
<a class="send-new" href="/">${state.translate('sendYourFilesLink')}</a>
</div>
</div>
`;
function download(event) {
event.preventDefault();
emit('download', fileInfo);
}
if (state.layout) {
return state.layout(state, div);
}
return div;
};

View File

@@ -10,10 +10,18 @@ module.exports = function(progressRatio) {
const percent = Math.floor(progressRatio * 100);
const div = html`
<div class="progress-bar">
<svg id="progress" width="${oDiameter}" height="${oDiameter}" viewPort="0 0 ${oDiameter} ${oDiameter}" version="1.1">
<svg id="progress" width="${oDiameter}" height="${
oDiameter
}" viewPort="0 0 ${oDiameter} ${oDiameter}" version="1.1">
<circle r="${radius}" cx="${oRadius}" cy="${oRadius}" fill="transparent"/>
<circle id="bar" r="${radius}" cx="${oRadius}" cy="${oRadius}" fill="transparent" transform="rotate(-90 ${oRadius} ${oRadius})" stroke-dasharray="${circumference}" stroke-dashoffset="${dashOffset}"/>
<text class="percentage" text-anchor="middle" x="50%" y="98"><tspan class="percent-number">${percent}</tspan><tspan class="percent-sign">%</tspan></text>
<circle id="bar" r="${radius}" cx="${oRadius}" cy="${
oRadius
}" fill="transparent" transform="rotate(-90 ${oRadius} ${
oRadius
})" stroke-dasharray="${circumference}" stroke-dashoffset="${dashOffset}"/>
<text class="percentage" text-anchor="middle" x="50%" y="98"><tspan class="percent-number">${
percent
}</tspan><tspan class="percent-sign">%</tspan></text>
</svg>
</div>
`;

View File

@@ -0,0 +1,56 @@
const html = require('choo/html');
module.exports = function(selected, options, translate, changed) {
const id = `select-${Math.random()}`;
let x = selected;
function close() {
const ul = document.getElementById(id);
const body = document.querySelector('body');
ul.classList.remove('active');
body.removeEventListener('click', close);
}
function toggle(event) {
event.stopPropagation();
const ul = document.getElementById(id);
if (ul.classList.contains('active')) {
close();
} else {
ul.classList.add('active');
const body = document.querySelector('body');
body.addEventListener('click', close);
}
}
function choose(event) {
event.stopPropagation();
const target = event.target;
const value = +target.dataset.value;
target.parentNode.previousSibling.firstElementChild.textContent = translate(
value
);
if (x !== value) {
x = value;
changed(value);
}
close();
}
return html`
<div class="selectbox">
<div onclick=${toggle}>
<span class="link">${translate(selected)}</span>
<svg width="32" height="32">
<polygon points="8 18 17 28 26 18" fill="#0094fb"/>
</svg>
</div>
<ul id="${id}" class="selectOptions">
${options.map(
i =>
html`<li class="selectOption" onclick=${choose} data-value="${i}">${
i
}</li>`
)}
</ul>
</div>`;
};

View File

@@ -1,32 +1,73 @@
const html = require('choo/html');
const assets = require('../../common/assets');
const notFound = require('./notFound');
const uploadPassword = require('./uploadPassword');
const selectbox = require('./selectbox');
const { allowedCopy, delay, fadeOut } = require('../utils');
function passwordComplete(state, password) {
const el = html([
`<div class="selectPassword">${state.translate('passwordResult', {
password: '<pre></pre>'
})}</div>`
]);
el.lastElementChild.textContent = password;
return el;
}
function expireInfo(file, translate, emit) {
const el = html([
`<div>${translate('expireInfo', {
downloadCount: '<select></select>',
timespan: translate('timespanHours', { num: 24 })
})}</div>`
]);
const select = el.querySelector('select');
const options = [1, 2, 3, 4, 5, 20];
const t = num => translate('downloadCount', { num });
const changed = value => emit('changeLimit', { file, value });
select.parentNode.replaceChild(
selectbox(file.dlimit || 1, options, t, changed),
select
);
return el;
}
module.exports = function(state, emit) {
const file = state.storage.getFileById(state.params.id);
if (!file) {
return notFound(state, emit);
}
file.password = file.password || '';
const passwordSection = file.password
? passwordComplete(state, file.password)
: uploadPassword(state, emit);
const div = html`
<div id="share-link" class="fadeIn">
<div class="title">${state.translate('uploadSuccessTimingHeader')}</div>
<div class="title">${expireInfo(file, state.translate, emit)}</div>
<div id="share-window">
<div id="copy-text">${state.translate('copyUrlFormLabelWithName', {
filename: file.name
})}</div>
<div id="copy-text">
${state.translate('copyUrlFormLabelWithName', {
filename: file.name
})}</div>
<div id="copy">
<input id="link" type="url" value="${file.url}" readonly="true"/>
<button id="copy-btn" class="btn" title="${state.translate(
'copyUrlFormButton'
)}" onclick=${copyLink}>${state.translate('copyUrlFormButton')}</button>
<button id="copy-btn"
class="btn"
title="${state.translate('copyUrlFormButton')}"
onclick=${copyLink}>${state.translate('copyUrlFormButton')}</button>
</div>
<button id="delete-file" class="btn" title="${state.translate(
'deleteFileButton'
)}" onclick=${deleteFile}>${state.translate('deleteFileButton')}</button>
<a class="send-new" data-state="completed" href="/" onclick=${sendNew}>${state.translate(
'sendAnotherFileLink'
)}</a>
${passwordSection}
<button id="delete-file"
class="btn"
title="${state.translate('deleteFileButton')}"
onclick=${deleteFile}>${state.translate('deleteFileButton')}</button>
<a class="send-new"
data-state="completed"
href="/"
onclick=${sendNew}>${state.translate('sendAnotherFileLink')}</a>
</div>
</div>
`;
@@ -44,13 +85,17 @@ module.exports = function(state, emit) {
input.disabled = true;
const copyBtn = document.getElementById('copy-btn');
copyBtn.disabled = true;
copyBtn.classList.add('success');
copyBtn.replaceChild(
html`<img src="${assets.get('check-16.svg')}" class="icon-check">`,
copyBtn.firstChild
);
await delay(2000);
input.disabled = false;
copyBtn.disabled = false;
if (!copyBtn.parentNode.classList.contains('wait-password')) {
copyBtn.disabled = false;
}
copyBtn.classList.remove('success');
copyBtn.textContent = state.translate('copyUrlFormButton');
}
}

View File

@@ -29,7 +29,7 @@ module.exports = function(state) {
<div class="description"><a href="https://github.com/mozilla/send/blob/master/docs/faq.md#why-is-my-browser-not-supported">${state.translate(
'notSupportedLink'
)}</a></div>
<a id="dl-firefox" href="https://www.mozilla.org/firefox/new/?scene=2">
<a id="dl-firefox" href="https://www.mozilla.org/firefox/new/?utm_campaign=send-acquisition&utm_medium=referral&utm_source=send.firefox.com">
<img src="${assets.get(
'firefox_logo-only.svg'
)}" class="firefox-logo" alt="Firefox"/>
@@ -42,9 +42,5 @@ module.exports = function(state) {
)}</div>
</div>`;
const div = html`<div id="page-one">${msg}</div>`;
if (state.layout) {
return state.layout(state, div);
}
return div;
};

View File

@@ -0,0 +1,65 @@
const html = require('choo/html');
module.exports = function(state, emit) {
const file = state.storage.getFileById(state.params.id);
const div = html`
<div class="selectPassword">
<div id="addPasswordWrapper">
<input id="addPassword" type="checkbox" autocomplete="off" onchange=${
togglePasswordInput
}/>
<label for="addPassword">
${state.translate('requirePasswordCheckbox')}</label>
</div>
<form class="setPassword hidden" onsubmit=${setPassword} data-no-csrf>
<input id="unlock-input"
class="unlock-input input-no-btn"
maxlength="64"
autocomplete="off"
placeholder="${state.translate('unlockInputPlaceholder')}"
oninput=${inputChanged}/>
<input type="submit"
id="unlock-btn"
class="btn btn-hidden"
value="${state.translate('addPasswordButton')}"/>
</form>
</div>`;
function inputChanged() {
const input = document.getElementById('unlock-input');
const btn = document.getElementById('unlock-btn');
if (input.value.length > 0) {
btn.classList.remove('btn-hidden');
input.classList.remove('input-no-btn');
} else {
btn.classList.add('btn-hidden');
input.classList.add('input-no-btn');
}
}
function togglePasswordInput(e) {
const unlockInput = document.getElementById('unlock-input');
const boxChecked = e.target.checked;
document
.querySelector('.setPassword')
.classList.toggle('hidden', !boxChecked);
if (boxChecked) {
unlockInput.focus();
} else {
unlockInput.value = '';
}
inputChanged();
}
function setPassword(event) {
event.preventDefault();
const password = document.getElementById('unlock-input').value;
if (password.length > 0) {
document.getElementById('copy').classList.remove('wait-password');
document.getElementById('copy-btn').disabled = false;
emit('password', { password, file });
}
}
return div;
};

View File

@@ -9,26 +9,31 @@ module.exports = function(state, emit) {
<div class="title">${state.translate('uploadPageHeader')}</div>
<div class="description">
<div>${state.translate('uploadPageExplainer')}</div>
<a href="https://testpilot.firefox.com/experiments/send" class="link">${state.translate(
'uploadPageLearnMore'
)}</a>
<a href="https://testpilot.firefox.com/experiments/send"
class="link">${state.translate('uploadPageLearnMore')}</a>
</div>
<div class="${state.config
.uploadWindowStyle}" ondragover=${dragover} ondragleave=${dragleave}>
<div id="upload-img"><img src="${assets.get(
'upload.svg'
)}" title="${state.translate('uploadSvgAlt')}"/></div>
<div class="upload-window"
ondragover=${dragover}
ondragleave=${dragleave}>
<div id="upload-img">
<img src="${assets.get('upload.svg')}"
title="${state.translate('uploadSvgAlt')}"/>
</div>
<div id="upload-text">${state.translate('uploadPageDropMessage')}</div>
<span id="file-size-msg"><em>${state.translate(
'uploadPageSizeMessage'
)}</em></span>
<form method="post" action="upload" enctype="multipart/form-data">
<label for="file-upload" id="browse" class="${state.config
.uploadButtonStyle}" title="${state.translate(
'uploadPageBrowseButton1'
)}">${state.translate('uploadPageBrowseButton1')}</label>
<input id="file-upload" type="file" name="fileUploaded" onchange=${upload} />
</form>
<span id="file-size-msg">
<em>${state.translate('uploadPageSizeMessage')}</em>
</span>
<input id="file-upload"
type="file"
name="fileUploaded"
onfocus=${onfocus}
onblur=${onblur}
onchange=${upload} />
<label for="file-upload"
id="browse"
class="btn browse"
title="${state.translate('uploadPageBrowseButton1')}">
${state.translate('uploadPageBrowseButton1')}</label>
</div>
${fileList(state, emit)}
</div>
@@ -44,6 +49,14 @@ module.exports = function(state, emit) {
div.classList.remove('ondrag');
}
function onfocus(event) {
event.target.classList.add('has-focus');
}
function onblur(event) {
event.target.classList.remove('has-focus');
}
async function upload(event) {
event.preventDefault();
const target = event.target;
@@ -54,9 +67,5 @@ module.exports = function(state, emit) {
await fadeOut('page-one');
emit('upload', { file, type: 'click' });
}
if (state.layout) {
return state.layout(state, div);
}
return div;
};

View File

@@ -1,23 +1,18 @@
function arrayToHex(iv) {
let hexStr = '';
// eslint-disable-next-line prefer-const
for (let i in iv) {
if (iv[i] < 16) {
hexStr += '0' + iv[i].toString(16);
} else {
hexStr += iv[i].toString(16);
}
}
return hexStr;
const b64 = require('base64-js');
function arrayToB64(array) {
return b64
.fromByteArray(array)
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
}
function hexToArray(str) {
const iv = new Uint8Array(str.length / 2);
for (let i = 0; i < str.length; i += 2) {
iv[i / 2] = parseInt(str.charAt(i) + str.charAt(i + 1), 16);
}
return iv;
function b64ToArray(str) {
str = (str + '==='.slice((str.length + 3) % 4))
.replace(/-/g, '+')
.replace(/_/g, '/');
return b64.toByteArray(str);
}
function notify(str) {
@@ -105,21 +100,36 @@ const LOCALIZE_NUMBERS = !!(
const UNITS = ['B', 'kB', 'MB', 'GB'];
function bytes(num) {
if (num < 1) {
return '0B';
}
const exponent = Math.min(Math.floor(Math.log10(num) / 3), UNITS.length - 1);
const n = Number(num / Math.pow(1000, exponent));
const nStr = LOCALIZE_NUMBERS
? n.toLocaleString(navigator.languages, {
let nStr = n.toFixed(1);
if (LOCALIZE_NUMBERS) {
try {
const locale = document.querySelector('html').lang;
nStr = n.toLocaleString(locale, {
minimumFractionDigits: 1,
maximumFractionDigits: 1
})
: n.toFixed(1);
});
} catch (e) {
// fall through
}
}
return `${nStr}${UNITS[exponent]}`;
}
function percent(ratio) {
return LOCALIZE_NUMBERS
? ratio.toLocaleString(navigator.languages, { style: 'percent' })
: `${Math.floor(ratio * 100)}%`;
if (LOCALIZE_NUMBERS) {
try {
const locale = document.querySelector('html').lang;
return ratio.toLocaleString(locale, { style: 'percent' });
} catch (e) {
// fall through
}
}
return `${Math.floor(ratio * 100)}%`;
}
function allowedCopy() {
@@ -147,8 +157,8 @@ module.exports = {
bytes,
percent,
copyToClipboard,
arrayToHex,
hexToArray,
arrayToB64,
b64ToArray,
notify,
canHasSend,
isFile,

1
assets/check-16-blue.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="#0A84FF " d="M6 14a1 1 0 0 1-.707-.293l-3-3a1 1 0 0 1 1.414-1.414l2.157 2.157 6.316-9.023a1 1 0 0 1 1.639 1.146l-7 10a1 1 0 0 1-.732.427A.863.863 0 0 1 6 14z"/></svg>

After

Width:  |  Height:  |  Size: 238 B

BIN
assets/favicon-120.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
assets/favicon-128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
assets/favicon-144.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
assets/favicon-152.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
assets/favicon-167.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
assets/favicon-180.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
assets/favicon-195.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

BIN
assets/favicon-196.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
assets/favicon-228.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
assets/favicon-32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

BIN
assets/favicon-96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 239 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -8,7 +8,6 @@ html {
background-repeat: no-repeat;
background-position: center top;
height: 100%;
max-width: 1440px;
margin: auto;
}
@@ -130,18 +129,25 @@ body {
display: flex;
flex-direction: column;
justify-content: flex-start;
max-width: 630px;
max-width: 650px;
margin: 0 auto;
padding: 0 20px;
box-sizing: border-box;
width: 96%;
}
pre,
input,
select,
textarea,
button {
font-family: inherit;
margin: 0;
}
pre {
font-weight: 600;
display: inline-block;
}
a {
@@ -205,8 +211,8 @@ a {
}
.upload-window {
border: 1px dashed rgba(0, 148, 251, 0.5);
margin: 0 auto;
border: 3px dashed rgba(0, 148, 251, 0.5);
margin: 0 auto 10px;
height: 255px;
border-radius: 4px;
display: flex;
@@ -219,8 +225,7 @@ a {
}
.upload-window.ondrag {
border: 3px dashed rgba(0, 148, 251, 0.5);
margin: 0 auto;
border: 5px dashed rgba(0, 148, 251, 0.5);
height: 251px;
transform: scale(1.04);
border-radius: 4.2px;
@@ -231,14 +236,6 @@ a {
text-align: center;
}
.upload-window-b {
border: 3px dashed rgba(0, 148, 251, 0.5);
}
.upload-window-b.ondrag {
border: 5px dashed rgba(0, 148, 251, 0.5);
}
.link {
color: #0094fb;
text-decoration: none;
@@ -258,10 +255,10 @@ a {
.browse {
background: #0297f8;
border-radius: 5px;
font-size: 15px;
font-size: 20px;
color: #fff;
min-width: 240px;
height: 44px;
height: 60px;
display: flex;
justify-content: center;
align-items: center;
@@ -273,13 +270,18 @@ a {
background-color: #0287e8;
}
.browse-b {
height: 60px;
font-size: 20px;
input[type='file'] {
opacity: 0;
overflow: hidden;
position: absolute;
z-index: -1;
}
input[type='file'] {
display: none;
input[type='file'].has-focus + #browse,
input[type='file']:focus + #browse {
background-color: #0287e8;
outline: 1px dotted #000;
outline: -webkit-focus-ring-color auto 5px;
}
#file-size-msg {
@@ -556,6 +558,11 @@ tbody {
width: 100%;
}
#copy.wait-password #link,
#copy.wait-password #copy-btn {
opacity: 0.5;
}
#copy-text {
align-self: flex-start;
margin-top: 60px;
@@ -593,19 +600,22 @@ tbody {
color: white;
cursor: pointer;
font-size: 15px;
height: 60px;
padding-bottom: 4px;
padding-left: 10px;
padding-right: 10px;
white-space: nowrap;
}
#copy-btn:hover {
#copy-btn:not(:disabled):hover {
background-color: #0287e8;
}
#copy-btn:disabled {
#copy-btn.success {
background: #05a700;
border: 1px solid #05a700;
}
#copy-btn:disabled {
cursor: auto;
}
@@ -641,6 +651,25 @@ tbody {
color: #0287e8;
}
.hidden {
visibility: hidden;
}
.selectPassword {
padding: 10px 0;
align-self: left;
max-width: 100%;
overflow-wrap: break-word;
}
.setPassword {
align-self: left;
display: flex;
flex-wrap: nowrap;
width: 80%;
padding: 10px 5px;
}
/* upload-error */
#upload-error {
display: flex;
@@ -679,6 +708,10 @@ tbody {
width: 70px;
}
.firefox-logo-small {
width: 24px;
}
#dl-firefox,
#update-firefox {
margin-bottom: 181px;
@@ -736,7 +769,7 @@ tbody {
}
#download {
margin: 0 auto;
margin: 0 auto 30px;
display: flex;
justify-content: center;
align-items: center;
@@ -769,6 +802,66 @@ tbody {
height: 196px;
}
.enterPassword {
text-align: left;
padding: 40px;
}
.red {
color: red;
}
#unlock {
display: flex;
flex-wrap: nowrap;
width: 100%;
padding: 10px 0;
}
.unlock-input {
flex: 1;
height: 46px;
border: 1px solid #0297f8;
border-radius: 6px 0 0 6px;
font-size: 20px;
color: #737373;
font-family: 'SF Pro Text', sans-serif;
letter-spacing: 0;
line-height: 23px;
font-weight: 300;
padding-left: 10px;
padding-right: 10px;
}
#unlock-btn {
flex: 0 1 165px;
background: #0297f8;
border-radius: 0 6px 6px 0;
border: 1px solid #0297f8;
color: white;
cursor: pointer;
/* Force flat button look */
-webkit-appearance: none;
font-size: 15px;
padding-bottom: 3px;
padding-left: 10px;
padding-right: 10px;
white-space: nowrap;
}
#unlock-btn:hover {
background-color: #0287e8;
}
.btn-hidden {
visibility: hidden;
}
.input-no-btn {
border-radius: 6px;
}
/* footer */
.footer {
right: 0;
@@ -833,6 +926,120 @@ tbody {
margin-bottom: -5px;
}
#addPasswordWrapper {
min-height: 24px;
}
#addPassword {
position: absolute;
visibility: collapse;
}
#addPasswordWrapper label {
line-height: 20px;
cursor: pointer;
color: #737373;
}
#addPassword:checked + label {
color: #000;
}
#addPasswordWrapper label::before {
content: '';
height: 20px;
width: 20px;
margin-right: 10px;
margin-left: 5px;
float: left;
border: 1px solid rgba(12, 12, 13, 0.3);
border-radius: 2px;
}
#addPassword:checked + label::before {
background-image: url('./check-16-blue.svg');
background-position: 2px 1px;
}
.banner {
padding: 0 15px;
height: 48px;
background-color: #efeff1;
color: #4a4a4f;
font-size: 13px;
display: flex;
flex-direction: row;
align-content: center;
align-items: center;
justify-content: center;
}
.banner > div {
display: flex;
align-items: center;
margin: 0 auto;
}
.banner > div > span {
margin-left: 10px;
}
.banner-blue {
background-color: #0098f7;
color: #fff;
}
.banner-blue a {
color: #fff;
font-weight: bold;
}
.banner-blue a:hover {
color: #eee;
font-weight: bold;
}
.selectbox {
display: inline-block;
position: relative;
cursor: pointer;
}
.selectSelected {
cursor: pointer;
}
.selectOptions {
display: none;
}
.selectOptions.active {
display: block;
position: absolute;
top: 0;
left: 0;
padding: 0;
margin: 40px 0;
background-color: white;
border: 1px solid rgba(12, 12, 13, 0.3);
border-radius: 4px;
box-shadow: 1px 2px 4px rgba(12, 12, 13, 0.3);
}
.selectOption {
color: #737373;
font-size: 12pt;
list-style: none;
user-select: none;
white-space: nowrap;
padding: 0 60px;
border-bottom: 1px solid rgba(12, 12, 13, 0.3);
}
.selectOption:hover {
background-color: #f4f4f4;
}
@media (max-device-width: 992px), (max-width: 992px) {
.popup .popuptext {
left: auto;
@@ -903,22 +1110,40 @@ tbody {
padding: 5px 5px 5px 20px;
}
#copy {
#copy,
.setPassword,
#unlock {
width: 100%;
flex-direction: column;
padding-left: 0;
}
#link {
.selectPassword {
align-self: center;
min-width: 95%;
}
#addPasswordWrapper label::before {
margin-left: 0;
}
#link,
#unlock-input {
font-size: 22px;
padding: 15px 10px;
border-radius: 6px 6px 0 0;
}
#copy-btn {
#copy-btn,
#unlock-btn {
border-radius: 0 0 6px 6px;
flex: 0 1 65px;
}
#copy-text {
text-align: center;
}
th {
font-size: 14px;
padding: 0 5px;

View File

@@ -1 +1 @@
<svg width="30" height="27" viewBox="0 0 30 27" xmlns="http://www.w3.org/2000/svg"><title>send logo</title><g stroke="#3E3D40" fill="none" fill-rule="evenodd"><path d="M22.364 19.989l-2.153-2.103a2.046 2.046 0 0 0-2.665-.151l3.402 3.323a.531.531 0 0 1 0 .766l-2.466 2.408a.563.563 0 0 1-.784 0l-3.398-3.32a1.932 1.932 0 0 0 .188 2.564l2.153 2.103c.788.77 2.066.77 2.855 0l2.868-2.802a1.94 1.94 0 0 0 0-2.788M8.77 14.745a.534.534 0 0 0 0 .766l3.399 3.32a2.05 2.05 0 0 1-2.625-.184l-2.153-2.102a1.94 1.94 0 0 1 0-2.79l2.869-2.801a2.052 2.052 0 0 1 2.854 0l2.153 2.103c.73.713.775 1.83.154 2.603l-3.401-3.323a.565.565 0 0 0-.784 0L8.77 14.745zm9.464 5.682a.777.777 0 0 1 0 1.118.822.822 0 0 1-1.144 0l-5.6-5.47a.777.777 0 0 1 0-1.118.822.822 0 0 1 1.144 0l5.6 5.47z" stroke-width=".618" fill="#3E3D40"/><path d="M6.065 20.606c-2.913-1.586-3.988-3.656-3.988-6.468 0-2.81 2.265-6.425 5.786-6.289.1.004.55-.006.649 0 .895-3.27 2.508-6.353 6.898-6.353 4.557 0 7.336 3.716 6.75 7.785.08-.005 1.232.17 1.31.186 3.096.644 4.915 3.275 4.915 5.18 0 1.905-.107 3.029-2.023 4.947" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></g></svg>
<svg width="30" height="27" viewBox="0 0 30 27" xmlns="http://www.w3.org/2000/svg"><title>send logo</title><g stroke="#3E3D40" fill="none" fill-rule="evenodd" transform="translate(-0.231,0.11948695)"><path d="M22.364 19.989l-2.153-2.103a2.046 2.046 0 0 0-2.665-.151l3.402 3.323a.531.531 0 0 1 0 .766l-2.466 2.408a.563.563 0 0 1-.784 0l-3.398-3.32a1.932 1.932 0 0 0 .188 2.564l2.153 2.103c.788.77 2.066.77 2.855 0l2.868-2.802a1.94 1.94 0 0 0 0-2.788M8.77 14.745a.534.534 0 0 0 0 .766l3.399 3.32a2.05 2.05 0 0 1-2.625-.184l-2.153-2.102a1.94 1.94 0 0 1 0-2.79l2.869-2.801a2.052 2.052 0 0 1 2.854 0l2.153 2.103c.73.713.775 1.83.154 2.603l-3.401-3.323a.565.565 0 0 0-.784 0L8.77 14.745zm9.464 5.682a.777.777 0 0 1 0 1.118.822.822 0 0 1-1.144 0l-5.6-5.47a.777.777 0 0 1 0-1.118.822.822 0 0 1 1.144 0l5.6 5.47z" stroke-width=".618" fill="#3E3D40"/><path d="M6.065 20.606c-2.913-1.586-3.988-3.656-3.988-6.468 0-2.81 2.265-6.425 5.786-6.289.1.004.55-.006.649 0 .895-3.27 2.508-6.353 6.898-6.353 4.557 0 7.336 3.716 6.75 7.785.08-.005 1.232.17 1.31.186 3.096.644 4.915 3.275 4.915 5.18 0 1.905-.107 3.029-2.023 4.947" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

10
browserconfig.xml Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square70x70logo src=“favicon-76.png”/>
<square150x150logo src="favicon-228.png"/>
<TileColor>#0297F8</TileColor>
</tile>
</msapplication>
</browserconfig>

5
build/version_loader.js Normal file
View File

@@ -0,0 +1,5 @@
const version = require('../package.json').version;
module.exports = function(source) {
return source.replace('VERSION', version);
};

View File

@@ -27,6 +27,7 @@ Data will be collected with Google Analytics and follow [Test Pilot standards](h
- `cm5` - the number of files the user has ever uploaded.
- `cm6` - the number of unexpired files the user has uploaded.
- `cm7` - the number of files the user has ever downloaded.
- `cm8` - the number of downloads permitted by the uploader.
### Custom Dimensions
- `cd1` - the method by which the user initiated an upload. One of `drag`, `click`.
@@ -67,6 +68,25 @@ Triggered whenever a user stops uploading a file. Includes:
- `cd2`
- `cd6`
#### `download-limit-changed`
Triggered whenever the sender changes the download limit. Includes:
- `ec` - `sender`
- `ea` - `download-limit-changed`
- `cm1`
- `cm5`
- `cm6`
- `cm7`
- `cm8`
#### `password-added`
Triggered whenever a password is added to a file. Includes:
- `cm1`
- `cm5`
- `cm6`
- `cm7`
#### `download-started`
Triggered whenever a user begins downloading a file. Includes:

4104
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{
"name": "firefox-send",
"description": "File Sharing Experiment",
"version": "1.2.0",
"version": "2.2.0",
"author": "Mozilla (https://mozilla.org)",
"repository": "mozilla/send",
"homepage": "https://github.com/mozilla/send/",
@@ -43,75 +43,77 @@
"node": ">=8.2.0"
},
"devDependencies": {
"autoprefixer": "^7.1.4",
"autoprefixer": "^7.2.1",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-plugin-yo-yoify": "^0.7.0",
"babel-plugin-yo-yoify": "^1.0.2",
"babel-polyfill": "^6.26.0",
"babel-preset-env": "^1.6.0",
"babel-preset-env": "^1.6.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-stage-2": "^6.24.1",
"choo-log": "^7.2.1",
"copy-webpack-plugin": "^4.0.1",
"cross-env": "^5.0.5",
"base64-js": "^1.2.1",
"copy-webpack-plugin": "^4.2.3",
"cross-env": "^5.1.1",
"css-loader": "^0.28.7",
"css-mqpacker": "^6.0.1",
"cssnano": "^3.10.0",
"eslint": "^4.6.1",
"eslint": "^4.12.0",
"eslint-plugin-mocha": "^4.11.0",
"eslint-plugin-node": "^5.1.1",
"eslint-plugin-node": "^5.2.1",
"eslint-plugin-security": "^1.4.0",
"expose-loader": "^0.7.3",
"expose-loader": "^0.7.4",
"extract-loader": "^1.0.1",
"file-loader": "^0.11.2",
"file-loader": "^1.1.5",
"fluent-intl-polyfill": "^0.1.0",
"git-rev-sync": "^1.9.1",
"github-changes": "^1.1.0",
"github-changes": "^1.1.1",
"html-loader": "^0.5.1",
"husky": "^0.14.3",
"lint-staged": "^4.1.3",
"lint-staged": "^4.3.0",
"mocha": "^3.5.3",
"nanobus": "^4.2.0",
"npm-run-all": "^4.1.1",
"postcss-loader": "^2.0.6",
"prettier": "^1.6.1",
"nanobus": "^4.3.1",
"npm-run-all": "^4.1.2",
"postcss-loader": "^2.0.9",
"prettier": "^1.8.2",
"proxyquire": "^1.8.0",
"raven-js": "^3.17.0",
"raven-js": "^3.20.1",
"redis-mock": "^0.20.0",
"require-from-string": "^1.2.1",
"require-from-string": "^2.0.1",
"rimraf": "^2.6.2",
"selenium-webdriver": "^3.5.0",
"sinon": "^3.2.1",
"selenium-webdriver": "^3.6.0",
"sinon": "^4.1.2",
"string-hash": "^1.1.3",
"stylelint-config-standard": "^17.0.0",
"stylelint-no-unsupported-browser-features": "^1.0.0",
"stylelint-no-unsupported-browser-features": "^1.0.1",
"supertest": "^3.0.0",
"testpilot-ga": "^0.3.0",
"val-loader": "^1.0.2",
"webpack": "^3.5.6",
"webpack-dev-server": "^2.8.0",
"webpack-manifest-plugin": "^1.3.1",
"val-loader": "^1.1.0",
"webpack": "^3.8.1",
"webpack-dev-server": "2.9.1",
"webpack-manifest-plugin": "^1.3.2",
"webpack-unassert-loader": "^1.2.0"
},
"dependencies": {
"aws-sdk": "^2.114.0",
"body-parser": "^1.18.1",
"choo": "^6.0.1",
"aws-sdk": "^2.162.0",
"body-parser": "^1.18.2",
"choo": "^6.6.0",
"cldr-core": "^32.0.0",
"connect-busboy": "0.0.2",
"convict": "^4.0.0",
"express": "^4.15.4",
"express-request-language": "^1.1.12",
"convict": "^4.0.1",
"express": "^4.16.2",
"fluent": "^0.4.1",
"fluent-langneg": "^0.1.0",
"helmet": "^3.8.1",
"helmet": "^3.9.0",
"mkdirp": "^0.5.1",
"mozlog": "^2.1.1",
"raven": "^2.1.2",
"mozlog": "^2.2.0",
"raven": "^2.2.1",
"redis": "^2.8.0"
},
"availableLanguages": [
"en-US",
"ast",
"az",
"bs",
"ca",
"cak",
"cs",
@@ -123,6 +125,7 @@
"es-CL",
"es-ES",
"es-MX",
"et",
"fa",
"fr",
"fy-NL",
@@ -131,6 +134,7 @@
"id",
"it",
"ja",
"ka",
"kab",
"ko",
"ms",
@@ -144,6 +148,7 @@
"sl",
"sr",
"sv-SE",
"tl",
"tr",
"uk",
"vi",

View File

@@ -0,0 +1,80 @@
// Firefox Send is a brand name and should not be localized.
title = فَيَرفُكس سِنْد
siteSubtitle = تجربة وِبّيّة
siteFeedback = الانطباعات
uploadPageHeader = شارِك ملفاتك بخصوصية وتعمية
uploadPageExplainer = أرسل الملفات عبر رابط آمن خاص ومعمّى تنتهي صلاحيته تلقائيا لتضمن عدم بقاء ما ترسله إلى الأبد.
uploadPageLearnMore = اطّلع على المزيد
uploadPageDropMessage = أسقِط ملفّك هنا لبدء الرفع
uploadPageSizeMessage = لتتحصل على أفضل تجربة، من المستحسن أن يكون الملف أصغر من 1 غ.بايت
uploadPageBrowseButton = اختر ملفّا على حاسوبك
.title = اختر ملفّا على حاسوبك
uploadPageBrowseButton1 = اختر ملفّا لرفعه
uploadPageMultipleFilesAlert = رفع عدة ملفات (أو رفع مجلد) ليس مدعوما حاليا.
importingFile = يستورد…
encryptingFile = يعمّي…
decryptingFile = يفك التعمية…
notifyUploadDone = انتهى الرفع.
uploadingPageMessage = ما إن يُرفع الملف سيُتاح ضبط خيارات انتهاء صلاحيته.
uploadingPageCancel = ألغِ الرفع
.title = ألغِ الرفع
uploadCancelNotification = أُلغي الرفع.
uploadingPageLargeFileMessage = هذا الملف كبير الحجم وسيأخذ رفعه وقتا. انتظر رجاءً.
uploadingFileNotification = أعلِمني عندما يكتمل الرفع.
uploadSvgAlt
.alt = ارفع
copyUrlFormLabelWithName = انسخ الرابط وشاركه لإرسال الملف: { $filename }
copyUrlFormButton = انسخ إلى الحافظة
.title = انسخ إلى الحافظة
copiedUrl = نُسخ!
deleteFileButton = احذف الملف
.title = احذف الملف
sendAnotherFileLink = أرسل ملفّا آخر
.title = أرسل ملفّا آخر
// Alternative text used on the download link/button (indicates an action).
downloadAltText
.alt = نزّل
downloadFileName = نزّل { $filename }
unlockInputLabel = أدخل كلمة السر
unlockInputPlaceholder = كلمة السر
downloadFileTitle = نزِّل الملف المعمّى
// Firefox Send is a brand name and should not be localized.
downloadMessage = يُرسل إليك صديقك ملفا عبر «فَيَرفُكس سِنْد»، وهي خدمة تتيح لك مشاركة الملفات عبر رابط آمن وخاص ومعمّى، حيث تنتهي صلاحياتها تلقائيا لتضمن عدم بقاء ما ترسله إلى الأبد.
// Text and title used on the download link/button (indicates an action).
downloadButtonLabel = نزّل
.title = نزّل
downloadNotification = لقد اكتمل التنزيل.
downloadFinish = اكتمل التنزيل
// This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } من أصل { $totalSize })
// Firefox Send is a brand name and should not be localized.
sendYourFilesLink = جرِّب «فَيَرفُكس سِنْد»
downloadingPageMessage = رجاء أبقِ هذا اللسان مفتوحا حتى نجلب الملف ونفك تعميته.
errorAltText
.alt = خطأ أثناء الرفع
errorPageHeader = حدث خطب ما.
errorPageMessage = حدث خطب ما أثناء رفع الملف.
errorPageLink = أرسل ملفا آخر
fileTooBig = حجم الملف كبير للغاية لرفعه. يجب أن يكون أصغر من { $size }.
notSupportedHeader = متصفحك غير مدعوم.
// Firefox Send is a brand name and should not be localized.
notSupportedDetail = للأسف فإن متصفحك لا يدعم تقنية الوِب التي يعتمد عليها «فَيَرفُكس سِنْد». عليك تجربة متصفح آخر، ونحن ننصحك بِفَيَرفُكس!
notSupportedLink = لماذا متصفحي غير مدعوم؟
notSupportedOutdatedDetail = للأسف فإن إصدارة فَيَرفُكس هذه لا تدعم تقنية الوِب التي يعتمد عليها «فَيَرفُكس سِنْد». عليك تحديث متصفحك.
updateFirefox = حدّث فَيَرفُكس
copyFileList = انسخ الرابط
deleteFileList = احذف
legalHeader = الشروط والخصوصية
deletePopupText = أأحذف هذا الملف؟
deletePopupYes = نعم
deletePopupCancel = ألغِ
deleteButtonHover
.title = احذف
copyUrlHover
.title = انسخ الرابط
footerLinkTerms = الشروط
footerLinkCookies = الكعكات
requirePasswordCheckbox = اطلب كلمة سر لتنزيل هذا الملف
addPasswordButton = أضِف كلمة سر
// This label is followed by the password needed to download a file
passwordResult = كلمة السر: { $password }

View File

@@ -34,6 +34,10 @@ sendAnotherFileLink = Unviar otru ficheru
downloadAltText = Baxar
downloadFileName = Baxar { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Introducir contraseña
unlockInputPlaceholder = Contraseña
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).
@@ -80,3 +84,8 @@ footerLinkAbout = Tocante a Test Pilot
footerLinkPrivacy = Privacidá
footerLinkTerms = Términos
footerLinkCookies = Cookies
requirePasswordCheckbox = Riquir una contraseña pa baxar esti ficheru
addPasswordButton = Amestar contraseña
passwordTryAgain = Contraseña incorreuta. Volvi tentalo.
// This label is followed by the password needed to download a file
passwordResult = Contraseña: { $password }

View File

@@ -34,6 +34,10 @@ sendAnotherFileLink = Başqa fayl göndər
downloadAltText = Endir
downloadFileName = { $filename } faylını endir
downloadFileSize = ({ $size })
unlockInputLabel = Parol daxil edin
unlockInputPlaceholder = Parol
unlockButtonLabel = Aç
downloadFileTitle = Şifrələnmiş Faylı Endir
// Firefox Send is a brand name and should not be localized.
downloadMessage = Yoldaşınız Firefox Send ilə sizə fayl göndərir, fayllarınızı təhlükəsiz, məxfi, şifrələnmiş və daima onlayn qalmaması üçün avtomatik silən fayl göndərmə xidməti.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +84,6 @@ footerLinkAbout = Test Pilot Haqqında
footerLinkPrivacy = Məxfilik
footerLinkTerms = Şərtlər
footerLinkCookies = Çərəzlər
requirePasswordCheckbox = Bu faylı endirmək üçün parol tələb et
addPasswordButton = Parol əlavə et
incorrectPassword = Xətalı parol. Təkrar yoxlayın.

View File

@@ -0,0 +1,97 @@
// Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteSubtitle = web eksperiment
siteFeedback = Povratne informacije
uploadPageHeader = Privatno, šifrovano dijeljenje datoteka
uploadPageExplainer = Pošaljite datoteke putem sigurne, privatne i šifrovane veze koja automatski ističe kako bi se osiguralo da vaše stvari ne ostaju na mreži zauvijek.
uploadPageLearnMore = Saznajte više
uploadPageDropMessage = Prevucite vaše datoteke ovdje da biste počeli sa otpremanjem
uploadPageSizeMessage = Za bolji rad predlažemo da datoteka ne bude veća od 1GB
uploadPageBrowseButton = Odaberite datoteku na računaru
uploadPageBrowseButton1 = Odaberite datoteku za otpremanje
uploadPageMultipleFilesAlert = Otpremanje direktorija ili više datoteka trenutno nije podržano.
uploadPageBrowseButtonTitle = Otpremi datoteku
uploadingPageProgress = Otpremam { $filename } ({ $size })
importingFile = Uvozim...
verifyingFile = Potvrđujem...
encryptingFile = Šifrujem...
decryptingFile = Dešifrujem...
notifyUploadDone = Vaše otpremanje je završeno.
uploadingPageMessage = Nakon što se vaša datoteka otpremi, moći ćete da podesite opcije isteka.
uploadingPageCancel = Otkaži otpremanje
uploadCancelNotification = Vaše otpremanje je otkazano.
uploadingPageLargeFileMessage = Ova datoteka je velika i otpremanje može potrajati. Budite strpljivi!
uploadingFileNotification = Obavijesti me kada otpremanje bude gotovo.
uploadSuccessConfirmHeader = Spremno za slanje
uploadSvgAlt = Otpremi
uploadSuccessTimingHeader = Veza prema vašoj datoteci će isteći nakon prvog preuzimanja ili za 24 sata.
expireInfo = Link za vašu datoteku će isteći nakon { $downloadCount } ili { $timespan }.
downloadCount = { $num ->
[one] 1 preuzimanja
[few] { $num } preuzimanja
*[other] { $num } preuzimanja
}
copyUrlFormLabelWithName = Iskopirajte i podijelite vezu da biste poslali datoteku: { $filename }
copyUrlFormButton = Kopiraj u međuspremnik
copiedUrl = Kopirano!
deleteFileButton = Izbriši datoteku
sendAnotherFileLink = Pošalji drugu datoteku
// Alternative text used on the download link/button (indicates an action).
downloadAltText = Preuzmi
downloadFileName = Preuzmi { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Unesite lozinku
unlockInputPlaceholder = Lozinka
unlockButtonLabel = Otključaj
downloadFileTitle = Preuzmi šifrovanu datoteku
// Firefox Send is a brand name and should not be localized.
downloadMessage = Vaš prijatelj vam je poslao datoteku preko usluge Firefox Send koja vam omogućava da dijelite datoteke preko sigurne, privatne i šifrovane veze koja samostalno ističe da vaše stvari ne ostanu zauvijek na internetu.
// Text and title used on the download link/button (indicates an action).
downloadButtonLabel = Preuzmi
downloadNotification = Vaše preuzimanje je završeno.
downloadFinish = Preuzimanje završeno
// This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } od { $totalSize })
// Firefox Send is a brand name and should not be localized.
sendYourFilesLink = Probajte Firefox Send
downloadingPageProgress = Preuzimanje { $filename } ({ $size })
downloadingPageMessage = Ostavite ovaj tab otvorenim dok ne dobavimo vašu datoteku i dok je ne dešifrujemo.
errorAltText = Greška pri otpremanju
errorPageHeader = Nešto nije uredu!
errorPageMessage = Dogodila se greška pri otpremanju datoteke.
errorPageLink = Pošalji drugu datoteku
fileTooBig = Ta datoteka je prevelika za otpremanje. Treba biti manja od { $size }.
linkExpiredAlt = Veza istekla
expiredPageHeader = Veza je istekla ili nikad nije postojala!
notSupportedHeader = Vaš pretraživač nije podržan.
// Firefox Send is a brand name and should not be localized.
notSupportedDetail = Ovaj pretraživač nažalost ne podržava web tehnologiju koja omogućava Firefox Send. Trebate probati drugi pretraživač. Preporučujemo Firefox!
notSupportedLink = Zašto moj pretraživač nije podržan?
notSupportedOutdatedDetail = Nažalost ova verzija Firefoxa ne podržava web tehnologiju koja omogućava Firefox Send. Morate ažurirati vaš pretraživač.
updateFirefox = Ažuriraj Firefox
downloadFirefoxButtonSub = Besplatno preuzimanje
uploadedFile = Datoteka
copyFileList = Kopiraj URL
// expiryFileList is used as a column header
expiryFileList = Ističe za
deleteFileList = Izbriši
nevermindButton = Zanemari
legalHeader = Uslovi i privatnost
legalNoticeTestPilot = Firefox Send je trenutno Test Pilot eksperiment i podržan je <a>uslovima korištenja</a> i <a>obavještenjem o privatnosti</a>. Možete saznati više o ovom eksperimentu i o njegovom sakupljanju podataka <a>ovdje</a>.
legalNoticeMozilla = Korištenje Firefox Send web stranice podlaže Mozillinom <a>obavještenju o privatnosti na web stranicama</a> i <a>uslovima korištenja web stranica</a>.
deletePopupText = Izbrisati ovu datoteku?
deletePopupYes = Da
deletePopupCancel = Otkaži
deleteButtonHover = Izbriši
copyUrlHover = Kopiraj URL
footerLinkLegal = Pravno
// Test Pilot is a proper name and should not be localized.
footerLinkAbout = O Test Pilotu
footerLinkPrivacy = Privatnost
footerLinkTerms = Uslovi
footerLinkCookies = Kolačići
requirePasswordCheckbox = Zahtjevaj lozinku za preuzimanje ove datoteke
addPasswordButton = Dodaj lozinku
passwordTryAgain = Netačna lozinka. Pokušajte ponovo.
// This label is followed by the password needed to download a file
passwordResult = Lozinka: { $password }

View File

@@ -34,6 +34,10 @@ sendAnotherFileLink = Titaq jun chik yakb'äl
downloadAltText = Tiqasäx
downloadFileName = Tiqasäx { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Titz'ib'äx Ewan Tzij
unlockInputPlaceholder = Ewan tzij
unlockButtonLabel = Titzij chik
downloadFileTitle = Tiqasäx Yakb'äl Ewan Rusik'ixik
// Firefox Send is a brand name and should not be localized.
downloadMessage = Jun awachib'il xutäq jun yakb'äl chawe rik'in ri Firefox Send, jun samaj ri nuya' q'ij chawe ye'akomonij taq yakb'äl rik'in jun jikïl, ichinan chuqa' ewan rusik'ixik ximonel, ri nik'is ruq'ijul pa ruyonil richin chi ri taq awachinaq man junelïk ta e okel pa k'amab'ey.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +84,8 @@ footerLinkAbout = Chi rij Test Pilot
footerLinkPrivacy = Ichinanem
footerLinkTerms = Taq ojqanem
footerLinkCookies = Taq kaxlanwey
requirePasswordCheckbox = Tik'utüx jun ewan tzij richin niqasäx re yakb'äl re'
addPasswordButton = Titz'aqatisäx Ewan Tzij
passwordTryAgain = Itzel ri ewan tzij. Tatojtob'ej chik.
// This label is followed by the password needed to download a file
passwordResult = Ewan tzij: { $password }

View File

@@ -25,6 +25,11 @@ uploadingFileNotification = Upozornit, až bude nahrávání dokončeno.
uploadSuccessConfirmHeader = Připraveno k odeslání
uploadSvgAlt = Nahrát
uploadSuccessTimingHeader = Platnost odkazu na váš soubor vyprší po jeho prvním stažení, nebo po 24 hodinách.
timespanHours = { $num ->
[one] hodina
[few] hodiny
*[other] hodin
}
copyUrlFormLabelWithName = Zkopírujte a sdílejte odkaz na váš soubor: { $filename }
copyUrlFormButton = Zkopírovat do schránky
copiedUrl = Zkopírováno!
@@ -34,6 +39,10 @@ sendAnotherFileLink = Poslat další soubor
downloadAltText = Stáhnout
downloadFileName = Stáhnout { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Zadejte heslo
unlockInputPlaceholder = Heslo
unlockButtonLabel = Odemknout
downloadFileTitle = Stáhnout šifrovaný soubor
// Firefox Send is a brand name and should not be localized.
downloadMessage = Někdo vám posílá soubor pomocí služby Firefox Send, které umožňuje bezpečné, soukromé a šifrované sdílení souborů, které jsou pak automaticky smazány, aby nezůstaly na internetu navěky.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +89,8 @@ footerLinkAbout = O programu Test Pilot
footerLinkPrivacy = Soukromí
footerLinkTerms = Podmínky
footerLinkCookies = Cookies
requirePasswordCheckbox = Vyžadovat heslo pro stažení tohoto souboru
addPasswordButton = Přidat heslo
passwordTryAgain = Špatné heslo. Zkuste to znovu.
// This label is followed by the password needed to download a file
passwordResult = Heslo: { $password }

View File

@@ -2,14 +2,14 @@
title = Firefox Send
siteSubtitle = arbrawf gwe
siteFeedback = Adborth
uploadPageHeader = Rhannu Ffeiliau wedi eu Hamgryptio Preifat
uploadPageHeader = Rhannu Ffeiliau wedi eu Hamgryptio yn Breifat
uploadPageExplainer = Anfon ffeiliau drwy ddolen diogel, breifat ac wedi ei amgryptio sy'n dod i ben yn awtomatig er mwyn sicrhau nad yw eich pethau'n bodoli ar lein am byth.
uploadPageLearnMore = Dysgu rhagor
uploadPageDropMessage = Gollyngwch eich ffeiliau yma i gychwyn llwytho i fyny
uploadPageSizeMessage = Mae'n well cadw maint y ffeiliau o dan 1GB er mwyn iddo weithio ar ei orau.
uploadPageBrowseButton = Dewiswch ffeil ar eich cyfrifiadur
uploadPageBrowseButton1 = Dewiswch ffeil i'w llwytho i fyny
uploadPageMultipleFilesAlert = Nid yw llwytho nifer lluosog o ffeilia neu ffolder yn cael ei gynnal ar hyn o bryd.
uploadPageMultipleFilesAlert = Nid yw llwytho nifer lluosog o ffeiliau neu ffolder yn cael ei gynnal ar hyn o bryd.
uploadPageBrowseButtonTitle = Llwytho ffeil i fyny
uploadingPageProgress = Llwytho $filename} i fyny ({ $size })
importingFile = Mewnforio…
@@ -17,14 +17,27 @@ verifyingFile = Wrthi'n gwirio…
encryptingFile = Wrthi'n amgryptio…
decryptingFile = Wrthi'n dadgryptio…
notifyUploadDone = Mae eich llwytho wedi gorffen.
uploadingPageMessage = Unwaith y bydd eich ffeil wedi llwytho bydd modd gosod manylion dod i ben.
uploadingPageMessage = Unwaith y bydd eich ffeil wedi llwytho bydd modd gosod y manylion dod i ben.
uploadingPageCancel = Diddymu'r llwytho
uploadCancelNotification = Cafodd eich llwytho ei ddiddymu.
uploadingPageLargeFileMessage = Mae'r ffeil yn fawr a gall gymryd peth amser i'w llwytho. Arhoswch!
uploadingFileNotification = Dweud wrtha i pan fydd y llwytho wedi gorffen.
uploadingPageLargeFileMessage = Mae'r ffeil yn fawr a gall gymryd peth amser i'w llwytho. Amynedd!
uploadingFileNotification = Dweud pan fydd y llwytho wedi gorffen.
uploadSuccessConfirmHeader = Yn Barod i Anfon
uploadSvgAlt = LLwytho i Fyny
uploadSvgAlt = Llwytho i Fyny
uploadSuccessTimingHeader = Bydd y ddolen i'ch ffeil y dod i ben ar ôl 1 llwytho neu o fewn 24 awr.
expireInfo = Bydd y ddolen i'ch ffeil yn dod i ben ym mhen { $downloadCount } neu { $timespan }.
downloadCount = { $num ->
[one] Llwyth i lawr
[two] Lwyth i lawr
[few] Llwyth i lawr
*[other] Llwyth i lawr
}
timespanHours = { $num ->
[one] awr
[two] awr
[few] awr
*[other] awr
}
copyUrlFormLabelWithName = Copïo a rhannu'r ddolen i anfon eich ffeil: { $filename }
copyUrlFormButton = Copïo i'r clipfwrdd
copiedUrl = Wedi eu copïo!
@@ -34,6 +47,10 @@ sendAnotherFileLink = Anfon ffeil arall
downloadAltText = Llwytho i lawr
downloadFileName = Llwytho i lawr { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Rhowch Gyfrinair
unlockInputPlaceholder = Cyfrinair
unlockButtonLabel = Datgloi
downloadFileTitle = Llwythwch Ffeil wedi ei Hamgryptio i Lawr
// Firefox Send is a brand name and should not be localized.
downloadMessage = Mae ffrind i chi yn anfon ffeil atoch drwy Firefox Send, gwasanaeth sy'n caniatáu i chi rannu ffeiliau drwy ddolen ddiogel, breifat ac wedi ei amgryptio sy'n dod i ben yn awtomatig er mwyn sicrhau nad yw eich deunydd yn aros ar-lein am byth.
// Text and title used on the download link/button (indicates an action).
@@ -43,7 +60,7 @@ downloadFinish = Llwytho wedi Gorffen
// This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } o { $totalSize })
// Firefox Send is a brand name and should not be localized.
sendYourFilesLink = Profwch Firefox Send
sendYourFilesLink = Rhowch gynnig ar Firefox Send
downloadingPageProgress = Llwytho i lawr { $filename } ({ $size })
downloadingPageMessage = Gadewch y tab yma ar agor tra fyddwn yn estyn eich ffeil a'i dad-amgryptio.
errorAltText = Gwall llwytho
@@ -55,9 +72,9 @@ linkExpiredAlt = Mae'r ddolen wedi dod i ben
expiredPageHeader = Mae'r ddolen wedi dod i ben neu nad yw wedi bodoli erioed!
notSupportedHeader = Nid yw eich porwr yn cael ei gynnal.
// Firefox Send is a brand name and should not be localized.
notSupportedDetail = Yn anffodus nid yw'r porwr hwn yn cynnal y technoleg gwe sy'n cynnal Firefox Send. Bydd angen i chi ddefnyddio porwr arall. Rydym ni'n argymell Firefox!
notSupportedDetail = Yn anffodus, nid yw'r porwr hwn yn cynnal y technoleg gwe sy'n cynnal Firefox Send. Bydd angen i chi ddefnyddio porwr arall. Rydym ni'n argymell Firefox!
notSupportedLink = Pam nad yw fy mhorwr yn cael ei gynnal?
notSupportedOutdatedDetail = Yn anffodus nid yw'r fersiwn yma o Firefox yn cynnal y technoleg gwe sy'n gyrru Firefox Send. Bydd angen i chi ddiweddaru eich porwr.
notSupportedOutdatedDetail = Yn anffodus, nid yw'r fersiwn yma o Firefox yn cynnal y technoleg gwe sy'n gyrru Firefox Send. Bydd angen i chi ddiweddaru eich porwr.
updateFirefox = Diweddaru Firefox
downloadFirefoxButtonSub = Llwytho i Lawr am Ddim
uploadedFile = Ffeil
@@ -67,7 +84,7 @@ expiryFileList = Daw i ben ymhen
deleteFileList = Dileu
nevermindButton = Dim ots
legalHeader = Amodau a Phreifatrwydd
legalNoticeTestPilot = Ar hyn o mae Firefox Send yn arbrawf o fewn rhaglen Test Pilot ac yn destun <a>Amodau Gwasanaeth</a> a <a>Hysbysiad Preifatrwydd</a> Test Pilot . Gallwch ddysgu rhagor am yr arbrawf a'i gasglu data <a>yma</a>.
legalNoticeTestPilot = Ar hyn o mae Firefox Send yn arbrawf o fewn rhaglen Test Pilot ac yn destun <a>Amodau Gwasanaeth</a> a <a>Hysbysiad Preifatrwydd</a> Test Pilot . Gallwch ddysgu rhagor am yr arbrawf a'r data mae'n ei gasglu <a>yma</a>.
legalNoticeMozilla = Mae'r defnydd o wefan Firefox Send hefyd yn destun <a>Hysbysiad Preifatrwydd Gwefannau</a> ac <a>Amodau Defnydd Gwefannau</a> Mozilla.
deletePopupText = Dileu'r ffeil?
deletePopupYes = Iawn
@@ -80,3 +97,9 @@ footerLinkAbout = Ynghylch Test Pilot
footerLinkPrivacy = Preifatrwydd
footerLinkTerms = Amodau
footerLinkCookies = Cwcis
requirePasswordCheckbox = Gosod angen cyfrinair i lwytho'r ffeil hon i lawr
addPasswordButton = Ychwanegu Cyfrinair
passwordTryAgain = Cyfrinair anghywir. Ceisiwch eto.
// This label is followed by the password needed to download a file
passwordResult = Cyfrinair: { $password }
reportIPInfringement = Adrodd ar Gamddefnydd o'r IP

View File

@@ -25,6 +25,15 @@ uploadingFileNotification = Mich benachrichtigen, wenn der Upload abgeschlossen
uploadSuccessConfirmHeader = Bereit zum Senden
uploadSvgAlt = Hochladen
uploadSuccessTimingHeader = Der Link zu Ihrer Datei läuft nach einem Download oder in 24 Stunden ab.
expireInfo = Der Link zu Ihrer Datei läuft nach { $downloadCount } oder { $timespan } ab.
downloadCount = { $num ->
[one] einem Download
*[other] { $num } Downloads
}
timespanHours = { $num ->
[one] einer Stunde
*[other] { $num } Stunden
}
copyUrlFormLabelWithName = Kopieren und teilen Sie den Link, um Ihre Datei zu senden: { $filename }
copyUrlFormButton = In Zwischenablage kopieren
copiedUrl = Kopiert!
@@ -34,6 +43,10 @@ sendAnotherFileLink = Eine weitere Datei senden
downloadAltText = Herunterladen
downloadFileName = { $filename } herunterladen
downloadFileSize = ({ $size })
unlockInputLabel = Passwort eingeben
unlockInputPlaceholder = Passwort
unlockButtonLabel = Entsperren
downloadFileTitle = Verschlüsselte Datei herunterladen
// Firefox Send is a brand name and should not be localized.
downloadMessage = Ihr Freund schickt Ihnen eine Datei mit Firefox Send, einem Dienst, mit dem Sie Dateien über einen sicheren, privaten und verschlüsselten Link teilen können, der automatisch abläuft, damit Ihre Daten nicht für immer im Internet bleiben.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +93,9 @@ footerLinkAbout = Über Test Pilot
footerLinkPrivacy = Datenschutz
footerLinkTerms = Nutzungsbedingungen
footerLinkCookies = Cookies
requirePasswordCheckbox = Zum Herunterladen dieser Datei soll ein Passwort erforderlich sein
addPasswordButton = Passwort hinzufügen
passwordTryAgain = Falsches Passwort. Versuchen Sie es erneut.
// This label is followed by the password needed to download a file
passwordResult = Passwort: { $password }
reportIPInfringement = IP-Verletzung melden

View File

@@ -25,6 +25,19 @@ uploadingFileNotification = K wěsći daś, gaž nagraśe jo dokóńcone.
uploadSuccessConfirmHeader = Gótowy za słanje
uploadSvgAlt = Nagraś
uploadSuccessTimingHeader = Wótkaz k wašej dataji pó 1 ześěgnjenju abo 24 góźinach spadnjo.
expireInfo = Wótkaz k wašej dataji pó { $downloadCount } abo { $timespan } spadnjo.
downloadCount = { $num ->
[one] 1 ześěgnjenje
[two] { $num } ześěgnjeni
[few] { $num } ześěgnjenja
*[other] { $num } ześěgnjenjow
}
timespanHours = { $num ->
[one] 1 góźina
[two] { $num } góźinje
[few] { $num } góźiny
*[other] { $num } góźin
}
copyUrlFormLabelWithName = Kopěrujśo a źělśo wótkaz, aby swóju dataju pósłał: { $filename }
copyUrlFormButton = Do mjazywótkłada kopěrowaś
copiedUrl = Kopěrowany!
@@ -34,6 +47,10 @@ sendAnotherFileLink = Drugu dataju pósłaś
downloadAltText = Ześěgnuś
downloadFileName = { $filename } ześěgnuś
downloadFileSize = ({ $size })
unlockInputLabel = Gronidło zapódaś
unlockInputPlaceholder = Gronidło
unlockButtonLabel = Wótwóriś
downloadFileTitle = Skoděrowanu dataju ześěgnuś
// Firefox Send is a brand name and should not be localized.
downloadMessage = Waš pśijaśel wam dataju z Firefox Send sćelo, słužba, kótaraž wam zmóžnja, dataje pśez wěsty, priwatny a skoděrowany wótkaz źěliś, kótaryž awtomatiski spadnjo, až njeby waše daty na pśecej online wóstawali.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +97,9 @@ footerLinkAbout = Wó Test Pilot
footerLinkPrivacy = Priwatnosć
footerLinkTerms = Wuměnjenja
footerLinkCookies = Cookieje
requirePasswordCheckbox = Gronidło za ześěgnjenje toś teje dataje pominaś
addPasswordButton = Gronidło pśidaś
passwordTryAgain = Wopacne gronidło. Wopytajśo hyšći raz.
// This label is followed by the password needed to download a file
passwordResult = Gronidło: { $password }
reportIPInfringement = Pśekśiwjenje IP k wěsći daś

View File

@@ -34,6 +34,10 @@ sendAnotherFileLink = Αποστολή άλλου αρχείου
downloadAltText = Λήψη
downloadFileName = Λήψη του { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Εισαγωγή κωδικού πρόσβασης
unlockInputPlaceholder = Κωδικός πρόσβασης
unlockButtonLabel = Ξεκλείδωμα
downloadFileTitle = Λήψη κρυπτογραφημένου αρχείου
// Firefox Send is a brand name and should not be localized.
downloadMessage = Ο/Η φίλος/-η σας, σάς στέλνει ένα αρχείο με τη βοήθεια του Firefox Send, μιας υπηρεσίας που επιτρέπει τον διαμοιρασμό αρχείων μέσω ενός ασφαλούς, ιδιωτικού και κρυπτογραφημένου συνδέσμου που λήγει αυτόματα, ώστε να είστε σίγουροι ότι τα αρχεία σας δεν θα παραμείνουν στο διαδίκτυο για πάντα.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +84,6 @@ footerLinkAbout = Σχετικά με το Test Pilot
footerLinkPrivacy = Απόρρητο
footerLinkTerms = Όροι
footerLinkCookies = Cookies
requirePasswordCheckbox = Απαίτηση κωδικού πρόσβασης για λήψη του αρχείου
addPasswordButton = Προσθήκη κωδικού πρόσβασης
incorrectPassword = Λάθος κωδικός πρόσβασης. Προσπάθεια ξανά;

View File

@@ -25,6 +25,15 @@ 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!
@@ -34,6 +43,10 @@ sendAnotherFileLink = Send another file
downloadAltText = Download
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).
@@ -80,3 +93,9 @@ footerLinkAbout = About Test Pilot
footerLinkPrivacy = Privacy
footerLinkTerms = Terms
footerLinkCookies = Cookies
requirePasswordCheckbox = Require a password to download this file
addPasswordButton = Add password
passwordTryAgain = Incorrect password. Try again.
// This label is followed by the password needed to download a file
passwordResult = Password: { $password }
reportIPInfringement = Report IP Infringement

View File

@@ -25,6 +25,15 @@ uploadingFileNotification = Notificarme cuando la subida se complete.
uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace al archivo expirará después de 1 descarga o en 24 horas.
expireInfo = El enlace a tu archivo expirará después de { $downloadCount } o { $timespan }.
downloadCount = { $num ->
[one] 1 descarga
*[other] { $num } descargas
}
timespanHours = { $num ->
[one] 1 hora
*[other] { $num } horas
}
copyUrlFormLabelWithName = Copiá y compartí el enlace para enviar tu archivo: { $filename }
copyUrlFormButton = Copiar al portapapeles
copiedUrl = ¡Copiado!
@@ -34,6 +43,10 @@ sendAnotherFileLink = Enviar otro archivo
downloadAltText = Descargar
downloadFileName = Descargar { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Ingresar contraseña
unlockInputPlaceholder = Contraseña
unlockButtonLabel = Desbloquear
downloadFileTitle = Descargar archivo cifrado
// Firefox Send is a brand name and should not be localized.
downloadMessage = Tu amigo te está enviando un archivo con Firefox Send, un servicio que permite compartir archivos con un enlace cifrado, seguro y privado que expira automáticamente para asegurar que tus datos no quedan en línea para siempre.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +93,9 @@ footerLinkAbout = Acerca de Test Pilot
footerLinkPrivacy = Privacidad
footerLinkTerms = Términos
footerLinkCookies = Cookies
requirePasswordCheckbox = Requerir contraseña para descargar este archivo
addPasswordButton = Agregar contraseña
passwordTryAgain = Contraseña incorrecta. Intentá nuevamente.
// This label is followed by the password needed to download a file
passwordResult = Contraseña: { $password }
reportIPInfringement = Informar violación de propiedad intelectual

View File

@@ -25,6 +25,15 @@ uploadingFileNotification = Notificarme cuando la subida sea completada.
uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace a tu archivo expirará tras 1 descarga o en 24 horas.
expireInfo = El enlace a tu archivo expirará después de { $downloadCount } o { $timespan }.
downloadCount = { $num ->
[one] 1 descarga
*[other] { $num } descargas
}
timespanHours = { $num ->
[one] 1 hora
*[other] { $num } horas
}
copyUrlFormLabelWithName = Copia y comparte el enlace para enviar tu archivo: { $filename }
copyUrlFormButton = Copiar al portapapeles
copiedUrl = ¡Copiado!
@@ -34,6 +43,10 @@ sendAnotherFileLink = Enviar otro archivo
downloadAltText = Descargar
downloadFileName = Descargar { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Ingresar contraseña
unlockInputPlaceholder = Contraseña
unlockButtonLabel = Desbloquear
downloadFileTitle = Bajar archivo cifrado
// Firefox Send is a brand name and should not be localized.
downloadMessage = Tu amigo te está enviando un archivo con Firefox Send, un servicio que te permite compartir archivos con un enlace seguro, privado y cifrado que expira automáticamente para asegurar que tus cosas no queden en línea de por vida.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +93,9 @@ footerLinkAbout = Acerca de Test Pilot
footerLinkPrivacy = Privacidad
footerLinkTerms = Términos
footerLinkCookies = Cookies
requirePasswordCheckbox = Requerir una contraseña para descargar este archivo
addPasswordButton = Añadir contraseña
passwordTryAgain = Contraseña incorrecta. Vuelve a intentarlo.
// This label is followed by the password needed to download a file
passwordResult = Contraseña: { $password }
reportIPInfringement = Reportar infracción de PI

View File

@@ -25,6 +25,15 @@ uploadingFileNotification = Notificarme cuando se complete la subida.
uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace al archivo caducará tras descargarlo una vez o en 24 horas.
expireInfo = El enlace al archivo expirará tras { $downloadCount } o { $timespan }.
downloadCount = { $num ->
[one] 1 descarga
*[other] { $num } descargas
}
timespanHours = { $num ->
[one] 1 hora
*[other] { $num } horas
}
copyUrlFormLabelWithName = Copiar y compartir el enlace para enviar tu archivo: { $filename }
copyUrlFormButton = Copiar en el portapapeles
copiedUrl = ¡Copiado!
@@ -34,6 +43,10 @@ sendAnotherFileLink = Enviar otro archivo
downloadAltText = Descargar
downloadFileName = Descargar { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Introducir contraseña
unlockInputPlaceholder = Contraseña
unlockButtonLabel = Desbloquear
downloadFileTitle = Descargar archivo encriptado
// Firefox Send is a brand name and should not be localized.
downloadMessage = Tu amigo te está enviando un archivo a través de Firefox Send, un servicio que te permite compartir archivos con un enlace seguro, privado y cifrado que caduca automáticamente para que tus cosas no sean accesibles en línea de por vida.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +93,8 @@ footerLinkAbout = Sobre Test Pilot
footerLinkPrivacy = Privacidad
footerLinkTerms = Términos
footerLinkCookies = Cookies
requirePasswordCheckbox = Requerir una contraseña para descargar este archivo
addPasswordButton = Añadir contraseña
passwordTryAgain = Contraseña incorrecta. Inténtelo de nuevo.
// This label is followed by the password needed to download a file
passwordResult = Contraseña: { $password }

View File

@@ -25,6 +25,14 @@ uploadingFileNotification = Avísame cuando la subida del archivo esté completa
uploadSuccessConfirmHeader = Listo para enviar
uploadSvgAlt = Subir
uploadSuccessTimingHeader = El enlace a tu archivo expirará después de una descarga o en 24 horas.
expireInfo = El enlace a tu archivo expirará después de { $downloadCount } o { $timespan }.
downloadCount = { $num ->
*[one] 1 descarga
}
timespanHours = { $num ->
[one] 1 hora
*[other] { $num } horas
}
copyUrlFormLabelWithName = Copiar y compartir el enlace para enviar tu archivo: ($filename)
copyUrlFormButton = Copiar a portapapeles
copiedUrl = ¡Copiado!
@@ -34,6 +42,10 @@ sendAnotherFileLink = Enviar otro archivo
downloadAltText = Descargar
downloadFileName = Descargar ($filename)
downloadFileSize = ({ $size })
unlockInputLabel = Ingresar contraseña
unlockInputPlaceholder = Contraseña
unlockButtonLabel = Desbloquear
downloadFileTitle = Descargar archivo encriptado
// Firefox Send is a brand name and should not be localized.
downloadMessage = Tu amigo te está enviando un archivo a través de Firefox Send, un servicio que te permite compartir archivos con un enlace seguro, privado y encriptado que caduca automáticamente para que tus cosas no sean accesibles en línea de por vida.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +92,8 @@ footerLinkAbout = Acerca de Test Pilot
footerLinkPrivacy = Privacidad
footerLinkTerms = Términos
footerLinkCookies = Cookies
requirePasswordCheckbox = Se necesita una contraseña para descargar este archivo
addPasswordButton = Agregar contraseña
passwordTryAgain = Contraseña incorrecta. Intenta de nuevo.
// This label is followed by the password needed to download a file
passwordResult = Contraseña: { $password }

View File

@@ -21,6 +21,7 @@ uploadingPageMessage = Aegumise sätteid saab muuta siis, kui faili üles laadit
uploadingPageCancel = Katkesta üleslaadimine
uploadCancelNotification = Üleslaadimine katkestati
uploadingPageLargeFileMessage = Fail on suur ja selle üleslaadimine võib aega võtta.
uploadingFileNotification = Teavita mind üleslaadimise lõppemisest.
uploadSuccessConfirmHeader = Saatmiseks valmis
uploadSvgAlt = Laadi üles
uploadSuccessTimingHeader = Link failile aegub pärast 1. allalaadimist või 24 tunni möödumisel.
@@ -33,6 +34,10 @@ sendAnotherFileLink = Saada järgmine fail
downloadAltText = Laadi alla
downloadFileName = Laadi fail { $filename } alla
downloadFileSize = ({ $size })
unlockInputLabel = Sisesta parool
unlockInputPlaceholder = Parool
unlockButtonLabel = Ava
downloadFileTitle = Krüptitud faili allalaadimine
// Firefox Send is a brand name and should not be localized.
downloadMessage = Sulle on saadetud fail Firefox Sendiga - teenusega, mis lubab faile ohutult, privaatselt ja krüpteeritult jagada. Failid kustutatakse automaatselt, et need ei jääks internetti igaveseks.
// Text and title used on the download link/button (indicates an action).
@@ -64,6 +69,7 @@ copyFileList = Kopeeri URL
// expiryFileList is used as a column header
expiryFileList = Aegub
deleteFileList = Kustuta
nevermindButton = Ära pane tähele
legalHeader = Tingimused ja privaatsusreeglid
legalNoticeTestPilot = Firefox Send on praegu Test Piloti eksperiment ja sellele rakenduvad Test Piloti <a>teenusetingimused</a> ning <a>privaatsusreeglid</a>. Rohkem teavet selle eksperimendi ja kogutavate andmete kohta leiab <a>siit</a>.
legalNoticeMozilla = Firefox Sendi veebilehe kasutamisele rakenduvad ka Mozilla <a>veebilehtede privaatsusreeglid</a> ja <a>veebilehtede teenusetingimused</a>.
@@ -78,3 +84,8 @@ footerLinkAbout = Test Pilotist
footerLinkPrivacy = Privaatsusest
footerLinkTerms = Teenusetingimused
footerLinkCookies = Küpsistest
requirePasswordCheckbox = Selle faili allalaadimiseks nõutakse parooli
addPasswordButton = Lisa parool
passwordTryAgain = Vale parool. Palun proovi uuesti.
// This label is followed by the password needed to download a file
passwordResult = Parool: { $password }

View File

@@ -25,6 +25,13 @@ uploadingFileNotification = هر وقت بارگذاری تمام شد به من
uploadSuccessConfirmHeader = آماده برای ارسال
uploadSvgAlt = بارگذاری
uploadSuccessTimingHeader = پیوند به پرونده شما بعد از ۱ بار دانلود یا ۲۴ ساعت حذف خواهد شد.
expireInfo = این پیوند به فایل شما پس از { $downloadCount } یا { $timespan } منقضی خواهد شد.
downloadCount = { $num ->
*[other] ۱ بارگذاری
}
timespanHours = { $num ->
*[other] ۱ ساعت
}
copyUrlFormLabelWithName = برای ارسال پرونده پیوند آن را رونوشت و به اشتراک بگذارید: { $filename }
copyUrlFormButton = رونوشت به کلیپ‌بورد
copiedUrl = رونوشت شد!
@@ -34,6 +41,10 @@ sendAnotherFileLink = ارسال پرونده دیگر
downloadAltText = دریافت
downloadFileName = بارگیری { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = گذرواژه را وارد کنید
unlockInputPlaceholder = گذرواژه
unlockButtonLabel = باز کردن
downloadFileTitle = دریافت پروندهٔ رمزنگاری شده
// Firefox Send is a brand name and should not be localized.
downloadMessage = دوست شما درحال ارسال پرونده ای به وسیله Firefox Send است،‌ این سرویس این امکان را به شما می‌دهد تا پرونده‌های خود را به صورت ایمن،‌خصوصی و رمزنگاری شده به همراه پیوند انقضا خودکار همرسانی کنید تا اطمینان حاصل کنید چیزهای شما برای همیشه آنلاین باقی نخواهد ماند.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +91,9 @@ footerLinkAbout = درباره Test Pilot
footerLinkPrivacy = حریم‌خصوصی
footerLinkTerms = شرایط
footerLinkCookies = کوکی‌ها
requirePasswordCheckbox = دریافت این پرونده نیاز به گذرواژه دارد
addPasswordButton = افزودن گذرواژه
passwordTryAgain = کلمه عبور اشتباه است. مجدد تلاش کنید.
// This label is followed by the password needed to download a file
passwordResult = گذرواژه: { $password }
reportIPInfringement = گزارش تخلف IP

View File

@@ -25,6 +25,15 @@ uploadingFileNotification = Menvoyer une notification lorsque lenvoi est t
uploadSuccessConfirmHeader = Paré à lenvoi
uploadSvgAlt = Envoyer
uploadSuccessTimingHeader = Le lien vers votre fichier expirera après le premier téléchargement ou au bout de 24 heures.
expireInfo = Le lien vers votre fichier expirera après { $downloadCount } ou { $timespan }.
downloadCount = { $num ->
[one] 1 téléchargement
*[other] { $num } téléchargements
}
timespanHours = { $num ->
[one] 1 heure
*[other] { $num } heures
}
copyUrlFormLabelWithName = Copiez et partagez le lien pour envoyer votre fichier : { $filename }
copyUrlFormButton = Copier dans le presse-papiers
copiedUrl = Lien copié !
@@ -34,6 +43,10 @@ sendAnotherFileLink = Envoyer un autre fichier
downloadAltText = Télécharger
downloadFileName = Télécharger { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Saisissez le mot de passe
unlockInputPlaceholder = Mot de passe
unlockButtonLabel = Déverrouiller
downloadFileTitle = Télécharger le fichier chiffré
// Firefox Send is a brand name and should not be localized.
downloadMessage = Votre ami⋅e vous a envoyé un fichier avec Firefox Send, un service qui permet denvoyer des fichiers de façon sécurisée, confidentielle et chiffrée via un lien qui expire automatiquement pour que vos informations ne restent pas en ligne indéfiniment.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +93,9 @@ footerLinkAbout = À propos de Test Pilot
footerLinkPrivacy = Confidentialité
footerLinkTerms = Conditions dutilisation
footerLinkCookies = Cookies
requirePasswordCheckbox = Exiger un mot de passe pour télécharger ce fichier
addPasswordButton = Ajouter un mot de passe
passwordTryAgain = Mot de passe incorrect. Veuillez réessayer.
// This label is followed by the password needed to download a file
passwordResult = Mot de passe : { $password }
reportIPInfringement = Signaler une violation de la p.i.

View File

@@ -25,6 +25,15 @@ uploadingFileNotification = Jou in melding as de oplaad foltôge is.
uploadSuccessConfirmHeader = Ree om te ferstjoeren
uploadSvgAlt = Oplaad
uploadSuccessTimingHeader = De keppeling nei jo bestân sil nei 1 download ferrinne of nei 24 oeren.
expireInfo = De keppeling nei jo bestân sil nei { $downloadCount } of { $timespan } ferrinne.
downloadCount = { $num ->
[one] 1 download
*[other] { $num } downloads
}
timespanHours = { $num ->
[one] 1 oer
*[other] { $num } oeren
}
copyUrlFormLabelWithName = Kopiearje en diel de keppeling om jo bestân te ferstjoeren: { $filename }
copyUrlFormButton = Nei klamboerd kopiearje
copiedUrl = Kopiearre!
@@ -34,6 +43,10 @@ sendAnotherFileLink = Noch in bestân ferstjoere
downloadAltText = Downloade
downloadFileName = { $filename } downloade
downloadFileSize = ({ $size })
unlockInputLabel = Wachtwurd ynfiere
unlockInputPlaceholder = Wachtwurd
unlockButtonLabel = Deblokkearje
downloadFileTitle = Fersifere bestân downloade
// Firefox Send is a brand name and should not be localized.
downloadMessage = Jo freon stjoert jo in best^n mei Firefox Send, in tsjinst dy't jo yn steat stelt bestannen te dielen mei in feilige, privee en fersifere keppeling dy't automatysk ferrint om wis te wêzen dat jo guod net foar altyd online bliuwt.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +93,8 @@ footerLinkAbout = Oer Test Pilot
footerLinkPrivacy = Privacy
footerLinkTerms = Betingsten
footerLinkCookies = Cookies
requirePasswordCheckbox = Om dit bestân te downloaden is in wachtwurd fereaske
addPasswordButton = Wachtwurd tafoegje
passwordTryAgain = Net krekt wachtwurd. Probearje it opnij.
// This label is followed by the password needed to download a file
passwordResult = Wachtwurd: { $password }

View File

@@ -0,0 +1,73 @@
// Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteSubtitle = ניסוי אינטרנט
siteFeedback = משוב
uploadPageHeader = שיתוף קבצים פרטי, מוצפן
uploadPageExplainer = לשלוח קבצים דרך קישור בטוח, פרטי ומוצפן שפג אוטומטית, כדי לוודא שהתכנים הפרטיים שלך לא יהיו ברשת לנצח.
uploadPageLearnMore = מידע נוסף
uploadPageDropMessage = יש לגרור קבצים לכאן כדי להתחיל בהעלאה
uploadPageSizeMessage = להשגת ביצועים מיטביים, מוטב לשמור על הקובץ מתחת לגודל של 1 ג״ב
uploadPageBrowseButton1 = נא לבחור קובץ להעלאה
uploadPageMultipleFilesAlert = העלאה של מספר קבצים או ספריה אינה נתמכת כרגע.
uploadPageBrowseButtonTitle = העלאת קובץ
uploadingPageProgress = { $filename } ({ $size }) בהעלאה
importingFile = מתבצע ייבוא...
verifyingFile = מתבצע אימות…
encryptingFile = מתבצעת הצפנה...
decryptingFile = מתבצע פענוח...
notifyUploadDone = ההעלאה שלך הסתיימה
uploadingPageMessage = אחרי שהקובץ שלך יעלה, ניתן יהיה להגדיר אפשרויות תפוגה.
uploadCancelNotification = ההעלאה שלך בוטלה.
uploadingPageLargeFileMessage = קובץ זה גדול ועלול לקחת זמן להעלות אותו. סבלנות!
uploadingFileNotification = נא להודיע לי כשתסתיים ההעלאה.
uploadSuccessConfirmHeader = מוכן לשליחה
uploadSvgAlt
.alt = להעלות
uploadSuccessTimingHeader = הקישור לקובץ שלך יפוג אחרי הורדה אחת או בעוד 24 שעות.
copyUrlFormLabelWithName = ניתן להעתיק ולשתף את הקישור כדי לשלוח את הקובץ שלך: { $filename }
copiedUrl = הועתק!
deleteFileButton = מחיקת קובץ
.title = מחיקת קובץ
sendAnotherFileLink = שליחת קובץ נוסף
.title = שליחת קובץ נוסף
// Alternative text used on the download link/button (indicates an action).
downloadAltText
.alt = הורדה
downloadFileName = ההורדה נכשלה
downloadFileSize = ({ $size })
// Text and title used on the download link/button (indicates an action).
downloadButtonLabel = הורדה
.title = הורדה
downloadNotification = ההורדה הושלמה.
downloadFinish = ההורדה הושלמה
// This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } מתוך { $totalSize })
downloadingPageProgress = בהורדה: { $filename } ({ $size })
errorAltText
.alt = תקלה בהעלאה
errorPageHeader = משהו השתבש!
errorPageLink = שליחת קובץ נוסף
fileTooBig = הקובץ הזה גדול מידי להעלאה. עליו להיות קטן מ־{ $size }.
linkExpiredAlt
.alt = קישור פג
notSupportedHeader = הדפדפן שלך לא נתמך.
notSupportedLink = למה אין תמיכה בדפדפן שלי?
downloadFirefoxButtonSub = הורדה בחינם
uploadedFile = קובץ
copyFileList = העתקת כתובת
// expiryFileList is used as a column header
expiryFileList = יפוג בעוד
deleteFileList = מחיקה
nevermindButton = לא משנה
legalHeader = תנאי שירות ופרטיות
deletePopupText = למחוק דף זה?
deletePopupYes = כן
deletePopupCancel = ביטול
deleteButtonHover
.title = מחיקה
copyUrlHover
.title = העתקת קישור
footerLinkLegal = מידע משפטי
footerLinkPrivacy = פרטיות
footerLinkTerms = תנאי שימוש
footerLinkCookies = קובצי עוגיות

View File

@@ -25,6 +25,19 @@ uploadingFileNotification = Zdźělić, hdyž nahraće je dokónčene.
uploadSuccessConfirmHeader = Hotowy za słanje
uploadSvgAlt = Nahrać
uploadSuccessTimingHeader = Wotkaz k wašej dataji po 1 sćehnjenju abo 24 hodźinach spadnje.
expireInfo = Wotkaz k wašej dataji po { $downloadCount } abo { $timespan } spadnje.
downloadCount = { $num ->
[one] 1 sćehnjenje
[two] { $num } sćehnjeni
[few] { $num } sćehnjenja
*[other] { $num } sćehnjenjow
}
timespanHours = { $num ->
[one] 1 hodźina
[two] { $num } hodźinje
[few] { $num } hodźiny
*[other] { $num } hodźin
}
copyUrlFormLabelWithName = Kopěrujće a dźělće wotkaz, zo byšće swoju dataju pósłał: { $filename }
copyUrlFormButton = Do mjezyskłada kopěrować
copiedUrl = Kopěrowany!
@@ -34,6 +47,10 @@ sendAnotherFileLink = Druhu dataju pósłać
downloadAltText = Sćahnyć
downloadFileName = { $filename } sćahnyć
downloadFileSize = ({ $size })
unlockInputLabel = Hesło zapodać
unlockInputPlaceholder = Hesło
unlockButtonLabel = Wotewrěć
downloadFileTitle = Zaklučowanu dataju sćahnyć
// Firefox Send is a brand name and should not be localized.
downloadMessage = Waš přećel wam dataju z Firefox Send sćele, słužba, kotraž wam zmóžnja, dataje přez wěsty, priwatny a zaklučowany wotkaz dźělić, kotryž awtomatisce spadnje, zo njebychu waše daty na přeco online wostawali.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +97,9 @@ footerLinkAbout = Wo Test Pilot
footerLinkPrivacy = Priwatnosć
footerLinkTerms = Wuměnjenja
footerLinkCookies = Placki
requirePasswordCheckbox = Žadajće sej hesło za sćehnjenje tuteje dataje
addPasswordButton = Hesło přidać
passwordTryAgain = Wopačne hesło. Prošu spytajće hišće raz.
// This label is followed by the password needed to download a file
passwordResult = Hesło: { $password }
reportIPInfringement = Zranjenje IP zdźělić

View File

@@ -25,6 +25,15 @@ uploadingFileNotification = Értesítsen, ha a feltöltés elkészült.
uploadSuccessConfirmHeader = Küldésre kész
uploadSvgAlt = Feltöltés
uploadSuccessTimingHeader = A fájl hivatkozása lejár 1 letöltés vagy 24 óra múlva.
expireInfo = A fájlhoz tartozó hivatkozás { $downloadCount } vagy { $timespan } múlva lejár.
downloadCount = { $num ->
[one] 1 letöltés
*[other] { $num } letöltés
}
timespanHours = { $num ->
[one] 1 óra
*[other] { $num } óra
}
copyUrlFormLabelWithName = Másolja és ossza meg a hivatkozást a fájl küldéséhez: { $filename }
copyUrlFormButton = Vágólapra másolás
copiedUrl = Másolva!
@@ -34,6 +43,10 @@ sendAnotherFileLink = Még egy fájl küldése
downloadAltText = Letöltés
downloadFileName = { $filename } letöltése
downloadFileSize = ({ $size })
unlockInputLabel = Adja meg a jelszót
unlockInputPlaceholder = Jelszó
unlockButtonLabel = Feloldás
downloadFileTitle = Titkosított fájl letöltése
// Firefox Send is a brand name and should not be localized.
downloadMessage = Az ismerőse egy fájlt küld a Firefox Senddel, egy olyan fájlmegosztó szolgáltatással, amely biztonságos, privát és titkosított hivatkozáson keresztül működik, amely automatikusan elévül, így biztosítva hogy a dolga ne maradjon örökre online.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +93,9 @@ footerLinkAbout = A Tesztpilóta névjegye
footerLinkPrivacy = Adatvédelem
footerLinkTerms = Feltételek
footerLinkCookies = Sütik
requirePasswordCheckbox = Jelszó megkövetelése a fájl letöltéséhez
addPasswordButton = Jelszó hozzáadása
passwordTryAgain = Helytelen jelszó. Próbálja meg újra.
// This label is followed by the password needed to download a file
passwordResult = Jelszó: { $password }
reportIPInfringement = Szellemi tulajdon megsértésének bejelentése

View File

@@ -8,9 +8,11 @@ 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
.title = Pilih berkas untuk diunggah
uploadPageMultipleFilesAlert = Saat ini belum mendukung pengunggahan beberapa berkas atau folder.
uploadPageBrowseButtonTitle = Unggah berkas
uploadingPageHeader = Mengunggah Berkas Anda
uploadingPageProgress = Mengunggah { $filename } ({ $size })
importingFile = Mengimpor…
verifyingFile = Memverifikasi…
encryptingFile = Mengenkripsi...
@@ -33,12 +35,17 @@ sendAnotherFileLink = Kirim berkas lain
downloadAltText = Unduh
downloadFileName = Unduh { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Masukkan Sandi
unlockInputPlaceholder = Sandi
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
downloadNotification = Unduhan Anda telah 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 })
// Firefox Send is a brand name and should not be localized.
sendYourFilesLink = Coba Firefox Send
downloadingPageProgress = Mengunduh { $filename } ({ $size })
@@ -77,3 +84,6 @@ footerLinkAbout = Tentang Test Pilot
footerLinkPrivacy = Privasi
footerLinkTerms = Ketentuan
footerLinkCookies = Kuki
requirePasswordCheckbox = Membutuhkan sandi untuk mengunduh berkas ini
addPasswordButton = Tambahkan Sandi
incorrectPassword = Sandi salah. Coba lagi?

View File

@@ -25,6 +25,15 @@ uploadingFileNotification = Invia una notifica quando il caricamento è completa
uploadSuccessConfirmHeader = Pronto per linvio
uploadSvgAlt = Carica
uploadSuccessTimingHeader = Il link al file scadrà dopo 1 download o in 24 ore.
expireInfo = Il link a questo file scadrà dopo { $downloadCount } o { $timespan }.
downloadCount = { $num ->
[one] 1 download
*[other] { $num } download
}
timespanHours = { $num ->
[one] 1 ora
*[other] { $num } ore
}
copyUrlFormLabelWithName = Copia e condividi il link per inviare il tuo file: { $filename }
copyUrlFormButton = Copia negli appunti
copiedUrl = Copiato
@@ -34,6 +43,10 @@ sendAnotherFileLink = Invia un altro file
downloadAltText = Scarica
downloadFileName = Scarica { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Inserire la password
unlockInputPlaceholder = Password
unlockButtonLabel = Sblocca
downloadFileTitle = Scarica il file crittato
// Firefox Send is a brand name and should not be localized.
downloadMessage = Qualcuno ha utilizzato Firefox Send per inviarti un file. Si tratta di un servizio che permette di condividere file in modo sicuro, riservato e crittato, utilizzando un link che smette di funzionare automaticamente dopo un certo periodo di tempo, garantendo così che i tuoi dati non rimangano online per sempre.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +93,9 @@ footerLinkAbout = Informazioni su Test Pilot
footerLinkPrivacy = Privacy
footerLinkTerms = Condizioni di utilizzo
footerLinkCookies = Cookie
requirePasswordCheckbox = Richiedi una password per poter scaricare questo file
addPasswordButton = Aggiungi password
passwordTryAgain = Password errata, riprovare.
// This label is followed by the password needed to download a file
passwordResult = Password: { $password }
reportIPInfringement = Segnala violazione della proprietà intellettuale

View File

@@ -25,6 +25,13 @@ uploadingFileNotification = アップロード完了時に通知を受け取る
uploadSuccessConfirmHeader = 送信準備完了
uploadSvgAlt = アップロード
uploadSuccessTimingHeader = ファイルへのリンクは、1 回ダウンロードされた後、もしくは 24 時間以内に期限切れとなります。
expireInfo = このファイルへのリンクは { $downloadCount } あるいは { $timespan } 後に期限切れとなります。
downloadCount = { $num ->
*[other] { $num } 回のダウンロード
}
timespanHours = { $num ->
*[other] { $num } 時間
}
copyUrlFormLabelWithName = ファイルを送信するにはこのリンクをコピー、共有してください: { $filename }
copyUrlFormButton = クリップボードへコピー
copiedUrl = コピー完了!
@@ -34,6 +41,10 @@ sendAnotherFileLink = 他のファイルを送信
downloadAltText = ダウンロード
downloadFileName = { $filename } をダウンロード
downloadFileSize = ({ $size })
unlockInputLabel = パスワードを入力
unlockInputPlaceholder = パスワード
unlockButtonLabel = ロック解除
downloadFileTitle = 暗号化されたファイルをダウンロード
// Firefox Send is a brand name and should not be localized.
downloadMessage = あなたの友人が Firefox Send を通じてファイルを送ってきています。これは、安全で、プライベートで、暗号化されたリンクを通じてファイルを共有できるサービスです。あなたのものがずっとオンラインに残らないよう、リンクは自動的に期限切れとなります。
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +91,9 @@ footerLinkAbout = Test Pilot について
footerLinkPrivacy = プライバシー
footerLinkTerms = 利用規約
footerLinkCookies = Cookie
requirePasswordCheckbox = このファイルをダウンロードするにはパスワードが必要です
addPasswordButton = パスワードを追加
passwordTryAgain = パスワードが正しくありません。再度入力してください。
// This label is followed by the password needed to download a file
passwordResult = パスワード: { $password }
reportIPInfringement = 知的財産侵害報告

View File

@@ -0,0 +1,99 @@
// Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteSubtitle = საცდელი
siteFeedback = გამოხმაურება
uploadPageHeader = ფაილების უსაფრთხო, დაშიფრული გაზიარება
uploadPageExplainer = გააგზავნეთ ფაილები უსაფრთხოდ, დაფარულად და დაშიფრულად ბმულის საშუალებით, წინასწარ განსაზღვრული ვადით, რაც საწინდარია იმის, რომ თქვენი კუთვნილი მასალა, არ დარჩება ინტერნეტში სამუდამოდ.
uploadPageLearnMore = ვრცლად
uploadPageDropMessage = გადმოიტანეთ ფაილი აქ, ასატვირთად
uploadPageSizeMessage = ყველაზე საიმედო მომსახურება, შეგიძლიათ ატვირთოთ არაუმეტეს 1GB ზომის ფაილი
uploadPageBrowseButton = ფაილის არჩევა კომპიუტერიდან
uploadPageBrowseButton1 = ფაილის არჩევა ასატვირთად
uploadPageMultipleFilesAlert = ერთდროულად რამდენიმე ფაილის, ან საქაღალდის ატვირთვა, ამჟამად არაა ხელმისაწვდომი.
uploadPageBrowseButtonTitle = ფაილის ატვირთვა
uploadingPageProgress = მიმდინარეობს ატვირთვა { $filename } ({ $size })
importingFile = გადმოტანა...
verifyingFile = დამოწმება...
encryptingFile = დაშიფვრა...
decryptingFile = გაშიფვრა...
notifyUploadDone = ფაილის ატვირთვა დასრულებულია.
uploadingPageMessage = ფაილის ატვირთვის შემდეგ, შეგიძლიათ მიუთითოთ შენახვის ვადა.
uploadingPageCancel = ატვირთვის გაუქმება
uploadCancelNotification = ფაილის ატვირთვა გაუქმებულია.
uploadingPageLargeFileMessage = ფაილი დიდია და ატვირთვამ შესაძლოა დიდხანს გასტანოს. ასე რომ, მოკალათდით!
uploadingFileNotification = შეტყობინება, ატვირთვის დასრულებისას.
uploadSuccessConfirmHeader = მზადაა გასაგზავნად
uploadSvgAlt = ატვირთვა
uploadSuccessTimingHeader = ფაილს ვადა გაუვა 1 ჩამოტვირთვის, ან 24 საათის მერე.
expireInfo = ფაილის ბმულს, ვადა გაუვა { $downloadCount }, ან { $timespan } მერე.
downloadCount = { $num ->
*[other] { $num } ჩამოტვირთვა
}
timespanHours = { $num ->
*[other] { $num } საათი
}
copyUrlFormLabelWithName = დააკოპირეთ და გააზიარეთ ბმული, ფაილის გასაგზავნად: { $filename }
copyUrlFormButton = დაკოპირება
copiedUrl = დაკოპირდა!
deleteFileButton = ფაილის წაშლა
sendAnotherFileLink = სხვა ფაილის გაგზავნა
// Alternative text used on the download link/button (indicates an action).
downloadAltText = ჩამოტვირთვა
downloadFileName = { $filename } ჩამოტვირთვა
downloadFileSize = ({ $size })
unlockInputLabel = შეიყვანეთ პაროლი
unlockInputPlaceholder = პაროლი
unlockButtonLabel = გახსნა
downloadFileTitle = დაშიფრული ფაილის ჩამოტვირთვა
// Firefox Send is a brand name and should not be localized.
downloadMessage = თქვენი მეგობარი გიგზავნით ფაილს Firefox Send მომსახურების მეშვეობით, რომლითაც შეგიძლიათ ფაილების უსაფრთხოდ, დაფარულად და დაშიფრულად გაზიარება ბმულის საშუალებით, წინასწარ განსაზღვრული ვადით, რაც საწინდარია იმის, რომ თქვენი კუთვნილი მასალა, არ დარჩება ინტერნეტში სამუდამოდ.
// Text and title used on the download link/button (indicates an action).
downloadButtonLabel = ჩამოტვირთვა
downloadNotification = თქვენი ჩამოტვირთვა დასრულებულია.
downloadFinish = ჩამოტვირთვა დასრულდა
// This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } { $totalSize }-იდან)
// Firefox Send is a brand name and should not be localized.
sendYourFilesLink = გამოცადეთ Firefox Send
downloadingPageProgress = მიმდინარეობს ჩამოტვირთვა { $filename } ({ $size })
downloadingPageMessage = გთხოვთ დატოვოთ ეს ჩანართი გახსნილი, სანამ ფაილი ჩამოიტვირთება და გაიშიფრება.
errorAltText = შეცდომა ატვირთვისას
errorPageHeader = რაღაც ხარვეზია!
errorPageMessage = ფაილის ატვირთვისას წარმოიშვა შეცდომა.
errorPageLink = სხვა ფაილის გაგზავნა
fileTooBig = ფაილი ზედმეტად დიდია. უნდა იყოს { $size } ზომაზე ნაკლები.
linkExpiredAlt = ბმული ვადაგასულია
expiredPageHeader = ბმული ან ვადაგასულია, ან არ არსებობს!
notSupportedHeader = თქვენი ბრაუზერი არაა მხარდაჭერილი.
// Firefox Send is a brand name and should not be localized.
notSupportedDetail = სამწუხაროდ, ამ ბრაუზერს არ გააჩნია ის ტექნოლოგია, რომელიც აუცილებელია Firefox Send-ის მუშაობისთვის. გესაჭიროებათ სხვა ბრაუზერი. ჩვენ შეგვიძლია გირჩიოთ Firefox!
notSupportedLink = რატომ არაა ჩემი ბრაუზერი მხარდაჭერილი?
notSupportedOutdatedDetail = სამწუხაროდ, Firefox-ის ამ ვერსიას არ გააჩნია ის ტექნოლოგია, რომელიც აუცილებელია Firefox Send-ის მუშაობისთვის. გესაჭიროებათ, ბრაუზერის განახლება.
updateFirefox = Firefox-ის განახლება
downloadFirefoxButtonSub = უფასო ჩამოტვირთვა
uploadedFile = ფაილი
copyFileList = URL ბმულის დაკოპირება
// expiryFileList is used as a column header
expiryFileList = ვადის გასვლის დრო
deleteFileList = წაშლა
nevermindButton = არ აქვს მნიშვნელობა
legalHeader = პირობები და პირადულობა
legalNoticeTestPilot = Firefox Send ამჟამად Test Pilot-ის საცდელი პროექტია და ექვემდებარება Test Pilot-ის <a>მომსახურების პირობებსა</a> და <a>პირადი მონაცემების დაცვის დებულებას</a>. ვრცლად, ამ საცდელი პროექტისა და მონაცემების აღრიცხვის შესახებ, შეგიძლიათ იხილოთ <a>აქ</a>.
legalNoticeMozilla = Firefox Send ვებსაიტი, ასევე ექვემდებარება Mozilla-ს <a>ვებსაიტების პირადი მონაცემების შესახებ დებულებას</a> და <a>ვებსაიტების გამოყენების პირობებს</a>.
deletePopupText = გსურთ ამ ფაილის წაშლა?
deletePopupYes = დიახ
deletePopupCancel = გაუქმება
deleteButtonHover = წაშლა
copyUrlHover = URL-ს დაკოპირება
footerLinkLegal = იურიდიული ინფორმაცია
// Test Pilot is a proper name and should not be localized.
footerLinkAbout = Test Pilot-ის შესახებ
footerLinkPrivacy = პირადულობა
footerLinkTerms = პირობები
footerLinkCookies = ფუნთუშები
requirePasswordCheckbox = პაროლის მოთხოვნა, ფაილის ჩამოტვირთვისას
addPasswordButton = პაროლის დამატება
passwordTryAgain = პაროლი არასწორია. სცადეთ ხელახლა.
// This label is followed by the password needed to download a file
passwordResult = პაროლი: { $password }
reportIPInfringement = მოხსენება დარღვევაზე

View File

@@ -34,6 +34,10 @@ sendAnotherFileLink = Azen afaylu-nniḍen
downloadAltText = Sider
downloadFileName = Sider { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Sekcem awal uffir
unlockInputPlaceholder = Awal uffir
unlockButtonLabel = Serreḥ
downloadFileTitle = Sider afaylu awgelhan
// Firefox Send is a brand name and should not be localized.
downloadMessage = Amdakel-ik yuzen-ak-d afaylu s Firefox Firefox Send, ameẓlu ara yeǧǧen tuzna n ifuyla s wudem aɣelsan, s tbadnit akked uwgelhen s useqdec n useqwen ara yeùten s wudem awurman akken talqut-ik ur tettɣimi ara srid i lebda.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +84,6 @@ footerLinkAbout = Ɣef Test Pilot
footerLinkPrivacy = Tabaḍnit
footerLinkTerms = Tiwtilin
footerLinkCookies = Inagan n tuqqna
requirePasswordCheckbox = YEsra awal uffir akken ad isider afaylu-agi
addPasswordButton = rnu awal uffir
passwordTryAgain = Yir awal uffir. Ɛreḍ tikelt nniḍen.

View File

@@ -35,6 +35,10 @@ sendAnotherFileLink = 다른 파일 보내기
downloadAltText = 다운로드
downloadFileName = { $filename } 다운로드
downloadFileSize = ({ $size })
unlockInputLabel = 비밀번호 입력
unlockInputPlaceholder = 비밀번호
unlockButtonLabel = 잠금 해제
downloadFileTitle = 암호화된 파일 다운로드
// Firefox Send is a brand name and should not be localized.
downloadMessage = 당신의 친구가 Firefox Send를 통해 파일을 보내고 있습니다. 이 서비스는 안전하고, 개인적이며, 암호화된 링크를 통해 파일을 공유하는 서비스입니다. 사용자의 파일이 더 이상 온라인 상에 남지 않도록 링크는 자동적으로 만료됩니다.
// Text and title used on the download link/button (indicates an action).
@@ -81,3 +85,8 @@ footerLinkAbout = Test Pilot 정보
footerLinkPrivacy = 개인정보 보호
footerLinkTerms = 이용 약관
footerLinkCookies = 쿠키
requirePasswordCheckbox = 이 파일을 다운로드하려면 비밀번호가 필요함
addPasswordButton = 비밀번호 추가
passwordTryAgain = 비밀번호가 맞지 않습니다. 다시 시도해 주세요.
// This label is followed by the password needed to download a file
passwordResult = 비밀번호: { $password }

View File

@@ -25,6 +25,13 @@ uploadingFileNotification = Maklumkan saya apabila muat naik selesai.
uploadSuccessConfirmHeader = Sedia untuk Hantar
uploadSvgAlt = Muat naik
uploadSuccessTimingHeader = Pautan ke fail anda akan luput selepas 1 muat turun atau dalam 24 jam.
expireInfo = Pautan ke fail anda akan luput selepas { $downloadCount } atau { $timespan }.
downloadCount = { $num ->
*[other] { $num } muat turun
}
timespanHours = { $num ->
*[other] { $num } jam
}
copyUrlFormLabelWithName = Salin dan kongsi pautan untuk menghantar fail anda: { $filename }
copyUrlFormButton = Salin ke Klipbod
copiedUrl = Disalin!
@@ -34,6 +41,10 @@ sendAnotherFileLink = Hantar fail lain
downloadAltText = Muat turun
downloadFileName = Muat turun { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Masukkan Kata Laluan
unlockInputPlaceholder = Kata laluan
unlockButtonLabel = Buka
downloadFileTitle = Muat turun Fail Enkripsi
// Firefox Send is a brand name and should not be localized.
downloadMessage = Rakan anda menghantar satu fail kepada anda menggunakan Firefox Send, satu perkhidmatan yang membolehkan anda berkongsi fail dengan pautan yang selamat, peribadi dan dienkrip, yang secara automatik akan luput bagi memastikan fail anda tidak terus berada dalam talian selama-lamanya.
// Text and title used on the download link/button (indicates an action).
@@ -67,7 +78,7 @@ expiryFileList = Luput Pada
deleteFileList = Buang
nevermindButton = Tak apalah
legalHeader = Terma & Privasi
legalNoticeTestPilot = Firefox Send adalah eksperimen Ujian Perintis, dan tertakluk kepada <a>Terma Perkhidmatan</a> dan <a>Privacy Notice</a> Ujian Perintis. Anda boleh ketahui selanjutnya perihal eksperimen ini dan pengumpulan data <a>di sini</a>.
legalNoticeTestPilot = Firefox Send adalah eksperimen Ujian Perintis, dan tertakluk kepada <a>Terma Perkhidmatan</a> dan <a>Notis Privasi</a> Ujian Perintis. Anda boleh ketahui selanjutnya perihal eksperimen ini dan pengumpulan data <a>di sini</a>.
legalNoticeMozilla = Penggunaan laman web Firefox Send juga tertakluk kepada <a>Notis Privasi Laman web</a> dan <a>Terma Penggunaan Laman web</a> Mozilla.
deletePopupText = Buang fail ini?
deletePopupYes = Ya
@@ -80,3 +91,9 @@ footerLinkAbout = Perihal Ujian Perintis
footerLinkPrivacy = Privasi
footerLinkTerms = Terma
footerLinkCookies = Kuki
requirePasswordCheckbox = Perlu kata laluan untuk memuat turun fail ini
addPasswordButton = Tambah Kata laluan
passwordTryAgain = Kata laluan tidak betul. Cuba lagi.
// This label is followed by the password needed to download a file
passwordResult = Kata laluan: { $password }
reportIPInfringement = Lapor Pencerobohan IP

View File

@@ -25,6 +25,15 @@ uploadingFileNotification = Varsle meg når opplastingen er ferdig.
uploadSuccessConfirmHeader = Klar til å sende
uploadSvgAlt = Last opp
uploadSuccessTimingHeader = Lenken til filen din utløper etter 1 nedlasting eller om 24 timer.
expireInfo = Lenken til filen din vil gå ut etter { $downloadCount } eller { $timespan }.
downloadCount = { $num ->
[one] 1 nedlasting
*[other] { $num } nedlastinger
}
timespanHours = { $num ->
[one] 1 time
*[other] { $num } timer
}
copyUrlFormLabelWithName = Kopier og del linken for å sende filen: { $filename }
copyUrlFormButton = Kopier til utklippstavle
copiedUrl = Kopiert!
@@ -34,6 +43,10 @@ sendAnotherFileLink = Send en annen fil
downloadAltText = Last ned
downloadFileName = Last ned { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Skriv inn passord
unlockInputPlaceholder = Passord
unlockButtonLabel = Lås opp
downloadFileTitle = Last ned kryptert fil
// Firefox Send is a brand name and should not be localized.
downloadMessage = Din venn sender deg en fil med Firefox Send, en tjeneste som lar deg dele filer med en sikker, privat og kryptert lenke, som automatisk utløper, for å sikre at ting ikke forblir på nettet for alltid.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +93,9 @@ footerLinkAbout = Om Test Pilot
footerLinkPrivacy = Personvern
footerLinkTerms = Vilkår
footerLinkCookies = Infokapsler
requirePasswordCheckbox = Krever et passord for å laste ned denne filen
addPasswordButton = Legg til passord
passwordTryAgain = Feil passord. Prøv igjen.
// This label is followed by the password needed to download a file
passwordResult = Passord: { $password }
reportIPInfringement = Rapporter brudd på åndsverk

View File

@@ -25,6 +25,15 @@ uploadingFileNotification = Mij waarschuwen zodra het uploaden is voltooid
uploadSuccessConfirmHeader = Gereed voor verzending
uploadSvgAlt = Uploaden
uploadSuccessTimingHeader = De koppeling naar uw bestand zal na 1 download of 24 uur verlopen.
expireInfo = De koppeling naar uw bestand zal na { $downloadCount } of { $timespan } verlopen.
downloadCount = { $num ->
[one] 1 download
*[other] { $num } downloads
}
timespanHours = { $num ->
[one] 1 uur
*[other] { $num } uur
}
copyUrlFormLabelWithName = Kopieer en deel de koppeling om uw bestand te verzenden: { $filename }
copyUrlFormButton = Kopiëren naar klembord
copiedUrl = Gekopieerd!
@@ -34,6 +43,10 @@ sendAnotherFileLink = Nog een bestand verzenden
downloadAltText = Downloaden
downloadFileName = { $filename } downloaden
downloadFileSize = ({ $size })
unlockInputLabel = Voer wachtwoord in
unlockInputPlaceholder = Wachtwoord
unlockButtonLabel = Ontgrendelen
downloadFileTitle = Versleuteld bestand downloaden
// Firefox Send is a brand name and should not be localized.
downloadMessage = Uw vriend(in) stuurt u een bestand met Firefox Send, een dienst waarmee u bestanden kunt verzenden met een veilige, private en versleutelde koppeling die automatisch verloopt, zodat u zeker weet dat uw zaken niet onbeperkt online blijven.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +93,9 @@ footerLinkAbout = Over Test Pilot
footerLinkPrivacy = Privacy
footerLinkTerms = Voorwaarden
footerLinkCookies = Cookies
requirePasswordCheckbox = Een wachtwoord vereisen om dit bestand te downloaden
addPasswordButton = Wachtwoord toevoegen
passwordTryAgain = Onjuist wachtwoord. Probeer het opnieuw.
// This label is followed by the password needed to download a file
passwordResult = Wachtwoord: { $password }
reportIPInfringement = IE-inbreuk melden

View File

@@ -25,6 +25,15 @@ uploadingFileNotification = Varsle meg når opplastinga er ferdig.
uploadSuccessConfirmHeader = Klår til å senda
uploadSvgAlt = Last opp
uploadSuccessTimingHeader = Lenka til fila di går ut etter 1 nedlasting eller om 24 timar.
expireInfo = Lenka til fila di vil gå ut etter { $downloadCount } eller { $timespan }.
downloadCount = { $num ->
[one] 1 nedlasting
*[other] { $num } nedlastingar
}
timespanHours = { $num ->
[one] 1 time
*[other] { $num } timar
}
copyUrlFormLabelWithName = Kopier og del lenka for å sende fila: { $filename }
copyUrlFormButton = Kopier til utklippstavla
copiedUrl = Kopiert!
@@ -34,6 +43,10 @@ sendAnotherFileLink = Send ei anna fil
downloadAltText = Last ned
downloadFileName = Last ned { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Skriv inn passord
unlockInputPlaceholder = Passord
unlockButtonLabel = Lås opp
downloadFileTitle = Last ned kryptert fil
// Firefox Send is a brand name and should not be localized.
downloadMessage = Vennen din sender deg eni fil med Firefox Send, ei teneste som lar deg dele filer med ei sikker, privat og kryptert lenke, som automatisk går ut, for å sikre at ting ikkje vert verande på nettet for alltid.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +93,9 @@ footerLinkAbout = Om Test Pilot
footerLinkPrivacy = Personvern
footerLinkTerms = Vilkår
footerLinkCookies = Infokapslar
requirePasswordCheckbox = Krev eit passord for å laste ned denne fila
addPasswordButton = Legg til passord
passwordTryAgain = Feil passord. Prøv på nytt.
// This label is followed by the password needed to download a file
passwordResult = Passord: { $password }
reportIPInfringement = Rapporter brot på åndsverk

View File

@@ -25,6 +25,15 @@ uploadingFileNotification = Me avise quando completar o envio.
uploadSuccessConfirmHeader = Pronto para enviar
uploadSvgAlt = Enviado
uploadSuccessTimingHeader = O link para o seu arquivo expirará após 1 download ou em 24 horas.
expireInfo = O link para o seu arquivo expirará após { $downloadCount } ou { $timepan }.
downloadCount = { $num ->
[one] 1 download
*[other] { $num } downloads
}
timespanHours = { $num ->
[one] 1 hora
*[other] { $num } horas
}
copyUrlFormLabelWithName = Copie e compartilhe o link para enviar o seu arquivo: { $filename }
copyUrlFormButton = Copiar para área de transferência
copiedUrl = Copiado!
@@ -34,6 +43,10 @@ sendAnotherFileLink = Enviar outro arquivo
downloadAltText = Baixar
downloadFileName = Baixar { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Insira a senha
unlockInputPlaceholder = Senha
unlockButtonLabel = Desbloquear
downloadFileTitle = Baixar arquivo criptografado
// Firefox Send is a brand name and should not be localized.
downloadMessage = Seu amigo está te enviando um arquivo através do Firefox Send, um serviço que permite compartilhar arquivos com um link seguro, privado e criptografado que automaticamente expira para garantir que suas coisas não permaneçam on-line eternamente.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +93,9 @@ footerLinkAbout = Sobre o Test Pilot
footerLinkPrivacy = Privacidade
footerLinkTerms = Termos
footerLinkCookies = Cookies
requirePasswordCheckbox = Para baixar esse arquivo é necessário uma senha
addPasswordButton = Adicionar senha
passwordTryAgain = Senha incorreta. Tente novamente.
// This label is followed by the password needed to download a file
passwordResult = Senha: { $password }
reportIPInfringement = Reportar violação de IP

View File

@@ -24,27 +24,37 @@ uploadingPageLargeFileMessage = Este ficheiro é grande e pode demorar um pouco
uploadingFileNotification = Notificar-me quando o carregamento estiver completo.
uploadSuccessConfirmHeader = Pronto para enviar
uploadSvgAlt = Carregar
uploadSuccessTimingHeader = A ligação para o seu ficheiro irá expirar depois de 1 descarga ou em 24 horas.
uploadSuccessTimingHeader = A ligação para o seu ficheiro irá expirar depois de 1 transferência ou em 24 horas.
expireInfo = A ligação para o seu ficheiro irá expirar depois de { $downloadCount } or { $timespan }.
downloadCount = { $num ->
[one] 1 transferência
*[other] { $num } transferências
}
timespanHours = 1 hora
copyUrlFormLabelWithName = Copie e partilhe a ligação para enviar o seu ficheiro: { $filename }
copyUrlFormButton = Copiar para a área de transferência
copiedUrl = Copiado!
deleteFileButton = Apagar ficheiro
sendAnotherFileLink = Enviar outro ficheiro
// Alternative text used on the download link/button (indicates an action).
downloadAltText = Descarregar
downloadFileName = Descarregar { $filename }
downloadAltText = Transferir
downloadFileName = Transferir { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Digitar palavra-passe
unlockInputPlaceholder = Palavra-passe
unlockButtonLabel = Desbloquear
downloadFileTitle = Transferir ficheiro encriptado
// Firefox Send is a brand name and should not be localized.
downloadMessage = O seu amigo está a enviar-lhe um ficheiro com o Firefox Send, um serviço que lhe permite partilhar ficheiro com uma ligação segura, privada e encriptada que expira automaticamente para garantir que as suas coisas não fiquem online para sempre.
// Text and title used on the download link/button (indicates an action).
downloadButtonLabel = Descarregar
downloadNotification = A sua descarga foi completada.
downloadFinish = Descarga completada
downloadButtonLabel = Transferir
downloadNotification = A sua transferência foi concluída.
downloadFinish = Transferência concluída
// This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } de { $totalSize })
// Firefox Send is a brand name and should not be localized.
sendYourFilesLink = Tentar o Firefox Send
downloadingPageProgress = A descarregar { $filename } ({ $size })
sendYourFilesLink = Experimentar o Firefox Send
downloadingPageProgress = A transferir { $filename } ({ $size })
downloadingPageMessage = Por favor deixe este separador aberto enquanto obtemos o seu ficheiro e o desencriptamos.
errorAltText = Erro ao carregar
errorPageHeader = Algo correu mal.
@@ -59,7 +69,7 @@ notSupportedDetail = Infelizmente este navegador não suporta a tecnologia web q
notSupportedLink = Porque é que o meu navegador não é suportado?
notSupportedOutdatedDetail = Infelizmente esta versão do Firefox não suporta a tecnologia web que faz o Firefox Send funcionar. Precisa de atualizar o seu navegador.
updateFirefox = Atualizar o Firefox
downloadFirefoxButtonSub = Descarga gratuita
downloadFirefoxButtonSub = Transferência gratuita
uploadedFile = Ficheiro
copyFileList = Copiar URL
// expiryFileList is used as a column header
@@ -68,7 +78,7 @@ deleteFileList = Apagar
nevermindButton = Esquecer
legalHeader = Termos e privacidade
legalNoticeTestPilot = O Firefox Send é atualmente uma experiência do Test Pilot, e sujeita aos <a>Termos de serviço</a> e <a>Aviso de privacidade</a> do Test Pilot. Pode saber mais acerca desta experiência e a sua recolha de dados <a>aqui</a>.
legalNoticeMozilla = A utilização do website do Firefox Send está também sujeita ao <a>Aviso de privacidade dos websites</a> e <a>Termos de serviço dos websites</a> da Mozilla.
legalNoticeMozilla = A utilização do website do Firefox Send está também sujeita ao <a>Aviso de privacidade dos websites</a> e <a>Termos de utilização dos websites</a> da Mozilla.
deletePopupText = Apagar este ficheiro?
deletePopupYes = Sim
deletePopupCancel = Cancelar
@@ -80,3 +90,9 @@ footerLinkAbout = Acerca do Test Pilot
footerLinkPrivacy = Privacidade
footerLinkTerms = Termos
footerLinkCookies = Cookies
requirePasswordCheckbox = Requerer uma palavra-passe para transferir este ficheiro
addPasswordButton = Adicionar palavra-passe
passwordTryAgain = Palavra-passe incorreta. Tente novamente.
// This label is followed by the password needed to download a file
passwordResult = Palavra-passe: { $password }
reportIPInfringement = Reportar violação de PI

View File

@@ -4,7 +4,10 @@ siteSubtitle = un experiment web
siteFeedback = Feedback
uploadPageHeader = Partajare de fișiere privată și criptată
uploadPageLearnMore = Află mai multe
uploadPageDropMessage = Aruncă fișierul aici pentru a începe încărcarea.
uploadPageBrowseButton = Alege un fișier din calculator.
uploadPageBrowseButton1 = Selectează un fișier pentru încărcare
uploadPageMultipleFilesAlert = Încărcarea mai multor fișiere deodată sau a dosarelor nu este suportată.
uploadPageBrowseButtonTitle = Încarcă fișier
uploadingPageProgress = Se încarcă { $filename } ({ $size })
importingFile = Se importă…
@@ -15,6 +18,7 @@ notifyUploadDone = Încărcarea s-a finalizat.
uploadingPageMessage =
uploadingPageCancel = Anulează încărcarea
uploadCancelNotification = Încărcarea a fost anulată.
uploadingPageLargeFileMessage = Stai calm! Acest fișier este mare. S-ar putea să dureze un timp încărcarea.
uploadingFileNotification = Notifică-mă când încărcarea este încheiată.
uploadSuccessConfirmHeader = Pregătit pentru trimitere
uploadSvgAlt = Încarcă
@@ -27,6 +31,10 @@ sendAnotherFileLink = Trimite un alt fișier
downloadAltText = Descarcă
downloadFileName = Descarcă { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Introdu parola
unlockInputPlaceholder = Parolă
unlockButtonLabel = Deblochează
downloadFileTitle = Descarcă fișierul criptat
// Text and title used on the download link/button (indicates an action).
downloadButtonLabel = Descarcă
downloadNotification = Descărcarea s-a încheiat.
@@ -38,7 +46,9 @@ sendYourFilesLink = Încearcă Firefox Send
downloadingPageProgress = Se descarcă { $filename } ({ $size })
errorAltText = Eroare la încărcare
errorPageHeader = Ceva a mers prost!
errorPageMessage = A apărut o eroare la încărcarea fișierului.
errorPageLink = Trimite un alt fișier
fileTooBig = Acest fișier este prea mare. Trebuie să fie sub { $size }.
linkExpiredAlt = Link expirat
expiredPageHeader = Acest link a expirat sau nu a existat de la bun început!
notSupportedHeader = Browserul tău nu este suportat.
@@ -50,9 +60,11 @@ copyFileList = Copiază URL-ul
// expiryFileList is used as a column header
expiryFileList = Expiră în
deleteFileList = Șterge
nevermindButton = Uită
legalHeader = Termeni de utilizare și politica de confidențialitate
deletePopupText = Ștergi aceast fișier?
deletePopupYes = Da
deletePopupCancel = Renunță
deleteButtonHover = Șterge
copyUrlHover = Copiază URL-ul
footerLinkLegal = Mențiuni legale
@@ -61,3 +73,4 @@ footerLinkAbout = Despre Test Pilot
footerLinkPrivacy = Confidențialitate
footerLinkTerms = Termeni
footerLinkCookies = Cookie-uri
addPasswordButton = Adaugă parolă

View File

@@ -25,6 +25,17 @@ uploadingFileNotification = Оповестить меня, когда загру
uploadSuccessConfirmHeader = Готов к отправке
uploadSvgAlt = Загрузить
uploadSuccessTimingHeader = Ссылка на ваш файл станет недоступна после 1 загрузки файла или через 24 часа.
expireInfo = Ссылка на ваш файл станет недоступна после { $downloadCount } файла или через { $timespan }.
downloadCount = { $num ->
[one] { $number } загрузки
[few] { $number } загрузок
*[other] { $number } загрузок
}
timespanHours = { $num ->
[one] { $number } час
[few] { $number } часа
*[other] { $number } часов
}
copyUrlFormLabelWithName = Скопировать и поделиться ссылкой на отправку вашего файла: { $filename }
copyUrlFormButton = Скопировать в буфер обмена
copiedUrl = Скопировано!
@@ -34,6 +45,10 @@ sendAnotherFileLink = Отправить другой файл
downloadAltText = Загрузить
downloadFileName = Загрузить { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Введите пароль
unlockInputPlaceholder = Пароль
unlockButtonLabel = Разблокировать
downloadFileTitle = Загрузить зашифрованный файл
// Firefox Send is a brand name and should not be localized.
downloadMessage = Ваш друг отправил вам файл с помощью Firefox Send, сервиса, который позволяет вам делиться файлами, используя безопасные, приватные и зашифрованные ссылки, по истечении срока действия которых ваши файлы не остаются в сети навсегда.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +95,9 @@ footerLinkAbout = О программе лётчика-испытателя
footerLinkPrivacy = Приватность
footerLinkTerms = Условия
footerLinkCookies = Куки
requirePasswordCheckbox = Требовать пароль для загрузки этого файла
addPasswordButton = Добавить пароль
passwordTryAgain = Неверный пароль. Попробуйте снова.
// This label is followed by the password needed to download a file
passwordResult = Пароль: { $password }
reportIPInfringement = Сообщить о нарушении прав на интеллектуальную собственность

View File

@@ -34,8 +34,12 @@ sendAnotherFileLink = Odoslať ďalší súbor
downloadAltText = Prevziať
downloadFileName = Prevziať { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Zadajte heslo
unlockInputPlaceholder = Heslo
unlockButtonLabel = Odomknúť
downloadFileTitle = Prevziať šifrovaný súbor
// Firefox Send is a brand name and should not be localized.
downloadMessage = Váš priateľ vám odoslal súbor pomocou služby Firefox Sync - táto vám umožňuje zdieľať súbory pomocou bezpečného, súkromného a zašifrovaného odkazu, ktorého platnosť automaticky vyprší. Vďaka tomu máte istotu, že vaše súbory neostanú na internete naveky.
downloadMessage = Váš priateľ vám odoslal súbor pomocou služby Firefox Send - táto vám umožňuje zdieľať súbory pomocou bezpečného, súkromného a zašifrovaného odkazu, ktorého platnosť automaticky vyprší. Vďaka tomu máte istotu, že vaše súbory neostanú na internete naveky.
// Text and title used on the download link/button (indicates an action).
downloadButtonLabel = Prevziať
downloadNotification = Vaše preberanie bolo dokončené.
@@ -80,3 +84,8 @@ footerLinkAbout = O projekte Test Pilot
footerLinkPrivacy = Súkromie
footerLinkTerms = Podmienky používania
footerLinkCookies = Cookies
requirePasswordCheckbox = Pri preberaní súboru vyžadovať heslo
addPasswordButton = Pridať heslo
passwordTryAgain = Nesprávne heslo. Skúste to znova.
// This label is followed by the password needed to download a file
passwordResult = Heslo: { $password }

View File

@@ -25,6 +25,19 @@ uploadingFileNotification = Obvesti me, ko bo nalaganje končano.
uploadSuccessConfirmHeader = Pripravljeno za pošiljanje
uploadSvgAlt = Naloži
uploadSuccessTimingHeader = Povezava do vaše datoteke bo potekla po enem prenosu ali v 24 urah.
expireInfo = Povezava do vaše datoteke bo potekla čez { $downloadCount } ali { $timespan }.
downloadCount = { $num ->
[one] 1 prenos
[two] { $num } prenosa
[few] { $num } prenosi
*[other] { $num } prenosov
}
timespanHours = { $num ->
[one] 1 ura
[two] { $num } uri
[few] { $num } ure
*[other] { $num } ur
}
copyUrlFormLabelWithName = Kopirajte in delite to povezavo, da pošljete datoteko: { $filename }
copyUrlFormButton = Kopiraj v odložišče
copiedUrl = Kopirano!
@@ -34,6 +47,10 @@ sendAnotherFileLink = Pošlji drugo datoteko
downloadAltText = Prenesi
downloadFileName = Prenesi { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Vnesite geslo
unlockInputPlaceholder = Geslo
unlockButtonLabel = Odkleni
downloadFileTitle = Prenesi šifrirano datoteko
// Firefox Send is a brand name and should not be localized.
downloadMessage = Prijatelj vam pošilja datoteko preko storitve Firefox Send, ki vam omogoča deljenje datotek preko varne, zasebne in šifrirane povezave, ki samodejno poteče, kar vam zagotavlja, da vaše stvari ne ostanejo na spletu za vedno.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +97,9 @@ footerLinkAbout = O programu Test Pilot
footerLinkPrivacy = Zasebnost
footerLinkTerms = Pogoji
footerLinkCookies = Piškotki
requirePasswordCheckbox = Zahtevaj geslo za prenos te datoteke
addPasswordButton = Dodaj geslo
passwordTryAgain = Napačno geslo. Poskusite znova.
// This label is followed by the password needed to download a file
passwordResult = Geslo: { $password }
reportIPInfringement = Prijavite kršitev naslova IP

View File

@@ -25,6 +25,17 @@ uploadingFileNotification = Обавести ме када се отпремањ
uploadSuccessConfirmHeader = Спреман за слање
uploadSvgAlt = Отпреми
uploadSuccessTimingHeader = Веза ка вашој датотеци ће истећи након једног преузимања или након 24 сата.
expireInfo = Веза ка вашој датотеци ће истећи након { $downloadCount } или { $timespan }.
downloadCount = { $num ->
[one] преузимања
[few] преузимања
*[other] преузимања
}
timespanHours = { $num ->
[one] сата
[few] сата
*[other] сати
}
copyUrlFormLabelWithName = Ископирајте и поделите везу да бисте послали вашу датотеку: { $filename }
copyUrlFormButton = Копирај у оставу
copiedUrl = Ископирано!
@@ -34,6 +45,10 @@ sendAnotherFileLink = Пошаљи другу датотеку
downloadAltText = Преузми
downloadFileName = Преузимање датотеке { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Унесите лозинку
unlockInputPlaceholder = Лозинка
unlockButtonLabel = Откључај
downloadFileTitle = Преузми шифровану датотеку
// Firefox Send is a brand name and should not be localized.
downloadMessage = Ваш пријатељ вам је послао датотеку преко услуге Firefox Send која вам омогућава да делите датотеке преко безбедне, приватне и шифроване везе која самостално истиче да ваше ствари не би остале на нету заувек.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +95,9 @@ footerLinkAbout = О Тест Пилоту
footerLinkPrivacy = Приватност
footerLinkTerms = Услови
footerLinkCookies = Колачићи
requirePasswordCheckbox = Захтевај лозинку да би преузео ову датотеку
addPasswordButton = Додај лозинку
passwordTryAgain = Нетачна лозинка. Пробајте поново.
// This label is followed by the password needed to download a file
passwordResult = Лозинка: { $password }
reportIPInfringement = Пријавите IP прекршај

View File

@@ -25,6 +25,11 @@ uploadingFileNotification = Meddela mig när uppladdningen är klar.
uploadSuccessConfirmHeader = Klar för att skicka
uploadSvgAlt = Ladda upp
uploadSuccessTimingHeader = Länken till din fil upphör att gälla efter 1 nedladdning eller om 24 timmar.
expireInfo = Länken till din fil upphör att gälla efter { $downloadCount } eller { $timespan }.
timespanHours = { $num ->
[one] 1 timme
*[other] { $num } timmar
}
copyUrlFormLabelWithName = Kopiera och dela länken för att skicka din fil: { $filename }
copyUrlFormButton = Kopiera till urklipp
copiedUrl = Kopierad!
@@ -34,6 +39,10 @@ sendAnotherFileLink = Skicka en annan fil
downloadAltText = Ladda ner
downloadFileName = Ladda ner { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Ange lösenord
unlockInputPlaceholder = Lösenord
unlockButtonLabel = Lås upp
downloadFileTitle = Hämta krypterad fil
// Firefox Send is a brand name and should not be localized.
downloadMessage = Din vän skickar dig en fil med Firefox Send, en tjänst som låter dig dela filer med en säker, privat och krypterad länk som automatiskt upphör för att säkerställa att dina saker inte förblir på nätet för alltid.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +89,8 @@ footerLinkAbout = Om Test Pilot
footerLinkPrivacy = Sekretess
footerLinkTerms = Villkor
footerLinkCookies = Kakor
requirePasswordCheckbox = Kräver ett lösenord för att ladda ner den här filen
addPasswordButton = Lägg till lösenord
passwordTryAgain = Felaktigt lösenord. Försök igen.
// This label is followed by the password needed to download a file
passwordResult = Lösenord: { $password }

View File

@@ -31,6 +31,9 @@ sendAnotherFileLink = మరో ఫైలును పంపండి
downloadAltText = దిగుమతి
downloadFileName = దిగుమతి { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = సంకేతపదాన్ని తెలపండి
unlockInputPlaceholder = సంకేతపదం
unlockButtonLabel = తాళం తీయి
// Text and title used on the download link/button (indicates an action).
downloadButtonLabel = దిగుమతి
downloadNotification = మీ దిగుమతి పూర్తయ్యింది.
@@ -48,6 +51,7 @@ linkExpiredAlt = లంకె గడువు ముగిసింది
expiredPageHeader = ఈ లంకె గడువు ముగిసింది లేదా ముందు ఎప్పుడూ ఉనికిలో లేదు!
notSupportedHeader = మీ విహారిణికి మద్దతు లేదు.
notSupportedLink = నా విహారిణికి ఎందుకు మద్దతు లేదు?
notSupportedOutdatedDetail = దురదృష్టవశాత్తు Firefox యొక్క ఈ వెర్షన్ Firefox సాంకేతికతను పంపే వెబ్ సాంకేతికతకు మద్దతు ఇవ్వదు. మీరు మీ బ్రౌజర్ని నవీకరించాలి.
updateFirefox = Firefoxను నవీకరించు
downloadFirefoxButtonSub = ఉచిత దిగుమతులు
uploadedFile = దస్త్రం
@@ -68,3 +72,8 @@ footerLinkAbout = టెస్ట్ పైలట్ గురించి
footerLinkPrivacy = గోప్యత
footerLinkTerms = నియమాలు
footerLinkCookies = కుకీలు
requirePasswordCheckbox = ఈ ఫైల్ను దింపుకోటానికి సంకేతపదం అవసరం
addPasswordButton = సంకేతపదం జోడించండి
passwordTryAgain = సరికాని సంకేతపదం. మళ్ళీ ప్రయత్నించండి.
// This label is followed by the password needed to download a file
passwordResult = సంకేతపదం: { $password }

View File

@@ -0,0 +1,99 @@
// Firefox Send is a brand name and should not be localized.
title = Firefox Ipadala
siteSubtitle = eksperimento sa web
siteFeedback = Feedback
uploadPageHeader = Pribadong, Naka-encrypt na Pagbabahagi ng File
uploadPageExplainer = Magpadala ng mga file sa pamamagitan ng isang ligtas, pribado, at naka-encrypt na link na awtomatikong mawawalan ng bisa upang matiyak na ang iyong mga bagay-bagay ay hindi mananatiling online magpakailanman.
uploadPageLearnMore = Matuto ng higit pa
uploadPageDropMessage = I-drop ang iyong file dito upang simulan ang pag-upload
uploadPageSizeMessage = Para sa pinaka maaasahang operasyon, pinakamahusay na panatilihin ang iyong file sa ilalim ng 1GB
uploadPageBrowseButton = Pumili ng isang file sa iyong computer
uploadPageBrowseButton1 = Pumili ng isang file na mai-upload
uploadPageMultipleFilesAlert = Kasalukuyang hindi sinusuportahan ang pag-upload ng maramihang mga file o isang folder.
uploadPageBrowseButtonTitle = I-upload ang file
uploadingPageProgress = Uploading { $filename } ({ $size })
importingFile = Importing…
verifyingFile = Pinatutunayan...
encryptingFile = Encrypting…
decryptingFile = Decrypting…
notifyUploadDone = Natapos na ang iyong pag-upload.
uploadingPageMessage = Sa sandaling mag-upload ang iyong file, makakapagtakda ka ng mga expire na pagpipilian.
uploadingPageCancel = Kanselahin ang pag-upload
uploadCancelNotification = Kinansela ang iyong pag-upload.
uploadingPageLargeFileMessage = Ang file na ito ay malaki at maaaring tumagal ng ilang sandali upang mag-upload. Umupo nang masikip!
uploadingFileNotification = Abisuhan ako kapag nakumpleto na ang pag-upload.
uploadSuccessConfirmHeader = Handa nang Ipadala
uploadSvgAlt = I-upload
uploadSuccessTimingHeader = Mag-e-expire ang link sa iyong file pagkatapos ng 1 pag-download o sa loob ng 24 na oras.
expireInfo = Mag-e-expire ang link sa iyong file pagkatapos ng { $downloadCount } o { $timespan }.
downloadCount = { $num ->
[one] 1 pag-download
*[other] { $num } na mga pag-download
}
timespanHours = { $num ->
*[one] 1 oras
}
copyUrlFormLabelWithName = Kopyahin at ibahagi ang link upang ipadala ang iyong file: { $filename }
copyUrlFormButton = Kopyahin sa clipboard
copiedUrl = Naikopya!
deleteFileButton = Burahin ang file
sendAnotherFileLink = Magpadala ng isang file
// Alternative text used on the download link/button (indicates an action).
downloadAltText = I-download
downloadFileName = I-download { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Ilagay ang Password
unlockInputPlaceholder = Password
unlockButtonLabel = I-unlock
downloadFileTitle = I-download ang Na-encrypt na File
// Firefox Send is a brand name and should not be localized.
downloadMessage = Ang iyong kaibigan ay nagpapadala sa iyo ng isang file na may Firefox Send, isang serbisyo na nagbibigay-daan sa iyo upang magbahagi ng mga file sa isang ligtas, pribado, at naka-encrypt na link na awtomatikong mawawalan ng bisa upang matiyak na ang iyong mga bagay-bagay ay hindi mananatiling online magpakailanman.
// Text and title used on the download link/button (indicates an action).
downloadButtonLabel = I-download
downloadNotification = Nakumpleto na ang iyong pag-download.
downloadFinish = Kumpleto ang Download
// This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } ng { $totalSize })
// Firefox Send is a brand name and should not be localized.
sendYourFilesLink = Subukan ang Firefox Ipadala
downloadingPageProgress = Downloading { $filename } ({ $size })
downloadingPageMessage = Paki-iwan ang tab na ito habang binuksan namin ang iyong file at i-decrypt ito.
errorAltText = Mag-upload ng error
errorPageHeader = May nagkamali!
errorPageMessage = Nagkaroon ng error sa pag-upload ng file.
errorPageLink = Magpadala ng isang file
fileTooBig = Ang file na iyon ay masyadong malaki upang mag-upload. Dapat itong mas mababa sa { $size }.
linkExpiredAlt = Nag-expire na ang link
expiredPageHeader = Nag-expire na ang link na ito o hindi kailanman umiiral sa unang lugar!
notSupportedHeader = Ang iyong browser ay hindi suportado.
// Firefox Send is a brand name and should not be localized.
notSupportedDetail = Sa kasamaang palad hindi sinusuportahan ng browser na ito ang teknolohiya sa web na nagpapagana ng Firefox Send. Kailangan mong subukan ang ibang browser. Inirerekomenda namin ang Firefox!
notSupportedLink = Bakit hindi suportado ang aking browser?
notSupportedOutdatedDetail = Sa kasamaang palad ang bersyon na ito ng Firefox ay hindi sumusuporta sa teknolohiya ng web na nagpapagana ng Firefox Send. Kailangan mong i-update ang iyong browser.
updateFirefox = I-update ang Firefox
downloadFirefoxButtonSub = Libreng Download
uploadedFile = File
copyFileList = Kopyahin ang URL
// expiryFileList is used as a column header
expiryFileList = Magtatapos Sa
deleteFileList = I-delete
nevermindButton = Hindi bale
legalHeader = Mga Tuntunin at Pagkapribado
legalNoticeTestPilot = Ang Firefox Ipadala ay kasalukuyang eksperimentong Test Pilot, at napapailalim sa <a>Mga Tuntunin ng Serbisyo</a> at <a> Paunawa sa Privacy</a>. Maaari kang matuto nang higit pa tungkol sa eksperimentong ito at ang koleksyon ng data nito <a>dito</a>.
legalNoticeMozilla = Ang paggamit ng website ng Ipadala ang Firefox ay napapailalim din sa <a>Mga Patakaran sa Privacy ng Website</a> ng Mozilla at <a>Mga Tuntunin ng Paggamit ng Website</a>.
deletePopupText = Tanggalin ang file na ito?
deletePopupYes = Oo
deletePopupCancel = Kanselahin
deleteButtonHover = I-delete
copyUrlHover = Kopyahin ang URL
footerLinkLegal = Legal
// Test Pilot is a proper name and should not be localized.
footerLinkAbout = Tungkol sa Test Pilot
footerLinkPrivacy = Privacy
footerLinkTerms = Mga term
footerLinkCookies = Mga cookie
requirePasswordCheckbox = Mangailangan ng isang password upang i-download ang file na ito
addPasswordButton = Magdagdag ng password
passwordTryAgain = Maling password. Subukan muli.
// This label is followed by the password needed to download a file
passwordResult = Password: { $password }

View File

@@ -25,6 +25,11 @@ uploadingFileNotification = Yükleme bitince bana haber ver.
uploadSuccessConfirmHeader = Göndermeye hazır
uploadSvgAlt = Yükle
uploadSuccessTimingHeader = Dosyanız 1 kez indirildikten veya 24 saat geçtikten sonra linkiniz geçersiz olacaktır.
expireInfo = Dosyanızın bağlantısı { $downloadCount } sonra veya { $timespan } zaman aşımına uğrayacaktır.
downloadCount = { $num } indirme
timespanHours = { $num ->
*[one] { $num } saat
}
copyUrlFormLabelWithName = { $filename } dosyanızı başkasına göndermek için aşağıdaki linki kopyalayın.
copyUrlFormButton = Panoya kopyala
copiedUrl = Kopyalandı!
@@ -34,6 +39,10 @@ sendAnotherFileLink = Başka bir dosya daha gönder
downloadAltText = İndir
downloadFileName = { $filename } dosyasını indir
downloadFileSize = ({ $size })
unlockInputLabel = Parolayı yazın
unlockInputPlaceholder = Parola
unlockButtonLabel = Kilidi aç
downloadFileTitle = Şifrelenmiş dosyayı indir
// Firefox Send is a brand name and should not be localized.
downloadMessage = Arkadaşınız size Firefox Send ile bir dosya gönderdi. Firefox Send; dosyalarınızı güvenli, size özel, şifrelenmiş ve otomatik olarak silinen bir bağlantıyla paylaşmayı sağlar. Böylece özel dosyalarınız sonsuza dek internette kalmaz.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +89,9 @@ footerLinkAbout = Test Pilotu hakkında
footerLinkPrivacy = Gizlilik
footerLinkTerms = Şartlar
footerLinkCookies = Çerezler
requirePasswordCheckbox = Bu dosyayı indirmek için parola iste
addPasswordButton = Parola ekle
passwordTryAgain = Yanlış parola. Yeniden deneyin.
// This label is followed by the password needed to download a file
passwordResult = Parola: { $password }
reportIPInfringement = Telif hakkı ihlali bildir

View File

@@ -34,6 +34,10 @@ sendAnotherFileLink = Надіслати інший файл
downloadAltText = Завантаживи
downloadFileName = Завантажити { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = Введіть пароль
unlockInputPlaceholder = Пароль
unlockButtonLabel = Розблокувати
downloadFileTitle = Завантажити зашифрований файл
// Firefox Send is a brand name and should not be localized.
downloadMessage = Ваш друг надіслав файл за допомогою Firefox Send, який дозволяє ділитися файлами, використовуючи безпечні, приватні та зашифровані посилання, термін дії яких автоматично закінчується, щоб ваші файли не лишилися в Інтернеті назавжди.
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +84,8 @@ footerLinkAbout = Про Test Pilot
footerLinkPrivacy = Приватність
footerLinkTerms = Умови
footerLinkCookies = Куки
requirePasswordCheckbox = Вимагати пароль для завантаження цього файлу
addPasswordButton = Додати пароль
passwordTryAgain = Невірний пароль. Спробуйте знову.
// This label is followed by the password needed to download a file
passwordResult = Пароль: { $password }

View File

@@ -25,6 +25,13 @@ uploadingFileNotification = 上传完成后通知我。
uploadSuccessConfirmHeader = 准备好发送
uploadSvgAlt = 上传
uploadSuccessTimingHeader = 您的文件的链接将在首次下载或 24 小时后过期。
expireInfo = 指向该文件的链接将在 { $downloadCount } 或 { $timespan } 后过期。
downloadCount = { $num ->
*[other] { $num } 次下载
}
timespanHours = { $num ->
*[other] { $num } 小时
}
copyUrlFormLabelWithName = 复制并分享链接以发送您的文件:{ $filename }
copyUrlFormButton = 复制到剪贴板
copiedUrl = 已复制!
@@ -34,6 +41,10 @@ sendAnotherFileLink = 发送其他文件
downloadAltText = 下载
downloadFileName = 下载 { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = 请输入密码
unlockInputPlaceholder = 密码
unlockButtonLabel = 解锁
downloadFileTitle = 下载加密的文件
// Firefox Send is a brand name and should not be localized.
downloadMessage = 您的朋友使用 Firefox Send 向您发送一个文件。该服务允许用户以安全、私密、受加密的链接分享一个文件,链接到期后文件将从网上彻底抹除。
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +91,9 @@ footerLinkAbout = 关于 Test Pilot
footerLinkPrivacy = 隐私
footerLinkTerms = 条款
footerLinkCookies = Cookie
requirePasswordCheckbox = 持有密码才能下载此文件
addPasswordButton = 添加密码
passwordTryAgain = 密码不正确。请重试。
// This label is followed by the password needed to download a file
passwordResult = 密码:{ $password }
reportIPInfringement = 举报知识产权侵权

View File

@@ -25,6 +25,13 @@ uploadingFileNotification = 上傳完成時通知我。
uploadSuccessConfirmHeader = 準備好傳送
uploadSvgAlt = 上傳
uploadSuccessTimingHeader = 您的檔案鏈結將會在首次下載,或 24 小時後失效。
expireInfo = 檔案鏈結將在 { $downloadCount }或 { $timespan }後失效。
downloadCount = { $num ->
*[other] { $num } 次下載
}
timespanHours = { $num ->
*[other] { $num } 小時
}
copyUrlFormLabelWithName = 複製並分享鏈結來傳送您的檔案: { $filename }
copyUrlFormButton = 複製到剪貼簿
copiedUrl = 已複製!
@@ -34,6 +41,10 @@ sendAnotherFileLink = 傳送另一個檔案
downloadAltText = 下載
downloadFileName = 下載 { $filename }
downloadFileSize = { $size }
unlockInputLabel = 輸入密碼
unlockInputPlaceholder = 密碼
unlockButtonLabel = 解鎖
downloadFileTitle = 下載加密過的檔案
// Firefox Send is a brand name and should not be localized.
downloadMessage = 您的朋友正透過 Firefox Send 傳送檔案給您。這是一個可讓您透過安全、隱密、並且會將鏈結加密過,自動失效以確保檔案不會在網路上無限停留的檔案分享服務。
// Text and title used on the download link/button (indicates an action).
@@ -80,3 +91,9 @@ footerLinkAbout = 關於 Test Pilot
footerLinkPrivacy = 隱私權
footerLinkTerms = 使用條款
footerLinkCookies = Cookie
requirePasswordCheckbox = 需要密碼才能下載此檔案
addPasswordButton = 新增密碼
passwordTryAgain = 密碼不正確,請再試一次。
// This label is followed by the password needed to download a file
passwordResult = 密碼: { $password }
reportIPInfringement = 回報智慧財產權濫用情況

View File

@@ -4,11 +4,9 @@ const fs = require('fs');
const path = require('path');
function allLangs() {
const langs = fs.readdirSync(
return fs.readdirSync(
path.join(__dirname, '..', 'dist', 'public', 'locales')
);
langs.unshift('en-US'); // default first, TODO change for fluent-langneg
return langs;
}
if (config.l10n_dev) {

View File

@@ -8,7 +8,7 @@ module.exports = function(state, body = '') {
: '';
return html`
<!DOCTYPE html>
<html>
<html lang="${state.locale}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8" />
@@ -31,9 +31,39 @@ module.exports = function(state, body = '') {
<title>${state.title}</title>
<link rel="stylesheet" type="text/css" href="${assets.get('main.css')}" />
<link rel="icon" type="image/png" href="${assets.get(
'favicon-32x32.png'
)}" sizes="32x32" />
<!-- generic favicons -->
<link rel="icon" href="${assets.get('favicon-32.png')}" sizes="32x32">
<link rel="icon" href="${assets.get('favicon-96.png')}" sizes="96x96">
<link rel="icon" href="${assets.get('favicon-128.png')}" sizes="128x128">
<link rel="icon" href="${assets.get('favicon-228.png')}" sizes="228x228">
<!-- Android -->
<link rel="shortcut icon" href="${assets.get(
'favicon-196.png'
)}" sizes="196x196">
<!-- iOS -->
<link rel="apple-touch-icon" href="${assets.get(
'favicon-120.png'
)}" sizes="120x120">
<link rel="apple-touch-icon" href="${assets.get(
'favicon-152.png'
)}" sizes="152x152">
<link rel="apple-touch-icon" href="${assets.get(
'favicon-180.png'
)}" sizes="180x180">
<!-- Windows 8 IE 10-->
<meta name="msapplication-TileColor" content="#FFFFFF">
<meta name="msapplication-TileImage" content="${assets.get(
'favicon-144.png'
)}">
<!— Windows 8.1 + IE11 and above —>
<meta name="msapplication-config" content="/browserconfig.xml"/>
${firaTag}
<script defer src="/jsconfig.js"></script>
<script defer src="${assets.get('runtime.js')}"></script>
@@ -41,58 +71,7 @@ module.exports = function(state, body = '') {
<script defer src="${locales.get(state.locale)}"></script>
<script defer src="${assets.get('app.js')}"></script>
</head>
<body>
<header class="header">
<div class="send-logo">
<a href="/">
<img src="${assets.get(
'send_logo.svg'
)}" alt="Send"/><h1 class="site-title">Send</h1>
</a>
<div class="site-subtitle">
<a href="https://testpilot.firefox.com">Firefox Test Pilot</a>
<div>${state.translate('siteSubtitle')}</div>
</div>
</div>
<a href="https://qsurvey.mozilla.com/s3/txp-firefox-send" rel="noreferrer noopener" class="feedback" target="_blank">${state.translate(
'siteFeedback'
)}</a>
</header>
<div class="all">
<noscript>
<h2>Firefox Send requires JavaScript</h2>
<p><a href="https://github.com/mozilla/send/blob/master/docs/faq.md#why-does-firefox-send-require-javascript">Why does Firefox Send require JavaScript?</a></p>
<p>Please enable JavaScript and try again.</p>
</noscript>
${body}
</div>
<div class="footer">
<div class="legal-links">
<a href="https://www.mozilla.org" role="presentation"><img class="mozilla-logo" src="${assets.get(
'mozilla-logo.svg'
)}" alt="mozilla"/></a>
<a href="https://www.mozilla.org/about/legal">${state.translate(
'footerLinkLegal'
)}</a>
<a href="https://testpilot.firefox.com/about">${state.translate(
'footerLinkAbout'
)}</a>
<a href="/legal">${state.translate('footerLinkPrivacy')}</a>
<a href="/legal">${state.translate('footerLinkTerms')}</a>
<a href="https://www.mozilla.org/privacy/websites/#cookies">${state.translate(
'footerLinkCookies'
)}</a>
</div>
<div class="social-links">
<a href="https://github.com/mozilla/send" role="presentation"><img class="github" src="${assets.get(
'github-icon.svg'
)}" alt="github"/></a>
<a href="https://twitter.com/FxTestPilot" role="presentation"><img class="twitter" src="${assets.get(
'twitter-icon.svg'
)}" alt="twitter"/></a>
</div>
</div>
</body>
${body}
</html>
`;
};

View File

@@ -11,16 +11,17 @@ if (config.sentry_dsn) {
const app = express();
routes(app);
app.use(
express.static(path.resolve(__dirname, '../dist/'), {
setHeaders: function(res) {
res.set('Cache-Control', 'public, max-age=31536000, immutable');
res.removeHeader('Pragma');
}
})
);
routes(app);
app.use(pages.notfound);
app.listen(config.listen_port);

Some files were not shown because too many files have changed in this diff Show More