Compare commits

..

275 Commits

Author SHA1 Message Date
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
Danny Coates
a6b43c9eef v3.0.13 2019-07-29 16:24:48 -07:00
Danny Coates
c80f9ada65 updated deps 2019-07-29 15:26:11 -07:00
aefgh39622
e0ae5cb3c6 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- aefgh39622 <aefgh39622@gmail.com>
2019-07-28 12:12:35 +00:00
Марко Костић (Marko Kostić)
c0fb3d17be Pontoon: Update Serbian (sr) localization of Firefox Send
Localization authors:
- Марко Костић (Marko Kostić) <marko.m.kostic@gmail.com>
2019-07-24 21:52:22 +00:00
Ратко Вујановић
116f090b7e Pontoon: Update Serbian (sr) localization of Firefox Send
Localization authors:
- Марко Костић (Marko Kostić) <marko.m.kostic@gmail.com>
- Ратко Вујановић <arheopterics@gmail.com>
- Isidora Barad Dur <barad.dur@yahoo.com>
2019-07-23 19:52:46 +00:00
Danny Coates
7cbd9716e2 updated deps 2019-07-23 10:30:43 -07:00
Danny Coates
58191975b9 stubbed /login page for redirect base login flow 2019-07-23 09:27:34 -07:00
Anesu Chiodza
76695aee5d Pontoon: Update Shona (sn) localization of Firefox Send
Localization authors:
- Anesu Chiodza <anesuchiodza@gmail.com>
2019-07-16 17:31:47 +00:00
Anesu Chiodza
b356b4cad3 Pontoon: Update Shona (sn) localization of Firefox Send
Localization authors:
- Anesu Chiodza <anesuchiodza@gmail.com>
2019-07-16 17:11:53 +00:00
m4hdi.pdroid
63ddbeefc4 Pontoon: Update Persian (fa) localization of Firefox Send
Localization authors:
- m4hdi.pdroid <m4hdi.pdroid@gmail.com>
- Amin Mahmudian <amin.mahmudian@gmail.com>
2019-07-14 18:31:39 +00:00
Belayet Hossain
7b423b24b6 Pontoon: Update Bengali (bn) localization of Firefox Send
Localization authors:
- Belayet Hossain <bellayet@gmail.com>
2019-07-13 18:31:39 +00:00
Belayet Hossain
b67050b742 Pontoon: Update Bengali (bn) localization of Firefox Send
Localization authors:
- Belayet Hossain <bellayet@gmail.com>
2019-07-13 18:11:35 +00:00
rgpublic
06242dfd38 Add deployment instructions (#1366) 2019-07-12 10:07:24 -04:00
Danny Coates
3b8dbfd81c npm run format 2019-07-11 10:47:42 -07:00
Danny Coates
9c2fe39764 updated deps 2019-07-11 10:46:07 -07:00
Danny Coates
8b21d43bfa Merge pull request #1363 from flodolo/bengali
Rename bn-BD as bn
2019-07-10 09:54:32 -07:00
Francesco Lodolo [:flod]
e7e39f4d4a Rename bn-BD as bn 2019-07-10 06:52:22 +02:00
Top
e4c801d9a1 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- aefgh39622 <aefgh39622@gmail.com>
- Top <teerapatxtop@yahoo.com>
2019-07-08 16:12:27 +00:00
Cristian Silaghi
324f275dd4 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-07-08 15:31:49 +00:00
Pin-guang Chen
594e0bd28e Pontoon: Update Chinese (Taiwan) (zh-TW) localization of Firefox Send
Localization authors:
- Pin-guang Chen <petercpg@mail.moztw.org>
2019-07-08 14:12:25 +00:00
aefgh39622
6a7fdfe780 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- aefgh39622 <aefgh39622@gmail.com>
2019-07-08 13:51:49 +00:00
aefgh39622
0c82741b98 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- aefgh39622 <aefgh39622@gmail.com>
2019-07-08 13:33:33 +00:00
aefgh39622
fe57734792 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- aefgh39622 <aefgh39622@gmail.com>
2019-07-08 13:12:28 +00:00
Top
4754bed9b8 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- Top <teerapatxtop@yahoo.com>
2019-07-07 18:52:25 +00:00
aefgh39622
a60da467b9 Pontoon: Update Thai (th) localization of Firefox Send
Localization authors:
- aefgh39622 <aefgh39622@gmail.com>
2019-07-07 15:53:12 +00:00
Tomer Cohen
362da2bbfc Pontoon: Update Hebrew (he) localization of Firefox Send
Localization authors:
- Tomer Cohen <tomer.mozilla@tomercohen.com>
2019-07-05 18:54:16 +00:00
ItielMaN
1a9ef4a246 Pontoon: Update Hebrew (he) localization of Firefox Send
Localization authors:
- ItielMaN <itiel_yn8@walla.com>
- Yaron Shahrabani <sh.yaron@gmail.com>
- Tomer Cohen <tomer.mozilla@tomercohen.com>
2019-07-05 16:52:35 +00:00
Marcelo Ghelman
f51dbbb8f5 Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-07-04 21:32:59 +00:00
Cristian Silaghi
e497107e59 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-07-02 09:32:42 +00:00
sergio
10ad6fc1ae Pontoon: Update Russian (ru) localization of Firefox Send
Localization authors:
- sergio <sergio+it@outerface.net>
2019-07-01 12:32:41 +00:00
Christian Elbrianno
c982db4c75 Pontoon: Update Indonesian (id) localization of Firefox Send
Localization authors:
- Christian Elbrianno <christian.elbrianno41@gmail.com>
- Ringgo <armen.ringgo@yahoo.de>
2019-06-30 04:52:51 +00:00
Cristian Silaghi
cd8130563d Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-06-27 12:58:48 +00:00
Cristian Silaghi
730a569d43 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-06-26 13:33:36 +00:00
kumincir
769dae1bdc Pontoon: Update Sundanese (su) localization of Firefox Send
Localization authors:
- kumincir <ia.adnan@gmail.com>
2019-06-26 02:33:06 +00:00
Cristian Silaghi
54a8c504ce Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-06-24 15:33:56 +00:00
robbp
92dc9a0f71 Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- robbp <robbpaun@gmail.com>
2019-06-23 05:17:32 +00:00
Besnik Bleta
80a7c92056 Pontoon: Update Albanian (sq) localization of Firefox Send
Localization authors:
- Besnik Bleta <besnik@programeshqip.org>
2019-06-21 11:52:47 +00:00
p.sanroman.bengoetxea
c6ebea0100 Pontoon: Update Basque (eu) localization of Firefox Send
Localization authors:
- p.sanroman.bengoetxea <p.sanroman.bengoetxea@gmail.com>
2019-06-18 12:35:09 +00:00
mail
039b5daaed Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- mail <mail@kyg.kr>
2019-06-18 06:31:42 +00:00
Marcelo Ghelman
4bf4e61c2c Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-06-17 18:13:25 +00:00
Cristian Silaghi
3c21e2a00f Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-06-17 13:13:34 +00:00
Cristian Silaghi
38a379d1de Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-06-16 20:11:54 +00:00
Sahithi
adeb19d974 Pontoon: Update Telugu (te) localization of Firefox Send
Localization authors:
- Sahithi <sahithi.thinker@gmail.com>
2019-06-16 10:53:05 +00:00
Sahithi
744c410704 Pontoon: Update Telugu (te) localization of Firefox Send
Localization authors:
- Sahithi <sahithi.thinker@gmail.com>
2019-06-16 10:32:18 +00:00
Sahithi
99ab3882eb Pontoon: Update Telugu (te) localization of Firefox Send
Localization authors:
- Sahithi <sahithi.thinker@gmail.com>
2019-06-16 10:13:18 +00:00
Danny Coates
7cdf566bcd updated deps 2019-06-14 11:58:39 -07:00
Danny Coates
b6e4877d93 Merge pull request #1352 from mozilla/tailwind-1
updated tailwindcss to 1.0
2019-06-14 11:45:10 -07:00
Danny Coates
b9c87fd779 updated tailwindcss to 1.0 2019-06-14 11:37:30 -07:00
Joe ST
6ef5b5133c Pontoon: Update English (Great Britain) (en-GB) localization of Firefox Send
Localization authors:
- Joe ST <joe@fbstj.net>
2019-06-14 16:39:06 +00:00
Yassine Aït-El-Mouden
b7d2420765 Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Yassine Aït-El-Mouden <yaitelmouden@outlook.com>
- Brahim Essaidi <Essaidib2@gmail.com>
2019-06-14 12:33:45 +00:00
Artem Polivanchuk
c139531c91 Pontoon: Update Ukrainian (uk) localization of Firefox Send
Localization authors:
- Artem Polivanchuk <artem@mozilla.org.ua>
2019-06-14 09:14:39 +00:00
Muhend Belkacem
88fe3902bc Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Muhend Belkacem <taqbaylitassa@gmail.com>
2019-06-14 08:52:19 +00:00
Muhend Belkacem
645fd062ac Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Muhend Belkacem <taqbaylitassa@gmail.com>
2019-06-13 23:51:58 +00:00
Uccen Marzuq
ccb0b71df5 Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Uccen Marzuq <merzouk.ouchene@laposte.net>
2019-06-13 21:52:28 +00:00
Muhend Belkacem
b8ec90a398 Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Muhend Belkacem <taqbaylitassa@gmail.com>
2019-06-13 20:51:59 +00:00
marsf
7ed5f37c66 Pontoon: Update Japanese (ja) localization of Firefox Send
Localization authors:
- marsf <chimantaea_mirabilis@yahoo.co.jp>
2019-06-13 10:32:28 +00:00
Victor Bychek
c899129f9a Pontoon: Update Russian (ru) localization of Firefox Send
Localization authors:
- Victor Bychek <a@bychek.ru>
2019-06-12 12:34:13 +00:00
Hyeonseok Shin
1bb91690c5 Pontoon: Update Korean (ko) localization of Firefox Send
Localization authors:
- Hyeonseok Shin <hyeonseok@gmail.com>
- Jonathan Joseph Chiarella <jonathan.chiarella@gmail.com>
2019-06-12 03:12:53 +00:00
Mikeyy
073f6f67d3 Pontoon: Update Croatian (hr) localization of Firefox Send
Localization authors:
- Mikeyy <mihovil@miho.im>
2019-06-10 19:54:19 +00:00
Danny Coates
533bfdb496 updated deps 2019-06-06 18:01:57 -07:00
Paulius
34de65d7d2 Pontoon: Update Lithuanian (lt) localization of Firefox Send
Localization authors:
- Paulius <paulius@mozilla.lt>
2019-06-06 13:13:09 +00:00
Danny Coates
209fdf34f8 Merge pull request #1348 from georapbox/issue-1332
Fixes blurry Sign in button when hovered
2019-06-05 09:33:53 -07:00
Brahim Essaidi
ba5c2a049d Pontoon: Update Tamazight (zgh) localization of Firefox Send
Localization authors:
- Brahim Essaidi <Essaidib2@gmail.com>
2019-06-05 11:33:42 +00:00
George Raptis
1528aa3f1b Fixes blurry Sign in button when hovered 2019-06-05 11:58:11 +03:00
Danny Coates
b1f1b9bd19 v3.0.12 2019-06-03 13:20:37 -07:00
Fjoerfoks
2963b2fc05 Pontoon: Update Frisian (fy-NL) localization of Firefox Send
Localization authors:
- Fjoerfoks <fryskefirefox@gmail.com>
2019-06-03 12:16:57 +00:00
Gwenn
e4f9cfa023 Pontoon: Update Breton (br) localization of Firefox Send
Localization authors:
- Gwenn <tornoz@laposte.net>
2019-06-03 12:16:54 +00:00
Mark Heijl
09e961219d Pontoon: Update Dutch (nl) localization of Firefox Send
Localization authors:
- Mark Heijl <markh@babelzilla.org>
2019-06-03 11:52:36 +00:00
Gwenn
b36a5f6973 Pontoon: Update Breton (br) localization of Firefox Send
Localization authors:
- Gwenn <tornoz@laposte.net>
2019-06-03 11:52:34 +00:00
Cristian Silaghi
1a36dc084e Pontoon: Update Romanian (ro) localization of Firefox Send
Localization authors:
- Cristian Silaghi <cristian.silaghi@mozilla.ro>
2019-06-03 10:53:39 +00:00
Björn I
c66347b3da Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-06-03 07:12:53 +00:00
Björn I
a7d0551509 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-06-03 03:32:42 +00:00
Björn I
f6f6324aa1 Pontoon: Update Norwegian Nynorsk (nn-NO) localization of Firefox Send
Localization authors:
- Björn I. <bjorni.svindseth@yahoo.com>
2019-06-03 02:51:33 +00:00
Marcelo Poli
a24597695b Pontoon: Update Spanish (Argentina) (es-AR) localization of Firefox Send
Localization authors:
- Marcelo Poli <enzomatrix@gmail.com>
2019-06-02 19:11:41 +00:00
ravmn
706ac638da Pontoon: Update Spanish (Chile) (es-CL) localization of Firefox Send
Localization authors:
- ravmn <ravmn@ravmn.cl>
2019-06-01 23:32:20 +00:00
Selim Şumlu
d66d08f0ed Pontoon: Update Turkish (tr) localization of Firefox Send
Localization authors:
- Selim Şumlu <selim@sum.lu>
2019-06-01 23:12:28 +00:00
Michael Wolf
ab9af7fd9b Pontoon: Update Sorbian, Lower (dsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-06-01 18:51:55 +00:00
Jiri Grönroos
466a087689 Pontoon: Update Finnish (fi) localization of Firefox Send
Localization authors:
- Jiri Grönroos <jiri.gronroos@iki.fi>
2019-06-01 05:53:37 +00:00
Piotr Drąg
71956739f8 Pontoon: Update Polish (pl) localization of Firefox Send
Localization authors:
- Piotr Drąg <piotrdrag@gmail.com>
2019-05-31 18:13:10 +00:00
Danny Coates
62689b9556 Merge pull request #1344 from mozilla/update-promo-banner
tweak promo banner to match spec'
2019-05-31 09:23:51 -07:00
Danny Coates
7d1b8e002f a couple promo style tweaks 2019-05-31 09:18:20 -07:00
Slimane Selyan AMIRI
8c535ce50d Pontoon: Update Kabyle (kab) localization of Firefox Send
Localization authors:
- Slimane Selyan AMIRI <slimane.amiri@gmail.com>
2019-05-31 14:32:26 +00:00
John Gruen
a3bdcd8478 tweak promo banner to match spec' 2019-05-31 13:48:32 +02:00
Jim Spentzos
1e77d86e8a Pontoon: Update Greek (el) localization of Firefox Send
Localization authors:
- Jim Spentzos <jimspentzos2000@gmail.com>
2019-05-31 04:12:41 +00:00
Jim Spentzos
1af01b1ee3 Pontoon: Update Greek (el) localization of Firefox Send
Localization authors:
- Jim Spentzos <jimspentzos2000@gmail.com>
2019-05-31 03:51:26 +00:00
Balázs Meskó
eb1bcde37f Pontoon: Update Hungarian (hu) localization of Firefox Send
Localization authors:
- Balázs Meskó <meskobalazs@gmail.com>
2019-05-30 11:31:25 +00:00
avelper
8def910d61 Pontoon: Update Spanish (Spain) (es-ES) localization of Firefox Send
Localization authors:
- avelper <avelper@mozilla-hispano.org>
2019-05-30 11:11:30 +00:00
Quế Tùng
5892532d03 Pontoon: Update Vietnamese (vi) localization of Firefox Send
Localization authors:
- Quế Tùng <best.cloney.1301@gmail.com>
2019-05-30 10:16:41 +00:00
Rhoslyn Prys
8ede5cf05c Pontoon: Update Welsh (cy) localization of Firefox Send
Localization authors:
- Rhoslyn Prys <rprys@posteo.net>
2019-05-30 08:12:25 +00:00
Danny Coates
7213fef7c3 updated deps 2019-05-29 19:27:47 -07:00
Danny Coates
d3e9bb09df trailhead promo 2019-05-29 19:27:47 -07:00
Michael Wolf
2682aec90d Pontoon: Update Sorbian, Upper (hsb) localization of Firefox Send
Localization authors:
- Michael Wolf <milupo@sorbzilla.de>
2019-05-29 21:12:41 +00:00
Rodrigo
0ea89a58b0 Pontoon: Update Portuguese (Portugal) (pt-PT) localization of Firefox Send
Localization authors:
- Rodrigo <rodrigo.mcunha@hotmail.com>
2019-05-29 21:12:39 +00:00
Marcelo Ghelman
2a2a3ad21f Pontoon: Update Portuguese (Brazil) (pt-BR) localization of Firefox Send
Localization authors:
- Marcelo Ghelman <marcelo.ghelman@gmail.com>
2019-05-29 20:52:57 +00:00
yusup.ramdani
36c73bae7b Pontoon: Update Sundanese (su) localization of Firefox Send
Localization authors:
- yusup.ramdani <yusup.ramdani@wikimedia.or.id>
2019-05-29 18:51:34 +00:00
149 changed files with 9174 additions and 5407 deletions

View File

@@ -1,36 +1,13 @@
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
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:
@@ -38,40 +15,34 @@ jobs:
- image: circleci/node:10-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:10
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:10
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:10
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,18 +1,22 @@
Abdalrahman Hwoij
Abhinav Adduri
Adnan Kičin
Adolfo Jayme Barrientos
Alberto Castro
Alexander Slovesnik
Alfredos-Panagiotis Damkalis
Aman Alam
Amin Mahmudian
Ander Elortondo
Andreas Pettersson
Anesu Chiodza
Anika Dorn
Anish Sheela
Arash Mousavi
Artem Polivanchuk
Ashikur Rahman
Ashok kumar
Balasankar C
Balázs Meskó
Belayet Hossain
Benjamin Forehand Jr
@@ -20,8 +24,11 @@ Besnik Bleta
Björn I
Bjørn I
Boopesh Mahendran
Brahim Essaidi
Brainlulz
Breana Gonzales
Christian Elbrianno
Christoph Kührer
Christopher Ramírez
Chuck Harmston
Cloney 173741
@@ -31,6 +38,7 @@ Cynthia Pereira
Daniel Thorn
Daniela Arcese
Danny Coates
Davide
Derek Tamsen
Dhyey Thakore
Donovan Preston
@@ -52,11 +60,17 @@ Frederick Villaluna
G12r
Gabriela
Gautam krishna.R
George Raptis
Georgianizator
Gonçalo Matos
Gwenn
Hampus
Hugo
Hugo Abreu
Hyeonseok Shin
Håvar Henriksen
Ian Neal
ItielMaN
Jae Hyeon Park
Jakob Kappel
Jakub Rychlý
@@ -65,6 +79,8 @@ Jarmo
Jim Spentzos
Jiri Grönroos
Jobava
Joe Becher
Joe ST
Joergen
Johann-S
John Gruen
@@ -79,12 +95,16 @@ Juraj Cigáň
Kerim Kalamujić
Khaled Hosny
Kim Ludvigsen
Kim Younggeon
Kohei Yoshino
Lan Glad
Lasse Liehu
Laurent Jouanneau
Lobodzets
LuFlo
Luis A. Sánchez
Luiz Carlos de Morais
Luiz Felipe F M Costa
Luna Jernberg
Mahay Alam Khan
Marcelo Ghelman
@@ -94,6 +114,7 @@ Mark Heijl
Mark Liang
Mark Liang (You-Wen)
Marko Andrejić
Martijn Dekker
Marwan Mohamad
Matjaž Horvat
Maykon Chagas
@@ -106,29 +127,38 @@ Michal Vašíček
Mikeyy
Miro Rauhala
Mozilla Pontoon
Mozilla-GitHub-Standards
Mozinet
Moḥend Belqasem
Muhend Belkacem
Muḥend Belqasem
Myungjae Won
Nicholas Skinsacos
Nihad
Nihad Suljić
Niksend Mizuhara
Oscar
Paulius
Pedro Burlamaqui Bendahan
Peter deHaan
Pierre Neter
Pin-guang Chen
Piotr Drąg
Quentí
Quế Tùng
Rachel Tublitz
Radu Popescu
Rhoslyn Prys
RickieES
Rimas Kudelis
Rizky Ariestiyansyah
Rob Powell
Robert
Roberto Alvarado
Rodrigo
Rodrigo Guerra
Rok Žerdin
Romi Hardiyanto
Rongjian Zhang
Ruba
Sahithi
@@ -139,9 +169,13 @@ Sara Todaro
Sav22999
Schieck :)
Selim Şumlu
Selyan Sliman Amiri
Sidak Singh Aulakh
Slimane Amiri
Slimane Selyan AMIRI
Soumya Himanish Mohapatra
Staś Małolepszy
Suriyaa ✌️️
Tema
Thomas Dalichow
Théo Chevalier
@@ -150,6 +184,7 @@ Tim Visée
Tomer Cohen
Tomáš Zelina
Ton
Top
Tymur Faradzhev
Uccen Marzuq
Varghese Thomas
@@ -157,8 +192,10 @@ Victor Bychek
Vimal Raghubir
Vitaliy Krutko
Weihang Lo
Wiktor Furman
Wil Clouser
YFdyh000
Yassine Aït-El-Mouden
Yongmin H
You-Wen Liang (Mark)
aaaaalbert
@@ -169,6 +206,7 @@ alex_mayorga
ariestiyansyah
avelper
chilledfrogs
clouserw-mozilla-owner
dgadelha
dskmori
ehuggett
@@ -180,25 +218,37 @@ gmontagu
goofy
hello
hi
ivan.pompa
jesferman1993
jlG
josotrix
jspam
julen
julenx
kenrick95
kumincir
leo.toneff
m4hdi.pdroid
mail
manxmensch
marigalicer
marsf
merianosnikos
mirzet.omerovic.1992
mujeebcpy
p.sanroman.bengoetxea
passionforlife
paul.trevor
pyup.io bot
ravmn
rcmainak
reza.habibi2008
rgpublic
risger
robbp
ruikunai
savemore99.sm
sergio
shikhar-scs
siparon
skystar-p
@@ -210,10 +260,13 @@ victor.gonzalezro
xcffl
ybouhamam
yoshimitsu002
yusup.ramdani
Μιχάλης
Марко Костић (Marko Kostić)
Ратко Вујановић
صفا الفليج
వీవెన్
ജോയ്സ്
张无忌
新垣结衣松冈茉优长泽雅美门胁麦上野树里石原里美
莫非前世那一眼

View File

@@ -1,17 +1,60 @@
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:10 AS builder
RUN set -x \
# Add user
&& addgroup --gid 10001 app \
&& adduser --disabled-password \
--gecos '' \
--gid 10001 \
--home /app \
--uid 10001 \
app
RUN npm i -g npm
COPY --chown=app:app . /app
USER app
WORKDIR /app
COPY --chown=app:app --from=builder /app .
COPY --chown=app:app . .
RUN set -x \
# Build
&& npm ci \
&& npm run build
# Main image
FROM node:10-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)
@@ -16,6 +16,7 @@
* [Localization](#localization)
* [Contributing](#contributing)
* [Testing](#testing)
* [Deployment](#deployment)
* [Android](#android)
* [License](#license)
@@ -29,7 +30,7 @@ A file sharing experiment which allows you to send encrypted files to other user
## Requirements
- [Node.js 10.0+](https://nodejs.org/)
- [Node.js 10.x](https://nodejs.org/)
- [Redis server](https://redis.io/) (optional for development)
- [AWS S3](https://aws.amazon.com/s3/) or compatible service. (optional)
@@ -91,6 +92,12 @@ Pull requests are always welcome! Feel free to check out the list of ["good firs
---
## Deployment
see also [docs/deployment.md](docs/deployment.md)
---
## Android
The android implementation is contained in the `android` directory, and can be viewed locally for easy testing and editing by running `ANDROID=1 npm start` and then visiting <http://localhost:8080>. CSS and image files are located in the `android/app/src/main/assets` directory.

View File

@@ -1,8 +1,7 @@
/* global window, navigator */
import 'fluent-intl-polyfill';
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';
@@ -53,7 +52,7 @@ function body(main) {
const menu = html`<a
id="hamburger"
class="absolute pin-t pin-r z-50"
class="absolute top-0 right-0 z-50"
href="#"
onclick="${clickPreferences}"
>
@@ -61,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>
`;
@@ -83,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}"
>
@@ -42,11 +42,7 @@ module.exports = function(state, emit) {
content =
archives.length < 1
? intro(state)
: list(
archives,
'list-reset h-full overflow-y-auto w-full',
'mb-3 w-full'
);
: list(archives, 'h-full overflow-y-auto w-full', 'mb-3 w-full');
}
return html`
@@ -57,7 +53,7 @@ module.exports = function(state, emit) {
>
${content}
</section>
<div class="fixed pin-r pin-b z-20">
<div class="fixed right-0 bottom-0 z-20">
${button}
<input
id="file-upload"

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;
@@ -137,17 +146,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 +173,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 +191,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 +220,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 +271,6 @@ export function uploadWs(
return {
cancel: function() {
canceller.error = new Error(0);
canceller.cancelled = true;
},
@@ -284,7 +310,7 @@ async function downloadS(id, keychain, signal) {
return response.body;
}
async function tryDownloadStream(id, keychain, signal, tries = 1) {
async function tryDownloadStream(id, keychain, signal, tries = 2) {
try {
const result = await downloadS(id, keychain, signal);
return result;
@@ -306,18 +332,19 @@ export function downloadStream(id, keychain) {
}
return {
cancel,
result: tryDownloadStream(id, keychain, controller.signal, 2)
result: tryDownloadStream(id, keychain, controller.signal)
};
}
//////////////////
function download(id, keychain, onprogress, canceller) {
async function download(id, keychain, onprogress, canceller) {
const auth = await keychain.authHeader();
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');
@@ -337,7 +364,6 @@ 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.responseType = 'blob';
@@ -346,7 +372,7 @@ function download(id, keychain, onprogress, canceller) {
});
}
async function tryDownload(id, keychain, onprogress, canceller, tries = 1) {
async function tryDownload(id, keychain, onprogress, canceller, tries = 2) {
try {
const result = await download(id, keychain, onprogress, canceller);
return result;
@@ -367,7 +393,7 @@ export function downloadFile(id, keychain, onprogress) {
}
return {
cancel,
result: tryDownload(id, keychain, onprogress, canceller, 2)
result: tryDownload(id, keychain, onprogress, canceller)
};
}

View File

@@ -76,8 +76,8 @@ async function polyfillStreams() {
}
export default async function getCapabilities() {
const serviceWorker =
'serviceWorker' in navigator && browserName() !== 'edge';
const browser = browserName();
const serviceWorker = 'serviceWorker' in navigator && browser !== 'edge';
let crypto = await checkCrypto();
const nativeStreams = checkStreams();
let polyStreams = false;
@@ -97,13 +97,16 @@ export default async function getCapabilities() {
window.matchMedia('(display-mode: standalone)').matches ||
navigator.standalone;
const mobileFirefox =
browser === 'firefox' && /mobile/i.test(navigator.userAgent);
return {
account,
crypto,
serviceWorker,
streamUpload: nativeStreams || polyStreams,
streamDownload:
nativeStreams && serviceWorker && browserName() !== 'safari',
nativeStreams && serviceWorker && browser !== 'safari' && !mobileFirefox,
multifile: nativeStreams || polyStreams,
share,
standalone

View File

@@ -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,17 @@ 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 {
// 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 {
@@ -262,7 +265,12 @@ export default function(state, emitter) {
state.transfer = null;
const location = err.message === '404' ? '/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,

View File

@@ -112,6 +112,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');
@@ -153,9 +154,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;
@@ -164,11 +163,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);

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,4 +1,4 @@
import { FluentBundle } from 'fluent';
import { FluentBundle } from '@fluent/bundle';
function makeBundle(locale, ftl) {
const bundle = new FluentBundle(locale, { useIsolating: false });
@@ -10,9 +10,9 @@ export async function getTranslator(locale) {
const bundles = [];
const { default: en } = await import('../public/locales/en-US/send.ftl');
if (locale !== 'en-US') {
const {
default: ftl
} = await import(`../public/locales/${locale}/send.ftl`);
const { default: ftl } = await import(
`../public/locales/${locale}/send.ftl`
);
bundles.push(makeBundle(locale, ftl));
}
bundles.push(makeBundle('en-US', en));

View File

@@ -1,4 +1,9 @@
@tailwind preflight;
@tailwind base;
html {
line-height: 1.15;
}
@tailwind components;
:not(input) {
@@ -34,7 +39,7 @@ body {
}
.btn {
@apply bg-blue-dark;
@apply bg-blue-60;
@apply text-white;
@apply cursor-pointer;
@apply py-4;
@@ -43,11 +48,11 @@ body {
}
.btn:hover {
@apply bg-blue-darker;
@apply bg-blue-70;
}
.btn:focus {
@apply bg-blue-darker;
@apply bg-blue-70;
}
.checkbox {
@@ -65,7 +70,7 @@ body {
}
.checkbox > label::before {
/* @apply bg-grey-lightest; */
/* @apply bg-grey-10; */
@apply border;
@apply rounded-sm;
@@ -77,16 +82,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;
@@ -99,8 +104,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;
@@ -148,9 +153,21 @@ footer li:hover {
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 {
@@ -188,14 +205,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;
@@ -285,6 +302,55 @@ select {
}
}
@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;
}
.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 {
@@ -311,6 +377,7 @@ select {
}
.signin {
backface-visibility: hidden;
border-radius: 6px;
transition-property: transform, background-color;
transition-duration: 250ms;
@@ -319,8 +386,6 @@ select {
.signin:hover,
.signin:focus {
@apply shadow-btn;
transform: scale(1.0625);
}
@@ -331,19 +396,19 @@ select {
/* begin signin button color experiment */
.white-blue {
@apply border-blue-dark;
@apply border-blue-60;
@apply border-2;
@apply text-blue-dark;
@apply text-blue-60;
}
.white-blue:hover,
.white-blue:focus {
@apply bg-blue-dark;
@apply bg-blue-60;
@apply text-white;
}
.blue {
@apply bg-blue-dark;
@apply bg-blue-60;
@apply text-white;
}

View File

@@ -1,7 +1,7 @@
/* global DEFAULTS LIMITS PREFS */
import 'core-js';
import 'fast-text-encoding'; // MS Edge support
import 'fluent-intl-polyfill';
import 'intl-pluralrules';
import choo from 'choo';
import nanotiming from 'nanotiming';
import routes from './routes';
@@ -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') {
@@ -47,6 +47,7 @@ if (process.env.NODE_ENV === 'production') {
const translate = await getTranslator(locale());
setTranslate(translate);
// eslint-disable-next-line require-atomic-updates
window.initialState = {
LIMITS,
DEFAULTS,
@@ -55,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
};
const app = routes(choo());
const app = routes(choo({ hash: true }));
// eslint-disable-next-line require-atomic-updates
window.app = app;
app.use(experiments);
app.use(metrics);

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 @@ 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,6 +13,7 @@ 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('*', body(require('./ui/notFound')));
return app;
};

View File

@@ -11,13 +11,14 @@ const map = new Map();
const IMAGES = /.*\.(png|svg|jpg)$/;
const VERSIONED_ASSET = /\.[A-Fa-f0-9]{8}\.(js|css|png|svg|jpg)$/;
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) {
@@ -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));
}
};

View File

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

View File

@@ -64,8 +64,7 @@ class Account extends Component {
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 +78,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 list-reset absolute pin-t pin-r 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

@@ -46,7 +46,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 +58,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 +106,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 +122,9 @@ function fileInfo(file, action) {
function archiveInfo(archive, action) {
return html`
<p class="w-full flex items-center">
<img class="mr-3 flex-no-shrink" 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 +144,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"
@@ -155,7 +159,7 @@ function archiveDetails(translate, archive) {
num: archive.manifest.files.length
})}
</summary>
${list(archive.manifest.files.map(f => fileInfo(f)), 'list-reset')}
${list(archive.manifest.files.map(f => fileInfo(f)))}
</details>
`;
}
@@ -170,20 +174,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 +200,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,14 +217,14 @@ 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,
html`
<input
type="image"
class="self-start flex-no-shrink text-white hover:opacity-75 focus:outline"
class="self-start flex-shrink-0 text-white hover:opacity-75 focus:outline"
alt="${state.translate('deleteButtonHover')}"
title="${state.translate('deleteButtonHover')}"
src="${assets.get('close-16.svg')}"
@@ -225,7 +236,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>
@@ -256,9 +267,7 @@ module.exports = function(state, emit, archive) {
try {
await navigator.share({
title: state.translate('-send-brand'),
text: `Download "${
archive.name
}" with Firefox Send: simple, safe file sharing`,
text: `Download "${archive.name}" with Firefox Send: simple, safe file sharing`,
//state.translate('shareMessage', { name }),
url: archive.url
});
@@ -271,18 +280,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 list-reset 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-no-shrink 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"
@@ -302,10 +314,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)
})}
@@ -315,7 +329,7 @@ module.exports.wip = function(state, emit) {
${expiryOptions(state, emit)} ${password(state, emit)}
<button
id="upload-btn"
class="btn rounded-lg flex-no-shrink focus:outline"
class="btn rounded-lg flex-shrink-0 focus:outline"
title="${state.translate('uploadButton')}"
onclick="${upload}"
>
@@ -380,22 +394,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')}"
>
@@ -417,7 +431,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');
@@ -430,14 +444,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>
@@ -471,14 +487,11 @@ module.exports.empty = function(state, emit) {
`;
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) {
@@ -503,13 +516,15 @@ 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 p-4 w-full md:w-128 dark:bg-grey-90"
>
<div class="border rounded py-3 px-6 dark:border-grey-70">
${archiveInfo(archive)} ${details}
</div>
<button
id="download-btn"
class="btn rounded-lg mt-4 w-full flex-no-shrink focus:outline"
class="btn rounded-lg mt-4 w-full flex-shrink-0 focus:outline"
title="${state.translate('downloadButtonLabel')}"
onclick=${download}
>
@@ -531,10 +546,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,9 +8,7 @@ function banner(state) {
return; // server side
}
const show =
!state.capabilities.standalone &&
!/firefox/i.test(navigator.userAgent) &&
!state.route.startsWith('/unsupported/');
!state.capabilities.standalone && !state.route.startsWith('/unsupported/');
if (show) {
return state.cache(Promo, 'promo').render();
}
@@ -20,7 +18,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

@@ -7,29 +7,31 @@ module.exports = function(name, url) {
<send-copy-dialog
class="flex flex-col items-center text-center p-4 max-w-sm m-auto"
>
<h1 class="font-bold my-4">
<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 word-break-all dark:text-grey-40"
>
${state.translate('copyLinkDescription')} <br />
${name}
</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"
/>
<button
class="btn rounded-lg w-full flex-no-shrink focus:outline"
class="btn rounded-lg w-full flex-shrink-0 focus:outline"
onclick="${copy}"
title="${state.translate('copyLinkButton')}"
>
${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

@@ -22,7 +22,9 @@ function downloading(state, emit) {
<div
class="flex flex-col w-full h-full items-center md:justify-center md:-mt-8"
>
<h1 class="mb-4">${state.translate('downloadingTitle')}</h1>
<h1 class="text-3xl font-bold mb-4">
${state.translate('downloadingTitle')}
</h1>
${archiveTile.downloading(state, emit)}
</div>
`;
@@ -36,8 +38,12 @@ function preview(state, emit) {
<div
class="flex flex-col w-full max-w-md h-full mx-auto items-center justify-center"
>
<h1 class="mb-4">${state.translate('downloadTitle')}</h1>
<p class="w-full text-grey-darkest text-center leading-normal">
<h1 class="text-3xl font-bold mb-4">
${state.translate('downloadTitle')}
</h1>
<p
class="w-full text-grey-80 text-center leading-normal dark:text-grey-40"
>
${state.translate('downloadDescription')}
</p>
${archiveTile.preview(state, emit)}

View File

@@ -5,13 +5,13 @@ module.exports = function(state) {
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 font-bold my-2">
<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">
<p class="text-grey-80 leading-normal dark:text-grey-40">
${state.translate('trySendDescription')}
</p>
<p class="my-5">

View File

@@ -6,10 +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="mb-4">${state.translate('downloadTitle')}</h1>
<p class="w-full mb-4 text-center text-grey-darkest leading-normal">
<h1 class="text-3xl font-bold mb-4">
${state.translate('downloadTitle')}
</h1>
<p
class="w-full mb-4 text-center text-grey-80 dark:text-grey-40 leading-normal"
>
${state.translate('downloadDescription')}
</p>
<form
@@ -20,8 +24,8 @@ module.exports = function(state, emit) {
<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')}"
@@ -32,7 +36,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')}"
@@ -40,7 +44,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')}
@@ -70,7 +74,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

@@ -9,11 +9,11 @@ module.exports = function(state, emit) {
<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 font-bold my-2">
<h1 class="text-center text-3xl font-bold my-2">
${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">
${state.translate('trySendDescription')}
</p>
<p class="my-5">

View File

@@ -19,16 +19,13 @@ class Footer extends Component {
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
class="list-reset flex flex-col md:flex-row items-start md:items-center md:justify-end"
class="flex flex-col md:flex-row items-start md:items-center md:justify-end"
>
<li class="m-2">
<a href="https://www.mozilla.org/about/legal/terms/services/#send">

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 class="w-48 md:w-64">
<use xlink:href="${assets.get('wordmark.svg')}#logo" />
</svg>
</a>
`;
return html`
<header

View File

@@ -20,11 +20,7 @@ module.exports = function(state, emit) {
const right =
archives.length === 0
? intro(state)
: list(
archives,
'list-reset p-2 h-full overflow-y-auto w-full',
'mb-4 w-full'
);
: list(archives, 'p-2 h-full overflow-y-auto w-full', 'mb-4 w-full');
return html`
<main class="main">

View File

@@ -4,10 +4,10 @@ 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="font-bold md:pb-2">
<h1 class="text-3xl font-bold md:pb-2">
${state.translate('introTitle')}
</h1>
<p class="max-w-sm leading-loose mt-6 md:mt-2 md:pr-14">

View File

@@ -6,9 +6,11 @@ module.exports = function(state, emit) {
<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">${state.translate('legalTitle')}</h1>
<h1 class="text-center text-3xl font-bold">
${state.translate('legalTitle')}
</h1>
<p class="mt-2">${state.translate('legalDateStamp')}</p>
<div class="overflow-y-scroll py-8 px-12">
<p class="leading-normal">
@@ -17,7 +19,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
@@ -29,7 +31,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 pin 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 pin-t flex items-center justify-center"
class="h-full w-full max-h-screen absolute top-0 flex items-center justify-center"
>
<div class="w-full" onclick="${e => e.stopPropagation()}">
<div class="w-full">
${state.modal(state, emit, close)}
</div>
</div>

View File

@@ -8,16 +8,18 @@ module.exports = function(state, emit) {
<div
class="flex flex-col w-full max-w-md h-full mx-auto items-center justify-center"
>
<h1 class="mb-4">${state.translate('downloadTitle')}</h1>
<h1 class="mb-4 text-3xl font-bold">${state.translate(
'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-no-shrink" src="${assets.get(
<img class="mr-3 flex-shrink-0" src="${assets.get(
'blue_file.svg'
)}"/>
<p class="flex-grow">
@@ -49,7 +51,7 @@ module.exports = function(state, emit) {
</div>
</fieldset>
<input
class="btn rounded-lg w-full flex flex-no-shrink items-center justify-center"
class="btn rounded-lg w-full flex flex-shrink-0 items-center justify-center"
value="${state.translate('copyLinkButton')}"
title="${state.translate('copyLinkButton')}"
type="submit" />

View File

@@ -9,11 +9,11 @@ module.exports = function(state, emit) {
<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 font-bold my-2">
<h1 class="text-center text-3xl font-bold my-2">
${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">
${state.translate('trySendDescription')}
</p>
<p class="my-5">

View File

@@ -4,9 +4,11 @@ module.exports = function(message) {
return function(state, emit, close) {
return html`
<send-ok-dialog class="flex flex-col max-w-sm p-4 m-auto">
<h2 class="text-center m-8 leading-normal">${message}</h2>
<h2 class="text-center text-xl font-bold m-8 leading-normal">
${message}
</h2>
<button
class="btn rounded-lg w-full flex-no-shrink"
class="btn rounded-lg w-full flex-shrink-0"
onclick="${close}"
title="${state.translate('okButton')}"
>

View File

@@ -15,20 +15,20 @@ class Promo extends Component {
createElement() {
return html`
<send-promo
class="w-full flex-none flex-row items-center content-center justify-center text-sm bg-grey-light leading-tight text-grey-darkest px-4 py-3 hidden md:flex"
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
src="${assets.get('firefox_logo-only.svg')}"
class="w-6"
src="${assets.get('master-logo.svg')}"
class="w-6 h-6"
alt="Firefox"
/>
<span class="ml-3">
${this.state.translate('downloadFirefoxPromo')}${' '}
<span class="ml-2 sm:ml-4 text-xs sm:text-base">
${this.state.translate('trailheadPromo')}${' '}
<a
class="text-blue"
href="https://www.mozilla.org/firefox/new/?utm_campaign=send-acquisition&utm_medium=referral&utm_source=send.firefox.com"
>${this.state.translate('downloadFirefox')}</a
class="underline link-blue"
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
>
</span>
</div>

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

@@ -6,29 +6,31 @@ module.exports = function(name, url) {
<send-share-dialog
class="flex flex-col items-center text-center p-4 max-w-sm m-auto"
>
<h1 class="font-bold my-4">
<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 word-break-all dark:text-grey-40"
>
${state.translate('shareLinkDescription')}<br />
${name}
</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"
/>
<button
class="btn rounded-lg w-full flex-no-shrink focus:outline"
class="btn rounded-lg w-full flex-shrink-0 focus:outline"
onclick="${share}"
title="${state.translate('shareLinkButton')}"
>
${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

@@ -12,18 +12,15 @@ module.exports = function(trigger) {
<send-signup-dialog
class="flex flex-col lg:flex-row justify-center px-8 md:px-24 w-full h-full"
>
<img
src="${assets.get('firefox_logo-only.svg')}"
class="h-16 mt-1 mb-4"
/>
<img src="${assets.get('master-logo.svg')}" class="h-16 mt-1 mb-4" />
<section
class="flex flex-col flex-no-shrink self-center lg:mx-6 lg:max-w-xs"
class="flex flex-col flex-shrink-0 self-center lg:mx-6 lg:max-w-xs"
>
<h1 class="font-bold text-center lg:text-left">
<h1 class="text-3xl font-bold text-center lg:text-left">
${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', {
@@ -45,11 +42,11 @@ module.exports = function(trigger) {
<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
class="btn rounded-lg w-full flex flex-no-shrink items-center justify-center"
class="btn rounded-lg w-full flex flex-shrink-0 items-center justify-center"
value="${state.translate('signInOnlyButton')}"
title="${state.translate('signInOnlyButton')}"
id="email-submit"
@@ -57,7 +54,7 @@ module.exports = function(trigger) {
/>
</form>
<button
class="my-3 text-blue-dark hover:text-blue-darker focus:text-blue-darker font-medium"
class="my-3 link-blue font-medium"
title="${state.translate('deletePopupCancel')}"
onclick=${cancel}
>

View File

@@ -13,15 +13,15 @@ module.exports = function() {
<send-survey-dialog
class="flex flex-col items-center text-center p-4 max-w-sm m-auto"
>
<h1 class="font-bold my-4">
<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>
<a
class="btn rounded-lg w-full flex-no-shrink focus:outline my-5"
class="btn rounded-lg w-full flex-shrink-0 focus:outline my-5"
onclick="${() => emit('closeModal')}"
title="Give feedback"
href="${surveyUrl}"
@@ -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,9 +27,9 @@ 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="">${strings.header}</h1>
<h1 class="text-3xl font-bold">${strings.header}</h1>
<p class="mt-4 mb-8 max-w-md leading-normal">${strings.description}</p>
${why}
<a href="${url}" class="btn rounded-lg mt-8 px-8">

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) {

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" viewBox="66 0 340 64">
<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

@@ -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,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.

68
docs/deployment.md Normal file
View File

@@ -0,0 +1,68 @@
## Requirements
This document describes how to do a full deployment of Firefox Send on your own Linux server. You will need:
* A working (and ideally somewhat recent) installation of NodeJS and NPM
* GIT
* An Apache webserver
* Optionally telnet, to be able to quickly check your installation
For Debian/Ubuntu systems this probably just means something like this:
* apt install git apache2 nodejs npm telnet
## Building
* We assume an already configured virtual-host on your webserver with an existing empty htdocs folder
* First, remove that htdocs folder - we will replace it with Firefox Send's version now
* git clone https://github.com/mozilla/send.git htdocs
* Make now sure you are NOT root but rather the user your webserver is serving files under (e.g. "su www-data" or whoever the owner of your htdocs folder is)
* npm install
* npm run build
## Running
To have a permanently running version of Firefox Send as a background process:
* Create a file "run.sh" with:
```
#!/bin/bash
nohup su www-data -c "npm run prod" 2>/dev/null &
```
* chmod +x run.sh
* ./run.sh
Now the Firefox Send backend should be running on port 1443. You can check with:
* telnet localhost 1443
## Reverse Proxy
Of course, we don't want to expose the service on port 1443. Instead we want our normal webserver to forward all requests to Firefox send ("Reverse proxy").
# Apache webserver
* a2enmod proxy
* a2enmod proxy_http
* a2enmod proxy_wstunnel
In your Apache virtual host configuration file, insert this:
```
# Enable rewrite engine
RewriteEngine on
# Make sure the original domain name is forwarded to Send
# Otherwise the generated URLs will be wrong
ProxyPreserveHost on
# Make sure the generated URL is https://
RequestHeader set X-Forwarded-Proto https
# If it's a normal file (e.g. PNG, CSS) just return it
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
# If it's a websocket connection, redirect it to a Send WS connection
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:1443/$1 [P,L]
# Otherwise redirect it to a normal HTTP connection
RewriteRule ^/(.*)$ http://127.0.0.1:1443/$1 [P,QSA]
ProxyPassReverse "/" "http://127.0.0.1:1443"
```

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:

9242
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.11",
"version": "3.0.21",
"author": "Mozilla (https://mozilla.org)",
"repository": "mozilla/send",
"homepage": "https://github.com/mozilla/send/",
@@ -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,68 +58,69 @@
"cache": true
},
"engines": {
"node": ">=10.0.0"
"node": ">=10.0.0 <11.0.0"
},
"devDependencies": {
"@babel/core": "^7.4.4",
"@babel/plugin-proposal-class-properties": "^7.4.4",
"@babel/core": "^7.7.2",
"@babel/plugin-proposal-class-properties": "^7.7.0",
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
"@babel/preset-env": "^7.4.4",
"@babel/preset-env": "^7.7.1",
"@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.8.0",
"asmcrypto.js": "^0.22.0",
"babel-loader": "^8.0.5",
"babel-plugin-istanbul": "^5.1.4",
"base64-js": "^1.3.0",
"babel-loader": "^8.0.6",
"babel-plugin-istanbul": "^5.2.0",
"base64-js": "^1.3.1",
"content-disposition": "^0.5.3",
"copy-webpack-plugin": "^5.0.3",
"core-js": "^3.0.1",
"copy-webpack-plugin": "^5.0.5",
"core-js": "^3.4.0",
"crc": "^3.8.0",
"cross-env": "^5.2.0",
"css-loader": "^2.1.1",
"cross-env": "^6.0.3",
"css-loader": "^3.2.0",
"css-mqpacker": "^7.0.0",
"cssnano": "^4.1.10",
"eslint": "^5.16.0",
"eslint-plugin-mocha": "^5.3.0",
"eslint-plugin-node": "^8.0.1",
"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": "^3.0.1",
"fluent-intl-polyfill": "^0.1.0",
"file-loader": "^4.2.0",
"git-rev-sync": "^1.12.0",
"html-loader": "^0.5.5",
"http_ece": "^1.1.0",
"husky": "^2.2.0",
"lint-staged": "^8.1.6",
"mocha": "^6.1.4",
"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.1",
"nanohtml": "^1.9.0",
"nanotiming": "^7.3.1",
"npm-run-all": "^4.1.5",
"nyc": "^14.1.0",
"nyc": "^14.1.1",
"postcss-loader": "^3.0.0",
"postcss-preset-env": "^6.6.0",
"prettier": "^1.17.0",
"proxyquire": "^2.1.0",
"puppeteer": "^1.15.0",
"raven-js": "^3.27.0",
"raw-loader": "^2.0.0",
"redis-mock": "^0.43.0",
"rimraf": "^2.6.3",
"postcss-preset-env": "^6.7.0",
"prettier": "^1.19.1",
"proxyquire": "^2.1.3",
"puppeteer": "^2.0.0",
"raw-loader": "^3.1.0",
"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.0.1",
"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.2.2",
"svgo-loader": "^2.2.0",
"tailwindcss": "^0.7.4",
"svgo": "^1.3.2",
"svgo-loader": "^2.2.1",
"tailwindcss": "^1.1.3",
"val-loader": "^1.1.1",
"wdio-docker-service": "^1.4.2",
"wdio-dot-reporter": "0.0.10",
@@ -128,39 +130,42 @@
"wdio-selenium-standalone-service": "0.0.12",
"wdio-spec-reporter": "^0.1.5",
"webdriverio": "^4.14.4",
"webpack": "^4.30.0",
"webpack-cli": "^3.3.1",
"webpack-dev-middleware": "^3.6.2",
"webpack-dev-server": "^3.3.1",
"webpack-manifest-plugin": "^2.0.4",
"webpack": "4.38.0",
"webpack-cli": "^3.3.10",
"webpack-dev-middleware": "^3.7.2",
"webpack-dev-server": "^3.9.0",
"webpack-manifest-plugin": "^2.2.0",
"webpack-unassert-loader": "^1.2.0"
},
"dependencies": {
"@google-cloud/storage": "^2.5.0",
"aws-sdk": "^2.449.0",
"@dannycoates/express-ws": "^5.0.3",
"@fluent/bundle": "^0.13.0",
"@fluent/langneg": "^0.3.0",
"@google-cloud/storage": "^4.1.1",
"@sentry/node": "^5.8.0",
"aws-sdk": "^2.568.0",
"body-parser": "^1.19.0",
"choo": "^6.13.3",
"choo": "^7.0.0",
"cldr-core": "^35.1.0",
"convict": "^4.4.1",
"express": "^4.16.3",
"express-ws": "github:dannycoates/express-ws",
"fluent": "^0.12.0",
"fluent-langneg": "^0.1.1",
"configstore": "github:dannycoates/configstore#master",
"convict": "^5.2.0",
"express": "^4.17.1",
"fxa-geodb": "^1.0.4",
"helmet": "^3.17.0",
"helmet": "^3.21.2",
"mkdirp": "^0.5.1",
"mozlog": "^2.2.0",
"node-fetch": "^2.5.0",
"raven": "^2.6.4",
"node-fetch": "^2.6.0",
"redis": "^2.8.0",
"selenium-standalone": "^6.15.6",
"ua-parser-js": "^0.7.19",
"websocket-stream": "^5.5.0"
"ua-parser-js": "^0.7.20"
},
"availableLanguages": [
"en-US",
"ar",
"ast",
"bn-BD",
"be",
"bn",
"br",
"ca",
"cak",
"cs",
@@ -175,9 +180,12 @@
"es-CL",
"es-ES",
"es-MX",
"et",
"eu",
"fi",
"fr",
"fy-NL",
"he",
"hr",
"hsb",
"hu",
@@ -189,21 +197,32 @@
"kab",
"ko",
"lt",
"meh",
"ml",
"nb-NO",
"nl",
"nn-NO",
"oc",
"pa-IN",
"pl",
"ppl",
"pt-BR",
"pt-PT",
"quc",
"ro",
"ru",
"sk",
"sl",
"sq",
"sr",
"su",
"sv-SE",
"te",
"th",
"tr",
"uk",
"vi",
"zgh",
"zh-CN",
"zh-TW"
]

View File

@@ -6,7 +6,7 @@ class TailwindExtractor {
const options = {
plugins: [
require('tailwindcss')('./tailwind.js'),
require('tailwindcss')('./tailwind.config.js'),
require('postcss-preset-env')
]
};

View File

@@ -182,3 +182,5 @@ shareLinkDescription = شارِك الرابط الذي يصل إلى الملف
shareLinkButton = شارِك الرابط
# $name is the name of the file
shareMessage = نزِّل ”{ $name }“ عبر { -send-brand }: خدمة لمشاركة الملفات بلا عناء وبخصوصية تامة
trailheadPromo = يمكنك حماية خصوصيتك، طبعا. انضم إلى فَيَرفُكس.
learnMore = اطّلع على المزيد.

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ş

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

@@ -0,0 +1,164 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Водгук
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 = Выберыце файлы для загрузкі
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 = Падрабязней.

View File

@@ -126,7 +126,7 @@ addPassword = পাসওয়ার্ড দ্বারা সুরক্ষ
emailPlaceholder = আপনার ইমেইল দিন
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = সর্বোচ্চ { $size } আকারের ফাইল প্রেরণ করতে সাইন ইন করুন
signInButton = সাইন ইন/আপ
signInOnlyButton = সাইন ইন
accountBenefitTitle = { -firefox } অ্যাকাউন্ট তৈরি অথবা সাইন ইন করুন
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = সর্বোচ্চ { $size } আকারের ফাইল শেয়ার করুন
@@ -145,3 +145,11 @@ 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 = { -send-brand } এর মাধ্যমে "{ $name }" ডাউনলোড করুন: সরল, নিরাপদ ফাইল শেয়ারিং
trailheadPromo = আপনার গোপনীয়তা রক্ষা করার একটি উপায় আছে। Firefox এ যোগ দিন।
learnMore = আরও জানুন।

182
public/locales/br/send.ftl Normal file
View File

@@ -0,0 +1,182 @@
# 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ñ...
downloadCount =
{ $num ->
[one] { $num } bellgargadenn
[two] { $num } bellgargadenn
[few] { $num } fellgargadenn
[many] { $num } a bellgargadennoù
*[other] { $num } pellgargadenn
}
timespanHours =
{ $num ->
[one] { $num } eur
[two] { $num } eur
[few] { $num } eur
[many] { $num } a eurioù
*[other] { $num } eur
}
copiedUrl = Eilet!
unlockInputPlaceholder = Ger-tremen
unlockButtonLabel = Dibrennañ
downloadButtonLabel = Pellgargañ
downloadFinish = Pellgargadur echu
fileSizeProgress = ({ $partialSize } war { $totalSize })
sendYourFilesLink = Esaeit Firefox Send
errorPageHeader = Degouezhet ez eus bet ur fazi!
fileTooBig = Re vras eo ar restr-mañ evit e pellgas. Rankout a ra bezañ nebeutoc'h eget { $size }
linkExpiredAlt = Ere diamzeret
notSupportedHeader = N'eo ket skoret ho merdeer.
notSupportedLink = Perak n'eo ket skoret ma merdeer?
notSupportedOutdatedDetail = Siwazh n'eo ket skoret ar c'halvezerezhioù implijet evit Firefox Send gant an handelv-mañ eus Firefox. Ret e vo deoc'h hizivaat ho merdeer.
updateFirefox = Hizivaat Firefox
deletePopupCancel = Nullañ
deleteButtonHover = Dilemel
footerLinkLegal = Lezennel
footerLinkPrivacy = Buhez prevez
footerLinkCookies = Toupinoù
passwordTryAgain = Ger-tremen direizh. Klaskit en-dro.
javascriptRequired = Firefox Send a azgoulenn Javascript
whyJavascript = Perak e azgoulenn Firefox Send Javascript?
enableJavascript = Gweredekait Javascript ha klaskit en-dro.
# A short representation of a countdown timer containing the number of hours and minutes remaining as digits, example "13h 47m"
expiresHoursMinutes = { $hours }e { $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 = Hirder brasañ aotreet evit ar ger-tremen: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = N'haller ket despizañ ar ger-tremen
## 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 = Rannañ restroù en un doare eeun ha prevez
introDescription = A-drugarez da { -send-brand } a c'hallit rannañ restroù gant un enrinegañ penn-ouzh-penn hag un ere a ziamzero ent emgefreek. Evel-se e c'hallit mirout ar pezh a rannit prevez ha bezañ sur ne chomo ket ho traoù enlinenn da viken.
notifyUploadEncryptDone = Enrineget eo ho restr ha prest eo da vezañ kaset
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Diamzeriñ a raio goude { $downloadCount } pe { $timespan }
timespanMinutes =
{ $num ->
[one] { $num } vunutenn
[two] { $num } vunutenn
[few] { $num } munutenn
[many] { $num } a vunutennoù
*[other] { $num } munutenn
}
timespanDays =
{ $num ->
[one] { $num } devezh
[two] { $num } zevezh
[few] { $num } devezh
[many] { $num } a zevezhioù
*[other] { $num } devezh
}
timespanWeeks =
{ $num ->
[one] { $num } sizhun
[two] { $num } sizhun
[few] { $num } sizhun
[many] { $num } a sizhunioù
*[other] { $num } sizhun
}
fileCount =
{ $num ->
[one] { $num } restr
[two] { $num } restr
[few] { $num } restr
[many] { $num } a restroù
*[other] { $num } restr
}
# byte abbreviation
bytes = e
# kibibyte abbreviation
kb = Ke
# mebibyte abbreviation
mb = Me
# gibibyte abbreviation
gb = Ge
# 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 = Ment hollek: { $size }
# the next line after the colon contains a file name
copyLinkDescription = Eilit an ere evit rannañ ho restr
copyLinkButton = Eilañ an ere
downloadTitle = Pellgargañ ar restroù
downloadDescription = Dre { -send-brand } eo bet rannet ar restr-mañ, gant un enrinegañ penn-ouzh-penn hag un ere a ziamzer ent emgefreek.
trySendDescription = Esaeit { -send-brand } evit rannañ restroù en un doare eeun ha prevez.
# count will always be > 10
tooManyFiles =
{ $count ->
[one] N'haller pellgas nemet { $count } restr er memes mare.
[two] N'haller pellgas nemet { $count } restr er memes mare.
[few] N'haller pellgas nemet { $count } restr er memes mare.
[many] N'haller pellgas nemet { $count } a restroù er memes mare.
*[other] N'haller pellgas nemet { $count } restr er memes mare.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] Aotreet eo{ $count } diell nemetken.
[two] Aotreet eo{ $count } ziell nemetken.
[few] Aotreet eo{ $count } diell nemetken.
[many] Aotreet eo{ $count } a zielloù nemetken.
*[other] Aotreet eo{ $count } diell nemetken.
}
expiredTitle = Diamzeret eo an ere.
notSupportedDescription = { -send-brand } n'aio ket en-dro war ar merdeer-mañ. { -send-short-brand } a za en-dro gwelloc'h gant handelv diwezhañ { -firefox }, ha mont a raio en-dro gant handelv bremanel lodenn vrasañ ar merdeerioù.
downloadFirefox = Pellgargañ { -firefox }
legalTitle = Evezhiadenn a fed buhez prevez { -send-short-brand }
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
uploadButton = Pellgas
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Riklit ha laoskit restroù
# 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 = pe klikit evit kas betek { $size }
addPassword = Gwareziñ gant ur ger-tremen
emailPlaceholder = Enankit ho chomlec'h postel
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Kennaskit evit kas betek { $size }
signInOnlyButton = Kennaskañ
accountBenefitTitle = Krouit ur gont { -firefox } pe kennaskit
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Rannit restroù betek { $size }
accountBenefitDownloadCount = Rannit restroù gant muioc'h a dud
accountBenefitTimeLimit =
{ $count ->
[one] Dalc'hit an ereoù oberiant e-pad { $count } devezh
[two] Dalc'hit an ereoù oberiant e-pad { $count } zevezh
[few] Dalc'hit an ereoù oberiant e-pad { $count } devezh
[many] Dalc'hit an ereoù oberiant e-pad { $count } a zevezhioù
*[other] Dalc'hit an ereoù oberiant e-pad { $count } devezh
}
accountBenefitSync = Merit ar restroù rannet gant forzh peseurt trevnad
accountBenefitMoz = Gouzout hiroc'h a-zivout gwazerezhioù all { -mozilla }
signOut = Digennaskañ
okButton = Mat eo
downloadingTitle = O pellgargañ
noStreamsWarning = Posupl eo ne vefe ket gouest ar merdeer-mañ da ezrinegañ ur restr ken bras.
noStreamsOptionCopy = Eilit an ere evit digeriñ anezhañ en ur merdeer all
noStreamsOptionFirefox = Esaeit hor merdeer karetañ
noStreamsOptionDownload = Kenderc'hel gant ar merdeer-mañ
downloadFirefoxPromo = { -send-short-brand } a zo kinniget deoc'h gant ar { -firefox } nevez-flamm.
# the next line after the colon contains a file name
shareLinkDescription = Rannit an ere etrezek ho restr:
shareLinkButton = Rannañ an ere
# $name is the name of the file
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.

View File

@@ -151,3 +151,5 @@ 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ó.

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.

View File

@@ -196,5 +196,5 @@ 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.

View File

@@ -187,3 +187,5 @@ shareLinkDescription = Rhannu'r ddolen i'ch ffeil:
shareLinkButton = Rhannu'r ddolen
# $name is the name of the file
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.

View File

@@ -151,3 +151,5 @@ 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.

View File

@@ -169,3 +169,5 @@ shareLinkDescription = Źělśo wótkaz k swójej dataji:
shareLinkButton = Wótkaz źěliś
# $name is the name of the file
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.

View File

@@ -151,3 +151,5 @@ shareLinkDescription = Μοιραστείτε το σύνδεσμο του αρ
shareLinkButton = Κοινή χρήση συνδέσμου
# $name is the name of the file
shareMessage = Λήψη του “{ $name }” με το { -send-brand }: απλός και ασφαλής διαμοιρασμός αρχείων
trailheadPromo = Υπάρχει τρόπος να προστατέψετε το απόρρητό σας. Γίνετε μέλος του Firefox.
learnMore = Μάθετε περισσότερα.

View File

@@ -151,3 +151,5 @@ shareLinkDescription = Share the link to your file:
shareLinkButton = Share link
# $name is the name of the file
shareMessage = Download “{ $name }” with { -send-brand }: simple, safe file sharing
trailheadPromo = There is a way to protect your privacy. Join Firefox.
learnMore = Learn more.

View File

@@ -151,3 +151,5 @@ shareLinkDescription = Compartir el enlace con tu dispositivo:
shareLinkButton = Compartir el enlace
# $name is the name of the file
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.

View File

@@ -151,3 +151,5 @@ shareLinkDescription = Comparte el enlace a tu dispositivo:
shareLinkButton = Compartir enlace
# $name is the name of the file
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.

View File

@@ -151,3 +151,5 @@ shareLinkDescription = Compartir el enlace a tu archivo:
shareLinkButton = Compartir enlace
# $name is the name of the file
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.

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.
@@ -50,10 +50,34 @@ passwordSetError = Pasahitz hau ezin da ezarri
# 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 = 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
@@ -64,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'
@@ -76,8 +124,32 @@ dragAndDropFiles = Arrastatu eta jaregin fitxategiak
orClickWithSize = edo egin klik { $size } arte igotzeko
addPassword = Babestu pasahitzarekin
emailPlaceholder = Idatzi zure helbide elektronikoa
signInButton = Hasi saioa/eman izena
# $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

@@ -1,31 +1,9 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteSubtitle = آزمایش وب
siteFeedback = بازخورد
uploadPageHeader = اشتراک‌گذاری پرونده‌ها، رمزنگاری شده و خصوصی
uploadPageExplainer = پرونده های خود را به صورت ایمن، خصوصی و رمزنگاری شده با تعیین تاریخ انقضا خودکار ارسال کنید تا اطمینان پیدا کنید چیزهای شما همیشه آنلاین باقی نماند.
uploadPageLearnMore = بیشتر بدانید
uploadPageDropMessage = برای شروع بارگذاری پرونده‌های خود را اینجا بیاندازید
uploadPageSizeMessage = برای بیشترین قابلیت اطمینان، بهتر است که پرونده‌تان کمتر از ۱ گیگابایت باشد
uploadPageBrowseButton = یک پرونده را از روی کامپیوتر خود انتخاب کنید
uploadPageBrowseButton1 = یک پرونده را برای بارگذاری انتخاب کنید
uploadPageMultipleFilesAlert = بارگذاری چندین پرونده یا یک پوشه در حال حاضر پشتیبانی نمی‌شود.
uploadPageBrowseButtonTitle = بارگذاری پرونده
uploadingPageProgress = در حال بارگذاری پرونده { $filename } ({ $size })
importingFile = در حال وارد کردن…
verifyingFile = در حال تایید…
encryptingFile = در حال رمزنگاری…
decryptingFile = در حال رمزگشایی…
notifyUploadDone = بارگذاری شما پایان یافت.
uploadingPageMessage = به محض بارگذاری پرونده شما قادر خواهید بود برای آن گزینه انقضا تعیین کنید.
uploadingPageCancel = لغو بارگذاری
uploadCancelNotification = بارگذاری شما لغو شد
uploadingPageLargeFileMessage = پرونده بزرگ است و ممکن است بارگذاری آن مدتی طول بکشد. محکم بشینید!
uploadingFileNotification = هر وقت بارگذاری تمام شد به من اطلاع بده.
uploadSuccessConfirmHeader = آماده برای ارسال
uploadSvgAlt = بارگذاری
uploadSuccessTimingHeader = پیوند به پرونده شما بعد از ۱ بار دانلود یا ۲۴ ساعت حذف خواهد شد.
expireInfo = این پیوند به فایل شما پس از { $downloadCount } یا { $timespan } منقضی خواهد شد.
downloadCount =
{ $num ->
[one] ۱ بارگیری
@@ -36,76 +14,26 @@ timespanHours =
[one] ۱ ساعت
*[other] { $num } ساعت
}
copyUrlFormLabelWithName = برای ارسال پرونده پیوند آن را رونوشت و به اشتراک بگذارید: { $filename }
copyUrlFormButton = رونوشت به کلیپ‌بورد
copiedUrl = رونوشت شد!
deleteFileButton = حذف پرونده
sendAnotherFileLink = ارسال پرونده دیگر
# Alternative text used on the download link/button (indicates an action).
downloadAltText = دریافت
downloadsFileList = دریافت‌ها
# Used as header in a column indicating the amount of time left before a
# download link expires (e.g. "10h 5m")
timeFileList = زمان
# Used as header in a column indicating the number of times a file has been
# downloaded
downloadFileName = بارگیری { $filename }
downloadFileSize = ({ $size })
unlockInputLabel = گذرواژه را وارد کنید
unlockInputPlaceholder = گذرواژه
unlockButtonLabel = باز کردن
downloadFileTitle = دریافت پروندهٔ رمزنگاری شده
# Firefox Send is a brand name and should not be localized.
downloadMessage = دوست شما درحال ارسال پرونده ای به وسیله Firefox Send است،‌ این سرویس این امکان را به شما می‌دهد تا پرونده‌های خود را به صورت ایمن،‌خصوصی و رمزنگاری شده به همراه پیوند انقضا خودکار همرسانی کنید تا اطمینان حاصل کنید چیزهای شما برای همیشه آنلاین باقی نخواهد ماند.
# Text and title used on the download link/button (indicates an action).
downloadButtonLabel = بارگیری
downloadNotification = بارگیری شما کامل شد.
downloadFinish = بارگیری کامل شد
# This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } از { $totalSize })
# Firefox Send is a brand name and should not be localized.
sendYourFilesLink = Firefox Send را امتحان کنید
downloadingPageProgress = دریافت { $filename } ({ $size })
downloadingPageMessage = لطفا این زبانه را باز بگذارید در حالی که ما فایل شما را دریافت می‌کنیم و کدگذاری می‌کنیم.
errorAltText = خطا در بارگذاری
errorPageHeader = چیزی دچار اشکال شده است!
errorPageMessage = خطایی در هنگام بارگذاری پرونده شما رخ داده است.
errorPageLink = پرونده دیگری ارسال کنید.
fileTooBig = این پرونده بسیار حجیم است. حجم آن می‌بایستی کم تر { $size } باشد.
linkExpiredAlt = پیوند منقضی شده است
expiredPageHeader = پیوند منقضی شده است یا در از همان ابتدا وجود نداشته است!
notSupportedHeader = مرورگر شما پشتیبانی نمی‌کند.
# Firefox Send is a brand name and should not be localized.
notSupportedDetail = متاسفانه این مرورگر این تکنولوژی وب را که به Firefox Send قدرت می‌بخشد را پشتیبانی نمی‌کند. شما بایستی مرورگری دیگری را امتحان کنید. پیشنهاد ما به شما فایرفاکس است !
notSupportedLink = چرا مرورگر من پشتیبانی نمی‌کند؟
notSupportedOutdatedDetail = متاسفانه این نسخه از فایرفاکس این تکنولوژی وب که به Firefox Send قدرت می‌بخشد را پشتیبانی نمی‌کند. شما نیاز دارید تا مرورگر خود را بروز کنید.
updateFirefox = بروزرسانی فایرفاکس
downloadFirefoxButtonSub = دریافت رایگان
uploadedFile = پرونده‌
copyFileList = رونوشت از نشانی
# expiryFileList is used as a column header
expiryFileList = زمان انقضا
deleteFileList = حذف
nevermindButton = بیخیال
legalHeader = شرایط و حریم‌خصوصی
legalNoticeTestPilot = Firefox Send در حال حاضر در نسخه آزمایشی خود به صورت می‌دهد و تحت عنوان خلبان آموزشی <a>شرایط و خدمات</a> و <a>موارد حریم خصوصی </a> کار می‌کند. شما می‌توانید اطلاعات بیشتر در مورد این آزمایش و اطلاعات که ذخیره می‌کنید را از <a> اینجا </a> کسب کنید.
legalNoticeMozilla = استفاده از Firefox Send همچنین منصوب به موزیلا است. <a>پایگاه اینترنتی نکات حریم شخصی </a> و <a> پایگاه اطلاع رسانی شرایط خدمات و استفاده </a>.
deletePopupText = حذف این پرونده؟
deletePopupYes = بله
deletePopupCancel = انصراف
deleteButtonHover = حذف
copyUrlHover = رونوشت از نشانی
footerLinkLegal = ملاحظات حقوقی
# Test Pilot is a proper name and should not be localized.
footerLinkAbout = درباره Test Pilot
footerLinkPrivacy = حریم‌خصوصی
footerLinkTerms = شرایط
footerLinkCookies = کوکی‌ها
requirePasswordCheckbox = دریافت این پرونده نیاز به گذرواژه دارد
addPasswordButton = افزودن گذرواژه
changePasswordButton = تغییر
passwordTryAgain = کلمه عبور اشتباه است. مجدد تلاش کنید.
reportIPInfringement = گزارش تخلف IP
javascriptRequired = Firefox Send نیازمند جاوااسکریپت است
whyJavascript = چرا Firefox Send جاوااسکریپت لازم داد؟
enableJavascript = لطفا جاوااسکریپت را فعال کنید و مجددا تلاش کنید.
@@ -113,9 +41,26 @@ enableJavascript = لطفا جاوااسکریپت را فعال کنید و م
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 a password is successfully set
passwordIsSet = گذرواژه تنظیم شد
# 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 = ارسال
-firefox = فایرفاکس
-mozilla = موزیلا
introTitle = اشتراک‌گذاری ساده و خصوصیِ پرونده‌ها
# byte abbreviation
bytes = B
# kibibyte abbreviation
kb = KB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = حجم کل: { $size }

View File

@@ -151,3 +151,5 @@ shareLinkDescription = Jaa linkki tiedostoosi:
shareLinkButton = Jaa linkki
# $name is the name of the file
shareMessage = Lataa tiedosto ”{ $name }” { -send-brand } -palvelusta: yksinkertaista ja turvallista tiedostonjakoa
trailheadPromo = On tapa suojata yksityisyyttään. Liity Firefoxiin.
learnMore = Lue lisää.

View File

@@ -151,3 +151,5 @@ shareLinkDescription = Diel de keppeling nei jo bestân:
shareLinkButton = Keppeling diele
# $name is the name of the file
shareMessage = Download { $name } mei { -send-brand }: ienfâldich, feilich bestannen diele
trailheadPromo = Der is in manier om jo privacy te beskermjen. Doch mei mei Firefox.
learnMore = Mear ynfo.

151
public/locales/gn/send.ftl Normal file
View File

@@ -0,0 +1,151 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Je'ejey
importingFile = Ojegueruhína…
encryptingFile = Mo'ãmby…
decryptingFile = Ñemo'ã'o…
downloadCount =
{ $num ->
[one] 1 mboguejy
*[other] { $num } mboguejy
}
timespanHours =
{ $num ->
[one] 1 aravo
*[other] { $num } aravo
}
copiedUrl = Monguatiapyre!
unlockInputPlaceholder = Ñe'ẽñemi
unlockButtonLabel = Mbojera
downloadButtonLabel = Mboguejy
downloadFinish = Oguejypáma
fileSizeProgress = ({ $partialSize } rehe { $totalSize })
sendYourFilesLink = Eipuru Firefox Send
errorPageHeader = ¡Oiko jejavy!
fileTooBig = Marandurenda tuichaiterei ehupi hag̃ua. Michĩvevaerã { $size } gui.
linkExpiredAlt = Juajuha ndoikóiva
notSupportedHeader = Ne kundaha ndorekói pytyvõ.
notSupportedLink = ¿Mbaére che kundahára ndorekói ñepytyvõ?
updateFirefox = Firefox mbohekopyahu
deletePopupCancel = Heja
deleteButtonHover = Mboguete
footerLinkLegal = Añetegua
footerLinkPrivacy = Ñemigua
footerLinkCookies = Kookie
passwordTryAgain = Ñe'ẽñemi ndoikóiva. Eha'ãjey.
javascriptRequired = Firefox Send oikotevẽ JavaScript
whyJavascript = ¿Mbaére Firefox Send oikotevẽ JavaScript?
enableJavascript = Ikatúpa embojuruja JavaScript ha ehaãjey uperire.
# 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 = Ñeẽñemi pukukue: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = Ndaikatúi oikóvo ko ñe'ẽñemi
## 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 = Marandurenda ñemoambue hasy'ỹ ha ñemiguáva
notifyUploadEncryptDone = Ne marandurenda oñemo'ã ha ikatúma emondo
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Opáta { $downloadCount } rire térã { $timespan }
timespanMinutes =
{ $num ->
[one] 1 aravo'i
*[other] { $num } aravo'i
}
timespanDays =
{ $num ->
[one] 1 ára
*[other] { $num } ára
}
timespanWeeks =
{ $num ->
[one] 1 arapokõindy
*[other] { $num } arapokõindy
}
fileCount =
{ $num ->
[one] 1 marandurenda
*[other] { $num } marandurenda
}
# 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 = Tuichakue: { $size }
# the next line after the colon contains a file name
copyLinkDescription = Emonguatia juajuha ha emoherakuã ne marandurenda:
copyLinkButton = Emonguatia juajuha
downloadTitle = Emboguejy marandurenda
trySendDescription = Eipuru { -send-brand } emoherakuã hag̃ua marandurenda tasyỹ ha tekorosãme.
# count will always be > 10
tooManyFiles =
{ $count ->
[one] Ikatu ehupi 1 marandurenda oñondive
*[other] Ikatu ehupi { $count } marandurenda oñondive
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] Oñemoneĩ 1 marandurenda añoite
*[other] Oñemoneĩ { $count } marandurenda añoite
}
expiredTitle = Ko juajuha ndoikovéima.
downloadFirefox = Emboguejy { -firefox }
legalTitle = { -send-short-brand } Marandu ñemigua
legalDateStamp = Mbaepyahu 1.0, 12 jasyapy 2019 peguare
# 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 = Eiporavo marandurenda ehupi hag̃ua
uploadButton = Hupi
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Embosyryry ha epoi marandurenda
# 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 = térã eikutu emondo hag̃ua { $size } peve
addPassword = Ñeẽñemíme moãmbyre
emailPlaceholder = Emoinge ne ñanduti veve
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Eñepyrũ tembiapo emondo hag̃ua { $size } peve
signInOnlyButton = Eñepyrũ tembiapo
accountBenefitTitle = Emoheñói { -firefox } mbaete térã eñepyrũ tembiapo
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Emoherakuã marandurenda { $size } peve
accountBenefitDownloadCount = Emoherakuã marandurenda hetave tapicha ndive
accountBenefitTimeLimit =
{ $count ->
[one] Eguereko juajuha hendyhápe 1 ára
*[other] Eguereko juajuha hendyhápe { $count } ára
}
accountBenefitSync = Eñangareko marandurenda moherakuãmbyrére oimeraẽ mbaeoka guive.
accountBenefitMoz = Eikuaa ambue { -mozilla } mba'epytyvõrã
signOut = Emboty tembiapo
okButton = OK
downloadingTitle = Oñemboguejyhína
noStreamsWarning = Ikatu ko kundahára ndoikuaái marandurenda tuichaitereíva.
noStreamsOptionCopy = Embokuatia juajuha embojuruja hag̃ua ambue kundahárape.
noStreamsOptionFirefox = Eipuru ore kundahára rohayhuvéva
noStreamsOptionDownload = Ekuejey ko kundahára ndive
downloadFirefoxPromo = Ipyahúva { -firefox } omeẽse ndéve { -send-short-brand }.
# the next line after the colon contains a file name
shareLinkDescription = Emoherakuã juajuha ne mbaeoka ndive:
shareLinkButton = Emoherakuã juajuha
# $name is the name of the file
shareMessage = Emboguejy “{ $name }” { -send-brand } ndive: emoherakuã marandurenda tasy'ỹ ha tekorosãme
trailheadPromo = Mbaéichapa emoãta ne ñemigua. Eipuru Firefox.
learnMore = Kuaave.

View File

@@ -1,66 +1,158 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteSubtitle = ניסוי אינטרנט
siteFeedback = משוב
uploadPageHeader = שיתוף קבצים פרטי, מוצפן
uploadPageExplainer = לשלוח קבצים דרך קישור בטוח, פרטי ומוצפן שפג אוטומטית, כדי לוודא שהתכנים הפרטיים שלך לא יהיו ברשת לנצח.
uploadPageLearnMore = מידע נוסף
uploadPageDropMessage = יש לגרור קבצים לכאן כדי להתחיל בהעלאה
uploadPageSizeMessage = להשגת ביצועים מיטביים, מוטב לשמור על הקובץ מתחת לגודל של 1 ג״ב
uploadPageBrowseButton1 = נא לבחור קובץ להעלאה
uploadPageMultipleFilesAlert = העלאה של מספר קבצים או ספריה אינה נתמכת כרגע.
uploadPageBrowseButtonTitle = העלאת קובץ
uploadingPageProgress = { $filename } ({ $size }) בהעלאה
importingFile = מתבצע ייבוא...
verifyingFile = מתבצע אימות…
importingFile = מתבצע ייבוא…
encryptingFile = מתבצעת הצפנה...
decryptingFile = מתבצע פענוח...
notifyUploadDone = ההעלאה שלך הסתיימה
uploadingPageMessage = אחרי שהקובץ שלך יעלה, ניתן יהיה להגדיר אפשרויות תפוגה.
uploadCancelNotification = ההעלאה שלך בוטלה.
uploadingPageLargeFileMessage = קובץ זה גדול ועלול לקחת זמן להעלות אותו. סבלנות!
uploadingFileNotification = נא להודיע לי כשתסתיים ההעלאה.
uploadSuccessConfirmHeader = מוכן לשליחה
uploadSvgAlt = העלאה
uploadSuccessTimingHeader = הקישור לקובץ שלך יפוג אחרי הורדה אחת או בעוד 24 שעות.
copyUrlFormLabelWithName = ניתן להעתיק ולשתף את הקישור כדי לשלוח את הקובץ שלך: { $filename }
downloadCount =
{ $num ->
[one] הורדה אחת
*[other] { $num } הורדות
}
timespanHours =
{ $num ->
[one] שעה אחת
[two] שעתיים
*[other] { $num } שעות
}
copiedUrl = הועתק!
deleteFileButton = מחיקת קובץ
sendAnotherFileLink = שליחת קובץ נוסף
# Alternative text used on the download link/button (indicates an action).
downloadAltText = הורדה
# Used as header in a column indicating the number of times a file has been
# downloaded
downloadFileName = ההורדה נכשלה
downloadFileSize = ({ $size })
# Text and title used on the download link/button (indicates an action).
unlockInputPlaceholder = ססמה
unlockButtonLabel = שחרור נעילה
downloadButtonLabel = הורדה
downloadNotification = ההורדה הושלמה.
downloadFinish = ההורדה הושלמה
# This message is displayed when uploading or downloading a file, e.g. "(1,3 MB of 10 MB)".
fileSizeProgress = ({ $partialSize } מתוך { $totalSize })
downloadingPageProgress = בהורדה: { $filename } ({ $size })
errorAltText = תקלה בהעלאה
sendYourFilesLink = נסו את Firefox Send
errorPageHeader = משהו השתבש!
errorPageLink = שליחת קובץ נוסף
fileTooBig = הקובץ הזה גדול מידי להעלאה. עליו להיות קטן מ־{ $size }.
linkExpiredAlt = הקישור פג
notSupportedHeader = הדפדפן שלך לא נתמך.
notSupportedLink = למה אין תמיכה בדפדפן שלי?
downloadFirefoxButtonSub = הורדה בחינם
uploadedFile = קובץ
copyFileList = העתקת כתובת
# expiryFileList is used as a column header
expiryFileList = יפוג בעוד
deleteFileList = מחיקה
nevermindButton = לא משנה
legalHeader = תנאי שירות ופרטיות
deletePopupText = למחוק דף זה?
deletePopupYes = כן
notSupportedOutdatedDetail = לצערנו גרסת Firefox זו לא תומכת בטכנולוגית הרשת שמפעילה את Firefox Send. יש לעדכן את הגרסה של הדפדפן שלך.
updateFirefox = עדכון Firefox
deletePopupCancel = ביטול
deleteButtonHover = מחיקה
copyUrlHover = העתקת קישור
footerLinkLegal = מידע משפטי
footerLinkPrivacy = פרטיות
footerLinkTerms = תנאי שימוש
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] דקה אחת
*[other] { $num } דקות
}
timespanDays =
{ $num ->
[one] יום אחד
[two] יומיים
*[other] { $num } ימים
}
timespanWeeks =
{ $num ->
[one] שבוע אחד
[two] שבועיים
*[other] { $num } שבועות
}
fileCount =
{ $num ->
[one] קובץ אחד
*[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] ניתן להעלות רק קובץ אחד בכל פעם.
*[other] ניתן להעלות רק { $count } קבצים בכל פעם.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] רק ארכיון אחד מורשה.
*[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] שמירה על קישורים פעילים עד ליום אחד
*[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

@@ -160,3 +160,5 @@ shareLinkDescription = Dijelite poveznicu na svoju datoteku:
shareLinkButton = Dijeli poveznicu
# $name is the name of the file
shareMessage = Preuzmite “{ $name }” sa { -send-brand }: jednostavno i sigurno dijeljenje datoteka
trailheadPromo = Postoji način da zaštitite svoju privatnost. Pridružite se Firefoxu.
learnMore = Saznajte više.

View File

@@ -169,3 +169,5 @@ shareLinkDescription = Dźělće wotkaz k swojej dataji:
shareLinkButton = Wotkaz dźělić
# $name is the name of the file
shareMessage = Sćehńće „{ $name }“ z { -send-brand }: jednore, wěste dźělenje datajow
trailheadPromo = Je móžnosć, wašu priwatnosć škitać. Přińdźće k Firefox.
learnMore = Dalše informacije.

View File

@@ -151,3 +151,5 @@ shareLinkDescription = Ossza meg a fájlja hivatkozását:
shareLinkButton = Hivatkozás megosztása
# $name is the name of the file
shareMessage = „{ $name }” letöltése a { -send-brand } segítségével: egyszerű, biztonságos fájlmegosztás
trailheadPromo = Védje meg a magánszféráját. Csatlakozzon a Firefoxhoz.
learnMore = További tudnivalók.

View File

@@ -26,7 +26,7 @@ fileTooBig = Iste file es troppo grande pro lo cargar. Illo debe ser inferior a
linkExpiredAlt = Ligamine expirate
notSupportedHeader = Tu navigator non es supportate
notSupportedLink = Perque iste navigator non es supportate?
notSupportedOutdatedDetail = Infelicemente iste version de Firefox non supporta le nove technologias web que move Firefox Send. Tu besonia de actualisar tu navigator.
notSupportedOutdatedDetail = Infelicemente iste version de Firefox non supporta le nove technologia web que actiona Firefox Send. Tu debe actualisar tu navigator.
updateFirefox = Actualisar Firefox
deletePopupCancel = Cancellar
deleteButtonHover = Deler
@@ -44,7 +44,7 @@ expiresMinutes = { $minutes }m
# A short status message shown when the user enters a long password
maxPasswordLength = Maxime longor del contrasigno: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = Iste contrasigno non pote ser definite
passwordSetError = Iste contrasigno non ha potite esser establite
## Send version 2 strings
@@ -123,10 +123,10 @@ dragAndDropFiles = Traher e deponer files
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = o cliccar pro inviar usque { $size }
addPassword = Proteger per contrasigno
emailPlaceholder = Insere tu adresse email
emailPlaceholder = Insere tu adresse de e-mail
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Accede pro inviar usque { $size }
signInOnlyButton = Authentica te
signInSizeBump = Aperi session pro inviar usque a { $size }
signInOnlyButton = Aperir session
accountBenefitTitle = Crea un conto { -firefox } o registra te
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Comparti files usque { $size }
@@ -136,9 +136,9 @@ accountBenefitTimeLimit =
[one] Retene active le ligamine pro 1 die
*[other] Retene active le ligamine pro { $count } dies
}
accountBenefitSync = Gere files compartite ab ulle apparato
accountBenefitSync = Gere files compartite ab non importa qual dispositivo
accountBenefitMoz = Discoperi altere servicios de { -mozilla }
signOut = Disconnecter
signOut = Clauder session
okButton = OK
downloadingTitle = Discargamento
noStreamsWarning = Iste navigator pote non pote decifrar un file assi grande.

View File

@@ -142,3 +142,5 @@ shareLinkDescription = Bagikan tautan ke berkas Anda:
shareLinkButton = Bagikan tautan
# $name is the name of the file
shareMessage = Unduh "{ $name }" dengan { -send-brand }: berbagi berkas dengan sederhana dan aman
trailheadPromo = Ada cara untuk melindungi privasi Anda. Bergabunglah dengan Firefox.
learnMore = Pelajari lebih lanjut.

View File

@@ -0,0 +1,26 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Aq'a yol sti'
importingFile = Eq'otzan
encryptingFile = La muj isik'lele
decryptingFile = Ni jaj ve't isik'lele'
downloadCount =
{ $num ->
[one] Eq'omal ku'tzan
*[other] { $num } Eq'omalaj ku'tzan
}
timespanHours =
{ $num ->
[one] 1 Ch'ich'
*[other] { $num } Nimalaj ch'ich'
}
copiedUrl = Eesamal ivatz!
unlockInputPlaceholder = Kach'ub'al
unlockButtonLabel = Eesa ikach'ub'al
downloadButtonLabel = Eq'o ku'tzan
downloadFinish = Eq'o ku'tzan kaajayil
fileSizeProgress = ({ $partialSize }tetz{ $totalSize })
sendYourFilesLink = B'anb'e ve't u Firefox Send
## Send version 2 strings

View File

@@ -135,8 +135,11 @@ downloadingTitle = ダウンロード中
noStreamsWarning = このブラウザーは、この大きさのファイルを復号化できません。
noStreamsOptionCopy = リンクをコピーして他のブラウザーで開いてください
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 = { -send-brand } で "{ $name }" をダウンロード: シンプルで安全なファイル共有
trailheadPromo = プライバシーを保護する方法があります。Firefox を試してください。
learnMore = 詳細情報

View File

@@ -54,6 +54,10 @@ passwordSetError = Awal-agi uffir ur izmir ara ad ittwabaded
-firefox = Firefox
-mozilla = Mozilla
introTitle = Afessas, beṭṭu n ifuyla s wudem uslig
introDescription = { -send-brand } ad k(kem)-yeǧǧ ad tebḍuḍ ifuyla iwgelhanensi ṭṭerf ɣer ṭṭerf akked useɣwen ara yemmten s wudem awurman. Daɣen, ad tizmireḍ ad tḥ€rzeḍ ayen i tbeṭṭuḍ s wudem uslig daɣen ad temneḍ imi agbur-ik ur yettɣimi ara srid i lebda.
notifyUploadEncryptDone = Afaylu-ik yewgelhen daɣen ihegga i tuzna
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Ad yemmet deffir { $downloadCount } neɣ { $timespan }
timespanMinutes =
{ $num ->
[one] 1 n tsedat
@@ -90,17 +94,62 @@ totalSize = Tuɣzi s umata: { $size }
copyLinkDescription = Nɣel aseɣwen akken ad tebḍuḍ afaylu-inek
copyLinkButton = Nɣel aseɣwen
downloadTitle = Sider ifuyla
downloadDescription = Afaylu-a yettwabḍa s { -send-brand } s uwgelhen s ṭṭerf ɣer ṭṭerf s useɣwen ara yemmten s wudem awurman.
trySendDescription = Ɛreḍ { -send-brand } i beḍḍu afessas n ifuyla s wudem ameɣtu.
# count will always be > 10
tooManyFiles =
{ $count ->
[one] Ala 1 n ufaylu i yemzren ad yali i tikkelt.
*[other] Ala { $count } n yifuyla i yemzren ad alin i tikkelt.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] Ala 1 n teṛcibt i yettwasirgen.
*[other] Ala { $count } n teṛcibin i yettwasiregn.
}
expiredTitle = Immut useɣwen.
notSupportedDescription = { -send-brand } ur iteddu ara s yiminig-a. { -send-short-brand } iteddu akken iwata s lqem aneggaru n { -firefox }, daɣen iteddu s lqem amiran n tuget n yiminigen.
downloadFirefox = Sider { -firefox }
legalTitle = Tasertit tabaḍnit n { -send-short-brand }
legalDateStamp = Lqem 1.0, azemz n 12 Meɣres 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 } ass { $hours } srg { $minutes } tsd
addFilesButton = Fren ifuyla ad tessaliḍ
uploadButton = Sali
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Ẓuɣer sakin sers ifuyla
# 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 = neɣ sit akken ad tazneḍ arma d { $size }
addPassword = Ḥrez s wawal uffir
emailPlaceholder = Sekcem imayl inek
signInButton = Kcem/jerred
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Qqen akken ad tazneḍ arma d { $size }
signInOnlyButton = Qqen
accountBenefitTitle = Rnu amiḍan { -firefox } akken ad teqqneḍ
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Bḍu ifuyla arma d { $size }
accountBenefitDownloadCount = Bḍu ifuyla d wugan n medden
accountBenefitTimeLimit =
{ $count ->
[one] Eǧǧ iseɣwan d urmiden arma d 1 n wass
*[other] Eǧǧ iseɣwan d urmiden arma d { $count } n wassan
}
accountBenefitSync = Sefrek ifuyla yebdan seg yal ibenk
accountBenefitMoz = Issin ugar ɣef yimeẓla-nniḍen n { -mozilla }
signOut = Ffeɣ
okButton = IH
downloadingTitle = Azdam
noStreamsWarning = Iminig-a ur yezmir ara ad yezmek afaylu meqqren.
noStreamsOptionCopy = Nɣel aseɣwen i tulya deg yiminig-nniden
noStreamsOptionFirefox = Ɛreḍ iminig-ik ufrin
noStreamsOptionDownload = Kemmel akked iminig-a
downloadFirefoxPromo = { -send-short-brand } yettwasumer i yal { -firefox } amaynut.
# the next line after the colon contains a file name
shareLinkDescription = Bḍu aseɣwen ɣer ufaylu-ik:
shareLinkButton = Bḍu aseɣwen
# $name is the name of the file
shareMessage = Sider "{ $name }" s { -send-brand }: d fessas, d aɣelsan i beṭṭu n yifuyla.
trailheadPromo = Yella wallal n ummesten n tudert-ik tusligt. Ddu ɣer Firefox.
learnMore = Issin ugar.

View File

@@ -4,8 +4,8 @@ siteFeedback = 사용자 의견
importingFile = 가져오는 중…
encryptingFile = 암호화 중…
decryptingFile = 복호화 중…
downloadCount = { $num } 다운로드
timespanHours = 1 시간
downloadCount = 다운로드 { $num }
timespanHours = { $num }시간
copiedUrl = 복사 완료!
unlockInputPlaceholder = 비밀번호
unlockButtonLabel = 잠금 해제
@@ -49,7 +49,7 @@ 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 } 후 만료됨
archiveExpiryInfo = { $downloadCount } 혹은 { $timespan } 후 만료됨
timespanMinutes =
{ $num ->
*[other] { $num }분
@@ -112,7 +112,7 @@ addPassword = 비밀번호로 파일 보호
emailPlaceholder = 이메일 입력
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = { $size }까지 파일을 보낼 수 있게 로그인
signInButton = 로그인/등록
signInOnlyButton = 로그인
accountBenefitTitle = { -firefox } 계정을 하나 만들거나, 로그인
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = { $size }까지의 파일 공유
@@ -130,3 +130,11 @@ noStreamsWarning = 이 브라우저는 이렇게 큰 용량의 파일 암호화
noStreamsOptionCopy = 다른 브라우저에서 열 수 있도록 링크를 복사
noStreamsOptionFirefox = 우리가 애용하는 브라우저를 사용해 보세요
noStreamsOptionDownload = 이 브라우저로 계속하기
downloadFirefoxPromo = 완전히 새로운 { -firefox }로 { -send-short-brand }가 제공됩니다.
# the next line after the colon contains a file name
shareLinkDescription = 파일 링크 공유:
shareLinkButton = 링크 공유
# $name is the name of the file
shareMessage = { -send-brand }으로 “{ $name }” 파일을 내려받으세요: 쉽고 안전한 파일 공유입니다.
trailheadPromo = 개인 정보를 보호하는 방법이 있습니다. 파이어폭스와 함께 하세요.
learnMore = 자세히 알아보기

View File

@@ -168,3 +168,5 @@ shareLinkDescription = Pasidalinkite saitu į jūsų failą:
shareLinkButton = Dalintis saitu
# $name is the name of the file
shareMessage = Atsisiųskite „{ $name }“ su „{ -send-brand }“: paprastas, saugus dalinimasis failais
trailheadPromo = Yra būdas apsaugoti jūsų privatumą. Naudokite „Firefox“.
learnMore = Sužinoti daugiau.

154
public/locales/meh/send.ftl Normal file
View File

@@ -0,0 +1,154 @@
# Firefox Send is a brand name and should not be localized.
title = Firefox Send
siteFeedback = Tu'un jianininu
importingFile = Nasia´a…
encryptingFile = Encriptando...
decryptingFile = Desencriptando…
downloadCount =
{ $num ->
*[other] { $num } nxinuun
}
timespanHours =
{ $num ->
[one] 1 hora
*[other] { $num } horas
}
copiedUrl = Ntɨɨn
unlockInputPlaceholder = Contraseña
unlockButtonLabel = Nkasɨ
downloadButtonLabel = Xinuu
downloadFinish = Nnɨ´ɨ xinuu
fileSizeProgress = ({ $partialSize } de { $totalSize })
sendYourFilesLink = Ni´i Firefox Send
errorPageHeader = ¡Iyo iin ntu nkene va´a!
fileTooBig = Archivo ya´a ka´nu. Nejia chunku´va { $size }
linkExpiredAlt = Nnɨ´ɨ enlace
notSupportedHeader = Ntu íyo tiñu nuu ka̱a̱ nánuku ya´a.
notSupportedLink = ¿Navi ntu satiñu nuu ka̱a̱ nánuku ya´a?
notSupportedOutdatedDetail = Tuni Firefox ya´a ntu satiñu vii jii Firefox Send. Nejika xinunu a jíía ka̱a̱ nánuku.
updateFirefox = Naxi´ñá Firefox
deletePopupCancel = Nkuvi-ka
deleteButtonHover = Xita
footerLinkLegal = Tu´un nichi
footerLinkPrivacy = Tu´un xitu a kumiji noo´o
footerLinkCookies = Cookies
passwordTryAgain = Contraseña ntu vatu. Nachu´un tuku.
javascriptRequired = Firefox Send ni´i JavaScript
whyJavascript = ¿Navi Firefox Send ni´i JavaScript?
enableJavascript = Kua´a jia´a JavaScript jee nachu´un tuku.
# 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 = Naja ka´nu koo contraseña: { $length }
# A short status message shown when there was an error setting the password
passwordSetError = Ntu nkuvi sá´á contraseña
## Send version 2 strings
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
-send-brand = Firefox Send
-send-short-brand = Send
-firefox = Firefox
-mozilla = Mozilla
introTitle = Kua´a daa archivo ñama jee yu´u
introDescription = { -send-brand } taji jia´anu archivos jii cifrado uvi nuu jee iin enlace nɨ´ɨ. Sukuan kuvi kumi yu´unu daa archivo jia´anu jee kuninu nkino daa ya´a kue´e kuiya íchi nuu.
notifyUploadEncryptDone = Archivo noo´o íyo cifrado jee kuvi chu´un íchi
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Nɨ'ɨ dee nña´a { $downloadCount } a xiin { $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 archivo
*[other] { $num } archivos
}
# byte abbreviation
bytes = B
# kibibyte abbreviation
kb = KB
# mebibyte abbreviation
mb = MB
# gibibyte abbreviation
gb = GB
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Ka´nu: { $size }
# the next line after the colon contains a file name
copyLinkDescription = Tɨɨn enlace jee kua´a archivo:
copyLinkButton = Tɨɨn enlacae
downloadTitle = Xinuu archivo
downloadDescription = Archivo ya´a nsajia { -send-brand } jíí cifrado punto a punto jee iin enlace naa.
trySendDescription = Nasá´á jii { -send-brand } kua´a ñama jee vatu.
# count will always be > 10
tooManyFiles =
{ $count ->
[one] Ntuxini 1 archivo kuvi ska.
*[other] Ntuxini { $count } archivos kuvi ska.
}
# count will always be > 10
tooManyArchives =
{ $count ->
[one] Ntu xini 1 archivo íyo
*[other] Ntu xini { $count } archivos íyo
}
expiredTitle = Nnɨ'ɨ link ya´a.
notSupportedDescription = { -send-brand } nsatiñu jii ka̱a̱ nánuku ya´a. { -send-short-brand } satiñu va´a jii tuni íchi yata { -firefox }, jee satiñu va´a jii tuni íyo ntañu´u kuaiyo daa ka̱a̱ nánuku.
downloadFirefox = Xinuun { -firefox }
legalTitle = Tu´un xitu a kumiji noo´o { -send-short-brand }
legalDateStamp = Versión 1.0 del 12 de marzo de 2019
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
addFilesButton = Kaji archivos ska
uploadButton = Ska
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Staka jee sía daa archivo
# 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 = a xiin kuaxin saa chu´un íchi nee { $size }
addPassword = Iyo yu´u jii contraseña
emailPlaceholder = Chu´un email noo´o
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
signInSizeBump = Kajie´e sesión saa chu´un íchi nee { $size }
signInOnlyButton = Kajie´e sesión
accountBenefitTitle = Sá´á iin cuenta { -firefox } a xiin kajie´e sesión
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
accountBenefitLargeFiles = Kua´a archivo ka´nu { $size }
accountBenefitDownloadCount = Kua´a archivos jii inka ñivɨ
accountBenefitTimeLimit =
{ $count ->
[one] Kuteku enlaces 1 kivɨ
*[other] Kuteku daa enlaces { $count } kivɨ
}
accountBenefitSync = Tetiñu archivos jia´anu ntaka ka̱a̱
accountBenefitMoz = Ka´vi kue´eka jiee inka tiñu { -mozilla }
signOut = Kasɨ sesión
okButton = Kuvi
downloadingTitle = Xinuu
noStreamsWarning = Kuvi ka̱a̱ nánaku ya´a nxituvi a vaji nuu iin archivo ka´nu.
noStreamsOptionCopy = Tɨɨn enlace jee síne nuu inka ka̱a̱ nánuku
noStreamsOptionFirefox = Ni´i ka̱a̱ nánuku va´a
noStreamsOptionDownload = Kaka jii ka̱a̱ nánuku ya´a
downloadFirefoxPromo = { -send-short-brand } taji jíía { -firefox }.
# the next line after the colon contains a file name
shareLinkDescription = Kua´a enlace archivo noo´o
shareLinkButton = Kua´a link
# $name is the name of the file
shareMessage = Xinuu “{ $name }” jii { -send-brand }: ntu viji
trailheadPromo = Iyo iin kuvi kumi privacidad noo´o. Nayonika Firefox.
learnMore = Ka´vi kue´eka

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