Compare commits

..

621 Commits

Author SHA1 Message Date
Victor Ibragimov
11319080a8 Pontoon: Update Russian (ru) localization of Firefox Send
Co-authored-by: Victor Ibragimov <victor.ibragimov@gmail.com>
2020-09-15 12:24:40 +00:00
Quentí
0aefdc18da Pontoon: Update Occitan (oc) localization of Firefox Send
Co-authored-by: Quentí <quentinantonin@free.fr>
2020-09-14 19:43:23 +00:00
Quentí
2be2b6f410 Pontoon: Update Occitan (oc) localization of Firefox Send
Co-authored-by: Quentí <quentinantonin@free.fr>
2020-09-14 19:35:10 +00:00
Quentí
d4c42c8ab1 Pontoon: Update Occitan (oc) localization of Firefox Send
Co-authored-by: Quentí <quentinantonin@free.fr>
2020-09-14 18:34:28 +00:00
వీవెన్
b9a329fa34 Pontoon: Update Telugu (te) localization of Firefox Send
Co-authored-by: వీవెన్ <veeven@gmail.com>
2020-09-10 07:47:28 +00:00
Jim Spentzos
f84a5f1b18 Pontoon: Update Greek (el) localization of Firefox Send
Co-authored-by: Jim Spentzos <jimspentzos2000@gmail.com>
Co-authored-by: George kitsoukakis <norhorn@gmail.com>
2020-09-07 13:25:32 +00:00
Lavon Śpirydonaŭ
9f64e08b93 Pontoon: Update Belarusian (be) localization of Firefox Send
Co-authored-by: Mikalai Udodau <crom-a@tut.by>
Co-authored-by: Lavon Śpirydonaŭ <lavon@outlook.de>
2020-09-06 18:34:22 +00:00
robbp
48a11cd33b Pontoon: Update Romanian (ro) localization of Firefox Send
Co-authored-by: robbp <robbpaun@gmail.com>
2020-08-26 05:37:49 +00:00
Bald3mar
32b9fb8aa6 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Co-authored-by: Bald3mar <baldemarls@gmail.com>
2020-08-26 03:08:28 +00:00
Gwenn
f0bbf822c1 Pontoon: Update Breton (br) localization of Firefox Send
Co-authored-by: Gwenn <tornoz@laposte.net>
2020-08-22 21:25:51 +00:00
Gwenn
3abaa58a1b Pontoon: Update Breton (br) localization of Firefox Send
Co-authored-by: Gwenn <tornoz@laposte.net>
2020-08-22 17:14:29 +00:00
robbp
b0ad17d3b7 Pontoon: Update Romanian (ro) localization of Firefox Send
Co-authored-by: robbp <robbpaun@gmail.com>
2020-08-20 15:15:37 +00:00
Besnik Bleta
4597ecf4e1 Pontoon: Update Albanian (sq) localization of Firefox Send
Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
2020-08-17 11:29:04 +00:00
Besnik Bleta
571b6f4003 Pontoon: Update Albanian (sq) localization of Firefox Send
Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
2020-08-17 11:14:06 +00:00
Jim Spentzos
0152a440b4 Pontoon: Update Greek (el) localization of Firefox Send
Co-authored-by: Jim Spentzos <jimspentzos2000@gmail.com>
2020-08-15 12:34:07 +00:00
George kitsoukakis
0886352a09 Pontoon: Update Greek (el) localization of Firefox Send
Co-authored-by: Jim Spentzos <jimspentzos2000@gmail.com>
Co-authored-by: George kitsoukakis <norhorn@gmail.com>
2020-08-15 12:04:58 +00:00
Bald3mar
98444d68d3 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Co-authored-by: Bald3mar <baldemarls@gmail.com>
2020-08-14 03:06:31 +00:00
Bald3mar
d38ea6a3fa Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Co-authored-by: Bald3mar <baldemarls@gmail.com>
2020-08-14 02:55:06 +00:00
Bald3mar
e75478af8d Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Co-authored-by: Bald3mar <baldemarls@gmail.com>
2020-08-14 01:14:23 +00:00
Bald3mar
d8e117e61a Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Co-authored-by: Bald3mar <baldemarls@gmail.com>
2020-08-14 01:07:46 +00:00
Mark Heijl
15c9593e18 Pontoon: Update Dutch (nl) localization of Firefox Send
Co-authored-by: Mark Heijl <markh@babelzilla.org>
2020-08-13 06:55:41 +00:00
వీవెన్
df0644a9da Pontoon: Update Telugu (te) localization of Firefox Send
Co-authored-by: వీవెన్ <veeven@gmail.com>
2020-08-12 12:10:52 +00:00
Abdulrasheed Idris
b22b8f089d Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: Abdulrasheed Idris <Abdulrash6211@gmail.com>
Co-authored-by: biobell2000 <biobell2000@gmail.com>
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-08-10 16:16:42 +00:00
Adaobi
032fddff64 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: Adaobi <ada_okeke60@ymail.com>
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-08-10 16:07:21 +00:00
Juan Pablo
46bc3d4713 Pontoon: Update Aragonese (an) localization of Firefox Send
Co-authored-by: Juan Pablo <juanpabl@gmail.com>
2020-08-08 21:54:45 +00:00
Juan Pablo
d0844ae811 Pontoon: Update Aragonese (an) localization of Firefox Send
Co-authored-by: Juan Pablo <juanpabl@gmail.com>
2020-08-08 21:44:57 +00:00
Juan Pablo
740ab457de Pontoon: Update Aragonese (an) localization of Firefox Send
Co-authored-by: Juan Pablo <juanpabl@gmail.com>
2020-08-08 21:35:20 +00:00
Lan Glad
41865f9fc2 Pontoon: Update Slovenian (sl) localization of Firefox Send
Co-authored-by: Lan Glad <upwinxp@gmail.com>
2020-08-05 19:36:08 +00:00
Lan Glad
915d6c2abd Pontoon: Update Slovenian (sl) localization of Firefox Send
Co-authored-by: Lan Glad <upwinxp@gmail.com>
2020-08-05 18:54:21 +00:00
Lan Glad
fc07069900 Pontoon: Update Slovenian (sl) localization of Firefox Send
Co-authored-by: Lan Glad <upwinxp@gmail.com>
2020-08-05 18:45:36 +00:00
Isidora Jukić
98819744af Pontoon: Update Serbian (sr) localization of Firefox Send
Co-authored-by: Isidora Jukić <barad.dur@yahoo.com>
2020-08-04 18:59:47 +00:00
Isidora Jukić
c6ddbe1b66 Pontoon: Update Serbian (sr) localization of Firefox Send
Co-authored-by: Isidora Jukić <barad.dur@yahoo.com>
2020-08-04 18:47:27 +00:00
Danny Coates
3c4f502eac add flex-none to radio buttons on report page. fixes #1509 2020-08-03 09:02:41 -07:00
Danny Coates
320b4cc9f1 remove signin modal from privacy page. fixes #1508 2020-08-03 08:56:10 -07:00
Jim Spentzos
e20798e0aa Pontoon: Update Greek (el) localization of Firefox Send
Co-authored-by: Jim Spentzos <jimspentzos2000@gmail.com>
2020-08-03 13:59:48 +00:00
Kim YoungCheon
d23eb376f8 Pontoon: Update Korean (ko) localization of Firefox Send
Co-authored-by: Kim YoungCheon <circcc@gmail.com>
2020-08-03 01:07:17 +00:00
Alexander Slovesnik
7654210dbb Pontoon: Update Russian (ru) localization of Firefox Send
Co-authored-by: TrickyFoxy <roman.deev06@gmail.com>
Co-authored-by: Alexander Slovesnik <unghost@mozilla-russia.org>
2020-08-01 11:10:56 +00:00
Aman Alam
decc44620b Pontoon: Update Punjabi (pa-IN) localization of Firefox Send
Co-authored-by: Aman Alam <amanpreet.alam@gmail.com>
2020-08-01 06:52:55 +00:00
Danny Coates
246e2c8db0 set downloadMetadata.status to 404 on unfound downloads. fixes #1501 2020-07-31 09:36:03 -07:00
Danny Coates
fbc4107262 fixed dark-theme password input style. fixes #1504 2020-07-31 08:57:01 -07:00
Danny Coates
dc912678fe fixed post-report text color. fixes #1500 2020-07-31 08:57:00 -07:00
Danny Coates
1ec2b995b0 restrict "share" to mobile, fixes #1505 2020-07-31 08:57:00 -07:00
Danny Coates
fc8673b87a fix main section height. fixes #1499 2020-07-31 08:57:00 -07:00
Melo46
27bc7de7d0 Pontoon: Update Interlingua (ia) localization of Firefox Send
Co-authored-by: Melo46 <melo@carmu.com>
2020-07-31 15:54:01 +00:00
Melo46
0abcd8ac3b Pontoon: Update Interlingua (ia) localization of Firefox Send
Co-authored-by: Melo46 <melo@carmu.com>
2020-07-31 15:46:39 +00:00
Melo46
604a17a19d Pontoon: Update Interlingua (ia) localization of Firefox Send
Co-authored-by: Melo46 <melo@carmu.com>
2020-07-31 15:37:05 +00:00
Itiel
97efdc572a Pontoon: Update Hebrew (he) localization of Firefox Send
Co-authored-by: Itiel <itiel_yn8@walla.com>
Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
2020-07-30 21:56:24 +00:00
Danny Coates
d023a53b74 handle reports for files that have been already been deleted 2020-07-30 10:19:29 -07:00
Abelardo Ayala Rodríguez
06daba9ce0 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-30 16:11:22 +00:00
Danny Coates
deb5c6e5d1 give 404 and error pages the loggedin/ok treatment 2020-07-29 20:56:39 -07:00
Danny Coates
d2cdff5975 updated helmet 2020-07-29 20:29:27 -07:00
Danny Coates
0eb35c048c updated sentry 2020-07-29 20:23:10 -07:00
Danny Coates
028a6c4311 updated @google-cloud/storage 2020-07-29 20:18:30 -07:00
Danny Coates
2356d0fb64 updated babel 2020-07-29 20:04:22 -07:00
Danny Coates
ab63a34938 updated fast-text-encoding 2020-07-29 19:58:46 -07:00
Danny Coates
4f03be590a handle unknown errors in getMetadata 2020-07-29 18:52:55 -07:00
Danny Coates
9bd96a9ec0 exlude puppeteer from docker build 2020-07-29 14:20:39 -07:00
Danny Coates
dd59605f3e support edge 18 maybe 2020-07-29 14:00:48 -07:00
Danny Coates
e2425cd6c9 added downloadConfirm string to noStream page 2020-07-29 12:35:47 -07:00
Danny Coates
81e9d81dab implemented download tokens 2020-07-29 11:02:22 -07:00
Danny Coates
87d46f7ef5 show "OK" button on complete page when logged in instead of "Try Firefox Send" 2020-07-29 09:53:47 -07:00
Danny Coates
2f503c91e4 fixed silly regex bug on startup 2020-07-29 08:49:19 -07:00
Jiri Grönroos
3c27656444 Pontoon: Update Finnish (fi) localization of Firefox Send
Co-authored-by: Jiri Grönroos <jiri.gronroos@iki.fi>
2020-07-29 08:35:27 +00:00
Danny Coates
1cd33282dd 🤷 2020-07-28 15:12:31 -07:00
Gery Escalier
db6358abed Pontoon: Update Spanish (Spain) (es-ES) localization of Firefox Send
Co-authored-by: Gery Escalier <geryescalier@yahoo.com>
Co-authored-by: jlG <jlg.l10n.es@gmail.com>
2020-07-28 20:34:44 +00:00
jlG
a08333d2b4 Pontoon: Update Spanish (Spain) (es-ES) localization of Firefox Send
Co-authored-by: Paulina Rodriguez <pauli.rodriguez.c@gmail.com>
Co-authored-by: Gery Escalier <geryescalier@yahoo.com>
Co-authored-by: jlG <jlg.l10n.es@gmail.com>
2020-07-28 20:23:33 +00:00
వీవెన్
8869e34ca5 Pontoon: Update Telugu (te) localization of Firefox Send
Co-authored-by: వీవెన్ <veeven@gmail.com>
2020-07-28 16:43:21 +00:00
వీవెన్
a05c0e16b7 Pontoon: Update Telugu (te) localization of Firefox Send
Co-authored-by: వీవెన్ <veeven@gmail.com>
2020-07-28 16:35:25 +00:00
Danny Coates
192d45f77c Merge remote-tracking branch 'origin/master' 2020-07-28 09:31:28 -07:00
Danny Coates
8ad4597114 replaced fxa-geodb with load balancer header 2020-07-28 09:31:09 -07:00
Abelardo Ayala Rodríguez
4d96274f79 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-28 16:14:23 +00:00
Abelardo Ayala Rodríguez
437f712a4d Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-28 16:07:38 +00:00
Danny Coates
7d35e8f61f fixed local without fxa 2020-07-28 08:23:59 -07:00
Danny Coates
7130c2e7b0 remove browser dependency on "buffer" 2020-07-27 19:23:03 -07:00
Melo46
72d2d6ef31 Pontoon: Update Interlingua (ia) localization of Firefox Send
Co-authored-by: Melo46 <melo@carmu.com>
2020-07-27 19:55:36 +00:00
Abelardo Ayala Rodríguez
eadf223e8d Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-27 18:38:23 +00:00
Abelardo Ayala Rodríguez
196099b194 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-27 16:35:20 +00:00
goofy
f0a116d0e4 Pontoon: Update French (fr) localization of Firefox Send
Co-authored-by: goofy <goofy@framasoft.org>
2020-07-27 16:35:16 +00:00
Abelardo Ayala Rodríguez
571049e597 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-27 16:25:41 +00:00
Abelardo Ayala Rodríguez
f637f2f3bc Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-27 16:16:34 +00:00
Abelardo Ayala Rodríguez
fe892fdcc1 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-27 16:09:28 +00:00
Abelardo Ayala Rodríguez
f792482478 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-27 15:55:55 +00:00
nandar
5277730e7c Pontoon: Update Sundanese (su) localization of Firefox Send
Co-authored-by: nandar <ia.adnan@gmail.com>
2020-07-27 15:38:13 +00:00
nandar
696b3f7c05 Pontoon: Update Sundanese (su) localization of Firefox Send
Co-authored-by: nandar <ia.adnan@gmail.com>
2020-07-27 15:25:55 +00:00
alamanda
18eebd1ce2 Pontoon: Update Indonesian (id) localization of Firefox Send
Co-authored-by: alamanda <dian.ina@gmail.com>
2020-07-27 15:25:51 +00:00
alamanda
86326e4e6d Pontoon: Update Indonesian (id) localization of Firefox Send
Co-authored-by: alamanda <dian.ina@gmail.com>
2020-07-27 15:15:06 +00:00
Fjoerfoks
4c02a2ecf7 Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
2020-07-27 14:56:45 +00:00
Fjoerfoks
c00e552f80 Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
2020-07-27 14:43:59 +00:00
Fjoerfoks
bcefd4f1cb Pontoon: Update Dutch (nl) localization of Firefox Send
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
2020-07-27 14:34:47 +00:00
Hyeonseok Shin
82a91f4117 Pontoon: Update Korean (ko) localization of Firefox Send
Co-authored-by: Hyeonseok Shin <hyeonseok@gmail.com>
2020-07-27 13:07:02 +00:00
Hyeonseok Shin
6539da2c53 Pontoon: Update Korean (ko) localization of Firefox Send
Co-authored-by: Hyeonseok Shin <hyeonseok@gmail.com>
Co-authored-by: daysofjuly <daysofjuly@gmail.com>
2020-07-27 12:56:32 +00:00
Théo Chevalier
c6152cfcb4 Pontoon: Update French (fr) localization of Firefox Send
Co-authored-by: Théo Chevalier <theo.chevalier11@gmail.com>
2020-07-27 11:45:40 +00:00
Mikeyy
9f8e1051b1 Pontoon: Update Croatian (hr) localization of Firefox Send
Co-authored-by: Mikeyy <mihovil@miho.im>
2020-07-27 06:55:04 +00:00
robbp
a2db84e44e Pontoon: Update Romanian (ro) localization of Firefox Send
Co-authored-by: robbp <robbpaun@gmail.com>
2020-07-27 06:44:57 +00:00
Mikeyy
6f967e984f Pontoon: Update Croatian (hr) localization of Firefox Send
Co-authored-by: Mikeyy <mihovil@miho.im>
2020-07-27 06:44:53 +00:00
ZiriSut
6bc0b780be Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: ZiriSut <rgebbid@gmail.com>
2020-07-27 05:14:24 +00:00
Andreas Pettersson
a88acee8ee Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Co-authored-by: Andreas Pettersson <az@kth.se>
2020-07-26 21:55:31 +00:00
Luna Jernberg
92759a1f08 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Co-authored-by: Luna Jernberg <bittin@cafe8bitar.se>
2020-07-26 19:55:58 +00:00
Luna Jernberg
59c4032176 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Co-authored-by: Luna Jernberg <bittin@cafe8bitar.se>
2020-07-26 19:44:59 +00:00
Quentí
5e9edec93a Pontoon: Update Occitan (oc) localization of Firefox Send
Co-authored-by: Quentí <quentinantonin@free.fr>
2020-07-26 19:14:58 +00:00
Quentí
dfb81409c6 Pontoon: Update Occitan (oc) localization of Firefox Send
Co-authored-by: Quentí <quentinantonin@free.fr>
2020-07-26 19:05:34 +00:00
Selyan Slimane Amiri
5ef569fa71 Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: Selyan Slimane Amiri <selyan.kab@gmail.com>
2020-07-26 17:45:07 +00:00
ZiriSut
bfff47641a Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: ZiriSut <rgebbid@gmail.com>
2020-07-26 17:34:25 +00:00
ZiriSut
7abe664e79 Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: ZiriSut <rgebbid@gmail.com>
2020-07-26 17:25:41 +00:00
ZiriSut
b30ac5605d Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: ZiriSut <rgebbid@gmail.com>
2020-07-26 17:05:37 +00:00
Danny Coates
0f289202bc add copyright link to bare /report page 2020-07-26 10:04:50 -07:00
ZiriSut
7223956f01 Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: ZiriSut <rgebbid@gmail.com>
2020-07-26 16:45:15 +00:00
ZiriSut
e972c9f723 Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: ZiriSut <rgebbid@gmail.com>
2020-07-26 16:34:42 +00:00
Selyan Slimane Amiri
8147d34857 Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: Selyan Slimane Amiri <selyan.kab@gmail.com>
2020-07-26 14:31:06 +00:00
G12r
f1c73fcf8d Pontoon: Update Georgian (ka) localization of Firefox Send
Co-authored-by: G12r <georgianization@outlook.com>
2020-07-26 13:22:15 +00:00
Jordi Serratosa
9fa012c04d Pontoon: Update Catalan (ca) localization of Firefox Send
Co-authored-by: Jordi Serratosa <jordis@softcatala.cat>
2020-07-26 13:22:12 +00:00
G12r
75bd771812 Pontoon: Update Georgian (ka) localization of Firefox Send
Co-authored-by: G12r <georgianization@outlook.com>
2020-07-26 13:14:30 +00:00
Jordi Serratosa
b98761e08a Pontoon: Update Catalan (ca) localization of Firefox Send
Co-authored-by: Jordi Serratosa <jordis@softcatala.cat>
2020-07-26 13:14:26 +00:00
G12r
93638aa291 Pontoon: Update Georgian (ka) localization of Firefox Send
Co-authored-by: G12r <georgianization@outlook.com>
2020-07-26 13:05:03 +00:00
Jordi Serratosa
acb73e1dab Pontoon: Update Catalan (ca) localization of Firefox Send
Co-authored-by: Jordi Serratosa <jordis@softcatala.cat>
2020-07-26 13:04:59 +00:00
Ian Neal
2235414620 Pontoon: Update English (Great Britain) (en-GB) localization of Firefox Send
Co-authored-by: Ian Neal <iann_bugzilla@blueyonder.co.uk>
2020-07-26 12:43:45 +00:00
Enol
1aa0fbb712 Pontoon: Update Asturian (ast) localization of Firefox Send
Co-authored-by: Enol <enolp@softastur.org>
2020-07-26 12:23:37 +00:00
Enol
d66d5d65b2 Pontoon: Update Asturian (ast) localization of Firefox Send
Co-authored-by: Enol <enolp@softastur.org>
2020-07-26 12:13:37 +00:00
Björn I
207a27215c Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Co-authored-by: Björn I. <bjorni.svindseth@yahoo.com>
2020-07-26 11:35:41 +00:00
Björn I
2790b4ca4b Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Co-authored-by: Björn I. <bjorni.svindseth@yahoo.com>
2020-07-26 11:24:22 +00:00
Luna Jernberg
f653838bf4 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Co-authored-by: Luna Jernberg <bittin@cafe8bitar.se>
2020-07-26 11:14:38 +00:00
Paulius
a0770d9b86 Pontoon: Update Lithuanian (lt) localization of Firefox Send
Co-authored-by: Paulius <paulius@mozilla.lt>
2020-07-26 10:23:44 +00:00
Paulius
ec1f32fb65 Pontoon: Update Lithuanian (lt) localization of Firefox Send
Co-authored-by: Paulius <paulius@mozilla.lt>
2020-07-26 10:14:52 +00:00
Björn I
ca0a05e6dc Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Co-authored-by: Björn I. <bjorni.svindseth@yahoo.com>
2020-07-26 09:53:34 +00:00
Melo46
0687ec877c Pontoon: Update Interlingua (ia) localization of Firefox Send
Co-authored-by: Melo46 <melo@carmu.com>
2020-07-26 09:22:47 +00:00
marsf
14209baf55 Pontoon: Update Japanese (ja) localization of Firefox Send
Co-authored-by: marsf <chimantaea_mirabilis@yahoo.co.jp>
2020-07-26 03:23:16 +00:00
marsf
75938febfa Pontoon: Update Japanese (ja) localization of Firefox Send
Co-authored-by: marsf <chimantaea_mirabilis@yahoo.co.jp>
2020-07-26 03:13:21 +00:00
marsf
a9e9902468 Pontoon: Update Japanese (ja) localization of Firefox Send
Co-authored-by: marsf <chimantaea_mirabilis@yahoo.co.jp>
2020-07-26 03:05:59 +00:00
Cristian Silaghi
91cd7684c4 Pontoon: Update Romanian (ro) localization of Firefox Send
Co-authored-by: Cristian Silaghi <cristian.silaghi@mozilla.ro>
2020-07-26 01:14:11 +00:00
Chengings
8bf8c8d95a Pontoon: Update Thai (th) localization of Firefox Send
Co-authored-by: Chengings <chengings@gmail.com>
2020-07-25 23:53:30 +00:00
Chengings
594916a59d Pontoon: Update Thai (th) localization of Firefox Send
Co-authored-by: Chengings <chengings@gmail.com>
2020-07-25 23:44:02 +00:00
José Manuel
6213762d96 Pontoon: Update Triqui (trs) localization of Firefox Send
Co-authored-by: José Manuel <triki2014jm@gmail.com>
2020-07-25 22:44:29 +00:00
Danny Coates
d9cbe058ab added hmac auth to report route 2020-07-25 15:36:29 -07:00
Itiel
2f6119e2f1 Pontoon: Update Hebrew (he) localization of Firefox Send
Co-authored-by: Itiel <itiel_yn8@walla.com>
2020-07-25 22:34:04 +00:00
Itiel
21d1839818 Pontoon: Update Hebrew (he) localization of Firefox Send
Co-authored-by: Itiel <itiel_yn8@walla.com>
2020-07-25 22:25:05 +00:00
Jakob Kappel
95cde415f6 Pontoon: Update Danish (da) localization of Firefox Send
Co-authored-by: Jakob Kappel <jakobkpetersen@gmail.com>
2020-07-25 21:34:08 +00:00
Gabriela
2e6d1abac2 Pontoon: Update Spanish (Argentina) (es-AR) localization of Firefox Send
Co-authored-by: Gabriela <gmontagu@gmail.com>
2020-07-25 20:33:29 +00:00
Gabriela
3a36a718d2 Pontoon: Update Spanish (Argentina) (es-AR) localization of Firefox Send
Co-authored-by: Gabriela <gmontagu@gmail.com>
2020-07-25 20:23:23 +00:00
Joergen
04b1623f15 Pontoon: Update Danish (da) localization of Firefox Send
Co-authored-by: Joergen <joergenr@stofanet.dk>
2020-07-25 20:13:26 +00:00
Joergen
10ffa1d785 Pontoon: Update Danish (da) localization of Firefox Send
Co-authored-by: Joergen <joergenr@stofanet.dk>
Co-authored-by: Jakob Kappel <jakobkpetersen@gmail.com>
2020-07-25 20:06:37 +00:00
Enol
93e98b9c30 Pontoon: Update Asturian (ast) localization of Firefox Send
Co-authored-by: Enol <enolp@softastur.org>
2020-07-25 19:53:30 +00:00
Enol
618e169895 Pontoon: Update Asturian (ast) localization of Firefox Send
Co-authored-by: Enol <enolp@softastur.org>
2020-07-25 19:43:49 +00:00
Enol
91584649c5 Pontoon: Update Asturian (ast) localization of Firefox Send
Co-authored-by: Enol <enolp@softastur.org>
2020-07-25 19:35:05 +00:00
Michael Wolf
31805031ca Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 19:05:07 +00:00
Michael Wolf
58ffcb171d Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 19:05:03 +00:00
Danny Coates
55df061567 refactored storage, style tweaks 2020-07-25 11:25:55 -07:00
Mikalai Udodau
8fb770a4ea Pontoon: Update Belarusian (be) localization of Firefox Send
Co-authored-by: Mikalai Udodau <crom-a@tut.by>
2020-07-25 17:23:58 +00:00
Juraj Cigáň
83cae687c8 Pontoon: Update Slovak (sk) localization of Firefox Send
Co-authored-by: Juraj Cigáň <kusavica@gmail.com>
2020-07-25 15:50:47 +00:00
Francesco Lodolo
75444ead46 Pontoon: Update Italian (it) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-25 15:26:24 +00:00
Cláudio Esperança
df62189346 Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Firefox Send
Co-authored-by: Cláudio Esperança <cesperanc@gmail.com>
2020-07-25 14:52:01 +00:00
Muhend Belkacem
b1e25ed40c Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: Muhend Belkacem <taqbaylitassa@gmail.com>
2020-07-25 14:51:58 +00:00
Michele Rodaro
abef9d9b7f Pontoon: Update Italian (it) localization of Firefox Send
Co-authored-by: Michele Rodaro <michele.rodaro@mozillaitalia.org>
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-25 14:51:54 +00:00
Michael Wolf
748d9b48ff Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 14:06:59 +00:00
Pin-guang Chen
10f60dd2dd Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Co-authored-by: Pin-guang Chen <petercpg@mail.moztw.org>
2020-07-25 14:06:55 +00:00
Michael Wolf
1882ce5708 Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 13:54:58 +00:00
Michael Wolf
20db9ee6fd Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 13:44:13 +00:00
Piotr Drąg
069efcd257 Pontoon: Update Polish (pl) localization of Firefox Send
Co-authored-by: Piotr Drąg <piotrdrag@gmail.com>
2020-07-25 13:06:13 +00:00
Pin-guang Chen
446e993420 Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Co-authored-by: Pin-guang Chen <petercpg@mail.moztw.org>
2020-07-25 13:06:09 +00:00
Selim Şumlu
588c793b98 Pontoon: Update Turkish (tr) localization of Firefox Send
Co-authored-by: Selim Şumlu <selim@sum.lu>
2020-07-25 12:45:25 +00:00
Selim Şumlu
3c6f45464b Pontoon: Update Turkish (tr) localization of Firefox Send
Co-authored-by: Selim Şumlu <selim@sum.lu>
2020-07-25 12:34:16 +00:00
Michael Wolf
76ecbbecc6 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 12:34:12 +00:00
Pin-guang Chen
ab1802a371 Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Co-authored-by: Pin-guang Chen <petercpg@mail.moztw.org>
2020-07-25 12:34:09 +00:00
Selim Şumlu
15f4f386fb Pontoon: Update Turkish (tr) localization of Firefox Send
Co-authored-by: Selim Şumlu <selim@sum.lu>
2020-07-25 12:24:58 +00:00
Michael Wolf
84e9e9f654 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-25 12:24:54 +00:00
Quế Tùng
e1e7887237 Pontoon: Update Vietnamese (vi) localization of Firefox Send
Co-authored-by: Quế Tùng <best.cloney.1301@gmail.com>
2020-07-25 12:14:10 +00:00
Gwenn
0c274139ed Pontoon: Update Breton (br) localization of Firefox Send
Co-authored-by: Gwenn <tornoz@laposte.net>
2020-07-25 11:15:10 +00:00
Rhoslyn Prys
1dbf7c7b2a Pontoon: Update Welsh (cy) localization of Firefox Send
Co-authored-by: Rhoslyn Prys <rprys@posteo.net>
2020-07-25 10:54:37 +00:00
Rhoslyn Prys
0bec884397 Pontoon: Update Welsh (cy) localization of Firefox Send
Co-authored-by: Rhoslyn Prys <rprys@posteo.net>
2020-07-25 10:43:33 +00:00
Rhoslyn Prys
58095ac676 Pontoon: Update Welsh (cy) localization of Firefox Send
Co-authored-by: Rhoslyn Prys <rprys@posteo.net>
2020-07-25 10:36:09 +00:00
Michael Köhler
b680d20bca Pontoon: Update German (de) localization of Firefox Send
Co-authored-by: Michael Köhler <michael.koehler1@gmx.de>
2020-07-25 07:35:29 +00:00
Michal Stanke
5eab9703af Pontoon: Update Czech (cs) localization of Firefox Send
Co-authored-by: Michal Stanke <mstanke@mozilla.cz>
2020-07-25 07:15:19 +00:00
Danny Coates
5c5853c645 minor style tweaks and refresh token fixes 2020-07-24 22:05:35 -07:00
Marcelo Ghelman
4674666807 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-07-25 02:24:29 +00:00
ravmn
5626e128f2 Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Co-authored-by: ravmn <ravmn@ravmn.cl>
2020-07-25 02:14:50 +00:00
Marcelo Ghelman
1fa714924e Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-07-25 02:14:46 +00:00
Marcelo Ghelman
89bfa74bb8 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
Co-authored-by: Mateus Generoso <mtsgeneroso@gmail.com>
2020-07-25 02:06:21 +00:00
πάθοςγιατηζωή
12d6c029ff Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Co-authored-by: πάθοςγιατηζωή <eloli@foxmail.com>
2020-07-25 01:54:31 +00:00
πάθοςγιατηζωή
c580282a27 Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Co-authored-by: πάθοςγιατηζωή <eloli@foxmail.com>
2020-07-25 01:43:53 +00:00
Danny Coates
f3a1fde07f added oauth refresh token support 2020-07-24 18:19:33 -07:00
πάθοςγιατηζωή
ce507c557f Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Co-authored-by: πάθοςγιατηζωή <eloli@foxmail.com>
2020-07-25 01:07:30 +00:00
Håvar Henriksen
6c984fa127 Pontoon: Update Norwegian Bokmål (nb-NO) localization of Firefox Send
Co-authored-by: Håvar Henriksen <havar@firefox.no>
2020-07-24 22:54:51 +00:00
Håvar Henriksen
359d5d6bdd Pontoon: Update Norwegian Bokmål (nb-NO) localization of Firefox Send
Co-authored-by: Håvar Henriksen <havar@firefox.no>
2020-07-24 22:43:48 +00:00
Michael Wolf
7698564a4d Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-24 22:22:43 +00:00
Marcelo Ghelman
546b58d4d5 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-07-24 22:22:39 +00:00
Michael Wolf
813a2d2f25 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-24 22:13:11 +00:00
Michael Wolf
f8d61479d2 Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Co-authored-by: Michael Wolf <milupo@sorbzilla.de>
2020-07-24 22:06:29 +00:00
Іhor Hordiichuk
afcc06ad14 Pontoon: Update Ukrainian (uk) localization of Firefox Send
Co-authored-by: Іhor Hordiichuk <igor_ck@outlook.com>
2020-07-24 20:43:31 +00:00
Kohei Yoshino
84b3796710 Pontoon: Update English (Canada) (en-CA) localization of Firefox Send
Co-authored-by: Kohei Yoshino <kohei.yoshino@gmail.com>
2020-07-24 20:13:10 +00:00
Luna Jernberg
8fd0a4cb01 Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Co-authored-by: Luna Jernberg <bittin@cafe8bitar.se>
2020-07-24 19:54:49 +00:00
Balázs Meskó
2a947a031d Pontoon: Update Hungarian (hu) localization of Firefox Send
Co-authored-by: Balázs Meskó <meskobalazs@mailbox.org>
2020-07-24 19:54:45 +00:00
Danny Coates
0a8663aa51 Merge pull request #1496 from dannycoates/dear-nice-things-too
Begin implementing a reporting mechanism
2020-07-24 12:35:28 -07:00
Danny Coates
17057e725d add fxa_required option 2020-07-24 10:40:47 -07:00
Danny Coates
9891d1f0ba Begin implementing a reporting mechanism 2020-07-24 08:32:43 -07:00
Abelardo Ayala Rodríguez
3e9be67641 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-16 18:41:42 +00:00
వీవెన్
402c8351bd Pontoon: Update Telugu (te) localization of Firefox Send
Co-authored-by: వీవెన్ <veeven@gmail.com>
2020-07-15 18:54:42 +00:00
Danny Coates
ccbcb69666 Merge pull request #1434 from MichaelPeter-Shockoe/master
modify connect-src of Content Security Policy to include dynamic wss URL based on configured base URL
2020-07-09 19:37:02 -07:00
Danny Coates
e6ff9e486b Merge pull request #1063 from hbakhtiyor/patch-1
Convert ContentLength of storage to number
2020-07-09 19:34:33 -07:00
Danny Coates
17afd6ad58 Merge pull request #1416 from factorysh/s3_endpoint
Choose your endpoint.
2020-07-09 19:33:21 -07:00
Danny Coates
7dd1fcca9b Merge pull request #1480 from jackyzy823/fxa-csp
Handle Content-Security-Policy for self hosting FxA
2020-07-09 19:31:06 -07:00
Danny Coates
d5319f4fcf Merge pull request #1471 from edibopp/patch-1
Mention updated Node version 12.x in README
2020-07-09 19:20:04 -07:00
Danny Coates
a3d880fc4f Merge pull request #1475 from 2br-2b/patch-1
Fixed a few minor formatting issues
2020-07-09 19:19:22 -07:00
Danny Coates
8a9a823842 Merge pull request #1486 from rlr/fix-vpn-url
Update URL for the VPN
2020-07-09 19:17:52 -07:00
Danny Coates
3195ee7d16 Merge pull request #1465 from minvs1/redis-retry-configs
Allow to set custom retry parameters
2020-07-09 19:17:28 -07:00
Francesco Lodolo
f565954a54 Pontoon: Update Interlingua (ia) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:57:32 +00:00
Francesco Lodolo
4abfd7dd6e Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:57:28 +00:00
Francesco Lodolo
e930275042 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:57:25 +00:00
Francesco Lodolo
960e29f800 Pontoon: Update Asturian (ast) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:57:21 +00:00
Francesco Lodolo
7e637ae453 Pontoon: Update Aragonese (an) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:57:18 +00:00
Pontoon
cca6b470b0 Pontoon: Update Tagalog (tl) localization of Firefox Send 2020-07-09 13:52:21 +00:00
Francesco Lodolo
829d10f77f Pontoon: Update Serbian (sr) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:52:17 +00:00
Francesco Lodolo
b7d7bb885d Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:52:13 +00:00
Francesco Lodolo
31e2e00b24 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:52:10 +00:00
Francesco Lodolo
0ab2ec6a5c Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:52:06 +00:00
Francesco Lodolo
369b0b2614 Pontoon: Update Tagalog (tl) localization of Firefox Send
Co-authored-by: Francesco Lodolo <flod+pontoon@mozilla.com>
2020-07-09 13:45:29 +00:00
Abelardo Ayala Rodríguez
b064152955 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-08 17:50:17 +00:00
Abelardo Ayala Rodríguez
438b36dd28 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-07-08 16:13:57 +00:00
Abelardo Ayala Rodríguez
a429b89322 Pontoon: Update Guarani (gn) localization of Firefox Send
Co-authored-by: Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2020-06-30 16:34:13 +00:00
Marcelo Ghelman
bd0117628f Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-06-27 23:07:05 +00:00
Marcelo Ghelman
c4299d05a1 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-06-27 22:53:15 +00:00
ali.malek.71
e3027d2c59 Pontoon: Update Persian (fa) localization of Firefox Send
Co-authored-by: ali.malek.71 <ali.malek.71@gmail.com>
2020-06-25 14:23:20 +00:00
Ricky Rosario
be055ff7ba Update URL for the VPN 2020-06-24 19:29:30 -04:00
jnunezf96
5a53eb85fb Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-21 05:29:25 +00:00
jnunezf96
c249f26b4a Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-21 05:14:44 +00:00
jnunezf96
b229547057 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-21 05:06:59 +00:00
jnunezf96
334f225f3d Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-21 04:53:56 +00:00
Selyan Slimane Amiri
e8f3379ddb Pontoon: Update Kabyle (kab) localization of Firefox Send
Co-authored-by: Selyan Slimane Amiri <selyan.kab@gmail.com>
2020-06-20 17:13:32 +00:00
zankomhamad
3dd3fa9808 Pontoon: Update Central Kurdish (ckb) localization of Firefox Send
Co-authored-by: Jwtiyar <jwtiyar@gmail.com>
Co-authored-by: zankomhamad <zankomhamad@outlook.com>
2020-06-19 09:14:38 +00:00
Frederick Villaluna
9459e4bca8 Pontoon: Update Tagalog (tl) localization of Firefox Send
Co-authored-by: Frederick Villaluna <fv_comscie@yahoo.com>
2020-06-16 11:53:07 +00:00
jnunezf96
888e99841e Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-16 07:25:18 +00:00
biobell2000
949dcce5d7 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-15 11:25:17 +00:00
biobell2000
0c47991de6 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: Abdulrasheed Idris <Abdulrash6211@gmail.com>
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-15 11:10:30 +00:00
biobell2000
63b96310d3 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-15 10:57:41 +00:00
biobell2000
da37b9d96f Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-15 10:41:46 +00:00
biobell2000
931cfd108d Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-15 10:32:08 +00:00
Garysqo
cc7ea99ca9 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
Co-authored-by: Garysqo <garyspleen@gmail.com>
2020-06-15 06:12:51 +00:00
jnunezf96
996a7e4184 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 06:05:33 +00:00
jnunezf96
e5627698c4 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 05:42:41 +00:00
jnunezf96
1fdccd4dde Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 05:33:38 +00:00
jnunezf96
b8c26aee06 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 04:23:55 +00:00
jnunezf96
b7d65517b3 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 04:05:57 +00:00
jnunezf96
4f5b804b5d Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 03:35:11 +00:00
jnunezf96
a74491af40 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 03:15:25 +00:00
jnunezf96
09955a0231 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 03:07:08 +00:00
jnunezf96
301f6e87f6 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 02:52:39 +00:00
jnunezf96
8c0f1fbe3b Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 02:06:49 +00:00
jnunezf96
b81535c820 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 01:54:38 +00:00
jnunezf96
f5f0a430eb Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 01:44:55 +00:00
jnunezf96
ca55dedad4 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 01:35:53 +00:00
jnunezf96
76a3d6fc03 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 00:54:04 +00:00
jnunezf96
f9b5cadf17 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 00:43:32 +00:00
jnunezf96
458ef649f3 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 00:35:40 +00:00
jnunezf96
de063f75e5 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Co-authored-by: jnunezf96 <jnunezf96@gmail.com>
2020-06-15 00:23:14 +00:00
jackyzy823
e2876b119d add configs to handle content-security-policy correctly for custom fxa urls 2020-06-11 21:57:48 +08:00
CLASSIFIED
25d41073b7 Fixed a few minor formatting issues
Added a few commas, deleted an extra period
2020-06-08 21:47:39 -05:00
ada_okeke60
5fb9e395d5 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
2020-06-09 00:15:04 +00:00
ada_okeke60
c73ddcd464 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
2020-06-09 00:06:19 +00:00
biobell2000
3a98c295e0 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-08 10:44:46 +00:00
biobell2000
899f921da3 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-08 10:33:55 +00:00
biobell2000
97b9d24134 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-08 10:25:09 +00:00
biobell2000
ab9dbecbd6 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-08 10:16:31 +00:00
biobell2000
0cf77d94cb Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-08 10:07:24 +00:00
biobell2000
bfe3a4067d Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-07 17:06:23 +00:00
ada_okeke60
0226483c30 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-06-07 10:15:04 +00:00
Sara Todaro
a6dbb9a58f Pontoon: Update Italian (it) localization of Firefox Send
Co-authored-by: Sara Todaro <sara.todaro@mozillaitalia.org>
2020-06-06 09:33:44 +00:00
Mozilla Pontoon
c9e691bdc2 Pontoon: Update Italian (it) localization of Firefox Send 2020-06-06 07:57:15 +00:00
biobell2000
e88bfb597c Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: biobell2000 <biobell2000@gmail.com>
2020-06-06 06:05:57 +00:00
ada_okeke60
190ded1ba7 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
2020-06-05 17:44:48 +00:00
Ayobamiadebayo375
7b7f1f3223 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: babalolaoreoluwa4 <babalolaoreoluwa4@gmail.com>
Co-authored-by: Ayobamiadebayo375 <Ayobamiadebayo375@gmail.com>
2020-06-05 16:23:29 +00:00
ada_okeke60
1f4473c278 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
Co-authored-by: Ebukaabazie <Ebukaabazie@gmail.com>
Co-authored-by: sugabelly <sugabelly@gmail.com>
2020-06-05 10:35:15 +00:00
ada_okeke60
27e86640be Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
Co-authored-by: sugabelly <sugabelly@gmail.com>
2020-06-05 10:22:46 +00:00
Gisela Solis
74d151d12c Pontoon: Update Pai pai (pai) localization of Firefox Send
Co-authored-by: Gisela Solis <gisela.solis.roman@gmail.com>
2020-06-04 02:23:35 +00:00
Abdulrash6211
a370f01908 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: Abdulrash6211 <Abdulrash6211@gmail.com>
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-06-03 23:53:50 +00:00
Umegbewe
3078e1f90c Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-06-03 23:44:27 +00:00
John Zonunmawi Vankal
d90830b285 Pontoon: Update Mizo (lus) localization of Firefox Send
Co-authored-by: John Zonunmawi Vankal <zonunmawia@gmail.com>
2020-06-03 18:43:33 +00:00
Umegbewe
74288cdba6 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-06-03 12:14:46 +00:00
Ayobamiadebayo375
a37e59cdb3 Pontoon: Update Yoruba (yo) localization of Firefox Send
Co-authored-by: Ayobamiadebayo375 <Ayobamiadebayo375@gmail.com>
2020-06-03 11:11:24 +00:00
ada_okeke60
ee5f63e11c Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
2020-06-03 10:45:14 +00:00
ada_okeke60
b02f2768d3 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: ada_okeke60 <ada_okeke60@ymail.com>
2020-06-03 10:23:56 +00:00
Jwtiyar
da3a7c1e98 Pontoon: Update Central Kurdish (ckb) localization of Firefox Send
Co-authored-by: Jwtiyar <jwtiyar@gmail.com>
2020-06-02 19:35:42 +00:00
Jwtiyar
8180406467 Pontoon: Update Central Kurdish (ckb) localization of Firefox Send
Co-authored-by: Jwtiyar <jwtiyar@gmail.com>
2020-06-02 19:25:53 +00:00
Jwtiyar
be595de148 Pontoon: Update Central Kurdish (ckb) localization of Firefox Send
Co-authored-by: Jwtiyar <jwtiyar@gmail.com>
2020-06-02 19:14:50 +00:00
sugabelly
395b6518ee Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: sugabelly <sugabelly@gmail.com>
2020-06-02 18:37:06 +00:00
sugabelly
49243506cb Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: sugabelly <sugabelly@gmail.com>
2020-06-02 18:23:38 +00:00
sugabelly
69948f4a4a Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: sugabelly <sugabelly@gmail.com>
2020-06-02 18:16:25 +00:00
sugabelly
85aaeb9892 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: sugabelly <sugabelly@gmail.com>
2020-06-02 17:53:02 +00:00
Umegbewe
95098d5828 Pontoon: Update Igbo (ig) localization of Firefox Send
Co-authored-by: Umegbewe <nwebedujunior55@gmail.com>
2020-06-02 17:45:03 +00:00
Victor Davila
eb4aa04f7e Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Victor Davila <victorhdd@gmail.com>
2020-06-01 19:34:06 +00:00
Victor Davila
5afb940718 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Victor Davila <victorhdd@gmail.com>
2020-06-01 18:53:34 +00:00
Gisela Solis
b6e956e086 Pontoon: Update Ixil (ixl) localization of Firefox Send
Co-authored-by: Gisela Solis <gisela.solis.roman@gmail.com>
2020-06-01 00:53:57 +00:00
dskmori
681ca8197c Pontoon: Update Japanese (ja) localization of Firefox Send
Co-authored-by: dskmori <ghoti.fish.dsk@gmail.com>
2020-05-30 12:21:43 +00:00
ali.malek.71
21e312dac3 Pontoon: Update Persian (fa) localization of Firefox Send
Co-authored-by: ali.malek.71 <ali.malek.71@gmail.com>
2020-05-27 04:13:04 +00:00
Eduard Bopp
5a02e32aec Mention updated Node version 12.x in README
Just passing by I noticed that it seems like it was overlooked to update the README in 89469e3c9c
2020-05-15 15:53:56 +02:00
fcortess
dfe3631bcd Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Co-authored-by: fcortess <fcortess@pm.me>
2020-05-12 00:05:24 +00:00
Marcelo Ghelman
b7c53bf8e2 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-05-11 16:04:31 +00:00
Marcelo Ghelman
9bdf9c4416 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Co-authored-by: Marcelo Ghelman <marcelo.ghelman@gmail.com>
2020-05-11 15:51:20 +00:00
Gisela Solis
7116c1c06e Pontoon: Update Ixil (ixl) localization of Firefox Send
Co-authored-by: Gisela Solis <gisela.solis.roman@gmail.com>
2020-05-04 15:13:21 +00:00
Gisela Solis
f210394d84 Pontoon: Update Ixil (ixl) localization of Firefox Send
Co-authored-by: Gisela Solis <gisela.solis.roman@gmail.com>
2020-04-30 15:41:56 +00:00
Gisela Solis
0679a29cdc Pontoon: Update Ixil (ixl) localization of Firefox Send
Co-authored-by: Gisela Solis <gisela.solis.roman@gmail.com>
2020-04-30 15:32:10 +00:00
Danny Coates
7a9a75794e v3.0.22 2020-04-29 21:40:53 -07:00
Danny Coates
89469e3c9c updated node to 12 2020-04-29 17:38:55 -07:00
Danny Coates
01110b4ec1 Merge pull request #1467 from flodolo/locales_20200423
Add new locales to prod (azz, fa, hus, hy-AM)
2020-04-29 16:53:52 -07:00
Milo
b54cd58602 Pontoon: Update Croatian (hr) localization of Firefox Send
Co-authored-by: Milo <mail@milotype.de>
2020-04-26 11:22:26 +00:00
Quentí
6cc00be4b5 Pontoon: Update Occitan (oc) localization of Firefox Send
Co-authored-by: Quentí <quentinantonin@free.fr>
2020-04-25 09:53:06 +00:00
ali.malek.71
b40594f0ee Pontoon: Update Persian (fa) localization of Firefox Send
Co-authored-by: ali.malek.71 <ali.malek.71@gmail.com>
Co-authored-by: abtin <abtin@riseup.net>
2020-04-23 17:12:52 +00:00
Francesco Lodolo [:flod]
01f4ceca23 Add new locales to prod (azz, fa, hus, hy-AM) 2020-04-23 07:33:37 +02:00
minvs1
7aead375d8 Allow to set custom retry parameters 2020-04-21 23:30:39 +03:00
Fjoerfoks
471c9e8559 Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
2020-04-21 12:23:03 +00:00
Manuela Silva
f45960263f Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Firefox Send
Co-authored-by: Manuela Silva <manuelarodsilva@gmail.com>
2020-04-05 21:14:41 +00:00
Danny Coates
0ee9cc69a8 Merge pull request #1455 from mozilla/update-promo-to-vpn
update promo to be for the vpn
2020-03-31 13:12:14 -07:00
johngruen
2a3db78f97 update promo to be for the vpn 2020-03-31 22:03:08 +02:00
Muhend Belkacem
e5f9265979 Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Muhend Belkacem <taqbaylitassa@gmail.com>
2020-03-29 09:53:25 +00:00
bulut
00416b5063 Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- bulut <bulut@tokmak.org>
2020-03-27 21:43:57 +00:00
Mathieu Lecarme
5a70362b79 Fix: AWS.config is a stub. 2020-03-23 15:48:07 +01:00
Mathieu Lecarme
97deb78de6 Use the config object. 2020-03-23 15:48:07 +01:00
Mathieu Lecarme
2d22573588 Choose your endpoint.
See https://github.com/mozilla/send/issues/1239
2020-03-23 15:48:07 +01:00
Enol
deec85be14 Pontoon: Update Asturian (ast) localization of Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2020-03-21 14:23:33 +00:00
abtin
6342203256 Pontoon: Update Persian (fa) localization of Firefox Send
Localization authors:
- ali.malek.71 <ali.malek.71@gmail.com>
- abtin <abtin@riseup.net>
2020-03-15 20:23:35 +00:00
abtin
949fbb68c3 Pontoon: Update Persian (fa) localization of Firefox Send
Localization authors:
- abtin <abtin@riseup.net>
2020-03-15 20:12:56 +00:00
abtin
222c21ddf9 Pontoon: Update Persian (fa) localization of Firefox Send
Localization authors:
- abtin <abtin@riseup.net>
2020-03-15 19:33:08 +00:00
abtin
ae20e55c50 Pontoon: Update Persian (fa) localization of Firefox Send
Localization authors:
- abtin <abtin@riseup.net>
2020-03-15 19:23:23 +00:00
Milo
765da48b0c Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 16:13:48 +00:00
Milo
3769a17300 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 16:04:11 +00:00
Milo
cad853b196 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 15:52:28 +00:00
Milo
804128b7c8 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 15:41:31 +00:00
Milo
e136b9dc63 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 15:22:01 +00:00
Milo
b4ffb8cf01 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 15:04:40 +00:00
Milo
e24c1103b3 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-03-07 14:52:59 +00:00
Bald3mar
07202e684a Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2020-03-06 22:04:23 +00:00
manuel padilla sanchez
ca774258d6 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-03-03 18:33:07 +00:00
manuel padilla sanchez
93d48c5787 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-03-03 18:23:04 +00:00
passionforlife
aa65f20afa Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- passionforlife <eloli@foxmail.com>
2020-02-29 00:52:29 +00:00
Milo
f3caa9841c Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
- Mikeyy <mihovil@miho.im>
2020-02-28 18:41:32 +00:00
Mozilla Pontoon
4c6663948b Pontoon: Update Croatian (hr) localization of Firefox Send 2020-02-26 21:33:38 +00:00
manuel padilla sanchez
c5a4f920c4 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 16:13:10 +00:00
manuel padilla sanchez
c6cbb727da Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 16:03:40 +00:00
manuel padilla sanchez
830337b403 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 15:52:34 +00:00
manuel padilla sanchez
c11f8a059e Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 15:43:28 +00:00
manuel padilla sanchez
6fd1ed18a1 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 15:32:04 +00:00
manuel padilla sanchez
0338382fdf Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 15:22:42 +00:00
manuel padilla sanchez
aac2b8e6f4 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 09:22:11 +00:00
manuel padilla sanchez
40a111a2e9 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 09:12:13 +00:00
manuel padilla sanchez
cbb0b86712 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 09:04:37 +00:00
manuel padilla sanchez
51465a2797 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-22 08:52:05 +00:00
xcffl
fa99c75313 Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- xcffl <xcffl@outlook.com>
2020-02-22 08:23:32 +00:00
manuel padilla sanchez
0b4bd40b32 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 20:06:38 +00:00
manuel padilla sanchez
c5b2dc826b Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 19:53:35 +00:00
manuel padilla sanchez
1f7a58ea41 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 19:43:05 +00:00
manuel padilla sanchez
ca6e2963e3 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 19:33:26 +00:00
manuel padilla sanchez
9f019f100d Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 19:14:53 +00:00
manuel padilla sanchez
5e91a72cd9 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 19:05:52 +00:00
manuel padilla sanchez
01d7383ae0 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 18:53:33 +00:00
manuel padilla sanchez
74234fa03c Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-18 18:43:16 +00:00
manuel padilla sanchez
49b24294b1 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-17 19:22:28 +00:00
manuel padilla sanchez
5feb07a251 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-17 19:12:50 +00:00
manuel padilla sanchez
28b69c4f14 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-17 19:04:24 +00:00
manuel padilla sanchez
19e5fd269e Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-17 18:51:47 +00:00
manuel padilla sanchez
52d708bf3f Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 14:04:34 +00:00
manuel padilla sanchez
bb66a1bfa5 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 13:33:18 +00:00
manuel padilla sanchez
d31b1ebfcd Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 13:23:20 +00:00
manuel padilla sanchez
4385d29aa0 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 13:13:44 +00:00
manuel padilla sanchez
111e1d5ed3 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 13:05:13 +00:00
manuel padilla sanchez
27d48f2ec3 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 11:41:09 +00:00
manuel padilla sanchez
1a6ddf7e75 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 11:33:05 +00:00
manuel padilla sanchez
cd8d01db29 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 11:12:26 +00:00
manuel padilla sanchez
dc8f56bc57 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 11:05:09 +00:00
manuel padilla sanchez
efb04397f7 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 10:52:59 +00:00
manuel padilla sanchez
19b34e8d39 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 10:41:38 +00:00
manuel padilla sanchez
b7c7e0ef27 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 10:33:50 +00:00
manuel padilla sanchez
b02c5ed4a9 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 10:13:55 +00:00
manuel padilla sanchez
59fb485ba6 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 10:05:08 +00:00
manuel padilla sanchez
71b22458ba Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 09:52:38 +00:00
manuel padilla sanchez
ecb9391439 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 09:32:57 +00:00
manuel padilla sanchez
aaf341bd81 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 09:23:44 +00:00
manuel padilla sanchez
35ef24a40f Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-16 07:51:53 +00:00
manuel padilla sanchez
3973f0552c Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-15 14:14:07 +00:00
manuel padilla sanchez
767cc166b1 Pontoon: Update Highland Puebla Nahuatl (azz) localization of Firefox Send
Localization authors:
- manuel padilla sanchez <manuel.padilla@servicios.ccoo.es>
2020-02-15 14:04:04 +00:00
Hrant
f24ad20ffe Pontoon: Update Armenian (hy-AM) localization of Firefox Send
Localization authors:
- Hrant <hrant.mozilla@gmail.com>
2020-02-14 18:04:13 +00:00
Hrant
a1f915806a Pontoon: Update Armenian (hy-AM) localization of Firefox Send
Localization authors:
- Hrant <hrant.mozilla@gmail.com>
2020-02-14 17:51:53 +00:00
Hrant
669212a9b7 Pontoon: Update Armenian (hy-AM) localization of Firefox Send
Localization authors:
- Hrant <hrant.mozilla@gmail.com>
2020-02-14 17:42:24 +00:00
Kim YoungCheon
59f6e51636 Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Kim YoungCheon <circcc@gmail.com>
2020-01-31 23:34:09 +00:00
Kim YoungCheon
2515ba274d Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Kim YoungCheon <circcc@gmail.com>
2020-01-31 23:22:01 +00:00
Kim YoungCheon
6c2fbfe6ff Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Kim YoungCheon <circcc@gmail.com>
2020-01-31 23:13:59 +00:00
Kim YoungCheon
26fdb271dd Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Kim YoungCheon <circcc@gmail.com>
2020-01-31 23:05:53 +00:00
Mikeyy
4504c5cd74 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
- Mikeyy <mihovil@miho.im>
2020-01-29 14:29:19 +00:00
Milo
2746556dfa Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Milo <mail@milotype.de>
2020-01-29 14:12:58 +00:00
Michael Peter
5ff6266a5e modify connect-src of Content Security Policy to include dynamic wss URL based on configured base URL 2020-01-17 17:47:09 -05:00
Quentí
e57fc1c2d8 Pontoon: Update Occitan (oc) localization of Firefox Send
Localization authors:
- Quentí <quentinantonin@free.fr>
2020-01-17 12:12:36 +00:00
Danny Coates
097d3c8377 make geoip lookup optional 2020-01-11 14:06:17 -08:00
Luis Flores Martínez
43c728d5d4 Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2020-01-07 17:12:42 +00:00
Luis Flores Martínez
3dffb8da15 Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2020-01-07 16:52:21 +00:00
Luis Flores Martínez
c49dbd6d6d Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2020-01-07 16:32:17 +00:00
Luis Flores Martínez
356112e8cc Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2020-01-07 16:13:19 +00:00
Luis Flores Martínez
ad0d862d92 Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2020-01-07 03:33:08 +00:00
Luis Flores Martínez
2ca007af1a Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2020-01-07 03:12:30 +00:00
Misael Hernández
0a42c887d2 Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- Misael Hernández <yumatajnga@gmail.com>
2020-01-06 03:32:50 +00:00
Joseph.maza
f54a95c965 Pontoon: Update Tagalog (tl) localization of Firefox Send
Localization authors:
- Joseph.maza <Joseph.maza@Gmail.com>
2020-01-06 02:12:15 +00:00
Danny Coates
eec8da890a Merge pull request #1431 from flodolo/locales_20200102
Add new locales (an, gn, mix)
2020-01-02 17:30:24 -08:00
Francesco Lodolo [:flod]
32a58d85a3 Add new locales (an, gn, mix) 2020-01-02 08:29:52 +01:00
Björn I
1252aaed30 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-12-27 17:33:13 +00:00
Jirka Soukeník
060ff1cae4 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Jirka Soukeník <soucet@centrum.cz>
- Michal Stanke <mstanke@mozilla.cz>
2019-12-25 08:51:41 +00:00
Juan Pablo
1c2955ed9e Pontoon: Update Aragonese (an) localization of Firefox Send
Localization authors:
- Juan Pablo <juanpabl@gmail.com>
2019-12-18 00:37:51 +00:00
Juan Pablo
5e5bce8745 Pontoon: Update Aragonese (an) localization of Firefox Send
Localization authors:
- Juan Pablo <juanpabl@gmail.com>
2019-12-18 00:12:36 +00:00
Juan Pablo
e43ba60792 Pontoon: Update Aragonese (an) localization of Firefox Send
Localization authors:
- Juan Pablo <juanpabl@gmail.com>
2019-12-17 23:51:47 +00:00
Juan Pablo
e94fe58965 Pontoon: Update Aragonese (an) localization of Firefox Send
Localization authors:
- Juan Pablo <juanpabl@gmail.com>
2019-12-17 23:32:52 +00:00
Frederick Villaluna
a21412844a Pontoon: Update Tagalog (tl) localization of Firefox Send
Localization authors:
- Frederick Villaluna <fv_comscie@yahoo.com>
2019-12-16 07:13:30 +00:00
Luis Flores Martínez
666ca8e87b Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2019-12-13 17:13:50 +00:00
Luis Flores Martínez
71ceffd9b4 Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Luis Flores Martínez <lufom90@gmail.com>
2019-12-13 16:52:01 +00:00
Bald3mar
cdbd669af2 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-12-12 22:33:46 +00:00
Bald3mar
027043edb7 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-12-12 22:14:07 +00:00
Bald3mar
e4a1f8e86b Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-12-12 21:51:52 +00:00
Hmxhmx
dfd5eb9b1e Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Hmxhmx <hmxhmx.at.wiki@gmail.com>
2019-12-11 08:33:24 +00:00
Bald3mar
e3ee840b64 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-12-10 23:53:16 +00:00
Danny Coates
b8bd13c704 Merge pull request #1424 from checkr/cjford/optional-git-build-dependency
Allow successful npm build without .git
2019-12-10 09:38:24 -08:00
صفا الفليج
6238299a0a Pontoon: Update Arabic (ar) localization of Firefox Send
Localization authors:
- صفا الفليج <safa1996alfulaij@gmail.com>
2019-12-09 20:32:11 +00:00
Connor Ford
d40ddc3d3b Fix npm build with missing .git 2019-12-09 10:51:51 -07:00
Sav22999
d2746db969 Pontoon: Update Italian (it) localization of Firefox Send
Localization authors:
- Sav22999 <saverio.morelli@outlook.it>
2019-12-08 14:53:17 +00:00
Martijn Dekker
95057ef503 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-12-06 05:54:39 +00:00
Martijn Dekker
aec2ec30d5 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-12-06 00:32:14 +00:00
Martijn Dekker
4d36b3d6e9 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-12-03 23:35:21 +00:00
Julio Gomez
6b89197cfd Pontoon: Update Yucatec Maya (yua) localization of Firefox Send
Localization authors:
- Julio Gomez <jegs87@gmail.com>
2019-12-03 16:52:39 +00:00
Julio Gomez
dd2ebdd2de Pontoon: Update Huastec (hus) localization of Firefox Send
Localization authors:
- Julio Gomez <jegs87@gmail.com>
2019-12-03 16:52:37 +00:00
Bald3mar
c479d326ed Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-11-29 21:31:58 +00:00
Bald3mar
8434d91891 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-11-29 20:33:50 +00:00
Martijn Dekker
f9c761ea99 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-11-25 03:54:20 +00:00
Martijn Dekker
b14f5f16d0 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-11-24 22:54:28 +00:00
Selyan Slimane Amiri
4fbc8e0c89 Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Selyan Slimane Amiri <selyan.kab@gmail.com>
2019-11-22 21:32:21 +00:00
Bald3mar
ad2a1715b5 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-11-18 23:51:36 +00:00
Bald3mar
ac8f826612 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-11-18 23:31:36 +00:00
Martijn Dekker
c1aaa9d6e5 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-11-14 15:34:18 +00:00
Enol
eac95ffff7 Pontoon: Update Asturian (ast) localization of Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2019-11-13 23:13:07 +00:00
Enol
8121761cc8 Pontoon: Update Asturian (ast) localization of Firefox Send
Localization authors:
- Enol <enolp@softastur.org>
2019-11-13 22:52:12 +00:00
Danny Coates
7c720cd7cc Merge pull request #1418 from janschloss/routes-link
Fixes link to routes file
2019-11-13 09:25:55 -08:00
Abelardo Ayala Rodríguez
4c2f809502 Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-13 11:36:00 +00:00
Abelardo Ayala Rodríguez
d42523651c Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-13 10:51:36 +00:00
Martijn Dekker
b9775e0471 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-11-13 09:13:05 +00:00
jnunezf96
d2f37204e0 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-11-12 19:33:02 +00:00
jnunezf96
846dad6662 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-11-12 19:12:47 +00:00
jnunezf96
c966010ed3 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-11-12 18:13:42 +00:00
Jan Schloß
e77fea09bc Fixes link to routes file 2019-11-12 19:09:07 +01:00
jnunezf96
b63291c7d3 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-11-12 17:53:52 +00:00
Danny Coates
2ccc044a27 v3.0.21 2019-11-11 08:48:26 -08:00
Danny Coates
4144850f9d updated deps 2019-11-11 08:44:25 -08:00
Danny Coates
18630aadf9 Merge pull request #1417 from flodolo/prodlocales_20191111
Add new complete locales to production
2019-11-11 08:34:48 -08:00
Francesco Lodolo [:flod]
605fff519e Add new complete locales to production 2019-11-11 09:40:52 +01:00
Frederick Villaluna
0b7ff9551d Pontoon: Update Tagalog (tl) localization of Firefox Send
Localization authors:
- Frederick Villaluna <fv_comscie@yahoo.com>
- Ricky Villar <rvillar313@gmail.com>
2019-11-09 07:12:36 +00:00
Abelardo Ayala Rodríguez
2c9716e01e Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-08 14:33:28 +00:00
Abelardo Ayala Rodríguez
cdde3fe654 Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-08 14:14:11 +00:00
shamanchic2011
3537667187 Pontoon: Update Belarusian (be) localization of Firefox Send
Localization authors:
- shamanchic2011 <shamanchic2011@ya.ru>
- Mikalai Udodau <crom-a@tut.by>
2019-11-07 17:12:28 +00:00
Zhenya Tikhonov
66086c460d Pontoon: Update Belarusian (be) localization of Firefox Send
Localization authors:
- shamanchic2011 <shamanchic2011@ya.ru>
- Mikalai Udodau <crom-a@tut.by>
- Zhenya Tikhonov <masontikhonov@gmail.com>
2019-11-07 16:51:21 +00:00
Zhenya Tikhonov
a203a8de67 Pontoon: Update Belarusian (be) localization of Firefox Send
Localization authors:
- Mikalai Udodau <crom-a@tut.by>
- Zhenya Tikhonov <masontikhonov@gmail.com>
2019-11-07 16:32:04 +00:00
Francesco Lodolo
2bba9c53ed Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Francesco Lodolo <flod+pontoon@mozilla.com>
2019-11-07 15:12:48 +00:00
Abelardo Ayala Rodríguez
37af4d33fc Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-07 13:31:54 +00:00
Abelardo Ayala Rodríguez
107f40c8c9 Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-07 13:12:10 +00:00
Zhenya Tikhonov
cb325022dc Pontoon: Update Belarusian (be) localization of Firefox Send
Localization authors:
- Mikalai Udodau <crom-a@tut.by>
- Zhenya Tikhonov <masontikhonov@gmail.com>
2019-11-06 19:53:20 +00:00
Danny Coates
b62b439218 fixed circleci oops 2019-11-05 21:06:19 -08:00
Danny Coates
47972fe2a1 fixed mysterious npm build problem by updating npm 🤷‍♂️ 2019-11-05 21:01:29 -08:00
Danny Coates
7ad937266f trimmed circleci config 2019-11-05 20:53:59 -08:00
Danny Coates
2f34dffab4 fixed sw initialization error 2019-11-05 20:37:44 -08:00
Danny Coates
4a956c0247 updated deps 2019-11-05 20:19:07 -08:00
Alexander Parada
23ce7a1f84 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Alexander Parada <alessaux@outlook.es>
2019-11-05 15:33:35 +00:00
Alexander Parada
66a8ad2e4f Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Alexander Parada <alessaux@outlook.es>
2019-11-05 13:57:38 +00:00
Abelardo Ayala Rodríguez
e8e2e31b59 Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-05 13:57:35 +00:00
Abelardo Ayala Rodríguez
7259c46d1c Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-05 13:31:45 +00:00
Abelardo Ayala Rodríguez
9d3c3d1924 Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-11-05 13:14:02 +00:00
jnunezf96
a0d6317747 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
- Garysqo <garyspleen@gmail.com>
2019-11-05 04:12:46 +00:00
Julio Gomez
3810e09509 Pontoon: Update Yucatec Maya (yua) localization of Firefox Send
Localization authors:
- Julio Gomez <jegs87@gmail.com>
2019-11-05 02:31:57 +00:00
José Manuel
bb7678e7e4 Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- José Manuel <triki2014jm@gmail.com>
2019-11-05 01:33:00 +00:00
Alexander Parada
3dcf01dd1f Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Alexander Parada <alessaux@outlook.es>
2019-11-05 01:32:57 +00:00
José Manuel
3b8f19b4c9 Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- José Manuel <triki2014jm@gmail.com>
2019-11-05 00:52:28 +00:00
Alexander Parada
ab957c26a0 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Alexander Parada <alessaux@outlook.es>
2019-11-05 00:52:25 +00:00
Alexander Parada
e835c82c27 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Alexander Parada <alessaux@outlook.es>
2019-11-05 00:31:58 +00:00
Alexander Parada
d69a9e8537 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Garysqo <garyspleen@gmail.com>
- Alexander Parada <alessaux@outlook.es>
2019-11-05 00:11:44 +00:00
Netza López
1b286d664b Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-11-04 18:32:25 +00:00
Netza López
f8c8a6c2cd Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-11-04 18:19:43 +00:00
Netza López
b71234fc83 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-11-04 18:01:40 +00:00
Netza López
2eb35733da Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-11-04 03:32:20 +00:00
Netza López
df276d5942 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-11-04 03:11:15 +00:00
Netza López
e1a6fb9569 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-11-04 02:51:56 +00:00
marsf
99b2d636a1 Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- marsf <chimantaea_mirabilis@yahoo.co.jp>
2019-11-03 14:11:21 +00:00
jnunezf96
78be59adac Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-31 20:12:42 +00:00
jnunezf96
720ab6ae3a Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-31 19:52:57 +00:00
elenatambriz
5e0dcc948c Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-31 17:51:49 +00:00
elenatambriz
90400d72b1 Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-31 17:31:40 +00:00
elenatambriz
8f1fd6cbf5 Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-31 17:14:47 +00:00
elenatambriz
fef8788d55 Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-31 16:53:52 +00:00
José Manuel
d2f8156bde Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- José Manuel <triki2014jm@gmail.com>
2019-10-31 15:32:30 +00:00
Garysqo
d4fbd48f1c Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Garysqo <garyspleen@gmail.com>
2019-10-31 14:11:32 +00:00
jnunezf96
a6d3948fbc Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-31 06:31:28 +00:00
jnunezf96
005bbb1792 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-31 06:12:10 +00:00
jnunezf96
186230d211 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-31 05:12:32 +00:00
jnunezf96
ee1e8bc204 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-31 04:12:29 +00:00
jnunezf96
d1366fb764 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-30 23:51:28 +00:00
jnunezf96
d81dba6407 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-30 23:31:57 +00:00
Garysqo
f35ddd8e9a Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Garysqo <garyspleen@gmail.com>
2019-10-30 19:12:24 +00:00
Garysqo
ff798463e8 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
- Garysqo <garyspleen@gmail.com>
2019-10-30 18:52:42 +00:00
Bald3mar
6308c386a3 Pontoon: Update Spanish (Mexico) (es-MX) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-30 18:11:55 +00:00
jnunezf96
5a6c338ab9 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
- Garysqo <garyspleen@gmail.com>
2019-10-30 16:32:20 +00:00
jnunezf96
bc6401e7dd Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-30 16:11:28 +00:00
jnunezf96
0667f22ddd Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-29 23:12:26 +00:00
jnunezf96
594cd339b5 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- jnunezf96 <jnunezf96@gmail.com>
2019-10-29 22:42:38 +00:00
José Manuel
762497b867 Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- José Manuel <triki2014jm@gmail.com>
2019-10-29 22:13:19 +00:00
Garysqo
9199a985d8 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Garysqo <garyspleen@gmail.com>
- Alexander Parada <alessaux@outlook.es>
2019-10-29 22:13:17 +00:00
Bald3mar
624e1234d9 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 22:13:14 +00:00
Netza López
a3d153db66 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 22:13:11 +00:00
elenatambriz
dc25bc5727 Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-29 22:13:08 +00:00
Julio Gomez
6a1670b550 Pontoon: Update Kaqchikel (cak) localization of Firefox Send
Localization authors:
- Julio Gomez <jegs87@gmail.com>
2019-10-29 22:13:05 +00:00
Miguel
8cd3a720fe Pontoon: Update Ixil (ixl) localization of Firefox Send
Localization authors:
- Gerardo <gerardoterraza2013@gmail.com>
- Miguel <mickyforever.dc@gmail.com>
2019-10-29 22:13:02 +00:00
Abelardo Ayala Rodríguez
9aa7da68be Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-10-29 22:12:59 +00:00
José Manuel
063042cd76 Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- José Manuel <triki2014jm@gmail.com>
2019-10-29 21:42:00 +00:00
Alexander Parada
8ce3a5d236 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Garysqo <garyspleen@gmail.com>
- Alexander Parada <alessaux@outlook.es>
2019-10-29 21:41:58 +00:00
Netza López
0c58c84625 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 21:41:55 +00:00
elenatambriz
68ddcf3b56 Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-29 21:41:52 +00:00
Miguel
a0648d7d91 Pontoon: Update Ixil (ixl) localization of Firefox Send
Localization authors:
- Miguel <mickyforever.dc@gmail.com>
2019-10-29 21:41:49 +00:00
Abelardo Ayala Rodríguez
5e674973db Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-10-29 21:41:46 +00:00
Garysqo
4f2b634825 Pontoon: Update Náhuat Pipil (ppl) localization of Firefox Send
Localization authors:
- Garysqo <garyspleen@gmail.com>
- Alexander Parada <alessaux@outlook.es>
2019-10-29 21:33:43 +00:00
Bald3mar
48bbf07392 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 21:33:40 +00:00
Netza López
357f6da3b0 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 21:33:37 +00:00
Miguel
def21041d8 Pontoon: Update Ixil (ixl) localization of Firefox Send
Localization authors:
- Miguel <mickyforever.dc@gmail.com>
2019-10-29 21:33:35 +00:00
Abelardo Ayala Rodríguez
c44728865a Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-10-29 21:33:32 +00:00
Bald3mar
f271140c5f Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 21:13:57 +00:00
Netza López
3593aaf61f Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 21:13:54 +00:00
Abelardo Ayala Rodríguez
8b433a008d Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-10-29 21:13:51 +00:00
Bald3mar
1ab1bf1b00 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 20:43:02 +00:00
Abelardo Ayala Rodríguez
c04d15f806 Pontoon: Update Guarani (gn) localization of Firefox Send
Localization authors:
- Abelardo Ayala Rodríguez <abe_aya@hotmail.com>
2019-10-29 20:42:59 +00:00
Bald3mar
977e8bdc21 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 20:32:12 +00:00
Bald3mar
454d1d03f5 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 19:15:17 +00:00
Netza López
f73ff7fa26 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 19:15:14 +00:00
elenatambriz
98317c94aa Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-29 19:15:12 +00:00
Netza López
aa91d762af Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 18:44:30 +00:00
elenatambriz
5cddd0842b Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-29 18:44:27 +00:00
elenatambriz
4dee3d2283 Pontoon: Update K&#39;iche&#39; (quc) localization of Firefox Send
Localization authors:
- elenatambriz <elenatambriz@hotmail.com>
2019-10-29 18:33:37 +00:00
Netza López
2d20cb3819 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 18:14:20 +00:00
Bald3mar
c28beb3bc1 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-29 16:32:21 +00:00
Netza López
216a7a6ff8 Pontoon: Update Mixteco Yucuhiti (meh) localization of Firefox Send
Localization authors:
- Netza López <l.lopeznetza@gmail.com>
2019-10-29 16:32:19 +00:00
José Manuel
a48d2bad4f Pontoon: Update Triqui (trs) localization of Firefox Send
Localization authors:
- José Manuel <triki2014jm@gmail.com>
2019-10-28 23:12:15 +00:00
Bald3mar
04c60414e1 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-28 22:32:40 +00:00
Bald3mar
92c3f67020 Pontoon: Update Mixtepec Mixtec (mix) localization of Firefox Send
Localization authors:
- Bald3mar <baldemarls@gmail.com>
2019-10-28 22:13:07 +00:00
Martijn Dekker
49e6c064ac Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-10-27 22:32:42 +00:00
Martijn Dekker
8551139a8a Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-10-27 20:13:25 +00:00
Emin Mastizada
96461692ee Pontoon: Update Azerbaijani (az) localization of Firefox Send
Localization authors:
- Emin Mastizada <emin@mastizada.com>
2019-10-23 23:35:20 +00:00
Martijn Dekker
a217ad4be5 Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-10-22 15:12:17 +00:00
Danny Coates
18216ce430 v3.0.20 2019-10-21 11:33:54 -07:00
Danny Coates
1711a2d1d7 added "te" to production languages 2019-10-21 10:36:34 -07:00
Danny Coates
8b2080a2f0 updated deps 2019-10-21 10:24:07 -07:00
Danny Coates
006ee1d2e6 Merge pull request #1408 from drakkein/master
Strip tracking URL params
2019-10-21 10:13:56 -07:00
Danny Coates
0a7c473965 Merge pull request #1405 from mozilla/dark-mode
Dark theme
2019-10-21 10:07:42 -07:00
Hampus
4e124d174c Pontoon: Update Swedish (sv-SE) localization of Firefox Send
Localization authors:
- Hampus <hampus.bengtsson@gmail.com>
2019-10-19 00:33:34 +00:00
Artem Polivanchuk
524b2a5668 Pontoon: Update Ukrainian (uk) localization of Firefox Send
Localization authors:
- Artem Polivanchuk <artem@mozilla.org.ua>
2019-10-17 08:52:12 +00:00
Marcelo Ghelman
844f036a27 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-10-16 14:33:03 +00:00
Marcelo Ghelman
7d6c781ea5 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-10-16 14:12:33 +00:00
Wiktor Furman
ad9577daaf Update package-lock 2019-10-15 15:50:09 +02:00
Wiktor Furman
114068c531 Strip tracking url parameters 2019-10-15 15:29:48 +02:00
Niksend Mizuhara
0daa03e04c Pontoon: Update Chinese (China) (zh-CN) localization of Firefox Send
Localization authors:
- Niksend Mizuhara <i@rhinecho.com>
2019-10-07 01:53:05 +00:00
Danny Coates
63348fd36a updated deps 2019-10-03 23:32:49 -07:00
Danny Coates
c71c246959 Dark theme 2019-10-03 23:10:11 -07:00
Sander Lepik
2b7504e969 Pontoon: Update Estonian (et) localization of Firefox Send
Localization authors:
- Sander Lepik <sander.lepik@eesti.ee>
2019-10-01 05:14:31 +00:00
Selyan Sliman Amiri
b942554c80 Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Selyan Sliman Amiri <selyan.kab@gmail.com>
2019-09-30 09:32:51 +00:00
Juan Sián
1ae227fddd Pontoon: Update Kaqchikel (cak) localization of Firefox Send
Localization authors:
- Juan Sián <ajtzibsyan@yahoo.com>
2019-09-26 23:32:48 +00:00
Jordi Serratosa
a63fe18d15 Pontoon: Update Catalan (ca) localization of Firefox Send
Localization authors:
- Jordi Serratosa <jordis@softcatala.cat>
2019-09-25 09:56:59 +00:00
Danny Coates
ea1ea2aa68 v3.0.19 2019-09-23 09:24:10 -07:00
Danny Coates
90d06d71d3 updated deps 2019-09-23 09:22:22 -07:00
Kim Younggeon
11f2deb7a6 Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Kim Younggeon <mail@kyg.kr>
2019-09-23 03:52:14 +00:00
Danny Coates
0f5edf023a Merge pull request #1400 from mozilla/task/update-engines
task: update engines in package.json and README to clarify that node 10x is expected.
2019-09-19 11:02:42 -07:00
Rachel Tublitz
3be0621647 task: update engines in package.json and README to clarify that node 10.x is expected 2019-09-19 13:37:05 -04:00
Marcelo Ghelman
fc07bfdb85 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-09-15 05:17:20 +00:00
صفا الفليج
581a989304 Pontoon: Update Arabic (ar) localization of Firefox Send
Localization authors:
- صفا الفليج <safa1996alfulaij@gmail.com>
2019-09-11 18:34:38 +00:00
ItielMaN
047d6a85ab Pontoon: Update Hebrew (he) localization of Firefox Send
Localization authors:
- ItielMaN <itiel_yn8@walla.com>
2019-09-08 21:12:53 +00:00
Luiz Felipe F M Costa
90f6a07d4a refactored Dockerfile 2019-09-06 20:04:45 -07:00
Arash Mousavi
8f4a53db64 Pontoon: Update Persian (fa) localization of Firefox Send
Localization authors:
- Arash Mousavi <mousavi.arash@gmail.com>
2019-09-06 21:53:28 +00:00
Danny Coates
c2dd51c638 v3.0.18 2019-09-06 10:40:36 -07:00
Danny Coates
cdd98af86a updated deps 2019-09-06 10:39:42 -07:00
Danny Coates
883f2bc0f9 wait until serviceWorker activate to precache 2019-09-05 19:04:03 -07:00
Danny Coates
94f1eabbc7 v3.0.17 2019-09-05 15:59:42 -07:00
Danny Coates
902bc6628e cache fonts 2019-09-05 15:57:07 -07:00
Danny Coates
460b741f17 clean service worker cache after activate instead of on install 2019-09-05 15:24:26 -07:00
Danny Coates
d5c488196d no-cache harder 2019-09-05 13:33:12 -07:00
Danny Coates
9ad9c9feb2 fixed git hooks 2019-09-05 13:16:32 -07:00
Danny Coates
6576e4a74c added sync-npm-dependencies script and hooks 2019-09-05 08:14:14 -07:00
Danny Coates
950872109e updated deps 2019-09-05 08:11:20 -07:00
Martijn Dekker
87051d27ed Pontoon: Update Interlingua (ia) localization of Firefox Send
Localization authors:
- Martijn Dekker <martijn@inlv.org>
2019-09-03 22:52:26 +00:00
Marcelo Ghelman
3451803b37 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-08-29 10:32:02 +00:00
dskmori
ac15153e8f Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- dskmori <ghoti.fish.dsk@gmail.com>
2019-08-28 13:12:29 +00:00
Danny Coates
924f5dc682 disable streaming download on mobile firefox 2019-08-26 10:49:19 -07:00
Danny Coates
ff9be6a213 updated deps 2019-08-26 08:58:34 -07:00
Roberto Alvarado
883728570e Pontoon: Update Spanish (Mexico) (es-MX) localization of Firefox Send
Localization authors:
- Roberto Alvarado <ralv888@gmail.com>
- Adolfo Jayme Barrientos <fitoschido@gmail.com>
2019-08-25 05:52:41 +00:00
Adolfo Jayme Barrientos
0435f17f9a Pontoon: Update Spanish (Mexico) (es-MX) localization of Firefox Send
Localization authors:
- Roberto Alvarado <ralv888@gmail.com>
- Adolfo Jayme Barrientos <fitoschido@gmail.com>
2019-08-20 16:34:33 +00:00
Danny Coates
1e1268fff0 fixed hebrew fluent variable name 2019-08-19 10:59:35 -07:00
Quế Tùng
252d7817e3 Pontoon: Update Vietnamese (vi) localization of Firefox Send
Localization authors:
- Quế Tùng <best.cloney.1301@gmail.com>
2019-08-17 15:53:31 +00:00
Danny Coates
ce28c38ebe v3.0.16 2019-08-12 10:10:07 -07:00
Danny Coates
f0407f9beb use custom configstore that doesn't use the fs 2019-08-12 10:00:57 -07:00
Sahithi
c6f222eb57 Pontoon: Update Telugu (te) localization of Firefox Send
Localization authors:
- Sahithi <sahithi@swecha.net>
2019-08-11 08:54:01 +00:00
leo.toneff
6dd6135185 Pontoon: Update Norwegian Bokmål (nb-NO) localization of Firefox Send
Localization authors:
- leo.toneff <leo.toneff@gmail.com>
- Håvar Henriksen <havar@firefox.no>
2019-08-10 16:33:36 +00:00
Danny Coates
8df339b66d v3.0.15 2019-08-09 12:26:09 -07:00
Danny Coates
8702fda651 handle websocket construction exceptions 2019-08-09 11:47:44 -07:00
Danny Coates
807ecff471 updated sentry libs from raven to @sentry 2019-08-09 11:06:21 -07:00
Danny Coates
927c981cd7 added size/time info to up/download error reporting 2019-08-09 10:09:34 -07:00
Danny Coates
7073cc8ce6 added download hang detection and error reporting 2019-08-08 13:54:02 -07:00
Danny Coates
c925fae696 updated deps 2019-08-08 13:01:57 -07:00
Danny Coates
966d7a5e35 create configstore dir in docker container 2019-08-08 10:42:57 -07:00
Danny Coates
96c750c098 added size and duration to connection error reporting 2019-08-08 09:52:22 -07:00
Danny Coates
0729064753 Merge pull request #1378 from mozilla/new-ws
Use resumable uploads to GCS
2019-08-08 08:54:00 -07:00
Joergen
259a5a5f24 Pontoon: Update Danish (da) localization of Firefox Send
Localization authors:
- Joergen <joergenr@stofanet.dk>
2019-08-08 14:02:32 +00:00
Danny Coates
27be72e0cd refactored client side upload loop 2019-08-07 13:51:23 -07:00
Danny Coates
e4231bbc0f updated deps 2019-08-07 13:47:26 -07:00
Danny Coates
1d184f06bf revert webpack for broken css extraction 2019-08-07 12:14:27 -07:00
Quentí
f7b46a99ac Pontoon: Update Occitan (oc) localization of Firefox Send
Localization authors:
- Quentí <quentinantonin@free.fr>
2019-08-07 18:12:20 +00:00
Quentí
3fadb489c7 Pontoon: Update Occitan (oc) localization of Firefox Send
Localization authors:
- Quentí <quentinantonin@free.fr>
2019-08-07 17:13:10 +00:00
Danny Coates
6378676c2d use resumable uploads to GCS 2019-08-07 10:10:42 -07:00
Quentí
014d84e4c7 Pontoon: Update Occitan (oc) localization of Firefox Send
Localization authors:
- Quentí <quentinantonin@free.fr>
2019-08-07 16:54:33 +00:00
Quentí
a08d8435a9 Pontoon: Update Occitan (oc) localization of Firefox Send
Localization authors:
- Quentí <quentinantonin@free.fr>
2019-08-07 07:12:56 +00:00
Quentí
40a05c9ecf Pontoon: Update Occitan (oc) localization of Firefox Send
Localization authors:
- Quentí <quentinantonin@free.fr>
2019-08-07 06:52:27 +00:00
Danny Coates
527040afef updated ws dependency and slightly improved client side error handling, hung uploads will error instead of hang forever 2019-08-06 14:47:21 -07:00
Michal Stanke
a48a447808 Pontoon: Update Czech (cs) localization of Firefox Send
Localization authors:
- Michal Stanke <mstanke@mozilla.cz>
2019-08-06 12:14:20 +00:00
julen
f3569d7f98 Pontoon: Update Basque (eu) localization of Firefox Send
Localization authors:
- julen <julenx@gmail.com>
- Ander Elortondo <ander.elor@gmail.com>
2019-08-05 08:52:40 +00:00
صفا الفليج
6ca7d11efb Pontoon: Update Arabic (ar) localization of Firefox Send
Localization authors:
- صفا الفليج <safa1996alfulaij@gmail.com>
2019-08-05 08:52:37 +00:00
julen
b71ae4a0ff Pontoon: Update Basque (eu) localization of Firefox Send
Localization authors:
- p.sanroman.bengoetxea <p.sanroman.bengoetxea@gmail.com>
- julen <julenx@gmail.com>
- Ander Elortondo <ander.elor@gmail.com>
2019-08-05 08:34:11 +00:00
Aman Alam
7ba25664b5 Pontoon: Update Punjabi (pa-IN) localization of Firefox Send
Localization authors:
- Aman Alam <amanpreet.alam@gmail.com>
2019-08-05 00:52:41 +00:00
Danny Coates
80fb42ad3d v3.0.14 2019-08-02 12:13:39 -07:00
Danny Coates
f036df5f47 updated eslint config 2019-08-02 12:03:53 -07:00
Danny Coates
20c063db7c fixed logged error in integration tests 2019-08-02 11:26:52 -07:00
Abd ar-Rahman Hamidi
30d7ec50f3 Convert ContentLength of storage to number 2019-01-02 22:16:03 +05:00
198 changed files with 14222 additions and 7350 deletions

View File

@@ -1,77 +1,48 @@
version: 2.0
jobs:
build:
docker:
- image: circleci/node:10
steps:
- checkout
- restore_cache:
key: send-build-{{ checksum "package-lock.json" }}
- run: npm install
- save_cache:
key: send-build-{{ checksum "package-lock.json" }}
paths:
- node_modules
- run: npm run build
- persist_to_workspace:
root: .
paths:
- ./dist
test:
docker:
- image: circleci/node:10-browsers
- image: circleci/node:12-browsers
steps:
- checkout
- restore_cache:
key: send-test-{{ checksum "package-lock.json" }}
- run: npm install
- save_cache:
key: send-test-{{ checksum "package-lock.json" }}
paths:
- node_modules
- run: npm ci
- run: npm run lint
- run: npm run test
- run: npm test
- store_artifacts:
path: coverage
integration_tests:
docker:
- image: circleci/node:10-browsers
- image: circleci/node:12-browsers
steps:
- checkout
- restore_cache:
key: send-int-{{ checksum "package-lock.json" }}
- run: npm install
- save_cache:
key: send-int-{{ checksum "package-lock.json" }}
paths:
- node_modules
- run:
- run: npm ci
- run:
name: Run integration test
command: ./scripts/bin/run-integration-test-circleci.sh
deploy_dev:
machine: true
docker:
- image: circleci/node:12
steps:
- checkout
- attach_workspace:
at: .
- setup_remote_docker
- run: docker login -u $DOCKER_USER -p $DOCKER_PASS
- run: docker build -t mozilla/send:latest .
- run: docker push mozilla/send:latest
deploy_vnext:
machine: true
docker:
- image: circleci/node:12
steps:
- checkout
- attach_workspace:
at: .
- setup_remote_docker
- run: docker login -u $DOCKER_USER -p $DOCKER_PASS
- run: docker build -t mozilla/send:vnext .
- run: docker push mozilla/send:vnext
deploy_stage:
machine: true
docker:
- image: circleci/node:12
steps:
- checkout
- attach_workspace:
at: .
- setup_remote_docker
- run: docker login -u $DOCKER_USER -p $DOCKER_PASS
- run: docker build -t mozilla/send:$CIRCLE_TAG .
- run: docker push mozilla/send:$CIRCLE_TAG
@@ -79,12 +50,6 @@ workflows:
version: 2
test_pr:
jobs:
- build:
filters:
branches:
ignore:
- master
- vnext
- test:
filters:
branches:
@@ -97,25 +62,13 @@ workflows:
ignore: master
build_and_deploy_dev:
jobs:
- build:
filters:
branches:
only:
- master
- vnext
tags:
ignore: /^v.*/
- deploy_dev:
requires:
- build
filters:
branches:
only: master
tags:
ignore: /^v.*/
- deploy_vnext:
requires:
- build
filters:
branches:
only: vnext
@@ -123,12 +76,6 @@ workflows:
ignore: /^v.*/
build_and_deploy_stage:
jobs:
- build:
filters:
branches:
ignore: /.*/
tags:
only: /^v.*/
- test:
filters:
branches:
@@ -143,7 +90,6 @@ workflows:
only: /^v.*/
- deploy_stage:
requires:
- build
- test
- integration_tests
filters:

View File

@@ -1,10 +1,8 @@
node_modules
.git
.tox
.DS_Store
firefox
assets
docs
test
coverage
.circleci
.nyc_output
.vscode
.DS_Store
coverage
docs
firefox
node_modules

View File

@@ -2,5 +2,6 @@ dist
assets
firefox
coverage
android/app/build
app/locale.js
app/capabilities.js

View File

@@ -4,6 +4,7 @@ env:
extends:
- eslint:recommended
- prettier
- plugin:node/recommended
- plugin:security/recommended
@@ -18,17 +19,10 @@ rules:
node/no-unsupported-features/es-syntax: off
node/no-unsupported-features/node-builtins: off
node/no-unpublished-require: off
node/no-unpublished-import: off
security/detect-non-literal-fs-filename: off
security/detect-object-injection: off
eol-last: [error, always]
eqeqeq: error
no-alert: warn
no-console: warn
no-path-concat: error
no-unused-vars: [error, {argsIgnorePattern: "^_|err|event|next|reject"}]
no-var: error
one-var: [error, never]
prefer-const: error
quotes: [error, single, {avoidEscape: true}]
require-atomic-updates: warn

View File

@@ -1,6 +1,7 @@
Abdalrahman Hwoij
Abhinav Adduri
Adnan Kičin
Adolfo Jayme Barrientos
Alberto Castro
Alexander Slovesnik
Alfredos-Panagiotis Damkalis
@@ -63,6 +64,7 @@ George Raptis
Georgianizator
Gonçalo Matos
Gwenn
Hampus
Hugo
Hugo Abreu
Hyeonseok Shin
@@ -93,6 +95,7 @@ Juraj Cigáň
Kerim Kalamujić
Khaled Hosny
Kim Ludvigsen
Kim Younggeon
Kohei Yoshino
Lan Glad
Lasse Liehu
@@ -101,6 +104,7 @@ Lobodzets
LuFlo
Luis A. Sánchez
Luiz Carlos de Morais
Luiz Felipe F M Costa
Luna Jernberg
Mahay Alam Khan
Marcelo Ghelman
@@ -110,6 +114,7 @@ Mark Heijl
Mark Liang
Mark Liang (You-Wen)
Marko Andrejić
Martijn Dekker
Marwan Mohamad
Matjaž Horvat
Maykon Chagas
@@ -131,6 +136,7 @@ Myungjae Won
Nicholas Skinsacos
Nihad
Nihad Suljić
Niksend Mizuhara
Oscar
Paulius
Pedro Burlamaqui Bendahan
@@ -138,7 +144,9 @@ Peter deHaan
Pierre Neter
Pin-guang Chen
Piotr Drąg
Quentí
Quế Tùng
Rachel Tublitz
Radu Popescu
Rhoslyn Prys
RickieES
@@ -161,6 +169,7 @@ Sara Todaro
Sav22999
Schieck :)
Selim Şumlu
Selyan Sliman Amiri
Sidak Singh Aulakh
Slimane Amiri
Slimane Selyan AMIRI
@@ -183,6 +192,7 @@ Victor Bychek
Vimal Raghubir
Vitaliy Krutko
Weihang Lo
Wiktor Furman
Wil Clouser
YFdyh000
Yassine Aït-El-Mouden
@@ -213,9 +223,11 @@ jesferman1993
jlG
josotrix
jspam
julen
julenx
kenrick95
kumincir
leo.toneff
m4hdi.pdroid
mail
manxmensch

View File

@@ -1,18 +1,59 @@
FROM node:10 AS builder
RUN addgroup --gid 10001 app && adduser --disabled-password --gecos '' --gid 10001 --home /app --uid 10001 app
COPY package*.json /app/
WORKDIR /app
RUN npm install --production
##
# Firefox Send - Mozilla
#
# License https://github.com/mozilla/send/blob/master/LICENSE
##
FROM node:10-slim
RUN addgroup --gid 10001 app && adduser --disabled-password --gecos '' --gid 10001 --home /app --uid 10001 app
# Build project
FROM node:12 AS builder
RUN set -x \
# Add user
&& addgroup --gid 10001 app \
&& adduser --disabled-password \
--gecos '' \
--gid 10001 \
--home /app \
--uid 10001 \
app
COPY --chown=app:app . /app
USER app
WORKDIR /app
COPY --chown=app:app --from=builder /app .
COPY --chown=app:app . .
RUN set -x \
# Build
&& PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm ci \
&& npm run build
# Main image
FROM node:12-slim
RUN set -x \
# Add user
&& addgroup --gid 10001 app \
&& adduser --disabled-password \
--gecos '' \
--gid 10001 \
--home /app \
--uid 10001 \
app
RUN apt-get update && apt-get -y install \
git-core \
&& rm -rf /var/lib/apt/lists/*
USER app
WORKDIR /app
COPY --chown=app:app package*.json ./
COPY --chown=app:app app app
COPY --chown=app:app common common
COPY --chown=app:app public/locales public/locales
COPY --chown=app:app server server
COPY --chown=app:app --from=builder /app/dist dist
RUN npm ci --production && npm cache clean --force
RUN mkdir -p /app/.config/configstore
RUN ln -s dist/version.json version.json
ENV PORT=1443
EXPOSE $PORT
EXPOSE ${PORT}
CMD ["node", "server/bin/prod.js"]

View File

@@ -1,4 +1,4 @@
# [![Firefox Send](./assets/logo.svg)](https://send.firefox.com/)
# [![Firefox Send](./assets/icon.svg)](https://send.firefox.com/) Firefox Send
[![CircleCI](https://img.shields.io/circleci/project/github/mozilla/send.svg)](https://circleci.com/gh/mozilla/send)
@@ -30,22 +30,22 @@ A file sharing experiment which allows you to send encrypted files to other user
## Requirements
- [Node.js 10.0+](https://nodejs.org/)
- [Node.js 12.x](https://nodejs.org/)
- [Redis server](https://redis.io/) (optional for development)
- [AWS S3](https://aws.amazon.com/s3/) or compatible service. (optional)
- [AWS S3](https://aws.amazon.com/s3/) or compatible service (optional)
---
## Development
To start an ephemeral development server run:
To start an ephemeral development server, run:
```sh
npm install
npm start
```
Then browse to http://localhost:8080
Then, browse to http://localhost:8080
---

View File

@@ -1,7 +1,7 @@
import 'intl-pluralrules';
import choo from 'choo';
import html from 'choo/html';
import Raven from 'raven-js';
import * as Sentry from '@sentry/browser';
import { setApiUrlPrefix, getConstants } from '../app/api';
import metrics from '../app/metrics';
@@ -60,9 +60,7 @@ function body(main) {
</a>`;
*/
return html`
<body
class="flex flex-col items-center font-sans bg-grey-lightest h-screen"
>
<body class="flex flex-col items-center font-sans bg-grey-10 h-screen">
${state.cache(Header, 'header').render()} ${main(state, emit)}
</body>
`;
@@ -82,7 +80,7 @@ function body(main) {
state.archive = new Archive([], DEFAULTS.EXPIRE_SECONDS);
state.storage = storage;
state.user = new User(storage, LIMITS);
state.raven = Raven;
state.sentry = Sentry;
});
app.use(metrics);
app.route('/', body(home));

View File

@@ -25,7 +25,7 @@ module.exports = function(state, emit) {
let content = '';
let button = html`
<div
class="bg-blue rounded-full m-4 flex items-center justify-center shadow-lg"
class="bg-blue-50 rounded-full m-4 flex items-center justify-center shadow-lg"
style="width: 56px; height: 56px"
onclick="${onclick}"
>

View File

@@ -12,7 +12,7 @@ export default function initialState(state, emitter) {
getAsset(name) {
return `${state.prefix}/${name}`;
},
raven: {
sentry: {
captureException: e => {
console.error('ERROR ' + e + ' ' + e.stack);
}

View File

@@ -11,6 +11,15 @@ if (!fileProtocolWssUrl) {
fileProtocolWssUrl = 'wss://send.firefox.com/api/ws';
}
export class ConnectionError extends Error {
constructor(cancelled, duration, size) {
super(cancelled ? '0' : 'connection closed');
this.cancelled = cancelled;
this.duration = duration;
this.size = size;
}
}
export function setFileProtocolWssUrl(url) {
localStorage && localStorage.setItem('wssURL', url);
fileProtocolWssUrl = url;
@@ -52,7 +61,10 @@ async function fetchWithAuth(url, params, keychain) {
const result = {};
params = params || {};
const h = await keychain.authHeader();
params.headers = new Headers({ Authorization: h });
params.headers = new Headers({
Authorization: h,
'Content-Type': 'application/json'
});
const response = await fetch(url, params);
result.response = response;
result.ok = response.ok;
@@ -118,10 +130,10 @@ export async function metadata(id, keychain) {
return {
size: meta.size,
ttl: data.ttl,
iv: meta.iv,
name: meta.name,
type: meta.type,
manifest: meta.manifest
manifest: meta.manifest,
flagged: data.flagged
};
}
throw new Error(result.response.status);
@@ -137,17 +149,25 @@ export async function setPassword(id, owner_token, keychain) {
}
function asyncInitWebSocket(server) {
return new Promise(resolve => {
const ws = new WebSocket(server);
ws.onopen = () => {
resolve(ws);
};
return new Promise((resolve, reject) => {
try {
const ws = new WebSocket(server);
ws.addEventListener('open', () => resolve(ws), { once: true });
} catch (e) {
reject(new ConnectionError(false));
}
});
}
function listenForResponse(ws, canceller) {
return new Promise((resolve, reject) => {
function handleClose(event) {
// a 'close' event before a 'message' event means the request failed
ws.removeEventListener('message', handleMessage);
reject(new ConnectionError(canceller.cancelled));
}
function handleMessage(msg) {
ws.removeEventListener('close', handleClose);
try {
const response = JSON.parse(msg.data);
if (response.error) {
@@ -156,13 +176,11 @@ function listenForResponse(ws, canceller) {
resolve(response);
}
} catch (e) {
ws.close();
canceller.cancelled = true;
canceller.error = e;
reject(e);
}
}
ws.addEventListener('message', handleMessage, { once: true });
ws.addEventListener('close', handleClose, { once: true });
});
}
@@ -176,6 +194,8 @@ async function upload(
onprogress,
canceller
) {
let size = 0;
const start = Date.now();
const host = window.location.hostname;
const port = window.location.port;
const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
@@ -203,31 +223,41 @@ async function upload(
const reader = stream.getReader();
let state = await reader.read();
let size = 0;
while (!state.done) {
const buf = state.value;
if (canceller.cancelled) {
throw canceller.error;
ws.close();
}
if (ws.readyState !== WebSocket.OPEN) {
break;
}
const buf = state.value;
ws.send(buf);
onprogress(size);
size += buf.length;
state = await reader.read();
while (ws.bufferedAmount > ECE_RECORD_SIZE * 2) {
while (
ws.bufferedAmount > ECE_RECORD_SIZE * 2 &&
ws.readyState === WebSocket.OPEN &&
!canceller.cancelled
) {
await delay();
}
}
const footer = new Uint8Array([0]);
ws.send(footer);
if (ws.readyState === WebSocket.OPEN) {
ws.send(new Uint8Array([0])); //EOF
}
await completedResponse;
ws.close();
uploadInfo.duration = Date.now() - start;
return uploadInfo;
} catch (e) {
ws.close(4000);
e.size = size;
e.duration = Date.now() - start;
throw e;
} finally {
if (![WebSocket.CLOSED, WebSocket.CLOSING].includes(ws.readyState)) {
ws.close();
}
}
}
@@ -244,7 +274,6 @@ export function uploadWs(
return {
cancel: function() {
canceller.error = new Error(0);
canceller.cancelled = true;
},
@@ -263,20 +292,13 @@ export function uploadWs(
////////////////////////
async function downloadS(id, keychain, signal) {
const auth = await keychain.authHeader();
async function _downloadStream(id, dlToken, signal) {
const response = await fetch(getApiUrl(`/api/download/${id}`), {
signal: signal,
method: 'GET',
headers: { Authorization: auth }
headers: { Authorization: `Bearer ${dlToken}` }
});
const authHeader = response.headers.get('WWW-Authenticate');
if (authHeader) {
keychain.nonce = parseNonce(authHeader);
}
if (response.status !== 200) {
throw new Error(response.status);
}
@@ -284,13 +306,13 @@ async function downloadS(id, keychain, signal) {
return response.body;
}
async function tryDownloadStream(id, keychain, signal, tries = 1) {
async function tryDownloadStream(id, dlToken, signal, tries = 2) {
try {
const result = await downloadS(id, keychain, signal);
const result = await _downloadStream(id, dlToken, signal);
return result;
} catch (e) {
if (e.message === '401' && --tries > 0) {
return tryDownloadStream(id, keychain, signal, tries);
return tryDownloadStream(id, dlToken, signal, tries);
}
if (e.name === 'AbortError') {
throw new Error('0');
@@ -299,31 +321,27 @@ async function tryDownloadStream(id, keychain, signal, tries = 1) {
}
}
export function downloadStream(id, keychain) {
export function downloadStream(id, dlToken) {
const controller = new AbortController();
function cancel() {
controller.abort();
}
return {
cancel,
result: tryDownloadStream(id, keychain, controller.signal, 2)
result: tryDownloadStream(id, dlToken, controller.signal)
};
}
//////////////////
function download(id, keychain, onprogress, canceller) {
async function download(id, dlToken, onprogress, canceller) {
const xhr = new XMLHttpRequest();
canceller.oncancel = function() {
xhr.abort();
};
return new Promise(async function(resolve, reject) {
return new Promise(function(resolve, reject) {
xhr.addEventListener('loadend', function() {
canceller.oncancel = function() {};
const authHeader = xhr.getResponseHeader('WWW-Authenticate');
if (authHeader) {
keychain.nonce = parseNonce(authHeader);
}
if (xhr.status !== 200) {
return reject(new Error(xhr.status));
}
@@ -337,28 +355,27 @@ function download(id, keychain, onprogress, canceller) {
onprogress(event.loaded);
}
});
const auth = await keychain.authHeader();
xhr.open('get', getApiUrl(`/api/download/blob/${id}`));
xhr.setRequestHeader('Authorization', auth);
xhr.setRequestHeader('Authorization', `Bearer ${dlToken}`);
xhr.responseType = 'blob';
xhr.send();
onprogress(0);
});
}
async function tryDownload(id, keychain, onprogress, canceller, tries = 1) {
async function tryDownload(id, dlToken, onprogress, canceller, tries = 2) {
try {
const result = await download(id, keychain, onprogress, canceller);
const result = await download(id, dlToken, onprogress, canceller);
return result;
} catch (e) {
if (e.message === '401' && --tries > 0) {
return tryDownload(id, keychain, onprogress, canceller, tries);
return tryDownload(id, dlToken, onprogress, canceller, tries);
}
throw e;
}
}
export function downloadFile(id, keychain, onprogress) {
export function downloadFile(id, dlToken, onprogress) {
const canceller = {
oncancel: function() {} // download() sets this
};
@@ -367,7 +384,7 @@ export function downloadFile(id, keychain, onprogress) {
}
return {
cancel,
result: tryDownload(id, keychain, onprogress, canceller, 2)
result: tryDownload(id, dlToken, onprogress, canceller)
};
}
@@ -412,3 +429,44 @@ export async function getConstants() {
throw new Error(response.status);
}
export async function reportLink(id, keychain, reason) {
const result = await fetchWithAuthAndRetry(
getApiUrl(`/api/report/${id}`),
{
method: 'POST',
body: JSON.stringify({ reason })
},
keychain
);
if (result.ok) {
return;
}
throw new Error(result.response.status);
}
export async function getDownloadToken(id, keychain) {
const result = await fetchWithAuthAndRetry(
getApiUrl(`/api/download/token/${id}`),
{
method: 'GET'
},
keychain
);
if (result.ok) {
return (await result.response.json()).token;
}
throw new Error(result.response.status);
}
export async function downloadDone(id, dlToken) {
const headers = new Headers({ Authorization: `Bearer ${dlToken}` });
const response = await fetch(getApiUrl(`/api/download/done/${id}`), {
headers,
method: 'POST'
});
return response.ok;
}

View File

@@ -76,8 +76,9 @@ async function polyfillStreams() {
}
export default async function getCapabilities() {
const serviceWorker =
'serviceWorker' in navigator && browserName() !== 'edge';
const browser = browserName();
const isMobile = /mobi|android/i.test(navigator.userAgent);
const serviceWorker = 'serviceWorker' in navigator && browser !== 'edge';
let crypto = await checkCrypto();
const nativeStreams = checkStreams();
let polyStreams = false;
@@ -91,19 +92,23 @@ export default async function getCapabilities() {
account = false;
}
const share =
typeof navigator.share === 'function' && locale().startsWith('en'); // en until strings merge
isMobile &&
typeof navigator.share === 'function' &&
locale().startsWith('en'); // en until strings merge
const standalone =
window.matchMedia('(display-mode: standalone)').matches ||
navigator.standalone;
const mobileFirefox = browser === 'firefox' && isMobile;
return {
account,
crypto,
serviceWorker,
streamUpload: nativeStreams || polyStreams,
streamDownload:
nativeStreams && serviceWorker && browserName() !== 'safari',
nativeStreams && serviceWorker && browser !== 'safari' && !mobileFirefox,
multifile: nativeStreams || polyStreams,
share,
standalone

View File

@@ -49,8 +49,8 @@ export default function(state, emitter) {
state.user.login(email);
});
emitter.on('logout', () => {
state.user.logout();
emitter.on('logout', async () => {
await state.user.logout();
metrics.loggedOut({ trigger: 'button' });
emitter.emit('pushState', '/');
});
@@ -76,7 +76,7 @@ export default function(state, emitter) {
state.storage.remove(ownedFile.id);
await ownedFile.del();
} catch (e) {
state.raven.captureException(e);
state.sentry.captureException(e);
}
render();
});
@@ -176,14 +176,23 @@ export default function(state, emitter) {
} catch (err) {
if (err.message === '0') {
//cancelled. do nothing
const duration = Date.now() - start;
metrics.cancelledUpload(archive, duration);
metrics.cancelledUpload(archive, err.duration);
render();
} else if (err.message === '401') {
const refreshed = await state.user.refresh();
if (refreshed) {
return emitter.emit('upload');
}
emitter.emit('pushState', '/error');
} else {
// eslint-disable-next-line no-console
console.error(err);
state.raven.captureException(err);
metrics.stoppedUpload(archive);
state.sentry.withScope(scope => {
scope.setExtra('duration', err.duration);
scope.setExtra('size', err.size);
state.sentry.captureException(err);
});
metrics.stoppedUpload(archive, err.duration);
emitter.emit('pushState', '/error');
}
} finally {
@@ -223,9 +232,10 @@ export default function(state, emitter) {
} catch (e) {
if (e.message === '401' || e.message === '404') {
file.password = null;
if (!file.requiresPassword) {
return emitter.emit('pushState', '/404');
}
file.dead = e.message === '404';
} else {
console.error(e);
return emitter.emit('pushState', '/error');
}
}
@@ -241,7 +251,8 @@ export default function(state, emitter) {
const start = Date.now();
try {
const dl = state.transfer.download({
stream: state.capabilities.streamDownload
stream: state.capabilities.streamDownload,
storage: state.storage
});
render();
await dl;
@@ -260,9 +271,16 @@ export default function(state, emitter) {
} else {
// eslint-disable-next-line no-console
state.transfer = null;
const location = err.message === '404' ? '/404' : '/error';
const location = ['404', '403'].includes(err.message)
? '/404'
: '/error';
if (location === '/error') {
state.raven.captureException(err);
state.sentry.withScope(scope => {
scope.setExtra('duration', err.duration);
scope.setExtra('size', err.size);
scope.setExtra('progress', err.progress);
state.sentry.captureException(err);
});
const duration = Date.now() - start;
metrics.stoppedDownload({
size,
@@ -298,6 +316,21 @@ export default function(state, emitter) {
render();
});
emitter.on('report', async ({ reason }) => {
try {
const receiver = state.transfer || new FileReceiver(state.fileInfo);
await receiver.reportLink(reason);
render();
} catch (err) {
console.error(err);
if (err.message === '404') {
state.fileInfo = { reported: true };
return render();
}
emitter.emit('pushState', '/error');
}
});
setInterval(() => {
// poll for updates of the upload list
if (!state.modal && state.route === '/') {

266
app/crc32.js Normal file
View File

@@ -0,0 +1,266 @@
const LOOKUP = Int32Array.from([
0x00000000,
0x77073096,
0xee0e612c,
0x990951ba,
0x076dc419,
0x706af48f,
0xe963a535,
0x9e6495a3,
0x0edb8832,
0x79dcb8a4,
0xe0d5e91e,
0x97d2d988,
0x09b64c2b,
0x7eb17cbd,
0xe7b82d07,
0x90bf1d91,
0x1db71064,
0x6ab020f2,
0xf3b97148,
0x84be41de,
0x1adad47d,
0x6ddde4eb,
0xf4d4b551,
0x83d385c7,
0x136c9856,
0x646ba8c0,
0xfd62f97a,
0x8a65c9ec,
0x14015c4f,
0x63066cd9,
0xfa0f3d63,
0x8d080df5,
0x3b6e20c8,
0x4c69105e,
0xd56041e4,
0xa2677172,
0x3c03e4d1,
0x4b04d447,
0xd20d85fd,
0xa50ab56b,
0x35b5a8fa,
0x42b2986c,
0xdbbbc9d6,
0xacbcf940,
0x32d86ce3,
0x45df5c75,
0xdcd60dcf,
0xabd13d59,
0x26d930ac,
0x51de003a,
0xc8d75180,
0xbfd06116,
0x21b4f4b5,
0x56b3c423,
0xcfba9599,
0xb8bda50f,
0x2802b89e,
0x5f058808,
0xc60cd9b2,
0xb10be924,
0x2f6f7c87,
0x58684c11,
0xc1611dab,
0xb6662d3d,
0x76dc4190,
0x01db7106,
0x98d220bc,
0xefd5102a,
0x71b18589,
0x06b6b51f,
0x9fbfe4a5,
0xe8b8d433,
0x7807c9a2,
0x0f00f934,
0x9609a88e,
0xe10e9818,
0x7f6a0dbb,
0x086d3d2d,
0x91646c97,
0xe6635c01,
0x6b6b51f4,
0x1c6c6162,
0x856530d8,
0xf262004e,
0x6c0695ed,
0x1b01a57b,
0x8208f4c1,
0xf50fc457,
0x65b0d9c6,
0x12b7e950,
0x8bbeb8ea,
0xfcb9887c,
0x62dd1ddf,
0x15da2d49,
0x8cd37cf3,
0xfbd44c65,
0x4db26158,
0x3ab551ce,
0xa3bc0074,
0xd4bb30e2,
0x4adfa541,
0x3dd895d7,
0xa4d1c46d,
0xd3d6f4fb,
0x4369e96a,
0x346ed9fc,
0xad678846,
0xda60b8d0,
0x44042d73,
0x33031de5,
0xaa0a4c5f,
0xdd0d7cc9,
0x5005713c,
0x270241aa,
0xbe0b1010,
0xc90c2086,
0x5768b525,
0x206f85b3,
0xb966d409,
0xce61e49f,
0x5edef90e,
0x29d9c998,
0xb0d09822,
0xc7d7a8b4,
0x59b33d17,
0x2eb40d81,
0xb7bd5c3b,
0xc0ba6cad,
0xedb88320,
0x9abfb3b6,
0x03b6e20c,
0x74b1d29a,
0xead54739,
0x9dd277af,
0x04db2615,
0x73dc1683,
0xe3630b12,
0x94643b84,
0x0d6d6a3e,
0x7a6a5aa8,
0xe40ecf0b,
0x9309ff9d,
0x0a00ae27,
0x7d079eb1,
0xf00f9344,
0x8708a3d2,
0x1e01f268,
0x6906c2fe,
0xf762575d,
0x806567cb,
0x196c3671,
0x6e6b06e7,
0xfed41b76,
0x89d32be0,
0x10da7a5a,
0x67dd4acc,
0xf9b9df6f,
0x8ebeeff9,
0x17b7be43,
0x60b08ed5,
0xd6d6a3e8,
0xa1d1937e,
0x38d8c2c4,
0x4fdff252,
0xd1bb67f1,
0xa6bc5767,
0x3fb506dd,
0x48b2364b,
0xd80d2bda,
0xaf0a1b4c,
0x36034af6,
0x41047a60,
0xdf60efc3,
0xa867df55,
0x316e8eef,
0x4669be79,
0xcb61b38c,
0xbc66831a,
0x256fd2a0,
0x5268e236,
0xcc0c7795,
0xbb0b4703,
0x220216b9,
0x5505262f,
0xc5ba3bbe,
0xb2bd0b28,
0x2bb45a92,
0x5cb36a04,
0xc2d7ffa7,
0xb5d0cf31,
0x2cd99e8b,
0x5bdeae1d,
0x9b64c2b0,
0xec63f226,
0x756aa39c,
0x026d930a,
0x9c0906a9,
0xeb0e363f,
0x72076785,
0x05005713,
0x95bf4a82,
0xe2b87a14,
0x7bb12bae,
0x0cb61b38,
0x92d28e9b,
0xe5d5be0d,
0x7cdcefb7,
0x0bdbdf21,
0x86d3d2d4,
0xf1d4e242,
0x68ddb3f8,
0x1fda836e,
0x81be16cd,
0xf6b9265b,
0x6fb077e1,
0x18b74777,
0x88085ae6,
0xff0f6a70,
0x66063bca,
0x11010b5c,
0x8f659eff,
0xf862ae69,
0x616bffd3,
0x166ccf45,
0xa00ae278,
0xd70dd2ee,
0x4e048354,
0x3903b3c2,
0xa7672661,
0xd06016f7,
0x4969474d,
0x3e6e77db,
0xaed16a4a,
0xd9d65adc,
0x40df0b66,
0x37d83bf0,
0xa9bcae53,
0xdebb9ec5,
0x47b2cf7f,
0x30b5ffe9,
0xbdbdf21c,
0xcabac28a,
0x53b39330,
0x24b4a3a6,
0xbad03605,
0xcdd70693,
0x54de5729,
0x23d967bf,
0xb3667a2e,
0xc4614ab8,
0x5d681b02,
0x2a6f2b94,
0xb40bbe37,
0xc30c8ea1,
0x5a05df1b,
0x2d02ef8d
]);
module.exports = function crc32(uint8Array, previous) {
let crc = previous === 0 ? 0 : ~~previous ^ -1;
for (let i = 0; i < uint8Array.byteLength; i++) {
crc = LOOKUP[(crc ^ uint8Array[i]) & 0xff] ^ (crc >>> 8);
}
return (crc ^ -1) >>> 0;
};

View File

@@ -1,5 +1,5 @@
import 'buffer';
import { transformStream } from './streams';
import { concat } from './utils';
const NONCE_LENGTH = 12;
const TAG_LENGTH = 16;
@@ -81,19 +81,18 @@ class ECETransformer {
)
);
return Buffer.from(base.slice(0, NONCE_LENGTH));
return base.slice(0, NONCE_LENGTH);
}
generateNonce(seq) {
if (seq > 0xffffffff) {
throw new Error('record sequence number exceeds limit');
}
const nonce = Buffer.from(this.nonceBase);
const m = nonce.readUIntBE(nonce.length - 4, 4);
const nonce = new DataView(this.nonceBase.slice());
const m = nonce.getUint32(nonce.byteLength - 4);
const xor = (m ^ seq) >>> 0; //forces unsigned int xor
nonce.writeUIntBE(xor, nonce.length - 4, 4);
return nonce;
nonce.setUint32(nonce.byteLength - 4, xor);
return new Uint8Array(nonce.buffer);
}
pad(data, isLast) {
@@ -103,14 +102,11 @@ class ECETransformer {
}
if (isLast) {
const padding = Buffer.alloc(1);
padding.writeUInt8(2, 0);
return Buffer.concat([data, padding]);
return concat(data, Uint8Array.of(2));
} else {
const padding = Buffer.alloc(this.rs - len - TAG_LENGTH);
padding.fill(0);
padding.writeUInt8(1, 0);
return Buffer.concat([data, padding]);
const padding = new Uint8Array(this.rs - len - TAG_LENGTH);
padding[0] = 1;
return concat(data, padding);
}
}
@@ -133,10 +129,9 @@ class ECETransformer {
}
createHeader() {
const nums = Buffer.alloc(5);
nums.writeUIntBE(this.rs, 0, 4);
nums.writeUIntBE(0, 4, 1);
return Buffer.concat([Buffer.from(this.salt), nums]);
const nums = new DataView(new ArrayBuffer(5));
nums.setUint32(0, this.rs);
return concat(new Uint8Array(this.salt), new Uint8Array(nums.buffer));
}
readHeader(buffer) {
@@ -144,9 +139,10 @@ class ECETransformer {
throw new Error('chunk too small for reading header');
}
const header = {};
header.salt = buffer.buffer.slice(0, KEY_LENGTH);
header.rs = buffer.readUIntBE(KEY_LENGTH, 4);
const idlen = buffer.readUInt8(KEY_LENGTH + 4);
const dv = new DataView(buffer.buffer);
header.salt = buffer.slice(0, KEY_LENGTH);
header.rs = dv.getUint32(KEY_LENGTH);
const idlen = dv.getUint8(KEY_LENGTH + 4);
header.length = idlen + KEY_LENGTH + 5;
return header;
}
@@ -158,7 +154,7 @@ class ECETransformer {
this.key,
this.pad(buffer, isLast)
);
return Buffer.from(encrypted);
return new Uint8Array(encrypted);
}
async decryptRecord(buffer, seq, isLast) {
@@ -173,7 +169,7 @@ class ECETransformer {
buffer
);
return this.unpad(Buffer.from(data), isLast);
return this.unpad(new Uint8Array(data), isLast);
}
async start(controller) {
@@ -214,7 +210,7 @@ class ECETransformer {
await this.transformPrevChunk(false, controller);
}
this.firstchunk = false;
this.prevChunk = Buffer.from(chunk.buffer);
this.prevChunk = new Uint8Array(chunk.buffer);
}
async flush(controller) {

View File

@@ -1,7 +1,14 @@
import Nanobus from 'nanobus';
import Keychain from './keychain';
import { delay, bytes, streamToArrayBuffer } from './utils';
import { downloadFile, metadata, getApiUrl } from './api';
import {
downloadFile,
downloadDone,
metadata,
getApiUrl,
reportLink,
getDownloadToken
} from './api';
import { blobStream } from './streams';
import Zip from './zip';
@@ -13,9 +20,14 @@ export default class FileReceiver extends Nanobus {
this.keychain.setPassword(fileInfo.password, fileInfo.url);
}
this.fileInfo = fileInfo;
this.dlToken = null;
this.reset();
}
get id() {
return this.fileInfo.id;
}
get progressRatio() {
return this.progress[0] / this.progress[1];
}
@@ -47,12 +59,16 @@ export default class FileReceiver extends Nanobus {
const meta = await metadata(this.fileInfo.id, this.keychain);
this.fileInfo.name = meta.name;
this.fileInfo.type = meta.type;
this.fileInfo.iv = meta.iv;
this.fileInfo.size = +meta.size;
this.fileInfo.manifest = meta.manifest;
this.fileInfo.flagged = meta.flagged;
this.state = 'ready';
}
async reportLink(reason) {
await reportLink(this.fileInfo.id, this.keychain, reason);
}
sendMessageToSw(msg) {
return new Promise((resolve, reject) => {
const channel = new MessageChannel();
@@ -75,7 +91,7 @@ export default class FileReceiver extends Nanobus {
this.state = 'downloading';
this.downloadRequest = await downloadFile(
this.fileInfo.id,
this.keychain,
this.dlToken,
p => {
this.progress = [p, this.fileInfo.size];
this.emit('progress');
@@ -112,6 +128,7 @@ export default class FileReceiver extends Nanobus {
}
async downloadStream(noSave = false) {
const start = Date.now();
const onprogress = p => {
this.progress = [p, this.fileInfo.size];
this.emit('progress');
@@ -138,6 +155,7 @@ export default class FileReceiver extends Nanobus {
url: this.fileInfo.url,
size: this.fileInfo.size,
nonce: this.keychain.nonce,
dlToken: this.dlToken,
noSave
};
await this.sendMessageToSw(info);
@@ -153,7 +171,7 @@ export default class FileReceiver extends Nanobus {
const downloadPath = `/api/download/${this.fileInfo.id}`;
let downloadUrl = getApiUrl(downloadPath);
if (downloadUrl === downloadPath) {
downloadUrl = `${location.protocol}//${location.host}/api/download/${this.fileInfo.id}`;
downloadUrl = `${location.protocol}//${location.host}${downloadPath}`;
}
const a = document.createElement('a');
a.href = downloadUrl;
@@ -162,11 +180,29 @@ export default class FileReceiver extends Nanobus {
}
let prog = 0;
let hangs = 0;
while (prog < this.fileInfo.size) {
const msg = await this.sendMessageToSw({
request: 'progress',
id: this.fileInfo.id
});
if (msg.progress === prog) {
hangs++;
} else {
hangs = 0;
}
if (hangs > 30) {
// TODO: On Chrome we don't get a cancel
// signal so one is indistinguishable from
// a hang. We may be able to detect
// which end is hung in the service worker
// to improve on this.
const e = new Error('hung download');
e.duration = Date.now() - start;
e.size = this.fileInfo.size;
e.progress = prog;
throw e;
}
prog = msg.progress;
onprogress(prog);
await delay(1000);
@@ -185,11 +221,19 @@ export default class FileReceiver extends Nanobus {
}
}
download(options) {
if (options.stream) {
return this.downloadStream(options.noSave);
async download({ stream, storage, noSave }) {
this.dlToken = storage.getDownloadToken(this.id);
if (!this.dlToken) {
this.dlToken = await getDownloadToken(this.id, this.keychain);
storage.setDownloadToken(this.id, this.dlToken);
}
return this.downloadBlob(options.noSave);
if (stream) {
await this.downloadStream(noSave);
} else {
await this.downloadBlob(noSave);
}
await downloadDone(this.id, this.dlToken);
storage.setDownloadToken(this.id);
}
}

View File

@@ -44,7 +44,6 @@ export default class FileSender extends Nanobus {
}
async upload(archive, bearerToken) {
const start = Date.now();
if (this.cancelled) {
throw new Error(0);
}
@@ -76,7 +75,6 @@ export default class FileSender extends Nanobus {
this.emit('progress'); // HACK to kick MS Edge
try {
const result = await this.uploadRequest.result;
const time = Date.now() - start;
this.msg = 'notifyUploadEncryptDone';
this.uploadRequest = null;
this.progress = [1, 1];
@@ -87,8 +85,8 @@ export default class FileSender extends Nanobus {
name: archive.name,
size: archive.size,
manifest: archive.manifest,
time: time,
speed: archive.size / (time / 1000),
time: result.duration,
speed: archive.size / (result.duration / 1000),
createdAt: Date.now(),
expiresAt: Date.now() + archive.timeLimit * 1000,
secretKey: secretKey,

View File

@@ -1,5 +1,5 @@
/* global AUTH_CONFIG */
import { arrayToB64, b64ToArray } from './utils';
import { arrayToB64, b64ToArray, concat } from './utils';
const encoder = new TextEncoder();
const decoder = new TextDecoder();
@@ -23,13 +23,6 @@ function getOtherInfo(enc) {
return result;
}
function concat(b1, b2) {
const result = new Uint8Array(b1.length + b2.length);
result.set(b1, 0);
result.set(b2, b1.length);
return result;
}
async function concatKdf(key, enc) {
if (key.length !== 32) {
throw new Error('unsupported key length');

View File

@@ -39,7 +39,7 @@ body {
}
.btn {
@apply bg-blue-dark;
@apply bg-blue-60;
@apply text-white;
@apply cursor-pointer;
@apply py-4;
@@ -48,11 +48,17 @@ body {
}
.btn:hover {
@apply bg-blue-darker;
@apply bg-blue-70;
}
.btn:focus {
@apply bg-blue-darker;
@apply bg-blue-70;
}
.btn:disabled {
@apply bg-grey-transparent;
cursor: not-allowed;
}
.checkbox {
@@ -70,7 +76,7 @@ body {
}
.checkbox > label::before {
/* @apply bg-grey-lightest; */
/* @apply bg-grey-10; */
@apply border;
@apply rounded-sm;
@@ -82,16 +88,16 @@ body {
}
.checkbox > label:hover::before {
@apply border-blue-dark;
@apply border-blue-50;
}
.checkbox > input:focus + label::before {
@apply border-blue-dark;
@apply border-blue-50;
}
.checkbox > input:checked + label::before {
@apply bg-blue-dark;
@apply border-blue-dark;
@apply bg-blue-50;
@apply border-blue-50;
background-image: url('../assets/lock.svg');
background-position: center;
@@ -104,8 +110,8 @@ body {
}
.checkbox > input:disabled + label::before {
@apply bg-blue-dark;
@apply border-blue-dark;
@apply bg-blue-50;
@apply border-blue-50;
background-image: url('../assets/lock.svg');
background-position: center;
@@ -138,24 +144,21 @@ footer li:hover {
text-decoration: underline;
}
.feedback-link {
background-color: #000;
background-image: url('../assets/feedback.svg');
background-position: 0.125rem 0.25rem;
background-repeat: no-repeat;
background-size: 1.125rem;
color: #fff;
display: block;
font-size: 0.75rem;
line-height: 0.75rem;
padding: 0.375rem 0.375rem 0.375rem 1.25rem;
text-indent: 0.125rem;
white-space: nowrap;
.link-blue {
@apply text-blue-60;
}
.link-blue:hover {
@apply text-blue-70;
}
.link-blue:focus {
@apply text-blue-70;
}
.main-header img {
height: 32px;
width: 170px;
width: auto;
}
.intro {
@@ -163,6 +166,10 @@ footer li:hover {
height: unset;
}
.dl-bg {
filter: grayscale(1) opacity(0.15);
}
.main {
display: flex;
position: relative;
@@ -193,14 +200,14 @@ footer li:hover {
}
progress {
@apply bg-grey-light;
@apply bg-grey-30;
@apply rounded-sm;
@apply w-full;
@apply h-1;
}
progress::-webkit-progress-bar {
@apply bg-grey-light;
@apply bg-grey-30;
@apply rounded-sm;
@apply w-full;
@apply h-1;
@@ -284,12 +291,65 @@ select {
@apply m-auto;
@apply py-8;
min-height: 36rem;
min-height: 42rem;
max-height: 42rem;
width: calc(100% - 3rem);
}
}
@screen dark {
body {
@apply text-grey-10;
background-image: unset;
}
.btn {
@apply bg-blue-40;
@apply text-white;
}
.btn:hover {
@apply bg-blue-50;
}
.btn:focus {
@apply bg-blue-50;
}
.btn:disabled {
@apply bg-grey-80;
}
.link-blue {
@apply text-blue-40;
}
.link-blue:hover {
@apply text-blue-50;
}
.link-blue:focus {
@apply text-blue-50;
}
.main > section {
@apply bg-grey-90;
}
.mozilla-logo {
background-color: white;
border: 1px solid white;
}
@screen md {
.main > section {
@apply border;
@apply border-grey-80;
}
}
}
@tailwind utilities;
@responsive {
@@ -325,56 +385,9 @@ select {
.signin:hover,
.signin:focus {
@apply shadow-btn;
transform: scale(1.0625);
}
.signin:hover:active {
transform: scale(0.9375);
}
/* begin signin button color experiment */
.white-blue {
@apply border-blue-dark;
@apply border-2;
@apply text-blue-dark;
}
.white-blue:hover,
.white-blue:focus {
@apply bg-blue-dark;
@apply text-white;
}
.blue {
@apply bg-blue-dark;
@apply text-white;
}
.white-violet {
@apply border-violet;
@apply border-2;
@apply text-violet;
}
.white-violet:hover,
.white-violet:focus {
@apply bg-violet;
@apply text-white;
background-image: var(--violet-gradient);
}
.violet {
@apply bg-violet;
@apply text-white;
}
.violet:hover,
.violet:focus {
background-image: var(--violet-gradient);
}
/* end signin button color experiment */

View File

@@ -12,15 +12,15 @@ import pasteManager from './pasteManager';
import storage from './storage';
import metrics from './metrics';
import experiments from './experiments';
import Raven from 'raven-js';
import * as Sentry from '@sentry/browser';
import './main.css';
import User from './user';
import { getTranslator } from './locale';
import Archive from './archive';
import { setTranslate, locale } from './utils';
if (navigator.doNotTrack !== '1' && window.RAVEN_CONFIG) {
Raven.config(window.SENTRY_ID, window.RAVEN_CONFIG).install();
if (navigator.doNotTrack !== '1' && window.SENTRY_CONFIG) {
Sentry.init(window.SENTRY_CONFIG);
}
if (process.env.NODE_ENV === 'production') {
@@ -56,13 +56,14 @@ if (process.env.NODE_ENV === 'production') {
capabilities,
translate,
storage,
raven: Raven,
sentry: Sentry,
user: new User(storage, LIMITS, window.AUTH_CONFIG),
transfer: null,
fileInfo: null
fileInfo: null,
locale: locale()
};
const app = routes(choo());
const app = routes(choo({ hash: true }));
// eslint-disable-next-line require-atomic-updates
window.app = app;
app.use(experiments);

View File

@@ -107,9 +107,10 @@ function completedUpload(archive, duration) {
});
}
function stoppedUpload(archive) {
function stoppedUpload(archive, duration = 0) {
return addEvent('client_upload', {
download_limit: archive.dlimit,
duration: sizeOrder(duration),
file_count: archive.numFiles,
password_protected: !!archive.password,
size: sizeOrder(archive.size),

View File

@@ -2,7 +2,7 @@
`app/` contains the browser code that gets bundled into `app.[hash].js`. It's got all the logic, crypto, and UI. All of it gets used in the browser, and some of it by the server for server side rendering.
The main entrypoint for the browser is [main.js](./main.js) and on the server [routes/index.js](./routes/index.js) gets imported by [/server/routes/pages.js](../server/routes/pages.js)
The main entrypoint for the browser is [main.js](./main.js) and on the server [routes.js](./routes.js) is imported by [/server/routes/pages.js](../server/routes/pages.js)
- `pages` contains display logic an markup for pages
- `routes` contains route definitions and logic

View File

@@ -2,7 +2,7 @@ const choo = require('choo');
const download = require('./ui/download');
const body = require('./ui/body');
module.exports = function(app = choo()) {
module.exports = function(app = choo({ hash: true })) {
app.route('/', body(require('./ui/home')));
app.route('/download/:id', body(download));
app.route('/download/:id/:key', body(download));
@@ -13,7 +13,11 @@ module.exports = function(app = choo()) {
app.route('/oauth', function(state, emit) {
emit('authenticate', state.query.code, state.query.state);
});
app.route('/login', body(require('./ui/home')));
app.route('/login', function(state, emit) {
emit('replaceState', '/');
setTimeout(() => emit('render'));
});
app.route('/report', body(require('./ui/report')));
app.route('*', body(require('./ui/notFound')));
return app;
};

View File

@@ -9,15 +9,16 @@ import contentDisposition from 'content-disposition';
let noSave = false;
const map = new Map();
const IMAGES = /.*\.(png|svg|jpg)$/;
const VERSIONED_ASSET = /\.[A-Fa-f0-9]{8}\.(js|css|png|svg|jpg)$/;
const VERSIONED_ASSET = /\.[A-Fa-f0-9]{8}\.(js|css|png|svg|jpg)(#\w+)?$/;
const DOWNLOAD_URL = /\/api\/download\/([A-Fa-f0-9]{4,})/;
const FONT = /\.woff2?$/;
self.addEventListener('install', event => {
event.waitUntil(precache());
self.addEventListener('install', () => {
self.skipWaiting();
});
self.addEventListener('activate', event => {
event.waitUntil(self.clients.claim());
event.waitUntil(self.clients.claim().then(precache));
});
async function decryptStream(id) {
@@ -33,7 +34,7 @@ async function decryptStream(id) {
keychain.setPassword(file.password, file.url);
}
file.download = downloadStream(id, keychain);
file.download = downloadStream(id, file.dlToken);
const body = await file.download.result;
@@ -83,16 +84,28 @@ async function decryptStream(id) {
}
async function precache() {
try {
await cleanCache();
const cache = await caches.open(version);
const images = assets.match(IMAGES);
await cache.addAll(images);
} catch (e) {
console.error(e);
// cache will get populated on demand
}
}
async function cleanCache() {
const oldCaches = await caches.keys();
for (const c of oldCaches) {
if (c !== version) {
await caches.delete(c);
}
}
const cache = await caches.open(version);
const images = assets.match(IMAGES);
await cache.addAll(images);
return self.skipWaiting();
}
function cacheable(url) {
return VERSIONED_ASSET.test(url) || FONT.test(url);
}
async function cachedOrFetched(req) {
@@ -102,7 +115,7 @@ async function cachedOrFetched(req) {
return cached;
}
const fetched = await fetch(req);
if (fetched.ok && VERSIONED_ASSET.test(req.url)) {
if (fetched.ok && cacheable(req.url)) {
cache.put(req, fetched.clone());
}
return fetched;
@@ -115,7 +128,7 @@ self.onfetch = event => {
const dlmatch = DOWNLOAD_URL.exec(url.pathname);
if (dlmatch) {
event.respondWith(decryptStream(dlmatch[1]));
} else if (VERSIONED_ASSET.test(url.pathname)) {
} else if (cacheable(url.pathname)) {
event.respondWith(cachedOrFetched(req));
}
};
@@ -133,6 +146,7 @@ self.onmessage = event => {
type: event.data.type,
manifest: event.data.manifest,
size: event.data.size,
dlToken: event.data.dlToken,
progress: 0
};
map.set(event.data.id, info);

View File

@@ -35,6 +35,7 @@ class Storage {
this.engine = new Mem();
}
this._files = this.loadFiles();
this.pruneTokens();
}
loadFiles() {
@@ -180,6 +181,48 @@ class Storage {
downloadCount
};
}
setDownloadToken(id, token) {
let otherTokens = {};
try {
otherTokens = JSON.parse(this.get('dlTokens'));
} catch (e) {
//
}
if (token) {
const record = { token, ts: Date.now() };
this.set('dlTokens', JSON.stringify({ ...otherTokens, [id]: record }));
} else {
this.set('dlTokens', JSON.stringify({ ...otherTokens, [id]: undefined }));
}
}
getDownloadToken(id) {
try {
return JSON.parse(this.get('dlTokens'))[id].token;
} catch (e) {
return undefined;
}
}
pruneTokens() {
try {
const now = Date.now();
const tokens = JSON.parse(this.get('dlTokens'));
const keep = {};
for (const id of Object.keys(tokens)) {
const t = tokens[id];
if (t.ts > now - 7 * 86400 * 1000) {
keep[id] = t;
}
}
if (Object.keys(keep).length < Object.keys(tokens).length) {
this.set('dlTokens', JSON.stringify(keep));
}
} catch (e) {
console.error(e);
}
}
}
export default new Storage();

View File

@@ -1,4 +1,4 @@
/* global ReadableStream TransformStream */
/* global TransformStream */
export function transformStream(readable, transformer, oncancel) {
try {

View File

@@ -54,18 +54,22 @@ class Account extends Component {
createElement() {
if (!this.enabled) {
return html`
<div></div>
<send-account></send-account>
`;
}
const user = this.state.user;
const translate = this.state.translate;
this.setLocal();
if (user.loginRequired && !this.local.loggedIn) {
return html`
<send-account></send-account>
`;
}
if (!this.local.loggedIn) {
return html`
<send-account>
<button
class="px-4 py-2 md:px-8 md:py-4 focus:outline signin ${this
.buttonClass}"
class="px-4 py-2 md:px-8 md:py-4 focus:outline signin border-2 link-blue border-blue-60 hover:border-blue-70 dark:border-blue-40 dark:hover:border-blue-50"
onclick="${e => this.login(e)}"
title="${translate('signInOnlyButton')}"
>
@@ -79,19 +83,19 @@ class Account extends Component {
<input
type="image"
alt="${user.email}"
class="w-8 h-8 rounded-full border text-blue md:text-white focus:outline"
class="w-8 h-8 rounded-full border text-blue-50 md:text-white focus:outline"
src="${user.avatar}"
onclick="${e => this.avatarClick(e)}"
/>
<ul
id="accountMenu"
class="invisible absolute top-0 right-0 mt-10 pt-2 pb-2 bg-white shadow-md whitespace-no-wrap outline-none z-50"
class="invisible absolute top-0 right-0 mt-10 pt-2 pb-2 bg-white shadow-md whitespace-no-wrap outline-none z-50 dark:bg-grey-80"
onblur="${e => this.hideMenu(e)}"
>
<li class="p-2 text-grey-dark">${user.email}</li>
<li class="p-2 text-grey-60 dark:text-grey-50">${user.email}</li>
<li>
<button
class="block w-full text-left px-4 py-2 text-grey-darkest hover:bg-blue hover:text-white cursor-pointer focus:outline"
class="block w-full text-left px-4 py-2 text-grey-80 dark:text-grey-30 hover:bg-blue-50 hover:text-white cursor-pointer focus:outline"
onclick="${e => this.logout(e)}"
title="${translate('signOut')}"
>

View File

@@ -30,6 +30,12 @@ function password(state) {
return html`
<div class="mb-2 px-1">
<input
id="autocomplete-decoy"
class="hidden"
type="password"
value="lol"
/>
<div class="checkbox inline-block mr-3">
<input
id="add-password"
@@ -46,7 +52,7 @@ function password(state) {
id="password-input"
class="${state.archive.password
? ''
: 'invisible'} border rounded focus:border-blue-dark leading-normal my-1 py-1 px-2 h-8"
: 'invisible'} border rounded focus:border-blue-60 leading-normal my-1 py-1 px-2 h-8 dark:bg-grey-80"
autocomplete="off"
maxlength="${MAX_LENGTH}"
type="password"
@@ -58,7 +64,7 @@ function password(state) {
<label
id="password-msg"
for="password-input"
class="block text-xs text-grey-darker"
class="block text-xs text-grey-70"
></label>
</div>
`;
@@ -106,7 +112,9 @@ function password(state) {
function fileInfo(file, action) {
return html`
<send-file class="flex flex-row items-center p-3 w-full">
<img class="h-8" src="${assets.get('blue_file.svg')}"/>
<svg class="h-8 w-8 text-white dark:text-grey-90">
<use xlink:href="${assets.get('blue_file.svg')}#icon"/>
</svg>
<p class="ml-4 w-full">
<h1 class="text-base font-medium word-break-all">${file.name}</h1>
<div class="text-sm font-normal opacity-75 pt-1">${bytes(
@@ -120,7 +128,9 @@ function fileInfo(file, action) {
function archiveInfo(archive, action) {
return html`
<p class="w-full flex items-center">
<img class="mr-3 flex-shrink-0" src="${assets.get('blue_file.svg')}"/>
<svg class="h-8 w-6 mr-3 flex-shrink-0 text-white dark:text-grey-90">
<use xlink:href="${assets.get('blue_file.svg')}#icon"/>
</svg>
<p class="flex-grow">
<h1 class="text-base font-medium word-break-all">${archive.name}</h1>
<div class="text-sm font-normal opacity-75 pt-1">${bytes(
@@ -140,7 +150,7 @@ function archiveDetails(translate, archive) {
ontoggle="${toggled}"
>
<summary
class="flex items-center text-blue-dark text-sm cursor-pointer outline-none"
class="flex items-center link-blue text-sm cursor-pointer outline-none"
>
<svg
class="fill-current w-4 h-4 mr-1"
@@ -170,20 +180,25 @@ module.exports = function(state, emit, archive) {
state.capabilities.share || platform() === 'android'
? html`
<button
class="text-blue-dark hover:text-blue-darker focus:text-blue-darker self-end flex items-end"
class="link-blue self-end flex items-start"
onclick=${share}
title="Share link"
>
<img src="${assets.get('share-24.svg')}" class="mr-2" />Share link
<svg class="h-4 w-4 mr-2">
<use xlink:href="${assets.get('share-24.svg')}#icon" />
</svg>
Share link
</button>
`
: html`
<button
class="text-blue-dark hover:text-blue-darker focus:text-blue-darker focus:outline self-end flex items-center"
class="link-blue focus:outline self-end flex items-center"
onclick=${copy}
title="${state.translate('copyLinkButton')}"
>
<img src="${assets.get('copy-16.svg')}" class="mr-2" />
<svg class="h-4 w-4 mr-2">
<use xlink:href="${assets.get('copy-16.svg')}#icon" />
</svg>
${state.translate('copyLinkButton')}
</button>
`;
@@ -191,12 +206,14 @@ module.exports = function(state, emit, archive) {
platform() === 'web'
? html`
<a
class="flex items-baseline text-blue-dark hover:text-blue-darker focus:text-blue-darker"
class="flex items-baseline link-blue"
href="${archive.url}"
title="${state.translate('downloadButtonLabel')}"
tabindex="0"
>
<img src="${assets.get('dl.svg')}" class="mr-2" />
<svg class="h-4 w-3 mr-2">
<use xlink:href="${assets.get('dl.svg')}#icon" />
</svg>
${state.translate('downloadButtonLabel')}
</a>
`
@@ -206,7 +223,7 @@ module.exports = function(state, emit, archive) {
return html`
<send-archive
id="archive-${archive.id}"
class="flex flex-col items-start rounded shadow-light bg-white p-4 w-full"
class="flex flex-col items-start rounded shadow-light bg-white p-4 w-full dark:bg-grey-90 dark:border dark:border-grey-70"
>
${archiveInfo(
archive,
@@ -225,7 +242,7 @@ module.exports = function(state, emit, archive) {
${expiryInfo(state.translate, archive)}
</div>
${archiveDetails(state.translate, archive)}
<hr class="w-full border-t my-4" />
<hr class="w-full border-t my-4 dark:border-grey-70" />
<div class="flex justify-between w-full">
${dl} ${copyOrShare}
</div>
@@ -269,18 +286,21 @@ module.exports = function(state, emit, archive) {
module.exports.wip = function(state, emit) {
return html`
<send-upload-area class="flex flex-col bg-white h-full w-full" id="wip">
<send-upload-area
class="flex flex-col bg-white h-full w-full dark:bg-grey-90"
id="wip"
>
${list(
Array.from(state.archive.files)
.reverse()
.map(f =>
fileInfo(f, remove(f, state.translate('deleteButtonHover')))
),
'flex-shrink bg-grey-lightest rounded-t overflow-y-auto px-6 py-4 md:h-full md:max-h-half-screen',
'bg-white px-2 my-2 shadow-light rounded'
'flex-shrink bg-grey-10 rounded-t overflow-y-auto px-6 py-4 md:h-full md:max-h-half-screen dark:bg-black',
'bg-white px-2 my-2 shadow-light rounded dark:bg-grey-90 dark:border dark:border-grey-80'
)}
<div
class="flex-shrink-0 flex-grow flex items-end p-4 bg-grey-lightest rounded-b mb-1 font-medium"
class="flex-shrink-0 flex-grow flex items-end p-4 bg-grey-10 rounded-b mb-1 font-medium dark:bg-grey-90"
>
<input
id="file-upload"
@@ -300,10 +320,12 @@ module.exports.wip = function(state, emit) {
class="flex items-center cursor-pointer"
title="${state.translate('addFilesButton')}"
>
<img src="${assets.get('addfiles.svg')}" class="w-6 h-6 mr-2" />
<svg class="w-6 h-6 mr-2 link-blue">
<use xlink:href="${assets.get('addfiles.svg')}#plus" />
</svg>
${state.translate('addFilesButton')}
</label>
<div class="font-normal text-sm text-grey-darker">
<div class="font-normal text-sm text-grey-70 dark:text-grey-40">
${state.translate('totalSize', {
size: bytes(state.archive.size)
})}
@@ -378,22 +400,22 @@ module.exports.uploading = function(state, emit) {
return html`
<send-upload-area
id="${archive.id}"
class="flex flex-col items-start rounded shadow-light bg-white p-4 w-full"
class="flex flex-col items-start rounded shadow-light bg-white p-4 w-full dark:bg-grey-90"
>
${archiveInfo(archive)}
<div class="text-xs text-grey-dark w-full mt-2 mb-2">
<div class="text-xs opacity-75 w-full mt-2 mb-2">
${expiryInfo(state.translate, {
dlimit: state.archive.dlimit,
dtotal: 0,
expiresAt: Date.now() + 500 + state.archive.timeLimit * 1000
})}
</div>
<div class="text-blue-dark text-sm font-medium mt-2">
<div class="link-blue text-sm font-medium mt-2">
${progressPercent}
</div>
<progress class="my-3" value="${progress}">${progressPercent}</progress>
<button
class="text-blue-dark hover:text-blue-darker focus:text-blue-darker self-end font-medium"
class="link-blue self-end font-medium"
onclick=${cancel}
title="${state.translate('deletePopupCancel')}"
>
@@ -415,7 +437,7 @@ module.exports.empty = function(state, emit) {
? ''
: html`
<button
class="center font-medium text-sm text-blue-dark hover:text-blue-darker focus:text-blue-darker mt-4 mb-2"
class="center font-medium text-sm link-blue mt-4 mb-2"
onclick="${event => {
event.stopPropagation();
emit('signup-cta', 'drop');
@@ -428,14 +450,16 @@ module.exports.empty = function(state, emit) {
`;
return html`
<send-upload-area
class="flex flex-col items-center justify-center border-2 border-dashed border-grey-transparent rounded px-6 py-16 h-full w-full"
class="flex flex-col items-center justify-center border-2 border-dashed border-grey-transparent rounded px-6 py-16 h-full w-full dark:border-grey-60"
onclick="${e => {
if (e.target.tagName !== 'LABEL') {
document.getElementById('file-upload').click();
}
}}"
>
<img src="${assets.get('addfiles.svg')}" width="48" height="48" />
<svg class="w-10 h-10 link-blue">
<use xlink:href="/${assets.get('addfiles.svg')}#plus" />
</svg>
<div class="pt-6 pb-2 text-center text-lg font-bold tracking-wide">
${state.translate('dragAndDropFiles')}
</div>
@@ -464,19 +488,21 @@ module.exports.empty = function(state, emit) {
>
${state.translate('addFilesButton')}
</label>
<p
class="font-normal text-sm text-grey-50 dark:text-grey-40 my-6 mx-12 text-center max-w-sm leading-loose"
>
${state.translate('trustWarningMessage')}
</p>
${upsell}
</send-upload-area>
`;
function focus(event) {
event.target.nextElementSibling.classList.add('bg-blue-darker', 'outline');
event.target.nextElementSibling.classList.add('bg-blue-70', 'outline');
}
function blur(event) {
event.target.nextElementSibling.classList.remove(
'bg-blue-darker',
'outline'
);
event.target.nextElementSibling.classList.remove('bg-blue-70', 'outline');
}
function add(event) {
@@ -501,12 +527,28 @@ module.exports.preview = function(state, emit) {
</div>
`;
return html`
<send-archive class="flex flex-col max-h-full bg-white p-4 w-full md:w-128">
<div class="border rounded py-3 px-6">
<send-archive
class="flex flex-col max-h-full bg-white w-full dark:bg-grey-90"
>
<div class="border rounded py-3 px-4 dark:border-grey-70">
${archiveInfo(archive)} ${details}
</div>
<div class="checkbox inline-block mt-6 mx-auto">
<input
id="trust-download"
type="checkbox"
autocomplete="off"
onchange="${toggleDownloadEnabled}"
/>
<label for="trust-download">
${state.translate('downloadTrustCheckbox', {
count: archive.manifest.files.length
})}
</label>
</div>
<button
id="download-btn"
disabled
class="btn rounded-lg mt-4 w-full flex-shrink-0 focus:outline"
title="${state.translate('downloadButtonLabel')}"
onclick=${download}
@@ -516,6 +558,13 @@ module.exports.preview = function(state, emit) {
</send-archive>
`;
function toggleDownloadEnabled(event) {
event.stopPropagation();
const checked = event.target.checked;
const btn = document.getElementById('download-btn');
btn.disabled = !checked;
}
function download(event) {
event.preventDefault();
event.target.disabled = true;
@@ -529,10 +578,10 @@ module.exports.downloading = function(state) {
const progressPercent = percent(progress);
return html`
<send-archive
class="flex flex-col bg-white rounded shadow-light p-4 w-full max-w-sm md:w-128"
class="flex flex-col bg-white rounded shadow-light p-4 w-full max-w-sm md:w-128 dark:bg-grey-90"
>
${archiveInfo(archive)}
<div class="text-blue-dark text-sm font-medium mt-2">
<div class="link-blue text-sm font-medium mt-2">
${progressPercent}
</div>
<progress class="my-3" value="${progress}">${progressPercent}</progress>

View File

@@ -8,7 +8,9 @@ function banner(state) {
return; // server side
}
const show =
!state.capabilities.standalone && !state.route.startsWith('/unsupported/');
!state.capabilities.standalone &&
!state.route.startsWith('/unsupported/') &&
state.locale === 'en-US';
if (show) {
return state.cache(Promo, 'promo').render();
}
@@ -18,7 +20,7 @@ module.exports = function body(main) {
return function(state, emit) {
const b = html`
<body
class="flex flex-col items-center font-sans md:h-screen md:bg-grey-lightest"
class="flex flex-col items-center font-sans md:h-screen md:bg-grey-10 dark:bg-black"
>
${banner(state, emit)} ${state.cache(Header, 'header').render()}
${main(state, emit)} ${state.cache(Footer, 'footer').render()}

View File

@@ -10,14 +10,14 @@ module.exports = function(name, url) {
<h1 class="text-3xl font-bold my-4">
${state.translate('notifyUploadEncryptDone')}
</h1>
<p class="font-normal leading-normal text-grey-darkest word-break-all">
<p class="font-normal leading-normal text-grey-80 dark:text-grey-40">
${state.translate('copyLinkDescription')} <br />
${name}
<span class="word-break-all">${name}</span>
</p>
<input
type="text"
id="share-url"
class="w-full my-4 border rounded-lg leading-loose h-12 px-2 py-1"
class="w-full my-4 border rounded-lg leading-loose h-12 px-2 py-1 dark:bg-grey-80"
value="${url}"
readonly="true"
/>
@@ -29,7 +29,7 @@ module.exports = function(name, url) {
${state.translate('copyLinkButton')}
</button>
<button
class="text-blue-dark hover:text-blue-darker focus:text-blue-darker my-4 font-medium cursor-pointer focus:outline"
class="link-blue my-4 font-medium cursor-pointer focus:outline"
onclick="${close}"
title="${state.translate('okButton')}"
>

View File

@@ -1,5 +1,6 @@
/* global downloadMetadata */
const html = require('choo/html');
const assets = require('../../common/assets');
const archiveTile = require('./archiveTile');
const modal = require('./modal');
const noStreams = require('./noStreams');
@@ -31,20 +32,51 @@ function downloading(state, emit) {
}
function preview(state, emit) {
if (state.fileInfo.flagged) {
return html`
<div
class="flex flex-col w-full max-w-md h-full mx-auto items-center justify-center"
>
<h1 class="text-xl font-bold">${state.translate('downloadFlagged')}</h1>
</div>
`;
}
if (!state.capabilities.streamDownload && state.fileInfo.size > BIG_SIZE) {
return noStreams(state, emit);
}
return html`
<div
class="flex flex-col w-full max-w-md h-full mx-auto items-center justify-center"
>
<h1 class="text-3xl font-bold mb-4">
${state.translate('downloadTitle')}
</h1>
<p class="w-full text-grey-darkest text-center leading-normal">
${state.translate('downloadDescription')}
</p>
${archiveTile.preview(state, emit)}
<div class="w-full md:flex md:flex-row items-stretch md:flex-1">
<div
class="px-2 w-full md:px-0 flex-half md:flex md:flex-col mt-12 md:pr-8 pb-4"
>
<h1 class="text-3xl font-bold mb-4 text-center md:text-left">
${state.translate('downloadTitle')}
</h1>
<p
class="text-grey-80 leading-normal dark:text-grey-40 mb-4 text-center md:text-left"
>
${state.translate('downloadDescription')}
</p>
<p
class="text-grey-80 leading-normal dark:text-grey-40 font-semibold text-center md:mb-8 md:text-left"
>
${state.translate('downloadConfirmDescription')}
</p>
<img
class="hidden md:block dl-bg w-full"
src="${assets.get('intro.svg')}"
/>
</div>
<div
class="w-full flex-half flex-half md:flex md:flex-col md:justify-center"
>
${archiveTile.preview(state, emit)}
<a href="/report" class="link-blue mt-4 text-center block"
>${state.translate('reportFile', {
count: state.fileInfo.manifest.files.length
})}</a
>
</div>
</div>
`;
}
@@ -53,9 +85,17 @@ module.exports = function(state, emit) {
let content = '';
if (!state.fileInfo) {
state.fileInfo = createFileInfo(state);
if (!state.fileInfo.nonce) {
if (downloadMetadata.status === 404) {
return notFound(state);
}
if (!state.fileInfo.nonce) {
// coming from something like the browser back button
return location.reload();
}
}
if (state.fileInfo.dead) {
return notFound(state);
}
if (!state.transfer && !state.fileInfo.requiresPassword) {
@@ -81,7 +121,7 @@ module.exports = function(state, emit) {
<main class="main">
${state.modal && modal(state, emit)}
<section
class="relative h-full w-full p-6 md:p-8 md:rounded-xl md:shadow-big"
class="relative overflow-hidden h-full w-full p-6 md:p-8 md:rounded-xl md:shadow-big md:flex md:flex-col"
>
${content}
</section>

View File

@@ -2,23 +2,32 @@ const html = require('choo/html');
const assets = require('../../common/assets');
module.exports = function(state) {
const btnText = state.user.loggedIn ? 'okButton' : 'sendYourFilesLink';
return html`
<div
id="download-complete"
class="flex flex-col items-center justify-center h-full w-full bg-white p-2"
class="flex flex-col items-center justify-center h-full w-full bg-white p-2 dark:bg-grey-90"
>
<h1 class="text-center text-3xl font-bold my-2">
${state.translate('downloadFinish')}
</h1>
<img src="${assets.get('completed.svg')}" class="my-12 h-48" />
<p class="text-grey-darkest leading-normal">
<img src="${assets.get('completed.svg')}" class="my-8 h-48" />
<p
class="text-grey-80 leading-normal dark:text-grey-40 ${state.user
.loggedIn
? 'hidden'
: ''}"
>
${state.translate('trySendDescription')}
</p>
<p class="my-5">
<a href="/" class="btn rounded-lg flex items-center mt-4" role="button"
>${state.translate('sendYourFilesLink')}</a
>${state.translate(btnText)}</a
>
</p>
<p class="">
<a href="/report" class="link-blue">${state.translate('reportFile')}</a>
</p>
</div>
`;
};

58
app/ui/downloadDialog.js Normal file
View File

@@ -0,0 +1,58 @@
const html = require('choo/html');
module.exports = function() {
return function(state, emit, close) {
const archive = state.fileInfo;
return html`
<send-download-dialog
class="flex flex-col w-full max-w-sm h-full mx-auto items-center justify-center"
>
<h1 class="text-3xl font-bold mb-4">
${state.translate('downloadConfirmTitle')}
</h1>
<p
class="w-full text-grey-80 text-center leading-normal dark:text-grey-40 mb-8"
>
${state.translate('downloadConfirmDescription')}
</p>
<div class="checkbox inline-block mr-3 mb-8">
<input
id="trust-download"
type="checkbox"
autocomplete="off"
onchange="${toggleDownloadEnabled}"
/>
<label for="trust-download">
${state.translate('downloadTrustCheckbox')}
</label>
</div>
<button
id="download-btn"
disabled
class="btn rounded-lg w-full flex-shrink-0"
onclick="${download}"
title="${state.translate('downloadButtonLabel')}"
>
${state.translate('downloadButtonLabel')}
</button>
<a href="/report" class="link-blue mt-8"
>${state.translate('reportFile')}</a
>
</send-download-dialog>
`;
function toggleDownloadEnabled(event) {
event.stopPropagation();
const checked = event.target.checked;
const btn = document.getElementById('download-btn');
btn.disabled = !checked;
}
function download(event) {
event.preventDefault();
close();
event.target.disabled = true;
emit('download', archive);
}
};
};

View File

@@ -6,12 +6,14 @@ module.exports = function(state, emit) {
const div = html`
<div
class="h-full w-full flex flex-col items-center justify-center bg-white py-8 max-w-md mx-auto"
class="h-full w-full flex flex-col items-center justify-center bg-white py-8 max-w-md mx-auto dark:bg-grey-90"
>
<h1 class="text-3xl font-bold mb-4">
${state.translate('downloadTitle')}
</h1>
<p class="w-full mb-4 text-center text-grey-darkest leading-normal">
<p
class="w-full mb-4 text-center text-grey-80 dark:text-grey-40 leading-normal"
>
${state.translate('downloadDescription')}
</p>
<form
@@ -19,11 +21,17 @@ module.exports = function(state, emit) {
onsubmit="${checkPassword}"
data-no-csrf
>
<input
id="autocomplete-decoy"
class="hidden"
type="password"
value="lol"
/>
<input
id="password-input"
class="w-full border-l border-t border-b rounded-l-lg rounded-r-none ${invalid
? 'border-red'
: 'border-grey'} leading-loose px-2 py-1"
? 'border-red dark:border-red-40'
: 'border-grey'} leading-loose px-2 py-1 dark:bg-grey-80"
maxlength="32"
autocomplete="off"
placeholder="${state.translate('unlockInputPlaceholder')}"
@@ -34,7 +42,7 @@ module.exports = function(state, emit) {
type="submit"
id="password-btn"
class="btn rounded-r-lg rounded-l-none ${invalid
? 'bg-red hover:bg-red focus:bg-red'
? 'bg-red hover:bg-red focus:bg-red dark:bg-red-40'
: ''}"
value="${state.translate('unlockButtonLabel')}"
title="${state.translate('unlockButtonLabel')}"
@@ -42,7 +50,7 @@ module.exports = function(state, emit) {
</form>
<label
id="password-error"
class="${invalid ? '' : 'invisible'} text-red my-4"
class="${invalid ? '' : 'invisible'} text-red dark:text-red-40 my-4"
for="password-input"
>
${state.translate('passwordTryAgain')}
@@ -61,8 +69,13 @@ module.exports = function(state, emit) {
const input = document.getElementById('password-input');
const btn = document.getElementById('password-btn');
label.classList.add('invisible');
input.classList.remove('border-red');
btn.classList.remove('bg-red', 'hover:bg-red', 'focus:bg-red');
input.classList.remove('border-red', 'dark:border-red-40');
btn.classList.remove(
'bg-red',
'hover:bg-red',
'focus:bg-red',
'dark:bg-red-40'
);
}
function checkPassword(event) {
@@ -72,7 +85,9 @@ module.exports = function(state, emit) {
const password = el.value;
if (password.length > 0) {
document.getElementById('password-btn').disabled = true;
state.fileInfo.url = window.location.href;
// Strip any url parameters between fileId and secretKey
const fileInfoUrl = window.location.href.replace(/\?.+#/, '#');
state.fileInfo.url = fileInfoUrl;
state.fileInfo.password = password;
emit('getMetadata');
}

View File

@@ -3,6 +3,7 @@ const assets = require('../../common/assets');
const modal = require('./modal');
module.exports = function(state, emit) {
const btnText = state.user.loggedIn ? 'okButton' : 'sendYourFilesLink';
return html`
<main class="main">
${state.modal && modal(state, emit)}
@@ -13,12 +14,17 @@ module.exports = function(state, emit) {
${state.translate('errorPageHeader')}
</h1>
<img class="my-12 h-48" src="${assets.get('error.svg')}" />
<p class="max-w-md text-center text-grey-darkest leading-normal">
<p
class="max-w-md text-center text-grey-80 leading-normal dark:text-grey-40 ${state
.user.loggedIn
? 'hidden'
: ''}"
>
${state.translate('trySendDescription')}
</p>
<p class="my-5">
<a href="/" class="btn rounded-lg flex items-center" role="button"
>${state.translate('sendYourFilesLink')}</a
>${state.translate(btnText)}</a
>
</p>
</section>

View File

@@ -1,7 +1,5 @@
const html = require('choo/html');
const Component = require('choo/component');
const version = require('../../package.json').version;
const { browserName } = require('../utils');
class Footer extends Component {
constructor(name, state) {
@@ -15,16 +13,11 @@ class Footer extends Component {
createElement() {
const translate = this.state.translate;
const browser = browserName();
const feedbackUrl = `https://qsurvey.mozilla.com/s3/Firefox-Send-Product-Feedback?ver=${version}&browser=${browser}`;
return html`
<footer
class="flex flex-col md:flex-row items-start w-full flex-none self-start p-6 md:p-8 font-medium text-xs text-grey-dark md:items-center justify-between"
class="flex flex-col md:flex-row items-start w-full flex-none self-start p-6 md:p-8 font-medium text-xs text-grey-60 dark:text-grey-40 md:items-center justify-between"
>
<a
class="mozilla-logo pb-10 md:pb-0 m-2"
href="https://www.mozilla.org/"
>
<a class="mozilla-logo m-2" href="https://www.mozilla.org/">
Mozilla
</a>
<ul
@@ -46,17 +39,6 @@ class Footer extends Component {
<li class="m-2">
<a href="https://github.com/mozilla/send">GitHub </a>
</li>
<li class="m-2">
<a
href="${feedbackUrl}"
rel="noreferrer noopener"
class="feedback-link"
alt="Feedback"
target="_blank"
>
${translate('siteFeedback')}
</a>
</li>
</ul>
</footer>
`;

View File

@@ -16,15 +16,27 @@ class Header extends Component {
this.account.render();
return false;
}
createElement() {
const title =
platform() === 'android'
? html`
<a class=""><img src="${assets.get('logo.svg')}"/></a>
<a class="flex flex-row items-center">
<img src="${assets.get('icon.svg')}" />
<svg class="w-48">
<use xlink:href="${assets.get('wordmark.svg')}#logo" />
</svg>
</a>
`
: html`
<a class="" href="/"><img src="${assets.get('logo.svg')}"/></a>
<a class="flex flex-row items-center" href="/">
<img
alt="${this.state.translate('title')}"
src="${assets.get('icon.svg')}"
/>
<svg viewBox="66 0 340 64" class="w-48 md:w-64">
<use xlink:href="${assets.get('wordmark.svg')}#logo" />
</svg>
</a>
`;
return html`
<header

View File

@@ -5,6 +5,9 @@ const modal = require('./modal');
const intro = require('./intro');
module.exports = function(state, emit) {
if (state.user.loginRequired && !state.user.loggedIn) {
emit('signup-cta', 'required');
}
const archives = state.storage.files
.filter(archive => !archive.expired)
.map(archive => archiveTile(state, emit, archive));

View File

@@ -4,7 +4,7 @@ const assets = require('../../common/assets');
module.exports = function intro(state) {
return html`
<send-intro
class="flex flex-col items-center justify-center bg-white px-6 md:py-0 py-6 mb-0 h-full w-full"
class="flex flex-col items-center justify-center bg-white px-6 md:py-0 py-6 mb-0 h-full w-full dark:bg-grey-90"
>
<div class="mt-12 flex flex-col h-full">
<h1 class="text-3xl font-bold md:pb-2">

View File

@@ -2,11 +2,12 @@ const html = require('choo/html');
const modal = require('./modal');
module.exports = function(state, emit) {
state.modal = null;
return html`
<main class="main">
${state.modal && modal(state, emit)}
<div
class="flex flex-col items-center bg-white m-4 px-6 py-8 border border-grey-light md:border-none md:px-12 md:py-16 shadow w-full md:h-full"
class="flex flex-col items-center bg-white m-4 px-6 py-8 border border-grey-30 md:border-none md:px-12 md:py-16 shadow w-full md:h-full dark:bg-grey-90"
>
<h1 class="text-center text-3xl font-bold">
${state.translate('legalTitle')}
@@ -19,7 +20,7 @@ module.exports = function(state, emit) {
href="https://www.mozilla.org/privacy/"
target="__blank"
rel="noopener noreferrer"
class="text-blue-dark hover:underline"
class="link-blue hover:underline"
>Mozilla Privacy Policy</a
>
<span
@@ -31,7 +32,7 @@ module.exports = function(state, emit) {
href="https://github.com/mozilla/send/blob/master/docs/metrics.md"
target="__blank"
rel="noopener noreferrer"
class="text-blue-dark hover:underline"
class="link-blue hover:underline"
>here</a
>.
</p>

View File

@@ -3,13 +3,12 @@ const html = require('choo/html');
module.exports = function(state, emit) {
return html`
<send-modal
class="absolute inset-0 flex items-center justify-center overflow-hidden z-40 bg-white md:rounded-xl md:my-8"
onclick="${close}"
class="absolute inset-0 flex items-center justify-center overflow-hidden z-40 bg-white md:rounded-xl md:my-8 dark:bg-grey-90"
>
<div
class="h-full w-full max-h-screen absolute top-0 flex items-center justify-center"
class="h-full w-full max-h-screen absolute top-0 flex justify-center md:items-center"
>
<div class="w-full" onclick="${e => e.stopPropagation()}">
<div class="w-full">
${state.modal(state, emit, close)}
</div>
</div>

View File

@@ -12,16 +12,16 @@ module.exports = function(state, emit) {
'downloadTitle'
)}</h1>
<p
class="w-full p-2 border border-yellow-light rounded md:w-4/5 text-orange-dark bg-yellow-lighter text-center leading-normal"
class="w-full p-2 border border-yellow-50 rounded md:w-4/5 text-orange-60 bg-yellow-40 text-center leading-normal"
>
⚠️ ${state.translate('noStreamsWarning')} ⚠️
</p>
<form class="md:w-128" onsubmit=${submit}>
<fieldset class="border rounded p-4 my-4" onchange=${optionChanged}>
<div class="flex items-center mb-2">
<img class="mr-3 flex-shrink-0" src="${assets.get(
'blue_file.svg'
)}"/>
<svg class="h-8 w-6 mr-3 flex-shrink-0 text-white dark:text-grey-90">
<use xlink:href="${assets.get('blue_file.svg')}#icon"/>
</svg>
<p class="flex-grow">
<h1 class="text-base font-medium word-break-all">${
archive.name
@@ -55,6 +55,11 @@ module.exports = function(state, emit) {
value="${state.translate('copyLinkButton')}"
title="${state.translate('copyLinkButton')}"
type="submit" />
<p
class="text-grey-80 leading-normal dark:text-grey-40 font-semibold text-center md:my-8 md:text-left"
>
${state.translate('downloadConfirmDescription')}
</p>
</form>
</div>
`;
@@ -64,6 +69,7 @@ module.exports = function(state, emit) {
const choice = event.target.value;
const button = event.currentTarget.nextElementSibling;
let title = button.title;
console.error(choice, title);
switch (choice) {
case 'copy':
title = state.translate('copyLinkButton');

View File

@@ -3,6 +3,7 @@ const assets = require('../../common/assets');
const modal = require('./modal');
module.exports = function(state, emit) {
const btnText = state.user.loggedIn ? 'okButton' : 'sendYourFilesLink';
return html`
<main class="main">
${state.modal && modal(state, emit)}
@@ -13,12 +14,22 @@ module.exports = function(state, emit) {
${state.translate('expiredTitle')}
</h1>
<img src="${assets.get('notFound.svg')}" class="my-12" />
<p class="max-w-md text-center text-grey-darkest leading-normal">
<p
class="max-w-md text-center text-grey-80 leading-normal dark:text-grey-40 ${state
.user.loggedIn
? 'hidden'
: ''}"
>
${state.translate('trySendDescription')}
</p>
<p class="my-5">
<a href="/" class="btn rounded-lg flex items-center" role="button"
>${state.translate('sendYourFilesLink')}</a
>${state.translate(btnText)}</a
>
</p>
<p class="">
<a href="/report" class="link-blue"
>${state.translate('reportFile')}</a
>
</p>
</section>

View File

@@ -15,7 +15,7 @@ class Promo extends Component {
createElement() {
return html`
<send-promo
class="w-full flex-row items-center content-center justify-center bg-white text-grey-darkest px-4 py-3 flex border-b border-grey-banner leading-normal"
class="w-full flex-row items-center content-center justify-center bg-white text-grey-80 px-4 py-3 flex border-b border-grey-banner leading-normal dark:bg-grey-90 dark:text-grey-20 dark:border-grey-80"
>
<div class="flex items-center mx-auto">
<img
@@ -24,11 +24,11 @@ class Promo extends Component {
alt="Firefox"
/>
<span class="ml-2 sm:ml-4 text-xs sm:text-base">
${this.state.translate('trailheadPromo')}${' '}
${`Like Firefox Send? You'll love our new full-device VPN. `}
<a
class="underline text-blue-dark"
href="http://www.mozilla.org/firefox/accounts/?utm_source=send.firefox.com&utm_medium=banner&utm_campaign=trailhead&utm_content=protect-your-privacy"
>${this.state.translate('learnMore')}</a
class="underline link-blue"
href="https://vpn.mozilla.org/?utm_source=send.firefox.com&utm_medium=referral&utm_content=Try+Firefox+Private+Network&utm_campaign=top-bar"
>${`Get it today`}</a
>
</span>
</div>

139
app/ui/report.js Normal file
View File

@@ -0,0 +1,139 @@
const html = require('choo/html');
const raw = require('choo/html/raw');
const assets = require('../../common/assets');
const REPORTABLES = ['Malware', 'Pii', 'Abuse'];
module.exports = function(state, emit) {
let submitting = false;
const file = state.fileInfo;
if (!file) {
return html`
<main class="main">
<section
class="flex flex-col items-center justify-center h-full w-full p-6 md:p-8 overflow-hidden md:rounded-xl md:shadow-big"
>
<p class="text-xl text-center mb-4 leading-normal">
${state.translate('reportUnknownDescription')}
</p>
<p class="text-center">
${raw(
replaceLinks(state.translate('reportReasonCopyright'), [
'https://www.mozilla.org/about/legal/report-infringement/'
])
)}
</p>
</section>
</main>
`;
}
if (file.reported) {
return html`
<main class="main">
<section
class="flex flex-col items-center justify-center h-full w-full p-6 md:p-8 overflow-hidden md:rounded-xl md:shadow-big"
>
<h1 class="text-center text-3xl font-bold my-2">
${state.translate('reportedTitle')}
</h1>
<p class="max-w-md text-center leading-normal">
${state.translate('reportedDescription')}
</p>
<img src="${assets.get('notFound.svg')}" class="my-12" />
<p class="my-5">
<a href="/" class="btn rounded-lg flex items-center" role="button"
>${state.translate('okButton')}</a
>
</p>
</section>
</main>
`;
}
return html`
<main class="main">
<section
class="relative h-full w-full p-6 md:p-8 md:rounded-xl md:shadow-big"
>
<div
class="flex flex-col w-full max-w-sm h-full mx-auto items-center justify-center"
>
<h1 class="text-2xl font-bold mb-4">
${state.translate('reportFile')}
</h1>
<p class="mb-4 leading-normal font-semibold">
${state.translate('reportDescription')}
</p>
<form onsubmit="${report}" data-no-csrf>
<fieldset onchange="${optionChanged}">
<ul
class="list-none p-4 mb-6 rounded-sm bg-grey-10 dark:bg-black"
>
${REPORTABLES.map(
reportable =>
html`
<li class="mb-2 leading-normal">
<label
for="${reportable.toLowerCase()}"
class="flex items-center"
>
<input
type="radio"
name="reason"
id="${reportable.toLowerCase()}"
value="${reportable.toLowerCase()}"
class="mr-2 my-2 w-4 h-4 flex-none"
/>
${state.translate(`reportReason${reportable}`)}
</label>
</li>
`
)}
<li class="mt-4 mb-2 leading-normal">
${raw(
replaceLinks(state.translate('reportReasonCopyright'), [
'https://www.mozilla.org/about/legal/report-infringement/'
])
)}
</li>
</ul>
</fieldset>
<input
type="submit"
disabled
class="btn rounded-lg w-full flex-shrink-0 focus:outline"
title="${state.translate('reportButton')}"
value="${state.translate('reportButton')}"
/>
</form>
</div>
</section>
</main>
`;
function optionChanged(event) {
event.stopPropagation();
const button = event.currentTarget.nextElementSibling;
button.disabled = false;
}
function report(event) {
event.stopPropagation();
event.preventDefault();
if (submitting) {
return;
}
submitting = true;
state.fileInfo.reported = true;
const form = event.target;
emit('report', { reason: form.reason.value });
}
function replaceLinks(str, urls) {
let i = 0;
const s = str.replace(
/<a>([^<]+)<\/a>/g,
(m, v) => `<a class="text-blue" href="${urls[i++]}">${v}</a>`
);
return `<p>${s}</p>`;
}
};

View File

@@ -6,7 +6,7 @@ module.exports = function(selected, options, translate, changed, htmlId) {
return html`
<select
id="${htmlId}"
class="appearance-none cursor-pointer border rounded bg-grey-lightest hover:border-blue-dark focus:border-blue-dark pl-1 pr-8 py-1 my-1 h-8"
class="appearance-none cursor-pointer border rounded bg-grey-10 hover:border-blue-50 focus:border-blue-50 pl-1 pr-8 py-1 my-1 h-8 dark:bg-grey-80"
onchange="${choose}"
>
${options.map(

View File

@@ -9,14 +9,14 @@ module.exports = function(name, url) {
<h1 class="text-3xl font-bold my-4">
${state.translate('notifyUploadEncryptDone')}
</h1>
<p class="font-normal leading-normal text-grey-darkest word-break-all">
<p class="font-normal leading-normal text-grey-80 dark:text-grey-40">
${state.translate('shareLinkDescription')}<br />
${name}
<span class="word-break-all">${name}</span>
</p>
<input
type="text"
id="share-url"
class="w-full my-4 border rounded-lg leading-loose h-12 px-2 py-1"
class="w-full my-4 border rounded-lg leading-loose h-12 px-2 py-1 dark:bg-grey-80"
value="${url}"
readonly="true"
/>
@@ -28,7 +28,7 @@ module.exports = function(name, url) {
${state.translate('shareLinkButton')}
</button>
<button
class="text-blue-dark hover:text-blue-darker focus:text-blue-darker my-4 font-medium cursor-pointer focus:outline"
class="link-blue my-4 font-medium cursor-pointer focus:outline"
onclick="${close}"
title="${state.translate('okButton')}"
>

View File

@@ -1,26 +1,23 @@
const html = require('choo/html');
const assets = require('../../common/assets');
const { bytes, platform } = require('../utils');
const { bytes } = require('../utils');
const { canceledSignup, submittedSignup } = require('../metrics');
module.exports = function(trigger) {
return function(state, emit, close) {
const DAYS = Math.floor(state.LIMITS.MAX_EXPIRE_SECONDS / 86400);
const hidden = platform() === 'android' ? 'hidden' : '';
let submitting = false;
return html`
<send-signup-dialog
class="flex flex-col lg:flex-row justify-center px-8 md:px-24 w-full h-full"
class="flex flex-col justify-center my-16 md:my-0 px-8 md:px-24 w-full h-full"
>
<img src="${assets.get('master-logo.svg')}" class="h-16 mt-1 mb-4" />
<section
class="flex flex-col flex-shrink-0 self-center lg:mx-6 lg:max-w-xs"
>
<h1 class="text-3xl font-bold text-center lg:text-left">
<section class="flex flex-col flex-shrink-0 self-center">
<h1 class="text-3xl font-bold text-center">
${state.translate('accountBenefitTitle')}
</h1>
<ul
class="leading-normal text-grey-darkest my-2 mt-4 pl-4 md:self-center"
class="leading-normal list-disc text-grey-80 my-2 mt-4 pl-4 md:self-center dark:text-grey-40"
>
<li>
${state.translate('accountBenefitLargeFiles', {
@@ -32,17 +29,14 @@ module.exports = function(trigger) {
${state.translate('accountBenefitTimeLimit', { count: DAYS })}
</li>
<li>${state.translate('accountBenefitSync')}</li>
<li>${state.translate('accountBenefitMoz')}</li>
</ul>
</section>
<section
class="flex flex-col flex-grow m-4 md:self-center md:w-128 lg:max-w-xs"
>
<section class="flex flex-col flex-grow m-4 md:self-center md:w-128">
<form onsubmit=${submitEmail} data-no-csrf>
<input
id="email-input"
type="email"
class="${hidden} border rounded-lg w-full px-2 py-1 h-12 mb-3 text-lg text-grey-darker leading-loose"
class="hidden border rounded-lg w-full px-2 py-1 h-12 mb-3 text-lg text-grey-70 leading-loose dark:bg-grey-80 dark:text-white"
placeholder=${state.translate('emailPlaceholder')}
/>
<input
@@ -53,13 +47,17 @@ module.exports = function(trigger) {
type="submit"
/>
</form>
<button
class="my-3 text-blue-dark hover:text-blue-darker focus:text-blue-darker font-medium"
title="${state.translate('deletePopupCancel')}"
onclick=${cancel}
>
${state.translate('deletePopupCancel')}
</button>
${state.user.loginRequired
? ''
: html`
<button
class="my-3 link-blue font-medium"
title="${state.translate('deletePopupCancel')}"
onclick=${cancel}
>
${state.translate('deletePopupCancel')}
</button>
`}
</section>
</send-signup-dialog>
`;

View File

@@ -16,7 +16,7 @@ module.exports = function() {
<h1 class="text-3xl font-bold my-4">
Tell us what you think.
</h1>
<p class="font-normal leading-normal text-grey-darkest px-4">
<p class="font-normal leading-normal text-grey-80 px-4">
Love Firefox Send? Take a quick survey to let us know how we can make
it better.
</p>
@@ -30,7 +30,7 @@ module.exports = function() {
Give feedback
</a>
<button
class="text-blue-dark hover:text-blue-darker focus:text-blue-darker font-medium cursor-pointer focus:outline"
class="link-blue font-medium cursor-pointer focus:outline"
onclick="${close}"
title="Skip"
>

View File

@@ -27,7 +27,7 @@ module.exports = function(state, emit) {
<main class="main">
${state.modal && modal(state, emit)}
<section
class="flex flex-col items-center justify-center text-center bg-white m-6 px-6 py-8 border border-grey-light md:border-none md:px-12 md:py-16 shadow w-full md:h-full"
class="flex flex-col items-center justify-center text-center bg-white m-6 px-6 py-8 border border-grey-30 md:border-none md:px-12 md:py-16 shadow w-full md:h-full dark:bg-grey-90"
>
<h1 class="text-3xl font-bold">${strings.header}</h1>
<p class="mt-4 mb-8 max-w-md leading-normal">${strings.description}</p>

View File

@@ -76,6 +76,10 @@ export default class User {
return this.info.access_token;
}
get refreshToken() {
return this.info.refresh_token;
}
get maxSize() {
return this.loggedIn
? this.limits.MAX_FILE_SIZE
@@ -94,6 +98,10 @@ export default class User {
: this.limits.ANON.MAX_DOWNLOADS;
}
get loginRequired() {
return this.authConfig && this.authConfig.fxa_required;
}
async metricId() {
return this.loggedIn ? hashId(this.info.uid) : undefined;
}
@@ -135,6 +143,7 @@ export default class User {
const code_challenge = await preparePkce(this.storage);
const options = {
action: 'email',
access_type: 'offline',
client_id: this.authConfig.client_id,
code_challenge,
code_challenge_method: 'S256',
@@ -192,12 +201,69 @@ export default class User {
});
const userInfo = await infoResponse.json();
userInfo.access_token = auth.access_token;
userInfo.refresh_token = auth.refresh_token;
userInfo.fileListKey = await getFileListKey(this.storage, auth.keys_jwe);
this.info = userInfo;
this.storage.remove('pkceVerifier');
}
logout() {
async refresh() {
if (!this.refreshToken) {
return false;
}
try {
const tokenResponse = await fetch(this.authConfig.token_endpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
client_id: this.authConfig.client_id,
grant_type: 'refresh_token',
refresh_token: this.refreshToken
})
});
if (tokenResponse.ok) {
const auth = await tokenResponse.json();
const info = { ...this.info, access_token: auth.access_token };
this.info = info;
return true;
}
} catch (e) {
console.error(e);
}
await this.logout();
return false;
}
async logout() {
try {
if (this.refreshToken) {
await fetch(this.authConfig.revocation_endpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
refresh_token: this.refreshToken
})
});
}
if (this.bearerToken) {
await fetch(this.authConfig.revocation_endpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
token: this.bearerToken
})
});
}
} catch (e) {
console.error(e);
// oh well, we tried
}
this.storage.clearLocalFiles();
this.info = {};
}
@@ -211,6 +277,14 @@ export default class User {
const key = b64ToArray(this.info.fileListKey);
const sha = await crypto.subtle.digest('SHA-256', key);
const kid = arrayToB64(new Uint8Array(sha)).substring(0, 16);
const retry = async () => {
const refreshed = await this.refresh();
if (refreshed) {
return await this.syncFileList();
} else {
return { incoming: true };
}
};
try {
const encrypted = await getFileList(this.bearerToken, kid);
const decrypted = await streamToArrayBuffer(
@@ -219,8 +293,7 @@ export default class User {
list = JSON.parse(textDecoder.decode(decrypted));
} catch (e) {
if (e.message === '401') {
this.logout();
return { incoming: true };
return retry(e);
}
}
changes = await this.storage.merge(list);
@@ -236,7 +309,9 @@ export default class User {
);
await setFileList(this.bearerToken, kid, encrypted);
} catch (e) {
//
if (e.message === '401') {
return retry(e);
}
}
return changes;
}

View File

@@ -1,5 +1,10 @@
/* global Android */
const html = require('choo/html');
let html;
try {
html = require('choo/html');
} catch (e) {
// running in the service worker
}
const b64 = require('base64-js');
function arrayToB64(array) {
@@ -137,12 +142,16 @@ function openLinksInNewTab(links, should = true) {
function browserName() {
try {
// order of these matters
if (/firefox/i.test(navigator.userAgent)) {
return 'firefox';
}
if (/edge/i.test(navigator.userAgent)) {
return 'edge';
}
if (/edg/i.test(navigator.userAgent)) {
return 'edgium';
}
if (/trident/i.test(navigator.userAgent)) {
return 'ie';
}
@@ -267,7 +276,15 @@ function setTranslate(t) {
translate = t;
}
function concat(b1, b2) {
const result = new Uint8Array(b1.length + b2.length);
result.set(b1, 0);
result.set(b2, b1.length);
return result;
}
module.exports = {
concat,
locale,
fadeOut,
delay,

View File

@@ -1,4 +1,4 @@
import crc32 from 'crc/crc32';
import crc32 from './crc32';
const encoder = new TextEncoder();

View File

@@ -1,9 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
<defs>
<polygon id="addfiles-a" points="11.143 6 11.143 11.143 6 11.143 6 12.857 11.143 12.857 11.143 18 12.857 18 12.857 12.857 18 12.857 18 11.143 12.857 11.143 12.857 6"/>
</defs>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<symbol id="plus" viewBox="0 0 24 24">
<g fill="none" fill-rule="evenodd">
<path fill="#0060df" fill-rule="nonzero" d="M12,22.6666667 C17.8910373,22.6666667 22.6666667,17.8910373 22.6666667,12 C22.6666667,6.10896267 17.8910373,1.33333333 12,1.33333333 C6.10896267,1.33333333 1.33333333,6.10896267 1.33333333,12 C1.33333333,17.8910373 6.10896267,22.6666667 12,22.6666667 Z M12,24 C5.372583,24 0,18.627417 0,12 C0,5.372583 5.372583,0 12,0 C18.627417,0 24,5.372583 24,12 C24,18.627417 18.627417,24 12,24 Z"/>
<use fill="#0060df" xlink:href="#addfiles-a"/>
<path fill="currentColor" fill-rule="nonzero" d="M12,22.6666667 C17.8910373,22.6666667 22.6666667,17.8910373 22.6666667,12 C22.6666667,6.10896267 17.8910373,1.33333333 12,1.33333333 C6.10896267,1.33333333 1.33333333,6.10896267 1.33333333,12 C1.33333333,17.8910373 6.10896267,22.6666667 12,22.6666667 Z M12,24 C5.372583,24 0,18.627417 0,12 C0,5.372583 5.372583,0 12,0 C18.627417,0 24,5.372583 24,12 C24,18.627417 18.627417,24 12,24 Z"/>
<polygon fill="currentColor" points="11.143 6 11.143 11.143 6 11.143 6 12.857 11.143 12.857 11.143 18 12.857 18 12.857 12.857 18 12.857 18 11.143 12.857 11.143 12.857 6"/>
</g>
</symbol>
<use xlink:href="#plus"/>
</svg>

Before

Width:  |  Height:  |  Size: 856 B

After

Width:  |  Height:  |  Size: 831 B

View File

@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="26px" height="32px" viewBox="0 0 26 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: sketchtool 53 (72520) - https://sketchapp.com -->
<title>6AF7DAB4-6456-44F2-AABE-F001D910B641</title>
<desc>Created with sketchtool.</desc>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<symbol id="icon" viewBox="0 0 26 32">
<defs>
<path d="M21.848475,31.6653183 L2.89005487,31.6653183 C1.32717435,31.6653183 0.104050469,30.3742431 0.104050469,28.8793139 L0.104050469,2.7860044 C0.104050469,1.22312388 1.39512568,0 2.89005487,0 L14.7135857,0 C15.4610503,0 16.2085149,0.271805307 16.6841742,0.815415921 L23.8190635,7.95030523 C24.3626741,8.49391584 24.6344794,9.17342911 24.6344794,9.9208937 L24.6344794,28.8793139 C24.6344794,30.3742431 23.4113555,31.6653183 21.848475,31.6653183 Z" id="path-1"></path>
</defs>
@@ -14,14 +12,15 @@
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Mask" fill="#45A1FF" opacity="0.6" xlink:href="#path-1"></use>
<path d="M24.3031318,10.6474633 L16.7826187,10.6474633 C15.2742552,10.6474633 14.051485,9.42469306 14.051485,7.91632957 L14.051485,0.395816478" id="Path" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" mask="url(#mask-2)"></path>
<path d="M7.2830232,8.93885547 L8.91906464,8.93885547" id="Path" stroke="#0060DF" stroke-width="2" stroke-linecap="round" mask="url(#mask-2)"></path>
<path d="M7.2830232,15.7798836 L17.5412669,15.7798836" id="Path" stroke="#0060DF" stroke-width="2" stroke-linecap="round" mask="url(#mask-2)"></path>
<path d="M7.2830232,22.6209117 L17.5412669,22.6209117" id="Path" stroke="#0060DF" stroke-width="2" stroke-linecap="round" mask="url(#mask-2)"></path>
<use id="Mask" fill="#45a1ff" xlink:href="#path-1"></use>
<path d="M24.3031318,10.6474633 L16.7826187,10.6474633 C15.2742552,10.6474633 14.051485,9.42469306 14.051485,7.91632957 L14.051485,0.395816478" id="Path" stroke="currentColor" stroke-width="2" stroke-linecap="round" mask="url(#mask-2)"></path>
<path d="M7.2830232,8.93885547 L8.91906464,8.93885547" id="Path" stroke="currentColor" stroke-width="2" stroke-linecap="round" mask="url(#mask-2)"></path>
<path d="M7.2830232,15.7798836 L17.5412669,15.7798836" id="Path" stroke="currentColor" stroke-width="2" stroke-linecap="round" mask="url(#mask-2)"></path>
<path d="M7.2830232,22.6209117 L17.5412669,22.6209117" id="Path" stroke="currentColor" stroke-width="2" stroke-linecap="round" mask="url(#mask-2)"></path>
</g>
</g>
</g>
</g>
</g>
</symbol>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 16 16"><path fill="#4A4A4A" d="M9.414 8l5.293-5.293a1 1 0 0 0-1.414-1.414L8 6.586 2.707 1.293a1 1 0 0 0-1.414 1.414L6.586 8l-5.293 5.293a1 1 0 1 0 1.414 1.414L8 9.414l5.293 5.293a1 1 0 0 0 1.414-1.414z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 16 16"><path fill="#737373" d="M9.414 8l5.293-5.293a1 1 0 0 0-1.414-1.414L8 6.586 2.707 1.293a1 1 0 0 0-1.414 1.414L6.586 8l-5.293 5.293a1 1 0 1 0 1.414 1.414L8 9.414l5.293 5.293a1 1 0 0 0 1.414-1.414z"/></svg>

Before

Width:  |  Height:  |  Size: 287 B

After

Width:  |  Height:  |  Size: 287 B

View File

@@ -1 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="#0060df" d="M14.707 8.293l-3-3A1 1 0 0 0 11 5h-1V4a1 1 0 0 0-.293-.707l-3-3A1 1 0 0 0 6 0H3a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h3v3a2 2 0 0 0 2 2h5a2 2 0 0 0 2-2V9a1 1 0 0 0-.293-.707zM12.586 9H11V7.414zm-5-5H6V2.414zM6 7v2H3V2h2v2.5a.5.5 0 0 0 .5.5H8a2 2 0 0 0-2 2zm2 7V7h2v2.5a.5.5 0 0 0 .5.5H13v4z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg">
<symbol id="icon" viewBox="0 0 16 16">
<path fill="currentColor" d="M14.707 8.293l-3-3A1 1 0 0 0 11 5h-1V4a1 1 0 0 0-.293-.707l-3-3A1 1 0 0 0 6 0H3a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h3v3a2 2 0 0 0 2 2h5a2 2 0 0 0 2-2V9a1 1 0 0 0-.293-.707zM12.586 9H11V7.414zm-5-5H6V2.414zM6 7v2H3V2h2v2.5a.5.5 0 0 0 .5.5H8a2 2 0 0 0-2 2zm2 7V7h2v2.5a.5.5 0 0 0 .5.5H13v4z"/>
</symbol>
</svg>

Before

Width:  |  Height:  |  Size: 398 B

After

Width:  |  Height:  |  Size: 411 B

View File

@@ -1,15 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="12px" height="16px" viewBox="0 0 12 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: sketchtool 53 (72520) - https://sketchapp.com -->
<title>728D143F-562C-4AE5-80DA-9DBBD9D647D8</title>
<desc>Created with sketchtool.</desc>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Send_Sending" transform="translate(-770.000000, -481.000000)" fill="#0060DF">
<g id="List-Item-3" transform="translate(744.000000, 350.000000)">
<g id="Download-Icon" transform="translate(26.000000, 131.000000)">
<path d="M5.293,12.707 C5.6835,13.097382 6.316501,13.097383 6.707001,12.707 L11.707,7.707 C12.08597,7.31462 12.08054,6.69092 11.69481,6.305189 C11.30908,5.91946 10.68538,5.91403 10.293,6.293 L7,9.586 L7,1 C7,0.44772 6.552285,0 6,0 C5.447715,0 5,0.44772 5,1 L5,9.586 L1.707,6.293 C1.314621,5.91403 0.690915,5.91945 0.305181,6.305182 C-0.080553,6.690915 -0.085973,7.314622 0.293,7.707001 L5.293,12.707 Z M11,14 L1,14 C0.447715,14 0,14.447715 0,15 C0,15.5522852 0.447715,16 1,16 L11,16 C11.55228,16 12,15.5522852 12,15 C12,14.447715 11.55229,14 11,14 Z" id="Fill-1"></path>
<svg width="12px" height="16px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<symbol id="icon" viewBox="0 0 12 16">
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g transform="translate(-770.000000, -481.000000)" fill="currentColor">
<g transform="translate(744.000000, 350.000000)">
<g transform="translate(26.000000, 131.000000)">
<path d="M5.293,12.707 C5.6835,13.097382 6.316501,13.097383 6.707001,12.707 L11.707,7.707 C12.08597,7.31462 12.08054,6.69092 11.69481,6.305189 C11.30908,5.91946 10.68538,5.91403 10.293,6.293 L7,9.586 L7,1 C7,0.44772 6.552285,0 6,0 C5.447715,0 5,0.44772 5,1 L5,9.586 L1.707,6.293 C1.314621,5.91403 0.690915,5.91945 0.305181,6.305182 C-0.080553,6.690915 -0.085973,7.314622 0.293,7.707001 L5.293,12.707 Z M11,14 L1,14 C0.447715,14 0,14.447715 0,15 C0,15.5522852 0.447715,16 1,16 L11,16 C11.55228,16 12,15.5522852 12,15 C12,14.447715 11.55229,14 11,14 Z"></path>
</g>
</g>
</g>
</g>
</symbol>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

41
assets/icon.svg Normal file
View File

@@ -0,0 +1,41 @@
<svg viewBox="0 0 65 64" height="64" width="65" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linear-gradient" x1="46.37" y1="59.71" x2="15.42" y2="6.11" gradientTransform="matrix(1, 0, 0, -1, 0, 64)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#ff980e"/>
<stop offset="0.21" stop-color="#ff7139"/>
<stop offset="0.36" stop-color="#ff5854"/>
<stop offset="0.46" stop-color="#ff4f5e"/>
<stop offset="0.69" stop-color="#ff3750"/>
<stop offset="0.86" stop-color="#f92261"/>
<stop offset="1" stop-color="#f5156c"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="46.37" y1="59.71" x2="15.42" y2="6.11" gradientTransform="matrix(1, 0, 0, -1, 0, 64)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fff44f" stop-opacity="0.8"/>
<stop offset="0.09" stop-color="#fff44f" stop-opacity="0.7"/>
<stop offset="0.75" stop-color="#fff44f" stop-opacity="0"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="40.19" y1="26.08" x2="54.32" y2="50.55" gradientTransform="matrix(1, 0, 0, -1, 0, 64)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#3a8ee6"/>
<stop offset="0.24" stop-color="#5c79f0"/>
<stop offset="0.63" stop-color="#9059ff"/>
<stop offset="1" stop-color="#c139e6"/>
</linearGradient>
<linearGradient id="linear-gradient-4" x1="54.32" y1="50.58" x2="48.39" y2="40.31" gradientTransform="matrix(1, 0, 0, -1, 0, 64)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#6e008b" stop-opacity="0.5"/>
<stop offset="0.5" stop-color="#c846cb" stop-opacity="0"/>
</linearGradient>
<linearGradient id="linear-gradient-5" x1="56.96" y1="22.5" x2="41.98" y2="37.46" gradientTransform="matrix(1, 0, 0, -1, 0, 64)" gradientUnits="userSpaceOnUse">
<stop offset="0.14" stop-color="#6a2bea" stop-opacity="0"/>
<stop offset="0.34" stop-color="#642de4" stop-opacity="0.03"/>
<stop offset="0.55" stop-color="#5131d3" stop-opacity="0.12"/>
<stop offset="0.76" stop-color="#3139b7" stop-opacity="0.27"/>
<stop offset="0.98" stop-color="#054490" stop-opacity="0.48"/>
<stop offset="1" stop-color="#00458b" stop-opacity="0.5"/>
</linearGradient>
</defs>
<path d="M32.56,0C14.61,0,0,14.33,0,31.94a3.42,3.42,0,0,0,3.42,3.42H29.14V52.3l-8-8a3.42,3.42,0,1,0-4.84,4.84L30.14,63a2.73,2.73,0,0,0,.25.23l.23.17h.05l.24.14.27.13.28.1.29.07L32,64h1.27l.29-.07.29-.1.27-.13.24-.14.24-.17L35,63,48.8,49.18A3.43,3.43,0,0,0,44,44.34l-8,8v-17H61.7a3.42,3.42,0,0,0,3.42-3.42h0C65.12,14.33,50.51,0,32.56,0ZM7.09,28.51A25.54,25.54,0,0,1,32.56,6.85,25.55,25.55,0,0,1,58,28.51Z" fill="url(#linear-gradient)"/>
<path d="M32.56,0C14.61,0,0,14.33,0,31.94a3.42,3.42,0,0,0,3.42,3.42H29.14V52.3l-8-8a3.42,3.42,0,1,0-4.84,4.84L30.14,63a2.73,2.73,0,0,0,.25.23l.23.17h.05l.24.14.27.13.28.1.29.07L32,64h1.27l.29-.07.29-.1.27-.13.24-.14.24-.17L35,63,48.8,49.18A3.43,3.43,0,0,0,44,44.34l-8,8v-17H61.7a3.42,3.42,0,0,0,3.42-3.42h0C65.12,14.33,50.51,0,32.56,0ZM7.09,28.51A25.54,25.54,0,0,1,32.56,6.85,25.55,25.55,0,0,1,58,28.51Z" fill="url(#linear-gradient-2)"/>
<path d="M36,7.08A25.45,25.45,0,0,1,58,28.51H42.85A6.85,6.85,0,0,0,36,35.36H61.7a3.43,3.43,0,0,0,3.42-3.43c0-12.2-8.63-18.13-16-21.59A35.75,35.75,0,0,0,36,7.08Z" fill="url(#linear-gradient-3)"/>
<path d="M57.89,27.76c2.31,1.86,4.63,3.71,6.9,5.61a3.27,3.27,0,0,0,.33-1.44c0-12.2-8.63-18.13-16-21.59A35.75,35.75,0,0,0,36,7.08,25.47,25.47,0,0,1,57.89,27.76Z" fill="url(#linear-gradient-4)"/>
<path d="M57.5,28.51H42.85A6.85,6.85,0,0,0,36,35.36H61.7a3.36,3.36,0,0,0,2.64-1.28C62.09,32.19,59.79,30.36,57.5,28.51Z" opacity=".9" fill="url(#linear-gradient-5)"/>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.1 KiB

View File

@@ -1,8 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="8px" height="6px" viewBox="0 0 8 6" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: sketchtool 53 (72520) - https://sketchapp.com -->
<title>37845F0A-2932-4C2D-98E1-89BE1B168092</title>
<desc>Created with sketchtool.</desc>
<defs>
<path d="M6,8.48771202 C5.73480519,8.48765538 5.48049273,8.3822614 5.293,8.19471202 L2.293,5.19471202 C1.91402779,4.80233313 1.91944763,4.17862724 2.30518142,3.79289345 C2.69091522,3.40715965 3.31462111,3.40173981 3.707,3.78071202 L6,6.07371202 L8.293,3.78071202 C8.68537889,3.40173981 9.30908478,3.40715965 9.69481858,3.79289345 C10.0805524,4.17862724 10.0859722,4.80233313 9.707,5.19471202 L6.707,8.19471202 C6.51950727,8.3822614 6.26519481,8.48765538 6,8.48771202 Z" id="path-1"></path>
</defs>
@@ -14,7 +11,7 @@
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Shape" fill="#0C0C0D" fill-rule="nonzero" opacity="0.599283854" xlink:href="#path-1"></use>
<use id="Shape" fill="#b1b1b3" fill-rule="nonzero" opacity="0.599283854" xlink:href="#path-1"></use>
</g>
</g>
</g>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,4 +1,5 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M18 9a3 3 0 1 0-2.977-2.63l-6.94 3.47a3 3 0 1 0 0 4.319l6.94 3.47a3 3 0 1 0 .895-1.789l-6.94-3.47a3.03 3.03 0 0 0 0-.74l6.94-3.47C16.456 8.68 17.19 9 18 9z" fill="#0060df" fill-opacity=".8"></path></svg>
<svg xmlns="http://www.w3.org/2000/svg">
<symbol id="icon" viewBox="0 0 24 24"><path fill-rule="evenodd" clip-rule="evenodd" d="M18 9a3 3 0 1 0-2.977-2.63l-6.94 3.47a3 3 0 1 0 0 4.319l6.94 3.47a3 3 0 1 0 .895-1.789l-6.94-3.47a3.03 3.03 0 0 0 0-.74l6.94-3.47C16.456 8.68 17.19 9 18 9z" fill="currentColor"></path></symbol></svg>

Before

Width:  |  Height:  |  Size: 559 B

After

Width:  |  Height:  |  Size: 539 B

6
assets/wordmark.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<symbol id="logo">
<path d="M84,48h5.83V35.87H103.3V30.45H89.83V23.51H103.3V18H84Zm23.57,0h5.79V25.81h-5.79Zm2.88-32.12a3.46,3.46,0,0,0-2.59,1,3.62,3.62,0,0,0-1,2.65,3.57,3.57,0,0,0,1,2.59,3.52,3.52,0,0,0,2.61,1,3.46,3.46,0,0,0,3.65-3.26c0-.12,0-.23,0-.35a3.71,3.71,0,0,0-1-2.65,3.5,3.5,0,0,0-2.67-1Zm19.14,9.53a7.22,7.22,0,0,0-3.72.93,5.82,5.82,0,0,0-2.4,2.89V25.81h-5.59V48h5.63V36.29a5.27,5.27,0,0,1,1.31-4,4.94,4.94,0,0,1,3.49-1.21,6.33,6.33,0,0,1,1.73.23,4,4,0,0,1,1.23.55l2-5.59a7.51,7.51,0,0,0-1.66-.61,8.11,8.11,0,0,0-2-.26Zm23.94,3.19a11.15,11.15,0,0,0-3.61-2.37,12.08,12.08,0,0,0-4.6-.86,11.62,11.62,0,0,0-8.3,3.37,11.17,11.17,0,0,0-2.44,3.67,11.59,11.59,0,0,0-.89,4.54,12.24,12.24,0,0,0,.83,4.52,10.52,10.52,0,0,0,2.36,3.66,10.93,10.93,0,0,0,3.71,2.44,12.75,12.75,0,0,0,4.85.88,12.15,12.15,0,0,0,6.12-1.39,13.25,13.25,0,0,0,4.11-3.74L151,40.6a6.23,6.23,0,0,1-2.18,2.15,6.36,6.36,0,0,1-3.33.8,6.7,6.7,0,0,1-4.13-1.25,6,6,0,0,1-2.23-3.43h17.62V36.74a11.71,11.71,0,0,0-.87-4.56,10.5,10.5,0,0,0-2.35-3.59Zm-14.21,5.85a6.38,6.38,0,0,1,2.26-3.12,6.11,6.11,0,0,1,3.74-1.15,6.26,6.26,0,0,1,3.73,1.08,5.56,5.56,0,0,1,2.1,3.19ZM167,16.08a6.05,6.05,0,0,0-2.91,1.54,6.15,6.15,0,0,0-1.56,2.89,18.1,18.1,0,0,0-.48,4.52v.78H158.4v5.1h3.65V48h5.63V30.91H173v-5.1h-5.3V24.75a13.34,13.34,0,0,1,.12-2,2,2,0,0,1,.6-1.19,2.45,2.45,0,0,1,1.33-.57,15.25,15.25,0,0,1,2.34-.15H173V15.63h-1.48A19.06,19.06,0,0,0,167,16.08Zm27.4,12.65a12,12,0,0,0-16.72,0,10.87,10.87,0,0,0-2.46,3.67,11.61,11.61,0,0,0-.89,4.5,11.46,11.46,0,0,0,7.07,10.64,11.73,11.73,0,0,0,4.64.9,12,12,0,0,0,4.66-.9,11.26,11.26,0,0,0,3.72-2.49,11.83,11.83,0,0,0,2.46-3.67,11.31,11.31,0,0,0,.9-4.48A11.43,11.43,0,0,0,194.4,28.73ZM191.7,39.3a5.88,5.88,0,0,1-1.29,2,6.53,6.53,0,0,1-1.93,1.31,6,6,0,0,1-4.76,0,6.34,6.34,0,0,1-1.93-1.31,6.06,6.06,0,0,1-1.3-2,6.48,6.48,0,0,1,0-4.86,5.76,5.76,0,0,1,1.3-2,6.08,6.08,0,0,1,1.93-1.32,6,6,0,0,1,4.76,0,6.37,6.37,0,0,1,1.93,1.32,5.73,5.73,0,0,1,1.29,2A6.39,6.39,0,0,1,191.7,39.3Zm29.47-13.49h-6.65l-4.68,6.57-4.64-6.57h-6.74l7.84,10.8L198,48h6.82l5-6.94L214.89,48h6.86l-8.46-11.34Zm34,7.46a12.88,12.88,0,0,0-3.37-1.44c-1.25-.34-2.46-.63-3.63-.88l-3.08-.7a10.64,10.64,0,0,1-2.51-.86A4.54,4.54,0,0,1,240.87,28a3.61,3.61,0,0,1-.62-2.19,4.8,4.8,0,0,1,1.58-3.7c1.06-1,2.73-1.44,5-1.44a9.84,9.84,0,0,1,5.07,1.17,10.47,10.47,0,0,1,3.39,3.23l2.79-2.18A15.22,15.22,0,0,0,253.45,19a13.8,13.8,0,0,0-6.59-1.44,12.13,12.13,0,0,0-4.14.66A10.33,10.33,0,0,0,239.53,20a7.53,7.53,0,0,0-2.05,2.63,7.41,7.41,0,0,0-.72,3.24,6.7,6.7,0,0,0,.84,3.53,7.06,7.06,0,0,0,2.2,2.22A11.11,11.11,0,0,0,242.86,33c1.13.32,2.29.6,3.47.84l3.26.74a12.63,12.63,0,0,1,2.8,1,5.86,5.86,0,0,1,2,1.56,3.88,3.88,0,0,1,.74,2.42,5.2,5.2,0,0,1-1.81,4.09A7.83,7.83,0,0,1,248,45.2a11,11,0,0,1-9.89-5.38l-3,2.34a15.86,15.86,0,0,0,5.23,4.54,16.06,16.06,0,0,0,7.7,1.7,12.58,12.58,0,0,0,4.38-.72,10.14,10.14,0,0,0,3.3-2,8.79,8.79,0,0,0,2.1-2.85,8.09,8.09,0,0,0,.74-3.39,6.94,6.94,0,0,0-1-3.8,7.71,7.71,0,0,0-2.42-2.37Zm27.51-4.72a10.53,10.53,0,0,0-3.58-2.34,11.89,11.89,0,0,0-4.49-.84,11.6,11.6,0,0,0-4.62.9,11.35,11.35,0,0,0-3.66,2.46A11.84,11.84,0,0,0,263,37a12.21,12.21,0,0,0,.82,4.51,10.53,10.53,0,0,0,2.36,3.64,11.24,11.24,0,0,0,3.7,2.42,12.41,12.41,0,0,0,4.82.88A11.68,11.68,0,0,0,280.82,47,12.84,12.84,0,0,0,285,42.82l-2.88-1.69a7.85,7.85,0,0,1-7.43,4.27,9,9,0,0,1-3.22-.53,8.21,8.21,0,0,1-2.55-1.5,8,8,0,0,1-1.78-2.28,7.79,7.79,0,0,1-.87-2.91h19.59V36.66a11.75,11.75,0,0,0-.86-4.54,10.92,10.92,0,0,0-2.35-3.57ZM266.4,35.22a8.88,8.88,0,0,1,1-2.73,8.55,8.55,0,0,1,1.79-2.18,8,8,0,0,1,2.44-1.43,8.31,8.31,0,0,1,3-.52,7.45,7.45,0,0,1,7.84,6.86ZM308.82,28a8.11,8.11,0,0,0-3-2,10.89,10.89,0,0,0-3.92-.67,9.06,9.06,0,0,0-4.58,1.14,8.76,8.76,0,0,0-3.14,3V25.82h-3.29V48h3.37V35.67a7.92,7.92,0,0,1,.53-2.93,7,7,0,0,1,1.48-2.3,6.46,6.46,0,0,1,2.22-1.5,7,7,0,0,1,2.75-.54,6.33,6.33,0,0,1,5,1.93A7.46,7.46,0,0,1,308,35.51V48h3.41V35.34a12.46,12.46,0,0,0-.66-4.19A8.68,8.68,0,0,0,308.82,28Zm27-12.42v14.1a8.14,8.14,0,0,0-1.58-1.83,10.08,10.08,0,0,0-2-1.36,10.39,10.39,0,0,0-2.3-.84,10.22,10.22,0,0,0-2.4-.28,11.63,11.63,0,0,0-4.4.84,11.09,11.09,0,0,0-3.59,2.38,11.3,11.3,0,0,0-2.42,3.65,12.81,12.81,0,0,0,0,9.32,11.56,11.56,0,0,0,2.4,3.66,10.58,10.58,0,0,0,3.59,2.38,11.77,11.77,0,0,0,4.42.84,9.69,9.69,0,0,0,2.4-.31,11,11,0,0,0,2.3-.86,9.72,9.72,0,0,0,2-1.37,8.75,8.75,0,0,0,1.58-1.85v4h3.33V15.59Zm-.37,24.58a8.3,8.3,0,0,1-10.85,4.47h0a7.68,7.68,0,0,1-2.6-1.76,7.88,7.88,0,0,1-1.73-2.67,8.93,8.93,0,0,1-.62-3.35,8.67,8.67,0,0,1,.62-3.3A8,8,0,0,1,322,30.89a8.17,8.17,0,0,1,2.6-1.79,8.27,8.27,0,0,1,6.51,0,8.64,8.64,0,0,1,2.63,1.81,7.85,7.85,0,0,1,1.72,2.67,8.67,8.67,0,0,1,.62,3.26,8.86,8.86,0,0,1-.65,3.33Z" fill="currentColor"/>
</symbol>
<use xlink:href="#logo"/>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -2,4 +2,5 @@ last 2 chrome versions
last 2 firefox versions
last 2 safari versions
last 2 edge versions
edge 18
firefox esr

View File

@@ -1,8 +1,8 @@
# Custom Loaders
## Generate Asset Map
## Android Index Plugin
This loader enumerates all the files in `assets/` so that `common/assets.js` can provide mappings from the source filename to the hashed filename used on the site.
Generates the `index.html` page for the native android client
## Version Plugin

View File

@@ -1,6 +1,14 @@
const commit = require('git-rev-sync').short();
const gitRevSync = require('git-rev-sync');
const pkg = require('../package.json');
let commit = 'unknown';
try {
commit = gitRevSync.short();
} catch (e) {
console.warn('Error fetching current git commit: ' + e);
}
const version = JSON.stringify({
commit,
source: pkg.homepage,

View File

@@ -1,4 +1,4 @@
const genmap = require('../build/generate_asset_map');
const genmap = require('./generate_asset_map');
const isServer = typeof genmap === 'function';
let prefix = '';
let manifest = {};

View File

@@ -1,3 +1,7 @@
# Common Code
This directory contains code loaded by both the frontend `app` and backend `server`. The code here can be challenging to understand at first because the contexts for the two (three counting the dev server) environments that include them are quite different, but the purpose of these modules are quite simple, to provide mappings from the source assets (`copy-16.png`) to the concrete production assets (`copy-16.db66e0bf.svg`).
This directory contains code loaded by both the frontend `app` and backend `server`. The code here can be challenging to understand at first because the contexts for the two (three counting the dev server) environments that include them are quite different, but the purpose of these modules are quite simple, to provide mappings from the source assets (`copy-16.png`) to the concrete production assets (`copy-16.db66e0bf.svg`).
## Generate Asset Map
This loader enumerates all the files in `assets/` so that `common/assets.js` can provide mappings from the source filename to the hashed filename used on the site.

View File

@@ -1,13 +1,6 @@
## Setup
Before building the Docker image, you must build the production assets:
```sh
npm run build
```
Then you can run either `docker build` or `docker-compose up`.
Run `docker build -t send:latest .` to create an image or `docker-compose up` to run a full testable stack. *We don't recommend using docker-compose for production.*
## Environment variables:
@@ -20,6 +13,7 @@ Then you can run either `docker build` or `docker-compose up`.
| `SENTRY_DSN` | Sentry DSN
| `MAX_FILE_SIZE` | in bytes (defaults to 2147483648)
| `NODE_ENV` | "production"
| `BASE_URL` | The HTTPS URL where traffic will be served (e.g. `https://send.firefox.com`)
## Example:
@@ -29,5 +23,6 @@ $ docker run --net=host -e 'NODE_ENV=production' \
-e 'REDIS_HOST=dyf9s2r4vo3.bolxr4.0001.usw2.cache.amazonaws.com' \
-e 'SENTRY_CLIENT=https://51e23d7263e348a7a3b90a5357c61cb2@sentry.prod.mozaws.net/168' \
-e 'SENTRY_DSN=https://51e23d7263e348a7a3b90a5357c61cb2:65e23d7263e348a7a3b90a5357c61c44@sentry.prod.mozaws.net/168' \
-e 'BASE_URL=https://send.firefox.com' \
mozilla/send:latest
```

13584
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": "3.0.13",
"version": "3.0.22",
"author": "Mozilla (https://mozilla.org)",
"repository": "mozilla/send",
"homepage": "https://github.com/mozilla/send/",
@@ -23,11 +23,11 @@
"release": "npm-run-all contributors changelog",
"test": "npm-run-all test:*",
"test:backend": "nyc --reporter=lcovonly mocha --reporter=min test/backend",
"test:frontend": "cross-env NODE_ENV=development node test/frontend/runner.js",
"test:frontend": "cross-env NODE_ENV=development FXA_REQUIRED=false node test/frontend/runner.js",
"test:report": "nyc report --reporter=html",
"test-integration": "cross-env NODE_ENV=development wdio test/wdio.docker.conf.js",
"circleci-test-integration": "cross-env NODE_ENV=development wdio test/wdio.circleci.conf.js",
"start": "npm run clean && cross-env NODE_ENV=development L10N_DEV=true FXA_CLIENT_ID=fced6b5e3f4c66b9 BASE_URL=http://localhost:8080 webpack-dev-server --mode=development",
"circleci-test-integration": "echo 'webdriverio tests need to be updated to node 12'",
"start": "npm run clean && cross-env NODE_ENV=development L10N_DEV=true FXA_CLIENT_ID=fced6b5e3f4c66b9 BASE_URL=http://localhost:1337 webpack-dev-server --port=1337 --mode=development",
"android": "cross-env ANDROID=1 npm start",
"prod": "node server/bin/prod.js"
},
@@ -35,7 +35,8 @@
"hooks": {
"pre-commit": "lint-staged",
"pre-push": "npm test",
"post-merge": "npm install"
"post-merge": "npm install",
"post-checkout": "scripts/sync-npm-dependencies.sh"
}
},
"lint-staged": {
@@ -57,110 +58,105 @@
"cache": true
},
"engines": {
"node": ">=10.0.0"
"node": "^12.16.3"
},
"devDependencies": {
"@babel/core": "^7.5.5",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@babel/core": "^7.10.5",
"@babel/plugin-proposal-class-properties": "^7.10.4",
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
"@babel/preset-env": "^7.5.5",
"@babel/preset-env": "^7.10.4",
"@dannycoates/webcrypto-liner": "^0.1.37",
"@fullhuman/postcss-purgecss": "^1.2.0",
"@fullhuman/postcss-purgecss": "^1.3.0",
"@mattiasbuelens/web-streams-polyfill": "0.2.1",
"@sentry/browser": "^5.20.1",
"asmcrypto.js": "^0.22.0",
"babel-loader": "^8.0.6",
"babel-plugin-istanbul": "^5.2.0",
"base64-js": "^1.3.0",
"base64-js": "^1.3.1",
"content-disposition": "^0.5.3",
"copy-webpack-plugin": "^5.0.4",
"core-js": "^3.1.4",
"crc": "^3.8.0",
"cross-env": "^5.2.0",
"css-loader": "^3.1.0",
"copy-webpack-plugin": "^5.0.5",
"core-js": "^3.4.0",
"cross-env": "^6.0.3",
"css-loader": "^3.2.0",
"css-mqpacker": "^7.0.0",
"cssnano": "^4.1.10",
"eslint": "^6.1.0",
"eslint-plugin-mocha": "^6.0.0",
"eslint-plugin-node": "^9.1.0",
"eslint": "^6.6.0",
"eslint-config-prettier": "^6.5.0",
"eslint-plugin-mocha": "^6.2.1",
"eslint-plugin-node": "^10.0.0",
"eslint-plugin-security": "^1.4.0",
"expose-loader": "^0.7.5",
"extract-loader": "^3.1.0",
"extract-text-webpack-plugin": "^4.0.0-beta.0",
"fast-text-encoding": "^1.0.0",
"file-loader": "^4.1.0",
"fast-text-encoding": "^1.0.3",
"file-loader": "^4.2.0",
"git-rev-sync": "^1.12.0",
"html-loader": "^0.5.5",
"http_ece": "^1.1.0",
"husky": "^3.0.2",
"intl-pluralrules": "^1.0.3",
"lint-staged": "^9.2.1",
"mocha": "^6.2.0",
"husky": "^3.0.9",
"intl-pluralrules": "^1.1.1",
"lint-staged": "^9.4.2",
"mocha": "^6.2.2",
"morgan": "^1.9.1",
"nanobus": "^4.4.0",
"nanohtml": "^1.6.3",
"nanohtml": "^1.9.0",
"nanotiming": "^7.3.1",
"npm-run-all": "^4.1.5",
"nyc": "^14.1.1",
"postcss-loader": "^3.0.0",
"postcss-preset-env": "^6.7.0",
"prettier": "^1.18.2",
"proxyquire": "^2.1.1",
"puppeteer": "^1.19.0",
"raven-js": "^3.27.2",
"prettier": "^1.19.1",
"proxyquire": "^2.1.3",
"puppeteer": "^2.0.0",
"raw-loader": "^3.1.0",
"redis-mock": "^0.45.0",
"rimraf": "^2.6.3",
"redis-mock": "^0.47.0",
"rimraf": "^3.0.0",
"script-loader": "^0.7.2",
"sinon": "^7.3.2",
"sinon": "^7.5.0",
"string-hash": "^1.1.3",
"stylelint": "^10.1.0",
"stylelint-config-standard": "^18.3.0",
"stylelint": "^11.1.1",
"stylelint-config-standard": "^19.0.0",
"stylelint-no-unsupported-browser-features": "^3.0.2",
"svgo": "^1.3.0",
"svgo": "^1.3.2",
"svgo-loader": "^2.2.1",
"tailwindcss": "^1.0.5",
"tailwindcss": "^1.1.3",
"val-loader": "^1.1.1",
"wdio-docker-service": "^1.4.2",
"wdio-dot-reporter": "0.0.10",
"wdio-firefox-profile-service": "^0.1.3",
"wdio-mocha-framework": "^0.6.3",
"wdio-sauce-service": "^0.4.14",
"wdio-selenium-standalone-service": "0.0.12",
"wdio-spec-reporter": "^0.1.5",
"webdriverio": "^4.14.4",
"webpack": "^4.38.0",
"webpack-cli": "^3.3.6",
"webpack-dev-middleware": "^3.7.0",
"webpack-dev-server": "^3.7.2",
"webpack-manifest-plugin": "^2.0.4",
"webpack": "4.38.0",
"webpack-cli": "^3.3.12",
"webpack-dev-middleware": "^3.7.2",
"webpack-dev-server": "^3.11.0",
"webpack-manifest-plugin": "^2.2.0",
"webpack-unassert-loader": "^1.2.0"
},
"dependencies": {
"@google-cloud/storage": "^3.0.3",
"aws-sdk": "^2.502.0",
"body-parser": "^1.19.0",
"choo": "^6.13.3",
"cldr-core": "^35.1.0",
"convict": "^5.1.0",
"express": "^4.17.1",
"express-ws": "github:dannycoates/express-ws",
"@dannycoates/express-ws": "^5.0.3",
"@fluent/bundle": "^0.13.0",
"@fluent/langneg": "^0.3.0",
"fxa-geodb": "^1.0.4",
"helmet": "^3.20.0",
"@google-cloud/storage": "^5.1.2",
"@peculiar/webcrypto": "^1.1.1",
"@sentry/node": "^5.20.1",
"aws-sdk": "^2.568.0",
"body-parser": "^1.19.0",
"choo": "^7.0.0",
"cldr-core": "^35.1.0",
"configstore": "github:dannycoates/configstore#master",
"convict": "^5.2.0",
"express": "^4.17.1",
"helmet": "^3.23.3",
"mkdirp": "^0.5.1",
"mozlog": "^2.2.0",
"node-fetch": "^2.6.0",
"raven": "^2.6.4",
"redis": "^2.8.0",
"redis": "^3.0.2",
"selenium-standalone": "^6.15.6",
"ua-parser-js": "^0.7.20",
"websocket-stream": "^5.5.0"
"ua-parser-js": "^0.7.21"
},
"availableLanguages": [
"en-US",
"an",
"ar",
"ast",
"azz",
"be",
"bn",
"br",
"ca",
@@ -178,13 +174,18 @@
"es-ES",
"es-MX",
"et",
"eu",
"fa",
"fi",
"fr",
"fy-NL",
"gn",
"he",
"hr",
"hsb",
"hu",
"hus",
"hy-AM",
"ia",
"id",
"it",
@@ -193,13 +194,19 @@
"kab",
"ko",
"lt",
"meh",
"mix",
"ml",
"nb-NO",
"nl",
"nn-NO",
"oc",
"pa-IN",
"pl",
"ppl",
"pt-BR",
"pt-PT",
"quc",
"ro",
"ru",
"sk",
@@ -208,6 +215,7 @@
"sr",
"su",
"sv-SE",
"te",
"th",
"tr",
"uk",

185
public/locales/an/send.ftl Normal file
View File

@@ -0,0 +1,185 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
importingFile = Se ye importando…
encryptingFile = Se ye cifrando…
decryptingFile = Se ye descifrando…
downloadCount =
{ $num ->
[one] 1 descarga
*[other] { $num } descargas
}
timespanHours =
{ $num ->
[one] hora
*[other] { $num } horas
}
copiedUrl = Copiau!
unlockInputPlaceholder = Clau
unlockButtonLabel = Desblocar
downloadButtonLabel = Descargar
downloadFinish = Descarga completa
fileSizeProgress = ({ $partialSize } de { $totalSize })
sendYourFilesLink = Preba Firefox Send
errorPageHeader = I ha habiu bell problema!
fileTooBig = Ixe fichero ye masiau gran pa cargar-lo. Ha de tener menos de { $size }
linkExpiredAlt = Lo vinclo ye caducau
notSupportedHeader = Lo suyo navegador no ye compatible
notSupportedLink = Per qué no ye compatible lo mío navegador?
notSupportedOutdatedDetail = Esta versión de Firefox no admite la tecnolochía web con que funciona lo Firefox Send. Habrás d'esviellar lo navegador.
updateFirefox = Esviellar Firefox
deletePopupCancel = Cancelar
deleteButtonHover = Borrar
footerLinkLegal = Aviso legal
footerLinkPrivacy = Privacidat
footerLinkCookies = Cookies
passwordTryAgain = La contrasenya ye incorrecta. Torne-lo a intentar.
javascriptRequired = Firefox Send necesita JavaScript
whyJavascript = Per qué Firefox Send necesita JavaScript?
enableJavascript = Activa JavaScript y torna-lo a intentar.
# A short representation of a countdown timer containing the number of hours and minutes remaining as digits, example "13h 47m"
expiresHoursMinutes = { $hours } h { $minutes } min
# A short representation of a countdown timer containing the number of minutes remaining as digits, example "56m"
expiresMinutes = { $minutes } min
# A short status message shown when the user enters a long password
maxPasswordLength = Maxima lonchitut d'a clau: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = No s'ha puesto definir la clau
## Send version 2 strings
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
-send-brand = Firefox Send
-send-short-brand = Send
-firefox = Firefox
-mozilla = Mozilla
introTitle = Compartición de fichers simpla y privada
introDescription = { -send-brand } te permite de compartir fichers cifraus de cabo a cabo, y tamién un vinclo que expira automaticament. Asinas, puetz mantener en privau lo que compartes y asegurar-te de que los tuyos contenius no se quedan pa cutio en linia.
notifyUploadEncryptDone = Lo fichero s'ha cifrau y ye presto pa ninviar-se
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Caduca dimpués de { $downloadCount } u { $timespan }
timespanMinutes =
{ $num ->
[one] 1 minuto
*[other] { $num } minutos
}
timespanDays =
{ $num ->
[one] 1 día
*[other] { $num } días
}
timespanWeeks =
{ $num ->
[one] 1 semana
*[other] { $num } semanas
}
fileCount =
{ $num ->
[one] 1 fichero
*[other] { $num } fichers
}
# byte abbreviation
bytes = B
# kibibyte abbreviation
kb = KB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Mida total: { $size }
# the next line after the colon contains a file name
copyLinkDescription = Copiar lo vinclo que quiers compartir
copyLinkButton = Copiar lo vinclo
downloadTitle = Descargar los fichers
downloadDescription = Este fichero s'ha compartiu per medio de { -send-brand } con cifrau de cabo a cabo y un vinclo que caduca automaticament.
trySendDescription = Preba { -send-brand } pa una compartición de fichers simpla y segura.
# count will always be > 10
tooManyFiles =
{ $count ->
[one] Nomás se puet puyar 1 fitxer de vez.
*[other] Nomás se pueden puyar { $count } fichers de vez.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] Nomás se permite 1 ficher.
*[other] Nomás se permiten { $count } fichers.
}
expiredTitle = Este vinclo ye caducau.
notSupportedDescription = { -send-brand } no funcionará con este navegador. { -send-short-brand } funciona millor con a zaguera versión de { -firefox } y funcionará con a versión mas recient d'a mayor parte de navegadors.
downloadFirefox = Descargar { -firefox }
legalTitle = Aviso de privacidat de { -send-short-brand }
legalDateStamp = Versió 1.0, con data d'o 12 de marzo de 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days } d { $hours } h { $minutes } min
addFilesButton = Triar los fichers a cargar
trustWarningMessage = Asegura-te de que confías en o destinatario quan compartas datos confidencials.
uploadButton = Cargar
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Arrociega y suelta los fichers
# the second part of the string 'Drag and drop files or click to send up to 1GB'
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = u fes clic aquí pa ninviar dica { $size }
addPassword = Protecher con una clau
emailPlaceholder = Escribe la tuya adreza de correu
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Inicia una sesión pa ninviar dica { $size }
signInOnlyButton = Iniciar la sesión
accountBenefitTitle = Crea una cuenta de { -firefox } u dentra-ie
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Compartir fichers dica { $size }
accountBenefitDownloadCount = Compartir fichers con mas chent
accountBenefitTimeLimit =
{ $count ->
[one] Mantiene los vinclos activos dica 1 dia
*[other] Mantiene los vinclos activos dica { $count } días
}
accountBenefitSync = Chestiona los fichers compartius dende qualsequier dispositivo
accountBenefitMoz = Descubre mas cosas sobre los atros servicios de { -mozilla }
signOut = Zarrar la sesión
okButton = Vale
downloadingTitle = Se ye descargando
noStreamsWarning = Este navegador talment no pueda descifrar un fichero tant gran.
noStreamsOptionCopy = Copia lo vinclo pa ubrir-lo en belatro navegador
noStreamsOptionFirefox = Preba lo nuestro navegador favorito
noStreamsOptionDownload = Continar con este navegador
downloadFirefoxPromo = Lo nuevo { -firefox } t'ofreix { -send-short-brand }.
# the next line after the colon contains a file name
shareLinkDescription = Comparte lo vinclo enta lo tuyo fichero:
shareLinkButton = Compartir lo vinclo
# $name is the name of the file
shareMessage = Baixa-te «{ $name }» con { -send-brand }: compartición de fiches simpla y segura
trailheadPromo = I hai una manera de protecher la tuya privacidat. Une-te a Firefox.
learnMore = Mas información
downloadFlagged = Este vinclo s'ha desactivau per violar las condiciones d'uso.
downloadConfirmTitle = Una coseta mas
downloadConfirmDescription = Asegura-te de que confías en a persona que t'ha ninviau este fichero, perque no podemos verificar que no danyará lo tuyo dispositivo.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Confío en a persona que ha ninviau este fichero
*[other] Confío en a persona que ha ninviau estes fichers
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Sinyalar este fichero como sospeitoso
*[other] Sinyalar estes fichers como sospeitoso
}
reportDescription = Aduya-nos a comprender qué ha pasau. Quál creyes que ye lo problema con estes fichers?
reportUnknownDescription = Vest ta la URL d'o vinclo que quiers sinyalar y fe clic en « { reportFile } ».
reportButton = Informar
reportReasonMalware = Estes fichers contienen malware u fan parte d'un ataque de phishing.
reportReasonPii = Estes fichers contienen información personal identificable sobre yo.
reportReasonAbuse = Estes fichers contienen conteniu ilegal u abusivo.
reportReasonCopyright = Pa informar sobre una violación de dreitos d'autor u de marca, sigue lo procedimiento descrito en <a>esta pachina</a>.
reportedTitle = Fichers sinyalaus
reportedDescription = Gracias. Hemos recibiu lo tuyo informe sobre estes fichers.

View File

@@ -56,6 +56,11 @@ passwordSetError = يجب ألا تُضبط كلمة السر هذه
## Send version 2 strings
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
-send-brand = Firefox Send
-send-short-brand = Send
-firefox = Firefox
-mozilla = Mozilla
introTitle = شارِك ملفاتك بلا عناء وبخصوصية تامة
introDescription = يتيح لك { -send-brand } مشاركة الملفات عبر تعميتها من الطرفين وإتاحتها في رابط ينقضي أجله تلقائيا. هكذا يمكنك إبقاء ما شاركته خاصًا فتضمن بأن ملفاتك لن تبقى في الوِب أبد الدهر.
notifyUploadEncryptDone = اكتملت تعمية الملف وأصبح جاهزًا لإرساله
@@ -182,3 +187,5 @@ shareLinkDescription = شارِك الرابط الذي يصل إلى الملف
shareLinkButton = شارِك الرابط
# $name is the name of the file
shareMessage = نزِّل ”{ $name }“ عبر { -send-brand }: خدمة لمشاركة الملفات بلا عناء وبخصوصية تامة
trailheadPromo = يمكنك حماية خصوصيتك، طبعا. انضم إلى فَيَرفُكس.
learnMore = اطّلع على المزيد.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Comentarios
importingFile = Importando...
encryptingFile = Cifrando...
decryptingFile = Descifrando...
@@ -21,12 +20,12 @@ downloadButtonLabel = Baxar
downloadFinish = Completóse la descarga
fileSizeProgress = ({ $partialSize } de { $totalSize })
sendYourFilesLink = Probar Firefox Send
errorPageHeader = ¡Daqué foi mal!
errorPageHeader = ¡Asocedió daqué malo!
fileTooBig = Esti ficheru ye mui grande como pa xubilu. Debería tener menos de { $size }.
linkExpiredAlt = Caducó l'enllaz
notSupportedHeader = El to restolador nun ta sofitáu.
notSupportedLink = ¿Por qué'l mio restolador nun ta sofitáu?
notSupportedOutdatedDetail = Desafortunadamente esta versión de Firefox nun sofita la teunoloxía web qu'usa Firefox Send. Vas precisar anovar Firefox.
notSupportedOutdatedDetail = Desafortunadamente esta versión de Firefox nun sofita la teunoloxía web qu'usa Firefox Send. Vas precisar anovar el restolador.
updateFirefox = Anovar Firefox
deletePopupCancel = Encaboxar
deleteButtonHover = Desaniciar
@@ -54,9 +53,10 @@ passwordSetError = Nun pudo afitase esta contraseña
-firefox = Firefox
-mozilla = Mozilla
introTitle = Compartición de ficheros privada y cenciella
introDescription = { -send-brand } déxate compartir ficheros con cifráu puntu a puntu y un enllaz que caduca automáticamente. D'esti mou, asegúreste de que lo que compartes ye privao y nun va tar siempres en llinia.
notifyUploadEncryptDone = El ficheru ta cifráu y preparáu pa unviase
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Caduca tres { $downloadCount } ó { $timespan }
archiveExpiryInfo = Caduca dempués de { $downloadCount } ó { $timespan }
timespanMinutes =
{ $num ->
[one] 1 minutu
@@ -98,21 +98,24 @@ trySendDescription = Prueba { -send-brand } pa una compartición de ficheros cen
# count will always be > 10
tooManyFiles =
{ $count ->
[one] Namái pue xubise 1 ficheru al empar.
*[other] Namái puen xubise { $count } ficheros al empar.
[one] Namás pue xubise 1 ficheru al empar.
*[other] Namás puen xubise { $count } ficheros al empar.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] Namái se permite 1 archivu
*[other] Namái se permiten { $count } archivos
[one] Namás se permite 1 archivu
*[other] Namás se permiten { $count } archivos
}
expiredTitle = Esti enllaz caducó.
notSupportedDescription = { -send-brand } nun va funcionar con esti restolador. { -send-short-brand } funciona meyor cola versión última de { -firefox } y cola versión actual de la mayoría de restoladores.
legalTitle = Noticia de privacidá de { -send-short-brand }
notSupportedDescription = { -send-brand } nun va funcionar con esti restolador. { -send-short-brand } funciona meyor cola última versión de { -firefox } y l'actual de la mayoría de restoladores.
downloadFirefox = Baxar { -firefox }
legalTitle = Avisu de privacidá de { -send-short-brand }
legalDateStamp = Versión 1.0, con data del 12 de marzu de 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
addFilesButton = Esbillar los ficheros a unviar
trustWarningMessage = Asegúrate de que t'enfotes nel destinatariu al compartir datos sensibles.
uploadButton = Xubir
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Arrastra y suelta ficheros
@@ -123,15 +126,15 @@ addPassword = Protexer con una contraseña
emailPlaceholder = Introduz el to corréu
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Anicia sesión pa unviar hasta { $size }
signInButton = Rexistrase/aniciar sesión
accountBenefitTitle = Creación d'una cuenta { -firefox } o aniciu de sesión nella
signInOnlyButton = Aniciar sesión
accountBenefitTitle = Creación d'una cuenta de { -firefox } o aniciu de sesión nella
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Comparti ficheros d'hasta { $size }
accountBenefitDownloadCount = Comparti ficheros con más xente
accountBenefitTimeLimit =
{ $count ->
[one] Caltén activos los enllaces demientres 1 día
*[other] Caltén activos los enllaces demientres 1 díes
[one] Caltién activos los enllaces demientres 1 día
*[other] Caltién activos los enllaces demientres { $count } díes
}
accountBenefitSync = Xestiona los ficheros compartíos dende cualesquier preséu
accountBenefitMoz = Deprendi más tocante a otros servicios de { -mozilla }
@@ -139,3 +142,11 @@ signOut = Zarrar sesión
okButton = Aceutar
downloadingTitle = Baxando
noStreamsWarning = Esti restolador quiciabes nun seya a descifrar un ficheru d'esti tamañu.
trailheadPromo = Hai un mou de protexer la to privacidá. Xúnite a Firefox.
learnMore = Deprender más.
downloadFlagged = Esti enllaz desactivóse por violar los términos del serviciu.
downloadConfirmTitle = Una cosa más
reportReasonMalware = Estos ficheros contienen malware o son parte d'un ataque de phishing
reportReasonPii = Estos ficheros contienen información que m'identifica.
reportReasonAbuse = Estos ficheros contienen conteníu illegal o abusivu.
reportedDescription = Gracies. Recibiemos l'informe tocante a estos ficheros.

View File

@@ -1,31 +1,9 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteSubtitle = web eksperiment
siteFeedback = Geri dönüş
uploadPageHeader = Məxfi, Şifrələnmiş Fayl Paylaşma
uploadPageExplainer = Fayllarınızı təhlükəsiz, məxfi, şifrələnmiş və daima onlayn qalmaması üçün avtomatik silinən keçidlə göndərin.
uploadPageLearnMore = Ətraflı öyrən
uploadPageDropMessage = Yükləmək üçün faylınızı buraya daşıyın
uploadPageSizeMessage = Xidmətin daha yaxşı işləməsi üçün faylınız 1 GB-dan az olmalıdır
uploadPageBrowseButton = Kompüterinizdən fayl seçin
uploadPageBrowseButton1 = Yüklənəcək faylı seçin
uploadPageMultipleFilesAlert = Birdən çox fayl və ya qovluq yükləmə hələlik dəstəklənmir.
uploadPageBrowseButtonTitle = Fayl yüklə
uploadingPageProgress = { $filename } ({ $size }) yüklənir
importingFile = İdxal edilir…
verifyingFile = Təsdiqlənir…
encryptingFile = Şifrələnir...
decryptingFile = Şifrə açılır...
notifyUploadDone = Yükləməniz hazırdır.
uploadingPageMessage = Faylınız yükləndikdən sonra vaxtı çıxma seçimlərini qura biləcəksiz.
uploadingPageCancel = Yükləməni ləğv et
uploadCancelNotification = Yükləməniz ləğv edildi.
uploadingPageLargeFileMessage = Fayl böyükdür və yükləmək çox vaxt ala bilər. Səbirli olun!
uploadingFileNotification = Yükləmə bitdiyində xəbər ver.
uploadSuccessConfirmHeader = Göndərməyə hazır
uploadSvgAlt = Yüklə
uploadSuccessTimingHeader = Faylınızın keçidinin 1 endirmədən və ya 24 saatdan sonra vaxtı çıxacaq.
expireInfo = Faylınız üçün keçidin vaxtı { $downloadCount } sonra və ya { $timespan } tarixində keçəcək.
downloadCount =
{ $num ->
[one] 1 endirmə
@@ -36,76 +14,26 @@ timespanHours =
[one] 1 saat
*[other] { $num } saat
}
copyUrlFormLabelWithName = Faylınızı göndərmək üçün keçidi köçürün: { $filename }
copyUrlFormButton = Buferə köçür
copiedUrl = Köçürüldü!
deleteFileButton = Faylı sil
sendAnotherFileLink = Başqa fayl göndər
# Alternative text used on the download link/button (indicates an action).
downloadAltText = Endir
downloadsFileList = Endirmələr
# Used as header in a column indicating the amount of time left before a
# download link expires (e.g. "10h 5m")
timeFileList = Vaxt
# Used as header in a column indicating the number of times a file has been
# downloaded
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).
downloadButtonLabel = Endir
downloadNotification = Endirməniz tamamlandı.
downloadFinish = Endirmə Tamamlandı
# 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 Yoxla
downloadingPageProgress = { $filename } faylı ({ $size }) endirilir
downloadingPageMessage = Lütfən faylı endirib şifrəsini açarkən vərəqi açıq buraxın.
errorAltText = Yükləmə xətası
errorPageHeader = Nəsə səhv getdi!
errorPageMessage = Faylı yüklərkən xəta baş verdi.
errorPageLink = Başqa fayl göndər
fileTooBig = Fayl yükləmək üçün çox böyükdür. Fayl { $size }-dan az olmalıdır.
linkExpiredAlt = Keçidin vaxtı çıxıb
expiredPageHeader = Keçidin vaxtı çıxıb və ya heç vaxt olmayıb!
notSupportedHeader = Səyyahınız dəstəklənmir.
# Firefox Send is a brand name and should not be localized.
notSupportedDetail = Heyf ki, bu səyyah Firefox Send-ə güc verən web texnologiyalarını dəstəkləmir. Fərqli bir səyyah yoxlamalısınız. Biz Firefox məsləhət görürük!
notSupportedLink = Səyyahım niyə dəstəklənmir?
notSupportedOutdatedDetail = Heyf ki, Firefox səyyahının bu versiyası Firefox Send-ə güc verən web texnologiyalarını dəstəkləmir. Səyyahınızı yeniləməlisiniz.
updateFirefox = Firefox-u Yenilə
downloadFirefoxButtonSub = Pulsuz Endir
uploadedFile = Fayl
copyFileList = Keçidi Köçürt
# expiryFileList is used as a column header
expiryFileList = Vaxtı çıxma tarixi
deleteFileList = Sil
nevermindButton = Vacib deyil
legalHeader = Şərtlər və Məxfilik
legalNoticeTestPilot = Firefox Send Test Pilot eksperimentidir, Test Pilot <a>Xidmət Şərtləri</a> və <a>Məxfilik Bildirişi</a>-nə tabedir. Bu eksperiment və məlumat yığma haqqında <a>buradan</a> öyrənə bilərsiz.
legalNoticeMozilla = Firefox Send saytının istifadəsi həmçinin Mozilla-nın <a>Saytlar üçün Məxfilik Bildirişi</a> və <a>Sayt İstifadə Şərtləri</a>-nə tabedir.
deletePopupText = Fayl silinsin?
deletePopupYes = Bəli
deletePopupCancel = Ləğv et
deleteButtonHover = Sil
copyUrlHover = Keçidi Köçürt
footerLinkLegal = Hüquqi
# Test Pilot is a proper name and should not be localized.
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
changePasswordButton = Dəyişdir
passwordTryAgain = Səhv parol. Təkrar yoxlayın.
reportIPInfringement = Əqli-mülkiyyət pozuntusu bildir
javascriptRequired = Firefox Send üçün JavaScript lazımdır
whyJavascript = Firefox Send niyə JavaScript tələb edir?
enableJavascript = Lütfən JavaScript-i aktiv edib təkrar yoxlayın.
@@ -113,9 +41,32 @@ enableJavascript = Lütfən JavaScript-i aktiv edib təkrar yoxlayın.
expiresHoursMinutes = { $hours } saat { $minutes } dəq
# A short representation of a countdown timer containing the number of minutes remaining as digits, example "56m"
expiresMinutes = { $minutes } dəq
# A short status message shown when a password is successfully set
passwordIsSet = Parol quruldu
# A short status message shown when the user enters a long password
maxPasswordLength = Maksimum parol uzunluğu: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = Parol qurula bilmədi
## Send version 2 strings
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
-send-brand = Firefox Send
-send-short-brand = Send
-firefox = Firefox
-mozilla = Mozilla
# byte abbreviation
bytes = B
# kibibyte abbreviation
kb = KB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
copyLinkButton = Keçidi köçür
uploadButton = Yüklə
signInOnlyButton = Daxil ol
signOut = Çıx
okButton = Tamam
downloadingTitle = Endirilir
shareLinkButton = Keçidi paylaş

146
public/locales/azz/send.ftl Normal file
View File

@@ -0,0 +1,146 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Nikan uelis tikijkuilos tein tiknemilijtos
importingFile = Mokalakijtok…
encryptingFile = Motatijtok…
decryptingFile = Kichiujtok se uelis kiixtajtoltis ya…
downloadCount =
{ $num ->
*[undefined] 1 kitemouijtok / { $num } kintemouijtok
}
timespanHours =
{ $num ->
*[undefined] 1 hora / { $num } hora
}
copiedUrl = ¡Moixkopinak!
unlockInputPlaceholder = Ichtakatajtol
unlockButtonLabel = Xikajchiua tein amo kikaua maj tekiti
downloadButtonLabel = Xiktemoui
downloadFinish = Nochi motemouij ya
fileSizeProgress = ({ $partialSize } itech { $totalSize })
sendYourFilesLink = Xikejeko Firefox Send
errorPageHeader = ¡Tensa amo kuali kisak!
fileTooBig = Nejin tajkuilol semi ueyi. Moneki amo panos { $size }
linkExpiredAlt = Nejin tein tikpatskilij amo tekititok ya
notSupportedHeader = Monavegador amo kualtia.
notSupportedLink = ¿Keyej nonavegador amo kualtia?
notSupportedOutdatedDetail = Tetayokoltij, Firefox tein tikuitok amo kiselia tepostekitilis tecnología web tein ika tekiti Firefox Send. Moneki tikyankuilis monavegador.
updateFirefox = Maj Firefox moyankuili
deletePopupCancel = Maj motsakuili uan amo tami tein kichiujtok
deleteButtonHover = Maj majchiua
footerLinkLegal = Keniuj motekitiltis
footerLinkPrivacy = Keniuj tikyekpiaj tein tikseliaj
footerLinkCookies = Cookies
passwordTryAgain = Amo yektik ichtakatajtol. Oksepa xikijkuilo.
javascriptRequired = Firefox Send kineki maj moajsi JavaScript
whyJavascript = ¿Keyej Firefox Send kineki maj moajsi JavaScript?
enableJavascript = Se kualtakayot, xikaua maj peua tekiti JavaScript uan oksepa xikejeko.
# A short representation of a countdown timer containing the number of hours and minutes remaining as digits, example "13h 47m"
expiresHoursMinutes = { $hours }h { $minutes }m
# A short representation of a countdown timer containing the number of minutes remaining as digits, example "56m"
expiresMinutes = { $minutes }m
# A short status message shown when the user enters a long password
maxPasswordLength = Keniuj ueyak ichtakatajtol, maj amo pano: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = Nejin ichtakatajtol amo uel kiixtaliani
## Send version 2 strings
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
-send-brand = Firefox Send
-send-short-brand = Xiktitani
-firefox = Firefox
-mozilla = Mozilla
introTitle = Amo ouij uan ichtaka xikinpanoltili oksekin motajkuiloluan archivos
introDescription = { -send-brand } mitspaleuia uan ijkon tikinpanoltilis oksekin motajkuiloluan archivos ika tapoualmej tein amo aksa uelis kiajsikamatis, uan no kitemaka kampa se kipatskilis tein niman ixpoliui. Ijkuin uelis tikichtakaeuas tein tikintitanilis oksekin uan tikyekmatis tein moaxka amo nochipaya mokauas itech Internet.
notifyUploadEncryptDone = Moarchivo moijkuiloj ya kemej amo akin uelis kiixtajtoltis uan se uelis kititanis ya
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Poliui ijkuak tiajsis { $downloadCount } oso { $timespan }
timespanMinutes =
{ $num ->
*[undefined] 1 minuto / { $num } minuto
}
timespanDays =
{ $num ->
*[undefined] 1 tonal / { $num } tonalmej
}
timespanWeeks =
{ $num ->
*[undefined] 1 semana / { $num } semana
}
fileCount =
{ $num ->
*[undefined] 1 archivo / { $num } archivos
}
# byte abbreviation
bytes = B
# kibibyte abbreviation
kb = KB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Nochi tamachiua: { $size }
# the next line after the colon contains a file name
copyLinkDescription = Xikixkopina tein se kipatskilis uan xikinpanoltili oksekin moarchivo:
copyLinkButton = Xikixkopina tein se kipatskilis
downloadTitle = Xiktemoui tajkuilolmej archivos
downloadDescription = Nejin archivo mopanoltij itechkopa { -send-brand } ika tapoualmej tein amo aksa uelis kiajsikamatis, uan no tein ika se kipatskilis tein niman ixpoliui.
trySendDescription = Xikejeko { -send-brand } ijkon amo ouij uelis tikinpanoltilis oksekin motajkuiloluan archivos uan tikyekmatis ke amo tej kipanos.
# count will always be > 10
tooManyFiles =
{ $count ->
*[other] Sayoj { $count } tajkuilolmej archivos uelis tikolochtejkoltis saj.
}
# count will always be > 10
tooManyArchives =
{ $count ->
*[other] Sayoj { $count } tajkuilolmej archivos uelis moajsiskej saj.
}
expiredTitle = Nejin tein tikpatskilij amo tekititos ok.
notSupportedDescription = { -send-brand } amo tekiti ika nejin navegador. { -send-short-brand } okachi kuali tekiti tein ika okachi yankuik { -firefox }, uan no tekitis tein ika okachi yankuikej tel miak navegadores.
downloadFirefox = Xiktemoui { -firefox }
legalTitle = { -send-short-brand } tanauatia ika yekpialis tein moaxka itech tepos
legalDateStamp = Versión 1.0 tein kikixtijkej 12 tonal metsti marzo 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }t { $hours }h { $minutes }m
addFilesButton = Xikinixpejpena tajkuilolmej archivos tein tikintejkoltis
uploadButton = Xiktejkolti
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Xikintilana uan xikinkajkaua tajkuilolmej archivos
# the second part of the string 'Drag and drop files or click to send up to 1GB'
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = oso xikpatskili uan tiktitanis, sayoj tein amo panoua { $size }
addPassword = Xikyekpia ika se ichtakatajtol
emailPlaceholder = Xikijkuilo mocorreo itech tepos
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Xikalakteua uan uelis tiktitanis tein amo panos { $size }
signInOnlyButton = Kampa se kalakteua
accountBenefitTitle = Ximochiuili se cuenta itech { -firefox } oso xikalakteua
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Xikintitani tajkuilolmej archivos tein amo panouaj { $size }
accountBenefitDownloadCount = Xikintitanili tajkuilolmej archivos oksekin
accountBenefitTimeLimit =
{ $count ->
*[undefined] Kampa se kipatskilis maj kisentokakan kualtiakan se tonal ok / { $count } tonalmej ok
}
accountBenefitSync = Itech tein yeski tepos xikixyekana motajkuiloluan archivos tein tikinpanoltilij oksekin
accountBenefitMoz = Okachi tikmatis okseki tapaleuilmej tein kitemaka { -mozilla }
signOut = Kampa se kisa
okButton = Kuali yetok
downloadingTitle = Kitemouijtok
noStreamsWarning = Xa navegador amo uelis kitalij nejin tajkuilol archivo tein tel ueyi kemej se uelis kiyekixtajtoltis ya.
noStreamsOptionCopy = Xikixkopina tein se kipatskilis uan ijkon se uelis kitatapos itech okse navegador
noStreamsOptionFirefox = Xikejeko navegador tein semi techuelita
noStreamsOptionDownload = Maj niksentoka niktatekiujti nejin navegador
downloadFirefoxPromo = Yankuik { -firefox } mitsixpantilia { -send-short-brand }.
# the next line after the colon contains a file name
shareLinkDescription = Xikinpanoltili oksekin tein se kipatskilis uan teuika motajkuilol archivo:
shareLinkButton = Kampa se kipatskilis tein uelis tikinpanoltilis oksekin
# $name is the name of the file
shareMessage = Xiktemoui “{ $name }” ika { -send-brand }: amo ouij uelis tikinpanoltilis oksekin motajkuiloluan archivos uan tikyekmatis ke amo tej kipanos
trailheadPromo = Kemaj, uelis tikyekpias tein moaxka itech tepos. Xipoui Firefox.
learnMore = Xiktemoui tajkuilolmej archivos.

196
public/locales/be/send.ftl Normal file
View File

@@ -0,0 +1,196 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
importingFile = Імпартаванне...
encryptingFile = Зашыфроўка...
decryptingFile = Расшыфроўка...
downloadCount =
{ $num ->
[one] { $num } сцягванне
[few] { $num } сцягванні
*[many] { $num } сцягванняў
}
timespanHours =
{ $num ->
[one] { $num } гадзіна
[few] { $num } гадзіны
*[many] { $num } гадзін
}
copiedUrl = Скапіявана!
unlockInputPlaceholder = Пароль
unlockButtonLabel = Разблакаваць
downloadButtonLabel = Сцягнуць
downloadFinish = Сцягванне скончана
fileSizeProgress = ({ $partialSize } з { $totalSize })
sendYourFilesLink = Паспрабуйце Firefox Send
errorPageHeader = Нешта пайшло не так!
fileTooBig = Гэты файл надта вялікі. Ён мусіць быць меншым за { $size }
linkExpiredAlt = Тэрмін дзеяння спасылкі сышоў
notSupportedHeader = Ваш браўзер не падтрымліваецца.
notSupportedLink = Чаму мой браўзер не падтрымліваецца?
notSupportedOutdatedDetail = На жаль, гэтая версія Firefox не падтрымлівае вэб-тэхналогію, што забяспечвае працу Firefox Send. Вам трэба абнавіць свой браўзер.
updateFirefox = Абнавіць Firefox
deletePopupCancel = Скасаваць
deleteButtonHover = Выдаліць
footerLinkLegal = Прававыя звесткі
footerLinkPrivacy = Прыватнасць
footerLinkCookies = Кукі
passwordTryAgain = Некарэктны пароль. Паспрабуйце зноў.
javascriptRequired = Для Firefox Send неабходны JavaScript
whyJavascript = Чаму для Firefox Send неабходны JavaScript?
enableJavascript = Калі ласка, уключыце JavaScript і паспрабуйце зноў.
# A short representation of a countdown timer containing the number of hours and minutes remaining as digits, example "13h 47m"
expiresHoursMinutes = { $hours } г. { $minutes } хв.
# A short representation of a countdown timer containing the number of minutes remaining as digits, example "56m"
expiresMinutes = { $minutes } хв.
# A short status message shown when the user enters a long password
maxPasswordLength = Максімальная даўжыня пароля: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = Гэты пароль немагчыма паставіць
## Send version 2 strings
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
-send-brand = Firefox Send
-send-short-brand = Send
-firefox = Firefox
-mozilla = Mozilla
introTitle = Просты і прыватны абмен файламі
introDescription = { -send-brand } дазваляе вам абменьвацца файламі са скразным шыфраваннем і спасылкамі з абмежаваным тэрмінам дзеяння. Такім чынам, вы можаце дзяліцца файламі прыватна і быць упэўненым, што яны не застануцца ў сеціве назаўжды.
notifyUploadEncryptDone = Ваш файл зашыфраваны і гатовы да адпраўкі
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Тэрмін дзеяння сыдзе праз { $downloadCount } або { $timespan }
timespanMinutes =
{ $num ->
[one] { $num } хвіліна
[few] { $num } хвіліны
*[many] { $num } хвілін
}
timespanDays =
{ $num ->
[one] { $num } дзень
[few] { $num } дні
*[many] { $num } дзён
}
timespanWeeks =
{ $num ->
[one] { $num } тыдзень
[few] { $num } тыдні
*[many] { $num } тыдняў
}
fileCount =
{ $num ->
[one] { $num } файл
[few] { $num } файлы
*[many] { $num } файлаў
}
# byte abbreviation
bytes = Б
# kibibyte abbreviation
kb = КБ
# mebibyte abbreviation
mb = МБ
# gibibyte abbreviation
gb = ГБ
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num } { $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Агульны памер: { $size }
# the next line after the colon contains a file name
copyLinkDescription = Скапіруйце спасылку, каб падзяліцца сваім файлам:
copyLinkButton = Скапіраваць спасылку
downloadTitle = Сцягнуць файлы
downloadDescription = Гэтым файлам падзяліліся праз { -send-brand } са скразным шыфраваннем і спасылкай з абмежаваным тэрмінам дзеяння.
trySendDescription = Паспрабуйце { -send-brand } для простага і бяспечнага абмену файламі.
# count will always be > 10
tooManyFiles =
{ $count ->
[one] Толькі { $count } файл можна загрузіць за раз.
[few] Толькі { $count } файлы можна загрузіць за раз.
*[many] Толькі { $count } файлаў можна загрузіць за раз.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] Толькі { $count } архіў дазволены.
[few] Толькі { $count } архівы дазволены.
*[many] Толькі { $count } архіваў дазволена.
}
expiredTitle = Тэрмін дзеяння гэтай спасылкі сышоў.
notSupportedDescription = { -send-brand } не будзе працаваць у гэтым браўзеры. Лепей за ўсё { -send-short-brand } працуе з апошняй версіяй { -firefox } і будзе працаваць з бягучай версіяй большасці браўзераў.
downloadFirefox = Сцягнуць { -firefox }
legalTitle = Палітыка прыватнасці { -send-short-brand }
legalDateStamp = Версія 1.0 ад 12 сакавіка 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days } д. { $hours } г. { $minutes } хв.
addFilesButton = Выберыце файлы для загрузкі
trustWarningMessage = Пераканайцеся, што давяраеце атрымальніку, калі дзеліцеся канфідэнцыяльнымі звесткамі.
uploadButton = Загрузіць
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Перацягніце файлы сюды
# the second part of the string 'Drag and drop files or click to send up to 1GB'
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = або клікніце, каб адправіць да { $size }:
addPassword = Абараніць паролем
emailPlaceholder = Увядзіце сваю электронную пошту
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Увайдзіце, каб адпраўляць да { $size }
signInOnlyButton = Увайсці
accountBenefitTitle = Стварыце ўліковы запіс { -firefox } або ўвайдзіце
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Дзяліцеся файламі да { $size }
accountBenefitDownloadCount = Дзяліцеся файламі з большай колькасцю людзей
accountBenefitTimeLimit =
{ $count ->
[one] Трымайце спасылкі актыўнымі да { $count } дня
[few] Трымайце спасылкі актыўнымі да { $count } дзён
*[many] Трымайце спасылкі актыўнымі да { $count } дзён
}
accountBenefitSync = Кіруйце адпраўленымі файламі з любой прылады
accountBenefitMoz = Даведайцеся пра іншыя сэрвісы { -mozilla }
signOut = Выйсці
okButton = ОК
downloadingTitle = Сцягваецца
noStreamsWarning = Гэты браўзер не мае магчымасці расшыфраваць такі вялікі файл.
noStreamsOptionCopy = Скапіруйце спасылку, каб адкрыць у іншым браўзеры
noStreamsOptionFirefox = Паспрабуйце наш любімы браўзер
noStreamsOptionDownload = Працягнуць з гэтым браўзерам
downloadFirefoxPromo = { -send-short-brand } прыйшоў да вас з цалкам новага { -firefox }.
# the next line after the colon contains a file name
shareLinkDescription = Падзяліцеся спасылкай на свой файл:
shareLinkButton = Падзяліцца спасылкай
# $name is the name of the file
shareMessage = Сцягніце «{ $name }» з { -send-brand }: простага і бяспечнага файлаабменніка
trailheadPromo = Ёсць спосаб абараніць вашу прыватнасць. Далучайцеся да Firefox.
learnMore = Падрабязней.
downloadFlagged = Гэта спасылка адключана за парушэнне ўмоў прадастаўлення паслуг.
downloadConfirmTitle = Яшчэ адна рэч
downloadConfirmDescription = Пераканайцеся, што давяраеце адпраўніку гэтага файла, бо мы не можам пераканацца, што ён не нашкодзіць Вашай прыладзе.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Я давяраю адпраўніку гэтага файла
[few] Я давяраю адпраўніку гэтых файлаў
*[many] Я давяраю адпраўніку гэтых файлаў
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Паведаміць, што гэты файл падазроныя
[few] Паведаміць, што гэтыя файлы падазроныя
*[many] Паведаміць, што гэтыя файлы падазроныя
}
reportDescription = Дапамажыце нам зразумець, што адбываецца. Як вы лічыце, што не так з гэтымі файламі?
reportUnknownDescription = Калі ласка, перайдзіце да адрасу спасылкі, пра якую хочаце паведаміць, і націсніце “{ reportFile }”.
reportButton = Паведаміць
reportReasonMalware = Гэтыя файлы ўтрымліваюць шкоднасныя праграмы альбо з'яўляюцца часткай фішынг-атакі.
reportReasonPii = Гэтыя файлы ўтрымліваюць асабістую інфармацыю пра мяне.
reportReasonAbuse = Гэтыя файлы ўтрымліваюць незаконнае альбо абразлівае змесціва.
reportReasonCopyright = Каб паведаміць аб парушэнні аўтарскіх правоў або гандлёвых марак, скарыстайцеся алгарытмам, апісаным на <a>гэтай старонцы</a>.
reportedTitle = Пра файлы паведамлена
reportedDescription = Дзякуй. Мы атрымалі Вашу заяву наконт гэтых файлаў.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Roit hoc'h ali
importingFile = Oc'h enporzhiañ …
encryptingFile = Oc'h enrinegañ..
decryptingFile = Oc'h ezrinegañ...
@@ -140,6 +139,7 @@ legalDateStamp = Handelv 1.0, d'an 12 a viz Meurzh 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }e { $minutes }m
addFilesButton = Diuzit ur restr da bellgas
trustWarningMessage = Bezit sur ho peus fiziañs en ho tegemerer pa rannit roadennoù kizidik.
uploadButton = Pellgas
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Riklit ha laoskit restroù
@@ -180,3 +180,6 @@ shareLinkButton = Rannañ an ere
shareMessage = Pellgargañ "{ $name }" gant { -send-brand }: rannañ restroù en un doare eeun ha prevez
trailheadPromo = Un doare a zo da wareziñ ho puhez prevez. Tremenit da Firefox.
learnMore = Gouzout hiroc'h.
downloadFlagged = Diweredekaet eo bet an ere-se dre ma ne zouje ket ouzh an divizoù arver.
downloadConfirmTitle = Un draig ouzhpenn
downloadConfirmDescription = Bezit sur ho peus fiziañs en deus en deus kaset ar restr-mañ dre ma n'haller ket gwiriañ ne freuzo ket ho trevnad.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Comentaris
importingFile = S'està important…
encryptingFile = S'està xifrant…
decryptingFile = S'està desxifrant…
@@ -116,6 +115,7 @@ legalDateStamp = Versió 1.0, amb data del 12 de març de 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days } d { $hours } h { $minutes } min
addFilesButton = Seleccioneu els fitxers que voleu pujar
trustWarningMessage = Assegureu-vos que confieu en el destinatari quan compartiu dades confidencials.
uploadButton = Puja
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Arrossegueu i deixeu anar els fitxers
@@ -151,3 +151,35 @@ shareLinkDescription = Compartiu l'enllaç al vostre fitxer:
shareLinkButton = Comparteix l'enllaç
# $name is the name of the file
shareMessage = Baixeu «{ $name }» amb el { -send-brand }: compartició de fitxers senzilla i segura
trailheadPromo = Hi ha una manera de protegir la vostra privadesa. Uniu-vos al Firefox.
learnMore = Més informació.
downloadFlagged = Aquest enllaç s'ha desactivat per infringir les condicions del servei.
downloadConfirmTitle = Una cosa més
downloadConfirmDescription = Assegureu-vos que confieu en la persona que us ha enviat aquest fitxer, perquè nosaltres no podem verificar que no malmeti el vostre dispositiu.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Confio en la persona que ha enviat aquest fitxer
*[other] Confio en la persona que ha enviat aquests fitxers
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Informa que aquest fitxer és sospitós
*[other] Informa que aquests fitxers són sospitos
}
reportDescription = Ajudeu-nos a entendre què passa. Quin problema creieu que tenen aquests fitxers?
reportUnknownDescription = Aneu a l'URL de l'enllaç sobre el qual voleu informar i feu clic a «{ reportFile }».
reportButton = Informa
reportReasonMalware = Aquests fitxers contenen programari maliciós o formen part d'un atac de pesca electrònica.
reportReasonPii = Aquests fitxers contenen informació d'identificació personal meva.
reportReasonAbuse = Aquests fitxers inclouen contingut il·legal o abusiu.
reportReasonCopyright = Per informar sobre una infracció de drets dautor o de marca comercial, utilitzeu el procés descrit en <a>aquesta pàgina</a>.
reportedTitle = S'ha informat d'aquests fitxers
reportedDescription = Gràcies. Hem rebut el vostre informe sobre aquests fitxers.

View File

@@ -2,7 +2,7 @@
title = Firefox Send
siteFeedback = Rutzijol
importingFile = Tajin nijik…
encryptingFile = Tajin newäx rusik'ixik...
encryptingFile = Tajin newäx rusik'ixik
decryptingFile = Tajin netamäx rusik'ixik...
downloadCount =
{ $num ->
@@ -151,3 +151,5 @@ shareLinkDescription = Nakomonij ri ximonel rik'in ri awokisab'al:
shareLinkButton = Tikomonïx ximonel
# $name is the name of the file
shareMessage = Tiqasäx "{ $name }" rik'in { -send-brand }: man k'ayew ta chuqa' ütz kikomonik ri yakb'äl
trailheadPromo = K'o jun rub'anikil richin nachajij ri awichinanem. Tatunu' awi' rik'in ri Firefox.
learnMore = Tetamäx ch'aqa' chik.

155
public/locales/ckb/send.ftl Normal file
View File

@@ -0,0 +1,155 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = ڕەخنەوپێشنیار
importingFile = هاوردەکردن...
encryptingFile = بەهێماکردن...
decryptingFile = هێمالابردن...
downloadCount =
{ $num ->
[one] 1 داگرتن
*[other] { $num } داگرتن
}
timespanHours =
{ $num ->
[one] 1 کاژێر
*[other] { $num } کاژێر
}
copiedUrl = لەبەرگیرا!
unlockInputPlaceholder = وشەی تێپەڕبوون
unlockButtonLabel = کردنەوە
downloadButtonLabel = داگرتن
downloadFinish = داگرتن تەواو بوو
fileSizeProgress = ({ $partialSize } لە { $totalSize })
sendYourFilesLink = Firefox ناردن تاقیبکەرەوە
errorPageHeader = هەڵەیەک ڕوویدا
fileTooBig = ئەم پەڕگەیە زۆر گەورەیە بۆ بارکردن. پێویستە لە { $size } بچووک تر بێت
linkExpiredAlt = بەستەر بەسەرچووە
notSupportedHeader = وێبگەڕەکەت پشتگیری ناکرێت
notSupportedLink = بۆ وێبگەڕەکەم پشتگیری ناکرێت؟
notSupportedOutdatedDetail = بەداخەوە ئەم وەشانەی Firefox پشتگیری ئەو جۆرە تەکنەلۆژییە ناکات کە پێویستە بۆ Firefox Send. پێویستە وێبگەڕەکەت نوێبکەیتەوە.
updateFirefox = فاەرفۆکس نوێبکەرەوە
deletePopupCancel = پاشگەزبوونەوە
deleteButtonHover = سڕینەوە
footerLinkLegal = یاسایی
footerLinkPrivacy = تایبەتیی
footerLinkCookies = شەکرۆکە
passwordTryAgain = وشەی تێپەڕبوون هەڵەیە. هەوڵ بدەرەوە.
javascriptRequired = فارفۆکسی ناردن پێویستە بە JavaScript هەیە
whyJavascript = بۆچی پێویستی بە JavaScript هەیە؟
enableJavascript = تکایە JavaScript چالاک بکە وهەوڵ بدەرەوە.
# A short representation of a countdown timer containing the number of hours and minutes remaining as digits, example "13h 47m"
expiresHoursMinutes = { $hours }ک { $minutes }خ
# A short representation of a countdown timer containing the number of minutes remaining as digits, example "56m"
expiresMinutes = { $minutes }خ
# A short status message shown when the user enters a long password
maxPasswordLength = زۆرترین درێژی وشەی تێپەڕی ڕێگەپێدراو: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = ناتوانرێت وشەی تێپەڕ دابنرێت
## Send version 2 strings
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
-send-brand = Firefox Send
-send-short-brand = Send
-firefox = Firefox
-mozilla = Mozilla
introTitle = سانا، بڵاوکەرەوەی پەڕگەی تایبەتیی
introDescription = { -send-brand } ڕێگەت دەدات پەڕگەکان بڵاوبکەیتەوە بە شێوەی هێما کردنی کۆتا-بۆ-کۆتا و بەستەرێک کە خۆکارانە بەسەردەچێت. بۆیە دەتوانیت ئاگاداری ئەوە بیت کە چ پەڕگەیەک بە تایبەتی بڵاودەکەیتەوە و دڵنیادەبیتەوە کە شتەکانت بە سەرهێڵی نامێننەوە هەتا کۆتایی.
notifyUploadEncryptDone = پەڕگەیە بەهێماکراوە ئێستا ئامادەیە بۆ ناردن
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = بەسەردەچێت دووای { $downloadCount } یان { $timespan }
timespanMinutes =
{ $num ->
[one] 1 خولەک
*[other] { $num } خولەک
}
timespanDays =
{ $num ->
[one] 1 ڕؤژ
*[other] { $num } ڕۆژ
}
timespanWeeks =
{ $num ->
[one] 1 هەفتە
*[other] { $num } هەفتە
}
fileCount =
{ $num ->
[one] 1 پەڕگە
*[other] { $num } پەڕگە
}
# byte abbreviation
bytes = بایت
# kibibyte abbreviation
kb = ک.بایت
# mebibyte abbreviation
mb = م.بایت
# gibibyte abbreviation
gb = گ.بایت
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = قەبارەی گشتی: { $size }
# the next line after the colon contains a file name
copyLinkDescription = بەستەر لەبەربگرەوە بۆ بڵاوکردنەوەی پەڕگە:
copyLinkButton = بەستەر لەبەربگرەوە
downloadTitle = پەڕگەکان دابگرە
downloadDescription = ئەم پەڕگەیە لە لایەن { -send-brand } بلاوکراوەتەوە کە بەهێماکراوە بە شێوەی کۆتا-بۆ-کۆتا بە بەستەرێک کە خۆکارانە بەسەردەچێت.
trySendDescription = { -send-brand } تاقیبکەرەوە بۆ سانایی، پارێزراو لە بڵاوکردنەوەی پەڕگە.
# count will always be > 10
tooManyFiles =
{ $count ->
[one] تەنها 1 پەڕگە دەتوانیت باربکەیت لەم کاتەدا.
*[other] تەنها { $count } پەڕگە دەتوانی باربکەیت لەم کاتەدا.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] تەنها 1 ئەرشیف ڕێپێدراوە.
*[other] تەنها { $count } ئەرشیف ڕێپێدراوە.
}
expiredTitle = بەستەر بەسەرچووە.
notSupportedDescription = { -send-brand } کارنکات لەگەڵ ئەم وێبگەڕە. { -send-short-brand } باش کاردەکات لەگەڵ کۆتا وەشانی { -firefox }، وکاردەکات لەگەڵ زۆربەی وەشانی ئێستای وێبگەڕەکان.
downloadFirefox = { -firefox } دابگرە
legalTitle = تێبینی تایبەتیی { -send-short-brand }
legalDateStamp = وەشان 1.0، بەروار کراو لە 12 ئازار، 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days } ڕ { $hours } ک{ $minutes } خ
addFilesButton = پەڕگەکان هەڵبژێرە بۆ بارکردن
uploadButton = بارکردن
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = ڕاکێشان و دانانی پەڕگەکان
# the second part of the string 'Drag and drop files or click to send up to 1GB'
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = یان کرتە بکە بۆ ناردنی قەبارەی تاوەکوو { $size }
addPassword = بپارێزە لەگەڵ وشەی تێپەڕ
emailPlaceholder = پۆستی ئەلکترۆنی بنووسە
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = بچۆژوورەوە بۆ ناردنی قەبارەی تاوەکوو { $size }
signInOnlyButton = بچۆژوورەوە
accountBenefitTitle = هەژماری { -firefox } درووست بکە یان بچۆژوورەوە
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = پەڕگە بڵاوبکەرەوە تاوەکوو قەبارەی { $size }
accountBenefitDownloadCount = پەڕگەکان لەگەڵ خەڵکی زیاتر بڵاوبکەرەوە
accountBenefitTimeLimit =
{ $count ->
[one] بەستەرەکان بەکارایی بهێڵەوە تا 1 ڕۆژ
*[other] بەستەرەکان بەکارایی بهێڵەوە تا { $count } ڕۆژ
}
accountBenefitSync = پەڕگە بڵآوکراوەکان بەڕێوەبەرە لەهەر ئامێرێکەوە
accountBenefitMoz = زیاتر بزانە دەربارەی خزمەتگوزارییەکانی تری { -mozilla }
signOut = بچۆ دەرەوە
okButton = باشە
downloadingTitle = دادەگیرێت...
noStreamsWarning = لەوانەیە ئەم وێبگەڕە نەتوانێت پەڕگەی وا گەورە بە هێما بکات.
noStreamsOptionCopy = بەستەر لەبەربگرەوە بۆ کردنەوەی لە وێبگەڕێکی تر
noStreamsOptionFirefox = وێبگەڕی دڵخوازی ئێمە تاقیبکەرەوە
noStreamsOptionDownload = بەردەوام بە لەگەڵ ئەم وێبگەڕە
downloadFirefoxPromo = { -send-short-brand } پیشکەش کراوە بە تۆ لە لایەن { -firefox }.
# the next line after the colon contains a file name
shareLinkDescription = بەستەر بڵاوبکەرەوە بۆ پەڕگەکەت:
shareLinkButton = بەستەر بڵاوبکەرەوە
# $name is the name of the file
shareMessage = “{ $name }” دابگرە لەگەڵ { -send-brand }: سانا، پاریزراو لە بڵاوکردنەوەی پەڕگە
trailheadPromo = ڕێگەیەک هەیە بۆ پارێزگاریکردنی تایبەتێتی خۆت. بەشدار بە لە فایەرفۆکس.
learnMore = زیاتر بزانە

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Zpětná vazba
importingFile = Probíhá import…
encryptingFile = Probíhá šifrování…
decryptingFile = Probíhá dešifrování…
@@ -22,7 +21,7 @@ unlockButtonLabel = Odemknout
downloadButtonLabel = Stáhnout
downloadFinish = Stahování dokončeno
fileSizeProgress = ({ $partialSize } z { $totalSize })
sendYourFilesLink = Vyzkoušejte Firefox Send
sendYourFilesLink = Vyzkoušet Firefox Send
errorPageHeader = Nastala chyba!
fileTooBig = Tento soubor je příliš veliký. Velikost nahrávaných souborů by neměla překročit { $size }.
linkExpiredAlt = Platnost odkazu vypršela
@@ -137,7 +136,7 @@ copyLinkDescription = Soubor můžete sdílet tímto odkazem:
copyLinkButton = Zkopírovat odkaz
downloadTitle = Stáhnout soubory
downloadDescription = Tento soubor byl sdílen přes { -send-brand(case: "acc") } s end-to-end šifrováním a odkazem s omezenou platností.
trySendDescription = Zkuste { -send-brand(case: "acc") } pro jednoduché a bezpečné sdílení souborů
trySendDescription = Vyzkoušejte jednoduché a bezpečné sdílení souborů s { -send-brand(case: "ins") }
# count will always be > 10
tooManyFiles =
{ $count ->
@@ -160,6 +159,7 @@ legalDateStamp = Verze 1.0, 12. března 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
addFilesButton = Vyberte soubory k nahrání
trustWarningMessage = Ujistěte se, že adresátovi důvěřujete pro sdílení vašich důvěrných dat.
uploadButton = Nahrát
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Přetažením myší nebo kliknutím sem
@@ -196,5 +196,37 @@ shareLinkDescription = Sdílet odkaz na soubor:
shareLinkButton = Sdílet odkaz
# $name is the name of the file
shareMessage = Stáhněte si soubor „{ $name }“ s { -send-brand(case: "ins") } - jednoduché a bezpečné sdílení souborů
trailheadPromo = Existuje snadný způsob pro ochranu vašeho soukromí. Používejte Firefox.
trailheadPromo = Existuje způsob, jak ochránit své soukromí. Používejte Firefox.
learnMore = Zjistit více.
downloadFlagged = Tento odkaz byl pro porušení podmínek používání služby deaktivován.
downloadConfirmTitle = Ještě jedna věc
downloadConfirmDescription = Ujistěte se, že opravdu důvěřujete odesílateli tohoto souboru, protože nemůžeme potvrdit bezpečnost jeho otevření na vašem zařízení.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Odesílateli tohoto souboru důvěřuji
[few] Odesílateli těchto souborů důvěřuji
*[other] Odesílateli těchto souborů důvěřuji
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Nahlásit tento soubor jako podezřelý
[few] Nahlásit tyto soubory jako podezřelé
*[other] Nahlásit tyto soubory jako podezřelé
}
reportDescription = Pomozte nám. Co si myslíte, že je s těmito soubory špatně?
reportUnknownDescription = Otevřete odkaz, který chcete nahlásit, a klepněte na „{ reportFile }“.
reportButton = Nahlásit
reportReasonMalware = Tyto soubory obsahují malware nebo jsou součástí phishingového útoku.
reportReasonPii = Tyto soubory obsahují mé osobní údaje.
reportReasonAbuse = Tyto soubory obsahují nelegální nebo urážlivý obsah.
reportReasonCopyright = Chcete-li nahlásit porušení autorských práv nebo ochranných známek, použijte postup popsaný na <a>této stránce</a>.
reportedTitle = Soubory byly nahlášeny
reportedDescription = Děkujeme vám za zaslané hlášení ohledně těchto souborů.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Adborth
importingFile = Mewnforio…
encryptingFile = Wrthi'n amgryptio…
decryptingFile = Wrthi'n dadgryptio…
@@ -148,6 +147,7 @@ legalDateStamp = Fersiwn 1.0, dyddiedig Mawrth 12, 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days } d { $hours } a { $minutes } m
addFilesButton = Dewis ffeiliau i'w llwytho i fyny
trustWarningMessage = Gwnewch yn siŵr eich bod yn ymddiried yn eich derbynnydd pan yn rhannu data sensitif.
uploadButton = Llwytho i fyny
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Llusgo a gollwng ffeiliau
@@ -189,3 +189,41 @@ shareLinkButton = Rhannu'r ddolen
shareMessage = Llwytho i lawr “{ $name }” gyda { -send-brand }: rhannu ffeiliau syml a diogel
trailheadPromo = Mae ffordd o ddiogelu eich preifatrwydd. Ymunwch â Firefox.
learnMore = Dysgu rhagor.
downloadFlagged = Mae'r ddolen wedi'i analluogi am fynd yn groes i'r telerau gwasanaeth.
downloadConfirmTitle = Un peth arall
downloadConfirmDescription = Gwnewch yn siŵr eich bod yn ymddiried yn y person a anfonodd y ffeil hon atoch oherwydd nid ydym yn gallu gwirio na fydd yn niweidio'ch dyfais.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[zero] Rwy'n ymddiried yn y person anfonodd yr { $count } ffeil yma
[one] Rwy'n ymddiried yn y person anfonodd yr { $count } ffeil yma
[two] Rwy'n ymddiried yn y person anfonodd yr { $count } ffeil yma
[few] Rwy'n ymddiried yn y person anfonodd yr { $count } ffeil yma
[many] Rwy'n ymddiried yn y person anfonodd yr { $count } ffeil yma
*[other] Rwy'n ymddiried yn y person anfonodd yr { $count } ffeil yma
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[zero] Adrodd y { $count } ffeil yma fel rhai amheus
[one] Adrodd y { $count } ffeil yma fel un amheus
[two] Adrodd y { $count } ffeil yma fel rhai amheus
[few] Adrodd y { $count } ffeil yma fel rhai amheus
[many] Adrodd y { $count } ffeil yma fel rhai amheus
*[other] Adrodd y { $count } ffeil yma fel rhai amheus
}
reportDescription = Helpwch ni i ddeall beth sy'n digwydd. Beth ydych chi'n meddwl sydd o'i le gyda'r ffeiliau hyn?
reportUnknownDescription = Ewch i url y ddolen rydych am adrodd amdani a chlicio “{ reportFile }”.
reportButton = Adrodd
reportReasonMalware = Mae'r ffeiliau hyn yn cynnwys meddalwedd maleisus neu'n rhan o ymosodiad gwe-rwydo.
reportReasonPii = Mae'r ffeiliau hyn yn cynnwys gwybodaeth bersonol adnabyddadwy amdanaf i.
reportReasonAbuse = Mae'r ffeiliau hyn yn cynnwys deunydd anghyfreithlon neu ymosodol.
reportReasonCopyright = I adrodd ar dorri hawlfraint neu nod masnach, defnyddiwch y broses sy'n cael ei ddisgrifio yn y <a>dudalen hon</a>.
reportedTitle = Ffeiliau Adroddwyd Amdanynt
reportedDescription = Diolch. Rydym wedi derbyn eich adroddiad ar y ffeiliau hyn.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Feedback
importingFile = Importerer…
encryptingFile = Krypterer…
decryptingFile = Dekrypterer…
@@ -116,6 +115,7 @@ legalDateStamp = Version 1.0, udsendt d. 12. marts 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days } d. { $hours } t. { $minutes } m.
addFilesButton = Vælg filer, der skal uploades
trustWarningMessage = Vær sikker på, at du stoler på modtageren, når du deler følsomme data.
uploadButton = Upload
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Træk og slip filer
@@ -151,3 +151,35 @@ shareLinkDescription = Del linket til din fil:
shareLinkButton = Del link
# $name is the name of the file
shareMessage = Hent { $name } med { -send-brand } - simpel og sikker fildeling
trailheadPromo = Beskyt dine digitale rettigheder. Slut dig til Firefox.
learnMore = Læs mere.
downloadFlagged = Dette link er blevet deaktiveret for overtrædelse af tjenestevilkårene.
downloadConfirmTitle = En ting til
downloadConfirmDescription = Vær sikker på, at du stoler på afsenderen af denne fil, da vi ikke kan garantere, at den ikke vil skade din enhed.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Jeg stoler på personen, som sendte denne fil
*[other] Jeg stoler på personen, som sendte disse filer
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Rapportér denne fil som mistænkelig
*[other] Rapportér disse filer som mistænkelige
}
reportDescription = Hjælp os med at forstå, hvad der foregår. Hvad er der i vejen med disse filer?
reportUnknownDescription = Gå til adressen på det link, du vil rapportere, og klik på “{ reportFile }”.
reportButton = Rapportér
reportReasonMalware = Disse filer indeholder malware eller er en del af et phishing-angreb.
reportReasonPii = Disse filer indeholder oplysninger om mig, der er personligt identificerbare.
reportReasonAbuse = Disse filer indeholder ulovligt eller voldeligt indhold.
reportReasonCopyright = Hvis du vil rapportere overtrædelse af ophavsrettigheder eller varemærker, skal du bruge processen, som er beskrevet på <a>denne side</a>.
reportedTitle = Rapporterede filer
reportedDescription = Tak. Vi har modtaget din rapport om disse filer.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Feedback
importingFile = Wird importiert…
encryptingFile = Wird verschlüsselt…
decryptingFile = Wird entschlüsselt…
@@ -116,6 +115,7 @@ legalDateStamp = Version 1.0, Stand 12. März 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
addFilesButton = Dateien zum Hochladen auswählen
trustWarningMessage = Sie sollten dem Empfänger vertrauen, wenn Sie vertrauliche Daten weitergeben.
uploadButton = Hochladen
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Dateien per Drag & Drop einfügen
@@ -153,3 +153,33 @@ shareLinkButton = Link teilen
shareMessage = Laden Sie „{ $name }“ mit { -send-brand } herunter: einfaches, sicheres Teilen von Dateien
trailheadPromo = Es gibt einen Weg, deine Privatsphäre zu schützen. Komm zu Firefox.
learnMore = Mehr erfahren.
downloadFlagged = Dieser Link wurde wegen Verstoßes gegen die Nutzungsbedingungen deaktiviert.
downloadConfirmTitle = Eine Sache noch
downloadConfirmDescription = Sie sollten dem Absender dieser Datei vertrauen, da wir nicht überprüfen können, ob Ihr Gerät dadurch beschädigt wird.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Ich vertraue der Person, die diese Datei gesendet hat
*[other] Ich vertraue der Person, die diese Dateien gesendet hat
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Diese Datei als verdächtig melden
*[other] Diese Dateien als verdächtig melden
}
reportDescription = Helfen Sie uns mit weiteren Informationen. Wo liegt das Problem bei diesen Dateien?
reportUnknownDescription = Bitte besuchen Sie die Adresse des Links, den Sie melden möchten, und klicken Sie auf „{ reportFile }“.
reportButton = Melden
reportReasonMalware = Diese Dateien enthalten Malware oder sind Teil eines Phishing-Angriffs.
reportReasonPii = Diese Dateien enthalten personenbezogene Daten über mich.
reportReasonAbuse = Diese Dateien enthalten illegale oder missbräuchliche Inhalte.
reportReasonCopyright = Um Urheber- oder Markenrechtsverletzungen zu melden, nutzen Sie bitte das auf <a>dieser Seite</a> beschriebene Verfahren.
reportedTitle = Dateien gemeldet
reportedDescription = Vielen Dank. Wir haben Ihren Bericht über diese Dateien erhalten.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Komentar
importingFile = Importěrujo se...
encryptingFile = Koděrujo se...
decryptingFile = Dešifrěrujo se...
@@ -132,6 +131,7 @@ legalDateStamp = Wersija 1.0 wót 12. měrca 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }ź { $hours }g { $minutes }m
addFilesButton = Dataje za nagrawanje wubraś
trustWarningMessage = Wy měł dostawarjeju dowěriś, gaž sensibelne daty źěliśo.
uploadButton = Nagraś
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Śěgniśo a wótpołožćo dataje
@@ -171,3 +171,37 @@ shareLinkButton = Wótkaz źěliś
shareMessage = Ześěgniśo „{ $name }“ z { -send-brand }: jadnore, wěste źělenje datajow
trailheadPromo = Jo móžnosć, wašu priwatnosć šćitaś. Pśiźćo k Firefox.
learnMore = Dalšne informacije.
downloadFlagged = Toś ten wótkaz jo se znjemóžnił pśestupjenja wužywańskich wuměnjenjow dla.
downloadConfirmTitle = Jadna wěc hyšći
downloadConfirmDescription = Wy měł wótpósłarjeju toś teje dataje dowěriś, dokulaž njamóžomy pśeglědaś, lěc to waš rěd kazy.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Dowěrim wósobje, kótaraž jo pósłała toś tu dataju
[two] Dowěrim wósobje, kótaraž jo pósłała toś tej dataji
[few] Dowěrim wósobje, kótaraž jo pósłała toś te dataje
*[other] Dowěrim wósobje, kótaraž jo pósłała toś te dataje
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Toś tu dataju ako suspektnu k wěsći daś
[two] Toś tej dataji ako suspektnej k wěsći daś
[few] Toś te dataje ako suspektne k wěsći daś
*[other] Toś te dataje ako suspektne k wěsći daś
}
reportDescription = Pomagajśo nam rozumić, co se stawa. Co pó wašom měnjenju njejo w pórědku z toś tymi datajami?
reportUnknownDescription = Źiśo pšosym k URL wótkaza, kótaryž cośo k wěsći daś a klikniśo na „{ reportFile }“.
reportButton = K wěsći daś
reportReasonMalware = Toś te dataje škódnu softwaru wopśimuju abo su źěl napada kšadnjenja datow.
reportReasonPii = Toś te dataje wósobinske informacije wó mnje, kótarež mógu mě identificěrowaś.
reportReasonAbuse = Toś te dataje njedowólone abo ranjece wopśimjeśe wopśimuju.
reportReasonCopyright = Aby pśestupjenje awtorskego pšawa abo pšawa wikowwych markow k wěsći dał, wužywajśo póstupowanje, kótarež se na <a>toś tom boku</a> wopisujo.
reportedTitle = Dataje k wěsći dane
reportedDescription = Wjeliki źěk. Smy dostali wašu rozpšawu wó toś tych datajach.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Σχόλια
importingFile = Εισαγωγή…
encryptingFile = Κρυπτογράφηση…
decryptingFile = Αποκρυπτογράφηση…
@@ -116,6 +115,7 @@ legalDateStamp = Έκδοση 1.0, από 12 Μαρτίου 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }η { $hours }ώ { $minutes }λ
addFilesButton = Επιλέξτε αρχεία για μεταφόρτωση
trustWarningMessage = Βεβαιωθείτε ότι ο παραλήπτης είναι έμπιστος πριν μοιραστείτε ευαίσθητα δεδομένα.
uploadButton = Μεταφόρτωση
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Σύρετε και εναποθέστε αρχεία
@@ -140,7 +140,7 @@ accountBenefitSync = Διαχειριστείτε τα διαμοιρασμέν
accountBenefitMoz = Μάθετε για τις άλλες υπηρεσίες της { -mozilla }
signOut = Αποσύνδεση
okButton = OK
downloadingTitle = Λήψη
downloadingTitle = Γίνεται λήψη
noStreamsWarning = Αυτό το πρόγραμμα περιήγησης ενδέχεται να μην μπορέσει να αποκρυπτογραφήσει αρχεία αυτού του μεγέθους.
noStreamsOptionCopy = Αντιγράψτε το σύνδεσμο για άνοιγμα σε άλλο πρόγραμμα περιήγησης
noStreamsOptionFirefox = Δοκιμάστε το αγαπημένο μας πρόγραμμα περιήγησης
@@ -153,3 +153,33 @@ shareLinkButton = Κοινή χρήση συνδέσμου
shareMessage = Λήψη του “{ $name }” με το { -send-brand }: απλός και ασφαλής διαμοιρασμός αρχείων
trailheadPromo = Υπάρχει τρόπος να προστατέψετε το απόρρητό σας. Γίνετε μέλος του Firefox.
learnMore = Μάθετε περισσότερα.
downloadFlagged = Αυτός ο σύνδεσμος έχει απενεργοποιηθεί λόγω παραβίασης των όρων υπηρεσίας.
downloadConfirmTitle = Κάτι ακόμα
downloadConfirmDescription = Βεβαιωθείτε ότι το αρχείο προέρχεται από έμπιστο άτομο, καθώς δεν μπορούμε να επαληθεύσουμε ότι δεν θα βλάψει τη συσκευή σας.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Εμπιστεύομαι το άτομο που έστειλε το αρχείο
*[other] Εμπιστεύομαι το άτομο που έστειλε τα αρχεία
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Αναφορά ύποπτου αρχείου
*[other] Αναφορά ύποπτων αρχείων
}
reportDescription = Βοηθήστε μας να καταλάβουμε τι συμβαίνει. Τι νομίζετε ότι δεν πάει καλά με αυτά τα αρχεία;
reportUnknownDescription = Παρακαλούμε μεταβείτε στο URL του συνδέσμου που θέλετε να αναφέρετε και κάντε κλικ στο "{ reportFile }".
reportButton = Αναφορά
reportReasonMalware = Αυτά τα αρχεία περιέχουν κακόβουλο λογισμικό ή αποτελούν μέρος μιας επίθεσης ηλεκτρονικού ψαρέματος.
reportReasonPii = Αυτά τα αρχεία περιέχουν προσωπικές μου πληροφορίες ταυτοποίησης.
reportReasonAbuse = Αυτά τα αρχεία περιέχουν παράνομο ή καταχρηστικό περιεχόμενο.
reportReasonCopyright = Για να αναφέρετε παραβίαση πνευματικών δικαιωμάτων ή εμπορικών σημάτων, χρησιμοποιήστε τη διαδικασία που περιγράφεται σε <a>αυτή τη σελίδα</a>.
reportedTitle = Έγινε αναφορά των αρχείων
reportedDescription = Σας ευχαριστούμε. Λάβαμε την αναφορά σας για τα αρχεία.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Feedback
importingFile = Importing…
encryptingFile = Encrypting…
decryptingFile = Decrypting…
@@ -116,6 +115,7 @@ legalDateStamp = Version 1.0, dated March 12, 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
addFilesButton = Select files to upload
trustWarningMessage = Make sure you trust your recipient when sharing sensitive data.
uploadButton = Upload
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Drag and drop files
@@ -153,3 +153,33 @@ shareLinkButton = Share link
shareMessage = Download “{ $name }” with { -send-brand }: simple, safe file sharing
trailheadPromo = There is a way to protect your privacy. Join Firefox.
learnMore = Learn more.
downloadFlagged = This link has been disabled for violating the terms of service.
downloadConfirmTitle = One more thing
downloadConfirmDescription = Make sure you trust the person who sent you this file because we cant verify that it will not harm your device.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] I trust the person who sent this file
*[other] I trust the person who sent these files
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Report this file as suspicious
*[other] Report these files as suspicious
}
reportDescription = Help us understand whats going on. What do you think is wrong with these files?
reportUnknownDescription = Please go to the URL of the link you wish to report and click “{ reportFile }”.
reportButton = Report
reportReasonMalware = These files contain malware or are part of a phishing attack.
reportReasonPii = These files contain personally identifiable information about me.
reportReasonAbuse = These files contain illegal or abusive content.
reportReasonCopyright = To report copyright or trademark infringement, use the process described at <a>this page</a>.
reportedTitle = Files Reported
reportedDescription = Thank you. We have received your report on these files.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Feedback
importingFile = Importing…
encryptingFile = Encrypting…
decryptingFile = Decrypting…
@@ -116,6 +115,7 @@ legalDateStamp = Version 1.0, dated March 12, 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
addFilesButton = Select files to upload
trustWarningMessage = Make sure you trust your recipient when sharing sensitive data.
uploadButton = Upload
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Drag and drop files
@@ -153,3 +153,33 @@ shareLinkButton = Share link
shareMessage = Download “{ $name }” with { -send-brand }: simple, safe file sharing
trailheadPromo = There is a way to protect your privacy. Join Firefox.
learnMore = Learn more.
downloadFlagged = This link has been disabled for violating the terms of service.
downloadConfirmTitle = One more thing
downloadConfirmDescription = Make sure you trust the person who sent you this file because we cant verify that it will not harm your device.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] I trust the person who sent this file
*[other] I trust the person who sent these files
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Report this file as suspicious
*[other] Report these files as suspicious
}
reportDescription = Help us understand whats going on. What do you think is wrong with these files?
reportUnknownDescription = Please go to the url of the link you wish to report and click “{ reportFile }”.
reportButton = Report
reportReasonMalware = These files contain malware or are part of a phishing attack.
reportReasonPii = These files contain personally identifiable information about me.
reportReasonAbuse = These files contain illegal or abusive content.
reportReasonCopyright = To report copyright or trademark infringement, use the process described at <a>this page</a>.
reportedTitle = Files Reported
reportedDescription = Thank you. We have received your report on these files.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Feedback
importingFile = Importing…
encryptingFile = Encrypting…
decryptingFile = Decrypting…
@@ -109,6 +108,7 @@ legalDateStamp = Version 1.0, dated March 12, 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
addFilesButton = Select files to upload
trustWarningMessage = Make sure you trust your recipient when sharing sensitive data.
uploadButton = Upload
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Drag and drop files
@@ -145,3 +145,33 @@ shareLinkButton = Share link
shareMessage = Download “{ $name }” with { -send-brand }: simple, safe file sharing
trailheadPromo = There is a way to protect your privacy. Join Firefox.
learnMore = Learn more.
downloadFlagged = This link has been disabled for violating the terms of service.
downloadConfirmTitle = One more thing
downloadConfirmDescription = Make sure you trust the person who sent you this file because we cant verify that it will not harm your device.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] I trust the person who sent this file
*[other] I trust the person who sent these files
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Report this file as suspicious
*[other] Report these files as suspicious
}
reportDescription = Help us understand whats going on. What do you think is wrong with these files?
reportUnknownDescription = Please go to the url of the link you wish to report and click “{ reportFile }”.
reportButton = Report
reportReasonMalware = These files contain malware or are part of a phishing attack.
reportReasonPii = These files contain personally identifiable information about me.
reportReasonAbuse = These files contain illegal or abusive content.
reportReasonCopyright = To report copyright or trademark infringement, use the process described at <a>this page</a>.
reportedTitle = Files Reported
reportedDescription = Thank you. We have received your report on these files.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Opinión
importingFile = Importando…
encryptingFile = Cifrando…
decryptingFile = Descifrando…
@@ -116,6 +115,7 @@ legalDateStamp = Versión 1.0, con fecha 12 de marzo de 2019.
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
addFilesButton = Seleccionar archivos para subir
trustWarningMessage = Asegurate de que confiás en tu destinatario cuando compartís datos confidenciales.
uploadButton = Subir
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Arrastrar y soltar archivos
@@ -153,3 +153,33 @@ shareLinkButton = Compartir el enlace
shareMessage = Descargar "{ $name }" con { -send-brand }: compartir archivos de forma simple y segura
trailheadPromo = Hay una forma de proteger tu privacidad. Unite a Firefox.
learnMore = Conocer más.
downloadFlagged = Este enlace fue deshabilitado por violar los términos del servicio.
downloadConfirmTitle = Una cosa más
downloadConfirmDescription = Asegurate de confiar en la persona que te envió este archivo porque no podemos verificar que no va a dañar tu dispositivo.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Confío en la persona que envió este archivo
*[other] Confío en la persona que envió estos archivos
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Denunciar este archivo como sospechoso
*[other] Denunciar estos archivos como sospechosos
}
reportDescription = Ayudanos a entender lo que está pasando. ¿Qué creés que está mal con estos archivos?
reportUnknownDescription = Navegá a la url del enlace que querés denunciar y hacé clic en "{ reportFile }".
reportButton = Denunciar
reportReasonMalware = Estos archivos contienen programas dañinos o son parte de un fraude electrónico.
reportReasonPii = Estos archivos contienen información personal que me puede identificar.
reportReasonAbuse = Estos archivos contienen contenido ilegal o abusivo.
reportReasonCopyright = Para denunciar una infracción de derechos de autor o de marca registrada, seguí el proceso descrito en <a>esta página</a>.
reportedTitle = Archivos denunciados
reportedDescription = Gracias. Recibimos tu denuncia sobre estos archivos.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Comentarios
importingFile = Importando…
encryptingFile = Cifrando…
decryptingFile = Descifrando…
@@ -53,7 +52,7 @@ passwordSetError = Esta contraseña no pudo ser establecida
-send-short-brand = Send
-firefox = Firefox
-mozilla = Mozilla
introTitle = Intercambio de archivos sencillo y privado
introTitle = Intercambio de archivos simple y privado
introDescription = { -send-brand } te permite compartir archivos con cifrado de extremo a extremo y un enlace que expira automáticamente. Así puedes mantener lo que compartes en privado y asegurarte de que tus cosas no permanezcan en línea para siempre.
notifyUploadEncryptDone = Tu archivo está cifrado y listo para enviar
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
@@ -95,7 +94,7 @@ copyLinkDescription = Copiar el enlace para compartir el archivo:
copyLinkButton = Copiar enlace
downloadTitle = Bajando archivos
downloadDescription = Este archivo fue compartido a través de { -send-brand } con cifrado de punto a punto y un enlace que expira automáticamente.
trySendDescription = Prueba { -send-brand } para compartir archivos de forma sencilla y segura.
trySendDescription = Prueba { -send-brand } para compartir archivos de forma simple y segura.
# count will always be > 10
tooManyFiles =
{ $count ->
@@ -116,6 +115,7 @@ legalDateStamp = Versión 1.0 del 12 de marzo de 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
addFilesButton = Selecciona los archivos a subir
trustWarningMessage = Asegúrate de que confías en tu destinatario cuando compartas datos sensibles.
uploadButton = Subir
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Arrastra y suelta archivos
@@ -153,3 +153,33 @@ shareLinkButton = Compartir enlace
shareMessage = Baja "{ $name }" con { -send-brand }: compartir archivos de forma simple y segura
trailheadPromo = Hay una forma de proteger tu privacidad. Únete a Firefox.
learnMore = Aprender más.
downloadFlagged = Este enlace ha sido deshabilitado por violar los términos del servicio.
downloadConfirmTitle = Una cosa más
downloadConfirmDescription = Asegúrate de confiar en la persona que te envió este archivo porque no podemos verificar que no dañará tu dispositivo.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Confío en la persona que envió es archivo
*[other] Confío en la persona que envió estos archivos
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Reportar este archivo como sospechoso
*[other] Reportar estos archivos como sospechosos
}
reportDescription = Ayúdanos a entender lo que está pasando. ¿Qué crees que está mal con estos archivos?
reportUnknownDescription = Por favor, ve a la url del enlace que quieres reportar y haz clic en "{ reportFile }".
reportButton = Reportar
reportReasonMalware = Estos archivos contienen malware o son parte de un ataque de phishing.
reportReasonPii = Estos archivos contienen información personal identificable sobre mí.
reportReasonAbuse = Estos archivos contienen contenido ilegal o abusivo.
reportReasonCopyright = Para denunciar una infracción de derechos de autor o de marca registrada, sigue el proceso descrito en <a>esta página</a>.
reportedTitle = Archivos reportados
reportedDescription = Gracias. Hemos recibido tu reporte sobre estos archivos.

View File

@@ -1,9 +1,8 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Comentario
importingFile = Importando...
encryptingFile = Encriptando...
decryptingFile = Desencriptando...
encryptingFile = Cifrando...
decryptingFile = Descifrando...
downloadCount =
{ $num ->
[one] 1 descarga
@@ -21,11 +20,11 @@ downloadButtonLabel = Descargar
downloadFinish = Descarga completa
fileSizeProgress = ({ $partialSize } de { $totalSize })
sendYourFilesLink = Prueba Firefox Send
errorPageHeader = ¡Se produjo un error!
errorPageHeader = ¡Se ha producido un error!
fileTooBig = Ese archivo es muy grande. Debería ocupar menos de { $size }.
linkExpiredAlt = Enlace caducado
notSupportedHeader = Tu navegador no está admitido.
notSupportedLink = ¿Por qué no se admite mi navegador?
notSupportedHeader = Tu navegador no es compatible.
notSupportedLink = ¿Por qué mi navegador no es compatible?
notSupportedOutdatedDetail = Lamentablemente, esta versión de Firefox no admite la tecnología web que impulsa Firefox Send. Tendrás que actualizar tu navegador.
updateFirefox = Actualizar Firefox
deletePopupCancel = Cancelar
@@ -33,7 +32,7 @@ deleteButtonHover = Eliminar
footerLinkLegal = Legal
footerLinkPrivacy = Privacidad
footerLinkCookies = Cookies
passwordTryAgain = Contraseña incorrecta. Inténtelo de nuevo.
passwordTryAgain = Contraseña incorrecta. Inténtalo de nuevo.
javascriptRequired = Firefox Send requiere JavaScript
whyJavascript = ¿Por qué Firefox Send requiere JavaScript?
enableJavascript = Por favor, activa JavaScript y vuelve a intentarlo.
@@ -116,6 +115,7 @@ legalDateStamp = Versión 1.0 del 12 de marzo de 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
addFilesButton = Seleccionar archivos para subir
trustWarningMessage = Asegúrate de que confías en tu destinatario cuando compartas datos sensibles.
uploadButton = Subir
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Arrastrar y soltar archivos
@@ -153,3 +153,33 @@ shareLinkButton = Compartir enlace
shareMessage = Descargar “{ $name }” con { -send-brand }: comparte archivos de forma segura y sencilla
trailheadPromo = Existe la forma de proteger tu privacidad. Únete a Firefox.
learnMore = Saber más.
downloadFlagged = Este enlace ha sido desactivado por violar los términos del servicio.
downloadConfirmTitle = Una cosa más
downloadConfirmDescription = Asegúrate de confiar en la persona que te envió este archivo porque no podemos verificar que no va a dañar tu dispositivo.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Confío en la persona que envió este archivo
*[other] Confío en la persona que envió estos archivos
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Denunciar este archivo como sospechoso
*[other] Denunciar estos archivos como sospechosos
}
reportDescription = Ayúdanos a entender lo que está pasando. ¿Qué crees que está mal con estos archivos?
reportUnknownDescription = Por favor, ve a la url del enlace que quieres denunciar y haz clic en “{ reportFile }”.
reportButton = Denunciar
reportReasonMalware = Estos archivos contienen malware o son parte de un ataque de phishing.
reportReasonPii = Estos archivos contienen información personal identificable sobre mí.
reportReasonAbuse = Estos archivos tienen contenido ilegal o abusivo.
reportReasonCopyright = Para denunciar una infracción de derechos de autor o marca registrada, sigue el proceso descrito en <a>esta página</a>.
reportedTitle = Archivos denunciados
reportedDescription = Gracias. Hemos recibido tu denuncia sobre estos archivos.

View File

@@ -2,8 +2,8 @@
title = Firefox Send
siteFeedback = Comentario
importingFile = Importando...
encryptingFile = Encriptando...
decryptingFile = Desencriptando...
encryptingFile = Encriptando
decryptingFile = Desencriptando
downloadCount =
{ $num ->
[one] 1 descarga
@@ -126,7 +126,7 @@ addPassword = Protegido con contraseña
emailPlaceholder = Ingresa tu correo electrónico
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Iniciar sesión para enviar hasta { $size }
signInButton = Iniciar sesión/registrarse
signInOnlyButton = Iniciar sesión
accountBenefitTitle = Crear una cuenta de { -firefox } o iniciar sesión
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Compartir archivos de hasta { $size }
@@ -145,3 +145,11 @@ noStreamsWarning = Puede que este navegador no pueda descifrar un archivo tan gr
noStreamsOptionCopy = Copiar el enlace para abrir en otro navegador
noStreamsOptionFirefox = Prueba nuestro navegador favorito
noStreamsOptionDownload = Continuar con este navegador
downloadFirefoxPromo = { -send-short-brand } te lo ofrece el nuevo { -firefox }.
# the next line after the colon contains a file name
shareLinkDescription = Comparte el enlace a tu archivo:
shareLinkButton = Enlace para compartir
# $name is the name of the file
shareMessage = Descarga «{ $name }» con { -send-brand }: es sencillo y seguro
trailheadPromo = Existe una forma de proteger tu privacidad. Únete a Firefox.
learnMore = Saber más.

View File

@@ -151,3 +151,5 @@ shareLinkDescription = Jaga linki failile:
shareLinkButton = Jaga linki
# $name is the name of the file
shareMessage = Laadi “{ $name }” alla teenusega { -send-brand }, mis pakub lihtsat ja turvalist failijagamist
trailheadPromo = Oma privaatsust on võimalik kaitsta. Liitu Firefoxiga.
learnMore = Rohkem teavet.

View File

@@ -23,7 +23,7 @@ fileSizeProgress = ({ $totalSize } / { $partialSize })
sendYourFilesLink = Probatu Firefox Send
errorPageHeader = Zerbait gaizki joan da!
fileTooBig = Fitxategia handiegia da kargatzeko. { $size } baino txikiagoa izan behar du.
linkExpiredAlt = Lotura iraungita
linkExpiredAlt = Lotura iraungi da
notSupportedHeader = Zure nabigatzailea ez da onartzen.
notSupportedLink = Zergatik ez da nire nabigatzailea onartzen?
notSupportedOutdatedDetail = Zoritxarrez Firefox bertsio honek ez du Firefox Send-ek behar duen web teknologia onartzen. Zure nabigatzailea eguneratu behar duzu.
@@ -54,7 +54,30 @@ passwordSetError = Pasahitz hau ezin da ezarri
-firefox = Firefox
-mozilla = Mozilla
introTitle = Partekatu fitxategiak modu sinple eta pribatuan
introDescription = { -send-brand } tresna fitxategiak partekatzeko da, muturretik muturrera zifratuta eta automatikoki iraungitzen diren loturekin. Hortaz, partekatzen duzuna pribatua izango da eta ziur egon zaitezke zure fitxategiak ez direla online egongo betirako.
notifyUploadEncryptDone = Zure fitxategia zifratuta eta bidaltzeko prest dago
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = { $downloadCount } edo { $timespan } ondoren iraungiko da
timespanMinutes =
{ $num ->
[one] minutu 1
*[other] { $num } minutu
}
timespanDays =
{ $num ->
[one] egun 1
*[other] { $num } egun
}
timespanWeeks =
{ $num ->
[one] aste 1
*[other] { $num } aste
}
fileCount =
{ $num ->
[one] fitxategi 1
*[other] { $num } fitxategi
}
# byte abbreviation
bytes = B
# kibibyte abbreviation
@@ -65,9 +88,33 @@ mb = MB
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Tamaina guztira: { $size }
# the next line after the colon contains a file name
copyLinkDescription = Kopiatu fitxategia partekatzeko lotura:
copyLinkButton = Kopiatu lotura
downloadTitle = Deskargatu fitxategiak
downloadDescription = { -send-brand } bidez partekatu da fitxategia muturretik muturrera zifratuta eta automatikoki iraungitzen den lotura batekin.
trySendDescription = Probatu { -send-brand } fitxategiak partekatzeko modu sinple eta segururako.
# count will always be > 10
tooManyFiles =
{ $count ->
[one] Soilik fitxategi bakarra igo daiteke aldi berean.
*[other] Soilik { $count } fitxategi igo daitezke aldi berean.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] Soilik artxibo bakarra onartzen da.
*[other] Soilik { $count } artxibo onartzen dira.
}
expiredTitle = Lotura hau iraungi da.
notSupportedDescription = { -send-brand } ez da nabigatzaile honetan ibiliko. { -send-short-brand } hobeto dabil { -firefox }(r)en azken bertsioarekin; halaber, nabigatzaile gehienen azken bertsioarekin ibiliko da.
downloadFirefox = Deskargatu { -firefox }
legalTitle = { -send-short-brand } pribatutasun-oharra
legalDateStamp = 1.0 bertsioa, 2019ko martxoaren 12koa.
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }e { $hours }h { $minutes }m
addFilesButton = Hautatu igotzeko fitxategiak
uploadButton = Igo
# the first part of the string 'Drag and drop files or click to send up to 1GB'
@@ -77,7 +124,32 @@ dragAndDropFiles = Arrastatu eta jaregin fitxategiak
orClickWithSize = edo egin klik { $size } arte igotzeko
addPassword = Babestu pasahitzarekin
emailPlaceholder = Idatzi zure helbide elektronikoa
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Hasi saioa { $size } arte bidaltzeko
signInOnlyButton = Hasi saioa
accountBenefitTitle = Sortu { -firefox } kontu bat edo hasi saioa
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Partekatu { $size } arteko fitxategiak
accountBenefitDownloadCount = Partekatu fitxategiak jende gehiagorekin
accountBenefitTimeLimit =
{ $count ->
[one] Utzi loturak erabilgarri egun batez
*[other] Utzi loturak erabilgarri { $count } egunez
}
accountBenefitSync = Kudeatu partekatutako fitxategiak edozein gailutatik
accountBenefitMoz = { -mozilla }ren beste zerbitzuei buruzko argibide gehiago
signOut = Amaitu saioa
okButton = Ados
downloadingTitle = Deskargatzen
noStreamsWarning = Baliteke nabigatzailea gai ez izatea horrelako tamaina handiko fitxategiak deszifratzeko.
noStreamsOptionCopy = Kopiatu lotura beste nabigatzaile batean irekitzeko
noStreamsOptionFirefox = Probatu gure nabigatzaile gogokoena
noStreamsOptionDownload = Jarraitu nabigatzaile honekin
downloadFirefoxPromo = Erabat berritutako { -firefox }(e)k eskaintzen dizu { -send-short-brand }
# the next line after the colon contains a file name
shareLinkDescription = Partekatu zure fitxategirako lotura:
shareLinkButton = Partekatu lotura
# $name is the name of the file
shareMessage = Deskargatu "{ $name }" { -send-brand } erabiliz: fitxategi-partekatze sinple eta segurua
trailheadPromo = Badago zure pribatutasuna babesteko modua. Egizu bat Firefoxekin.
learnMore = Argibide gehiago.

View File

@@ -21,11 +21,11 @@ downloadButtonLabel = بارگیری
downloadFinish = بارگیری کامل شد
fileSizeProgress = ({ $partialSize } از { $totalSize })
sendYourFilesLink = Firefox Send را امتحان کنید
errorPageHeader = چیزی دچار اشکال شده است!
errorPageHeader = خطایی رخ داد!
fileTooBig = این پرونده بسیار حجیم است. حجم آن می‌بایستی کم تر { $size } باشد.
linkExpiredAlt = پیوند منقضی شده است
notSupportedHeader = مرورگر شما پشتیبانی نمی‌کند.
notSupportedLink = چرا مرورگر من پشتیبانی نمی‌کند؟
notSupportedHeader = مرورگر شما پشتیبانی نمی‌شود.
notSupportedLink = چرا از مرورگر من پشتیبانی نمی‌شود؟
notSupportedOutdatedDetail = متاسفانه این نسخه از فایرفاکس این تکنولوژی وب که به Firefox Send قدرت می‌بخشد را پشتیبانی نمی‌کند. شما نیاز دارید تا مرورگر خود را بروز کنید.
updateFirefox = بروزرسانی فایرفاکس
deletePopupCancel = انصراف
@@ -53,13 +53,103 @@ passwordSetError = امکان ثبت این گذواژه نیست
-send-short-brand = ارسال
-firefox = فایرفاکس
-mozilla = موزیلا
introTitle = اشتراک‌گذاری ساده و خصوصیِ پرونده‌ها
introDescription = { -send-brand } به شما امکان اشتراک‌گذاری فایل‌ها با رمزگذاری سرتاسری و لینکی که به طور خودکار منقضی می شود را می‌دهد. در نتیجه می‌توانید اشتراک گذاری‌های خود را خصوصی نگه دارید و اطمینان حاصل کنید که فایل‌های شما تا همیشه آنلاین دردسترس نخواهند ماند.
notifyUploadEncryptDone = پرونده شما رمزگذاری شده و آماده ارسال است
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = پس از { $downloadCount } یا { $timespan } منقضی می‌شود
timespanMinutes =
{ $num ->
[one] 1 دقیقه
*[other] { $num } دقیقه
}
timespanDays =
{ $num ->
[one] 1 روز
*[other] { $num } روز
}
timespanWeeks =
{ $num ->
[one] 1 هفته
*[other] { $num } هفته
}
fileCount =
{ $num ->
[one] 1 پرونده
*[other] { $num } پرونده
}
# byte abbreviation
bytes = B
bytes = بایت
# kibibyte abbreviation
kb = KB
kb = کیلوبایت
# mebibyte abbreviation
mb = MB
mb = مگابایت
# gibibyte abbreviation
gb = GB
gb = گیگابایت
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = حجم کل: { $size }
# the next line after the colon contains a file name
copyLinkDescription = برای به اشتراک گذاشتن فایل خود، لینک را کپی کنید:
copyLinkButton = رونوشت از پیوند
downloadTitle = دریافت پرونده‌ها
downloadDescription = این پرونده از طریق { -send-brand } با رمزگذاری سرتاسری و پیوندی که به طور خودکار منقضی می شود، به اشتراک گذاشته شد.
trySendDescription = { -send-brand } را برای اشتراک گذاری ساده و ایمن پرونده امتحان کنید.
# count will always be > 10
tooManyFiles =
{ $count ->
[one] تنها 1 پرونده می‌تواند در لحظه بارگزاری شود.
*[other] تنها { $count } پرونده می‌تواند در لحظه بارگزاری شود.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] تنها 1 بایگانی مجاز است.
*[other] تنها { $count } بایگانی مجاز است.
}
expiredTitle = این پیوند منقضی شده است.
notSupportedDescription = { -send-brand } با این مرورگر کار نخواهد کرد. { -send-short-brand } بهترین عملکرد را با آخرین نسخه { -firefox } خواهد داشت، و با آخرین نسخه اکثر مرورگر‌های کنونی کار می‌کند.
downloadFirefox = دریافت { -firefox }
legalTitle = { -send-short-brand } نکات حفظ حریم خصوصی
legalDateStamp = نسخه ۱.۰، مورخ ۱۲، ۲۰۱۹
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days } روز { $hours } ساعت { $minutes } دقیقه
addFilesButton = پرونده‌ها را برای بارگذاری انتخاب کنید
uploadButton = بارگذاری
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = فایل‌ها را بکشید و اینجا رها کنید
# the second part of the string 'Drag and drop files or click to send up to 1GB'
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = یا برای ارسال تا { $size } کلیک کنید
addPassword = با گذرواژه محافظت کنید
emailPlaceholder = ایمیل خود را وارد کنید
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = برای ارسال تا { $size } وارد شوید
signInOnlyButton = ورود
accountBenefitTitle = یک حساب { -firefox } ایجاد کنید یا وارد شوید
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = پرونده‌هایی تا { $size } را اشتراک‌گذاری کنید
accountBenefitDownloadCount = پرونده‌ها را با افراد بیشتری به اشتراک بگذارید
accountBenefitTimeLimit =
{ $count ->
[one] پیوند‌ها را تا 1 روز فعال نگه دارید
*[other] پیوند‌ها را تا { $count } روز فعال نگه دارید
}
accountBenefitSync = فایل‌های اشتراکی را از هر دستگاه مدیریت کنید
accountBenefitMoz = در مورد سایر خدمات { -mozilla } اطلاعات کسب کنید
signOut = خروج
okButton = تأیید
downloadingTitle = در حال بارگیری
noStreamsWarning = ممکن است این مرورگر نتواند یک پرونده به این بزرگی را رمزگشایی کند.
noStreamsOptionCopy = لینک را کپی کنید تا در مرورگر دیگری باز شود
noStreamsOptionFirefox = مرورگر مورد علاقه ما را امتحان کنید
noStreamsOptionDownload = با این مرورگر ادامه دهید
downloadFirefoxPromo = { -send-short-brand } با جدیدترین { -firefox } برای شما آماده شده است.
# the next line after the colon contains a file name
shareLinkDescription = پیوند مربوط به پرونده خود را به اشتراک بگذارید:
shareLinkButton = اشتراک‌گذاری پیوند
# $name is the name of the file
shareMessage = “{ $name }” را با { -send-brand } دانلود کنید: اشتراک‌گذاری ساده و امن فایل
trailheadPromo = راهی برای محافظت از حریم خصوصی شما وجود دارد. به Firefox بپیوندید.
learnMore = بیشتر بدانید.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Palaute
importingFile = Tuodaan…
encryptingFile = Salataan...
decryptingFile = Puretaan salausta...
@@ -116,6 +115,7 @@ legalDateStamp = Versio 1.0, päivätty 13. maaliskuuta 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days } pv { $hours } t { $minutes } min
addFilesButton = Valitse lähetettävät tiedostot
trustWarningMessage = Varmista, että luotat vastaanottajaan jakaessasi arkaluontoisia tietoja.
uploadButton = Lähetä
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Vedä ja pudota tiedostot
@@ -153,3 +153,33 @@ shareLinkButton = Jaa linkki
shareMessage = Lataa tiedosto ”{ $name }” { -send-brand } -palvelusta: yksinkertaista ja turvallista tiedostonjakoa
trailheadPromo = On tapa suojata yksityisyyttään. Liity Firefoxiin.
learnMore = Lue lisää.
downloadFlagged = Tämä linkki on poistettu käytöstä palvelun käyttöehtojen rikkomisen vuoksi.
downloadConfirmTitle = Vielä yksi asia
downloadConfirmDescription = Varmista, että luotat sinulle tämän tiedoston lähettäneeseen henkilöön, koska emme voi vahvistaa, ettei kyseinen tiedosto vahingoita laitettasi.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Luotan henkilöön, joka lähetti tämän tiedoston
*[other] Luotan henkilöön, joka lähetti nämä tiedostot
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Ilmoita tämä tiedosto epäilyttävänä
*[other] Ilmoita nämä tiedostot epäilyttävinä
}
reportDescription = Auta meitä ymmärtämään mitä tapahtuu. Mikä on mielestäsi vialla näissä tiedostoissa?
reportUnknownDescription = Siirry sen linkin osoitteeseen, josta haluat tehdä ilmoituksen, ja napsauta “{ reportFile }”.
reportButton = Ilmoita
reportReasonMalware = Nämä tiedostot sisältävät haittaohjelmia tai ovat osa tietojenkalasteluhyökkäystä.
reportReasonPii = Nämä tiedostot sisältävät henkilökohtaisia tietoja minusta.
reportReasonAbuse = Nämä tiedostot sisältävät laitonta tai loukkaavaa sisältöä.
reportReasonCopyright = Ilmoita tekijänoikeuksien tai tavaramerkkien loukkauksista <a>tällä sivulla</a> kuvatun prosessin mukaisesti.
reportedTitle = Tiedostot ilmoitettu
reportedDescription = Kiitos. Olemme vastaanottaneet raporttisi näistä tiedostoista.

View File

@@ -1,6 +1,5 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Votre avis
importingFile = Importation…
encryptingFile = Chiffrement…
decryptingFile = Déchiffrement…
@@ -116,6 +115,7 @@ legalDateStamp = Version 1.0 du 12 mars 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days } j { $hours } h { $minutes } min
addFilesButton = Sélectionnez des fichiers à envoyer
trustWarningMessage = Assurez-vous de faire confiance au destinataire lorsque vous partagez des données sensibles.
uploadButton = Envoyer
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Glissez-déposez des fichiers
@@ -153,3 +153,33 @@ shareLinkButton = Partager le lien
shareMessage = Télécharger « { $name } » avec { -send-brand } : un moyen simple et sûr de partager des fichiers
trailheadPromo = Il existe un moyen de protéger votre vie privée. Rejoignez Firefox.
learnMore = En savoir plus.
downloadFlagged = Ce lien a été désactivé en raison dune violation des conditions dutilisation.
downloadConfirmTitle = Une dernière chose
downloadConfirmDescription = Assurez-vous de faire confiance à la personne qui vous a envoyé ce fichier, car nous ne pouvons pas vérifier quil nendommagera pas votre appareil.
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
downloadTrustCheckbox =
{ $count ->
[one] Je fais confiance à la personne qui a envoyé ce fichier
*[other] Je fais confiance à la personne qui a envoyé ces fichiers
}
# This string has a special case for '1' and [other] (default). If necessary for
# your language, you can add {$count} to your translations and use the
# standard CLDR forms, or only use the form for [other] if both strings should
# be identical.
reportFile =
{ $count ->
[one] Signaler ce fichier comme suspect
*[other] Signaler ces fichiers comme suspects
}
reportDescription = Aidez-nous à comprendre ce qui se passe. Selon vous, quel est le problème avec ces fichiers ?
reportUnknownDescription = Accédez à ladresse du lien que vous souhaitez signaler et cliquez sur « { reportFile } ».
reportButton = Signaler
reportReasonMalware = Ces fichiers contiennent des logiciels malveillants ou contribuent à une attaque de hameçonnage.
reportReasonPii = Ces fichiers contiennent des informations personnelles qui me concernent.
reportReasonAbuse = Ces fichiers contiennent du contenu illégal ou abusif.
reportReasonCopyright = Pour signaler une violation de droit dauteur ou de marque, suivez la procédure décrite sur <a>cette page</a>.
reportedTitle = Fichiers signalés
reportedDescription = Merci, nous avons reçu votre signalement relatif à ces fichiers.

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