Compare commits

..

2272 commits

Author SHA1 Message Date
Mouse Reeve
6f1d5da43d New translations django.po (German) 2022-06-19 03:11:35 -07:00
Mouse Reeve
16f5832540 New translations django.po (German) 2022-06-18 03:09:33 -07:00
Mouse Reeve
491fac2938 New translations django.po (German) 2022-06-16 15:00:58 -07:00
Mouse Reeve
b68d32d4e2 New translations django.po (Russian) 2022-06-13 23:35:06 -07:00
Mouse Reeve
0de7815b4c New translations django.po (Japanese) 2022-06-13 22:27:32 -07:00
Mouse Reeve
ff12102d6f New translations django.po (German) 2022-06-13 07:15:42 -07:00
Mouse Reeve
5e655980e7 New translations django.po (German) 2022-06-13 06:14:04 -07:00
Mouse Reeve
b9b94a814f New translations django.po (Japanese) 2022-06-13 03:14:15 -07:00
Mouse Reeve
d71ee1f012 New translations django.po (Japanese) 2022-06-13 02:09:21 -07:00
Mouse Reeve
cad9a76c8a New translations django.po (Japanese) 2022-06-12 19:16:28 -07:00
Mouse Reeve
1c9e8aee73 New translations django.po (Japanese) 2022-06-12 18:20:46 -07:00
Mouse Reeve
f9b3ed57ee New translations django.po (Japanese) 2022-06-12 17:19:05 -07:00
Mouse Reeve
46cef3a16f New translations django.po (French) 2022-06-10 10:57:04 -07:00
Mouse Reeve
371f6f0051 New translations django.po (Polish) 2022-06-09 06:59:57 -07:00
Mouse Reeve
8bebfd369a New translations django.po (Polish) 2022-06-09 06:02:28 -07:00
Mouse Reeve
668a36a749 New translations django.po (Finnish) 2022-06-01 02:05:25 -07:00
Mouse Reeve
a3ec61a8a8 New translations django.po (Galician) 2022-05-31 21:46:31 -07:00
Mouse Reeve
7ce531f568 New translations django.po (Eastern Min) 2022-05-31 17:55:56 -07:00
Mouse Reeve
86b31f26e7 New translations django.po (Hungarian) 2022-05-31 17:55:55 -07:00
Mouse Reeve
7080732064 New translations django.po (Hebrew) 2022-05-31 17:55:53 -07:00
Mouse Reeve
0f0c7a704e New translations django.po (Finnish) 2022-05-31 17:55:52 -07:00
Mouse Reeve
83bbdeba1b New translations django.po (Basque) 2022-05-31 17:55:50 -07:00
Mouse Reeve
937cc79234 New translations django.po (Greek) 2022-05-31 17:55:49 -07:00
Mouse Reeve
69242e7ebc New translations django.po (German) 2022-05-31 17:55:47 -07:00
Mouse Reeve
14a0ba92ba New translations django.po (Italian) 2022-05-31 17:55:46 -07:00
Mouse Reeve
92a311e766 New translations django.po (Danish) 2022-05-31 17:55:45 -07:00
Mouse Reeve
5c42cfd5eb New translations django.po (Catalan) 2022-05-31 17:55:44 -07:00
Mouse Reeve
9afa8db4e7 New translations django.po (Arabic) 2022-05-31 17:55:43 -07:00
Mouse Reeve
cd4bd71e6d New translations django.po (Afrikaans) 2022-05-31 17:55:42 -07:00
Mouse Reeve
7ffa5b50e0 New translations django.po (Spanish) 2022-05-31 17:55:40 -07:00
Mouse Reeve
d973a80c4b New translations django.po (French) 2022-05-31 17:55:39 -07:00
Mouse Reeve
eecc76efeb New translations django.po (Polish) 2022-05-31 17:55:38 -07:00
Mouse Reeve
0589df6685 New translations django.po (Czech) 2022-05-31 17:55:37 -07:00
Mouse Reeve
9bd3e5bfa6 New translations django.po (Oulipo) 2022-05-31 17:55:36 -07:00
Mouse Reeve
e3e84fa7c9 New translations django.po (Japanese) 2022-05-31 17:55:34 -07:00
Mouse Reeve
5131a66552 New translations django.po (Lithuanian) 2022-05-31 17:55:33 -07:00
Mouse Reeve
7ac6c2ed5e New translations django.po (Welsh) 2022-05-31 17:55:32 -07:00
Mouse Reeve
d2d0658f8d New translations django.po (Portuguese, Brazilian) 2022-05-31 17:55:31 -07:00
Mouse Reeve
95bcde4e33 New translations django.po (Galician) 2022-05-31 17:55:29 -07:00
Mouse Reeve
508dfebcfc New translations django.po (Vietnamese) 2022-05-31 17:55:28 -07:00
Mouse Reeve
aa68e8ac5b New translations django.po (Chinese Traditional) 2022-05-31 17:55:27 -07:00
Mouse Reeve
d4e74fd345 New translations django.po (Chinese Simplified) 2022-05-31 17:55:26 -07:00
Mouse Reeve
778ae71848 New translations django.po (Korean) 2022-05-31 17:55:24 -07:00
Mouse Reeve
857de4c175 New translations django.po (Ukrainian) 2022-05-31 17:55:23 -07:00
Mouse Reeve
923ab238fc New translations django.po (Swedish) 2022-05-31 17:55:22 -07:00
Mouse Reeve
bf5cde52bc New translations django.po (Serbian (Cyrillic)) 2022-05-31 17:55:20 -07:00
Mouse Reeve
5900b01df6 New translations django.po (Russian) 2022-05-31 17:55:18 -07:00
Mouse Reeve
5d9ce5561d New translations django.po (Portuguese) 2022-05-31 17:55:17 -07:00
Mouse Reeve
07d2b849f3 New translations django.po (Norwegian) 2022-05-31 17:55:16 -07:00
Mouse Reeve
0ac84cb838 New translations django.po (Dutch) 2022-05-31 17:55:15 -07:00
Mouse Reeve
7158885ea6 New translations django.po (Turkish) 2022-05-31 17:55:14 -07:00
Mouse Reeve
239c4f8476 New translations django.po (Romanian) 2022-05-31 17:55:12 -07:00
Mouse Reeve
e519870dc6 New translations django.po (Eastern Min) 2022-05-23 18:06:50 -07:00
Mouse Reeve
5bccee0cf5 New translations django.po (Hungarian) 2022-05-23 18:06:49 -07:00
Mouse Reeve
28bd30c303 New translations django.po (Hebrew) 2022-05-23 18:06:47 -07:00
Mouse Reeve
9395027e4c New translations django.po (Finnish) 2022-05-23 18:06:46 -07:00
Mouse Reeve
965b1189c6 New translations django.po (Basque) 2022-05-23 18:06:45 -07:00
Mouse Reeve
c834e4dfae New translations django.po (Greek) 2022-05-23 18:06:44 -07:00
Mouse Reeve
a12b2ea313 New translations django.po (German) 2022-05-23 18:06:42 -07:00
Mouse Reeve
299bc7f67d New translations django.po (Italian) 2022-05-23 18:06:41 -07:00
Mouse Reeve
921f20333f New translations django.po (Danish) 2022-05-23 18:06:40 -07:00
Mouse Reeve
094d280e1c New translations django.po (Catalan) 2022-05-23 18:06:39 -07:00
Mouse Reeve
7e1fbaa94f New translations django.po (Arabic) 2022-05-23 18:06:38 -07:00
Mouse Reeve
fe76ee16e5 New translations django.po (Afrikaans) 2022-05-23 18:06:36 -07:00
Mouse Reeve
8454b8fc92 New translations django.po (Spanish) 2022-05-23 18:06:35 -07:00
Mouse Reeve
9d7e1cc0a8 New translations django.po (French) 2022-05-23 18:06:34 -07:00
Mouse Reeve
11e577e464 New translations django.po (Polish) 2022-05-23 18:06:33 -07:00
Mouse Reeve
709f2d4fdd New translations django.po (Czech) 2022-05-23 18:06:32 -07:00
Mouse Reeve
3110f76ce7 New translations django.po (Oulipo) 2022-05-23 18:06:30 -07:00
Mouse Reeve
c9ba37eead New translations django.po (Japanese) 2022-05-23 18:06:29 -07:00
Mouse Reeve
1469ec3768 New translations django.po (Lithuanian) 2022-05-23 18:06:28 -07:00
Mouse Reeve
9b4b67c556 New translations django.po (Welsh) 2022-05-23 18:06:27 -07:00
Mouse Reeve
9f1422128b New translations django.po (Portuguese, Brazilian) 2022-05-23 18:06:25 -07:00
Mouse Reeve
d0fd4b7c18 New translations django.po (Galician) 2022-05-23 18:06:24 -07:00
Mouse Reeve
c0fc542359 New translations django.po (Vietnamese) 2022-05-23 18:06:23 -07:00
Mouse Reeve
f6a545597a New translations django.po (Chinese Traditional) 2022-05-23 18:06:21 -07:00
Mouse Reeve
9be834118c New translations django.po (Chinese Simplified) 2022-05-23 18:06:20 -07:00
Mouse Reeve
9d695886ad New translations django.po (Korean) 2022-05-23 18:06:19 -07:00
Mouse Reeve
a2cb1837b2 New translations django.po (Ukrainian) 2022-05-23 18:06:18 -07:00
Mouse Reeve
48606912cb New translations django.po (Swedish) 2022-05-23 18:06:16 -07:00
Mouse Reeve
f8746b012a New translations django.po (Serbian (Cyrillic)) 2022-05-23 18:06:15 -07:00
Mouse Reeve
d1e5de2399 New translations django.po (Russian) 2022-05-23 18:06:14 -07:00
Mouse Reeve
d3bf6670b7 New translations django.po (Portuguese) 2022-05-23 18:06:12 -07:00
Mouse Reeve
48cfe281f7 New translations django.po (Norwegian) 2022-05-23 18:06:11 -07:00
Mouse Reeve
e4ba5c9249 New translations django.po (Dutch) 2022-05-23 18:06:10 -07:00
Mouse Reeve
2449a5c00d New translations django.po (Turkish) 2022-05-23 18:06:09 -07:00
Mouse Reeve
cd66c810a8 New translations django.po (Romanian) 2022-05-23 18:06:07 -07:00
Mouse Reeve
e6903e8fd8 New translations django.po (Polish) 2022-05-18 05:14:55 -07:00
Mouse Reeve
e9bd4d9756 New translations django.po (Polish) 2022-05-18 04:08:34 -07:00
Mouse Reeve
c68a0b2f82 New translations django.po (Romanian) 2022-05-16 14:13:27 -07:00
Mouse Reeve
1e333892e1 New translations django.po (Polish) 2022-05-16 11:44:45 -07:00
Mouse Reeve
ac9a41bc33 New translations django.po (Romanian) 2022-05-14 05:42:29 -07:00
Mouse Reeve
bdf4ec00dc New translations django.po (Romanian) 2022-05-14 04:42:29 -07:00
Mouse Reeve
fcb3bd663d New translations django.po (Romanian) 2022-05-14 03:43:12 -07:00
Mouse Reeve
725e77f229 New translations django.po (Catalan) 2022-05-07 16:40:05 -07:00
Mouse Reeve
41a8718f4a New translations django.po (Catalan) 2022-05-07 15:41:01 -07:00
Mouse Reeve
988c5c7488 New translations django.po (Finnish) 2022-05-07 07:54:46 -07:00
Mouse Reeve
0370b98684 New translations django.po (Portuguese) 2022-05-06 16:27:32 -07:00
Mouse Reeve
df44356c66 New translations django.po (Portuguese) 2022-05-06 15:27:21 -07:00
Mouse Reeve
8884336b96 New translations django.po (Portuguese) 2022-05-06 12:20:10 -07:00
Mouse Reeve
438c8604a7 New translations django.po (Portuguese) 2022-05-06 11:20:37 -07:00
Mouse Reeve
29ecbce4d6 New translations django.po (Polish) 2022-05-01 01:11:04 -07:00
Mouse Reeve
cf24b943cd New translations django.po (Polish) 2022-05-01 00:14:27 -07:00
Mouse Reeve
e12665e135 New translations django.po (German) 2022-04-30 06:02:24 -07:00
Mouse Reeve
af4f3414ed New translations django.po (Spanish) 2022-04-30 03:04:51 -07:00
Mouse Reeve
4f56151caf New translations django.po (Spanish) 2022-04-30 02:06:34 -07:00
Mouse Reeve
544a5afb81 New translations django.po (Polish) 2022-04-29 10:05:41 -07:00
Mouse Reeve
842b24ff39 New translations django.po (Polish) 2022-04-29 08:51:48 -07:00
Mouse Reeve
57006e0aa0 New translations django.po (Chinese Simplified) 2022-04-29 07:20:47 -07:00
Mouse Reeve
63b2b9a2c1 New translations django.po (Polish) 2022-04-29 05:32:15 -07:00
Mouse Reeve
f0e62cc9fe New translations django.po (Chinese Simplified) 2022-04-29 04:25:33 -07:00
Mouse Reeve
7d3ed2e7a3 New translations django.po (Polish) 2022-04-29 01:55:25 -07:00
Mouse Reeve
299409e1aa New translations django.po (Polish) 2022-04-29 00:31:08 -07:00
Mouse Reeve
a46327b6b2 New translations django.po (Polish) 2022-04-28 07:56:03 -07:00
Mouse Reeve
1f15e2b96d New translations django.po (Polish) 2022-04-28 06:46:52 -07:00
Mouse Reeve
c75a79c53d New translations django.po (Spanish) 2022-04-26 10:25:58 -07:00
Mouse Reeve
5f6751050a New translations django.po (Spanish) 2022-04-26 09:26:08 -07:00
Mouse Reeve
e4e098c9dc New translations django.po (Spanish) 2022-04-26 04:37:52 -07:00
Mouse Reeve
3e99892c8a New translations django.po (Spanish) 2022-04-26 03:36:29 -07:00
Mouse Reeve
213f58608e New translations django.po (Spanish) 2022-04-25 13:28:56 -07:00
Mouse Reeve
4c9dfdaa6d New translations django.po (Spanish) 2022-04-25 12:20:44 -07:00
Mouse Reeve
4d28203c38 New translations django.po (Italian) 2022-04-20 15:49:59 -07:00
Mouse Reeve
3333cd244c New translations django.po (Catalan) 2022-04-13 00:35:09 -07:00
Mouse Reeve
49bf4872ca New translations django.po (Welsh) 2022-04-12 09:32:48 -07:00
Mouse Reeve
bb8c80beee New translations django.po (Welsh) 2022-04-12 08:29:32 -07:00
Mouse Reeve
b2bc9a976a New translations django.po (Russian) 2022-04-12 03:03:05 -07:00
Mouse Reeve
3179852067 New translations django.po (Russian) 2022-04-12 01:38:14 -07:00
Mouse Reeve
9745fd1382 New translations django.po (Catalan) 2022-04-11 13:03:45 -07:00
Mouse Reeve
c12f6b131d New translations django.po (Russian) 2022-04-11 12:05:35 -07:00
Mouse Reeve
18b69e8b1b New translations django.po (Catalan) 2022-04-11 12:05:33 -07:00
Mouse Reeve
838402e09f New translations django.po (Finnish) 2022-04-10 21:29:59 -07:00
Mouse Reeve
bfb8c40489 New translations django.po (Lithuanian) 2022-04-10 00:54:57 -07:00
Mouse Reeve
2b1dd38980 New translations django.po (Lithuanian) 2022-04-09 23:51:33 -07:00
Mouse Reeve
135cce9201 New translations django.po (Chinese Simplified) 2022-04-09 22:48:12 -07:00
Mouse Reeve
38838c81b4 New translations django.po (Spanish) 2022-04-09 08:13:04 -07:00
Mouse Reeve
4809d82766 New translations django.po (Galician) 2022-04-09 07:02:22 -07:00
Mouse Reeve
30d588723d New translations django.po (Galician) 2022-04-09 06:05:31 -07:00
Mouse Reeve
78f0ef704c New translations django.po (Finnish) 2022-04-09 02:36:22 -07:00
Mouse Reeve
43bc97202e New translations django.po (French) 2022-04-09 01:36:19 -07:00
Mouse Reeve
6b5df52c60 New translations django.po (Finnish) 2022-04-09 00:28:30 -07:00
Mouse Reeve
a0870050e0 New translations django.po (Galician) 2022-04-08 21:15:31 -07:00
Mouse Reeve
5530fca33e New translations django.po (Portuguese, Brazilian) 2022-04-08 16:12:43 -07:00
Mouse Reeve
0e14fe99b3 New translations django.po (Eastern Min) 2022-04-08 14:51:06 -07:00
Mouse Reeve
3a558a621f New translations django.po (Finnish) 2022-04-08 14:51:05 -07:00
Mouse Reeve
83d2c6ba84 New translations django.po (Basque) 2022-04-08 14:51:03 -07:00
Mouse Reeve
d2d638fd26 New translations django.po (Greek) 2022-04-08 14:51:02 -07:00
Mouse Reeve
42c295a63f New translations django.po (Danish) 2022-04-08 14:51:01 -07:00
Mouse Reeve
26f6b5e2d1 New translations django.po (Catalan) 2022-04-08 14:50:59 -07:00
Mouse Reeve
5504bf3614 New translations django.po (Arabic) 2022-04-08 14:50:57 -07:00
Mouse Reeve
b34d4d2f4e New translations django.po (Hebrew) 2022-04-08 14:50:56 -07:00
Mouse Reeve
c2028cc58a New translations django.po (Afrikaans) 2022-04-08 14:50:55 -07:00
Mouse Reeve
1b1addaab3 New translations django.po (Romanian) 2022-04-08 14:50:53 -07:00
Mouse Reeve
3603f849e7 New translations django.po (French) 2022-04-08 14:50:52 -07:00
Mouse Reeve
333e9785a6 New translations django.po (Welsh) 2022-04-08 14:50:51 -07:00
Mouse Reeve
60b9a7f094 New translations django.po (Portuguese, Brazilian) 2022-04-08 14:50:50 -07:00
Mouse Reeve
e8de33a4cb New translations django.po (Dutch) 2022-04-08 14:50:49 -07:00
Mouse Reeve
9ad1b27351 New translations django.po (German) 2022-04-08 14:50:47 -07:00
Mouse Reeve
948f0b98d3 New translations django.po (Spanish) 2022-04-08 14:50:46 -07:00
Mouse Reeve
a70a1c8841 New translations django.po (Czech) 2022-04-08 14:50:45 -07:00
Mouse Reeve
3b575f9770 New translations django.po (Hungarian) 2022-04-08 14:50:44 -07:00
Mouse Reeve
6641cba33f New translations django.po (Japanese) 2022-04-08 14:50:43 -07:00
Mouse Reeve
8174de1572 New translations django.po (Oulipo) 2022-04-08 14:50:41 -07:00
Mouse Reeve
a84bc710db New translations django.po (Galician) 2022-04-08 14:50:40 -07:00
Mouse Reeve
fd8662bb9d New translations django.po (Vietnamese) 2022-04-08 14:50:39 -07:00
Mouse Reeve
296dff47b0 New translations django.po (Chinese Traditional) 2022-04-08 14:50:38 -07:00
Mouse Reeve
154e114113 New translations django.po (Chinese Simplified) 2022-04-08 14:50:37 -07:00
Mouse Reeve
c6157af222 New translations django.po (Ukrainian) 2022-04-08 14:50:35 -07:00
Mouse Reeve
fd450d84db New translations django.po (Italian) 2022-04-08 14:50:34 -07:00
Mouse Reeve
18befc5ccb New translations django.po (Turkish) 2022-04-08 14:50:33 -07:00
Mouse Reeve
e0ea41b86c New translations django.po (Serbian (Cyrillic)) 2022-04-08 14:50:32 -07:00
Mouse Reeve
6c85ec3cc9 New translations django.po (Russian) 2022-04-08 14:50:30 -07:00
Mouse Reeve
5dbd936710 New translations django.po (Portuguese) 2022-04-08 14:50:27 -07:00
Mouse Reeve
48d4076e61 New translations django.po (Polish) 2022-04-08 14:50:26 -07:00
Mouse Reeve
e0cff54c68 New translations django.po (Norwegian) 2022-04-08 14:50:25 -07:00
Mouse Reeve
7880ef02c3 New translations django.po (Korean) 2022-04-08 14:50:23 -07:00
Mouse Reeve
832b37ab8b New translations django.po (Swedish) 2022-04-08 14:50:22 -07:00
Mouse Reeve
ccfed44655 New translations django.po (Lithuanian) 2022-04-08 14:50:21 -07:00
Mouse Reeve
873c80e462 New translations django.po (Finnish) 2022-04-07 01:04:13 -07:00
Mouse Reeve
eef08302d5 New translations django.po (Finnish) 2022-04-06 10:29:14 -07:00
Mouse Reeve
f44e8cf54e New translations django.po (Galician) 2022-04-06 09:33:25 -07:00
Mouse Reeve
c347347004 New translations django.po (French) 2022-04-06 02:59:19 -07:00
Mouse Reeve
e87a76c12b New translations django.po (Catalan) 2022-04-06 01:05:46 -07:00
Mouse Reeve
cb9ddc7da2 New translations django.po (Czech) 2022-04-05 06:37:36 -07:00
Mouse Reeve
9dbda8eb85 New translations django.po (Czech) 2022-04-05 05:42:03 -07:00
Mouse Reeve
2cc43f828a New translations django.po (Catalan) 2022-04-05 01:22:27 -07:00
Mouse Reeve
55f3f077d7 New translations django.po (Czech) 2022-04-05 01:22:25 -07:00
Mouse Reeve
3898c2e644 New translations django.po (Catalan) 2022-04-05 00:26:51 -07:00
Mouse Reeve
6b3485db2b New translations django.po (Czech) 2022-04-04 22:55:02 -07:00
Mouse Reeve
66e2482a61 New translations django.po (Swedish) 2022-04-04 21:52:32 -07:00
Mouse Reeve
25debb2f5f New translations django.po (Eastern Min) 2022-04-04 16:29:06 -07:00
Mouse Reeve
5c8ad023f4 New translations django.po (Finnish) 2022-04-04 16:29:05 -07:00
Mouse Reeve
5e1aa09ebe New translations django.po (Basque) 2022-04-04 16:29:04 -07:00
Mouse Reeve
582c25a633 New translations django.po (Greek) 2022-04-04 16:29:02 -07:00
Mouse Reeve
7c1ddbceac New translations django.po (Danish) 2022-04-04 16:29:00 -07:00
Mouse Reeve
b4edd6c41d New translations django.po (Catalan) 2022-04-04 16:28:58 -07:00
Mouse Reeve
1b7f95f231 New translations django.po (Arabic) 2022-04-04 16:28:57 -07:00
Mouse Reeve
11d28924a3 New translations django.po (Hebrew) 2022-04-04 16:28:56 -07:00
Mouse Reeve
f36f8d2fe5 New translations django.po (Afrikaans) 2022-04-04 16:28:55 -07:00
Mouse Reeve
c23adb2379 New translations django.po (Romanian) 2022-04-04 16:28:53 -07:00
Mouse Reeve
09d6d1bd01 New translations django.po (French) 2022-04-04 16:28:51 -07:00
Mouse Reeve
da485f2a15 New translations django.po (Welsh) 2022-04-04 16:28:49 -07:00
Mouse Reeve
ac0e70149a New translations django.po (Portuguese, Brazilian) 2022-04-04 16:28:48 -07:00
Mouse Reeve
9fe264c951 New translations django.po (Dutch) 2022-04-04 16:28:47 -07:00
Mouse Reeve
211138e74e New translations django.po (German) 2022-04-04 16:28:46 -07:00
Mouse Reeve
3008fb4339 New translations django.po (Spanish) 2022-04-04 16:28:44 -07:00
Mouse Reeve
ae5ece38d4 New translations django.po (Czech) 2022-04-04 16:28:43 -07:00
Mouse Reeve
3ff8af26ad New translations django.po (Hungarian) 2022-04-04 16:28:41 -07:00
Mouse Reeve
172c66ded8 New translations django.po (Japanese) 2022-04-04 16:28:40 -07:00
Mouse Reeve
ca59c55918 New translations django.po (Oulipo) 2022-04-04 16:28:39 -07:00
Mouse Reeve
57c27aa7f7 New translations django.po (Galician) 2022-04-04 16:28:37 -07:00
Mouse Reeve
1eb225180e New translations django.po (Vietnamese) 2022-04-04 16:28:36 -07:00
Mouse Reeve
ed62784a88 New translations django.po (Chinese Traditional) 2022-04-04 16:28:35 -07:00
Mouse Reeve
271fc5660a New translations django.po (Chinese Simplified) 2022-04-04 16:28:34 -07:00
Mouse Reeve
c5054d4621 New translations django.po (Ukrainian) 2022-04-04 16:28:32 -07:00
Mouse Reeve
91be786e42 New translations django.po (Italian) 2022-04-04 16:28:31 -07:00
Mouse Reeve
979cd3cdc7 New translations django.po (Turkish) 2022-04-04 16:28:30 -07:00
Mouse Reeve
b7b99ef5c9 New translations django.po (Serbian (Cyrillic)) 2022-04-04 16:28:28 -07:00
Mouse Reeve
d1f08c2e4e New translations django.po (Russian) 2022-04-04 16:28:27 -07:00
Mouse Reeve
f6969b3079 New translations django.po (Portuguese) 2022-04-04 16:28:26 -07:00
Mouse Reeve
2a2eda5428 New translations django.po (Polish) 2022-04-04 16:28:25 -07:00
Mouse Reeve
539c66e232 New translations django.po (Norwegian) 2022-04-04 16:28:23 -07:00
Mouse Reeve
c6fc67702e New translations django.po (Korean) 2022-04-04 16:28:22 -07:00
Mouse Reeve
dcc81c3850 New translations django.po (Swedish) 2022-04-04 16:28:21 -07:00
Mouse Reeve
2da2e1be8c New translations django.po (Lithuanian) 2022-04-04 16:28:20 -07:00
Mouse Reeve
d25dd0b6ba New translations django.po (Russian) 2022-04-01 13:02:22 -07:00
Mouse Reeve
50fe2c82d6 New translations django.po (Norwegian) 2022-03-31 08:40:30 -07:00
Mouse Reeve
6a7457d708 New translations django.po (Finnish) 2022-03-31 08:40:28 -07:00
Mouse Reeve
7915beb8b5 New translations django.po (Spanish) 2022-03-31 08:40:27 -07:00
Mouse Reeve
f9d9895f91 New translations django.po (Romanian) 2022-03-31 08:40:25 -07:00
Mouse Reeve
22c3273594 New translations django.po (Lithuanian) 2022-03-31 08:40:22 -07:00
Mouse Reeve
2502c70bba New translations django.po (Finnish) 2022-03-31 07:37:19 -07:00
Mouse Reeve
8806c66d22 New translations django.po (Swedish) 2022-03-31 00:13:19 -07:00
Mouse Reeve
ecbf49e256 New translations django.po (Swedish) 2022-03-30 23:09:29 -07:00
Mouse Reeve
8208b46d3c New translations django.po (Finnish) 2022-03-30 12:31:20 -07:00
Mouse Reeve
975cf5a63a New translations django.po (Finnish) 2022-03-30 11:17:12 -07:00
Mouse Reeve
d79799b329 New translations django.po (Finnish) 2022-03-30 10:19:07 -07:00
Mouse Reeve
d415a8ba15 New translations django.po (Finnish) 2022-03-30 09:09:40 -07:00
Mouse Reeve
0438da2276 New translations django.po (Finnish) 2022-03-30 08:13:03 -07:00
Mouse Reeve
3a66bd9555 New translations django.po (Galician) 2022-03-29 00:20:23 -07:00
Mouse Reeve
c6136e7166 New translations django.po (Galician) 2022-03-28 23:25:17 -07:00
Mouse Reeve
bf13fa2786 New translations django.po (Finnish) 2022-03-28 17:02:16 -07:00
Mouse Reeve
0682b30d4f New translations django.po (Finnish) 2022-03-28 16:01:22 -07:00
Mouse Reeve
e137ccd0f1 New translations django.po (Finnish) 2022-03-28 10:52:17 -07:00
Mouse Reeve
9992cfb7b8 New translations django.po (Finnish) 2022-03-28 09:54:12 -07:00
Mouse Reeve
1dca759741 New translations django.po (Finnish) 2022-03-27 15:18:20 -07:00
Mouse Reeve
f579283feb New translations django.po (Catalan) 2022-03-27 15:18:19 -07:00
Mouse Reeve
faa8e2a7be New translations django.po (Finnish) 2022-03-27 14:17:42 -07:00
Mouse Reeve
c424896496 New translations django.po (German) 2022-03-27 07:27:23 -07:00
Mouse Reeve
80ba725772 New translations django.po (Italian) 2022-03-27 04:27:00 -07:00
Mouse Reeve
86004beec1 New translations django.po (French) 2022-03-27 03:08:29 -07:00
Mouse Reeve
898431025b New translations django.po (Chinese Simplified) 2022-03-26 18:36:38 -07:00
Mouse Reeve
92799af91d New translations django.po (Portuguese, Brazilian) 2022-03-26 16:28:10 -07:00
Mouse Reeve
ce0574b41f New translations django.po (Eastern Min) 2022-03-26 15:30:21 -07:00
Mouse Reeve
3e63c01b51 New translations django.po (Finnish) 2022-03-26 15:30:20 -07:00
Mouse Reeve
d5b910b401 New translations django.po (Basque) 2022-03-26 15:30:19 -07:00
Mouse Reeve
c4c8780740 New translations django.po (Greek) 2022-03-26 15:30:17 -07:00
Mouse Reeve
2a822a1b7a New translations django.po (Danish) 2022-03-26 15:30:16 -07:00
Mouse Reeve
c60fc69334 New translations django.po (Catalan) 2022-03-26 15:30:15 -07:00
Mouse Reeve
72b6131ce1 New translations django.po (Arabic) 2022-03-26 15:30:14 -07:00
Mouse Reeve
4f36ee4728 New translations django.po (Hebrew) 2022-03-26 15:30:13 -07:00
Mouse Reeve
c5010a3a72 New translations django.po (Afrikaans) 2022-03-26 15:30:11 -07:00
Mouse Reeve
3927c8c47e New translations django.po (Romanian) 2022-03-26 15:30:10 -07:00
Mouse Reeve
85ea164e94 New translations django.po (French) 2022-03-26 15:30:09 -07:00
Mouse Reeve
f9ba1dfccc New translations django.po (Welsh) 2022-03-26 15:30:07 -07:00
Mouse Reeve
638291a833 New translations django.po (Portuguese, Brazilian) 2022-03-26 15:30:05 -07:00
Mouse Reeve
12000b2fa4 New translations django.po (Dutch) 2022-03-26 15:30:04 -07:00
Mouse Reeve
d74b8e6073 New translations django.po (German) 2022-03-26 15:30:03 -07:00
Mouse Reeve
73b304df96 New translations django.po (Spanish) 2022-03-26 15:30:02 -07:00
Mouse Reeve
d711aa9f9a New translations django.po (Czech) 2022-03-26 15:29:59 -07:00
Mouse Reeve
535676091f New translations django.po (Hungarian) 2022-03-26 15:29:58 -07:00
Mouse Reeve
5bb0e2d7da New translations django.po (Japanese) 2022-03-26 15:29:57 -07:00
Mouse Reeve
99b8daa5e8 New translations django.po (Oulipo) 2022-03-26 15:29:56 -07:00
Mouse Reeve
1b14e5bdb8 New translations django.po (Galician) 2022-03-26 15:29:55 -07:00
Mouse Reeve
3f7b331c11 New translations django.po (Vietnamese) 2022-03-26 15:29:54 -07:00
Mouse Reeve
c671d8e54e New translations django.po (Chinese Traditional) 2022-03-26 15:29:53 -07:00
Mouse Reeve
88161e2f87 New translations django.po (Chinese Simplified) 2022-03-26 15:29:52 -07:00
Mouse Reeve
ccdb28cb85 New translations django.po (Ukrainian) 2022-03-26 15:29:50 -07:00
Mouse Reeve
cc821c6417 New translations django.po (Italian) 2022-03-26 15:29:49 -07:00
Mouse Reeve
c860ce08d5 New translations django.po (Turkish) 2022-03-26 15:29:48 -07:00
Mouse Reeve
4cd61e7957 New translations django.po (Serbian (Cyrillic)) 2022-03-26 15:29:47 -07:00
Mouse Reeve
034badcee6 New translations django.po (Russian) 2022-03-26 15:29:46 -07:00
Mouse Reeve
5fc429bfc0 New translations django.po (Portuguese) 2022-03-26 15:29:44 -07:00
Mouse Reeve
4ad3910e3f New translations django.po (Polish) 2022-03-26 15:29:43 -07:00
Mouse Reeve
f8bcdff3f7 New translations django.po (Norwegian) 2022-03-26 15:29:42 -07:00
Mouse Reeve
3c5bf90f68 New translations django.po (Korean) 2022-03-26 15:29:41 -07:00
Mouse Reeve
aa27d6dc7c New translations django.po (Swedish) 2022-03-26 15:29:40 -07:00
Mouse Reeve
a98573955a New translations django.po (Lithuanian) 2022-03-26 15:29:39 -07:00
Mouse Reeve
899ff30321 New translations django.po (Welsh) 2022-03-26 14:26:39 -07:00
Mouse Reeve
62598cb2c5 New translations django.po (Eastern Min) 2022-03-26 11:02:44 -07:00
Mouse Reeve
cf4a113f8b New translations django.po (Finnish) 2022-03-26 11:02:43 -07:00
Mouse Reeve
d58ff081b1 New translations django.po (Basque) 2022-03-26 11:02:41 -07:00
Mouse Reeve
696fe7fc1c New translations django.po (Greek) 2022-03-26 11:02:40 -07:00
Mouse Reeve
06ddef9edf New translations django.po (Danish) 2022-03-26 11:02:39 -07:00
Mouse Reeve
d6d90363d9 New translations django.po (Catalan) 2022-03-26 11:02:37 -07:00
Mouse Reeve
a29e43cd7a New translations django.po (Arabic) 2022-03-26 11:02:36 -07:00
Mouse Reeve
c8a66de25c New translations django.po (Hebrew) 2022-03-26 11:02:35 -07:00
Mouse Reeve
d79d51f30c New translations django.po (Afrikaans) 2022-03-26 11:02:33 -07:00
Mouse Reeve
9cd38be7b3 New translations django.po (Romanian) 2022-03-26 11:02:32 -07:00
Mouse Reeve
f64725ac63 New translations django.po (French) 2022-03-26 11:02:31 -07:00
Mouse Reeve
0684b1c7fb New translations django.po (Welsh) 2022-03-26 11:02:30 -07:00
Mouse Reeve
c8c9fab965 New translations django.po (Portuguese, Brazilian) 2022-03-26 11:02:29 -07:00
Mouse Reeve
903f129a04 New translations django.po (Dutch) 2022-03-26 11:02:27 -07:00
Mouse Reeve
542d0ff64b New translations django.po (German) 2022-03-26 11:02:26 -07:00
Mouse Reeve
8081d815b7 New translations django.po (Spanish) 2022-03-26 11:02:25 -07:00
Mouse Reeve
46f8c7ecc0 New translations django.po (Czech) 2022-03-26 11:02:23 -07:00
Mouse Reeve
527b84ad36 New translations django.po (Hungarian) 2022-03-26 11:02:22 -07:00
Mouse Reeve
763ac3a578 New translations django.po (Japanese) 2022-03-26 11:02:21 -07:00
Mouse Reeve
658c2b0c8b New translations django.po (Oulipo) 2022-03-26 11:02:20 -07:00
Mouse Reeve
a35007dcfd New translations django.po (Galician) 2022-03-26 11:02:19 -07:00
Mouse Reeve
41042a0c07 New translations django.po (Vietnamese) 2022-03-26 11:02:18 -07:00
Mouse Reeve
3b0e0c0a1d New translations django.po (Chinese Traditional) 2022-03-26 11:02:16 -07:00
Mouse Reeve
b2cd279691 New translations django.po (Chinese Simplified) 2022-03-26 11:02:15 -07:00
Mouse Reeve
9cb1345125 New translations django.po (Ukrainian) 2022-03-26 11:02:14 -07:00
Mouse Reeve
696cfce612 New translations django.po (Italian) 2022-03-26 11:02:13 -07:00
Mouse Reeve
b11af177d5 New translations django.po (Turkish) 2022-03-26 11:02:12 -07:00
Mouse Reeve
99380597fc New translations django.po (Serbian (Cyrillic)) 2022-03-26 11:02:10 -07:00
Mouse Reeve
78474e7614 New translations django.po (Russian) 2022-03-26 11:02:09 -07:00
Mouse Reeve
4151a5656b New translations django.po (Portuguese) 2022-03-26 11:02:08 -07:00
Mouse Reeve
51800cca55 New translations django.po (Polish) 2022-03-26 11:02:07 -07:00
Mouse Reeve
2647a82ecb New translations django.po (Norwegian) 2022-03-26 11:02:05 -07:00
Mouse Reeve
ef767c12ef New translations django.po (Korean) 2022-03-26 11:02:04 -07:00
Mouse Reeve
a0ffab4085 New translations django.po (Swedish) 2022-03-26 11:02:03 -07:00
Mouse Reeve
86f81f55b5 New translations django.po (Lithuanian) 2022-03-26 11:02:02 -07:00
Mouse Reeve
53786ea7cb New translations django.po (Finnish) 2022-03-26 08:55:53 -07:00
Mouse Reeve
2dc55ce002 New translations django.po (Finnish) 2022-03-26 07:46:25 -07:00
Mouse Reeve
0379af934b New translations django.po (Finnish) 2022-03-26 06:44:10 -07:00
Mouse Reeve
f1a2aeee2f New translations django.po (Swedish) 2022-03-25 17:32:02 -07:00
Mouse Reeve
1337047a1f New translations django.po (Finnish) 2022-03-25 17:32:00 -07:00
Mouse Reeve
811473e911 New translations django.po (Swedish) 2022-03-25 16:08:49 -07:00
Mouse Reeve
3e1ca62004 New translations django.po (Russian) 2022-03-24 03:28:40 -07:00
Mouse Reeve
c192221171 New translations django.po (Russian) 2022-03-24 02:12:53 -07:00
Mouse Reeve
df9e22b490 New translations django.po (Russian) 2022-03-23 17:04:10 -07:00
Mouse Reeve
46273b661d New translations django.po (Russian) 2022-03-23 15:54:48 -07:00
Mouse Reeve
71f9d8d86d New translations django.po (Russian) 2022-03-23 14:57:20 -07:00
Mouse Reeve
15904baa8c New translations django.po (Romanian) 2022-03-23 13:57:40 -07:00
Mouse Reeve
7da416a66c New translations django.po (Romanian) 2022-03-23 12:53:31 -07:00
Mouse Reeve
83d7b6c39d New translations django.po (Russian) 2022-03-23 07:51:07 -07:00
Mouse Reeve
802e0a2211 New translations django.po (Russian) 2022-03-23 06:31:28 -07:00
Mouse Reeve
49283919b3 New translations django.po (Russian) 2022-03-23 05:30:00 -07:00
Mouse Reeve
c6c5b15c38 New translations django.po (Russian) 2022-03-23 04:33:31 -07:00
Mouse Reeve
a31bd84c8b New translations django.po (Romanian) 2022-03-22 04:04:18 -07:00
Mouse Reeve
6adbd9ef64 New translations django.po (Romanian) 2022-03-22 03:05:24 -07:00
Mouse Reeve
1a2837c611 New translations django.po (Catalan) 2022-03-21 23:45:45 -07:00
Mouse Reeve
45189d4d4b New translations django.po (French) 2022-03-20 11:26:21 -07:00
Mouse Reeve
a1985dc78b New translations django.po (German) 2022-03-20 02:52:28 -07:00
Mouse Reeve
1ca59f4e48 New translations django.po (Chinese Simplified) 2022-03-19 00:21:52 -07:00
Mouse Reeve
0d34c8fe3b New translations django.po (Polish) 2022-03-18 23:23:10 -07:00
Mouse Reeve
8f8dbbe6eb New translations django.po (Polish) 2022-03-18 14:32:40 -07:00
Mouse Reeve
3df03677a0 New translations django.po (French) 2022-03-18 14:32:39 -07:00
Mouse Reeve
4e782109a5 New translations django.po (French) 2022-03-18 13:25:57 -07:00
Mouse Reeve
bb7132124c New translations django.po (Galician) 2022-03-17 23:29:53 -07:00
Mouse Reeve
60f192001f New translations django.po (Italian) 2022-03-17 17:41:57 -07:00
Mouse Reeve
0c7f3ab352 New translations django.po (Polish) 2022-03-17 14:50:33 -07:00
Mouse Reeve
c7dc5d912f New translations django.po (Portuguese, Brazilian) 2022-03-17 14:50:32 -07:00
Mouse Reeve
146cecff7a New translations django.po (Polish) 2022-03-17 13:54:03 -07:00
Mouse Reeve
c071d9842b New translations django.po (Eastern Min) 2022-03-17 10:07:30 -07:00
Mouse Reeve
791bbc48e3 New translations django.po (Finnish) 2022-03-17 10:07:28 -07:00
Mouse Reeve
0cf01922d8 New translations django.po (Basque) 2022-03-17 10:07:27 -07:00
Mouse Reeve
b6f8ba4f89 New translations django.po (Greek) 2022-03-17 10:07:26 -07:00
Mouse Reeve
179d99a55e New translations django.po (Danish) 2022-03-17 10:07:25 -07:00
Mouse Reeve
c7e074300b New translations django.po (Catalan) 2022-03-17 10:07:24 -07:00
Mouse Reeve
b6d399a6d1 New translations django.po (Arabic) 2022-03-17 10:07:22 -07:00
Mouse Reeve
997940de3c New translations django.po (Hebrew) 2022-03-17 10:07:21 -07:00
Mouse Reeve
1a5b20b8c9 New translations django.po (Afrikaans) 2022-03-17 10:07:19 -07:00
Mouse Reeve
f4cac1b08c New translations django.po (Romanian) 2022-03-17 10:07:18 -07:00
Mouse Reeve
60d4ce2a61 New translations django.po (French) 2022-03-17 10:07:17 -07:00
Mouse Reeve
283a333a23 New translations django.po (Welsh) 2022-03-17 10:07:15 -07:00
Mouse Reeve
44ae8e9d20 New translations django.po (Portuguese, Brazilian) 2022-03-17 10:07:14 -07:00
Mouse Reeve
c875ec1d10 New translations django.po (Dutch) 2022-03-17 10:07:11 -07:00
Mouse Reeve
b446686545 New translations django.po (German) 2022-03-17 10:07:10 -07:00
Mouse Reeve
ce508f1a84 New translations django.po (Spanish) 2022-03-17 10:07:08 -07:00
Mouse Reeve
22009cc9ef New translations django.po (Czech) 2022-03-17 10:07:07 -07:00
Mouse Reeve
89336b3adc New translations django.po (Hungarian) 2022-03-17 10:07:06 -07:00
Mouse Reeve
7c47d14ce2 New translations django.po (Japanese) 2022-03-17 10:07:05 -07:00
Mouse Reeve
7a29590bee New translations django.po (Oulipo) 2022-03-17 10:07:03 -07:00
Mouse Reeve
fc9f8bfe6b New translations django.po (Galician) 2022-03-17 10:07:01 -07:00
Mouse Reeve
7d8b067ed7 New translations django.po (Vietnamese) 2022-03-17 10:06:59 -07:00
Mouse Reeve
0bcd31660f New translations django.po (Chinese Traditional) 2022-03-17 10:06:57 -07:00
Mouse Reeve
817308b861 New translations django.po (Chinese Simplified) 2022-03-17 10:06:56 -07:00
Mouse Reeve
176948dd66 New translations django.po (Ukrainian) 2022-03-17 10:06:54 -07:00
Mouse Reeve
d7268c3eb7 New translations django.po (Italian) 2022-03-17 10:06:52 -07:00
Mouse Reeve
13e54c5d58 New translations django.po (Turkish) 2022-03-17 10:06:51 -07:00
Mouse Reeve
b6282976ba New translations django.po (Serbian (Cyrillic)) 2022-03-17 10:06:50 -07:00
Mouse Reeve
ced701f1f0 New translations django.po (Russian) 2022-03-17 10:06:48 -07:00
Mouse Reeve
7b7f8f7fcf New translations django.po (Portuguese) 2022-03-17 10:06:47 -07:00
Mouse Reeve
013c917dc1 New translations django.po (Polish) 2022-03-17 10:06:46 -07:00
Mouse Reeve
e9647c6876 New translations django.po (Norwegian) 2022-03-17 10:06:44 -07:00
Mouse Reeve
fd84d566fd New translations django.po (Korean) 2022-03-17 10:06:43 -07:00
Mouse Reeve
2693d4364c New translations django.po (Swedish) 2022-03-17 10:06:41 -07:00
Mouse Reeve
08f77c25c1 New translations django.po (Lithuanian) 2022-03-17 10:06:40 -07:00
Mouse Reeve
0102b303ab New translations django.po (Galician) 2022-03-16 21:57:36 -07:00
Mouse Reeve
fcf430ce05 New translations django.po (Italian) 2022-03-16 17:48:20 -07:00
Mouse Reeve
289595f5da New translations django.po (Portuguese, Brazilian) 2022-03-16 17:48:19 -07:00
Mouse Reeve
ddfccf5a33 New translations django.po (Eastern Min) 2022-03-16 16:34:41 -07:00
Mouse Reeve
fc91ff5911 New translations django.po (Finnish) 2022-03-16 16:34:40 -07:00
Mouse Reeve
d522984df7 New translations django.po (Basque) 2022-03-16 16:34:39 -07:00
Mouse Reeve
e86c28f60c New translations django.po (Greek) 2022-03-16 16:34:38 -07:00
Mouse Reeve
405b5d8bab New translations django.po (Danish) 2022-03-16 16:34:36 -07:00
Mouse Reeve
c7561e6b36 New translations django.po (Catalan) 2022-03-16 16:34:35 -07:00
Mouse Reeve
513d169e69 New translations django.po (Arabic) 2022-03-16 16:34:34 -07:00
Mouse Reeve
1e9dd7c61d New translations django.po (Hebrew) 2022-03-16 16:34:33 -07:00
Mouse Reeve
f1c9529de8 New translations django.po (Afrikaans) 2022-03-16 16:34:32 -07:00
Mouse Reeve
d84154bc5b New translations django.po (Romanian) 2022-03-16 16:34:31 -07:00
Mouse Reeve
3e114bdd3d New translations django.po (French) 2022-03-16 16:34:29 -07:00
Mouse Reeve
0ff1f99f21 New translations django.po (Welsh) 2022-03-16 16:34:28 -07:00
Mouse Reeve
134b1978e4 New translations django.po (Portuguese, Brazilian) 2022-03-16 16:34:27 -07:00
Mouse Reeve
85f68c8cfb New translations django.po (Dutch) 2022-03-16 16:34:26 -07:00
Mouse Reeve
0e8ae600e0 New translations django.po (German) 2022-03-16 16:34:24 -07:00
Mouse Reeve
0356b60014 New translations django.po (Spanish) 2022-03-16 16:34:23 -07:00
Mouse Reeve
ce9b6823d5 New translations django.po (Czech) 2022-03-16 16:34:22 -07:00
Mouse Reeve
cdce2eee6f New translations django.po (Hungarian) 2022-03-16 16:34:21 -07:00
Mouse Reeve
b3ffa72be2 New translations django.po (Japanese) 2022-03-16 16:34:19 -07:00
Mouse Reeve
d6eb489414 New translations django.po (Oulipo) 2022-03-16 16:34:18 -07:00
Mouse Reeve
8623147181 New translations django.po (Galician) 2022-03-16 16:34:17 -07:00
Mouse Reeve
4150d48420 New translations django.po (Vietnamese) 2022-03-16 16:34:15 -07:00
Mouse Reeve
414504b5f8 New translations django.po (Chinese Traditional) 2022-03-16 16:34:14 -07:00
Mouse Reeve
acde0549c3 New translations django.po (Chinese Simplified) 2022-03-16 16:34:13 -07:00
Mouse Reeve
a7c8a2858b New translations django.po (Ukrainian) 2022-03-16 16:34:12 -07:00
Mouse Reeve
0790adb276 New translations django.po (Italian) 2022-03-16 16:34:10 -07:00
Mouse Reeve
b2ad40acbe New translations django.po (Turkish) 2022-03-16 16:34:09 -07:00
Mouse Reeve
91ca5fe16a New translations django.po (Serbian (Cyrillic)) 2022-03-16 16:34:08 -07:00
Mouse Reeve
c45bae5e34 New translations django.po (Russian) 2022-03-16 16:34:07 -07:00
Mouse Reeve
164e42767d New translations django.po (Portuguese) 2022-03-16 16:34:05 -07:00
Mouse Reeve
c22119fa99 New translations django.po (Polish) 2022-03-16 16:34:04 -07:00
Mouse Reeve
609b1c9c1e New translations django.po (Norwegian) 2022-03-16 16:34:03 -07:00
Mouse Reeve
74134a7309 New translations django.po (Korean) 2022-03-16 16:34:02 -07:00
Mouse Reeve
6b4d90a77d New translations django.po (Swedish) 2022-03-16 16:34:00 -07:00
Mouse Reeve
07657c932d New translations django.po (Lithuanian) 2022-03-16 16:33:59 -07:00
Mouse Reeve
ab59958035 New translations django.po (Italian) 2022-03-16 12:30:27 -07:00
Mouse Reeve
a2fdd6eb97 New translations django.po (Arabic) 2022-03-16 12:30:25 -07:00
Mouse Reeve
390c065759 New translations django.po (Italian) 2022-03-16 11:31:52 -07:00
Mouse Reeve
4d0641c2ca New translations django.po (Catalan) 2022-03-16 08:56:25 -07:00
Mouse Reeve
8018227917 New translations django.po (Galician) 2022-03-16 07:14:35 -07:00
Mouse Reeve
ee0262b68a New translations django.po (French) 2022-03-16 07:14:32 -07:00
Mouse Reeve
e91ec612d3 New translations django.po (Romanian) 2022-03-16 06:02:44 -07:00
Mouse Reeve
05591ab40d New translations django.po (Romanian) 2022-03-15 15:27:58 -07:00
Mouse Reeve
e0986d7382 New translations django.po (Romanian) 2022-03-15 14:31:43 -07:00
Mouse Reeve
b546243cac New translations django.po (Catalan) 2022-03-15 12:23:07 -07:00
Mouse Reeve
750ea6d94a New translations django.po (Portuguese, Brazilian) 2022-03-14 14:18:59 -07:00
Mouse Reeve
6996d0c9e0 New translations django.po (Eastern Min) 2022-03-14 13:18:39 -07:00
Mouse Reeve
0fe594cf4b New translations django.po (Finnish) 2022-03-14 13:18:38 -07:00
Mouse Reeve
f9d2d6a2e2 New translations django.po (Basque) 2022-03-14 13:18:37 -07:00
Mouse Reeve
24d391311e New translations django.po (Greek) 2022-03-14 13:18:35 -07:00
Mouse Reeve
d474817bb5 New translations django.po (Danish) 2022-03-14 13:18:34 -07:00
Mouse Reeve
c106a1e2a0 New translations django.po (Catalan) 2022-03-14 13:18:33 -07:00
Mouse Reeve
56b7d508c1 New translations django.po (Arabic) 2022-03-14 13:18:32 -07:00
Mouse Reeve
d9aa60bbf7 New translations django.po (Hebrew) 2022-03-14 13:18:31 -07:00
Mouse Reeve
1cf88202aa New translations django.po (Afrikaans) 2022-03-14 13:18:30 -07:00
Mouse Reeve
78c26a94ea New translations django.po (Romanian) 2022-03-14 13:18:29 -07:00
Mouse Reeve
28170c023f New translations django.po (French) 2022-03-14 13:18:27 -07:00
Mouse Reeve
638cdc068c New translations django.po (Welsh) 2022-03-14 13:18:26 -07:00
Mouse Reeve
943a978f48 New translations django.po (Portuguese, Brazilian) 2022-03-14 13:18:25 -07:00
Mouse Reeve
ed035739f1 New translations django.po (Dutch) 2022-03-14 13:18:23 -07:00
Mouse Reeve
662803be0b New translations django.po (German) 2022-03-14 13:18:22 -07:00
Mouse Reeve
76c0804e82 New translations django.po (Spanish) 2022-03-14 13:18:21 -07:00
Mouse Reeve
8303bd9cfb New translations django.po (Czech) 2022-03-14 13:18:20 -07:00
Mouse Reeve
f3d46dda94 New translations django.po (Hungarian) 2022-03-14 13:18:19 -07:00
Mouse Reeve
ca6427b1ab New translations django.po (Japanese) 2022-03-14 13:18:17 -07:00
Mouse Reeve
9f51faab6d New translations django.po (Oulipo) 2022-03-14 13:18:16 -07:00
Mouse Reeve
f4dc00514a New translations django.po (Galician) 2022-03-14 13:18:15 -07:00
Mouse Reeve
a23572655f New translations django.po (Vietnamese) 2022-03-14 13:18:14 -07:00
Mouse Reeve
59d3654100 New translations django.po (Chinese Traditional) 2022-03-14 13:18:13 -07:00
Mouse Reeve
5164e35080 New translations django.po (Chinese Simplified) 2022-03-14 13:18:11 -07:00
Mouse Reeve
861b0f6063 New translations django.po (Ukrainian) 2022-03-14 13:18:10 -07:00
Mouse Reeve
88b2627a46 New translations django.po (Italian) 2022-03-14 13:18:09 -07:00
Mouse Reeve
f7e8527e97 New translations django.po (Turkish) 2022-03-14 13:18:08 -07:00
Mouse Reeve
96a0ec1734 New translations django.po (Serbian (Cyrillic)) 2022-03-14 13:18:07 -07:00
Mouse Reeve
887c3fd2f6 New translations django.po (Russian) 2022-03-14 13:18:05 -07:00
Mouse Reeve
487da32ab3 New translations django.po (Portuguese) 2022-03-14 13:18:04 -07:00
Mouse Reeve
c41fe74b94 New translations django.po (Polish) 2022-03-14 13:18:02 -07:00
Mouse Reeve
99fcf191bd New translations django.po (Norwegian) 2022-03-14 13:18:01 -07:00
Mouse Reeve
2abd48221b New translations django.po (Korean) 2022-03-14 13:17:59 -07:00
Mouse Reeve
ccee5a008b New translations django.po (Swedish) 2022-03-14 13:17:58 -07:00
Mouse Reeve
96662679df New translations django.po (Lithuanian) 2022-03-14 13:17:57 -07:00
Mouse Reeve
df62b5481c New translations django.po (French) 2022-03-14 09:32:59 -07:00
Mouse Reeve
7079814e04 New translations django.po (French) 2022-03-14 03:37:56 -07:00
Mouse Reeve
68971062cf New translations django.po (Chinese Simplified) 2022-03-13 17:10:52 -07:00
Mouse Reeve
2dd105df5e New translations django.po (Spanish) 2022-03-13 13:49:09 -07:00
Mouse Reeve
d11bc6a95d New translations django.po (Portuguese, Brazilian) 2022-03-13 13:49:08 -07:00
Mouse Reeve
5f4223ab38 New translations django.po (Eastern Min) 2022-03-13 12:52:34 -07:00
Mouse Reeve
459c3281f5 New translations django.po (Finnish) 2022-03-13 12:52:33 -07:00
Mouse Reeve
3799d008cb New translations django.po (Basque) 2022-03-13 12:52:32 -07:00
Mouse Reeve
c07ef8d584 New translations django.po (Greek) 2022-03-13 12:52:31 -07:00
Mouse Reeve
776898e915 New translations django.po (Danish) 2022-03-13 12:52:29 -07:00
Mouse Reeve
17e020cb42 New translations django.po (Catalan) 2022-03-13 12:52:28 -07:00
Mouse Reeve
28bfcef2cc New translations django.po (Arabic) 2022-03-13 12:52:27 -07:00
Mouse Reeve
f60d589621 New translations django.po (Hebrew) 2022-03-13 12:52:26 -07:00
Mouse Reeve
3df91e4457 New translations django.po (Afrikaans) 2022-03-13 12:52:25 -07:00
Mouse Reeve
1acdd57c34 New translations django.po (Romanian) 2022-03-13 12:52:24 -07:00
Mouse Reeve
551865c289 New translations django.po (French) 2022-03-13 12:52:23 -07:00
Mouse Reeve
ae72dd704f New translations django.po (Welsh) 2022-03-13 12:52:22 -07:00
Mouse Reeve
c10094e6bd New translations django.po (Portuguese, Brazilian) 2022-03-13 12:52:20 -07:00
Mouse Reeve
3da81a84c3 New translations django.po (Dutch) 2022-03-13 12:52:19 -07:00
Mouse Reeve
ad8ecd79e4 New translations django.po (German) 2022-03-13 12:52:18 -07:00
Mouse Reeve
8aff7a2785 New translations django.po (Spanish) 2022-03-13 12:52:17 -07:00
Mouse Reeve
62008dd4e3 New translations django.po (Czech) 2022-03-13 12:52:16 -07:00
Mouse Reeve
ff2ddd35b0 New translations django.po (Hungarian) 2022-03-13 12:52:15 -07:00
Mouse Reeve
68120fdc58 New translations django.po (Japanese) 2022-03-13 12:52:14 -07:00
Mouse Reeve
0501c5d892 New translations django.po (Oulipo) 2022-03-13 12:52:13 -07:00
Mouse Reeve
932342852f New translations django.po (Galician) 2022-03-13 12:52:12 -07:00
Mouse Reeve
1065eb6dd8 New translations django.po (Vietnamese) 2022-03-13 12:52:11 -07:00
Mouse Reeve
85b9ce8111 New translations django.po (Chinese Traditional) 2022-03-13 12:52:10 -07:00
Mouse Reeve
89d4003362 New translations django.po (Chinese Simplified) 2022-03-13 12:52:09 -07:00
Mouse Reeve
0049ba0ee1 New translations django.po (Ukrainian) 2022-03-13 12:52:07 -07:00
Mouse Reeve
7853d51413 New translations django.po (Italian) 2022-03-13 12:52:06 -07:00
Mouse Reeve
d6ecbf1e10 New translations django.po (Turkish) 2022-03-13 12:52:05 -07:00
Mouse Reeve
827452262f New translations django.po (Serbian (Cyrillic)) 2022-03-13 12:52:04 -07:00
Mouse Reeve
d83dc5c09c New translations django.po (Russian) 2022-03-13 12:52:03 -07:00
Mouse Reeve
51101a766f New translations django.po (Portuguese) 2022-03-13 12:52:02 -07:00
Mouse Reeve
5248a439e3 New translations django.po (Polish) 2022-03-13 12:51:59 -07:00
Mouse Reeve
38fc0ace6c New translations django.po (Norwegian) 2022-03-13 12:51:58 -07:00
Mouse Reeve
33973be567 New translations django.po (Korean) 2022-03-13 12:51:57 -07:00
Mouse Reeve
9119711401 New translations django.po (Swedish) 2022-03-13 12:51:56 -07:00
Mouse Reeve
f23bb58774 New translations django.po (Lithuanian) 2022-03-13 12:51:54 -07:00
Mouse Reeve
b9f27ed5fb New translations django.po (Eastern Min) 2022-03-08 13:16:43 -08:00
Mouse Reeve
2a0982936a New translations django.po (Finnish) 2022-03-08 13:16:42 -08:00
Mouse Reeve
5df65f07d2 New translations django.po (Basque) 2022-03-08 13:16:40 -08:00
Mouse Reeve
f24ae02f5c New translations django.po (Greek) 2022-03-08 13:16:39 -08:00
Mouse Reeve
6079da3770 New translations django.po (Danish) 2022-03-08 13:16:38 -08:00
Mouse Reeve
03d5c7ea7b New translations django.po (Catalan) 2022-03-08 13:16:36 -08:00
Mouse Reeve
1e7a57e8a4 New translations django.po (Arabic) 2022-03-08 13:16:35 -08:00
Mouse Reeve
41dc8863fa New translations django.po (Hebrew) 2022-03-08 13:16:34 -08:00
Mouse Reeve
967bfb447e New translations django.po (Afrikaans) 2022-03-08 13:16:33 -08:00
Mouse Reeve
3a6e1f8ed0 New translations django.po (Romanian) 2022-03-08 13:16:32 -08:00
Mouse Reeve
2ee2208459 New translations django.po (French) 2022-03-08 13:16:31 -08:00
Mouse Reeve
cfc70b7049 New translations django.po (Welsh) 2022-03-08 13:16:29 -08:00
Mouse Reeve
e83a8486e6 New translations django.po (Portuguese, Brazilian) 2022-03-08 13:16:28 -08:00
Mouse Reeve
b88412c72a New translations django.po (Dutch) 2022-03-08 13:16:27 -08:00
Mouse Reeve
b57e79ded9 New translations django.po (German) 2022-03-08 13:16:25 -08:00
Mouse Reeve
9743b2297b New translations django.po (Spanish) 2022-03-08 13:16:24 -08:00
Mouse Reeve
fddf896482 New translations django.po (Czech) 2022-03-08 13:16:23 -08:00
Mouse Reeve
77ecf9d35c New translations django.po (Hungarian) 2022-03-08 13:16:22 -08:00
Mouse Reeve
9b510a7c0a New translations django.po (Japanese) 2022-03-08 13:16:20 -08:00
Mouse Reeve
336de88b2e New translations django.po (Oulipo) 2022-03-08 13:16:19 -08:00
Mouse Reeve
09a24a0989 New translations django.po (Galician) 2022-03-08 13:16:18 -08:00
Mouse Reeve
f7b62883a2 New translations django.po (Vietnamese) 2022-03-08 13:16:17 -08:00
Mouse Reeve
2ac1045bb5 New translations django.po (Chinese Traditional) 2022-03-08 13:16:15 -08:00
Mouse Reeve
300ae70e35 New translations django.po (Chinese Simplified) 2022-03-08 13:16:14 -08:00
Mouse Reeve
e45d4a622d New translations django.po (Ukrainian) 2022-03-08 13:16:13 -08:00
Mouse Reeve
65a7fa3e46 New translations django.po (Italian) 2022-03-08 13:16:12 -08:00
Mouse Reeve
4ceaeab1c7 New translations django.po (Turkish) 2022-03-08 13:16:10 -08:00
Mouse Reeve
4d9635bef2 New translations django.po (Serbian (Cyrillic)) 2022-03-08 13:16:09 -08:00
Mouse Reeve
f51e3c4212 New translations django.po (Russian) 2022-03-08 13:16:08 -08:00
Mouse Reeve
8961fe2ca3 New translations django.po (Portuguese) 2022-03-08 13:16:06 -08:00
Mouse Reeve
94f71738f8 New translations django.po (Polish) 2022-03-08 13:16:05 -08:00
Mouse Reeve
945ce0d693 New translations django.po (Norwegian) 2022-03-08 13:16:03 -08:00
Mouse Reeve
48dbc2294f New translations django.po (Korean) 2022-03-08 13:16:02 -08:00
Mouse Reeve
4602ce5172 New translations django.po (Swedish) 2022-03-08 13:16:00 -08:00
Mouse Reeve
cdb4a1839e New translations django.po (Lithuanian) 2022-03-08 13:15:58 -08:00
Mouse Reeve
f4f753604d New translations django.po (Catalan) 2022-03-06 12:53:39 -08:00
Mouse Reeve
38d2ba525f New translations django.po (Catalan) 2022-03-06 11:52:02 -08:00
Mouse Reeve
df3dc42b4f New translations django.po (Catalan) 2022-03-06 10:52:59 -08:00
Mouse Reeve
aee00ffdc0 New translations django.po (Catalan) 2022-03-06 09:31:55 -08:00
Mouse Reeve
fe3a5da0bf New translations django.po (Catalan) 2022-03-06 07:43:41 -08:00
Mouse Reeve
63c58a8849 New translations django.po (Chinese Simplified) 2022-03-04 07:46:03 -08:00
Mouse Reeve
8b01153b0f New translations django.po (Swedish) 2022-03-03 20:45:39 -08:00
Mouse Reeve
99a2b3dcc3 New translations django.po (Swedish) 2022-03-03 19:50:25 -08:00
Mouse Reeve
1709e8d79e New translations django.po (Spanish) 2022-03-02 11:39:48 -08:00
Mouse Reeve
77934801dc New translations django.po (Romanian) 2022-03-02 07:04:36 -08:00
Mouse Reeve
f4e6ac9316 New translations django.po (Romanian) 2022-03-02 06:08:21 -08:00
Mouse Reeve
0d1adb4708 New translations django.po (French) 2022-03-02 04:24:28 -08:00
Mouse Reeve
6c40c5f848 New translations django.po (French) 2022-03-02 03:07:11 -08:00
Mouse Reeve
4e388d65b1 New translations django.po (Galician) 2022-03-01 23:34:59 -08:00
Mouse Reeve
3a02337974 New translations django.po (Galician) 2022-03-01 22:29:25 -08:00
Mouse Reeve
e431c52895 New translations django.po (Galician) 2022-03-01 21:10:29 -08:00
Mouse Reeve
3cc3575339 New translations django.po (Portuguese, Brazilian) 2022-03-01 15:21:29 -08:00
Mouse Reeve
baa0b7732a New translations django.po (Portuguese, Brazilian) 2022-03-01 14:25:16 -08:00
Mouse Reeve
b0b7640ff2 New translations django.po (Italian) 2022-03-01 13:14:21 -08:00
Mouse Reeve
6330896863 New translations django.po (Eastern Min) 2022-03-01 12:16:29 -08:00
Mouse Reeve
57ac096cca New translations django.po (Finnish) 2022-03-01 12:16:28 -08:00
Mouse Reeve
e2160861df New translations django.po (Basque) 2022-03-01 12:16:26 -08:00
Mouse Reeve
4678b1e3c3 New translations django.po (Greek) 2022-03-01 12:16:25 -08:00
Mouse Reeve
20e21df351 New translations django.po (Danish) 2022-03-01 12:16:24 -08:00
Mouse Reeve
afc2630b81 New translations django.po (Catalan) 2022-03-01 12:16:22 -08:00
Mouse Reeve
9b2e0916b7 New translations django.po (Arabic) 2022-03-01 12:16:21 -08:00
Mouse Reeve
5558351f90 New translations django.po (Hebrew) 2022-03-01 12:16:20 -08:00
Mouse Reeve
024c9f5045 New translations django.po (Afrikaans) 2022-03-01 12:16:18 -08:00
Mouse Reeve
34f7efd862 New translations django.po (Romanian) 2022-03-01 12:16:17 -08:00
Mouse Reeve
01d9b66de0 New translations django.po (French) 2022-03-01 12:16:16 -08:00
Mouse Reeve
6185abf85f New translations django.po (Welsh) 2022-03-01 12:16:15 -08:00
Mouse Reeve
428cdde36b New translations django.po (Portuguese, Brazilian) 2022-03-01 12:16:13 -08:00
Mouse Reeve
071cd67ca0 New translations django.po (Dutch) 2022-03-01 12:16:12 -08:00
Mouse Reeve
847dff1fab New translations django.po (German) 2022-03-01 12:16:11 -08:00
Mouse Reeve
ad8e5b5604 New translations django.po (Spanish) 2022-03-01 12:16:09 -08:00
Mouse Reeve
a1d4e93502 New translations django.po (Czech) 2022-03-01 12:16:08 -08:00
Mouse Reeve
e91e17813f New translations django.po (Hungarian) 2022-03-01 12:16:07 -08:00
Mouse Reeve
cfb0236719 New translations django.po (Japanese) 2022-03-01 12:16:05 -08:00
Mouse Reeve
e0743fb930 New translations django.po (Oulipo) 2022-03-01 12:16:04 -08:00
Mouse Reeve
1a86db1428 New translations django.po (Galician) 2022-03-01 12:16:03 -08:00
Mouse Reeve
621262b949 New translations django.po (Vietnamese) 2022-03-01 12:16:01 -08:00
Mouse Reeve
d500816715 New translations django.po (Chinese Traditional) 2022-03-01 12:16:00 -08:00
Mouse Reeve
ce450908d2 New translations django.po (Chinese Simplified) 2022-03-01 12:15:59 -08:00
Mouse Reeve
e4069d534f New translations django.po (Ukrainian) 2022-03-01 12:15:57 -08:00
Mouse Reeve
e71b2e0298 New translations django.po (Italian) 2022-03-01 12:15:56 -08:00
Mouse Reeve
c826d59bf8 New translations django.po (Turkish) 2022-03-01 12:15:55 -08:00
Mouse Reeve
e8140e293e New translations django.po (Serbian (Cyrillic)) 2022-03-01 12:15:54 -08:00
Mouse Reeve
6fa9a2c6b6 New translations django.po (Russian) 2022-03-01 12:15:53 -08:00
Mouse Reeve
7291363c86 New translations django.po (Portuguese) 2022-03-01 12:15:51 -08:00
Mouse Reeve
1543a1cc5c New translations django.po (Polish) 2022-03-01 12:15:50 -08:00
Mouse Reeve
1cc05e9a39 New translations django.po (Norwegian) 2022-03-01 12:15:49 -08:00
Mouse Reeve
937824b393 New translations django.po (Korean) 2022-03-01 12:15:48 -08:00
Mouse Reeve
622f26023e New translations django.po (Swedish) 2022-03-01 12:15:46 -08:00
Mouse Reeve
e449446b2c New translations django.po (Lithuanian) 2022-03-01 12:15:45 -08:00
Mouse Reeve
9d20d9ba43 New translations django.po (Welsh) 2022-03-01 09:18:58 -08:00
Mouse Reeve
cdfd909fa8 New translations django.po (Welsh) 2022-03-01 08:13:56 -08:00
Mouse Reeve
143af85d15 New translations django.po (Welsh) 2022-03-01 07:10:41 -08:00
Mouse Reeve
0ba6bcff27 New translations django.po (Welsh) 2022-02-28 09:20:09 -08:00
Mouse Reeve
6066006f39 New translations django.po (Welsh) 2022-02-28 08:12:13 -08:00
Mouse Reeve
6a24dfb9ca New translations django.po (Welsh) 2022-02-28 07:09:42 -08:00
Mouse Reeve
547939809f New translations django.po (Welsh) 2022-02-28 06:05:16 -08:00
Mouse Reeve
798efe06a6 New translations django.po (Welsh) 2022-02-28 04:08:41 -08:00
Mouse Reeve
6b6fbfbcd5 New translations django.po (German) 2022-02-27 10:54:15 -08:00
Mouse Reeve
4050829985 New translations django.po (Italian) 2022-02-27 08:14:16 -08:00
Mouse Reeve
6d3fecf57c New translations django.po (French) 2022-02-26 12:08:22 -08:00
Mouse Reeve
cf497d2457 New translations django.po (Portuguese) 2022-02-26 04:42:30 -08:00
Mouse Reeve
2443394329 New translations django.po (Arabic) 2022-02-26 03:21:24 -08:00
Mouse Reeve
c53cd4366c New translations django.po (Arabic) 2022-02-26 02:25:43 -08:00
Mouse Reeve
2c7a1b5e26 New translations django.po (Galician) 2022-02-25 23:03:47 -08:00
Mouse Reeve
e9e93a36ad New translations django.po (Chinese Simplified) 2022-02-25 20:02:33 -08:00
Mouse Reeve
8863c679d7 New translations django.po (Portuguese, Brazilian) 2022-02-25 14:22:32 -08:00
Mouse Reeve
b85a8df73c New translations django.po (Eastern Min) 2022-02-25 13:15:28 -08:00
Mouse Reeve
e94ab04cb9 New translations django.po (Finnish) 2022-02-25 13:15:26 -08:00
Mouse Reeve
bb464e92bf New translations django.po (Basque) 2022-02-25 13:15:25 -08:00
Mouse Reeve
cad6430de7 New translations django.po (Greek) 2022-02-25 13:15:22 -08:00
Mouse Reeve
524325c343 New translations django.po (Danish) 2022-02-25 13:15:21 -08:00
Mouse Reeve
2d5eb62cbf New translations django.po (Catalan) 2022-02-25 13:15:20 -08:00
Mouse Reeve
247d77ea77 New translations django.po (Arabic) 2022-02-25 13:15:18 -08:00
Mouse Reeve
d7e624d5b6 New translations django.po (Hebrew) 2022-02-25 13:15:17 -08:00
Mouse Reeve
1b9a24ead5 New translations django.po (Afrikaans) 2022-02-25 13:15:16 -08:00
Mouse Reeve
7477026fc3 New translations django.po (Romanian) 2022-02-25 13:15:15 -08:00
Mouse Reeve
82907ebae1 New translations django.po (French) 2022-02-25 13:15:14 -08:00
Mouse Reeve
d691070e00 New translations django.po (Welsh) 2022-02-25 13:15:12 -08:00
Mouse Reeve
8d8905da92 New translations django.po (Portuguese, Brazilian) 2022-02-25 13:15:11 -08:00
Mouse Reeve
09c088074b New translations django.po (Dutch) 2022-02-25 13:15:10 -08:00
Mouse Reeve
9adf3576e1 New translations django.po (German) 2022-02-25 13:15:08 -08:00
Mouse Reeve
5401a19a9b New translations django.po (Spanish) 2022-02-25 13:15:07 -08:00
Mouse Reeve
144ec51a31 New translations django.po (Czech) 2022-02-25 13:15:06 -08:00
Mouse Reeve
419b7d27d0 New translations django.po (Hungarian) 2022-02-25 13:15:05 -08:00
Mouse Reeve
f62bf09799 New translations django.po (Japanese) 2022-02-25 13:15:04 -08:00
Mouse Reeve
83a535594f New translations django.po (Oulipo) 2022-02-25 13:15:02 -08:00
Mouse Reeve
4ca590476b New translations django.po (Galician) 2022-02-25 13:14:59 -08:00
Mouse Reeve
d7e30242ab New translations django.po (Vietnamese) 2022-02-25 13:14:58 -08:00
Mouse Reeve
77079ba251 New translations django.po (Chinese Traditional) 2022-02-25 13:14:57 -08:00
Mouse Reeve
258b3a2583 New translations django.po (Chinese Simplified) 2022-02-25 13:14:55 -08:00
Mouse Reeve
38374747ca New translations django.po (Ukrainian) 2022-02-25 13:14:54 -08:00
Mouse Reeve
902076d542 New translations django.po (Italian) 2022-02-25 13:14:53 -08:00
Mouse Reeve
5115fde6fd New translations django.po (Turkish) 2022-02-25 13:14:51 -08:00
Mouse Reeve
111cc69287 New translations django.po (Serbian (Cyrillic)) 2022-02-25 13:14:50 -08:00
Mouse Reeve
732c3081fe New translations django.po (Russian) 2022-02-25 13:14:48 -08:00
Mouse Reeve
c74efc6a24 New translations django.po (Portuguese) 2022-02-25 13:14:47 -08:00
Mouse Reeve
35e1325771 New translations django.po (Polish) 2022-02-25 13:14:45 -08:00
Mouse Reeve
da00a09045 New translations django.po (Norwegian) 2022-02-25 13:14:44 -08:00
Mouse Reeve
f6ad1dcb97 New translations django.po (Korean) 2022-02-25 13:14:41 -08:00
Mouse Reeve
483ca487e4 New translations django.po (Swedish) 2022-02-25 13:14:40 -08:00
Mouse Reeve
fb09fe35f6 New translations django.po (Lithuanian) 2022-02-25 13:14:39 -08:00
Mouse Reeve
b8375097ab New translations django.po (Chinese Simplified) 2022-02-25 07:34:26 -08:00
Mouse Reeve
c18a653c7d New translations django.po (Chinese Simplified) 2022-02-25 06:25:10 -08:00
Mouse Reeve
04a89e7ad7 New translations django.po (Galician) 2022-02-21 21:34:20 -08:00
Mouse Reeve
c1f1873570 New translations django.po (Swedish) 2022-02-21 03:18:14 -08:00
Mouse Reeve
f184c4495e New translations django.po (Romanian) 2022-02-21 03:18:13 -08:00
Mouse Reeve
588ddfb775 New translations django.po (Romanian) 2022-02-21 02:01:25 -08:00
Mouse Reeve
cc537062fa New translations django.po (Romanian) 2022-02-21 01:05:58 -08:00
Mouse Reeve
b1b5ae370c New translations django.po (Romanian) 2022-02-21 00:08:16 -08:00
Mouse Reeve
9db6146a82 New translations django.po (Romanian) 2022-02-20 23:01:23 -08:00
Mouse Reeve
4edf9e812e New translations django.po (Romanian) 2022-02-20 22:06:11 -08:00
Mouse Reeve
82a3815026 New translations django.po (Romanian) 2022-02-20 13:36:41 -08:00
Mouse Reeve
7bc2690d96 New translations django.po (Romanian) 2022-02-20 12:25:52 -08:00
Mouse Reeve
37c9db98e8 New translations django.po (Romanian) 2022-02-20 11:29:08 -08:00
Mouse Reeve
cb3a1b3f1c New translations django.po (French) 2022-02-18 03:36:07 -08:00
Mouse Reeve
8a40f7440a New translations django.po (French) 2022-02-18 01:57:11 -08:00
Mouse Reeve
4dc7462a29 New translations django.po (Galician) 2022-02-17 23:52:31 -08:00
Mouse Reeve
467925b169 New translations django.po (Portuguese, Brazilian) 2022-02-17 23:52:30 -08:00
Mouse Reeve
989a6df0d2 New translations django.po (Galician) 2022-02-17 22:34:09 -08:00
Mouse Reeve
20e051dfc5 New translations django.po (Italian) 2022-02-17 22:34:07 -08:00
Mouse Reeve
669f959ab5 New translations django.po (Portuguese, Brazilian) 2022-02-17 22:34:05 -08:00
Mouse Reeve
8263d55665 New translations django.po (Eastern Min) 2022-02-17 21:32:23 -08:00
Mouse Reeve
0c192923cb New translations django.po (Finnish) 2022-02-17 21:32:22 -08:00
Mouse Reeve
9235619811 New translations django.po (Basque) 2022-02-17 21:32:21 -08:00
Mouse Reeve
1362d3bb88 New translations django.po (Greek) 2022-02-17 21:32:20 -08:00
Mouse Reeve
abbc226e85 New translations django.po (Danish) 2022-02-17 21:32:19 -08:00
Mouse Reeve
8501b42ec0 New translations django.po (Catalan) 2022-02-17 21:32:18 -08:00
Mouse Reeve
5c250e71c5 New translations django.po (Arabic) 2022-02-17 21:32:17 -08:00
Mouse Reeve
dac44a0828 New translations django.po (Hebrew) 2022-02-17 21:32:16 -08:00
Mouse Reeve
dd6bce6f96 New translations django.po (Afrikaans) 2022-02-17 21:32:14 -08:00
Mouse Reeve
730224c75a New translations django.po (Romanian) 2022-02-17 21:32:13 -08:00
Mouse Reeve
c61ccc5de2 New translations django.po (French) 2022-02-17 21:32:12 -08:00
Mouse Reeve
99c7422f89 New translations django.po (Welsh) 2022-02-17 21:32:11 -08:00
Mouse Reeve
59c4f74cf5 New translations django.po (Portuguese, Brazilian) 2022-02-17 21:32:10 -08:00
Mouse Reeve
6eb95a5c4f New translations django.po (Dutch) 2022-02-17 21:32:09 -08:00
Mouse Reeve
57eb471686 New translations django.po (German) 2022-02-17 21:32:08 -08:00
Mouse Reeve
accca39658 New translations django.po (Spanish) 2022-02-17 21:32:06 -08:00
Mouse Reeve
f78b30c3d5 New translations django.po (Czech) 2022-02-17 21:32:05 -08:00
Mouse Reeve
460d63a2df New translations django.po (Hungarian) 2022-02-17 21:32:04 -08:00
Mouse Reeve
f63e51063f New translations django.po (Japanese) 2022-02-17 21:32:03 -08:00
Mouse Reeve
ce2eeb83af New translations django.po (Oulipo) 2022-02-17 21:32:02 -08:00
Mouse Reeve
e9df08e33e New translations django.po (Galician) 2022-02-17 21:31:59 -08:00
Mouse Reeve
40d9d25929 New translations django.po (Vietnamese) 2022-02-17 21:31:58 -08:00
Mouse Reeve
0f6cffb6f2 New translations django.po (Chinese Traditional) 2022-02-17 21:31:57 -08:00
Mouse Reeve
838bbbe54e New translations django.po (Chinese Simplified) 2022-02-17 21:31:56 -08:00
Mouse Reeve
ef695feb92 New translations django.po (Ukrainian) 2022-02-17 21:31:54 -08:00
Mouse Reeve
c9afd6f062 New translations django.po (Italian) 2022-02-17 21:31:53 -08:00
Mouse Reeve
d6786d8ce2 New translations django.po (Turkish) 2022-02-17 21:31:52 -08:00
Mouse Reeve
e0fa896e4b New translations django.po (Serbian (Cyrillic)) 2022-02-17 21:31:51 -08:00
Mouse Reeve
5e5d6c6b41 New translations django.po (Russian) 2022-02-17 21:31:50 -08:00
Mouse Reeve
7462accac6 New translations django.po (Portuguese) 2022-02-17 21:31:49 -08:00
Mouse Reeve
71615887da New translations django.po (Polish) 2022-02-17 21:31:48 -08:00
Mouse Reeve
b82e4738b2 New translations django.po (Norwegian) 2022-02-17 21:31:47 -08:00
Mouse Reeve
05cd2af1b4 New translations django.po (Korean) 2022-02-17 21:31:45 -08:00
Mouse Reeve
2d7f0d2dcb New translations django.po (Swedish) 2022-02-17 21:31:44 -08:00
Mouse Reeve
0be5370132 New translations django.po (Lithuanian) 2022-02-17 21:31:43 -08:00
Mouse Reeve
b28bf9598f New translations django.po (Italian) 2022-02-17 12:40:29 -08:00
Mouse Reeve
81610bb6f3 New translations django.po (Portuguese, Brazilian) 2022-02-17 12:40:28 -08:00
Mouse Reeve
7054a9e73c New translations django.po (Eastern Min) 2022-02-17 11:39:53 -08:00
Mouse Reeve
7dbec481aa New translations django.po (Finnish) 2022-02-17 11:39:51 -08:00
Mouse Reeve
c774c95a74 New translations django.po (Basque) 2022-02-17 11:39:50 -08:00
Mouse Reeve
d5650c2bb0 New translations django.po (Greek) 2022-02-17 11:39:49 -08:00
Mouse Reeve
9b61c9fc42 New translations django.po (Danish) 2022-02-17 11:39:48 -08:00
Mouse Reeve
8b5fa1e368 New translations django.po (Catalan) 2022-02-17 11:39:47 -08:00
Mouse Reeve
2ce0c38bf6 New translations django.po (Arabic) 2022-02-17 11:39:45 -08:00
Mouse Reeve
f134db4d30 New translations django.po (Hebrew) 2022-02-17 11:39:44 -08:00
Mouse Reeve
9a9d156edf New translations django.po (Afrikaans) 2022-02-17 11:39:43 -08:00
Mouse Reeve
cda35e4a97 New translations django.po (Romanian) 2022-02-17 11:39:42 -08:00
Mouse Reeve
422d28235d New translations django.po (French) 2022-02-17 11:39:40 -08:00
Mouse Reeve
f9b6908a17 New translations django.po (Welsh) 2022-02-17 11:39:39 -08:00
Mouse Reeve
7a35234521 New translations django.po (Portuguese, Brazilian) 2022-02-17 11:39:37 -08:00
Mouse Reeve
dea7624148 New translations django.po (Dutch) 2022-02-17 11:39:35 -08:00
Mouse Reeve
76ad88d16b New translations django.po (German) 2022-02-17 11:39:34 -08:00
Mouse Reeve
d783f03021 New translations django.po (Spanish) 2022-02-17 11:39:33 -08:00
Mouse Reeve
adcdb155be New translations django.po (Czech) 2022-02-17 11:39:32 -08:00
Mouse Reeve
3077f6eb57 New translations django.po (Hungarian) 2022-02-17 11:39:31 -08:00
Mouse Reeve
b4e651e22b New translations django.po (Japanese) 2022-02-17 11:39:29 -08:00
Mouse Reeve
33f2a28e8e New translations django.po (Oulipo) 2022-02-17 11:39:28 -08:00
Mouse Reeve
e05945319e New translations django.po (Galician) 2022-02-17 11:39:27 -08:00
Mouse Reeve
154342968a New translations django.po (Vietnamese) 2022-02-17 11:39:25 -08:00
Mouse Reeve
8077503dd6 New translations django.po (Chinese Traditional) 2022-02-17 11:39:24 -08:00
Mouse Reeve
eb5889c88e New translations django.po (Chinese Simplified) 2022-02-17 11:39:23 -08:00
Mouse Reeve
b66161f0d0 New translations django.po (Ukrainian) 2022-02-17 11:39:21 -08:00
Mouse Reeve
96c31d8551 New translations django.po (Italian) 2022-02-17 11:39:20 -08:00
Mouse Reeve
ad826920d1 New translations django.po (Turkish) 2022-02-17 11:39:19 -08:00
Mouse Reeve
4d7dc2f471 New translations django.po (Serbian (Cyrillic)) 2022-02-17 11:39:18 -08:00
Mouse Reeve
79d0a390e7 New translations django.po (Russian) 2022-02-17 11:39:17 -08:00
Mouse Reeve
6b833e6131 New translations django.po (Portuguese) 2022-02-17 11:39:15 -08:00
Mouse Reeve
70e5f55d17 New translations django.po (Polish) 2022-02-17 11:39:14 -08:00
Mouse Reeve
3b04b290f5 New translations django.po (Norwegian) 2022-02-17 11:39:12 -08:00
Mouse Reeve
242067d20e New translations django.po (Korean) 2022-02-17 11:39:11 -08:00
Mouse Reeve
5f1d344972 New translations django.po (Swedish) 2022-02-17 11:39:10 -08:00
Mouse Reeve
76cf8d8608 New translations django.po (Lithuanian) 2022-02-17 11:39:09 -08:00
Mouse Reeve
003918de1d New translations django.po (Chinese Simplified) 2022-02-10 00:41:29 -08:00
Mouse Reeve
7092d7e8c0 New translations django.po (Chinese Simplified) 2022-02-09 23:38:24 -08:00
Mouse Reeve
7940335de3 New translations django.po (Welsh) 2022-02-08 13:13:45 -08:00
Mouse Reeve
5f3d13ee08 New translations django.po (Italian) 2022-02-07 14:15:12 -08:00
Mouse Reeve
d6060bc41c New translations django.po (Italian) 2022-02-07 02:17:27 -08:00
Mouse Reeve
f3d2685afb New translations django.po (Arabic) 2022-02-07 02:17:25 -08:00
Mouse Reeve
2977a87b2a New translations django.po (Italian) 2022-02-07 01:05:35 -08:00
Mouse Reeve
d871b7eebf New translations django.po (Swedish) 2022-02-06 14:33:23 -08:00
Mouse Reeve
de319721e2 New translations django.po (Spanish) 2022-02-06 07:02:39 -08:00
Mouse Reeve
4906f08d3b New translations django.po (Spanish) 2022-02-06 04:02:48 -08:00
Mouse Reeve
d925cbf515 New translations django.po (Portuguese, Brazilian) 2022-02-05 09:22:21 -08:00
Mouse Reeve
513423e7d7 New translations django.po (Italian) 2022-02-05 07:58:47 -08:00
Mouse Reeve
227124f6c0 New translations django.po (Italian) 2022-02-05 06:59:09 -08:00
Mouse Reeve
fc507293d7 New translations django.po (French) 2022-02-05 02:48:58 -08:00
Mouse Reeve
3cd543bde3 New translations django.po (Spanish) 2022-02-05 01:19:16 -08:00
Mouse Reeve
30d5063bea New translations django.po (Galician) 2022-02-04 21:23:59 -08:00
Mouse Reeve
ca72490cf6 New translations django.po (Eastern Min) 2022-02-04 19:16:59 -08:00
Mouse Reeve
288f3f4e21 New translations django.po (Finnish) 2022-02-04 19:16:57 -08:00
Mouse Reeve
64f9842e28 New translations django.po (Basque) 2022-02-04 19:16:56 -08:00
Mouse Reeve
4f0bcad508 New translations django.po (Greek) 2022-02-04 19:16:55 -08:00
Mouse Reeve
1ed959a90c New translations django.po (Danish) 2022-02-04 19:16:54 -08:00
Mouse Reeve
7a767ac8ac New translations django.po (Catalan) 2022-02-04 19:16:53 -08:00
Mouse Reeve
809d064db9 New translations django.po (Arabic) 2022-02-04 19:16:52 -08:00
Mouse Reeve
6cc77f9fd0 New translations django.po (Hebrew) 2022-02-04 19:16:50 -08:00
Mouse Reeve
1eb955e97b New translations django.po (Afrikaans) 2022-02-04 19:16:48 -08:00
Mouse Reeve
4238e9b343 New translations django.po (Romanian) 2022-02-04 19:16:47 -08:00
Mouse Reeve
40093ab1c8 New translations django.po (French) 2022-02-04 19:16:46 -08:00
Mouse Reeve
2fc710a49b New translations django.po (Welsh) 2022-02-04 19:16:45 -08:00
Mouse Reeve
c98dd54a8a New translations django.po (Portuguese, Brazilian) 2022-02-04 19:16:44 -08:00
Mouse Reeve
883a8d44f5 New translations django.po (Dutch) 2022-02-04 19:16:43 -08:00
Mouse Reeve
1768cc0380 New translations django.po (German) 2022-02-04 19:16:41 -08:00
Mouse Reeve
29e99fe3a2 New translations django.po (Spanish) 2022-02-04 19:16:40 -08:00
Mouse Reeve
d54a32910a New translations django.po (Czech) 2022-02-04 19:16:39 -08:00
Mouse Reeve
a52d2c31a5 New translations django.po (Hungarian) 2022-02-04 19:16:38 -08:00
Mouse Reeve
039b1be06d New translations django.po (Japanese) 2022-02-04 19:16:37 -08:00
Mouse Reeve
10e89e74ca New translations django.po (Oulipo) 2022-02-04 19:16:36 -08:00
Mouse Reeve
9ba60356ae New translations django.po (Galician) 2022-02-04 19:16:35 -08:00
Mouse Reeve
48548ec3c1 New translations django.po (Vietnamese) 2022-02-04 19:16:34 -08:00
Mouse Reeve
79506c72b3 New translations django.po (Chinese Traditional) 2022-02-04 19:16:32 -08:00
Mouse Reeve
a058818398 New translations django.po (Chinese Simplified) 2022-02-04 19:16:31 -08:00
Mouse Reeve
72a6fc1e85 New translations django.po (Ukrainian) 2022-02-04 19:16:30 -08:00
Mouse Reeve
f4658681f4 New translations django.po (Italian) 2022-02-04 19:16:29 -08:00
Mouse Reeve
cd32176931 New translations django.po (Turkish) 2022-02-04 19:16:27 -08:00
Mouse Reeve
a5906ce016 New translations django.po (Serbian (Cyrillic)) 2022-02-04 19:16:26 -08:00
Mouse Reeve
7561975bb1 New translations django.po (Russian) 2022-02-04 19:16:25 -08:00
Mouse Reeve
e851df596e New translations django.po (Portuguese) 2022-02-04 19:16:24 -08:00
Mouse Reeve
89bd7f0cfc New translations django.po (Polish) 2022-02-04 19:16:22 -08:00
Mouse Reeve
d0c67241bf New translations django.po (Norwegian) 2022-02-04 19:16:21 -08:00
Mouse Reeve
2f372c6c8e New translations django.po (Korean) 2022-02-04 19:16:20 -08:00
Mouse Reeve
a4a1ec30ee New translations django.po (Swedish) 2022-02-04 19:16:18 -08:00
Mouse Reeve
881ec27448 New translations django.po (Lithuanian) 2022-02-04 19:16:17 -08:00
Mouse Reeve
4c2817a0d8 New translations django.po (Spanish) 2022-02-04 14:13:33 -08:00
Mouse Reeve
48c284664a New translations django.po (Portuguese, Brazilian) 2022-02-04 14:13:32 -08:00
Mouse Reeve
53644988df New translations django.po (Eastern Min) 2022-02-04 13:01:36 -08:00
Mouse Reeve
44fd79880d New translations django.po (Finnish) 2022-02-04 13:01:35 -08:00
Mouse Reeve
d92226754a New translations django.po (Basque) 2022-02-04 13:01:33 -08:00
Mouse Reeve
fca6b99f96 New translations django.po (Greek) 2022-02-04 13:01:32 -08:00
Mouse Reeve
1b7ba91a40 New translations django.po (Danish) 2022-02-04 13:01:31 -08:00
Mouse Reeve
2973a5c1f5 New translations django.po (Catalan) 2022-02-04 13:01:30 -08:00
Mouse Reeve
e41f2d438e New translations django.po (Arabic) 2022-02-04 13:01:29 -08:00
Mouse Reeve
56515bc554 New translations django.po (Hebrew) 2022-02-04 13:01:28 -08:00
Mouse Reeve
d9e3613f55 New translations django.po (Afrikaans) 2022-02-04 13:01:27 -08:00
Mouse Reeve
4ddff2c106 New translations django.po (Romanian) 2022-02-04 13:01:25 -08:00
Mouse Reeve
9c646c4bcc New translations django.po (French) 2022-02-04 13:01:24 -08:00
Mouse Reeve
f8f9b8871c New translations django.po (Welsh) 2022-02-04 13:01:23 -08:00
Mouse Reeve
9ab9648bd4 New translations django.po (Portuguese, Brazilian) 2022-02-04 13:01:22 -08:00
Mouse Reeve
458d8475ac New translations django.po (Dutch) 2022-02-04 13:01:21 -08:00
Mouse Reeve
a5f3573a7c New translations django.po (German) 2022-02-04 13:01:20 -08:00
Mouse Reeve
70ff1351fa New translations django.po (Spanish) 2022-02-04 13:01:18 -08:00
Mouse Reeve
7a17acd64c New translations django.po (Czech) 2022-02-04 13:01:17 -08:00
Mouse Reeve
2eb04e4d5e New translations django.po (Hungarian) 2022-02-04 13:01:16 -08:00
Mouse Reeve
cfc79c6748 New translations django.po (Japanese) 2022-02-04 13:01:14 -08:00
Mouse Reeve
7540d0df31 New translations django.po (Oulipo) 2022-02-04 13:01:13 -08:00
Mouse Reeve
4aec10ce36 New translations django.po (Galician) 2022-02-04 13:01:11 -08:00
Mouse Reeve
09c95597d3 New translations django.po (Vietnamese) 2022-02-04 13:01:10 -08:00
Mouse Reeve
14dfcae598 New translations django.po (Chinese Traditional) 2022-02-04 13:01:09 -08:00
Mouse Reeve
3936f87906 New translations django.po (Chinese Simplified) 2022-02-04 13:01:08 -08:00
Mouse Reeve
d8e2cb2078 New translations django.po (Ukrainian) 2022-02-04 13:01:06 -08:00
Mouse Reeve
3b57e87f14 New translations django.po (Italian) 2022-02-04 13:01:05 -08:00
Mouse Reeve
a319f22948 New translations django.po (Turkish) 2022-02-04 13:01:03 -08:00
Mouse Reeve
0bbb7dbe9f New translations django.po (Serbian (Cyrillic)) 2022-02-04 13:01:02 -08:00
Mouse Reeve
9c46fc2d06 New translations django.po (Russian) 2022-02-04 13:01:01 -08:00
Mouse Reeve
b7981c5b9e New translations django.po (Portuguese) 2022-02-04 13:00:59 -08:00
Mouse Reeve
cff7fbfabd New translations django.po (Polish) 2022-02-04 13:00:58 -08:00
Mouse Reeve
8ba8aede9f New translations django.po (Norwegian) 2022-02-04 13:00:57 -08:00
Mouse Reeve
3f93ecb065 New translations django.po (Korean) 2022-02-04 13:00:55 -08:00
Mouse Reeve
df670045c4 New translations django.po (Swedish) 2022-02-04 13:00:54 -08:00
Mouse Reeve
b685ccbf52 New translations django.po (Lithuanian) 2022-02-04 13:00:53 -08:00
Mouse Reeve
91ef8616f5 New translations django.po (Galician) 2022-02-03 20:39:03 -08:00
Mouse Reeve
dab2ee9744 New translations django.po (Swedish) 2022-02-03 16:13:43 -08:00
Mouse Reeve
cd5a9492bb New translations django.po (Lithuanian) 2022-02-03 09:48:17 -08:00
Mouse Reeve
220de770ba New translations django.po (Norwegian) 2022-02-02 16:54:44 -08:00
Mouse Reeve
eb672e4592 New translations django.po (Italian) 2022-02-02 16:54:43 -08:00
Mouse Reeve
86482f8cbd New translations django.po (Spanish) 2022-02-02 16:54:41 -08:00
Mouse Reeve
4f5cce506f New translations django.po (German) 2022-02-02 16:54:40 -08:00
Mouse Reeve
8b260ca5fc New translations django.po (Lithuanian) 2022-02-02 16:54:39 -08:00
Mouse Reeve
b2b4713dde New translations django.po (Portuguese, Brazilian) 2022-02-02 15:50:35 -08:00
Mouse Reeve
0ae81f7822 New translations django.po (French) 2022-02-02 14:10:44 -08:00
Mouse Reeve
db867f7f46 New translations django.po (Eastern Min) 2022-02-02 13:01:10 -08:00
Mouse Reeve
9251aa6e51 New translations django.po (Finnish) 2022-02-02 13:01:09 -08:00
Mouse Reeve
3174469574 New translations django.po (Basque) 2022-02-02 13:01:08 -08:00
Mouse Reeve
feff35537a New translations django.po (Greek) 2022-02-02 13:01:07 -08:00
Mouse Reeve
41ed13fcb7 New translations django.po (Danish) 2022-02-02 13:01:06 -08:00
Mouse Reeve
a83afb43ca New translations django.po (Catalan) 2022-02-02 13:01:04 -08:00
Mouse Reeve
d1008a74d0 New translations django.po (Arabic) 2022-02-02 13:01:03 -08:00
Mouse Reeve
00eb85df1f New translations django.po (Hebrew) 2022-02-02 13:01:01 -08:00
Mouse Reeve
391c171f66 New translations django.po (Afrikaans) 2022-02-02 13:01:00 -08:00
Mouse Reeve
437f102b7b New translations django.po (Romanian) 2022-02-02 13:00:59 -08:00
Mouse Reeve
0dabaf88ce New translations django.po (French) 2022-02-02 13:00:57 -08:00
Mouse Reeve
879bd4d47c New translations django.po (Welsh) 2022-02-02 13:00:56 -08:00
Mouse Reeve
a8a8ea767b New translations django.po (Portuguese, Brazilian) 2022-02-02 13:00:55 -08:00
Mouse Reeve
acee9219bd New translations django.po (Dutch) 2022-02-02 13:00:54 -08:00
Mouse Reeve
ca3598ffc6 New translations django.po (German) 2022-02-02 13:00:52 -08:00
Mouse Reeve
9285bbc4a5 New translations django.po (Spanish) 2022-02-02 13:00:50 -08:00
Mouse Reeve
cbf5a7817e New translations django.po (Czech) 2022-02-02 13:00:49 -08:00
Mouse Reeve
a8de8f621d New translations django.po (Hungarian) 2022-02-02 13:00:48 -08:00
Mouse Reeve
82d68fecd2 New translations django.po (Japanese) 2022-02-02 13:00:47 -08:00
Mouse Reeve
782ba6a356 New translations django.po (Oulipo) 2022-02-02 13:00:46 -08:00
Mouse Reeve
7575d05d8d New translations django.po (Galician) 2022-02-02 13:00:44 -08:00
Mouse Reeve
bcecb471e1 New translations django.po (Vietnamese) 2022-02-02 13:00:43 -08:00
Mouse Reeve
2ba5afef71 New translations django.po (Chinese Traditional) 2022-02-02 13:00:42 -08:00
Mouse Reeve
a6b5a63eaa New translations django.po (Chinese Simplified) 2022-02-02 13:00:41 -08:00
Mouse Reeve
b0dfeb9605 New translations django.po (Ukrainian) 2022-02-02 13:00:39 -08:00
Mouse Reeve
a2a5e1263c New translations django.po (Italian) 2022-02-02 13:00:38 -08:00
Mouse Reeve
f74bc9ba30 New translations django.po (Turkish) 2022-02-02 13:00:36 -08:00
Mouse Reeve
557da4f47c New translations django.po (Serbian (Cyrillic)) 2022-02-02 13:00:33 -08:00
Mouse Reeve
46e2eac702 New translations django.po (Russian) 2022-02-02 13:00:30 -08:00
Mouse Reeve
84c205fdae New translations django.po (Portuguese) 2022-02-02 13:00:29 -08:00
Mouse Reeve
5daedb85d4 New translations django.po (Polish) 2022-02-02 13:00:28 -08:00
Mouse Reeve
8b175beb1b New translations django.po (Norwegian) 2022-02-02 13:00:26 -08:00
Mouse Reeve
52cf7ec604 New translations django.po (Korean) 2022-02-02 13:00:25 -08:00
Mouse Reeve
573113a6a1 New translations django.po (Swedish) 2022-02-02 13:00:24 -08:00
Mouse Reeve
d1f81db733 New translations django.po (Lithuanian) 2022-02-02 13:00:23 -08:00
Mouse Reeve
b4d4e72808 New translations django.po (Basque) 2022-02-01 07:13:13 -08:00
Mouse Reeve
a9b06019a6 New translations django.po (Basque) 2022-02-01 06:15:44 -08:00
Mouse Reeve
881dde509f New translations django.po (Lithuanian) 2022-01-31 07:31:19 -08:00
Mouse Reeve
316fcdd290 New translations django.po (Galician) 2022-01-30 23:59:52 -08:00
Mouse Reeve
119cc9e446 New translations django.po (Norwegian) 2022-01-30 13:36:54 -08:00
Mouse Reeve
1f987d9bbd New translations django.po (Polish) 2022-01-30 12:36:04 -08:00
Mouse Reeve
748f7a2256 New translations django.po (Italian) 2022-01-30 12:36:03 -08:00
Mouse Reeve
419420b7a7 New translations django.po (Eastern Min) 2022-01-30 11:38:44 -08:00
Mouse Reeve
20a6d7fefd New translations django.po (Finnish) 2022-01-30 11:38:43 -08:00
Mouse Reeve
391ff5a88f New translations django.po (Basque) 2022-01-30 11:38:42 -08:00
Mouse Reeve
8aa86c6286 New translations django.po (Greek) 2022-01-30 11:38:41 -08:00
Mouse Reeve
daf9a4d040 New translations django.po (Danish) 2022-01-30 11:38:40 -08:00
Mouse Reeve
672a712f69 New translations django.po (Catalan) 2022-01-30 11:38:39 -08:00
Mouse Reeve
523fe5bcf6 New translations django.po (Arabic) 2022-01-30 11:38:38 -08:00
Mouse Reeve
f7d37df8e0 New translations django.po (Hebrew) 2022-01-30 11:38:37 -08:00
Mouse Reeve
4d5026c8b1 New translations django.po (Afrikaans) 2022-01-30 11:38:36 -08:00
Mouse Reeve
1c8e478714 New translations django.po (Romanian) 2022-01-30 11:38:35 -08:00
Mouse Reeve
6489bbc767 New translations django.po (French) 2022-01-30 11:38:33 -08:00
Mouse Reeve
68de064fd1 New translations django.po (Welsh) 2022-01-30 11:38:32 -08:00
Mouse Reeve
40c6d87926 New translations django.po (Portuguese, Brazilian) 2022-01-30 11:38:30 -08:00
Mouse Reeve
bf4e1f1877 New translations django.po (Dutch) 2022-01-30 11:38:29 -08:00
Mouse Reeve
33b399479e New translations django.po (German) 2022-01-30 11:38:28 -08:00
Mouse Reeve
3fdc1a3d40 New translations django.po (Spanish) 2022-01-30 11:38:27 -08:00
Mouse Reeve
392c1959fe New translations django.po (Czech) 2022-01-30 11:38:26 -08:00
Mouse Reeve
80849566c1 New translations django.po (Hungarian) 2022-01-30 11:38:25 -08:00
Mouse Reeve
210b259138 New translations django.po (Japanese) 2022-01-30 11:38:24 -08:00
Mouse Reeve
b7e02b49ba New translations django.po (Oulipo) 2022-01-30 11:38:23 -08:00
Mouse Reeve
906772bd98 New translations django.po (Galician) 2022-01-30 11:38:22 -08:00
Mouse Reeve
4b6264f967 New translations django.po (Vietnamese) 2022-01-30 11:38:20 -08:00
Mouse Reeve
e10bd68dfb New translations django.po (Chinese Traditional) 2022-01-30 11:38:19 -08:00
Mouse Reeve
826635a76f New translations django.po (Chinese Simplified) 2022-01-30 11:38:18 -08:00
Mouse Reeve
192f41b506 New translations django.po (Ukrainian) 2022-01-30 11:38:17 -08:00
Mouse Reeve
927f5bd9a9 New translations django.po (Italian) 2022-01-30 11:38:16 -08:00
Mouse Reeve
78c98f53e7 New translations django.po (Turkish) 2022-01-30 11:38:15 -08:00
Mouse Reeve
99e43d6d0c New translations django.po (Serbian (Cyrillic)) 2022-01-30 11:38:14 -08:00
Mouse Reeve
6782c41416 New translations django.po (Russian) 2022-01-30 11:38:13 -08:00
Mouse Reeve
7d088f7003 New translations django.po (Portuguese) 2022-01-30 11:38:12 -08:00
Mouse Reeve
ef9cf95b51 New translations django.po (Polish) 2022-01-30 11:38:10 -08:00
Mouse Reeve
69a0fca159 New translations django.po (Norwegian) 2022-01-30 11:38:09 -08:00
Mouse Reeve
47bda55136 New translations django.po (Korean) 2022-01-30 11:38:08 -08:00
Mouse Reeve
d5cc8dcdb3 New translations django.po (Swedish) 2022-01-30 11:38:07 -08:00
Mouse Reeve
6c6f2b706c New translations django.po (Lithuanian) 2022-01-30 11:38:06 -08:00
Mouse Reeve
5642fea119 New translations django.po (Lithuanian) 2022-01-30 10:30:30 -08:00
Mouse Reeve
d79331a912 New translations django.po (Lithuanian) 2022-01-30 09:27:34 -08:00
Mouse Reeve
afd051ac4c New translations django.po (Lithuanian) 2022-01-30 01:36:25 -08:00
Mouse Reeve
dfeee97cf7 New translations django.po (Lithuanian) 2022-01-30 00:26:14 -08:00
Mouse Reeve
63c7bc5162 New translations django.po (Portuguese, Brazilian) 2022-01-29 06:28:48 -08:00
Mouse Reeve
a44f943dd4 New translations django.po (German) 2022-01-29 06:28:47 -08:00
Mouse Reeve
14e721df87 New translations django.po (Portuguese, Brazilian) 2022-01-29 05:32:27 -08:00
Mouse Reeve
6d82f92c75 New translations django.po (Italian) 2022-01-28 11:04:53 -08:00
Mouse Reeve
db735f92a7 New translations django.po (French) 2022-01-28 03:29:38 -08:00
Mouse Reeve
53943fa5c8 New translations django.po (French) 2022-01-28 02:24:20 -08:00
Mouse Reeve
88e37edbb5 New translations django.po (Basque) 2022-01-28 01:16:38 -08:00
Mouse Reeve
253b1d5ac9 New translations django.po (Spanish) 2022-01-28 00:06:32 -08:00
Mouse Reeve
ed9f677515 New translations django.po (Galician) 2022-01-27 21:04:50 -08:00
Mouse Reeve
89b16bf342 New translations django.po (Eastern Min) 2022-01-27 20:04:14 -08:00
Mouse Reeve
4cf1b315dc New translations django.po (Finnish) 2022-01-27 20:04:12 -08:00
Mouse Reeve
e63e3fd740 New translations django.po (Basque) 2022-01-27 20:04:11 -08:00
Mouse Reeve
14c9fd9e70 New translations django.po (Greek) 2022-01-27 20:04:10 -08:00
Mouse Reeve
b8aef443d7 New translations django.po (Danish) 2022-01-27 20:04:09 -08:00
Mouse Reeve
e19f889024 New translations django.po (Catalan) 2022-01-27 20:04:08 -08:00
Mouse Reeve
3a0c585fc5 New translations django.po (Arabic) 2022-01-27 20:04:07 -08:00
Mouse Reeve
a7730ddf7e New translations django.po (Hebrew) 2022-01-27 20:04:05 -08:00
Mouse Reeve
63c438cc2c New translations django.po (Afrikaans) 2022-01-27 20:04:04 -08:00
Mouse Reeve
2c12c3c66e New translations django.po (Romanian) 2022-01-27 20:04:03 -08:00
Mouse Reeve
03c223831c New translations django.po (French) 2022-01-27 20:04:01 -08:00
Mouse Reeve
e1c60f9f8c New translations django.po (Welsh) 2022-01-27 20:04:00 -08:00
Mouse Reeve
8b9487b175 New translations django.po (Portuguese, Brazilian) 2022-01-27 20:03:59 -08:00
Mouse Reeve
4160ec646a New translations django.po (Dutch) 2022-01-27 20:03:58 -08:00
Mouse Reeve
91600a25c3 New translations django.po (German) 2022-01-27 20:03:57 -08:00
Mouse Reeve
12d6854ff1 New translations django.po (Spanish) 2022-01-27 20:03:55 -08:00
Mouse Reeve
130407c0d4 New translations django.po (Czech) 2022-01-27 20:03:54 -08:00
Mouse Reeve
2e42fcb898 New translations django.po (Hungarian) 2022-01-27 20:03:53 -08:00
Mouse Reeve
e6e04990f4 New translations django.po (Japanese) 2022-01-27 20:03:52 -08:00
Mouse Reeve
999d96d8c2 New translations django.po (Oulipo) 2022-01-27 20:03:51 -08:00
Mouse Reeve
713546522b New translations django.po (Galician) 2022-01-27 20:03:49 -08:00
Mouse Reeve
1d6d917e6d New translations django.po (Vietnamese) 2022-01-27 20:03:48 -08:00
Mouse Reeve
89f9536724 New translations django.po (Chinese Traditional) 2022-01-27 20:03:47 -08:00
Mouse Reeve
4620d3d285 New translations django.po (Chinese Simplified) 2022-01-27 20:03:46 -08:00
Mouse Reeve
d7dad23dcc New translations django.po (Ukrainian) 2022-01-27 20:03:44 -08:00
Mouse Reeve
49f5a7d9ea New translations django.po (Italian) 2022-01-27 20:03:43 -08:00
Mouse Reeve
337d5b634f New translations django.po (Turkish) 2022-01-27 20:03:42 -08:00
Mouse Reeve
3409e76540 New translations django.po (Serbian (Cyrillic)) 2022-01-27 20:03:41 -08:00
Mouse Reeve
f3cc799f56 New translations django.po (Russian) 2022-01-27 20:03:40 -08:00
Mouse Reeve
bfde00968c New translations django.po (Portuguese) 2022-01-27 20:03:38 -08:00
Mouse Reeve
57ce8975fd New translations django.po (Polish) 2022-01-27 20:03:37 -08:00
Mouse Reeve
a85998392b New translations django.po (Norwegian) 2022-01-27 20:03:36 -08:00
Mouse Reeve
c0aaeab3a7 New translations django.po (Korean) 2022-01-27 20:03:35 -08:00
Mouse Reeve
bd89d4e210 New translations django.po (Swedish) 2022-01-27 20:03:33 -08:00
Mouse Reeve
16d1d663c4 New translations django.po (Lithuanian) 2022-01-27 20:03:32 -08:00
Mouse Reeve
caf24ca26c New translations django.po (Swedish) 2022-01-27 09:00:56 -08:00
Mouse Reeve
aaa7cbe01a New translations django.po (Basque) 2022-01-27 08:04:20 -08:00
Mouse Reeve
dd22edc551 New translations django.po (Basque) 2022-01-27 07:01:20 -08:00
Mouse Reeve
5f24107e35 New translations django.po (Spanish) 2022-01-26 03:26:17 -08:00
Mouse Reeve
a1f355bf43 New translations django.po (Basque) 2022-01-25 04:55:47 -08:00
Mouse Reeve
13269cf491 New translations django.po (Basque) 2022-01-25 03:49:04 -08:00
Mouse Reeve
8ffb412644 New translations django.po (Basque) 2022-01-25 02:24:01 -08:00
Mouse Reeve
223cfbbd73 New translations django.po (Basque) 2022-01-25 01:18:35 -08:00
Mouse Reeve
a772d88ce4 New translations django.po (Eastern Min) 2022-01-24 10:55:21 -08:00
Mouse Reeve
de9340b91d New translations django.po (Finnish) 2022-01-24 10:55:20 -08:00
Mouse Reeve
f1468bcc30 New translations django.po (Basque) 2022-01-24 10:55:18 -08:00
Mouse Reeve
b8ddfec02c New translations django.po (Greek) 2022-01-24 10:55:17 -08:00
Mouse Reeve
746b97f95b New translations django.po (Danish) 2022-01-24 10:55:16 -08:00
Mouse Reeve
8b45a9a259 New translations django.po (Catalan) 2022-01-24 10:55:15 -08:00
Mouse Reeve
f84165c885 New translations django.po (Arabic) 2022-01-24 10:55:14 -08:00
Mouse Reeve
aa83bf4300 New translations django.po (Hebrew) 2022-01-24 10:55:12 -08:00
Mouse Reeve
04428a4664 New translations django.po (Afrikaans) 2022-01-24 10:55:11 -08:00
Mouse Reeve
9306634502 New translations django.po (Romanian) 2022-01-24 10:55:10 -08:00
Mouse Reeve
feec9a8881 New translations django.po (French) 2022-01-24 10:55:09 -08:00
Mouse Reeve
fa65663a22 New translations django.po (Welsh) 2022-01-24 10:55:07 -08:00
Mouse Reeve
806bba0824 New translations django.po (Portuguese, Brazilian) 2022-01-24 10:55:06 -08:00
Mouse Reeve
5582215b41 New translations django.po (Dutch) 2022-01-24 10:55:05 -08:00
Mouse Reeve
1faa29ceaa New translations django.po (German) 2022-01-24 10:55:03 -08:00
Mouse Reeve
eb066859fa New translations django.po (Spanish) 2022-01-24 10:55:02 -08:00
Mouse Reeve
8c02f5eb70 New translations django.po (Czech) 2022-01-24 10:54:59 -08:00
Mouse Reeve
7158aec4d0 New translations django.po (Hungarian) 2022-01-24 10:54:58 -08:00
Mouse Reeve
a116728037 New translations django.po (Japanese) 2022-01-24 10:54:57 -08:00
Mouse Reeve
cb0c6c6fe2 New translations django.po (Oulipo) 2022-01-24 10:54:56 -08:00
Mouse Reeve
642de97554 New translations django.po (Galician) 2022-01-24 10:54:54 -08:00
Mouse Reeve
999c1077da New translations django.po (Vietnamese) 2022-01-24 10:54:53 -08:00
Mouse Reeve
0319a11a4e New translations django.po (Chinese Traditional) 2022-01-24 10:54:52 -08:00
Mouse Reeve
0694f0d611 New translations django.po (Chinese Simplified) 2022-01-24 10:54:51 -08:00
Mouse Reeve
152eb5213c New translations django.po (Ukrainian) 2022-01-24 10:54:49 -08:00
Mouse Reeve
040943d8cb New translations django.po (Italian) 2022-01-24 10:54:48 -08:00
Mouse Reeve
35da75095e New translations django.po (Turkish) 2022-01-24 10:54:47 -08:00
Mouse Reeve
62cb81a353 New translations django.po (Serbian (Cyrillic)) 2022-01-24 10:54:46 -08:00
Mouse Reeve
79e715b639 New translations django.po (Russian) 2022-01-24 10:54:45 -08:00
Mouse Reeve
63ce0f2de6 New translations django.po (Portuguese) 2022-01-24 10:54:43 -08:00
Mouse Reeve
2f965d5b14 New translations django.po (Polish) 2022-01-24 10:54:42 -08:00
Mouse Reeve
deaee91575 New translations django.po (Norwegian) 2022-01-24 10:54:40 -08:00
Mouse Reeve
3cff77a4bc New translations django.po (Korean) 2022-01-24 10:54:39 -08:00
Mouse Reeve
6f6a7da004 New translations django.po (Swedish) 2022-01-24 10:54:38 -08:00
Mouse Reeve
5f1f7006b7 New translations django.po (Lithuanian) 2022-01-24 10:54:35 -08:00
Mouse Reeve
3d21b8c831 New translations django.po (Basque) 2022-01-24 03:54:53 -08:00
Mouse Reeve
9c93c8a20c New translations django.po (Basque) 2022-01-24 02:57:15 -08:00
Mouse Reeve
b736071d50 New translations django.po (Arabic) 2022-01-23 08:30:26 -08:00
Mouse Reeve
5aaf93fde5 New translations django.po (Swedish) 2022-01-23 01:43:49 -08:00
Mouse Reeve
ff31f2feef New translations django.po (Italian) 2022-01-22 04:25:53 -08:00
Mouse Reeve
3860a0b6f7 New translations django.po (Lithuanian) 2022-01-21 14:21:28 -08:00
Mouse Reeve
4633ae2c20 New translations django.po (Lithuanian) 2022-01-21 13:03:01 -08:00
Mouse Reeve
0dde27ca3f New translations django.po (Basque) 2022-01-21 08:42:33 -08:00
Mouse Reeve
2d7c37c6d9 New translations django.po (Galician) 2022-01-21 00:06:33 -08:00
Mouse Reeve
4cbc041aff New translations django.po (Eastern Min) 2022-01-20 14:35:14 -08:00
Mouse Reeve
40a712f126 New translations django.po (Finnish) 2022-01-20 14:35:13 -08:00
Mouse Reeve
4cecc44208 New translations django.po (Basque) 2022-01-20 14:35:12 -08:00
Mouse Reeve
a531be755c New translations django.po (Greek) 2022-01-20 14:35:10 -08:00
Mouse Reeve
36091de552 New translations django.po (Danish) 2022-01-20 14:35:09 -08:00
Mouse Reeve
894d113668 New translations django.po (Catalan) 2022-01-20 14:35:08 -08:00
Mouse Reeve
45816f20b4 New translations django.po (Arabic) 2022-01-20 14:35:07 -08:00
Mouse Reeve
c6dde26202 New translations django.po (Hebrew) 2022-01-20 14:35:06 -08:00
Mouse Reeve
56236ce97a New translations django.po (Afrikaans) 2022-01-20 14:35:04 -08:00
Mouse Reeve
e6f04628a7 New translations django.po (Romanian) 2022-01-20 14:35:03 -08:00
Mouse Reeve
072df2cc3b New translations django.po (French) 2022-01-20 14:35:02 -08:00
Mouse Reeve
265e3541ea New translations django.po (Welsh) 2022-01-20 14:34:59 -08:00
Mouse Reeve
b6a98f0d3b New translations django.po (Portuguese, Brazilian) 2022-01-20 14:34:58 -08:00
Mouse Reeve
b1d5cfaba4 New translations django.po (Dutch) 2022-01-20 14:34:57 -08:00
Mouse Reeve
ce68cbd067 New translations django.po (German) 2022-01-20 14:34:56 -08:00
Mouse Reeve
71535e7fc1 New translations django.po (Spanish) 2022-01-20 14:34:54 -08:00
Mouse Reeve
83887c9913 New translations django.po (Czech) 2022-01-20 14:34:53 -08:00
Mouse Reeve
2fa41bb61b New translations django.po (Hungarian) 2022-01-20 14:34:52 -08:00
Mouse Reeve
ad5f92665f New translations django.po (Japanese) 2022-01-20 14:34:51 -08:00
Mouse Reeve
0e1f91ef6b New translations django.po (Oulipo) 2022-01-20 14:34:50 -08:00
Mouse Reeve
dfb356e597 New translations django.po (Galician) 2022-01-20 14:34:48 -08:00
Mouse Reeve
51dbce5c56 New translations django.po (Vietnamese) 2022-01-20 14:34:47 -08:00
Mouse Reeve
c0be69597b New translations django.po (Chinese Traditional) 2022-01-20 14:34:46 -08:00
Mouse Reeve
f82cc595b5 New translations django.po (Chinese Simplified) 2022-01-20 14:34:44 -08:00
Mouse Reeve
5fe1a405a2 New translations django.po (Ukrainian) 2022-01-20 14:34:42 -08:00
Mouse Reeve
ae69db823b New translations django.po (Italian) 2022-01-20 14:34:41 -08:00
Mouse Reeve
a31f0d3029 New translations django.po (Turkish) 2022-01-20 14:34:40 -08:00
Mouse Reeve
0dcf1d84c1 New translations django.po (Serbian (Cyrillic)) 2022-01-20 14:34:38 -08:00
Mouse Reeve
e95214f4f7 New translations django.po (Russian) 2022-01-20 14:34:37 -08:00
Mouse Reeve
b5077a4afe New translations django.po (Portuguese) 2022-01-20 14:34:36 -08:00
Mouse Reeve
e76187526b New translations django.po (Polish) 2022-01-20 14:34:35 -08:00
Mouse Reeve
9c7a930759 New translations django.po (Norwegian) 2022-01-20 14:34:34 -08:00
Mouse Reeve
fc2b6823b3 New translations django.po (Korean) 2022-01-20 14:34:32 -08:00
Mouse Reeve
3a244fdf05 New translations django.po (Swedish) 2022-01-20 14:34:31 -08:00
Mouse Reeve
6326ee53de New translations django.po (Lithuanian) 2022-01-20 14:34:30 -08:00
Mouse Reeve
ebcb9febce New translations django.po (Italian) 2022-01-20 13:10:31 -08:00
Mouse Reeve
39fbec1362 New translations django.po (Russian) 2022-01-20 08:30:05 -08:00
Mouse Reeve
a6c32f1abb New translations django.po (Catalan) 2022-01-20 07:34:14 -08:00
Mouse Reeve
f15c147c02 New translations django.po (Catalan) 2022-01-20 06:23:38 -08:00
Mouse Reeve
2415a1690f New translations django.po (German) 2022-01-20 00:20:24 -08:00
Mouse Reeve
727c703678 New translations django.po (Italian) 2022-01-19 15:20:45 -08:00
Mouse Reeve
a6d7719535 New translations django.po (Italian) 2022-01-19 14:21:52 -08:00
Mouse Reeve
6bc0255e75 New translations django.po (Hungarian) 2022-01-19 14:21:51 -08:00
Mouse Reeve
2cad4e53c4 New translations django.po (German) 2022-01-19 06:47:29 -08:00
Mouse Reeve
0842ebfaed New translations django.po (Swedish) 2022-01-19 01:14:38 -08:00
Mouse Reeve
e0ee32107d New translations django.po (Swedish) 2022-01-19 00:13:20 -08:00
Mouse Reeve
62e57312fe New translations django.po (Swedish) 2022-01-18 22:51:21 -08:00
Mouse Reeve
db92b190f2 New translations django.po (Portuguese, Brazilian) 2022-01-18 06:11:00 -08:00
Mouse Reeve
b0027fe531 New translations django.po (Galician) 2022-01-17 22:22:50 -08:00
Mouse Reeve
f31a9cbcdc New translations django.po (Galician) 2022-01-17 21:14:25 -08:00
Mouse Reeve
2b36c1ffa0 New translations django.po (Swedish) 2022-01-17 20:15:36 -08:00
Mouse Reeve
482188a413 New translations django.po (Swedish) 2022-01-17 19:09:29 -08:00
Mouse Reeve
a68b6b9591 New translations django.po (German) 2022-01-17 19:09:27 -08:00
Mouse Reeve
9d06681a84 New translations django.po (Swedish) 2022-01-17 18:11:02 -08:00
Mouse Reeve
62287c0ff7 New translations django.po (Swedish) 2022-01-17 17:10:34 -08:00
Mouse Reeve
6bc157751a New translations django.po (German) 2022-01-17 16:12:42 -08:00
Mouse Reeve
2fca13d553 New translations django.po (German) 2022-01-17 15:17:29 -08:00
Mouse Reeve
114c45eb1d New translations django.po (German) 2022-01-17 14:00:42 -08:00
Mouse Reeve
03188fd5b6 New translations django.po (Spanish) 2022-01-17 12:56:00 -08:00
Mouse Reeve
b6cbd97b1d New translations django.po (French) 2022-01-17 12:55:59 -08:00
Mouse Reeve
96e5c5767a New translations django.po (Eastern Min) 2022-01-17 11:57:49 -08:00
Mouse Reeve
d75a52ffe9 New translations django.po (Finnish) 2022-01-17 11:57:48 -08:00
Mouse Reeve
3c650c2ec7 New translations django.po (Basque) 2022-01-17 11:57:47 -08:00
Mouse Reeve
8ebaa175f2 New translations django.po (Greek) 2022-01-17 11:57:46 -08:00
Mouse Reeve
4e44f19ff4 New translations django.po (Danish) 2022-01-17 11:57:44 -08:00
Mouse Reeve
4bd21d3647 New translations django.po (Catalan) 2022-01-17 11:57:43 -08:00
Mouse Reeve
878e786eae New translations django.po (Arabic) 2022-01-17 11:57:41 -08:00
Mouse Reeve
76fa3dfa76 New translations django.po (Hebrew) 2022-01-17 11:57:40 -08:00
Mouse Reeve
cbd376e698 New translations django.po (Afrikaans) 2022-01-17 11:57:39 -08:00
Mouse Reeve
a29a1895b3 New translations django.po (Romanian) 2022-01-17 11:57:38 -08:00
Mouse Reeve
faf87dc7ca New translations django.po (French) 2022-01-17 11:57:37 -08:00
Mouse Reeve
15166d7fef New translations django.po (Welsh) 2022-01-17 11:57:36 -08:00
Mouse Reeve
184119de1a New translations django.po (Portuguese, Brazilian) 2022-01-17 11:57:34 -08:00
Mouse Reeve
1860aa7afb New translations django.po (Dutch) 2022-01-17 11:57:33 -08:00
Mouse Reeve
78ca24d5f8 New translations django.po (German) 2022-01-17 11:57:32 -08:00
Mouse Reeve
6217cc8aec New translations django.po (Spanish) 2022-01-17 11:57:31 -08:00
Mouse Reeve
1635965f89 New translations django.po (Czech) 2022-01-17 11:57:30 -08:00
Mouse Reeve
577f39b7ef New translations django.po (Hungarian) 2022-01-17 11:57:29 -08:00
Mouse Reeve
57ee72065d New translations django.po (Japanese) 2022-01-17 11:57:27 -08:00
Mouse Reeve
7c662e4a74 New translations django.po (Oulipo) 2022-01-17 11:57:26 -08:00
Mouse Reeve
4beb1c02a4 New translations django.po (Galician) 2022-01-17 11:57:25 -08:00
Mouse Reeve
0084ea446d New translations django.po (Vietnamese) 2022-01-17 11:57:24 -08:00
Mouse Reeve
f29daf0293 New translations django.po (Chinese Traditional) 2022-01-17 11:57:23 -08:00
Mouse Reeve
dc4fe3a722 New translations django.po (Chinese Simplified) 2022-01-17 11:57:22 -08:00
Mouse Reeve
58ba6c0543 New translations django.po (Ukrainian) 2022-01-17 11:57:21 -08:00
Mouse Reeve
08c0a07040 New translations django.po (Italian) 2022-01-17 11:57:19 -08:00
Mouse Reeve
2ca67d1096 New translations django.po (Turkish) 2022-01-17 11:57:18 -08:00
Mouse Reeve
ccbfbe286b New translations django.po (Serbian (Cyrillic)) 2022-01-17 11:57:17 -08:00
Mouse Reeve
c7dfbd9472 New translations django.po (Russian) 2022-01-17 11:57:15 -08:00
Mouse Reeve
88107e4b0b New translations django.po (Portuguese) 2022-01-17 11:57:14 -08:00
Mouse Reeve
605dfa6e68 New translations django.po (Polish) 2022-01-17 11:57:13 -08:00
Mouse Reeve
59ed6a21d1 New translations django.po (Norwegian) 2022-01-17 11:57:12 -08:00
Mouse Reeve
1fe97e781c New translations django.po (Korean) 2022-01-17 11:57:10 -08:00
Mouse Reeve
6f71ae72a3 New translations django.po (Swedish) 2022-01-17 11:57:09 -08:00
Mouse Reeve
4254dbfed6 New translations django.po (Lithuanian) 2022-01-17 11:57:08 -08:00
Mouse Reeve
89d21f54cb New translations django.po (Eastern Min) 2022-01-17 09:11:11 -08:00
Mouse Reeve
88fca08bac New translations django.po (Finnish) 2022-01-17 09:11:10 -08:00
Mouse Reeve
557e47d57b New translations django.po (Basque) 2022-01-17 09:11:08 -08:00
Mouse Reeve
8f24a763bf New translations django.po (Greek) 2022-01-17 09:11:07 -08:00
Mouse Reeve
166afeca5e New translations django.po (Danish) 2022-01-17 09:11:06 -08:00
Mouse Reeve
610ba6de6c New translations django.po (Catalan) 2022-01-17 09:11:05 -08:00
Mouse Reeve
e418d63b2e New translations django.po (Arabic) 2022-01-17 09:11:03 -08:00
Mouse Reeve
0476187502 New translations django.po (Hebrew) 2022-01-17 09:11:02 -08:00
Mouse Reeve
5e96e2fd58 New translations django.po (Afrikaans) 2022-01-17 09:11:00 -08:00
Mouse Reeve
0397799744 New translations django.po (Romanian) 2022-01-17 09:10:59 -08:00
Mouse Reeve
0a8cbebda0 New translations django.po (French) 2022-01-17 09:10:58 -08:00
Mouse Reeve
a6e5596b90 New translations django.po (Welsh) 2022-01-17 09:10:56 -08:00
Mouse Reeve
2dcbc3e6ee New translations django.po (Portuguese, Brazilian) 2022-01-17 09:10:55 -08:00
Mouse Reeve
365b15a9df New translations django.po (Dutch) 2022-01-17 09:10:54 -08:00
Mouse Reeve
dede16d5d1 New translations django.po (German) 2022-01-17 09:10:53 -08:00
Mouse Reeve
c668caf642 New translations django.po (Spanish) 2022-01-17 09:10:51 -08:00
Mouse Reeve
5038a6ab2f New translations django.po (Czech) 2022-01-17 09:10:50 -08:00
Mouse Reeve
a19a8d834a New translations django.po (Hungarian) 2022-01-17 09:10:49 -08:00
Mouse Reeve
cb234039dd New translations django.po (Japanese) 2022-01-17 09:10:48 -08:00
Mouse Reeve
3afacf8158 New translations django.po (Oulipo) 2022-01-17 09:10:46 -08:00
Mouse Reeve
b139aad82d New translations django.po (Galician) 2022-01-17 09:10:45 -08:00
Mouse Reeve
cd69669fdc New translations django.po (Vietnamese) 2022-01-17 09:10:44 -08:00
Mouse Reeve
f9e81398a3 New translations django.po (Chinese Traditional) 2022-01-17 09:10:43 -08:00
Mouse Reeve
aeb43b96bb New translations django.po (Chinese Simplified) 2022-01-17 09:10:41 -08:00
Mouse Reeve
8207ec33eb New translations django.po (Ukrainian) 2022-01-17 09:10:40 -08:00
Mouse Reeve
2e3735c91e New translations django.po (Italian) 2022-01-17 09:10:39 -08:00
Mouse Reeve
76f6c99dac New translations django.po (Turkish) 2022-01-17 09:10:38 -08:00
Mouse Reeve
0933ff9354 New translations django.po (Serbian (Cyrillic)) 2022-01-17 09:10:36 -08:00
Mouse Reeve
df101f8595 New translations django.po (Russian) 2022-01-17 09:10:35 -08:00
Mouse Reeve
383a723e76 New translations django.po (Portuguese) 2022-01-17 09:10:34 -08:00
Mouse Reeve
248a9ae319 New translations django.po (Polish) 2022-01-17 09:10:33 -08:00
Mouse Reeve
ded349488f New translations django.po (Norwegian) 2022-01-17 09:10:32 -08:00
Mouse Reeve
336e11d762 New translations django.po (Korean) 2022-01-17 09:10:30 -08:00
Mouse Reeve
e572491e8a New translations django.po (Swedish) 2022-01-17 09:10:29 -08:00
Mouse Reeve
57a189ed69 New translations django.po (Lithuanian) 2022-01-17 09:10:27 -08:00
Mouse Reeve
efb99fc333 New translations django.po (Italian) 2022-01-16 11:12:59 -08:00
Mouse Reeve
f14510f68d New translations django.po (Italian) 2022-01-16 04:50:07 -08:00
Mouse Reeve
beb2dcc23b New translations django.po (Italian) 2022-01-15 23:58:42 -08:00
Mouse Reeve
439a69c88f New translations django.po (Italian) 2022-01-15 12:39:17 -08:00
Mouse Reeve
bce7d5e0a5 New translations django.po (Basque) 2022-01-14 15:43:02 -08:00
Mouse Reeve
35da943b22 New translations django.po (Basque) 2022-01-14 14:47:38 -08:00
Mouse Reeve
2952cb000a New translations django.po (Polish) 2022-01-14 04:04:15 -08:00
Mouse Reeve
58eebce2ae New translations django.po (Galician) 2022-01-13 23:13:13 -08:00
Mouse Reeve
8bbc187dd0 New translations django.po (Lithuanian) 2022-01-13 16:49:45 -08:00
Mouse Reeve
5fe8b14832 New translations django.po (Portuguese, Brazilian) 2022-01-13 13:04:47 -08:00
Mouse Reeve
cbfb2fce1f New translations django.po (Spanish) 2022-01-13 10:45:59 -08:00
Mouse Reeve
8b71333466 New translations django.po (Eastern Min) 2022-01-13 09:51:11 -08:00
Mouse Reeve
e5cf219f73 New translations django.po (Finnish) 2022-01-13 09:51:10 -08:00
Mouse Reeve
a43704c858 New translations django.po (Basque) 2022-01-13 09:51:09 -08:00
Mouse Reeve
d9827f4c5f New translations django.po (Greek) 2022-01-13 09:51:07 -08:00
Mouse Reeve
5f739b7957 New translations django.po (Danish) 2022-01-13 09:51:06 -08:00
Mouse Reeve
e721119e45 New translations django.po (Catalan) 2022-01-13 09:51:05 -08:00
Mouse Reeve
52edb23d8a New translations django.po (Arabic) 2022-01-13 09:51:04 -08:00
Mouse Reeve
9ad21f6529 New translations django.po (Hebrew) 2022-01-13 09:51:02 -08:00
Mouse Reeve
2a32564a12 New translations django.po (Afrikaans) 2022-01-13 09:51:01 -08:00
Mouse Reeve
8130a4a63b New translations django.po (Romanian) 2022-01-13 09:50:59 -08:00
Mouse Reeve
58fa87180c New translations django.po (French) 2022-01-13 09:50:58 -08:00
Mouse Reeve
4676566e72 New translations django.po (Welsh) 2022-01-13 09:50:57 -08:00
Mouse Reeve
9dc84afd96 New translations django.po (Portuguese, Brazilian) 2022-01-13 09:50:55 -08:00
Mouse Reeve
44de5b2913 New translations django.po (Dutch) 2022-01-13 09:50:54 -08:00
Mouse Reeve
806baa2f36 New translations django.po (German) 2022-01-13 09:50:53 -08:00
Mouse Reeve
10d7913f1f New translations django.po (Spanish) 2022-01-13 09:50:51 -08:00
Mouse Reeve
952033813e New translations django.po (Czech) 2022-01-13 09:50:50 -08:00
Mouse Reeve
f62a427f36 New translations django.po (Hungarian) 2022-01-13 09:50:49 -08:00
Mouse Reeve
37e8487213 New translations django.po (Japanese) 2022-01-13 09:50:48 -08:00
Mouse Reeve
51d6209b27 New translations django.po (Oulipo) 2022-01-13 09:50:46 -08:00
Mouse Reeve
f2c6394d7c New translations django.po (Galician) 2022-01-13 09:50:45 -08:00
Mouse Reeve
6766244e86 New translations django.po (Vietnamese) 2022-01-13 09:50:44 -08:00
Mouse Reeve
8584abe2ec New translations django.po (Chinese Traditional) 2022-01-13 09:50:43 -08:00
Mouse Reeve
df3d233e35 New translations django.po (Chinese Simplified) 2022-01-13 09:50:41 -08:00
Mouse Reeve
0fb10ad1f3 New translations django.po (Ukrainian) 2022-01-13 09:50:40 -08:00
Mouse Reeve
b832a54120 New translations django.po (Italian) 2022-01-13 09:50:39 -08:00
Mouse Reeve
176131f342 New translations django.po (Turkish) 2022-01-13 09:50:38 -08:00
Mouse Reeve
eef561a61c New translations django.po (Serbian (Cyrillic)) 2022-01-13 09:50:37 -08:00
Mouse Reeve
8106d19c79 New translations django.po (Russian) 2022-01-13 09:50:35 -08:00
Mouse Reeve
ae3a869a61 New translations django.po (Portuguese) 2022-01-13 09:50:34 -08:00
Mouse Reeve
8ed192879f New translations django.po (Polish) 2022-01-13 09:50:33 -08:00
Mouse Reeve
40d1a34567 New translations django.po (Norwegian) 2022-01-13 09:50:32 -08:00
Mouse Reeve
908a5f6bd3 New translations django.po (Korean) 2022-01-13 09:50:30 -08:00
Mouse Reeve
bd88bea872 New translations django.po (Swedish) 2022-01-13 09:50:29 -08:00
Mouse Reeve
f1bd035824 New translations django.po (Lithuanian) 2022-01-13 09:50:26 -08:00
Mouse Reeve
a6def314cd New translations django.po (Arabic) 2022-01-13 05:35:02 -08:00
Mouse Reeve
3e3be30384 New translations django.po (Polish) 2022-01-13 03:32:33 -08:00
Mouse Reeve
1785cc1238 New translations django.po (Arabic) 2022-01-13 03:32:32 -08:00
Mouse Reeve
8e36c80359 New translations django.po (French) 2022-01-13 03:32:31 -08:00
Mouse Reeve
d2e9ef76bf New translations django.po (Polish) 2022-01-13 02:27:01 -08:00
Mouse Reeve
01a6efa56d New translations django.po (Polish) 2022-01-13 00:17:04 -08:00
Mouse Reeve
72af78f64a New translations django.po (German) 2022-01-12 23:16:42 -08:00
Mouse Reeve
33676a1afc New translations django.po (Galician) 2022-01-12 20:45:02 -08:00
Mouse Reeve
1752cc6123 New translations django.po (Polish) 2022-01-12 15:57:53 -08:00
Mouse Reeve
03ce2af1ea New translations django.po (Norwegian) 2022-01-12 15:57:52 -08:00
Mouse Reeve
f074ab945f New translations django.po (Polish) 2022-01-12 14:58:08 -08:00
Mouse Reeve
f14aaa8c44 New translations django.po (Swedish) 2022-01-12 13:26:32 -08:00
Mouse Reeve
a54df35079 New translations django.po (Spanish) 2022-01-12 13:26:31 -08:00
Mouse Reeve
4eceae60ff New translations django.po (Portuguese, Brazilian) 2022-01-12 13:26:29 -08:00
Mouse Reeve
8511fc55d0 New translations django.po (Eastern Min) 2022-01-12 11:52:49 -08:00
Mouse Reeve
a12c21ed9e New translations django.po (Finnish) 2022-01-12 11:52:48 -08:00
Mouse Reeve
d5581230e1 New translations django.po (Basque) 2022-01-12 11:52:47 -08:00
Mouse Reeve
a1f834aadd New translations django.po (Greek) 2022-01-12 11:52:46 -08:00
Mouse Reeve
ee2986c627 New translations django.po (Danish) 2022-01-12 11:52:45 -08:00
Mouse Reeve
aa3b041853 New translations django.po (Catalan) 2022-01-12 11:52:44 -08:00
Mouse Reeve
b946837899 New translations django.po (Arabic) 2022-01-12 11:52:43 -08:00
Mouse Reeve
9c3e81f83d New translations django.po (Hebrew) 2022-01-12 11:52:42 -08:00
Mouse Reeve
319a9dd0df New translations django.po (Afrikaans) 2022-01-12 11:52:40 -08:00
Mouse Reeve
337946e800 New translations django.po (Romanian) 2022-01-12 11:52:39 -08:00
Mouse Reeve
0fa56d4a3d New translations django.po (French) 2022-01-12 11:52:38 -08:00
Mouse Reeve
00ee2103c0 New translations django.po (Welsh) 2022-01-12 11:52:37 -08:00
Mouse Reeve
7dcd7b45c7 New translations django.po (Portuguese, Brazilian) 2022-01-12 11:52:36 -08:00
Mouse Reeve
fa2fd3d704 New translations django.po (Dutch) 2022-01-12 11:52:34 -08:00
Mouse Reeve
6715e2379f New translations django.po (German) 2022-01-12 11:52:33 -08:00
Mouse Reeve
ebc4f46592 New translations django.po (Spanish) 2022-01-12 11:52:32 -08:00
Mouse Reeve
875ed8ea71 New translations django.po (Czech) 2022-01-12 11:52:31 -08:00
Mouse Reeve
06474fbf2d New translations django.po (Hungarian) 2022-01-12 11:52:30 -08:00
Mouse Reeve
171b688bae New translations django.po (Japanese) 2022-01-12 11:52:28 -08:00
Mouse Reeve
0c7f228f4c New translations django.po (Oulipo) 2022-01-12 11:52:27 -08:00
Mouse Reeve
7bc7e1d53a New translations django.po (Galician) 2022-01-12 11:52:26 -08:00
Mouse Reeve
4a77aa8019 New translations django.po (Vietnamese) 2022-01-12 11:52:24 -08:00
Mouse Reeve
1d95facfb2 New translations django.po (Chinese Traditional) 2022-01-12 11:52:22 -08:00
Mouse Reeve
a6a6df9e43 New translations django.po (Chinese Simplified) 2022-01-12 11:52:21 -08:00
Mouse Reeve
dc18e75541 New translations django.po (Ukrainian) 2022-01-12 11:52:18 -08:00
Mouse Reeve
d7655db15e New translations django.po (Italian) 2022-01-12 11:52:17 -08:00
Mouse Reeve
02e107748f New translations django.po (Turkish) 2022-01-12 11:52:16 -08:00
Mouse Reeve
3d69b030b2 New translations django.po (Serbian (Cyrillic)) 2022-01-12 11:52:15 -08:00
Mouse Reeve
da9084035d New translations django.po (Russian) 2022-01-12 11:52:14 -08:00
Mouse Reeve
0f04250953 New translations django.po (Portuguese) 2022-01-12 11:52:13 -08:00
Mouse Reeve
ed0a7cd9a9 New translations django.po (Polish) 2022-01-12 11:52:12 -08:00
Mouse Reeve
e7636a006e New translations django.po (Norwegian) 2022-01-12 11:52:10 -08:00
Mouse Reeve
58eeb03ce3 New translations django.po (Korean) 2022-01-12 11:52:09 -08:00
Mouse Reeve
1c31be5a70 New translations django.po (Swedish) 2022-01-12 11:52:08 -08:00
Mouse Reeve
5fbf0e9705 New translations django.po (Lithuanian) 2022-01-12 11:52:07 -08:00
Mouse Reeve
db91125e93 New translations django.po (Spanish) 2022-01-11 09:29:40 -08:00
Mouse Reeve
0900fe7e3b New translations django.po (Galician) 2022-01-11 00:47:42 -08:00
Mouse Reeve
2ccc9a07da New translations django.po (Galician) 2022-01-10 23:50:34 -08:00
Mouse Reeve
2fe3f4a448 New translations django.po (German) 2022-01-10 10:18:50 -08:00
Mouse Reeve
19b5d7b39e New translations django.po (Italian) 2022-01-10 09:22:30 -08:00
Mouse Reeve
56f3073ace New translations django.po (German) 2022-01-10 09:22:28 -08:00
Mouse Reeve
c87901cbff New translations django.po (Spanish) 2022-01-09 17:06:53 -08:00
Mouse Reeve
d973e5c91a New translations django.po (Portuguese, Brazilian) 2022-01-09 15:27:35 -08:00
Mouse Reeve
a087d1d1dc New translations django.po (Portuguese) 2022-01-09 13:14:10 -08:00
Mouse Reeve
1b48ea8284 New translations django.po (French) 2022-01-09 13:14:09 -08:00
Mouse Reeve
232bcae99c New translations django.po (Eastern Min) 2022-01-09 12:10:19 -08:00
Mouse Reeve
3707fdd825 New translations django.po (Finnish) 2022-01-09 12:10:17 -08:00
Mouse Reeve
f328e4e85b New translations django.po (Basque) 2022-01-09 12:10:16 -08:00
Mouse Reeve
89b679ac3c New translations django.po (Greek) 2022-01-09 12:10:14 -08:00
Mouse Reeve
e63309d6d2 New translations django.po (Danish) 2022-01-09 12:10:13 -08:00
Mouse Reeve
5082c925bc New translations django.po (Catalan) 2022-01-09 12:10:11 -08:00
Mouse Reeve
adbbeb89bc New translations django.po (Arabic) 2022-01-09 12:10:09 -08:00
Mouse Reeve
e2bf83565c New translations django.po (Hebrew) 2022-01-09 12:10:08 -08:00
Mouse Reeve
ae30ade221 New translations django.po (Afrikaans) 2022-01-09 12:10:06 -08:00
Mouse Reeve
2aee0c43fd New translations django.po (Romanian) 2022-01-09 12:10:04 -08:00
Mouse Reeve
fa7e0918a8 New translations django.po (French) 2022-01-09 12:10:03 -08:00
Mouse Reeve
bb28f46ab5 New translations django.po (Welsh) 2022-01-09 12:10:00 -08:00
Mouse Reeve
62abce9a10 New translations django.po (Portuguese, Brazilian) 2022-01-09 12:09:58 -08:00
Mouse Reeve
5780912983 New translations django.po (Dutch) 2022-01-09 12:09:57 -08:00
Mouse Reeve
23e0694bbc New translations django.po (German) 2022-01-09 12:09:55 -08:00
Mouse Reeve
bde382a9fd New translations django.po (Spanish) 2022-01-09 12:09:54 -08:00
Mouse Reeve
5543ff94d7 New translations django.po (Czech) 2022-01-09 12:09:52 -08:00
Mouse Reeve
c7d90c296e New translations django.po (Hungarian) 2022-01-09 12:09:51 -08:00
Mouse Reeve
75d766cba6 New translations django.po (Japanese) 2022-01-09 12:09:49 -08:00
Mouse Reeve
405ff781f3 New translations django.po (Oulipo) 2022-01-09 12:09:47 -08:00
Mouse Reeve
1cb7d9604e New translations django.po (Galician) 2022-01-09 12:09:46 -08:00
Mouse Reeve
5b3da30ab2 New translations django.po (Vietnamese) 2022-01-09 12:09:44 -08:00
Mouse Reeve
67494320fe New translations django.po (Chinese Traditional) 2022-01-09 12:09:43 -08:00
Mouse Reeve
3cb0b7ecfd New translations django.po (Chinese Simplified) 2022-01-09 12:09:42 -08:00
Mouse Reeve
3b89c0f153 New translations django.po (Ukrainian) 2022-01-09 12:09:40 -08:00
Mouse Reeve
90642965d0 New translations django.po (Italian) 2022-01-09 12:09:39 -08:00
Mouse Reeve
63947ec208 New translations django.po (Turkish) 2022-01-09 12:09:38 -08:00
Mouse Reeve
3c2f4ad972 New translations django.po (Serbian (Cyrillic)) 2022-01-09 12:09:37 -08:00
Mouse Reeve
7b5496fd09 New translations django.po (Russian) 2022-01-09 12:09:35 -08:00
Mouse Reeve
b08c1e4412 New translations django.po (Portuguese) 2022-01-09 12:09:32 -08:00
Mouse Reeve
efd0a788d2 New translations django.po (Polish) 2022-01-09 12:09:30 -08:00
Mouse Reeve
cfeb9c5a0f New translations django.po (Norwegian) 2022-01-09 12:09:29 -08:00
Mouse Reeve
5a94668399 New translations django.po (Korean) 2022-01-09 12:09:27 -08:00
Mouse Reeve
14ff2cf21d New translations django.po (Swedish) 2022-01-09 12:09:26 -08:00
Mouse Reeve
76b00e3997 New translations django.po (Lithuanian) 2022-01-09 12:09:24 -08:00
Mouse Reeve
d69788bec1 New translations django.po (Polish) 2022-01-09 09:34:28 -08:00
Mouse Reeve
e34ed52672 New translations django.po (Polish) 2022-01-09 08:21:29 -08:00
Mouse Reeve
f0fc6bf7b5 New translations django.po (Welsh) 2022-01-09 08:21:27 -08:00
Mouse Reeve
c2f3c34ba0 New translations django.po (Spanish) 2022-01-09 06:07:25 -08:00
Mouse Reeve
b77101c4a2 New translations django.po (German) 2022-01-09 06:07:23 -08:00
Mouse Reeve
61f4436834 New translations django.po (Italian) 2022-01-09 04:56:50 -08:00
Mouse Reeve
8a0aceae33 New translations django.po (French) 2022-01-09 04:56:49 -08:00
Mouse Reeve
19382ff5a1 New translations django.po (Norwegian) 2022-01-09 03:36:07 -08:00
Mouse Reeve
34c11f74d2 New translations django.po (German) 2022-01-09 03:36:06 -08:00
Mouse Reeve
785efe8937 New translations django.po (Norwegian) 2022-01-09 02:40:32 -08:00
Mouse Reeve
c99b9c7ba7 New translations django.po (German) 2022-01-09 02:40:30 -08:00
Mouse Reeve
3ec6240689 New translations django.po (German) 2022-01-09 01:45:21 -08:00
Mouse Reeve
21185ad935 New translations django.po (Eastern Min) 2022-01-08 18:53:24 -08:00
Mouse Reeve
c586b665e7 New translations django.po (Finnish) 2022-01-08 18:53:22 -08:00
Mouse Reeve
9a8249766e New translations django.po (Basque) 2022-01-08 18:53:20 -08:00
Mouse Reeve
6421235adb New translations django.po (Greek) 2022-01-08 18:53:19 -08:00
Mouse Reeve
8f88a7eaa8 New translations django.po (Danish) 2022-01-08 18:53:18 -08:00
Mouse Reeve
9efe27dbd6 New translations django.po (Catalan) 2022-01-08 18:53:16 -08:00
Mouse Reeve
255bd7e7d0 New translations django.po (Arabic) 2022-01-08 18:53:14 -08:00
Mouse Reeve
1c85ed7a38 New translations django.po (Hebrew) 2022-01-08 18:53:13 -08:00
Mouse Reeve
21070e672e New translations django.po (Afrikaans) 2022-01-08 18:53:11 -08:00
Mouse Reeve
180fbead1e New translations django.po (Romanian) 2022-01-08 18:53:09 -08:00
Mouse Reeve
84da3fc00a New translations django.po (French) 2022-01-08 18:53:07 -08:00
Mouse Reeve
3683a218b2 New translations django.po (Welsh) 2022-01-08 18:53:06 -08:00
Mouse Reeve
a276dc7fe1 New translations django.po (Portuguese, Brazilian) 2022-01-08 18:53:04 -08:00
Mouse Reeve
61fa2399fa New translations django.po (Dutch) 2022-01-08 18:53:02 -08:00
Mouse Reeve
62805f110f New translations django.po (German) 2022-01-08 18:53:01 -08:00
Mouse Reeve
397346010f New translations django.po (Spanish) 2022-01-08 18:52:59 -08:00
Mouse Reeve
7734bd6603 New translations django.po (Czech) 2022-01-08 18:52:57 -08:00
Mouse Reeve
c9891ca437 New translations django.po (Hungarian) 2022-01-08 18:52:55 -08:00
Mouse Reeve
a2301c355a New translations django.po (Japanese) 2022-01-08 18:52:54 -08:00
Mouse Reeve
036038276e New translations django.po (Oulipo) 2022-01-08 18:52:53 -08:00
Mouse Reeve
402a85eaa3 New translations django.po (Galician) 2022-01-08 18:52:51 -08:00
Mouse Reeve
dc272d6978 New translations django.po (Vietnamese) 2022-01-08 18:52:50 -08:00
Mouse Reeve
367c68306f New translations django.po (Chinese Traditional) 2022-01-08 18:52:48 -08:00
Mouse Reeve
4d9a6291a3 New translations django.po (Chinese Simplified) 2022-01-08 18:52:46 -08:00
Mouse Reeve
d80cd715b1 New translations django.po (Ukrainian) 2022-01-08 18:52:45 -08:00
Mouse Reeve
398f3355ef New translations django.po (Italian) 2022-01-08 18:52:43 -08:00
Mouse Reeve
3c104c39aa New translations django.po (Turkish) 2022-01-08 18:52:41 -08:00
Mouse Reeve
b69c78f331 New translations django.po (Serbian (Cyrillic)) 2022-01-08 18:52:40 -08:00
Mouse Reeve
4a8e1e5cd3 New translations django.po (Russian) 2022-01-08 18:52:38 -08:00
Mouse Reeve
91a38c6567 New translations django.po (Portuguese) 2022-01-08 18:52:37 -08:00
Mouse Reeve
d11550d002 New translations django.po (Polish) 2022-01-08 18:52:35 -08:00
Mouse Reeve
adaffbac36 New translations django.po (Norwegian) 2022-01-08 18:52:34 -08:00
Mouse Reeve
1b79332755 New translations django.po (Korean) 2022-01-08 18:52:32 -08:00
Mouse Reeve
ebe6a07093 New translations django.po (Swedish) 2022-01-08 18:52:31 -08:00
Mouse Reeve
b4253ca9ac New translations django.po (Lithuanian) 2022-01-08 18:52:30 -08:00
Mouse Reeve
05da1e5f38 New translations django.po (Swedish) 2022-01-08 10:53:22 -08:00
Mouse Reeve
ab1a4a49e1 New translations django.po (Italian) 2022-01-08 08:37:07 -08:00
Mouse Reeve
1a91a45644 New translations django.po (Italian) 2022-01-08 07:09:12 -08:00
Mouse Reeve
4c55f2e6de New translations django.po (German) 2022-01-07 12:53:12 -08:00
Mouse Reeve
8c62debfbd New translations django.po (German) 2022-01-07 11:57:46 -08:00
Mouse Reeve
c12cadfbb4 New translations django.po (Italian) 2022-01-07 10:58:11 -08:00
Mouse Reeve
ce9bc642ad New translations django.po (Italian) 2022-01-07 09:42:57 -08:00
Mouse Reeve
94af806256 New translations django.po (Italian) 2022-01-07 08:34:37 -08:00
Mouse Reeve
b1cf7f259b New translations django.po (Italian) 2022-01-07 07:36:34 -08:00
Mouse Reeve
09dba4289d New translations django.po (Italian) 2022-01-07 06:34:07 -08:00
Mouse Reeve
f1832f8a2b New translations django.po (Italian) 2022-01-07 05:35:46 -08:00
Mouse Reeve
41bb812bd6 New translations django.po (Norwegian) 2022-01-06 17:09:50 -08:00
Mouse Reeve
9b208340f1 New translations django.po (Norwegian) 2022-01-06 16:13:44 -08:00
Mouse Reeve
d02e57fd4c New translations django.po (Norwegian) 2022-01-06 15:15:01 -08:00
Mouse Reeve
88dedea71a New translations django.po (Italian) 2022-01-06 14:11:42 -08:00
Mouse Reeve
2beca6fd65 New translations django.po (Lithuanian) 2022-01-06 08:02:19 -08:00
Mouse Reeve
69f4f6faf7 New translations django.po (Swedish) 2022-01-05 14:59:21 -08:00
Mouse Reeve
ab78243dab New translations django.po (Swedish) 2022-01-05 13:53:52 -08:00
Mouse Reeve
3be04cdcaf New translations django.po (Italian) 2022-01-05 13:53:51 -08:00
Mouse Reeve
ca36847b65 New translations django.po (Swedish) 2022-01-05 12:47:57 -08:00
Mouse Reeve
ae7965df67 New translations django.po (Italian) 2022-01-05 12:47:56 -08:00
Mouse Reeve
5c48c5a0c2 New translations django.po (Swedish) 2022-01-05 11:40:49 -08:00
Mouse Reeve
a266f291b2 New translations django.po (Swedish) 2022-01-05 10:36:45 -08:00
Mouse Reeve
ab4a464d00 New translations django.po (Swedish) 2022-01-05 09:38:13 -08:00
Mouse Reeve
cce825fd76 New translations django.po (Portuguese, Brazilian) 2022-01-05 05:46:27 -08:00
Mouse Reeve
75329f39cc New translations django.po (French) 2022-01-05 02:31:08 -08:00
Mouse Reeve
c255cf515d New translations django.po (Spanish) 2022-01-05 01:18:17 -08:00
Mouse Reeve
d67ef8171e New translations django.po (Galician) 2022-01-04 20:27:44 -08:00
Mouse Reeve
29e78f8541 New translations django.po (Norwegian) 2022-01-04 16:15:29 -08:00
Mouse Reeve
e309a63fdb New translations django.po (Eastern Min) 2022-01-04 15:08:54 -08:00
Mouse Reeve
7babb39432 New translations django.po (Finnish) 2022-01-04 15:08:52 -08:00
Mouse Reeve
e343b2405d New translations django.po (Basque) 2022-01-04 15:08:51 -08:00
Mouse Reeve
72192f90cf New translations django.po (Greek) 2022-01-04 15:08:50 -08:00
Mouse Reeve
99ba0ae781 New translations django.po (Danish) 2022-01-04 15:08:49 -08:00
Mouse Reeve
682a1ec9b4 New translations django.po (Catalan) 2022-01-04 15:08:48 -08:00
Mouse Reeve
b366d2e165 New translations django.po (Arabic) 2022-01-04 15:08:46 -08:00
Mouse Reeve
0645aec1ac New translations django.po (Hebrew) 2022-01-04 15:08:45 -08:00
Mouse Reeve
9c88ff8381 New translations django.po (Afrikaans) 2022-01-04 15:08:44 -08:00
Mouse Reeve
4235bdd677 New translations django.po (Romanian) 2022-01-04 15:08:43 -08:00
Mouse Reeve
082caf2c06 New translations django.po (French) 2022-01-04 15:08:42 -08:00
Mouse Reeve
a312d93413 New translations django.po (Welsh) 2022-01-04 15:08:41 -08:00
Mouse Reeve
eca6ea5b75 New translations django.po (Portuguese, Brazilian) 2022-01-04 15:08:40 -08:00
Mouse Reeve
95f4676411 New translations django.po (Dutch) 2022-01-04 15:08:38 -08:00
Mouse Reeve
6960b1905f New translations django.po (German) 2022-01-04 15:08:37 -08:00
Mouse Reeve
cba43b8507 New translations django.po (Spanish) 2022-01-04 15:08:36 -08:00
Mouse Reeve
2c4e3efd00 New translations django.po (Czech) 2022-01-04 15:08:35 -08:00
Mouse Reeve
41a51ece86 New translations django.po (Hungarian) 2022-01-04 15:08:34 -08:00
Mouse Reeve
e4e05c7fc1 New translations django.po (Japanese) 2022-01-04 15:08:33 -08:00
Mouse Reeve
e708f0f1e1 New translations django.po (Oulipo) 2022-01-04 15:08:30 -08:00
Mouse Reeve
a000d14436 New translations django.po (Galician) 2022-01-04 15:08:28 -08:00
Mouse Reeve
2c77e4b4f9 New translations django.po (Vietnamese) 2022-01-04 15:08:26 -08:00
Mouse Reeve
282213b679 New translations django.po (Chinese Traditional) 2022-01-04 15:08:25 -08:00
Mouse Reeve
046f77647a New translations django.po (Chinese Simplified) 2022-01-04 15:08:24 -08:00
Mouse Reeve
d681113ed1 New translations django.po (Ukrainian) 2022-01-04 15:08:23 -08:00
Mouse Reeve
b95e24ffef New translations django.po (Italian) 2022-01-04 15:08:22 -08:00
Mouse Reeve
30dc23daa2 New translations django.po (Turkish) 2022-01-04 15:08:21 -08:00
Mouse Reeve
7db8a19f75 New translations django.po (Serbian (Cyrillic)) 2022-01-04 15:08:20 -08:00
Mouse Reeve
faee336de6 New translations django.po (Russian) 2022-01-04 15:08:19 -08:00
Mouse Reeve
892fc66d9d New translations django.po (Portuguese) 2022-01-04 15:08:18 -08:00
Mouse Reeve
a919f85afe New translations django.po (Polish) 2022-01-04 15:08:16 -08:00
Mouse Reeve
45df472b18 New translations django.po (Norwegian) 2022-01-04 15:08:15 -08:00
Mouse Reeve
d0c428fd69 New translations django.po (Korean) 2022-01-04 15:08:14 -08:00
Mouse Reeve
2b7b906c9a New translations django.po (Swedish) 2022-01-04 15:08:13 -08:00
Mouse Reeve
c15bd1dd5c New translations django.po (Lithuanian) 2022-01-04 15:08:12 -08:00
Mouse Reeve
f407e0f088 New translations django.po (Spanish) 2022-01-04 13:13:14 -08:00
Mouse Reeve
47f85eacdf New translations django.po (Portuguese) 2022-01-04 11:48:17 -08:00
Mouse Reeve
2457bf46bf New translations django.po (Spanish) 2022-01-04 11:48:16 -08:00
Mouse Reeve
8cdf2c7f87 New translations django.po (Portuguese) 2022-01-04 10:42:55 -08:00
Mouse Reeve
64af9aad4e New translations django.po (Portuguese) 2022-01-04 09:32:26 -08:00
Mouse Reeve
cb76bb8bdb New translations django.po (Portuguese) 2022-01-04 08:33:24 -08:00
Mouse Reeve
b0156d33e4 New translations django.po (Spanish) 2022-01-04 08:33:23 -08:00
Mouse Reeve
88038ecefd New translations django.po (Portuguese) 2022-01-04 07:32:50 -08:00
Mouse Reeve
f792298567 New translations django.po (Spanish) 2022-01-04 07:32:49 -08:00
Mouse Reeve
20ee86939d New translations django.po (Portuguese) 2022-01-04 06:22:44 -08:00
Mouse Reeve
102d832779 New translations django.po (Swedish) 2022-01-03 13:57:05 -08:00
Mouse Reeve
349c60fbd4 New translations django.po (Swedish) 2022-01-03 12:42:02 -08:00
Mouse Reeve
2787a86fb0 New translations django.po (Swedish) 2022-01-03 10:44:23 -08:00
Mouse Reeve
f985f1fd70 New translations django.po (Spanish) 2022-01-03 09:16:23 -08:00
Mouse Reeve
308da261b9 New translations django.po (Spanish) 2022-01-03 03:35:46 -08:00
Mouse Reeve
b913d4b94f New translations django.po (Galician) 2022-01-02 22:40:38 -08:00
Mouse Reeve
90f5330079 New translations django.po (Norwegian) 2022-01-02 15:48:33 -08:00
Mouse Reeve
32b6ddb991 New translations django.po (Norwegian) 2022-01-02 14:28:58 -08:00
Mouse Reeve
fc63a1def4 New translations django.po (Portuguese, Brazilian) 2022-01-02 13:23:55 -08:00
Mouse Reeve
2b64ac6c2c New translations django.po (Spanish) 2022-01-02 11:47:28 -08:00
Mouse Reeve
4d1dbf9352 New translations django.po (Spanish) 2022-01-02 10:51:41 -08:00
Mouse Reeve
86994f814d New translations django.po (Spanish) 2022-01-02 09:28:54 -08:00
Mouse Reeve
03faf06737 New translations django.po (French) 2022-01-02 09:28:53 -08:00
Mouse Reeve
671f58613d New translations django.po (Eastern Min) 2022-01-02 08:29:54 -08:00
Mouse Reeve
d84e8c5c37 New translations django.po (Finnish) 2022-01-02 08:29:53 -08:00
Mouse Reeve
90c771ebda New translations django.po (Basque) 2022-01-02 08:29:51 -08:00
Mouse Reeve
62d3ed6033 New translations django.po (Greek) 2022-01-02 08:29:50 -08:00
Mouse Reeve
34054c5bad New translations django.po (Danish) 2022-01-02 08:29:49 -08:00
Mouse Reeve
afae4c9634 New translations django.po (Catalan) 2022-01-02 08:29:48 -08:00
Mouse Reeve
1a0f27fdcc New translations django.po (Arabic) 2022-01-02 08:29:47 -08:00
Mouse Reeve
5b4c595ef7 New translations django.po (Hebrew) 2022-01-02 08:29:46 -08:00
Mouse Reeve
808e742dc7 New translations django.po (Afrikaans) 2022-01-02 08:29:45 -08:00
Mouse Reeve
ff5df69c91 New translations django.po (Romanian) 2022-01-02 08:29:44 -08:00
Mouse Reeve
11e535a719 New translations django.po (French) 2022-01-02 08:29:43 -08:00
Mouse Reeve
c99eb9f6c9 New translations django.po (Welsh) 2022-01-02 08:29:41 -08:00
Mouse Reeve
b927d164f8 New translations django.po (Portuguese, Brazilian) 2022-01-02 08:29:40 -08:00
Mouse Reeve
0a49491baf New translations django.po (Dutch) 2022-01-02 08:29:39 -08:00
Mouse Reeve
46194a2a78 New translations django.po (German) 2022-01-02 08:29:38 -08:00
Mouse Reeve
66d8a4ef15 New translations django.po (Spanish) 2022-01-02 08:29:37 -08:00
Mouse Reeve
cb3885c9ca New translations django.po (Czech) 2022-01-02 08:29:36 -08:00
Mouse Reeve
13200a5981 New translations django.po (Hungarian) 2022-01-02 08:29:35 -08:00
Mouse Reeve
640753df47 New translations django.po (Japanese) 2022-01-02 08:29:34 -08:00
Mouse Reeve
39b5e5485c New translations django.po (Oulipo) 2022-01-02 08:29:33 -08:00
Mouse Reeve
967c819f1e New translations django.po (Galician) 2022-01-02 08:29:32 -08:00
Mouse Reeve
0a9c6c3374 New translations django.po (Vietnamese) 2022-01-02 08:29:31 -08:00
Mouse Reeve
33dc16110b New translations django.po (Chinese Traditional) 2022-01-02 08:29:30 -08:00
Mouse Reeve
0b91eba7ad New translations django.po (Chinese Simplified) 2022-01-02 08:29:29 -08:00
Mouse Reeve
1b4f8d6435 New translations django.po (Ukrainian) 2022-01-02 08:29:27 -08:00
Mouse Reeve
fae530a8a3 New translations django.po (Italian) 2022-01-02 08:29:26 -08:00
Mouse Reeve
24cf8f1c69 New translations django.po (Turkish) 2022-01-02 08:29:25 -08:00
Mouse Reeve
e96991cc34 New translations django.po (Serbian (Cyrillic)) 2022-01-02 08:29:24 -08:00
Mouse Reeve
e9b81da5de New translations django.po (Russian) 2022-01-02 08:29:23 -08:00
Mouse Reeve
af31c9e115 New translations django.po (Portuguese) 2022-01-02 08:29:22 -08:00
Mouse Reeve
b86f6ccc49 New translations django.po (Polish) 2022-01-02 08:29:21 -08:00
Mouse Reeve
05fb8fc634 New translations django.po (Norwegian) 2022-01-02 08:29:19 -08:00
Mouse Reeve
466dabc18b New translations django.po (Korean) 2022-01-02 08:29:18 -08:00
Mouse Reeve
86f47381a4 New translations django.po (Swedish) 2022-01-02 08:29:17 -08:00
Mouse Reeve
80f653ef15 New translations django.po (Lithuanian) 2022-01-02 08:29:16 -08:00
Mouse Reeve
ec79e62c32 New translations django.po (Lithuanian) 2022-01-02 00:43:06 -08:00
Mouse Reeve
8cabcb3925 New translations django.po (Lithuanian) 2022-01-01 23:45:27 -08:00
Mouse Reeve
febd9121ee New translations django.po (Spanish) 2022-01-01 09:37:09 -08:00
Mouse Reeve
1e94ad9d0b New translations django.po (Lithuanian) 2021-12-30 00:01:04 -08:00
Mouse Reeve
32ec346296 New translations django.po (Chinese Simplified) 2021-12-29 20:35:42 -08:00
Mouse Reeve
788a42b209 New translations django.po (Chinese Simplified) 2021-12-29 19:37:32 -08:00
Mouse Reeve
dc9fcd5605 New translations django.po (Eastern Min) 2021-12-29 16:27:23 -08:00
Mouse Reeve
1fff35c73e New translations django.po (Finnish) 2021-12-29 16:27:22 -08:00
Mouse Reeve
e232b8bc71 New translations django.po (Basque) 2021-12-29 16:27:21 -08:00
Mouse Reeve
83f941591d New translations django.po (Greek) 2021-12-29 16:27:20 -08:00
Mouse Reeve
f2b7111ea8 New translations django.po (Danish) 2021-12-29 16:27:19 -08:00
Mouse Reeve
0995a09fa0 New translations django.po (Catalan) 2021-12-29 16:27:18 -08:00
Mouse Reeve
ba87f193ba New translations django.po (Arabic) 2021-12-29 16:27:17 -08:00
Mouse Reeve
47d92236cd New translations django.po (Hebrew) 2021-12-29 16:27:16 -08:00
Mouse Reeve
e25e0cd2f7 New translations django.po (Afrikaans) 2021-12-29 16:27:14 -08:00
Mouse Reeve
44a5abbdcb New translations django.po (Romanian) 2021-12-29 16:27:12 -08:00
Mouse Reeve
da703b4422 New translations django.po (French) 2021-12-29 16:27:11 -08:00
Mouse Reeve
a5cff5ca86 New translations django.po (Welsh) 2021-12-29 16:27:10 -08:00
Mouse Reeve
dbe309f319 New translations django.po (Portuguese, Brazilian) 2021-12-29 16:27:09 -08:00
Mouse Reeve
d86e40c6dc New translations django.po (Dutch) 2021-12-29 16:27:08 -08:00
Mouse Reeve
f8bd32ea49 New translations django.po (German) 2021-12-29 16:27:07 -08:00
Mouse Reeve
8af1cb440b New translations django.po (Spanish) 2021-12-29 16:27:06 -08:00
Mouse Reeve
93eda97088 New translations django.po (Czech) 2021-12-29 16:27:04 -08:00
Mouse Reeve
654cf82ed6 New translations django.po (Hungarian) 2021-12-29 16:27:03 -08:00
Mouse Reeve
5112a0869f New translations django.po (Japanese) 2021-12-29 16:27:02 -08:00
Mouse Reeve
82f5103639 New translations django.po (Oulipo) 2021-12-29 16:27:01 -08:00
Mouse Reeve
9bd268c72f New translations django.po (Galician) 2021-12-29 16:26:59 -08:00
Mouse Reeve
a2a82d73cc New translations django.po (Vietnamese) 2021-12-29 16:26:58 -08:00
Mouse Reeve
93c1e78628 New translations django.po (Chinese Traditional) 2021-12-29 16:26:57 -08:00
Mouse Reeve
61a0de5b89 New translations django.po (Chinese Simplified) 2021-12-29 16:26:56 -08:00
Mouse Reeve
4c24de5bae New translations django.po (Ukrainian) 2021-12-29 16:26:55 -08:00
Mouse Reeve
0ff31e7b70 New translations django.po (Italian) 2021-12-29 16:26:54 -08:00
Mouse Reeve
65257b6a6f New translations django.po (Turkish) 2021-12-29 16:26:53 -08:00
Mouse Reeve
b24b1c3c0a New translations django.po (Serbian (Cyrillic)) 2021-12-29 16:26:52 -08:00
Mouse Reeve
cfb9f27edb New translations django.po (Russian) 2021-12-29 16:26:51 -08:00
Mouse Reeve
82732efb45 New translations django.po (Portuguese) 2021-12-29 16:26:49 -08:00
Mouse Reeve
7ee0d181bd New translations django.po (Polish) 2021-12-29 16:26:48 -08:00
Mouse Reeve
321fc81bf4 New translations django.po (Norwegian) 2021-12-29 16:26:47 -08:00
Mouse Reeve
2bc3d989ea New translations django.po (Korean) 2021-12-29 16:26:46 -08:00
Mouse Reeve
1f02c83a77 New translations django.po (Swedish) 2021-12-29 16:26:45 -08:00
Mouse Reeve
58cc2a3282 New translations django.po (Lithuanian) 2021-12-29 16:26:44 -08:00
Mouse Reeve
d35752b143 New translations django.po (Galician) 2021-12-28 22:07:15 -08:00
Mouse Reeve
e629963e44 New translations django.po (Galician) 2021-12-28 20:59:25 -08:00
Mouse Reeve
09d62ee96d New translations django.po (Portuguese, Brazilian) 2021-12-28 16:08:44 -08:00
Mouse Reeve
eda1807c05 New translations django.po (Spanish) 2021-12-28 14:55:10 -08:00
Mouse Reeve
0a08854be2 New translations django.po (Eastern Min) 2021-12-28 13:17:53 -08:00
Mouse Reeve
217a58874d New translations django.po (Finnish) 2021-12-28 13:17:51 -08:00
Mouse Reeve
af8505dcee New translations django.po (Basque) 2021-12-28 13:17:50 -08:00
Mouse Reeve
99b073cbea New translations django.po (Greek) 2021-12-28 13:17:49 -08:00
Mouse Reeve
a1183f8b91 New translations django.po (Danish) 2021-12-28 13:17:48 -08:00
Mouse Reeve
c6db879414 New translations django.po (Catalan) 2021-12-28 13:17:47 -08:00
Mouse Reeve
9b9cfdafcc New translations django.po (Arabic) 2021-12-28 13:17:46 -08:00
Mouse Reeve
c038f50dc9 New translations django.po (Hebrew) 2021-12-28 13:17:45 -08:00
Mouse Reeve
94a462175a New translations django.po (Afrikaans) 2021-12-28 13:17:44 -08:00
Mouse Reeve
fe7d91422c New translations django.po (Romanian) 2021-12-28 13:17:43 -08:00
Mouse Reeve
6a6190f585 New translations django.po (French) 2021-12-28 13:17:42 -08:00
Mouse Reeve
55682f322e New translations django.po (Welsh) 2021-12-28 13:17:41 -08:00
Mouse Reeve
f9fcea2234 New translations django.po (Portuguese, Brazilian) 2021-12-28 13:17:39 -08:00
Mouse Reeve
1919e1ad96 New translations django.po (Dutch) 2021-12-28 13:17:38 -08:00
Mouse Reeve
be3a3f0cf0 New translations django.po (German) 2021-12-28 13:17:37 -08:00
Mouse Reeve
6c5dd577d8 New translations django.po (Spanish) 2021-12-28 13:17:36 -08:00
Mouse Reeve
3fe7edda4b New translations django.po (Czech) 2021-12-28 13:17:35 -08:00
Mouse Reeve
2fc7a4719c New translations django.po (Hungarian) 2021-12-28 13:17:34 -08:00
Mouse Reeve
2c5cef4cd6 New translations django.po (Japanese) 2021-12-28 13:17:33 -08:00
Mouse Reeve
ef01f4ace9 New translations django.po (Oulipo) 2021-12-28 13:17:32 -08:00
Mouse Reeve
095d672417 New translations django.po (Galician) 2021-12-28 13:17:30 -08:00
Mouse Reeve
bd599e5654 New translations django.po (Vietnamese) 2021-12-28 13:17:29 -08:00
Mouse Reeve
42fe3c05f8 New translations django.po (Chinese Traditional) 2021-12-28 13:17:28 -08:00
Mouse Reeve
425f1ecd75 New translations django.po (Chinese Simplified) 2021-12-28 13:17:27 -08:00
Mouse Reeve
994dfa5a0e New translations django.po (Ukrainian) 2021-12-28 13:17:25 -08:00
Mouse Reeve
d699d13ee0 New translations django.po (Italian) 2021-12-28 13:17:24 -08:00
Mouse Reeve
bef2334577 New translations django.po (Turkish) 2021-12-28 13:17:23 -08:00
Mouse Reeve
420895d409 New translations django.po (Serbian (Cyrillic)) 2021-12-28 13:17:20 -08:00
Mouse Reeve
88a2b7b1b9 New translations django.po (Russian) 2021-12-28 13:17:19 -08:00
Mouse Reeve
3b83b2fe24 New translations django.po (Portuguese) 2021-12-28 13:17:18 -08:00
Mouse Reeve
89628c0309 New translations django.po (Polish) 2021-12-28 13:17:17 -08:00
Mouse Reeve
afe5ca7b95 New translations django.po (Norwegian) 2021-12-28 13:17:16 -08:00
Mouse Reeve
07545a5d7e New translations django.po (Korean) 2021-12-28 13:17:15 -08:00
Mouse Reeve
05b6d15030 New translations django.po (Swedish) 2021-12-28 13:17:14 -08:00
Mouse Reeve
6069087b61 New translations django.po (Lithuanian) 2021-12-28 13:17:13 -08:00
Mouse Reeve
a5229737cb New translations django.po (Spanish) 2021-12-28 09:59:41 -08:00
Mouse Reeve
5641cddb58 New translations django.po (French) 2021-12-28 08:59:31 -08:00
Mouse Reeve
4bdaaed2fc New translations django.po (Portuguese, Brazilian) 2021-12-28 08:59:30 -08:00
Mouse Reeve
62138237b7 New translations django.po (Eastern Min) 2021-12-28 08:04:10 -08:00
Mouse Reeve
5f7d1988fb New translations django.po (Finnish) 2021-12-28 08:04:09 -08:00
Mouse Reeve
e1ba65beac New translations django.po (Basque) 2021-12-28 08:04:08 -08:00
Mouse Reeve
a6b9ec8955 New translations django.po (Greek) 2021-12-28 08:04:07 -08:00
Mouse Reeve
e4585853a3 New translations django.po (Danish) 2021-12-28 08:04:06 -08:00
Mouse Reeve
842116b55a New translations django.po (Catalan) 2021-12-28 08:04:04 -08:00
Mouse Reeve
52b7874942 New translations django.po (Arabic) 2021-12-28 08:04:03 -08:00
Mouse Reeve
c0fca459ca New translations django.po (Hebrew) 2021-12-28 08:04:02 -08:00
Mouse Reeve
ee490bb346 New translations django.po (Afrikaans) 2021-12-28 08:04:00 -08:00
Mouse Reeve
b1aee17987 New translations django.po (Romanian) 2021-12-28 08:03:58 -08:00
Mouse Reeve
d6695d894b New translations django.po (French) 2021-12-28 08:03:57 -08:00
Mouse Reeve
6fcd457a88 New translations django.po (Welsh) 2021-12-28 08:03:56 -08:00
Mouse Reeve
014e152703 New translations django.po (Portuguese, Brazilian) 2021-12-28 08:03:55 -08:00
Mouse Reeve
65a0c346ec New translations django.po (Dutch) 2021-12-28 08:03:54 -08:00
Mouse Reeve
ed4aaf94c3 New translations django.po (German) 2021-12-28 08:03:53 -08:00
Mouse Reeve
cc838a058a New translations django.po (Spanish) 2021-12-28 08:03:51 -08:00
Mouse Reeve
fcd04c0a60 New translations django.po (Czech) 2021-12-28 08:03:50 -08:00
Mouse Reeve
d251d400f3 New translations django.po (Hungarian) 2021-12-28 08:03:49 -08:00
Mouse Reeve
4c10fb38dd New translations django.po (Japanese) 2021-12-28 08:03:48 -08:00
Mouse Reeve
061062bcfb New translations django.po (Oulipo) 2021-12-28 08:03:47 -08:00
Mouse Reeve
cc51a72443 New translations django.po (Galician) 2021-12-28 08:03:46 -08:00
Mouse Reeve
78ee0aaf6a New translations django.po (Vietnamese) 2021-12-28 08:03:44 -08:00
Mouse Reeve
9a6c945474 New translations django.po (Chinese Traditional) 2021-12-28 08:03:43 -08:00
Mouse Reeve
5e9d507f57 New translations django.po (Chinese Simplified) 2021-12-28 08:03:42 -08:00
Mouse Reeve
ba2c3a03ec New translations django.po (Ukrainian) 2021-12-28 08:03:41 -08:00
Mouse Reeve
0827a1e80c New translations django.po (Italian) 2021-12-28 08:03:39 -08:00
Mouse Reeve
6f5485d997 New translations django.po (Turkish) 2021-12-28 08:03:38 -08:00
Mouse Reeve
8eb12a9517 New translations django.po (Serbian (Cyrillic)) 2021-12-28 08:03:37 -08:00
Mouse Reeve
7ac4d5687b New translations django.po (Russian) 2021-12-28 08:03:36 -08:00
Mouse Reeve
e2a3c5d5c8 New translations django.po (Portuguese) 2021-12-28 08:03:35 -08:00
Mouse Reeve
d9a1565cdd New translations django.po (Polish) 2021-12-28 08:03:33 -08:00
Mouse Reeve
9e395ffacd New translations django.po (Norwegian) 2021-12-28 08:03:32 -08:00
Mouse Reeve
2bdc6797ba New translations django.po (Korean) 2021-12-28 08:03:31 -08:00
Mouse Reeve
f808f5d4b2 New translations django.po (Swedish) 2021-12-28 08:03:30 -08:00
Mouse Reeve
26a5d6eb8c New translations django.po (Lithuanian) 2021-12-28 08:03:29 -08:00
Mouse Reeve
f61201afc6 New translations django.po (Spanish) 2021-12-28 03:43:44 -08:00
Mouse Reeve
619410f83c New translations django.po (Spanish) 2021-12-28 02:44:24 -08:00
Mouse Reeve
006ff6b6ea New translations django.po (Galician) 2021-12-27 23:08:55 -08:00
Mouse Reeve
04b57c7f47 New translations django.po (Galician) 2021-12-27 21:42:58 -08:00
Mouse Reeve
7a9f815117 New translations django.po (Portuguese, Brazilian) 2021-12-27 18:57:06 -08:00
Mouse Reeve
3360e1a376 New translations django.po (Chinese Simplified) 2021-12-27 17:57:08 -08:00
Mouse Reeve
61265090f9 New translations django.po (Eastern Min) 2021-12-27 15:03:59 -08:00
Mouse Reeve
e46081020c New translations django.po (Finnish) 2021-12-27 15:03:57 -08:00
Mouse Reeve
0e6f7b6620 New translations django.po (Basque) 2021-12-27 15:03:56 -08:00
Mouse Reeve
a98994ac2c New translations django.po (Greek) 2021-12-27 15:03:55 -08:00
Mouse Reeve
e69f26ef82 New translations django.po (Danish) 2021-12-27 15:03:54 -08:00
Mouse Reeve
e0699a9802 New translations django.po (Catalan) 2021-12-27 15:03:53 -08:00
Mouse Reeve
d0715e7c6b New translations django.po (Arabic) 2021-12-27 15:03:52 -08:00
Mouse Reeve
baf6d26b4d New translations django.po (Hebrew) 2021-12-27 15:03:51 -08:00
Mouse Reeve
72923c49f2 New translations django.po (Afrikaans) 2021-12-27 15:03:50 -08:00
Mouse Reeve
37e1f8ee6f New translations django.po (Romanian) 2021-12-27 15:03:49 -08:00
Mouse Reeve
4311a815d3 New translations django.po (French) 2021-12-27 15:03:48 -08:00
Mouse Reeve
8a9d70391b New translations django.po (Welsh) 2021-12-27 15:03:47 -08:00
Mouse Reeve
9b56fcc53c New translations django.po (Portuguese, Brazilian) 2021-12-27 15:03:45 -08:00
Mouse Reeve
9bb05f6f77 New translations django.po (Dutch) 2021-12-27 15:03:44 -08:00
Mouse Reeve
c099a78d5f New translations django.po (German) 2021-12-27 15:03:43 -08:00
Mouse Reeve
eb42e85b47 New translations django.po (Spanish) 2021-12-27 15:03:42 -08:00
Mouse Reeve
e9e17c4d2b New translations django.po (Czech) 2021-12-27 15:03:41 -08:00
Mouse Reeve
02c8d28f88 New translations django.po (Hungarian) 2021-12-27 15:03:40 -08:00
Mouse Reeve
af4d4721c8 New translations django.po (Japanese) 2021-12-27 15:03:39 -08:00
Mouse Reeve
d8ca8959e3 New translations django.po (Oulipo) 2021-12-27 15:03:37 -08:00
Mouse Reeve
9631aa114b New translations django.po (Galician) 2021-12-27 15:03:36 -08:00
Mouse Reeve
96872573a1 New translations django.po (Vietnamese) 2021-12-27 15:03:35 -08:00
Mouse Reeve
863e57096f New translations django.po (Chinese Traditional) 2021-12-27 15:03:34 -08:00
Mouse Reeve
8446365e00 New translations django.po (Chinese Simplified) 2021-12-27 15:03:33 -08:00
Mouse Reeve
32e641c176 New translations django.po (Ukrainian) 2021-12-27 15:03:32 -08:00
Mouse Reeve
ed9627d875 New translations django.po (Italian) 2021-12-27 15:03:31 -08:00
Mouse Reeve
c40e4a14b4 New translations django.po (Turkish) 2021-12-27 15:03:30 -08:00
Mouse Reeve
89c1dcda9a New translations django.po (Serbian (Cyrillic)) 2021-12-27 15:03:28 -08:00
Mouse Reeve
bac7aaa722 New translations django.po (Russian) 2021-12-27 15:03:27 -08:00
Mouse Reeve
c5d1621d4d New translations django.po (Portuguese) 2021-12-27 15:03:26 -08:00
Mouse Reeve
45f7332bdf New translations django.po (Polish) 2021-12-27 15:03:25 -08:00
Mouse Reeve
d7b210427b New translations django.po (Norwegian) 2021-12-27 15:03:24 -08:00
Mouse Reeve
aa29dc5cc8 New translations django.po (Korean) 2021-12-27 15:03:23 -08:00
Mouse Reeve
28c73fe98e New translations django.po (Swedish) 2021-12-27 15:03:22 -08:00
Mouse Reeve
42131fbf5f New translations django.po (Lithuanian) 2021-12-27 15:03:20 -08:00
Mouse Reeve
cd9a7b3303 New translations django.po (Eastern Min) 2021-12-27 14:01:02 -08:00
Mouse Reeve
89dc15ffd1 New translations django.po (Finnish) 2021-12-27 14:01:00 -08:00
Mouse Reeve
f2e654cb0f New translations django.po (Basque) 2021-12-27 14:00:59 -08:00
Mouse Reeve
55c2d275ca New translations django.po (Greek) 2021-12-27 14:00:58 -08:00
Mouse Reeve
b55ee3f334 New translations django.po (Danish) 2021-12-27 14:00:57 -08:00
Mouse Reeve
cdb9007675 New translations django.po (Catalan) 2021-12-27 14:00:55 -08:00
Mouse Reeve
bd30811e78 New translations django.po (Arabic) 2021-12-27 14:00:54 -08:00
Mouse Reeve
e7652b8b19 New translations django.po (Hebrew) 2021-12-27 14:00:53 -08:00
Mouse Reeve
e653b6b9c5 New translations django.po (Afrikaans) 2021-12-27 14:00:52 -08:00
Mouse Reeve
5da14cbeb1 New translations django.po (Romanian) 2021-12-27 14:00:51 -08:00
Mouse Reeve
118dbfd37d New translations django.po (French) 2021-12-27 14:00:50 -08:00
Mouse Reeve
e48581489d New translations django.po (Welsh) 2021-12-27 14:00:49 -08:00
Mouse Reeve
ef352b86ce New translations django.po (Portuguese, Brazilian) 2021-12-27 14:00:48 -08:00
Mouse Reeve
f0cc7a75aa New translations django.po (Dutch) 2021-12-27 14:00:47 -08:00
Mouse Reeve
08337c9859 New translations django.po (German) 2021-12-27 14:00:46 -08:00
Mouse Reeve
33a502b655 New translations django.po (Spanish) 2021-12-27 14:00:45 -08:00
Mouse Reeve
c04b8a9d84 New translations django.po (Czech) 2021-12-27 14:00:44 -08:00
Mouse Reeve
d661692366 New translations django.po (Hungarian) 2021-12-27 14:00:42 -08:00
Mouse Reeve
c39f366247 New translations django.po (Japanese) 2021-12-27 14:00:41 -08:00
Mouse Reeve
f38a49c75d New translations django.po (Oulipo) 2021-12-27 14:00:40 -08:00
Mouse Reeve
f48793e3d6 New translations django.po (Galician) 2021-12-27 14:00:39 -08:00
Mouse Reeve
259a4e9e0b New translations django.po (Vietnamese) 2021-12-27 14:00:38 -08:00
Mouse Reeve
760449b9f6 New translations django.po (Chinese Traditional) 2021-12-27 14:00:37 -08:00
Mouse Reeve
3c272212d6 New translations django.po (Chinese Simplified) 2021-12-27 14:00:36 -08:00
Mouse Reeve
98779a6515 New translations django.po (Ukrainian) 2021-12-27 14:00:35 -08:00
Mouse Reeve
8cf4e0d9dd New translations django.po (Italian) 2021-12-27 14:00:34 -08:00
Mouse Reeve
23c404076f New translations django.po (Turkish) 2021-12-27 14:00:32 -08:00
Mouse Reeve
a2b9d8cbc6 New translations django.po (Serbian (Cyrillic)) 2021-12-27 14:00:31 -08:00
Mouse Reeve
93762818c3 New translations django.po (Russian) 2021-12-27 14:00:30 -08:00
Mouse Reeve
2dbb08b2cf New translations django.po (Portuguese) 2021-12-27 14:00:29 -08:00
Mouse Reeve
1bde7e873e New translations django.po (Polish) 2021-12-27 14:00:28 -08:00
Mouse Reeve
b3557417ee New translations django.po (Norwegian) 2021-12-27 14:00:26 -08:00
Mouse Reeve
79c4ef7638 New translations django.po (Korean) 2021-12-27 14:00:24 -08:00
Mouse Reeve
64bded1f43 New translations django.po (Swedish) 2021-12-27 14:00:23 -08:00
Mouse Reeve
a94113a338 New translations django.po (Lithuanian) 2021-12-27 14:00:22 -08:00
Mouse Reeve
c0672fb776 New translations django.po (Lithuanian) 2021-12-26 12:36:49 -08:00
Mouse Reeve
eda0812259 New translations django.po (Lithuanian) 2021-12-26 11:11:42 -08:00
Mouse Reeve
16b31caff7 New translations django.po (French) 2021-12-26 01:59:25 -08:00
Mouse Reeve
1893302e18 New translations django.po (Lithuanian) 2021-12-25 01:48:49 -08:00
Mouse Reeve
dacf792e7a New translations django.po (Lithuanian) 2021-12-25 00:42:57 -08:00
Mouse Reeve
537125df52 New translations django.po (Czech) 2021-12-23 08:29:44 -08:00
Mouse Reeve
1a837d96a9 New translations django.po (Welsh) 2021-12-22 00:48:33 -08:00
Mouse Reeve
ba4ce90f27 New translations django.po (Welsh) 2021-12-21 06:46:17 -08:00
Mouse Reeve
a05a86c2ae New translations django.po (Portuguese, Brazilian) 2021-12-18 09:19:37 -08:00
Mouse Reeve
5ebd263a6d New translations django.po (Dutch) 2021-12-17 04:04:38 -08:00
Mouse Reeve
69127d8af2 New translations django.po (Dutch) 2021-12-17 02:56:07 -08:00
Mouse Reeve
a4d0eccd47 New translations django.po (German) 2021-12-16 06:48:04 -08:00
Mouse Reeve
59ef3d2978 New translations django.po (Portuguese, Brazilian) 2021-12-15 20:35:49 -08:00
Mouse Reeve
f0fab5310b New translations django.po (Lithuanian) 2021-12-13 12:56:48 -08:00
Mouse Reeve
714719ca7e New translations django.po (Portuguese, Brazilian) 2021-12-11 07:41:11 -08:00
Mouse Reeve
e709b84347 New translations django.po (Portuguese, Brazilian) 2021-12-11 06:44:14 -08:00
Mouse Reeve
97b1aba452 New translations django.po (Galician) 2021-12-09 21:04:08 -08:00
Mouse Reeve
c7a6b86311 New translations django.po (Portuguese, Brazilian) 2021-12-09 13:09:20 -08:00
Mouse Reeve
fa660fcc32 New translations django.po (Oulipo) 2021-12-09 10:56:21 -08:00
Mouse Reeve
2537604d31 New translations django.po (German) 2021-12-09 10:56:20 -08:00
Mouse Reeve
5aed68e51a New translations django.po (Danish) 2021-12-09 10:56:19 -08:00
Mouse Reeve
c65bc696cc New translations django.po (Catalan) 2021-12-09 10:56:18 -08:00
Mouse Reeve
dd8129e003 New translations django.po (Arabic) 2021-12-09 10:56:17 -08:00
Mouse Reeve
83b9224e34 New translations django.po (Afrikaans) 2021-12-09 10:56:16 -08:00
Mouse Reeve
82c445dc5e New translations django.po (Romanian) 2021-12-09 10:56:14 -08:00
Mouse Reeve
c36ba33084 New translations django.po (Greek) 2021-12-09 10:56:13 -08:00
Mouse Reeve
0d150d0b3a New translations django.po (Eastern Min) 2021-12-09 10:56:12 -08:00
Mouse Reeve
362e65ff52 New translations django.po (Russian) 2021-12-09 10:56:11 -08:00
Mouse Reeve
70958f63ff New translations django.po (Basque) 2021-12-09 10:56:10 -08:00
Mouse Reeve
f473474425 New translations django.po (Czech) 2021-12-09 10:56:08 -08:00
Mouse Reeve
0742cffd0d New translations django.po (Spanish) 2021-12-09 10:56:07 -08:00
Mouse Reeve
3618fbec59 New translations django.po (Lithuanian) 2021-12-09 10:56:06 -08:00
Mouse Reeve
a7a58ab7a2 New translations django.po (Galician) 2021-12-09 10:56:04 -08:00
Mouse Reeve
1ca4d27015 New translations django.po (Chinese Traditional) 2021-12-09 10:56:03 -08:00
Mouse Reeve
f4834b5e78 New translations django.po (Chinese Simplified) 2021-12-09 10:56:02 -08:00
Mouse Reeve
14476af917 New translations django.po (Finnish) 2021-12-09 10:56:00 -08:00
Mouse Reeve
3f49d07f9c New translations django.po (Hungarian) 2021-12-09 10:55:59 -08:00
Mouse Reeve
b33a9b286b New translations django.po (Italian) 2021-12-09 10:55:58 -08:00
Mouse Reeve
4722b6d87b New translations django.po (Japanese) 2021-12-09 10:55:57 -08:00
Mouse Reeve
62015362d9 New translations django.po (Korean) 2021-12-09 10:55:56 -08:00
Mouse Reeve
a1644e8f72 New translations django.po (Dutch) 2021-12-09 10:55:54 -08:00
Mouse Reeve
14dcd1e1e2 New translations django.po (Norwegian) 2021-12-09 10:55:53 -08:00
Mouse Reeve
6000c80ba4 New translations django.po (Polish) 2021-12-09 10:55:52 -08:00
Mouse Reeve
bb1a3d32c4 New translations django.po (Portuguese) 2021-12-09 10:55:51 -08:00
Mouse Reeve
78636d69e1 New translations django.po (Serbian (Cyrillic)) 2021-12-09 10:55:50 -08:00
Mouse Reeve
2715f9b175 New translations django.po (Swedish) 2021-12-09 10:55:49 -08:00
Mouse Reeve
fdb1129429 New translations django.po (Turkish) 2021-12-09 10:55:47 -08:00
Mouse Reeve
d5d452485d New translations django.po (Ukrainian) 2021-12-09 10:55:46 -08:00
Mouse Reeve
7f26bbf14f New translations django.po (Vietnamese) 2021-12-09 10:55:45 -08:00
Mouse Reeve
d05029b3b8 New translations django.po (Portuguese, Brazilian) 2021-12-09 10:55:43 -08:00
Mouse Reeve
c9911c883d New translations django.po (Hebrew) 2021-12-09 10:55:42 -08:00
Mouse Reeve
a280532113 New translations django.po (French) 2021-12-09 10:55:41 -08:00
Mouse Reeve
608b31111f New translations django.po (Spanish) 2021-12-08 04:19:25 -08:00
Mouse Reeve
d1bf0de479 New translations django.po (French) 2021-12-08 01:22:34 -08:00
Mouse Reeve
0a39636e75 New translations django.po (Lithuanian) 2021-12-08 00:14:31 -08:00
Mouse Reeve
513e4d243f New translations django.po (Galician) 2021-12-07 22:10:06 -08:00
Mouse Reeve
c9dc19b168 New translations django.po (Oulipo) 2021-12-07 15:51:55 -08:00
Mouse Reeve
cc97b945e0 New translations django.po (German) 2021-12-07 15:51:54 -08:00
Mouse Reeve
1b64d170e8 New translations django.po (Danish) 2021-12-07 15:51:53 -08:00
Mouse Reeve
51c526fedf New translations django.po (Catalan) 2021-12-07 15:51:52 -08:00
Mouse Reeve
aa93e6e6b3 New translations django.po (Arabic) 2021-12-07 15:51:50 -08:00
Mouse Reeve
d9fed02c33 New translations django.po (Afrikaans) 2021-12-07 15:51:49 -08:00
Mouse Reeve
4604367352 New translations django.po (Romanian) 2021-12-07 15:51:48 -08:00
Mouse Reeve
2e2b106bdb New translations django.po (Greek) 2021-12-07 15:51:47 -08:00
Mouse Reeve
14661cfd90 New translations django.po (Eastern Min) 2021-12-07 15:51:45 -08:00
Mouse Reeve
921416289d New translations django.po (Russian) 2021-12-07 15:51:44 -08:00
Mouse Reeve
a3714c4362 New translations django.po (Basque) 2021-12-07 15:51:43 -08:00
Mouse Reeve
123453e062 New translations django.po (Czech) 2021-12-07 15:51:42 -08:00
Mouse Reeve
239b62f06e New translations django.po (Spanish) 2021-12-07 15:51:41 -08:00
Mouse Reeve
9ec1fe7de5 New translations django.po (Lithuanian) 2021-12-07 15:51:40 -08:00
Mouse Reeve
1d194e6ec5 New translations django.po (Galician) 2021-12-07 15:51:38 -08:00
Mouse Reeve
541a534a24 New translations django.po (Chinese Traditional) 2021-12-07 15:51:37 -08:00
Mouse Reeve
8d4dda68b7 New translations django.po (Chinese Simplified) 2021-12-07 15:51:36 -08:00
Mouse Reeve
df3f043998 New translations django.po (Finnish) 2021-12-07 15:51:35 -08:00
Mouse Reeve
65925dfd88 New translations django.po (Hungarian) 2021-12-07 15:51:34 -08:00
Mouse Reeve
b5f462b1cb New translations django.po (Italian) 2021-12-07 15:51:33 -08:00
Mouse Reeve
62c92bec97 New translations django.po (Japanese) 2021-12-07 15:51:32 -08:00
Mouse Reeve
a35b5a1cd7 New translations django.po (Korean) 2021-12-07 15:51:31 -08:00
Mouse Reeve
000b280f2d New translations django.po (Dutch) 2021-12-07 15:51:30 -08:00
Mouse Reeve
860fdce745 New translations django.po (Norwegian) 2021-12-07 15:51:29 -08:00
Mouse Reeve
dad84b4d8c New translations django.po (Polish) 2021-12-07 15:51:28 -08:00
Mouse Reeve
e8f57615b1 New translations django.po (Portuguese) 2021-12-07 15:51:27 -08:00
Mouse Reeve
eb3153ba3f New translations django.po (Serbian (Cyrillic)) 2021-12-07 15:51:26 -08:00
Mouse Reeve
1aebc968bb New translations django.po (Swedish) 2021-12-07 15:51:25 -08:00
Mouse Reeve
8b7e0bdea5 New translations django.po (Turkish) 2021-12-07 15:51:23 -08:00
Mouse Reeve
e6dc165fbc New translations django.po (Ukrainian) 2021-12-07 15:51:22 -08:00
Mouse Reeve
ad17ddcda5 New translations django.po (Vietnamese) 2021-12-07 15:51:21 -08:00
Mouse Reeve
34f5ee46ca New translations django.po (Portuguese, Brazilian) 2021-12-07 15:51:20 -08:00
Mouse Reeve
77c08988ed New translations django.po (Hebrew) 2021-12-07 15:51:19 -08:00
Mouse Reeve
d017139bd9 New translations django.po (French) 2021-12-07 15:51:18 -08:00
Mouse Reeve
ae22d9ad92 New translations django.po (Portuguese, Brazilian) 2021-12-07 12:54:05 -08:00
Mouse Reeve
62aeb7486c New translations django.po (Lithuanian) 2021-12-07 12:54:02 -08:00
Mouse Reeve
345c65c4e7 New translations django.po (French) 2021-12-07 11:43:55 -08:00
Mouse Reeve
f31784881f New translations django.po (Oulipo) 2021-12-07 10:25:50 -08:00
Mouse Reeve
e22149ae20 New translations django.po (German) 2021-12-07 10:25:47 -08:00
Mouse Reeve
a0edc09d2e New translations django.po (Danish) 2021-12-07 10:25:37 -08:00
Mouse Reeve
a51cc6ca37 New translations django.po (Catalan) 2021-12-07 10:25:36 -08:00
Mouse Reeve
2cd37644f0 New translations django.po (Arabic) 2021-12-07 10:25:35 -08:00
Mouse Reeve
727c9e8bc5 New translations django.po (Afrikaans) 2021-12-07 10:25:30 -08:00
Mouse Reeve
2593d17f33 New translations django.po (Romanian) 2021-12-07 10:25:27 -08:00
Mouse Reeve
02b7fc56ff New translations django.po (Greek) 2021-12-07 10:25:26 -08:00
Mouse Reeve
d12f4e136f New translations django.po (Eastern Min) 2021-12-07 10:25:25 -08:00
Mouse Reeve
111cdcaa10 New translations django.po (Russian) 2021-12-07 10:25:23 -08:00
Mouse Reeve
2dfab471b6 New translations django.po (Basque) 2021-12-07 10:25:20 -08:00
Mouse Reeve
daae3f99a7 New translations django.po (Czech) 2021-12-07 10:25:15 -08:00
Mouse Reeve
8ecd452d5d New translations django.po (Spanish) 2021-12-07 10:25:13 -08:00
Mouse Reeve
ff535bbd9f New translations django.po (Lithuanian) 2021-12-07 10:25:08 -08:00
Mouse Reeve
fdbed04f77 New translations django.po (Galician) 2021-12-07 10:25:07 -08:00
Mouse Reeve
759c56a070 New translations django.po (Chinese Traditional) 2021-12-07 10:24:59 -08:00
Mouse Reeve
65467925e2 New translations django.po (Chinese Simplified) 2021-12-07 10:24:58 -08:00
Mouse Reeve
456c378a32 New translations django.po (Finnish) 2021-12-07 10:24:55 -08:00
Mouse Reeve
ee5632ac65 New translations django.po (Hungarian) 2021-12-07 10:24:52 -08:00
Mouse Reeve
e586829352 New translations django.po (Italian) 2021-12-07 10:24:45 -08:00
Mouse Reeve
4af037d535 New translations django.po (Japanese) 2021-12-07 10:24:40 -08:00
Mouse Reeve
6a054ec15d New translations django.po (Korean) 2021-12-07 10:24:37 -08:00
Mouse Reeve
717e92756c New translations django.po (Dutch) 2021-12-07 10:24:35 -08:00
Mouse Reeve
77cf7f08a8 New translations django.po (Norwegian) 2021-12-07 10:24:30 -08:00
Mouse Reeve
27edf980d2 New translations django.po (Polish) 2021-12-07 10:24:27 -08:00
Mouse Reeve
5b688d1f7b New translations django.po (Portuguese) 2021-12-07 10:24:26 -08:00
Mouse Reeve
32d984f238 New translations django.po (Serbian (Cyrillic)) 2021-12-07 10:24:21 -08:00
Mouse Reeve
f477463f0a New translations django.po (Swedish) 2021-12-07 10:24:17 -08:00
Mouse Reeve
aaaca521b6 New translations django.po (Turkish) 2021-12-07 10:24:14 -08:00
Mouse Reeve
df6a63c867 New translations django.po (Ukrainian) 2021-12-07 10:24:05 -08:00
Mouse Reeve
ede3f57d79 New translations django.po (Vietnamese) 2021-12-07 10:24:04 -08:00
Mouse Reeve
4fe191fbb6 New translations django.po (Portuguese, Brazilian) 2021-12-07 10:23:59 -08:00
Mouse Reeve
96a27ce630 New translations django.po (Hebrew) 2021-12-07 10:23:56 -08:00
Mouse Reeve
f297c821ef New translations django.po (French) 2021-12-07 10:23:53 -08:00
Mouse Reeve
53c20f5a18 New translations django.po (German) 2021-12-07 07:47:55 -08:00
Mouse Reeve
812eafe73d New translations django.po (Spanish) 2021-12-07 07:47:47 -08:00
Mouse Reeve
ec61c64a1b New translations django.po (Spanish) 2021-12-07 06:46:48 -08:00
Mouse Reeve
ce5f8c5a44 New translations django.po (Spanish) 2021-12-07 04:22:39 -08:00
Mouse Reeve
0beceaaa17 New translations django.po (Lithuanian) 2021-12-07 04:22:38 -08:00
Mouse Reeve
d53c72cecc New translations django.po (Spanish) 2021-12-07 03:20:16 -08:00
Mouse Reeve
d6e8a632f8 New translations django.po (Russian) 2021-12-07 01:55:48 -08:00
Mouse Reeve
477621d80d New translations django.po (Russian) 2021-12-07 00:26:46 -08:00
Mouse Reeve
8f189af767 New translations django.po (Portuguese) 2021-12-05 09:24:54 -08:00
Mouse Reeve
47e9f053d4 New translations django.po (Portuguese) 2021-12-05 08:21:22 -08:00
Mouse Reeve
3b4615f675 New translations django.po (Portuguese) 2021-12-05 07:02:18 -08:00
Mouse Reeve
1173ffb919 New translations django.po (Portuguese, Brazilian) 2021-12-05 06:06:36 -08:00
Mouse Reeve
d0d6221ece New translations django.po (Portuguese) 2021-12-05 06:06:35 -08:00
Mouse Reeve
a02973e681 New translations django.po (Portuguese) 2021-12-05 05:05:03 -08:00
Mouse Reeve
bc6a752523 New translations django.po (French) 2021-12-05 03:46:00 -08:00
Mouse Reeve
fb616c5958 New translations django.po (French) 2021-12-05 02:32:53 -08:00
Mouse Reeve
c06502975c New translations django.po (Lithuanian) 2021-12-05 00:32:27 -08:00
Mouse Reeve
48c11c27e7 New translations django.po (Galician) 2021-12-05 00:32:26 -08:00
Mouse Reeve
105f7c57f3 New translations django.po (Galician) 2021-12-04 23:32:18 -08:00
Mouse Reeve
2e49c859c3 New translations django.po (Oulipo) 2021-12-04 15:56:40 -08:00
Mouse Reeve
14970758ab New translations django.po (German) 2021-12-04 15:56:39 -08:00
Mouse Reeve
bdb170146d New translations django.po (Danish) 2021-12-04 15:56:38 -08:00
Mouse Reeve
4eb2c15553 New translations django.po (Catalan) 2021-12-04 15:56:37 -08:00
Mouse Reeve
aaa17e4337 New translations django.po (Arabic) 2021-12-04 15:56:36 -08:00
Mouse Reeve
8e095536a0 New translations django.po (Afrikaans) 2021-12-04 15:56:35 -08:00
Mouse Reeve
6433b4ce3e New translations django.po (Romanian) 2021-12-04 15:56:34 -08:00
Mouse Reeve
c902e40bde New translations django.po (Greek) 2021-12-04 15:56:33 -08:00
Mouse Reeve
1c1f9d62d3 New translations django.po (Eastern Min) 2021-12-04 15:56:31 -08:00
Mouse Reeve
4a08b85194 New translations django.po (Russian) 2021-12-04 15:56:31 -08:00
Mouse Reeve
a1c11f2de0 New translations django.po (Basque) 2021-12-04 15:56:29 -08:00
Mouse Reeve
ad7764fdb9 New translations django.po (Czech) 2021-12-04 15:56:28 -08:00
Mouse Reeve
df1a7af12d New translations django.po (Spanish) 2021-12-04 15:56:27 -08:00
Mouse Reeve
9d89de3db7 New translations django.po (Lithuanian) 2021-12-04 15:56:26 -08:00
Mouse Reeve
b91b895b20 New translations django.po (Galician) 2021-12-04 15:56:25 -08:00
Mouse Reeve
fca1ff5909 New translations django.po (Chinese Traditional) 2021-12-04 15:56:24 -08:00
Mouse Reeve
6dc2621f78 New translations django.po (Chinese Simplified) 2021-12-04 15:56:23 -08:00
Mouse Reeve
d0f0a4156a New translations django.po (Finnish) 2021-12-04 15:56:22 -08:00
Mouse Reeve
713670cfc7 New translations django.po (Hungarian) 2021-12-04 15:56:21 -08:00
Mouse Reeve
ec9fa66c76 New translations django.po (Italian) 2021-12-04 15:56:20 -08:00
Mouse Reeve
2a1e21e44b New translations django.po (Japanese) 2021-12-04 15:56:19 -08:00
Mouse Reeve
562f87c589 New translations django.po (Korean) 2021-12-04 15:56:17 -08:00
Mouse Reeve
da91236576 New translations django.po (Dutch) 2021-12-04 15:56:16 -08:00
Mouse Reeve
841c783256 New translations django.po (Norwegian) 2021-12-04 15:56:15 -08:00
Mouse Reeve
ac49855234 New translations django.po (Polish) 2021-12-04 15:56:14 -08:00
Mouse Reeve
d996885778 New translations django.po (Portuguese) 2021-12-04 15:56:13 -08:00
Mouse Reeve
0e81b4ed6f New translations django.po (Serbian (Cyrillic)) 2021-12-04 15:56:12 -08:00
Mouse Reeve
e3ac45cbd7 New translations django.po (Swedish) 2021-12-04 15:56:11 -08:00
Mouse Reeve
4614c71c70 New translations django.po (Turkish) 2021-12-04 15:56:10 -08:00
Mouse Reeve
c7c2136720 New translations django.po (Ukrainian) 2021-12-04 15:56:08 -08:00
Mouse Reeve
5093e32c64 New translations django.po (Vietnamese) 2021-12-04 15:56:07 -08:00
Mouse Reeve
1ab4f59861 New translations django.po (Portuguese, Brazilian) 2021-12-04 15:56:06 -08:00
Mouse Reeve
83a093cf75 New translations django.po (Hebrew) 2021-12-04 15:56:05 -08:00
Mouse Reeve
f84cb192c6 New translations django.po (French) 2021-12-04 15:56:04 -08:00
Mouse Reeve
d4e5cf9261 New translations django.po (Lithuanian) 2021-12-04 10:09:08 -08:00
Mouse Reeve
7a320c96e9 New translations django.po (Polish) 2021-12-03 07:30:41 -08:00
Mouse Reeve
1fbef4e9ed New translations django.po (Polish) 2021-12-03 06:34:05 -08:00
Mouse Reeve
bef33831ec New translations django.po (Galician) 2021-12-02 21:48:24 -08:00
Mouse Reeve
f2e47f06d8 New translations django.po (Oulipo) 2021-12-02 13:41:25 -08:00
Mouse Reeve
3f28c0ad8e New translations django.po (German) 2021-12-02 13:41:24 -08:00
Mouse Reeve
8a2f166eb1 New translations django.po (Danish) 2021-12-02 13:41:23 -08:00
Mouse Reeve
2b756feeb9 New translations django.po (Catalan) 2021-12-02 13:41:22 -08:00
Mouse Reeve
11dec3313b New translations django.po (Arabic) 2021-12-02 13:41:21 -08:00
Mouse Reeve
e0ee8a02ad New translations django.po (Afrikaans) 2021-12-02 13:41:19 -08:00
Mouse Reeve
bd9dc6580c New translations django.po (Romanian) 2021-12-02 13:41:18 -08:00
Mouse Reeve
e66031c4be New translations django.po (Greek) 2021-12-02 13:41:17 -08:00
Mouse Reeve
052632bcc9 New translations django.po (Eastern Min) 2021-12-02 13:41:16 -08:00
Mouse Reeve
15fd6cbe76 New translations django.po (Russian) 2021-12-02 13:41:15 -08:00
Mouse Reeve
27266107a6 New translations django.po (Basque) 2021-12-02 13:41:14 -08:00
Mouse Reeve
fe61a0ec2d New translations django.po (Czech) 2021-12-02 13:41:13 -08:00
Mouse Reeve
70c79e5159 New translations django.po (Spanish) 2021-12-02 13:41:11 -08:00
Mouse Reeve
953d9c9985 New translations django.po (Lithuanian) 2021-12-02 13:41:10 -08:00
Mouse Reeve
11367b94dc New translations django.po (Galician) 2021-12-02 13:41:09 -08:00
Mouse Reeve
e9e783c46f New translations django.po (Chinese Traditional) 2021-12-02 13:41:08 -08:00
Mouse Reeve
935876546d New translations django.po (Chinese Simplified) 2021-12-02 13:41:07 -08:00
Mouse Reeve
27afa29d2d New translations django.po (Finnish) 2021-12-02 13:41:06 -08:00
Mouse Reeve
8cbd7f458b New translations django.po (Hungarian) 2021-12-02 13:41:05 -08:00
Mouse Reeve
20a43ee73d New translations django.po (Italian) 2021-12-02 13:41:04 -08:00
Mouse Reeve
fcd9b81687 New translations django.po (Japanese) 2021-12-02 13:41:02 -08:00
Mouse Reeve
b9cb0ed516 New translations django.po (Korean) 2021-12-02 13:41:01 -08:00
Mouse Reeve
cad253f393 New translations django.po (Dutch) 2021-12-02 13:41:00 -08:00
Mouse Reeve
041b260eef New translations django.po (Norwegian) 2021-12-02 13:40:59 -08:00
Mouse Reeve
ad916045f5 New translations django.po (Polish) 2021-12-02 13:40:58 -08:00
Mouse Reeve
e371269fc4 New translations django.po (Portuguese) 2021-12-02 13:40:57 -08:00
Mouse Reeve
bc8f1daa39 New translations django.po (Serbian (Cyrillic)) 2021-12-02 13:40:55 -08:00
Mouse Reeve
05b8e52660 New translations django.po (Swedish) 2021-12-02 13:40:54 -08:00
Mouse Reeve
4e2dd38c78 New translations django.po (Turkish) 2021-12-02 13:40:53 -08:00
Mouse Reeve
294aab2990 New translations django.po (Ukrainian) 2021-12-02 13:40:52 -08:00
Mouse Reeve
d908f5fc87 New translations django.po (Vietnamese) 2021-12-02 13:40:51 -08:00
Mouse Reeve
250ecc878f New translations django.po (Portuguese, Brazilian) 2021-12-02 13:40:50 -08:00
Mouse Reeve
a2b636f9df New translations django.po (Hebrew) 2021-12-02 13:40:49 -08:00
Mouse Reeve
c338b8b808 New translations django.po (French) 2021-12-02 13:40:48 -08:00
Mouse Reeve
a2f465b2a5 New translations django.po (Portuguese, Brazilian) 2021-12-02 12:38:16 -08:00
Mouse Reeve
88dd43f629 New translations django.po (German) 2021-12-02 12:38:15 -08:00
Mouse Reeve
f2c5e57447 New translations django.po (Basque) 2021-12-02 12:38:14 -08:00
Mouse Reeve
a10203eb8c New translations django.po (Spanish) 2021-12-02 12:38:13 -08:00
Mouse Reeve
1967e820dd New translations django.po (Oulipo) 2021-12-02 11:39:36 -08:00
Mouse Reeve
b3342876e1 New translations django.po (German) 2021-12-02 11:39:34 -08:00
Mouse Reeve
a7ecdde675 New translations django.po (Danish) 2021-12-02 11:39:33 -08:00
Mouse Reeve
d177158652 New translations django.po (Catalan) 2021-12-02 11:39:32 -08:00
Mouse Reeve
408ccc4e6c New translations django.po (Arabic) 2021-12-02 11:39:31 -08:00
Mouse Reeve
c5fa0113e6 New translations django.po (Afrikaans) 2021-12-02 11:39:27 -08:00
Mouse Reeve
4f6c8b7a46 New translations django.po (Romanian) 2021-12-02 11:39:26 -08:00
Mouse Reeve
fd2a3e8eeb New translations django.po (Greek) 2021-12-02 11:39:24 -08:00
Mouse Reeve
7e4e5c9eff New translations django.po (Eastern Min) 2021-12-02 11:39:23 -08:00
Mouse Reeve
b5fd7f15ba New translations django.po (Russian) 2021-12-02 11:39:22 -08:00
Mouse Reeve
5b5799b1c6 New translations django.po (Basque) 2021-12-02 11:39:21 -08:00
Mouse Reeve
c7ec49e322 New translations django.po (Czech) 2021-12-02 11:39:20 -08:00
Mouse Reeve
387ca531f4 New translations django.po (Spanish) 2021-12-02 11:39:19 -08:00
Mouse Reeve
a3219a5f87 New translations django.po (Lithuanian) 2021-12-02 11:39:17 -08:00
Mouse Reeve
b947b12f83 New translations django.po (Galician) 2021-12-02 11:39:16 -08:00
Mouse Reeve
6e02b80971 New translations django.po (Chinese Traditional) 2021-12-02 11:39:15 -08:00
Mouse Reeve
28d25d732c New translations django.po (Chinese Simplified) 2021-12-02 11:39:14 -08:00
Mouse Reeve
817df09921 New translations django.po (Finnish) 2021-12-02 11:39:13 -08:00
Mouse Reeve
759ba6a65c New translations django.po (Hungarian) 2021-12-02 11:39:12 -08:00
Mouse Reeve
27a247b65a New translations django.po (Italian) 2021-12-02 11:39:11 -08:00
Mouse Reeve
eb6048b3e2 New translations django.po (Japanese) 2021-12-02 11:39:09 -08:00
Mouse Reeve
f4ce7f458c New translations django.po (Korean) 2021-12-02 11:39:08 -08:00
Mouse Reeve
59a8e5efec New translations django.po (Dutch) 2021-12-02 11:39:07 -08:00
Mouse Reeve
6805e43933 New translations django.po (Norwegian) 2021-12-02 11:39:06 -08:00
Mouse Reeve
d410bab8a2 New translations django.po (Polish) 2021-12-02 11:39:05 -08:00
Mouse Reeve
34061856fd New translations django.po (Portuguese) 2021-12-02 11:39:04 -08:00
Mouse Reeve
a244e15e16 New translations django.po (Serbian (Cyrillic)) 2021-12-02 11:39:02 -08:00
Mouse Reeve
63e72c5f46 New translations django.po (Swedish) 2021-12-02 11:39:01 -08:00
Mouse Reeve
a19e76511e New translations django.po (Turkish) 2021-12-02 11:38:59 -08:00
Mouse Reeve
beb77d3950 New translations django.po (Ukrainian) 2021-12-02 11:38:58 -08:00
Mouse Reeve
54adee33ca New translations django.po (Vietnamese) 2021-12-02 11:38:57 -08:00
Mouse Reeve
6bb69a0afc New translations django.po (Portuguese, Brazilian) 2021-12-02 11:38:56 -08:00
Mouse Reeve
f6c8256ae6 New translations django.po (Hebrew) 2021-12-02 11:38:55 -08:00
Mouse Reeve
e29c1d4444 New translations django.po (French) 2021-12-02 11:38:54 -08:00
Mouse Reeve
670c4d4aeb New translations django.po (Lithuanian) 2021-11-29 05:53:30 -08:00
Mouse Reeve
92628c2873 New translations django.po (Chinese Simplified) 2021-11-29 01:31:02 -08:00
Mouse Reeve
fd07266f14 New translations django.po (Lithuanian) 2021-11-28 10:39:08 -08:00
Mouse Reeve
58b0d8dfa4 New translations django.po (Czech) 2021-11-27 05:06:25 -08:00
Mouse Reeve
300882e249 New translations django.po (Lithuanian) 2021-11-24 01:24:12 -08:00
Mouse Reeve
49d618f56e New translations django.po (French) 2021-11-22 11:37:16 -08:00
Mouse Reeve
d8d944fdee New translations django.po (Lithuanian) 2021-11-22 00:50:25 -08:00
Mouse Reeve
e0615c8283 New translations django.po (Russian) 2021-11-21 14:19:33 -08:00
Mouse Reeve
63f52f3f7a New translations django.po (Lithuanian) 2021-11-21 13:19:47 -08:00
Mouse Reeve
63002f497e New translations django.po (Eastern Min) 2021-11-21 12:24:41 -08:00
Mouse Reeve
15463be849 New translations django.po (Russian) 2021-11-21 12:24:39 -08:00
Mouse Reeve
fa0b49df28 New translations django.po (Eastern Min) 2021-11-21 11:24:17 -08:00
Mouse Reeve
e635d1a95d New translations django.po (Russian) 2021-11-21 11:24:16 -08:00
Mouse Reeve
0bf3e6ee8b New translations django.po (Russian) 2021-11-21 10:15:51 -08:00
Mouse Reeve
f376ca0d51 New translations django.po (Russian) 2021-11-21 08:35:50 -08:00
Mouse Reeve
f07c4668f8 New translations django.po (Lithuanian) 2021-11-20 10:07:24 -08:00
Mouse Reeve
0f151e4754 New translations django.po (Basque) 2021-11-20 04:33:18 -08:00
Mouse Reeve
10d2ca7d64 New translations django.po (Basque) 2021-11-20 03:35:51 -08:00
Mouse Reeve
21130834a8 New translations django.po (French) 2021-11-19 14:55:45 -08:00
Mouse Reeve
cdea1995a3 New translations django.po (Spanish) 2021-11-19 10:53:36 -08:00
Mouse Reeve
7d7095bb20 New translations django.po (Spanish) 2021-11-19 09:43:36 -08:00
Mouse Reeve
e4b69820d0 New translations django.po (Galician) 2021-11-19 09:43:35 -08:00
Mouse Reeve
1d89cadbeb New translations django.po (Galician) 2021-11-19 08:48:22 -08:00
Mouse Reeve
3612c2d875 New translations django.po (Galician) 2021-11-19 00:47:58 -08:00
Mouse Reeve
474fcd713b New translations django.po (Galician) 2021-11-18 23:39:44 -08:00
Mouse Reeve
977ea9d3a6 New translations django.po (Russian) 2021-11-18 15:50:09 -08:00
Mouse Reeve
482b2671fa New translations django.po (Russian) 2021-11-18 12:07:51 -08:00
Mouse Reeve
565fbec415 New translations django.po (Russian) 2021-11-18 10:59:20 -08:00
Mouse Reeve
6c69cd001b New translations django.po (Russian) 2021-11-18 09:50:53 -08:00
Mouse Reeve
d671f42a85 New translations django.po (Galician) 2021-11-17 23:15:56 -08:00
Mouse Reeve
bef0094790 New translations django.po (Portuguese, Brazilian) 2021-11-17 15:52:18 -08:00
Mouse Reeve
200b5a1b46 New translations django.po (Lithuanian) 2021-11-17 12:02:34 -08:00
Mouse Reeve
ae734cdc1c New translations django.po (Eastern Min) 2021-11-17 10:42:36 -08:00
Mouse Reeve
b95d0547cc New translations django.po (Finnish) 2021-11-17 10:42:35 -08:00
Mouse Reeve
0c9807e3ca New translations django.po (Basque) 2021-11-17 10:42:34 -08:00
Mouse Reeve
c277a9373d New translations django.po (Greek) 2021-11-17 10:42:33 -08:00
Mouse Reeve
d2b6d40be7 New translations django.po (German) 2021-11-17 10:42:31 -08:00
Mouse Reeve
f5804f97eb New translations django.po (Danish) 2021-11-17 10:42:30 -08:00
Mouse Reeve
6c1148ac2e New translations django.po (Czech) 2021-11-17 10:42:29 -08:00
Mouse Reeve
c15c33633c New translations django.po (Hebrew) 2021-11-17 10:42:27 -08:00
Mouse Reeve
b96da09e9e New translations django.po (Catalan) 2021-11-17 10:42:26 -08:00
Mouse Reeve
cb97e11eb6 New translations django.po (Afrikaans) 2021-11-17 10:42:24 -08:00
Mouse Reeve
40db7100fd New translations django.po (Spanish) 2021-11-17 10:42:23 -08:00
Mouse Reeve
b2ac98a4dc New translations django.po (Romanian) 2021-11-17 10:42:22 -08:00
Mouse Reeve
7ad8fc1fb5 New translations django.po (Lithuanian) 2021-11-17 10:42:21 -08:00
Mouse Reeve
23133772ab New translations django.po (Galician) 2021-11-17 10:42:18 -08:00
Mouse Reeve
c85d98f674 New translations django.po (Portuguese, Brazilian) 2021-11-17 10:42:17 -08:00
Mouse Reeve
e9babccb4c New translations django.po (Arabic) 2021-11-17 10:42:16 -08:00
Mouse Reeve
de27d412e6 New translations django.po (Chinese Simplified) 2021-11-17 10:42:14 -08:00
Mouse Reeve
d425698242 New translations django.po (Hungarian) 2021-11-17 10:42:13 -08:00
Mouse Reeve
2c77284ff3 New translations django.po (Japanese) 2021-11-17 10:42:10 -08:00
Mouse Reeve
ba8d10a22a New translations django.po (Korean) 2021-11-17 10:42:09 -08:00
Mouse Reeve
68eb665fa1 New translations django.po (Dutch) 2021-11-17 10:42:06 -08:00
Mouse Reeve
cd3285d70f New translations django.po (Norwegian) 2021-11-17 10:42:05 -08:00
Mouse Reeve
1924993d32 New translations django.po (Polish) 2021-11-17 10:42:04 -08:00
Mouse Reeve
5331108f22 New translations django.po (Portuguese) 2021-11-17 10:42:02 -08:00
Mouse Reeve
fabd9f5dc6 New translations django.po (Russian) 2021-11-17 10:42:00 -08:00
Mouse Reeve
f6890bcd47 New translations django.po (Serbian (Cyrillic)) 2021-11-17 10:41:59 -08:00
Mouse Reeve
8994c292e1 New translations django.po (Swedish) 2021-11-17 10:41:57 -08:00
Mouse Reeve
223cfc6b07 New translations django.po (Turkish) 2021-11-17 10:41:56 -08:00
Mouse Reeve
94b077748a New translations django.po (Ukrainian) 2021-11-17 10:41:54 -08:00
Mouse Reeve
e2a3c68d63 New translations django.po (Chinese Traditional) 2021-11-17 10:41:53 -08:00
Mouse Reeve
bb5aa2f81d New translations django.po (Vietnamese) 2021-11-17 10:41:52 -08:00
Mouse Reeve
7f0ac99712 New translations django.po (Oulipo) 2021-11-17 10:41:51 -08:00
Mouse Reeve
1f978920c6 New translations django.po (Italian) 2021-11-17 10:41:50 -08:00
Mouse Reeve
ce56099d57 New translations django.po (French) 2021-11-17 10:41:48 -08:00
Mouse Reeve
c0f3ade8d1 New translations django.po (Eastern Min) 2021-11-17 09:40:59 -08:00
Mouse Reeve
c4fec9dbc6 New translations django.po (Eastern Min) 2021-11-17 08:39:08 -08:00
Mouse Reeve
bc634da52f New translations django.po (French) 2021-11-16 15:06:22 -08:00
Mouse Reeve
84e26cf1dc New translations django.po (French) 2021-11-16 13:50:19 -08:00
Mouse Reeve
be6c02e9b4 New translations django.po (Eastern Min) 2021-11-16 11:26:39 -08:00
Mouse Reeve
e1f7f39995 New translations django.po (French) 2021-11-16 11:26:38 -08:00
Mouse Reeve
909a031ba0 New translations django.po (Eastern Min) 2021-11-16 10:29:58 -08:00
Mouse Reeve
56ac4b42d5 New translations django.po (Lithuanian) 2021-11-16 09:33:05 -08:00
Mouse Reeve
cfbc4bf9ad New translations django.po (Eastern Min) 2021-11-16 03:30:14 -08:00
Mouse Reeve
97eb31b03c New translations django.po (Eastern Min) 2021-11-16 01:38:13 -08:00
Mouse Reeve
62f82f9611 New translations django.po (Japanese) 2021-11-16 01:38:12 -08:00
Mouse Reeve
be6eac0d70 New translations django.po (Eastern Min) 2021-11-16 00:04:02 -08:00
Mouse Reeve
98c9da20c2 New translations django.po (Eastern Min) 2021-11-15 23:07:46 -08:00
Mouse Reeve
3bc6d9c5c2 New translations django.po (Eastern Min) 2021-11-15 22:07:34 -08:00
Mouse Reeve
ec51176ab5 New translations django.po (Portuguese, Brazilian) 2021-11-15 16:36:22 -08:00
Mouse Reeve
6dbf51084a New translations django.po (Eastern Min) 2021-11-15 14:27:40 -08:00
Mouse Reeve
ce60ada2a7 New translations django.po (French) 2021-11-15 14:27:39 -08:00
Mouse Reeve
7493298a1b New translations django.po (Chinese Simplified) 2021-11-15 12:22:02 -08:00
Mouse Reeve
c24036cff8 New translations django.po (Lithuanian) 2021-11-15 11:25:37 -08:00
Mouse Reeve
6958990414 New translations django.po (Oulipo) 2021-11-15 10:03:21 -08:00
Mouse Reeve
e12b002592 New translations django.po (Portuguese, Brazilian) 2021-11-15 10:03:19 -08:00
Mouse Reeve
b411b7f515 New translations django.po (Galician) 2021-11-15 10:03:18 -08:00
Mouse Reeve
03a71df471 New translations django.po (Lithuanian) 2021-11-15 10:03:17 -08:00
Mouse Reeve
fe70f26760 New translations django.po (Romanian) 2021-11-15 10:03:16 -08:00
Mouse Reeve
e5beae52c2 New translations django.po (Spanish) 2021-11-15 10:03:14 -08:00
Mouse Reeve
c901376094 New translations django.po (Afrikaans) 2021-11-15 10:03:13 -08:00
Mouse Reeve
5db5a6197e New translations django.po (Arabic) 2021-11-15 10:03:12 -08:00
Mouse Reeve
51ba2990f2 New translations django.po (Catalan) 2021-11-15 10:03:10 -08:00
Mouse Reeve
5d5b2bcb65 New translations django.po (Czech) 2021-11-15 10:03:09 -08:00
Mouse Reeve
6d41c05a01 New translations django.po (Danish) 2021-11-15 10:03:08 -08:00
Mouse Reeve
70a1323015 New translations django.po (German) 2021-11-15 10:03:07 -08:00
Mouse Reeve
43478677cd New translations django.po (Greek) 2021-11-15 10:03:04 -08:00
Mouse Reeve
388256fcf9 New translations django.po (Basque) 2021-11-15 10:03:03 -08:00
Mouse Reeve
ed6fb3b5b0 New translations django.po (Finnish) 2021-11-15 10:03:01 -08:00
Mouse Reeve
c1798ce6f0 New translations django.po (Chinese Simplified) 2021-11-15 10:03:00 -08:00
Mouse Reeve
c15c8b0997 New translations django.po (Hebrew) 2021-11-15 10:02:58 -08:00
Mouse Reeve
052fc62199 New translations django.po (Italian) 2021-11-15 10:02:57 -08:00
Mouse Reeve
ffad716b6d New translations django.po (Japanese) 2021-11-15 10:02:56 -08:00
Mouse Reeve
9330ccea31 New translations django.po (Korean) 2021-11-15 10:02:53 -08:00
Mouse Reeve
3437b8d04b New translations django.po (Dutch) 2021-11-15 10:02:52 -08:00
Mouse Reeve
cbfb808c80 New translations django.po (Norwegian) 2021-11-15 10:02:49 -08:00
Mouse Reeve
343289a0fe New translations django.po (Polish) 2021-11-15 10:02:48 -08:00
Mouse Reeve
00fbdad493 New translations django.po (Portuguese) 2021-11-15 10:02:47 -08:00
Mouse Reeve
27fde588b9 New translations django.po (Russian) 2021-11-15 10:02:46 -08:00
Mouse Reeve
f88e9ccde7 New translations django.po (Serbian (Cyrillic)) 2021-11-15 10:02:44 -08:00
Mouse Reeve
dc1f515c1a New translations django.po (Swedish) 2021-11-15 10:02:43 -08:00
Mouse Reeve
e51c90c5ca New translations django.po (Turkish) 2021-11-15 10:02:42 -08:00
Mouse Reeve
76995a8802 New translations django.po (Ukrainian) 2021-11-15 10:02:41 -08:00
Mouse Reeve
cd24b5c6ee New translations django.po (Chinese Traditional) 2021-11-15 10:02:40 -08:00
Mouse Reeve
f91115931a New translations django.po (Vietnamese) 2021-11-15 10:02:37 -08:00
Mouse Reeve
132a8cd923 New translations django.po (Hungarian) 2021-11-15 10:02:36 -08:00
Mouse Reeve
b3649fc570 New translations django.po (French) 2021-11-15 10:02:35 -08:00
Mouse Reeve
f46220a419 New translations django.po (Chinese Simplified) 2021-11-14 04:17:55 -08:00
Mouse Reeve
174bf08361 New translations django.po (Lithuanian) 2021-11-14 03:20:45 -08:00
Mouse Reeve
da8535c77a New translations django.po (Lithuanian) 2021-11-14 02:13:19 -08:00
Mouse Reeve
6ee6564901 New translations django.po (Lithuanian) 2021-11-13 13:26:58 -08:00
Mouse Reeve
20354da4d8 New translations django.po (Lithuanian) 2021-11-13 12:30:04 -08:00
Mouse Reeve
87985cdade New translations django.po (Lithuanian) 2021-11-13 11:34:04 -08:00
Mouse Reeve
460b287fd1 New translations django.po (Lithuanian) 2021-11-13 09:22:47 -08:00
Mouse Reeve
cc974f47d6 New translations django.po (Lithuanian) 2021-11-13 08:22:41 -08:00
Mouse Reeve
da39ae0dd8 New translations django.po (Lithuanian) 2021-11-13 03:44:47 -08:00
Mouse Reeve
e9628e2b1e New translations django.po (Lithuanian) 2021-11-13 00:12:49 -08:00
Mouse Reeve
da68c794dd New translations django.po (Lithuanian) 2021-11-12 22:54:03 -08:00
Mouse Reeve
b55fed2a08 New translations django.po (Lithuanian) 2021-11-12 21:58:12 -08:00
Mouse Reeve
1532d42829 New translations django.po (Lithuanian) 2021-11-12 20:53:11 -08:00
Mouse Reeve
5205446d21 New translations django.po (Lithuanian) 2021-11-12 14:44:19 -08:00
Mouse Reeve
584a9fc6d6 New translations django.po (Lithuanian) 2021-11-12 13:48:23 -08:00
Mouse Reeve
d44d91cf2e New translations django.po (Lithuanian) 2021-11-12 12:40:41 -08:00
Mouse Reeve
67b721c132 New translations django.po (Lithuanian) 2021-11-12 11:35:03 -08:00
Mouse Reeve
f751c5ab6d New translations django.po (Lithuanian) 2021-11-12 10:35:02 -08:00
Mouse Reeve
4971e450d2 New translations django.po (Lithuanian) 2021-11-12 09:16:08 -08:00
Mouse Reeve
485ce19491 New translations django.po (French) 2021-11-12 09:16:07 -08:00
Mouse Reeve
4ec6069e1f New translations django.po (French) 2021-11-08 10:39:18 -08:00
Mouse Reeve
c920734ff8 New translations django.po (Chinese Simplified) 2021-11-06 21:05:37 -07:00
Mouse Reeve
173c9cdda7 New translations django.po (Chinese Simplified) 2021-11-06 20:06:35 -07:00
Mouse Reeve
d61b18d172 New translations django.po (Galician) 2021-11-05 01:01:14 -07:00
Mouse Reeve
1e60d52fda New translations django.po (Galician) 2021-11-04 23:56:06 -07:00
Mouse Reeve
9b2b36afa5 New translations django.po (Galician) 2021-11-03 01:12:46 -07:00
Mouse Reeve
7564cb9a76 New translations django.po (Galician) 2021-11-02 08:16:47 -07:00
Mouse Reeve
6d5d39d310 New translations django.po (Galician) 2021-11-02 07:04:37 -07:00
Mouse Reeve
e44a45eb59 New translations django.po (Portuguese, Brazilian) 2021-11-01 11:57:02 -07:00
Mouse Reeve
142a2e2f2a New translations django.po (Galician) 2021-11-01 09:53:19 -07:00
Mouse Reeve
cbf3784022 New translations django.po (Galician) 2021-11-01 08:54:12 -07:00
Mouse Reeve
6fd89157bc New translations django.po (Portuguese, Brazilian) 2021-10-31 09:47:20 -07:00
Mouse Reeve
5bfcec9697 New translations django.po (Basque) 2021-10-28 10:33:06 -07:00
Mouse Reeve
096fec621c New translations django.po (Basque) 2021-10-28 09:05:16 -07:00
Mouse Reeve
a68478e219 New translations django.po (Basque) 2021-10-27 14:15:04 -07:00
Mouse Reeve
b33771eacd New translations django.po (Basque) 2021-10-27 12:55:39 -07:00
Mouse Reeve
d8f3d78c33 New translations django.po (Basque) 2021-10-27 11:17:40 -07:00
Mouse Reeve
d9b7943af2 New translations django.po (Basque) 2021-10-27 10:18:27 -07:00
Mouse Reeve
bf67882423 New translations django.po (French) 2021-10-27 09:14:41 -07:00
Mouse Reeve
068e68d025 New translations django.po (French) 2021-10-27 08:01:27 -07:00
Mouse Reeve
cc19c18f53 New translations django.po (German) 2021-10-26 15:30:00 -07:00
Mouse Reeve
ae6086a144 New translations django.po (German) 2021-10-26 13:55:33 -07:00
Mouse Reeve
a41ad14564 New translations django.po (Spanish) 2021-10-26 13:55:32 -07:00
Mouse Reeve
0c9ec3a8b3 New translations django.po (French) 2021-10-26 11:52:50 -07:00
Mouse Reeve
3558f21d8b New translations django.po (German) 2021-10-26 10:52:00 -07:00
Mouse Reeve
4e7086b534 New translations django.po (French) 2021-10-26 10:51:58 -07:00
Mouse Reeve
1feae720f7 New translations django.po (German) 2021-10-26 09:45:17 -07:00
Mouse Reeve
f4621a2b8c New translations django.po (Basque) 2021-10-26 08:10:29 -07:00
Mouse Reeve
2e64371de1 New translations django.po (Basque) 2021-10-26 07:14:50 -07:00
Mouse Reeve
b0d15da6b9 New translations django.po (Basque) 2021-10-26 06:15:38 -07:00
Mouse Reeve
68dd86ec37 New translations django.po (Basque) 2021-10-26 05:15:58 -07:00
Mouse Reeve
3b73799b12 New translations django.po (German) 2021-10-26 02:07:09 -07:00
Mouse Reeve
47c9c83ad5 New translations django.po (French) 2021-10-25 14:02:49 -07:00
Mouse Reeve
759473c579 New translations django.po (French) 2021-10-25 12:45:56 -07:00
Mouse Reeve
fbfef03f77 New translations django.po (Spanish) 2021-10-25 00:05:01 -07:00
Mouse Reeve
17b3c36099 New translations django.po (Portuguese, Brazilian) 2021-10-24 16:23:14 -07:00
Mouse Reeve
b334316bdf New translations django.po (Basque) 2021-10-24 15:18:24 -07:00
Mouse Reeve
8073832356 New translations django.po (Basque) 2021-10-24 14:09:13 -07:00
Mouse Reeve
2e2e2687b8 New translations django.po (Basque) 2021-10-24 12:59:04 -07:00
Mouse Reeve
1349660538 New translations django.po (Portuguese, Brazilian) 2021-10-24 12:59:03 -07:00
Mouse Reeve
0bbd57a11f New translations django.po (Basque) 2021-10-24 11:36:47 -07:00
Mouse Reeve
a107d42e24 New translations django.po (Spanish) 2021-10-24 11:36:45 -07:00
Mouse Reeve
29a2130105 New translations django.po (Afrikaans) 2021-10-24 11:36:44 -07:00
Mouse Reeve
d66dc2edfb New translations django.po (Arabic) 2021-10-24 11:36:43 -07:00
Mouse Reeve
a42d15eec5 New translations django.po (Catalan) 2021-10-24 11:36:42 -07:00
Mouse Reeve
5c970df9ee New translations django.po (Czech) 2021-10-24 11:36:41 -07:00
Mouse Reeve
5ee9c6a548 New translations django.po (Danish) 2021-10-24 11:36:40 -07:00
Mouse Reeve
fd98401079 New translations django.po (German) 2021-10-24 11:36:39 -07:00
Mouse Reeve
f1f2a10a10 New translations django.po (Greek) 2021-10-24 11:36:37 -07:00
Mouse Reeve
95f7e8a4bf New translations django.po (Finnish) 2021-10-24 11:36:36 -07:00
Mouse Reeve
baa15b470f New translations django.po (Hebrew) 2021-10-24 11:36:35 -07:00
Mouse Reeve
25d58b0c0f New translations django.po (Hungarian) 2021-10-24 11:36:34 -07:00
Mouse Reeve
87303a19bd New translations django.po (Italian) 2021-10-24 11:36:33 -07:00
Mouse Reeve
09eb9a7194 New translations django.po (Japanese) 2021-10-24 11:36:32 -07:00
Mouse Reeve
a635ea5321 New translations django.po (Korean) 2021-10-24 11:36:31 -07:00
Mouse Reeve
90cbdb28fa New translations django.po (French) 2021-10-24 11:36:30 -07:00
Mouse Reeve
246aea556b New translations django.po (Dutch) 2021-10-24 11:36:29 -07:00
Mouse Reeve
488522aa90 New translations django.po (Polish) 2021-10-24 11:36:28 -07:00
Mouse Reeve
ff0e3925f8 New translations django.po (Portuguese) 2021-10-24 11:36:27 -07:00
Mouse Reeve
d91b495203 New translations django.po (Russian) 2021-10-24 11:36:25 -07:00
Mouse Reeve
4c88221a4f New translations django.po (Serbian (Cyrillic)) 2021-10-24 11:36:24 -07:00
Mouse Reeve
ce47aa7f3c New translations django.po (Swedish) 2021-10-24 11:36:23 -07:00
Mouse Reeve
b60fb53dcd New translations django.po (Turkish) 2021-10-24 11:36:22 -07:00
Mouse Reeve
727b01d6c3 New translations django.po (Ukrainian) 2021-10-24 11:36:21 -07:00
Mouse Reeve
345265fc9a New translations django.po (Chinese Simplified) 2021-10-24 11:36:20 -07:00
Mouse Reeve
677a277735 New translations django.po (Chinese Traditional) 2021-10-24 11:36:19 -07:00
Mouse Reeve
084b2ec797 New translations django.po (Vietnamese) 2021-10-24 11:36:18 -07:00
Mouse Reeve
88ed301585 New translations django.po (Portuguese, Brazilian) 2021-10-24 11:36:16 -07:00
Mouse Reeve
3140b9cac3 New translations django.po (Oulipo) 2021-10-24 11:36:15 -07:00
Mouse Reeve
771554cf93 New translations django.po (Galician) 2021-10-24 11:36:14 -07:00
Mouse Reeve
3fff0864e2 New translations django.po (Norwegian) 2021-10-24 11:36:12 -07:00
Mouse Reeve
0d5567d87f New translations django.po (Romanian) 2021-10-24 11:36:11 -07:00
Mouse Reeve
3b5167ee50 New translations django.po (Basque) 2021-10-24 10:30:57 -07:00
Mouse Reeve
13ce381fc4 New translations django.po (Portuguese, Brazilian) 2021-10-24 09:05:27 -07:00
Mouse Reeve
b6b135923c New translations django.po (Spanish) 2021-10-24 08:08:20 -07:00
Mouse Reeve
078ab6c5e6 New translations django.po (Portuguese, Brazilian) 2021-10-24 07:02:43 -07:00
Mouse Reeve
53f9826a26 New translations django.po (Spanish) 2021-10-24 07:02:42 -07:00
Mouse Reeve
993e28fc06 New translations django.po (Spanish) 2021-10-24 05:09:36 -07:00
Mouse Reeve
ce2f0c23c5 New translations django.po (Spanish) 2021-10-24 04:11:19 -07:00
Mouse Reeve
96292b9f3b New translations django.po (Basque) 2021-10-23 16:46:26 -07:00
Mouse Reeve
ab6d83eb9e New translations django.po (Basque) 2021-10-23 15:37:35 -07:00
Mouse Reeve
d2867535bc New translations django.po (Portuguese, Brazilian) 2021-10-23 09:18:21 -07:00
Mouse Reeve
eb5541d686 New translations django.po (German) 2021-10-23 09:18:20 -07:00
Mouse Reeve
d4c90d7aee New translations django.po (Portuguese, Brazilian) 2021-10-23 08:05:47 -07:00
Mouse Reeve
d53c9ea042 New translations django.po (German) 2021-10-23 08:05:46 -07:00
Mouse Reeve
38b0211ea1 New translations django.po (Portuguese, Brazilian) 2021-10-23 06:54:32 -07:00
Mouse Reeve
356bf6eb69 New translations django.po (Basque) 2021-10-23 05:54:30 -07:00
Mouse Reeve
c811f79fd3 New translations django.po (Basque) 2021-10-23 04:57:25 -07:00
Mouse Reeve
f42508971e New translations django.po (Basque) 2021-10-23 03:55:15 -07:00
Mouse Reeve
f6a2ff7523 New translations django.po (German) 2021-10-23 03:55:14 -07:00
Mouse Reeve
0923fd4084 New translations django.po (Basque) 2021-10-23 02:51:15 -07:00
Mouse Reeve
5a435aec57 New translations django.po (German) 2021-10-23 02:51:13 -07:00
Mouse Reeve
470901ade4 New translations django.po (Basque) 2021-10-23 01:50:23 -07:00
Mouse Reeve
ca2f3ea951 New translations django.po (Galician) 2021-10-22 23:28:53 -07:00
Mouse Reeve
fd22d4b730 New translations django.po (Galician) 2021-10-22 22:27:06 -07:00
Mouse Reeve
201e48eabf New translations django.po (Portuguese, Brazilian) 2021-10-22 18:07:48 -07:00
Mouse Reeve
e656d9168e New translations django.po (Portuguese, Brazilian) 2021-10-22 15:53:37 -07:00
Mouse Reeve
53c6dd0c89 New translations django.po (Portuguese, Brazilian) 2021-10-22 14:55:49 -07:00
Mouse Reeve
d179e76083 New translations django.po (Basque) 2021-10-22 11:34:45 -07:00
Mouse Reeve
994f12e3ba New translations django.po (Spanish) 2021-10-22 11:34:44 -07:00
Mouse Reeve
6d21aa99f6 New translations django.po (Afrikaans) 2021-10-22 11:34:36 -07:00
Mouse Reeve
6243cdd4a1 New translations django.po (Arabic) 2021-10-22 11:34:35 -07:00
Mouse Reeve
1150cf249d New translations django.po (Catalan) 2021-10-22 11:34:31 -07:00
Mouse Reeve
35167f05b1 New translations django.po (Czech) 2021-10-22 11:34:24 -07:00
Mouse Reeve
54aee25089 New translations django.po (Danish) 2021-10-22 11:34:23 -07:00
Mouse Reeve
a66f19da4b New translations django.po (German) 2021-10-22 11:34:20 -07:00
Mouse Reeve
913774a41d New translations django.po (Greek) 2021-10-22 11:34:15 -07:00
Mouse Reeve
958df16454 New translations django.po (Finnish) 2021-10-22 11:34:09 -07:00
Mouse Reeve
538dbb9c11 New translations django.po (Hebrew) 2021-10-22 11:34:08 -07:00
Mouse Reeve
f5e4905ee7 New translations django.po (Hungarian) 2021-10-22 11:34:06 -07:00
Mouse Reeve
939750c8e9 New translations django.po (Italian) 2021-10-22 11:34:00 -07:00
Mouse Reeve
6af3f2ea37 New translations django.po (Japanese) 2021-10-22 11:33:59 -07:00
Mouse Reeve
1dff7781c8 New translations django.po (Korean) 2021-10-22 11:33:55 -07:00
Mouse Reeve
5ca3cf693c New translations django.po (French) 2021-10-22 11:33:53 -07:00
Mouse Reeve
b922467970 New translations django.po (Dutch) 2021-10-22 11:33:49 -07:00
Mouse Reeve
99424d5126 New translations django.po (Polish) 2021-10-22 11:33:48 -07:00
Mouse Reeve
ae6de1e431 New translations django.po (Portuguese) 2021-10-22 11:33:46 -07:00
Mouse Reeve
8eea021744 New translations django.po (Russian) 2021-10-22 11:33:45 -07:00
Mouse Reeve
360cc9f194 New translations django.po (Serbian (Cyrillic)) 2021-10-22 11:33:42 -07:00
Mouse Reeve
4e1a73f676 New translations django.po (Swedish) 2021-10-22 11:33:41 -07:00
Mouse Reeve
03be69ae57 New translations django.po (Turkish) 2021-10-22 11:33:39 -07:00
Mouse Reeve
676374607a New translations django.po (Ukrainian) 2021-10-22 11:33:37 -07:00
Mouse Reeve
dd93154c54 New translations django.po (Chinese Simplified) 2021-10-22 11:33:30 -07:00
Mouse Reeve
ecb1ed6238 New translations django.po (Chinese Traditional) 2021-10-22 11:33:24 -07:00
Mouse Reeve
6f71d2c35b New translations django.po (Vietnamese) 2021-10-22 11:33:18 -07:00
Mouse Reeve
04854b56f9 New translations django.po (Portuguese, Brazilian) 2021-10-22 11:33:12 -07:00
Mouse Reeve
727db384a1 New translations django.po (Oulipo) 2021-10-22 11:33:10 -07:00
Mouse Reeve
27504e1ed4 New translations django.po (Galician) 2021-10-22 11:33:06 -07:00
Mouse Reeve
69be9c6038 New translations django.po (Norwegian) 2021-10-22 11:33:01 -07:00
Mouse Reeve
0df92eb193 New translations django.po (Romanian) 2021-10-22 11:32:56 -07:00
Mouse Reeve
91bd36ef0f New translations django.po (Basque) 2021-10-22 10:00:40 -07:00
Mouse Reeve
f0236cc69a New translations django.po (Basque) 2021-10-22 08:03:48 -07:00
Mouse Reeve
a3e6f5ab04 New translations django.po (Portuguese, Brazilian) 2021-10-22 06:31:09 -07:00
Mouse Reeve
fc3f9b6c1a New translations django.po (Basque) 2021-10-21 15:43:30 -07:00
Mouse Reeve
175e49e805 New translations django.po (Spanish) 2021-10-21 14:00:14 -07:00
Mouse Reeve
1c004b06bd New translations django.po (Spanish) 2021-10-21 12:38:21 -07:00
Mouse Reeve
9f17443a52 New translations django.po (German) 2021-10-20 10:38:21 -07:00
Mouse Reeve
b1adccd017 New translations django.po (German) 2021-10-20 09:40:34 -07:00
Mouse Reeve
1fa62dfd4d New translations django.po (German) 2021-10-20 08:35:18 -07:00
Mouse Reeve
ea71297187 New translations django.po (German) 2021-10-20 07:33:07 -07:00
Mouse Reeve
479c404618 New translations django.po (German) 2021-10-20 06:37:39 -07:00
Mouse Reeve
e7ed9ded86 New translations django.po (German) 2021-10-20 05:26:00 -07:00
Mouse Reeve
52e7c37403 New translations django.po (Galician) 2021-10-19 22:29:09 -07:00
Mouse Reeve
7a5e0e6ddb New translations django.po (Spanish) 2021-10-16 18:28:21 -07:00
Mouse Reeve
dd1058c2c9 New translations django.po (Portuguese, Brazilian) 2021-10-16 17:11:14 -07:00
Mouse Reeve
758cff5fc7 New translations django.po (Portuguese, Brazilian) 2021-10-16 15:56:49 -07:00
Mouse Reeve
c1c71f6a31 New translations django.po (Portuguese, Brazilian) 2021-10-16 08:36:18 -07:00
Mouse Reeve
76ef29f2dd New translations django.po (Galician) 2021-10-16 07:36:42 -07:00
Mouse Reeve
490c714454 New translations django.po (Spanish) 2021-10-16 07:36:41 -07:00
Mouse Reeve
4394a61358 New translations django.po (Afrikaans) 2021-10-16 07:36:40 -07:00
Mouse Reeve
ce450badcf New translations django.po (Arabic) 2021-10-16 07:36:39 -07:00
Mouse Reeve
9950edec7d New translations django.po (Catalan) 2021-10-16 07:36:38 -07:00
Mouse Reeve
3b3453f8b2 New translations django.po (Czech) 2021-10-16 07:36:37 -07:00
Mouse Reeve
3a14e7ccb3 New translations django.po (Danish) 2021-10-16 07:36:35 -07:00
Mouse Reeve
f7fa45836b New translations django.po (German) 2021-10-16 07:36:34 -07:00
Mouse Reeve
98ddad8bad New translations django.po (Greek) 2021-10-16 07:36:33 -07:00
Mouse Reeve
829c072a11 New translations django.po (Finnish) 2021-10-16 07:36:32 -07:00
Mouse Reeve
820e185ce6 New translations django.po (Hebrew) 2021-10-16 07:36:31 -07:00
Mouse Reeve
b5753a9220 New translations django.po (Hungarian) 2021-10-16 07:36:30 -07:00
Mouse Reeve
c2fe6d4286 New translations django.po (Italian) 2021-10-16 07:36:29 -07:00
Mouse Reeve
628a1410ff New translations django.po (Japanese) 2021-10-16 07:36:28 -07:00
Mouse Reeve
40c0e06c75 New translations django.po (French) 2021-10-16 07:36:27 -07:00
Mouse Reeve
c04f4e4488 New translations django.po (Korean) 2021-10-16 07:36:26 -07:00
Mouse Reeve
11a2845159 New translations django.po (Norwegian) 2021-10-16 07:36:25 -07:00
Mouse Reeve
8d6d416594 New translations django.po (Polish) 2021-10-16 07:36:24 -07:00
Mouse Reeve
679b7eba66 New translations django.po (Portuguese) 2021-10-16 07:36:21 -07:00
Mouse Reeve
78048582f0 New translations django.po (Russian) 2021-10-16 07:36:20 -07:00
Mouse Reeve
aeb9a3eebc New translations django.po (Serbian (Cyrillic)) 2021-10-16 07:36:19 -07:00
Mouse Reeve
fcfe1a4751 New translations django.po (Swedish) 2021-10-16 07:36:18 -07:00
Mouse Reeve
3ca52d7bb3 New translations django.po (Turkish) 2021-10-16 07:36:17 -07:00
Mouse Reeve
bfd9640e03 New translations django.po (Ukrainian) 2021-10-16 07:36:16 -07:00
Mouse Reeve
81cfada54d New translations django.po (Chinese Simplified) 2021-10-16 07:36:15 -07:00
Mouse Reeve
b6f1806dc6 New translations django.po (Chinese Traditional) 2021-10-16 07:36:14 -07:00
Mouse Reeve
66d4cf6c73 New translations django.po (Vietnamese) 2021-10-16 07:36:13 -07:00
Mouse Reeve
4857b49dcc New translations django.po (Portuguese, Brazilian) 2021-10-16 07:36:12 -07:00
Mouse Reeve
34152de210 New translations django.po (Oulipo) 2021-10-16 07:36:11 -07:00
Mouse Reeve
cf19ec7670 New translations django.po (Dutch) 2021-10-16 07:36:10 -07:00
Mouse Reeve
b29d03c065 New translations django.po (Romanian) 2021-10-16 07:36:09 -07:00
Mouse Reeve
aed04af273 New translations django.po (Chinese Simplified) 2021-10-16 06:36:27 -07:00
Mouse Reeve
a40edbf838 New translations django.po (Portuguese, Brazilian) 2021-10-15 18:47:06 -07:00
Mouse Reeve
712beae181 New translations django.po (Czech) 2021-10-14 01:44:34 -07:00
Mouse Reeve
4720f12c18 New translations django.po (German) 2021-10-13 13:20:58 -07:00
Mouse Reeve
fc30b5057f New translations django.po (Portuguese, Brazilian) 2021-10-13 09:42:44 -07:00
Mouse Reeve
2d9927f333 New translations django.po (German) 2021-10-13 06:32:54 -07:00
Mouse Reeve
801227e736 New translations django.po (Galician) 2021-10-12 21:57:29 -07:00
Mouse Reeve
7115695508 New translations django.po (Galician) 2021-10-12 20:37:34 -07:00
Mouse Reeve
00dbf94ace New translations django.po (Czech) 2021-10-12 16:17:23 -07:00
Mouse Reeve
66ee64e6ca New translations django.po (Czech) 2021-10-12 15:13:01 -07:00
Mouse Reeve
1284af89e1 New translations django.po (Czech) 2021-10-12 14:09:05 -07:00
Mouse Reeve
fad08a57d2 New translations django.po (Czech) 2021-10-12 13:11:08 -07:00
Mouse Reeve
125414e080 New translations django.po (Portuguese, Brazilian) 2021-10-11 12:01:18 -07:00
Mouse Reeve
2520f7ad20 New translations django.po (Portuguese, Brazilian) 2021-10-11 09:27:58 -07:00
Mouse Reeve
09aa389704 New translations django.po (Portuguese, Brazilian) 2021-10-11 07:28:24 -07:00
Mouse Reeve
06682d705d New translations django.po (Czech) 2021-10-11 06:20:45 -07:00
Mouse Reeve
647defcab0 New translations django.po (Portuguese, Brazilian) 2021-10-10 16:23:48 -07:00
Mouse Reeve
34106f7295 New translations django.po (Portuguese, Brazilian) 2021-10-10 15:18:21 -07:00
Mouse Reeve
f601304f24 New translations django.po (Portuguese, Brazilian) 2021-10-10 14:13:22 -07:00
Mouse Reeve
9e7f40efd3 New translations django.po (French) 2021-10-10 13:16:26 -07:00
Mouse Reeve
b1f7205fb8 New translations django.po (Portuguese, Brazilian) 2021-10-10 10:55:56 -07:00
Mouse Reeve
9ddaa6b605 New translations django.po (Portuguese, Brazilian) 2021-10-10 09:50:49 -07:00
Mouse Reeve
bd8f737493 New translations django.po (Portuguese, Brazilian) 2021-10-09 16:19:35 -07:00
Mouse Reeve
0b19f9ddb9 New translations django.po (Portuguese, Brazilian) 2021-10-09 15:19:15 -07:00
Mouse Reeve
27baf280e5 New translations django.po (Portuguese, Brazilian) 2021-10-09 07:10:42 -07:00
Mouse Reeve
4c27d6e134 New translations django.po (French) 2021-10-09 05:03:14 -07:00
Mouse Reeve
927db8469d New translations django.po (French) 2021-10-09 03:58:09 -07:00
Mouse Reeve
b8daf61be4 New translations django.po (Galician) 2021-10-08 20:40:46 -07:00
Mouse Reeve
4a505597bf New translations django.po (German) 2021-10-08 16:15:18 -07:00
Mouse Reeve
8183f44463 New translations django.po (Portuguese, Brazilian) 2021-10-08 09:24:01 -07:00
Mouse Reeve
1107b29c36 New translations django.po (Arabic) 2021-10-08 08:22:59 -07:00
Mouse Reeve
d4621f8b8b New translations django.po (Galician) 2021-10-08 07:23:15 -07:00
Mouse Reeve
a7baa4e5c4 New translations django.po (German) 2021-10-08 07:23:14 -07:00
Mouse Reeve
5f0bad068b New translations django.po (German) 2021-10-08 06:23:12 -07:00
Mouse Reeve
5424e4631b New translations django.po (German) 2021-10-08 05:17:20 -07:00
Mouse Reeve
df027a1f3c New translations django.po (German) 2021-10-08 04:19:10 -07:00
Mouse Reeve
a2b82e1f5d New translations django.po (Italian) 2021-10-08 03:19:45 -07:00
Mouse Reeve
cc4454d497 New translations django.po (German) 2021-10-08 03:19:43 -07:00
Mouse Reeve
0f558afed9 New translations django.po (French) 2021-10-08 03:19:42 -07:00
Mouse Reeve
44e6166d4b New translations django.po (French) 2021-10-08 01:47:38 -07:00
Mouse Reeve
3843e1b9ec New translations django.po (German) 2021-10-08 00:01:52 -07:00
Mouse Reeve
9955ac9dd5 New translations django.po (Portuguese, Brazilian) 2021-10-07 22:40:30 -07:00
Mouse Reeve
34504850e3 New translations django.po (German) 2021-10-07 22:40:29 -07:00
Mouse Reeve
4dac0bbaf4 New translations django.po (Portuguese, Brazilian) 2021-10-07 21:27:58 -07:00
Mouse Reeve
d88716d16d New translations django.po (Arabic) 2021-10-07 18:43:16 -07:00
803 changed files with 125769 additions and 34883 deletions

75
.env.dev.example Normal file
View file

@ -0,0 +1,75 @@
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY="7(2w1sedok=aznpq)ta1mc4i%4h=xx@hxwx*o57ctsuml0x%fr"
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG=true
USE_HTTPS=false
DOMAIN=your.domain.here
#EMAIL=your@email.here
# Used for deciding which editions to prefer
DEFAULT_LANGUAGE="English"
## Leave unset to allow all hosts
# ALLOWED_HOSTS="localhost,127.0.0.1,[::1]"
MEDIA_ROOT=images/
PGPORT=5432
POSTGRES_PASSWORD=securedbypassword123
POSTGRES_USER=fedireads
POSTGRES_DB=fedireads
POSTGRES_HOST=db
# Redis activity stream manager
MAX_STREAM_LENGTH=200
REDIS_ACTIVITY_HOST=redis_activity
REDIS_ACTIVITY_PORT=6379
#REDIS_ACTIVITY_PASSWORD=redispassword345
# Redis as celery broker
REDIS_BROKER_PORT=6379
#REDIS_BROKER_PASSWORD=redispassword123
FLOWER_PORT=8888
#FLOWER_USER=mouse
#FLOWER_PASSWORD=changeme
EMAIL_HOST="smtp.mailgun.org"
EMAIL_PORT=587
EMAIL_HOST_USER=mail@your.domain.here
EMAIL_HOST_PASSWORD=emailpassword123
EMAIL_USE_TLS=true
EMAIL_USE_SSL=false
# Thumbnails Generation
ENABLE_THUMBNAIL_GENERATION=false
# S3 configuration
USE_S3=false
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
# Commented are example values if you use a non-AWS, S3-compatible service
# AWS S3 should work with only AWS_STORAGE_BUCKET_NAME and AWS_S3_REGION_NAME
# non-AWS S3-compatible services will need AWS_STORAGE_BUCKET_NAME,
# along with both AWS_S3_CUSTOM_DOMAIN and AWS_S3_ENDPOINT_URL
# AWS_STORAGE_BUCKET_NAME= # "example-bucket-name"
# AWS_S3_CUSTOM_DOMAIN=None # "example-bucket-name.s3.fr-par.scw.cloud"
# AWS_S3_REGION_NAME=None # "fr-par"
# AWS_S3_ENDPOINT_URL=None # "https://s3.fr-par.scw.cloud"
# Preview image generation can be computing and storage intensive
# ENABLE_PREVIEW_IMAGES=True
# Specify RGB tuple or RGB hex strings,
# or use_dominant_color_light / use_dominant_color_dark
PREVIEW_BG_COLOR=use_dominant_color_light
# Change to #FFF if you use use_dominant_color_dark
PREVIEW_TEXT_COLOR="#363636"
PREVIEW_IMG_WIDTH=1200
PREVIEW_IMG_HEIGHT=630
PREVIEW_DEFAULT_COVER_COLOR="#002549"

View file

@ -8,8 +8,6 @@ USE_HTTPS=true
DOMAIN=your.domain.here DOMAIN=your.domain.here
EMAIL=your@email.here EMAIL=your@email.here
# Instance defualt language (see options at bookwyrm/settings.py "LANGUAGES"
LANGUAGE_CODE="en-us"
# Used for deciding which editions to prefer # Used for deciding which editions to prefer
DEFAULT_LANGUAGE="English" DEFAULT_LANGUAGE="English"
@ -18,7 +16,6 @@ DEFAULT_LANGUAGE="English"
MEDIA_ROOT=images/ MEDIA_ROOT=images/
# Database configuration
PGPORT=5432 PGPORT=5432
POSTGRES_PASSWORD=securedbypassword123 POSTGRES_PASSWORD=securedbypassword123
POSTGRES_USER=fedireads POSTGRES_USER=fedireads
@ -30,34 +27,21 @@ MAX_STREAM_LENGTH=200
REDIS_ACTIVITY_HOST=redis_activity REDIS_ACTIVITY_HOST=redis_activity
REDIS_ACTIVITY_PORT=6379 REDIS_ACTIVITY_PORT=6379
REDIS_ACTIVITY_PASSWORD=redispassword345 REDIS_ACTIVITY_PASSWORD=redispassword345
# Optional, use a different redis database (defaults to 0)
# REDIS_ACTIVITY_DB_INDEX=0
# Redis as celery broker # Redis as celery broker
REDIS_BROKER_PORT=6379 REDIS_BROKER_PORT=6379
REDIS_BROKER_PASSWORD=redispassword123 REDIS_BROKER_PASSWORD=redispassword123
# Optional, use a different redis database (defaults to 0)
# REDIS_BROKER_DB_INDEX=0
# Monitoring for celery
FLOWER_PORT=8888 FLOWER_PORT=8888
FLOWER_USER=admin FLOWER_USER=mouse
FLOWER_PASSWORD=changeme FLOWER_PASSWORD=changeme
# Email config EMAIL_HOST="smtp.mailgun.org"
EMAIL_HOST=smtp.mailgun.org
EMAIL_PORT=587 EMAIL_PORT=587
EMAIL_HOST_USER=mail@your.domain.here EMAIL_HOST_USER=mail@your.domain.here
EMAIL_HOST_PASSWORD=emailpassword123 EMAIL_HOST_PASSWORD=emailpassword123
EMAIL_USE_TLS=true EMAIL_USE_TLS=true
EMAIL_USE_SSL=false EMAIL_USE_SSL=false
EMAIL_SENDER_NAME=admin
# defaults to DOMAIN
EMAIL_SENDER_DOMAIN=
# Query timeouts
SEARCH_TIMEOUT=15
QUERY_TIMEOUT=5
# Thumbnails Generation # Thumbnails Generation
ENABLE_THUMBNAIL_GENERATION=false ENABLE_THUMBNAIL_GENERATION=false
@ -85,26 +69,7 @@ AWS_SECRET_ACCESS_KEY=
# or use_dominant_color_light / use_dominant_color_dark # or use_dominant_color_light / use_dominant_color_dark
PREVIEW_BG_COLOR=use_dominant_color_light PREVIEW_BG_COLOR=use_dominant_color_light
# Change to #FFF if you use use_dominant_color_dark # Change to #FFF if you use use_dominant_color_dark
PREVIEW_TEXT_COLOR=#363636 PREVIEW_TEXT_COLOR="#363636"
PREVIEW_IMG_WIDTH=1200 PREVIEW_IMG_WIDTH=1200
PREVIEW_IMG_HEIGHT=630 PREVIEW_IMG_HEIGHT=630
PREVIEW_DEFAULT_COVER_COLOR=#002549 PREVIEW_DEFAULT_COVER_COLOR="#002549"
# Below are example keys if you want to enable automatically
# sending telemetry to an OTLP-compatible service. Many of
# the main monitoring apps have OLTP collectors, including
# NewRelic, DataDog, and Honeycomb.io - consult their
# documentation for setup instructions, and what exactly to
# put below!
#
# Service name is an arbitrary tag that is attached to any
# data sent, used to distinguish different sources. Useful
# for sending prod and dev metrics to the same place and
# keeping them separate, for instance!
# API endpoint for your provider
OTEL_EXPORTER_OTLP_ENDPOINT=
# Any headers required, usually authentication info
OTEL_EXPORTER_OTLP_HEADERS=
# Service name to identify your app
OTEL_SERVICE_NAME=

View file

@ -46,8 +46,6 @@ jobs:
POSTGRES_HOST: 127.0.0.1 POSTGRES_HOST: 127.0.0.1
CELERY_BROKER: "" CELERY_BROKER: ""
REDIS_BROKER_PORT: 6379 REDIS_BROKER_PORT: 6379
REDIS_BROKER_PASSWORD: beep
USE_DUMMY_CACHE: true
FLOWER_PORT: 8888 FLOWER_PORT: 8888
EMAIL_HOST: "smtp.mailgun.org" EMAIL_HOST: "smtp.mailgun.org"
EMAIL_PORT: 587 EMAIL_PORT: 587

View file

@ -1,5 +1,5 @@
# @url https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions # @url https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
name: Lint Frontend (run `./bw-dev stylelint` to fix css errors) name: Lint Frontend
on: on:
push: push:
@ -8,7 +8,7 @@ on:
- '.github/workflows/**' - '.github/workflows/**'
- 'static/**' - 'static/**'
- '.eslintrc' - '.eslintrc'
- '.stylelintrc.js' - '.stylelintrc'
pull_request: pull_request:
branches: [ main, ci, frontend ] branches: [ main, ci, frontend ]
@ -22,16 +22,17 @@ jobs:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Install modules - name: Install modules
run: npm install stylelint stylelint-config-recommended stylelint-config-standard stylelint-order eslint run: yarn
# See .stylelintignore for files that are not linted. # See .stylelintignore for files that are not linted.
- name: Run stylelint - name: Run stylelint
run: > run: >
npx stylelint bookwyrm/static/css/*.scss bookwyrm/static/css/bookwyrm/**/*.scss \ yarn stylelint bookwyrm/static/**/*.css \
--config dev-tools/.stylelintrc.js --report-needless-disables \
--report-invalid-scope-disables
# See .eslintignore for files that are not linted. # See .eslintignore for files that are not linted.
- name: Run ESLint - name: Run ESLint
run: > run: >
npx eslint bookwyrm/static \ yarn eslint bookwyrm/static \
--ext .js,.jsx,.ts,.tsx --ext .js,.jsx,.ts,.tsx

21
.github/workflows/lint-global.yaml vendored Normal file
View file

@ -0,0 +1,21 @@
# @url https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
name: Lint project globally
on:
push:
branches: [ main, ci ]
pull_request:
branches: [ main, ci ]
jobs:
lint:
name: Lint with EditorConfig.
runs-on: ubuntu-20.04
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- name: EditorConfig
uses: greut/eclint-action@v0

View file

@ -1,23 +0,0 @@
# @url https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
name: JavaScript Prettier (run ./bw-dev prettier to fix)
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
lint:
name: Lint with Prettier
runs-on: ubuntu-20.04
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it.
- uses: actions/checkout@v2
- name: Install modules
run: npm install prettier
- name: Run Prettier
run: npx prettier --check bookwyrm/static/js/*.js

View file

@ -21,7 +21,8 @@ jobs:
run: | run: |
python -m pip install --upgrade pip python -m pip install --upgrade pip
pip install -r requirements.txt pip install -r requirements.txt
pip install pylint
- name: Analysing the code with pylint - name: Analysing the code with pylint
run: | run: |
pylint bookwyrm/ pylint bookwyrm/ --ignore=migrations,tests --disable=E1101,E1135,E1136,R0903,R0901,R0902,W0707,W0511,W0406,R0401,R0801

8
.gitignore vendored
View file

@ -4,7 +4,6 @@
*.swp *.swp
**/__pycache__ **/__pycache__
.local .local
/nginx/nginx.conf
# VSCode # VSCode
/.vscode /.vscode
@ -16,9 +15,6 @@
# BookWyrm # BookWyrm
.env .env
/images/ /images/
bookwyrm/static/css/bookwyrm.css
bookwyrm/static/css/themes/
!bookwyrm/static/css/themes/bookwyrm-*.scss
# Testing # Testing
.coverage .coverage
@ -27,9 +23,7 @@ bookwyrm/static/css/themes/
.idea .idea
#Node tools #Node tools
node_modules/ /node_modules/
package-lock.json
yarn.lock
#nginx #nginx
nginx/default.conf nginx/default.conf

View file

@ -1 +0,0 @@
**/vendor/*

View file

@ -1,6 +0,0 @@
[MAIN]
ignore=migrations
load-plugins=pylint.extensions.no_self_use
[MESSAGES CONTROL]
disable=E1101,E1135,E1136,R0903,R0901,R0902,W0707,W0511,W0406,R0401,R0801,C3001

17
.stylelintrc.js Normal file
View file

@ -0,0 +1,17 @@
/* global module */
module.exports = {
"extends": "stylelint-config-standard",
"plugins": [
"stylelint-order"
],
"rules": {
"order/order": [
"custom-properties",
"declarations"
],
"indentation": 4
}
};

View file

@ -6,7 +6,6 @@ RUN mkdir /app /app/static /app/images
WORKDIR /app WORKDIR /app
RUN apt-get update && apt-get install -y gettext libgettextpo-dev tidy && apt-get clean
COPY requirements.txt /app/ COPY requirements.txt /app/
RUN pip install -r requirements.txt --no-cache-dir RUN pip install -r requirements.txt --no-cache-dir
RUN apt-get update && apt-get install -y gettext libgettextpo-dev tidy && apt-get clean

View file

@ -9,18 +9,21 @@ Social reading and reviewing, decentralized with ActivityPub
- [What it is and isn't](#what-it-is-and-isnt) - [What it is and isn't](#what-it-is-and-isnt)
- [The role of federation](#the-role-of-federation) - [The role of federation](#the-role-of-federation)
- [Features](#features) - [Features](#features)
- [Set up BookWyrm](#set-up-bookwyrm) - [Book data](#book-data)
- [Set up Bookwyrm](#set-up-bookwyrm)
## Joining BookWyrm ## Joining BookWyrm
If you'd like to join an instance, you can check out the [instances](https://joinbookwyrm.com/instances/) list. BookWyrm is still a young piece of software, and isn't at the level of stability and feature-richness that you'd find in a production-ready application. But it does what it says on the box! If you'd like to join an instance, you can check out the [instances](https://docs.joinbookwyrm.com/instances.html) list.
You can request an invite by entering your email address at https://bookwyrm.social.
## Contributing ## Contributing
See [contributing](https://docs.joinbookwyrm.com/contributing.html) for code, translation or monetary contributions. See [contributing](https://docs.joinbookwyrm.com/how-to-contribute.html) for code, translation or monetary contributions.
## About BookWyrm ## About BookWyrm
### What it is and isn't ### What it is and isn't
BookWyrm is a platform for social reading. You can use it to track what you're reading, review books, and follow your friends. It isn't primarily meant for cataloguing or as a data-source for books, but it does do both of those things to some degree. BookWyrm is a platform for social reading! You can use it to track what you're reading, review books, and follow your friends. It isn't primarily meant for cataloguing or as a data-source for books, but it does do both of those things to some degree.
### The role of federation ### The role of federation
BookWyrm is built on [ActivityPub](http://activitypub.rocks/). With ActivityPub, it inter-operates with different instances of BookWyrm, and other ActivityPub compliant services, like Mastodon. This means you can run an instance for your book club, and still follow your friend who posts on a server devoted to 20th century Russian speculative fiction. It also means that your friend on mastodon can read and comment on a book review that you post on your BookWyrm instance. BookWyrm is built on [ActivityPub](http://activitypub.rocks/). With ActivityPub, it inter-operates with different instances of BookWyrm, and other ActivityPub compliant services, like Mastodon. This means you can run an instance for your book club, and still follow your friend who posts on a server devoted to 20th century Russian speculative fiction. It also means that your friend on mastodon can read and comment on a book review that you post on your BookWyrm instance.
@ -75,5 +78,8 @@ Deployment
- [Nginx](https://nginx.org/en/) HTTP server - [Nginx](https://nginx.org/en/) HTTP server
## Set up BookWyrm ## Book data
The [documentation website](https://docs.joinbookwyrm.com/) has instruction on how to set up BookWyrm in a [developer environment](https://docs.joinbookwyrm.com/install-dev.html) or [production](https://docs.joinbookwyrm.com/install-prod.html). The application is set up to share book and author data between instances, and get book data from arbitrary outside sources. Right now, the only connector is to OpenLibrary, but other connectors could be written.
## Set up Bookwyrm
The [documentation website](https://docs.joinbookwyrm.com/) has instruction on how to set up Bookwyrm in a [developer environment](https://docs.joinbookwyrm.com/developer-environment.html) or [production](https://docs.joinbookwyrm.com/installing-in-production.html).

View file

@ -1,7 +1,6 @@
""" basics for an activitypub serializer """ """ basics for an activitypub serializer """
from dataclasses import dataclass, fields, MISSING from dataclasses import dataclass, fields, MISSING
from json import JSONEncoder from json import JSONEncoder
import logging
from django.apps import apps from django.apps import apps
from django.db import IntegrityError, transaction from django.db import IntegrityError, transaction
@ -9,8 +8,6 @@ from django.db import IntegrityError, transaction
from bookwyrm.connectors import ConnectorException, get_data from bookwyrm.connectors import ConnectorException, get_data
from bookwyrm.tasks import app from bookwyrm.tasks import app
logger = logging.getLogger(__name__)
class ActivitySerializerError(ValueError): class ActivitySerializerError(ValueError):
"""routine problems serializing activitypub json""" """routine problems serializing activitypub json"""
@ -23,6 +20,22 @@ class ActivityEncoder(JSONEncoder):
return o.__dict__ return o.__dict__
@dataclass
class Link:
"""for tagging a book in a status"""
href: str
name: str
type: str = "Link"
@dataclass
class Mention(Link):
"""a subtype of Link for mentioning an actor"""
type: str = "Mention"
@dataclass @dataclass
# pylint: disable=invalid-name # pylint: disable=invalid-name
class Signature: class Signature:
@ -42,12 +55,12 @@ def naive_parse(activity_objects, activity_json, serializer=None):
activity_json["type"] = "PublicKey" activity_json["type"] = "PublicKey"
activity_type = activity_json.get("type") activity_type = activity_json.get("type")
if activity_type in ["Question", "Article"]:
return None
try: try:
serializer = activity_objects[activity_type] serializer = activity_objects[activity_type]
except KeyError as err: except KeyError as err:
# we know this exists and that we can't handle it # we know this exists and that we can't handle it
if activity_type in ["Question"]:
return None
raise ActivitySerializerError(err) raise ActivitySerializerError(err)
return serializer(activity_objects=activity_objects, **activity_json) return serializer(activity_objects=activity_objects, **activity_json)
@ -68,7 +81,7 @@ class ActivityObject:
try: try:
value = kwargs[field.name] value = kwargs[field.name]
if value in (None, MISSING, {}): if value in (None, MISSING, {}):
raise KeyError("Missing required field", field.name) raise KeyError()
try: try:
is_subclass = issubclass(field.type, ActivityObject) is_subclass = issubclass(field.type, ActivityObject)
except TypeError: except TypeError:
@ -185,9 +198,8 @@ class ActivityObject:
) )
return instance return instance
def serialize(self, **kwargs): def serialize(self):
"""convert to dictionary with context attr""" """convert to dictionary with context attr"""
omit = kwargs.get("omit", ())
data = self.__dict__.copy() data = self.__dict__.copy()
# recursively serialize # recursively serialize
for (k, v) in data.items(): for (k, v) in data.items():
@ -196,8 +208,7 @@ class ActivityObject:
data[k] = v.serialize() data[k] = v.serialize()
except TypeError: except TypeError:
pass pass
data = {k: v for (k, v) in data.items() if v is not None and k not in omit} data = {k: v for (k, v) in data.items() if v is not None}
if "@context" not in omit:
data["@context"] = "https://www.w3.org/ns/activitystreams" data["@context"] = "https://www.w3.org/ns/activitystreams"
return data return data
@ -211,6 +222,7 @@ def set_related_field(
model = apps.get_model(f"bookwyrm.{model_name}", require_ready=True) model = apps.get_model(f"bookwyrm.{model_name}", require_ready=True)
origin_model = apps.get_model(f"bookwyrm.{origin_model_name}", require_ready=True) origin_model = apps.get_model(f"bookwyrm.{origin_model_name}", require_ready=True)
with transaction.atomic():
if isinstance(data, str): if isinstance(data, str):
existing = model.find_existing_by_remote_id(data) existing = model.find_existing_by_remote_id(data)
if existing: if existing:
@ -229,8 +241,10 @@ def set_related_field(
# edition.parentWork = instance, for example # edition.parentWork = instance, for example
model_field = getattr(model, related_field_name) model_field = getattr(model, related_field_name)
if hasattr(model_field, "activitypub_field"): if hasattr(model_field, "activitypub_field"):
setattr(activity, getattr(model_field, "activitypub_field"), instance.remote_id) setattr(
item = activity.to_model(model=model) activity, getattr(model_field, "activitypub_field"), instance.remote_id
)
item = activity.to_model()
# if the related field isn't serialized (attachments on Status), then # if the related field isn't serialized (attachments on Status), then
# we have to set it post-creation # we have to set it post-creation
@ -271,9 +285,9 @@ def resolve_remote_id(
try: try:
data = get_data(remote_id) data = get_data(remote_id)
except ConnectorException: except ConnectorException:
logger.exception("Could not connect to host for remote_id: %s", remote_id) raise ActivitySerializerError(
return None f"Could not connect to host for remote_id: {remote_id}"
)
# determine the model implicitly, if not provided # determine the model implicitly, if not provided
# or if it's a model with subclasses like Status, check again # or if it's a model with subclasses like Status, check again
if not model or hasattr(model.objects, "select_subclasses"): if not model or hasattr(model.objects, "select_subclasses"):
@ -290,28 +304,3 @@ def resolve_remote_id(
# if we're refreshing, "result" will be set and we'll update it # if we're refreshing, "result" will be set and we'll update it
return item.to_model(model=model, instance=result, save=save) return item.to_model(model=model, instance=result, save=save)
@dataclass(init=False)
class Link(ActivityObject):
"""for tagging a book in a status"""
href: str
name: str = None
mediaType: str = None
id: str = None
attributedTo: str = None
availability: str = None
type: str = "Link"
def serialize(self, **kwargs):
"""remove fields"""
omit = ("id", "type", "@context")
return super().serialize(omit=omit)
@dataclass(init=False)
class Mention(Link):
"""a subtype of Link for mentioning an actor"""
type: str = "Mention"

View file

@ -16,12 +16,7 @@ class BookData(ActivityObject):
librarythingKey: str = None librarythingKey: str = None
goodreadsKey: str = None goodreadsKey: str = None
bnfId: str = None bnfId: str = None
viaf: str = None
wikidata: str = None
asin: str = None
lastEditedBy: str = None lastEditedBy: str = None
links: List[str] = field(default_factory=lambda: [])
fileLinks: List[str] = field(default_factory=lambda: [])
# pylint: disable=invalid-name # pylint: disable=invalid-name
@ -30,8 +25,8 @@ class Book(BookData):
"""serializes an edition or work, abstract""" """serializes an edition or work, abstract"""
title: str title: str
sortTitle: str = None sortTitle: str = ""
subtitle: str = None subtitle: str = ""
description: str = "" description: str = ""
languages: List[str] = field(default_factory=lambda: []) languages: List[str] = field(default_factory=lambda: [])
series: str = "" series: str = ""
@ -56,6 +51,7 @@ class Edition(Book):
isbn10: str = "" isbn10: str = ""
isbn13: str = "" isbn13: str = ""
oclcNumber: str = "" oclcNumber: str = ""
asin: str = ""
pages: int = None pages: int = None
physicalFormat: str = "" physicalFormat: str = ""
physicalFormatDetail: str = "" physicalFormatDetail: str = ""

View file

@ -35,7 +35,6 @@ class Note(ActivityObject):
tag: List[Link] = field(default_factory=lambda: []) tag: List[Link] = field(default_factory=lambda: [])
attachment: List[Document] = field(default_factory=lambda: []) attachment: List[Document] = field(default_factory=lambda: [])
sensitive: bool = False sensitive: bool = False
updated: str = None
type: str = "Note" type: str = "Note"

View file

@ -15,11 +15,6 @@ class PublicKey(ActivityObject):
publicKeyPem: str publicKeyPem: str
type: str = "PublicKey" type: str = "PublicKey"
def serialize(self, **kwargs):
"""remove fields"""
omit = ("type", "@context")
return super().serialize(omit=omit)
# pylint: disable=invalid-name # pylint: disable=invalid-name
@dataclass(init=False) @dataclass(init=False)
@ -39,5 +34,4 @@ class Person(ActivityObject):
bookwyrmUser: bool = False bookwyrmUser: bool = False
manuallyApprovesFollowers: str = False manuallyApprovesFollowers: str = False
discoverable: str = False discoverable: str = False
hideFollows: str = False
type: str = "Person" type: str = "Person"

View file

@ -38,7 +38,7 @@ class Create(Verb):
class Delete(Verb): class Delete(Verb):
"""Create activity""" """Create activity"""
to: List[str] = field(default_factory=lambda: []) to: List[str]
cc: List[str] = field(default_factory=lambda: []) cc: List[str] = field(default_factory=lambda: [])
type: str = "Delete" type: str = "Delete"
@ -69,8 +69,7 @@ class Update(Verb):
def action(self): def action(self):
"""update a model instance from the dataclass""" """update a model instance from the dataclass"""
if not self.object: if self.object:
return
self.object.to_model(allow_create=False) self.object.to_model(allow_create=False)
@ -137,8 +136,8 @@ class Accept(Verb):
type: str = "Accept" type: str = "Accept"
def action(self): def action(self):
"""accept a request""" """find and remove the activity object"""
obj = self.object.to_model(save=False, allow_create=True) obj = self.object.to_model(save=False, allow_create=False)
obj.accept() obj.accept()
@ -150,7 +149,7 @@ class Reject(Verb):
type: str = "Reject" type: str = "Reject"
def action(self): def action(self):
"""reject a follow request""" """find and remove the activity object"""
obj = self.object.to_model(save=False, allow_create=False) obj = self.object.to_model(save=False, allow_create=False)
obj.reject() obj.reject()

View file

@ -7,7 +7,7 @@ from django.utils import timezone
from bookwyrm import models from bookwyrm import models
from bookwyrm.redis_store import RedisStore, r from bookwyrm.redis_store import RedisStore, r
from bookwyrm.tasks import app, LOW, MEDIUM, HIGH from bookwyrm.tasks import app
class ActivityStream(RedisStore): class ActivityStream(RedisStore):
@ -22,11 +22,6 @@ class ActivityStream(RedisStore):
stream_id = self.stream_id(user) stream_id = self.stream_id(user)
return f"{stream_id}-unread" return f"{stream_id}-unread"
def unread_by_status_type_id(self, user):
"""the redis key for this user's unread count for this stream"""
stream_id = self.stream_id(user)
return f"{stream_id}-unread-by-type"
def get_rank(self, obj): # pylint: disable=no-self-use def get_rank(self, obj): # pylint: disable=no-self-use
"""statuses are sorted by date published""" """statuses are sorted by date published"""
return obj.published_date.timestamp() return obj.published_date.timestamp()
@ -40,10 +35,6 @@ class ActivityStream(RedisStore):
for user in self.get_audience(status): for user in self.get_audience(status):
# add to the unread status count # add to the unread status count
pipeline.incr(self.unread_id(user)) pipeline.incr(self.unread_id(user))
# add to the unread status count for status type
pipeline.hincrby(
self.unread_by_status_type_id(user), get_status_type(status), 1
)
# and go! # and go!
pipeline.execute() pipeline.execute()
@ -64,7 +55,6 @@ class ActivityStream(RedisStore):
"""load the statuses to be displayed""" """load the statuses to be displayed"""
# clear unreads for this feed # clear unreads for this feed
r.set(self.unread_id(user), 0) r.set(self.unread_id(user), 0)
r.delete(self.unread_by_status_type_id(user))
statuses = self.get_store(self.stream_id(user)) statuses = self.get_store(self.stream_id(user))
return ( return (
@ -85,14 +75,6 @@ class ActivityStream(RedisStore):
"""get the unread status count for this user's feed""" """get the unread status count for this user's feed"""
return int(r.get(self.unread_id(user)) or 0) return int(r.get(self.unread_id(user)) or 0)
def get_unread_count_by_status_type(self, user):
"""get the unread status count for this user's feed's status types"""
status_types = r.hgetall(self.unread_by_status_type_id(user))
return {
str(key.decode("utf-8")): int(value) or 0
for key, value in status_types.items()
}
def populate_streams(self, user): def populate_streams(self, user):
"""go from zero to a timeline""" """go from zero to a timeline"""
self.populate_store(self.stream_id(user)) self.populate_store(self.stream_id(user))
@ -295,19 +277,7 @@ def add_status_on_create(sender, instance, created, *args, **kwargs):
def add_status_on_create_command(sender, instance, created): def add_status_on_create_command(sender, instance, created):
"""runs this code only after the database commit completes""" """runs this code only after the database commit completes"""
priority = HIGH add_status_task.delay(instance.id, increment_unread=created)
# check if this is an old status, de-prioritize if so
# (this will happen if federation is very slow, or, more expectedly, on csv import)
if instance.published_date < timezone.now() - timedelta(
days=1
) or instance.created_date < instance.published_date - timedelta(days=1):
priority = LOW
add_status_task.apply_async(
args=(instance.id,),
kwargs={"increment_unread": created},
queue=priority,
)
if sender == models.Boost: if sender == models.Boost:
handle_boost_task.delay(instance.id) handle_boost_task.delay(instance.id)
@ -398,15 +368,9 @@ def populate_streams_on_account_create(sender, instance, created, *args, **kwarg
"""build a user's feeds when they join""" """build a user's feeds when they join"""
if not created or not instance.local: if not created or not instance.local:
return return
transaction.on_commit(
lambda: populate_streams_on_account_create_command(instance.id)
)
def populate_streams_on_account_create_command(instance_id):
"""wait for the transaction to complete"""
for stream in streams: for stream in streams:
populate_stream_task.delay(stream, instance_id) populate_stream_task.delay(stream, instance.id)
@receiver(signals.pre_save, sender=models.ShelfBook) @receiver(signals.pre_save, sender=models.ShelfBook)
@ -445,7 +409,7 @@ def remove_statuses_on_unshelve(sender, instance, *args, **kwargs):
# ---- TASKS # ---- TASKS
@app.task(queue=LOW) @app.task(queue="low_priority")
def add_book_statuses_task(user_id, book_id): def add_book_statuses_task(user_id, book_id):
"""add statuses related to a book on shelve""" """add statuses related to a book on shelve"""
user = models.User.objects.get(id=user_id) user = models.User.objects.get(id=user_id)
@ -453,7 +417,7 @@ def add_book_statuses_task(user_id, book_id):
BooksStream().add_book_statuses(user, book) BooksStream().add_book_statuses(user, book)
@app.task(queue=LOW) @app.task(queue="low_priority")
def remove_book_statuses_task(user_id, book_id): def remove_book_statuses_task(user_id, book_id):
"""remove statuses about a book from a user's books feed""" """remove statuses about a book from a user's books feed"""
user = models.User.objects.get(id=user_id) user = models.User.objects.get(id=user_id)
@ -461,7 +425,7 @@ def remove_book_statuses_task(user_id, book_id):
BooksStream().remove_book_statuses(user, book) BooksStream().remove_book_statuses(user, book)
@app.task(queue=MEDIUM) @app.task(queue="medium_priority")
def populate_stream_task(stream, user_id): def populate_stream_task(stream, user_id):
"""background task for populating an empty activitystream""" """background task for populating an empty activitystream"""
user = models.User.objects.get(id=user_id) user = models.User.objects.get(id=user_id)
@ -469,7 +433,7 @@ def populate_stream_task(stream, user_id):
stream.populate_streams(user) stream.populate_streams(user)
@app.task(queue=MEDIUM) @app.task(queue="medium_priority")
def remove_status_task(status_ids): def remove_status_task(status_ids):
"""remove a status from any stream it might be in""" """remove a status from any stream it might be in"""
# this can take an id or a list of ids # this can take an id or a list of ids
@ -482,10 +446,10 @@ def remove_status_task(status_ids):
stream.remove_object_from_related_stores(status) stream.remove_object_from_related_stores(status)
@app.task(queue=HIGH) @app.task(queue="high_priority")
def add_status_task(status_id, increment_unread=False): def add_status_task(status_id, increment_unread=False):
"""add a status to any stream it should be in""" """add a status to any stream it should be in"""
status = models.Status.objects.select_subclasses().get(id=status_id) status = models.Status.objects.get(id=status_id)
# we don't want to tick the unread count for csv import statuses, idk how better # we don't want to tick the unread count for csv import statuses, idk how better
# to check than just to see if the states is more than a few days old # to check than just to see if the states is more than a few days old
if status.created_date < timezone.now() - timedelta(days=2): if status.created_date < timezone.now() - timedelta(days=2):
@ -494,7 +458,7 @@ def add_status_task(status_id, increment_unread=False):
stream.add_status(status, increment_unread=increment_unread) stream.add_status(status, increment_unread=increment_unread)
@app.task(queue=MEDIUM) @app.task(queue="medium_priority")
def remove_user_statuses_task(viewer_id, user_id, stream_list=None): def remove_user_statuses_task(viewer_id, user_id, stream_list=None):
"""remove all statuses by a user from a viewer's stream""" """remove all statuses by a user from a viewer's stream"""
stream_list = [streams[s] for s in stream_list] if stream_list else streams.values() stream_list = [streams[s] for s in stream_list] if stream_list else streams.values()
@ -504,7 +468,7 @@ def remove_user_statuses_task(viewer_id, user_id, stream_list=None):
stream.remove_user_statuses(viewer, user) stream.remove_user_statuses(viewer, user)
@app.task(queue=MEDIUM) @app.task(queue="medium_priority")
def add_user_statuses_task(viewer_id, user_id, stream_list=None): def add_user_statuses_task(viewer_id, user_id, stream_list=None):
"""add all statuses by a user to a viewer's stream""" """add all statuses by a user to a viewer's stream"""
stream_list = [streams[s] for s in stream_list] if stream_list else streams.values() stream_list = [streams[s] for s in stream_list] if stream_list else streams.values()
@ -514,7 +478,7 @@ def add_user_statuses_task(viewer_id, user_id, stream_list=None):
stream.add_user_statuses(viewer, user) stream.add_user_statuses(viewer, user)
@app.task(queue=MEDIUM) @app.task(queue="medium_priority")
def handle_boost_task(boost_id): def handle_boost_task(boost_id):
"""remove the original post and other, earlier boosts""" """remove the original post and other, earlier boosts"""
instance = models.Status.objects.get(id=boost_id) instance = models.Status.objects.get(id=boost_id)
@ -532,20 +496,3 @@ def handle_boost_task(boost_id):
stream.remove_object_from_related_stores(boosted, stores=audience) stream.remove_object_from_related_stores(boosted, stores=audience)
for status in old_versions: for status in old_versions:
stream.remove_object_from_related_stores(status, stores=audience) stream.remove_object_from_related_stores(status, stores=audience)
def get_status_type(status):
"""return status type even for boosted statuses"""
status_type = status.status_type.lower()
# Check if current status is a boost
if hasattr(status, "boost"):
# Act in accordance of your findings
if hasattr(status.boost.boosted_status, "review"):
status_type = "review"
if hasattr(status.boost.boosted_status, "comment"):
status_type = "comment"
if hasattr(status.boost.boosted_status, "quotation"):
status_type = "quotation"
return status_type

View file

@ -1,54 +0,0 @@
"""Do further startup configuration and initialization"""
import os
import urllib
import logging
from django.apps import AppConfig
from bookwyrm import settings
logger = logging.getLogger(__name__)
def download_file(url, destination):
"""Downloads a file to the given path"""
try:
# Ensure our destination directory exists
os.makedirs(os.path.dirname(destination))
with urllib.request.urlopen(url) as stream:
with open(destination, "b+w") as outfile:
outfile.write(stream.read())
except (urllib.error.HTTPError, urllib.error.URLError):
logger.info("Failed to download file %s", url)
except OSError:
logger.info("Couldn't open font file %s for writing", destination)
except: # pylint: disable=bare-except
logger.info("Unknown error in file download")
class BookwyrmConfig(AppConfig):
"""Handles additional configuration"""
name = "bookwyrm"
verbose_name = "BookWyrm"
# pylint: disable=no-self-use
def ready(self):
"""set up OTLP and preview image files, if desired"""
if settings.OTEL_EXPORTER_OTLP_ENDPOINT:
# pylint: disable=import-outside-toplevel
from bookwyrm.telemetry import open_telemetry
open_telemetry.instrumentDjango()
if settings.ENABLE_PREVIEW_IMAGES and settings.FONTS:
# Download any fonts that we don't have yet
logger.debug("Downloading fonts..")
for name, config in settings.FONTS.items():
font_path = os.path.join(
settings.FONT_DIR, config["directory"], config["filename"]
)
if "url" in config and not os.path.exists(font_path):
logger.info("Just a sec, downloading %s", name)
download_file(config["url"], font_path)

View file

@ -82,8 +82,6 @@ def search_identifiers(query, *filters, return_first=False):
*filters, reduce(operator.or_, (Q(**f) for f in or_filters)) *filters, reduce(operator.or_, (Q(**f) for f in or_filters))
).distinct() ).distinct()
if results.count() <= 1: if results.count() <= 1:
if return_first:
return results.first()
return results return results
# when there are multiple editions of the same work, pick the default. # when there are multiple editions of the same work, pick the default.
@ -126,7 +124,6 @@ def search_title_author(query, min_confidence, *filters, return_first=False):
result = default result = default
else: else:
result = editions.first() result = editions.first()
if return_first: if return_first:
return result return result
list_results.append(result) list_results.append(result)
@ -148,8 +145,8 @@ class SearchResult:
def __repr__(self): def __repr__(self):
# pylint: disable=consider-using-f-string # pylint: disable=consider-using-f-string
return "<SearchResult key={!r} title={!r} author={!r} confidence={!r}>".format( return "<SearchResult key={!r} title={!r} author={!r}>".format(
self.key, self.title, self.author, self.confidence self.key, self.title, self.author
) )
def json(self): def json(self):

View file

@ -1,16 +1,13 @@
""" functionality outline for a book data connector """ """ functionality outline for a book data connector """
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
import imghdr
import logging import logging
import re
from django.core.files.base import ContentFile
from django.db import transaction from django.db import transaction
import requests import requests
from requests.exceptions import RequestException from requests.exceptions import RequestException
from bookwyrm import activitypub, models, settings from bookwyrm import activitypub, models, settings
from .connector_manager import load_more_data, ConnectorException, raise_not_valid_url from .connector_manager import load_more_data, ConnectorException
from .format_mappings import format_mappings from .format_mappings import format_mappings
@ -38,34 +35,61 @@ class AbstractMinimalConnector(ABC):
for field in self_fields: for field in self_fields:
setattr(self, field, getattr(info, field)) setattr(self, field, getattr(info, field))
def get_search_url(self, query): def search(self, query, min_confidence=None, timeout=5):
"""format the query url""" """free text search"""
# Check if the query resembles an ISBN params = {}
if maybe_isbn(query) and self.isbn_search_url and self.isbn_search_url != "": if min_confidence:
return f"{self.isbn_search_url}{query}" params["min_confidence"] = min_confidence
# NOTE: previously, we tried searching isbn and if that produces no results, data = self.get_search_data(
# searched as free text. This, instead, only searches isbn if it's isbn-y f"{self.search_url}{query}",
return f"{self.search_url}{query}" params=params,
timeout=timeout,
)
results = []
def process_search_response(self, query, data, min_confidence): for doc in self.parse_search_data(data)[:10]:
"""Format the search results based on the formt of the query""" results.append(self.format_search_result(doc))
if maybe_isbn(query): return results
return list(self.parse_isbn_search_data(data))[:10]
return list(self.parse_search_data(data, min_confidence))[:10] def isbn_search(self, query):
"""isbn search"""
params = {}
data = self.get_search_data(
f"{self.isbn_search_url}{query}",
params=params,
)
results = []
# this shouldn't be returning mutliple results, but just in case
for doc in self.parse_isbn_search_data(data)[:10]:
results.append(self.format_isbn_search_result(doc))
return results
def get_search_data(self, remote_id, **kwargs): # pylint: disable=no-self-use
"""this allows connectors to override the default behavior"""
return get_data(remote_id, **kwargs)
@abstractmethod @abstractmethod
def get_or_create_book(self, remote_id): def get_or_create_book(self, remote_id):
"""pull up a book record by whatever means possible""" """pull up a book record by whatever means possible"""
@abstractmethod @abstractmethod
def parse_search_data(self, data, min_confidence): def parse_search_data(self, data):
"""turn the result json from a search into a list""" """turn the result json from a search into a list"""
@abstractmethod
def format_search_result(self, search_result):
"""create a SearchResult obj from json"""
@abstractmethod @abstractmethod
def parse_isbn_search_data(self, data): def parse_isbn_search_data(self, data):
"""turn the result json from a search into a list""" """turn the result json from a search into a list"""
@abstractmethod
def format_isbn_search_result(self, search_result):
"""create a SearchResult obj from json"""
class AbstractConnector(AbstractMinimalConnector): class AbstractConnector(AbstractMinimalConnector):
"""generic book data connector""" """generic book data connector"""
@ -87,7 +111,7 @@ class AbstractConnector(AbstractMinimalConnector):
return existing.default_edition return existing.default_edition
return existing return existing
# load the json data from the remote data source # load the json
data = self.get_book_data(remote_id) data = self.get_book_data(remote_id)
if self.is_work_data(data): if self.is_work_data(data):
try: try:
@ -102,7 +126,7 @@ class AbstractConnector(AbstractMinimalConnector):
try: try:
work_data = self.get_work_from_edition_data(data) work_data = self.get_work_from_edition_data(data)
except (KeyError, ConnectorException) as err: except (KeyError, ConnectorException) as err:
logger.info(err) logger.exception(err)
work_data = data work_data = data
if not work_data or not edition_data: if not work_data or not edition_data:
@ -126,34 +150,24 @@ class AbstractConnector(AbstractMinimalConnector):
"""this allows connectors to override the default behavior""" """this allows connectors to override the default behavior"""
return get_data(remote_id) return get_data(remote_id)
def create_edition_from_data(self, work, edition_data, instance=None): def create_edition_from_data(self, work, edition_data):
"""if we already have the work, we're ready""" """if we already have the work, we're ready"""
mapped_data = dict_from_mappings(edition_data, self.book_mappings) mapped_data = dict_from_mappings(edition_data, self.book_mappings)
mapped_data["work"] = work.remote_id mapped_data["work"] = work.remote_id
edition_activity = activitypub.Edition(**mapped_data) edition_activity = activitypub.Edition(**mapped_data)
edition = edition_activity.to_model( edition = edition_activity.to_model(model=models.Edition, overwrite=False)
model=models.Edition, overwrite=False, instance=instance
)
# if we're updating an existing instance, we don't need to load authors
if instance:
return edition
if not edition.connector:
edition.connector = self.connector edition.connector = self.connector
edition.save(broadcast=False, update_fields=["connector"]) edition.save()
for author in self.get_authors_from_data(edition_data): for author in self.get_authors_from_data(edition_data):
edition.authors.add(author) edition.authors.add(author)
# use the authors from the work if none are found for the edition
if not edition.authors.exists() and work.authors.exists(): if not edition.authors.exists() and work.authors.exists():
edition.authors.set(work.authors.all()) edition.authors.set(work.authors.all())
return edition return edition
def get_or_create_author(self, remote_id, instance=None): def get_or_create_author(self, remote_id):
"""load that author""" """load that author"""
if not instance:
existing = models.Author.find_existing_by_remote_id(remote_id) existing = models.Author.find_existing_by_remote_id(remote_id)
if existing: if existing:
return existing return existing
@ -167,24 +181,7 @@ class AbstractConnector(AbstractMinimalConnector):
return None return None
# this will dedupe # this will dedupe
return activity.to_model( return activity.to_model(model=models.Author, overwrite=False)
model=models.Author, overwrite=False, instance=instance
)
def get_remote_id_from_model(self, obj):
"""given the data stored, how can we look this up"""
return getattr(obj, getattr(self, "generated_remote_link_field"))
def update_author_from_remote(self, obj):
"""load the remote data from this connector and add it to an existing author"""
remote_id = self.get_remote_id_from_model(obj)
return self.get_or_create_author(remote_id, instance=obj)
def update_book_from_remote(self, obj):
"""load the remote data from this connector and add it to an existing book"""
remote_id = self.get_remote_id_from_model(obj)
data = self.get_book_data(remote_id)
return self.create_edition_from_data(obj.parent_work, data, instance=obj)
@abstractmethod @abstractmethod
def is_work_data(self, data): def is_work_data(self, data):
@ -223,38 +220,36 @@ def dict_from_mappings(data, mappings):
def get_data(url, params=None, timeout=10): def get_data(url, params=None, timeout=10):
"""wrapper for request.get""" """wrapper for request.get"""
# check if the url is blocked # check if the url is blocked
raise_not_valid_url(url) if models.FederatedServer.is_blocked(url):
raise ConnectorException(f"Attempting to load data from blocked url: {url}")
try: try:
resp = requests.get( resp = requests.get(
url, url,
params=params, params=params,
headers={ # pylint: disable=line-too-long headers={
"Accept": ( "Accept": "application/json; charset=utf-8",
'application/json, application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"; charset=utf-8'
),
"User-Agent": settings.USER_AGENT, "User-Agent": settings.USER_AGENT,
}, },
timeout=timeout, timeout=timeout,
) )
except RequestException as err: except RequestException as err:
logger.info(err) logger.exception(err)
raise ConnectorException(err) raise ConnectorException()
if not resp.ok: if not resp.ok:
raise ConnectorException() raise ConnectorException()
try: try:
data = resp.json() data = resp.json()
except ValueError as err: except ValueError as err:
logger.info(err) logger.exception(err)
raise ConnectorException(err) raise ConnectorException()
return data return data
def get_image(url, timeout=10): def get_image(url, timeout=10):
"""wrapper for requesting an image""" """wrapper for requesting an image"""
raise_not_valid_url(url)
try: try:
resp = requests.get( resp = requests.get(
url, url,
@ -264,19 +259,11 @@ def get_image(url, timeout=10):
timeout=timeout, timeout=timeout,
) )
except RequestException as err: except RequestException as err:
logger.info(err) logger.exception(err)
return None, None return None
if not resp.ok: if not resp.ok:
return None, None return None
return resp
image_content = ContentFile(resp.content)
extension = imghdr.what(None, image_content.read())
if not extension:
logger.info("File requested was not an image: %s", url)
return None, None
return image_content, extension
class Mapping: class Mapping:
@ -320,9 +307,3 @@ def unique_physical_format(format_text):
# try a direct match, so saving this would be redundant # try a direct match, so saving this would be redundant
return None return None
return format_text return format_text
def maybe_isbn(query):
"""check if a query looks like an isbn"""
isbn = re.sub(r"[\W_]", "", query) # removes filler characters
return len(isbn) in [10, 13] # ISBN10 or ISBN13

View file

@ -10,12 +10,15 @@ class Connector(AbstractMinimalConnector):
def get_or_create_book(self, remote_id): def get_or_create_book(self, remote_id):
return activitypub.resolve_remote_id(remote_id, model=models.Edition) return activitypub.resolve_remote_id(remote_id, model=models.Edition)
def parse_search_data(self, data, min_confidence): def parse_search_data(self, data):
for search_result in data: return data
def format_search_result(self, search_result):
search_result["connector"] = self search_result["connector"] = self
yield SearchResult(**search_result) return SearchResult(**search_result)
def parse_isbn_search_data(self, data): def parse_isbn_search_data(self, data):
for search_result in data: return data
search_result["connector"] = self
yield SearchResult(**search_result) def format_isbn_search_result(self, search_result):
return self.format_search_result(search_result)

View file

@ -1,18 +1,16 @@
""" interface with whatever connectors the app has """ """ interface with whatever connectors the app has """
import asyncio from datetime import datetime
import importlib import importlib
import ipaddress
import logging import logging
import re
from urllib.parse import urlparse from urllib.parse import urlparse
import aiohttp
from django.dispatch import receiver from django.dispatch import receiver
from django.db.models import signals from django.db.models import signals
from requests import HTTPError from requests import HTTPError
from bookwyrm import book_search, models from bookwyrm import book_search, models
from bookwyrm.settings import SEARCH_TIMEOUT, USER_AGENT
from bookwyrm.tasks import app from bookwyrm.tasks import app
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -22,85 +20,54 @@ class ConnectorException(HTTPError):
"""when the connector can't do what was asked""" """when the connector can't do what was asked"""
async def get_results(session, url, min_confidence, query, connector):
"""try this specific connector"""
# pylint: disable=line-too-long
headers = {
"Accept": (
'application/json, application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"; charset=utf-8'
),
"User-Agent": USER_AGENT,
}
params = {"min_confidence": min_confidence}
try:
async with session.get(url, headers=headers, params=params) as response:
if not response.ok:
logger.info("Unable to connect to %s: %s", url, response.reason)
return
try:
raw_data = await response.json()
except aiohttp.client_exceptions.ContentTypeError as err:
logger.exception(err)
return
return {
"connector": connector,
"results": connector.process_search_response(
query, raw_data, min_confidence
),
}
except asyncio.TimeoutError:
logger.info("Connection timed out for url: %s", url)
except aiohttp.ClientError as err:
logger.exception(err)
async def async_connector_search(query, items, min_confidence):
"""Try a number of requests simultaneously"""
timeout = aiohttp.ClientTimeout(total=SEARCH_TIMEOUT)
async with aiohttp.ClientSession(timeout=timeout) as session:
tasks = []
for url, connector in items:
tasks.append(
asyncio.ensure_future(
get_results(session, url, min_confidence, query, connector)
)
)
results = await asyncio.gather(*tasks)
return results
def search(query, min_confidence=0.1, return_first=False): def search(query, min_confidence=0.1, return_first=False):
"""find books based on arbitary keywords""" """find books based on arbitary keywords"""
if not query: if not query:
return [] return []
results = [] results = []
items = [] # Have we got a ISBN ?
for connector in get_connectors(): isbn = re.sub(r"[\W_]", "", query)
# get the search url from the connector before sending maybe_isbn = len(isbn) in [10, 13] # ISBN10 or ISBN13
url = connector.get_search_url(query)
try:
raise_not_valid_url(url)
except ConnectorException:
# if this URL is invalid we should skip it and move on
logger.info("Request denied to blocked domain: %s", url)
continue
items.append((url, connector))
# load as many results as we can timeout = 15
results = asyncio.run(async_connector_search(query, items, min_confidence)) start_time = datetime.now()
results = [r for r in results if r] for connector in get_connectors():
result_set = None
if maybe_isbn and connector.isbn_search_url and connector.isbn_search_url != "":
# Search on ISBN
try:
result_set = connector.isbn_search(isbn)
except Exception as err: # pylint: disable=broad-except
logger.exception(err)
# if this fails, we can still try regular search
# if no isbn search results, we fallback to generic search
if not result_set:
try:
result_set = connector.search(query, min_confidence=min_confidence)
except Exception as err: # pylint: disable=broad-except
# we don't want *any* error to crash the whole search page
logger.exception(err)
continue
if return_first and result_set:
# if we found anything, return it
return result_set[0]
if result_set:
results.append(
{
"connector": connector,
"results": result_set,
}
)
if (datetime.now() - start_time).seconds >= timeout:
break
if return_first: if return_first:
# find the best result from all the responses and return that return None
all_results = [r for con in results for r in con["results"]]
all_results = sorted(all_results, key=lambda r: r.confidence, reverse=True)
return all_results[0] if all_results else None
# failed requests will return None, so filter those out
return results return results
@ -166,20 +133,3 @@ def create_connector(sender, instance, created, *args, **kwargs):
"""create a connector to an external bookwyrm server""" """create a connector to an external bookwyrm server"""
if instance.application_type == "bookwyrm": if instance.application_type == "bookwyrm":
get_or_create_connector(f"https://{instance.server_name}") get_or_create_connector(f"https://{instance.server_name}")
def raise_not_valid_url(url):
"""do some basic reality checks on the url"""
parsed = urlparse(url)
if not parsed.scheme in ["http", "https"]:
raise ConnectorException("Invalid scheme: ", url)
try:
ipaddress.ip_address(parsed.netloc)
raise ConnectorException("Provided url is an IP address: ", url)
except ValueError:
# it's not an IP address, which is good
pass
if models.FederatedServer.is_blocked(url):
raise ConnectorException(f"Attempting to load data from blocked url: {url}")

View file

@ -11,8 +11,6 @@ from .connector_manager import ConnectorException
class Connector(AbstractConnector): class Connector(AbstractConnector):
"""instantiate a connector for inventaire""" """instantiate a connector for inventaire"""
generated_remote_link_field = "inventaire_id"
def __init__(self, identifier): def __init__(self, identifier):
super().__init__(identifier) super().__init__(identifier)
@ -69,7 +67,7 @@ class Connector(AbstractConnector):
extracted = list(data.get("entities").values()) extracted = list(data.get("entities").values())
try: try:
data = extracted[0] data = extracted[0]
except (KeyError, IndexError): except KeyError:
raise ConnectorException("Invalid book data") raise ConnectorException("Invalid book data")
# flatten the data so that images, uri, and claims are on the same level # flatten the data so that images, uri, and claims are on the same level
return { return {
@ -77,16 +75,24 @@ class Connector(AbstractConnector):
**{k: data.get(k) for k in ["uri", "image", "labels", "sitelinks", "type"]}, **{k: data.get(k) for k in ["uri", "image", "labels", "sitelinks", "type"]},
} }
def parse_search_data(self, data, min_confidence): def search(self, query, min_confidence=None): # pylint: disable=arguments-differ
for search_result in data.get("results", []): """overrides default search function with confidence ranking"""
results = super().search(query)
if min_confidence:
# filter the search results after the fact
return [r for r in results if r.confidence >= min_confidence]
return results
def parse_search_data(self, data):
return data.get("results")
def format_search_result(self, search_result):
images = search_result.get("image") images = search_result.get("image")
cover = f"{self.covers_url}/img/entities/{images[0]}" if images else None cover = f"{self.covers_url}/img/entities/{images[0]}" if images else None
# a deeply messy translation of inventaire's scores # a deeply messy translation of inventaire's scores
confidence = float(search_result.get("_score", 0.1)) confidence = float(search_result.get("_score", 0.1))
confidence = 0.1 if confidence < 150 else 0.999 confidence = 0.1 if confidence < 150 else 0.999
if confidence < min_confidence: return SearchResult(
continue
yield SearchResult(
title=search_result.get("label"), title=search_result.get("label"),
key=self.get_remote_id(search_result.get("uri")), key=self.get_remote_id(search_result.get("uri")),
author=search_result.get("description"), author=search_result.get("description"),
@ -100,12 +106,15 @@ class Connector(AbstractConnector):
"""got some daaaata""" """got some daaaata"""
results = data.get("entities") results = data.get("entities")
if not results: if not results:
return return []
for search_result in list(results.values()): return list(results.values())
def format_isbn_search_result(self, search_result):
"""totally different format than a regular search result"""
title = search_result.get("claims", {}).get("wdt:P1476", []) title = search_result.get("claims", {}).get("wdt:P1476", [])
if not title: if not title:
continue return None
yield SearchResult( return SearchResult(
title=title[0], title=title[0],
key=self.get_remote_id(search_result.get("uri")), key=self.get_remote_id(search_result.get("uri")),
author=search_result.get("description"), author=search_result.get("description"),
@ -119,7 +128,6 @@ class Connector(AbstractConnector):
def load_edition_data(self, work_uri): def load_edition_data(self, work_uri):
"""get a list of editions for a work""" """get a list of editions for a work"""
# pylint: disable=line-too-long
url = f"{self.books_url}?action=reverse-claims&property=wdt:P629&value={work_uri}&sort=true" url = f"{self.books_url}?action=reverse-claims&property=wdt:P629&value={work_uri}&sort=true"
return get_data(url) return get_data(url)
@ -201,11 +209,6 @@ class Connector(AbstractConnector):
return "" return ""
return data.get("extract") return data.get("extract")
def get_remote_id_from_model(self, obj):
"""use get_remote_id to figure out the link from a model obj"""
remote_id_value = obj.inventaire_id
return self.get_remote_id(remote_id_value)
def get_language_code(options, code="en"): def get_language_code(options, code="en"):
"""when there are a bunch of translation but we need a single field""" """when there are a bunch of translation but we need a single field"""

View file

@ -12,8 +12,6 @@ from .openlibrary_languages import languages
class Connector(AbstractConnector): class Connector(AbstractConnector):
"""instantiate a connector for OL""" """instantiate a connector for OL"""
generated_remote_link_field = "openlibrary_link"
def __init__(self, identifier): def __init__(self, identifier):
super().__init__(identifier) super().__init__(identifier)
@ -68,30 +66,6 @@ class Connector(AbstractConnector):
Mapping("born", remote_field="birth_date"), Mapping("born", remote_field="birth_date"),
Mapping("died", remote_field="death_date"), Mapping("died", remote_field="death_date"),
Mapping("bio", formatter=get_description), Mapping("bio", formatter=get_description),
Mapping(
"isni",
remote_field="remote_ids",
formatter=lambda b: get_dict_field(b, "isni"),
),
Mapping(
"asin",
remote_field="remote_ids",
formatter=lambda b: get_dict_field(b, "amazon"),
),
Mapping(
"viaf",
remote_field="remote_ids",
formatter=lambda b: get_dict_field(b, "viaf"),
),
Mapping(
"wikidata",
remote_field="remote_ids",
formatter=lambda b: get_dict_field(b, "wikidata"),
),
Mapping(
"wikipedia_link", remote_field="links", formatter=get_wikipedia_link
),
Mapping("inventaire_id", remote_field="links", formatter=get_inventaire_id),
] ]
def get_book_data(self, remote_id): def get_book_data(self, remote_id):
@ -152,35 +126,33 @@ class Connector(AbstractConnector):
image_name = f"{cover_id}-{size}.jpg" image_name = f"{cover_id}-{size}.jpg"
return f"{self.covers_url}/b/id/{image_name}" return f"{self.covers_url}/b/id/{image_name}"
def parse_search_data(self, data, min_confidence): def parse_search_data(self, data):
for idx, search_result in enumerate(data.get("docs")): return data.get("docs")
def format_search_result(self, search_result):
# build the remote id from the openlibrary key # build the remote id from the openlibrary key
key = self.books_url + search_result["key"] key = self.books_url + search_result["key"]
author = search_result.get("author_name") or ["Unknown"] author = search_result.get("author_name") or ["Unknown"]
cover_blob = search_result.get("cover_i") cover_blob = search_result.get("cover_i")
cover = self.get_cover_url([cover_blob], size="M") if cover_blob else None cover = self.get_cover_url([cover_blob], size="M") if cover_blob else None
return SearchResult(
# OL doesn't provide confidence, but it does sort by an internal ranking, so
# this confidence value is relative to the list position
confidence = 1 / (idx + 1)
yield SearchResult(
title=search_result.get("title"), title=search_result.get("title"),
key=key, key=key,
author=", ".join(author), author=", ".join(author),
connector=self, connector=self,
year=search_result.get("first_publish_year"), year=search_result.get("first_publish_year"),
cover=cover, cover=cover,
confidence=confidence,
) )
def parse_isbn_search_data(self, data): def parse_isbn_search_data(self, data):
for search_result in list(data.values()): return list(data.values())
def format_isbn_search_result(self, search_result):
# build the remote id from the openlibrary key # build the remote id from the openlibrary key
key = self.books_url + search_result["key"] key = self.books_url + search_result["key"]
authors = search_result.get("authors") or [{"name": "Unknown"}] authors = search_result.get("authors") or [{"name": "Unknown"}]
author_names = [author.get("name") for author in authors] author_names = [author.get("name") for author in authors]
yield SearchResult( return SearchResult(
title=search_result.get("title"), title=search_result.get("title"),
key=key, key=key,
author=", ".join(author_names), author=", ".join(author_names),
@ -252,40 +224,6 @@ def get_languages(language_blob):
return langs return langs
def get_dict_field(blob, field_name):
"""extract the isni from the remote id data for the author"""
if not blob or not isinstance(blob, dict):
return None
return blob.get(field_name)
def get_wikipedia_link(links):
"""extract wikipedia links"""
if not isinstance(links, list):
return None
for link in links:
if not isinstance(link, dict):
continue
if link.get("title") == "wikipedia":
return link.get("url")
return None
def get_inventaire_id(links):
"""extract and format inventaire ids"""
if not isinstance(links, list):
return None
for link in links:
if not isinstance(link, dict):
continue
if link.get("title") == "inventaire.io":
iv_link = link.get("url")
return iv_link.split("/")[-1]
return None
def pick_default_edition(options): def pick_default_edition(options):
"""favor physical copies with covers in english""" """favor physical copies with covers in english"""
if not options: if not options:

View file

@ -8,20 +8,8 @@ def site_settings(request): # pylint: disable=unused-argument
if not request.is_secure(): if not request.is_secure():
request_protocol = "http://" request_protocol = "http://"
site = models.SiteSettings.objects.get()
theme = "css/themes/bookwyrm-light.scss"
if (
hasattr(request, "user")
and request.user.is_authenticated
and request.user.theme
):
theme = request.user.theme.path
elif site.default_theme:
theme = site.default_theme.path
return { return {
"site": site, "site": models.SiteSettings.objects.get(),
"site_theme": theme,
"active_announcements": models.Announcement.active_announcements(), "active_announcements": models.Announcement.active_announcements(),
"thumbnail_generation_enabled": settings.ENABLE_THUMBNAIL_GENERATION, "thumbnail_generation_enabled": settings.ENABLE_THUMBNAIL_GENERATION,
"media_full_url": settings.MEDIA_FULL_URL, "media_full_url": settings.MEDIA_FULL_URL,

View file

@ -10,9 +10,14 @@ from bookwyrm.settings import DOMAIN
def email_data(): def email_data():
"""fields every email needs""" """fields every email needs"""
site = models.SiteSettings.objects.get() site = models.SiteSettings.objects.get()
if site.logo_small:
logo_path = f"/images/{site.logo_small.url}"
else:
logo_path = "/static/images/logo-small.png"
return { return {
"site_name": site.name, "site_name": site.name,
"logo": site.logo_small_url, "logo": logo_path,
"domain": DOMAIN, "domain": DOMAIN,
"user": None, "user": None,
} }
@ -41,20 +46,6 @@ def password_reset_email(reset_code):
send_email.delay(reset_code.user.email, *format_email("password_reset", data)) send_email.delay(reset_code.user.email, *format_email("password_reset", data))
def moderation_report_email(report):
"""a report was created"""
data = email_data()
data["reporter"] = report.reporter.localname or report.reporter.username
data["reportee"] = report.user.localname or report.user.username
data["report_link"] = report.remote_id
for admin in models.User.objects.filter(
groups__name__in=["admin", "moderator"]
).distinct():
data["user"] = admin.display_name
send_email.delay(admin.email, *format_email("moderation_report", data))
def format_email(email_name, data): def format_email(email_name, data):
"""render the email templates""" """render the email templates"""
subject = get_template(f"email/{email_name}/subject.html").render(data).strip() subject = get_template(f"email/{email_name}/subject.html").render(data).strip()
@ -71,7 +62,7 @@ def format_email(email_name, data):
def send_email(recipient, subject, html_content, text_content): def send_email(recipient, subject, html_content, text_content):
"""use a task to send the email""" """use a task to send the email"""
email = EmailMultiAlternatives( email = EmailMultiAlternatives(
subject, text_content, settings.EMAIL_SENDER, [recipient] subject, text_content, settings.DEFAULT_FROM_EMAIL, [recipient]
) )
email.attach_alternative(html_content, "text/html") email.attach_alternative(html_content, "text/html")
email.send() email.send()

337
bookwyrm/forms.py Normal file
View file

@ -0,0 +1,337 @@
""" using django model forms """
import datetime
from collections import defaultdict
from django import forms
from django.forms import ModelForm, PasswordInput, widgets, ChoiceField
from django.forms.widgets import Textarea
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from bookwyrm import models
class CustomForm(ModelForm):
"""add css classes to the forms"""
def __init__(self, *args, **kwargs):
css_classes = defaultdict(lambda: "")
css_classes["text"] = "input"
css_classes["password"] = "input"
css_classes["email"] = "input"
css_classes["number"] = "input"
css_classes["checkbox"] = "checkbox"
css_classes["textarea"] = "textarea"
# pylint: disable=super-with-arguments
super(CustomForm, self).__init__(*args, **kwargs)
for visible in self.visible_fields():
if hasattr(visible.field.widget, "input_type"):
input_type = visible.field.widget.input_type
if isinstance(visible.field.widget, Textarea):
input_type = "textarea"
visible.field.widget.attrs["rows"] = 5
visible.field.widget.attrs["class"] = css_classes[input_type]
# pylint: disable=missing-class-docstring
class LoginForm(CustomForm):
class Meta:
model = models.User
fields = ["localname", "password"]
help_texts = {f: None for f in fields}
widgets = {
"password": PasswordInput(),
}
class RegisterForm(CustomForm):
class Meta:
model = models.User
fields = ["localname", "email", "password"]
help_texts = {f: None for f in fields}
widgets = {"password": PasswordInput()}
class RatingForm(CustomForm):
class Meta:
model = models.ReviewRating
fields = ["user", "book", "rating", "privacy"]
class ReviewForm(CustomForm):
class Meta:
model = models.Review
fields = [
"user",
"book",
"name",
"content",
"rating",
"content_warning",
"sensitive",
"privacy",
]
class CommentForm(CustomForm):
class Meta:
model = models.Comment
fields = [
"user",
"book",
"content",
"content_warning",
"sensitive",
"privacy",
"progress",
"progress_mode",
"reading_status",
]
class QuotationForm(CustomForm):
class Meta:
model = models.Quotation
fields = [
"user",
"book",
"quote",
"content",
"content_warning",
"sensitive",
"privacy",
"position",
"position_mode",
]
class ReplyForm(CustomForm):
class Meta:
model = models.Status
fields = [
"user",
"content",
"content_warning",
"sensitive",
"reply_parent",
"privacy",
]
class StatusForm(CustomForm):
class Meta:
model = models.Status
fields = ["user", "content", "content_warning", "sensitive", "privacy"]
class DirectForm(CustomForm):
class Meta:
model = models.Status
fields = ["user", "content", "content_warning", "sensitive", "privacy"]
class EditUserForm(CustomForm):
class Meta:
model = models.User
fields = [
"avatar",
"name",
"email",
"summary",
"show_goal",
"show_suggested_users",
"manually_approves_followers",
"default_post_privacy",
"discoverable",
"preferred_timezone",
"preferred_language",
]
help_texts = {f: None for f in fields}
class LimitedEditUserForm(CustomForm):
class Meta:
model = models.User
fields = [
"avatar",
"name",
"summary",
"manually_approves_followers",
"discoverable",
]
help_texts = {f: None for f in fields}
class DeleteUserForm(CustomForm):
class Meta:
model = models.User
fields = ["password"]
class UserGroupForm(CustomForm):
class Meta:
model = models.User
fields = ["groups"]
class CoverForm(CustomForm):
class Meta:
model = models.Book
fields = ["cover"]
help_texts = {f: None for f in fields}
class EditionForm(CustomForm):
class Meta:
model = models.Edition
exclude = [
"remote_id",
"origin_id",
"created_date",
"updated_date",
"edition_rank",
"authors",
"parent_work",
"shelves",
"connector",
"search_vector",
]
class AuthorForm(CustomForm):
class Meta:
model = models.Author
exclude = [
"remote_id",
"origin_id",
"created_date",
"updated_date",
"search_vector",
]
class ImportForm(forms.Form):
csv_file = forms.FileField()
class ExpiryWidget(widgets.Select):
def value_from_datadict(self, data, files, name):
"""human-readable exiration time buckets"""
selected_string = super().value_from_datadict(data, files, name)
if selected_string == "day":
interval = datetime.timedelta(days=1)
elif selected_string == "week":
interval = datetime.timedelta(days=7)
elif selected_string == "month":
interval = datetime.timedelta(days=31) # Close enough?
elif selected_string == "forever":
return None
else:
return selected_string # This will raise
return timezone.now() + interval
class InviteRequestForm(CustomForm):
def clean(self):
"""make sure the email isn't in use by a registered user"""
cleaned_data = super().clean()
email = cleaned_data.get("email")
if email and models.User.objects.filter(email=email).exists():
self.add_error("email", _("A user with this email already exists."))
class Meta:
model = models.InviteRequest
fields = ["email"]
class CreateInviteForm(CustomForm):
class Meta:
model = models.SiteInvite
exclude = ["code", "user", "times_used", "invitees"]
widgets = {
"expiry": ExpiryWidget(
choices=[
("day", _("One Day")),
("week", _("One Week")),
("month", _("One Month")),
("forever", _("Does Not Expire")),
]
),
"use_limit": widgets.Select(
choices=[(i, _(f"{i} uses")) for i in [1, 5, 10, 25, 50, 100]]
+ [(None, _("Unlimited"))]
),
}
class ShelfForm(CustomForm):
class Meta:
model = models.Shelf
fields = ["user", "name", "privacy", "description"]
class GoalForm(CustomForm):
class Meta:
model = models.AnnualGoal
fields = ["user", "year", "goal", "privacy"]
class SiteForm(CustomForm):
class Meta:
model = models.SiteSettings
exclude = []
class AnnouncementForm(CustomForm):
class Meta:
model = models.Announcement
exclude = ["remote_id"]
class ListForm(CustomForm):
class Meta:
model = models.List
fields = ["user", "name", "description", "curation", "privacy"]
class ReportForm(CustomForm):
class Meta:
model = models.Report
fields = ["user", "reporter", "statuses", "note"]
class EmailBlocklistForm(CustomForm):
class Meta:
model = models.EmailBlocklist
fields = ["domain"]
class IPBlocklistForm(CustomForm):
class Meta:
model = models.IPBlocklist
fields = ["address"]
class ServerForm(CustomForm):
class Meta:
model = models.FederatedServer
exclude = ["remote_id"]
class SortListForm(forms.Form):
sort_by = ChoiceField(
choices=(
("order", _("List Order")),
("title", _("Book Title")),
("rating", _("Rating")),
),
label=_("Sort By"),
)
direction = ChoiceField(
choices=(
("ascending", _("Ascending")),
("descending", _("Descending")),
),
)

View file

@ -1,12 +0,0 @@
""" make forms available to the app """
# site admin
from .admin import *
from .author import *
from .books import *
from .edit_user import *
from .forms import *
from .groups import *
from .landing import *
from .links import *
from .lists import *
from .status import *

View file

@ -1,141 +0,0 @@
""" using django model forms """
import datetime
from django import forms
from django.forms import widgets
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django_celery_beat.models import IntervalSchedule
from bookwyrm import models
from .custom_form import CustomForm
# pylint: disable=missing-class-docstring
class ExpiryWidget(widgets.Select):
def value_from_datadict(self, data, files, name):
"""human-readable exiration time buckets"""
selected_string = super().value_from_datadict(data, files, name)
if selected_string == "day":
interval = datetime.timedelta(days=1)
elif selected_string == "week":
interval = datetime.timedelta(days=7)
elif selected_string == "month":
interval = datetime.timedelta(days=31) # Close enough?
elif selected_string == "forever":
return None
else:
return selected_string # This will raise
return timezone.now() + interval
class CreateInviteForm(CustomForm):
class Meta:
model = models.SiteInvite
exclude = ["code", "user", "times_used", "invitees"]
widgets = {
"expiry": ExpiryWidget(
choices=[
("day", _("One Day")),
("week", _("One Week")),
("month", _("One Month")),
("forever", _("Does Not Expire")),
]
),
"use_limit": widgets.Select(
choices=[(i, _(f"{i} uses")) for i in [1, 5, 10, 25, 50, 100]]
+ [(None, _("Unlimited"))]
),
}
class SiteForm(CustomForm):
class Meta:
model = models.SiteSettings
exclude = ["admin_code", "install_mode"]
widgets = {
"instance_short_description": forms.TextInput(
attrs={"aria-describedby": "desc_instance_short_description"}
),
"require_confirm_email": forms.CheckboxInput(
attrs={"aria-describedby": "desc_require_confirm_email"}
),
"invite_request_text": forms.Textarea(
attrs={"aria-describedby": "desc_invite_request_text"}
),
}
class ThemeForm(CustomForm):
class Meta:
model = models.Theme
fields = ["name", "path"]
widgets = {
"name": forms.TextInput(attrs={"aria-describedby": "desc_name"}),
"path": forms.TextInput(
attrs={
"aria-describedby": "desc_path",
"placeholder": "css/themes/theme-name.scss",
}
),
}
class AnnouncementForm(CustomForm):
class Meta:
model = models.Announcement
exclude = ["remote_id"]
widgets = {
"preview": forms.TextInput(attrs={"aria-describedby": "desc_preview"}),
"content": forms.Textarea(attrs={"aria-describedby": "desc_content"}),
"event_date": forms.SelectDateWidget(
attrs={"aria-describedby": "desc_event_date"}
),
"start_date": forms.SelectDateWidget(
attrs={"aria-describedby": "desc_start_date"}
),
"end_date": forms.SelectDateWidget(
attrs={"aria-describedby": "desc_end_date"}
),
"active": forms.CheckboxInput(attrs={"aria-describedby": "desc_active"}),
}
class EmailBlocklistForm(CustomForm):
class Meta:
model = models.EmailBlocklist
fields = ["domain"]
widgets = {
"avatar": forms.TextInput(attrs={"aria-describedby": "desc_domain"}),
}
class IPBlocklistForm(CustomForm):
class Meta:
model = models.IPBlocklist
fields = ["address"]
class ServerForm(CustomForm):
class Meta:
model = models.FederatedServer
exclude = ["remote_id"]
class AutoModRuleForm(CustomForm):
class Meta:
model = models.AutoMod
fields = ["string_match", "flag_users", "flag_statuses", "created_by"]
class IntervalScheduleForm(CustomForm):
class Meta:
model = IntervalSchedule
fields = ["every", "period"]
widgets = {
"every": forms.NumberInput(attrs={"aria-describedby": "desc_every"}),
"period": forms.Select(attrs={"aria-describedby": "desc_period"}),
}

View file

@ -1,47 +0,0 @@
""" using django model forms """
from django import forms
from bookwyrm import models
from .custom_form import CustomForm
# pylint: disable=missing-class-docstring
class AuthorForm(CustomForm):
class Meta:
model = models.Author
fields = [
"last_edited_by",
"name",
"aliases",
"bio",
"wikipedia_link",
"born",
"died",
"openlibrary_key",
"inventaire_id",
"librarything_key",
"goodreads_key",
"isni",
]
widgets = {
"name": forms.TextInput(attrs={"aria-describedby": "desc_name"}),
"aliases": forms.TextInput(attrs={"aria-describedby": "desc_aliases"}),
"bio": forms.Textarea(attrs={"aria-describedby": "desc_bio"}),
"wikipedia_link": forms.TextInput(
attrs={"aria-describedby": "desc_wikipedia_link"}
),
"born": forms.SelectDateWidget(attrs={"aria-describedby": "desc_born"}),
"died": forms.SelectDateWidget(attrs={"aria-describedby": "desc_died"}),
"oepnlibrary_key": forms.TextInput(
attrs={"aria-describedby": "desc_oepnlibrary_key"}
),
"inventaire_id": forms.TextInput(
attrs={"aria-describedby": "desc_inventaire_id"}
),
"librarything_key": forms.TextInput(
attrs={"aria-describedby": "desc_librarything_key"}
),
"goodreads_key": forms.TextInput(
attrs={"aria-describedby": "desc_goodreads_key"}
),
}

View file

@ -1,104 +0,0 @@
""" using django model forms """
from django import forms
from bookwyrm import models
from bookwyrm.models.fields import ClearableFileInputWithWarning
from .custom_form import CustomForm
from .widgets import ArrayWidget, SelectDateWidget, Select
# pylint: disable=missing-class-docstring
class CoverForm(CustomForm):
class Meta:
model = models.Book
fields = ["cover"]
help_texts = {f: None for f in fields}
class EditionForm(CustomForm):
class Meta:
model = models.Edition
exclude = [
"remote_id",
"origin_id",
"created_date",
"updated_date",
"edition_rank",
"authors",
"parent_work",
"shelves",
"connector",
"search_vector",
"links",
"file_links",
]
widgets = {
"title": forms.TextInput(attrs={"aria-describedby": "desc_title"}),
"subtitle": forms.TextInput(attrs={"aria-describedby": "desc_subtitle"}),
"description": forms.Textarea(
attrs={"aria-describedby": "desc_description"}
),
"series": forms.TextInput(attrs={"aria-describedby": "desc_series"}),
"series_number": forms.TextInput(
attrs={"aria-describedby": "desc_series_number"}
),
"subjects": ArrayWidget(),
"languages": forms.TextInput(
attrs={"aria-describedby": "desc_languages_help desc_languages"}
),
"publishers": forms.TextInput(
attrs={"aria-describedby": "desc_publishers_help desc_publishers"}
),
"first_published_date": SelectDateWidget(
attrs={"aria-describedby": "desc_first_published_date"}
),
"published_date": SelectDateWidget(
attrs={"aria-describedby": "desc_published_date"}
),
"cover": ClearableFileInputWithWarning(
attrs={"aria-describedby": "desc_cover"}
),
"physical_format": Select(
attrs={"aria-describedby": "desc_physical_format"}
),
"physical_format_detail": forms.TextInput(
attrs={"aria-describedby": "desc_physical_format_detail"}
),
"pages": forms.NumberInput(attrs={"aria-describedby": "desc_pages"}),
"isbn_13": forms.TextInput(attrs={"aria-describedby": "desc_isbn_13"}),
"isbn_10": forms.TextInput(attrs={"aria-describedby": "desc_isbn_10"}),
"openlibrary_key": forms.TextInput(
attrs={"aria-describedby": "desc_openlibrary_key"}
),
"inventaire_id": forms.TextInput(
attrs={"aria-describedby": "desc_inventaire_id"}
),
"oclc_number": forms.TextInput(
attrs={"aria-describedby": "desc_oclc_number"}
),
"ASIN": forms.TextInput(attrs={"aria-describedby": "desc_ASIN"}),
}
class EditionFromWorkForm(CustomForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# make all fields hidden
for visible in self.visible_fields():
visible.field.widget = forms.HiddenInput()
class Meta:
model = models.Work
fields = [
"title",
"subtitle",
"authors",
"description",
"languages",
"series",
"series_number",
"subjects",
"subject_places",
"cover",
"first_published_date",
]

View file

@ -1,26 +0,0 @@
""" Overrides django's default form class """
from collections import defaultdict
from django.forms import ModelForm
from django.forms.widgets import Textarea
class CustomForm(ModelForm):
"""add css classes to the forms"""
def __init__(self, *args, **kwargs):
css_classes = defaultdict(lambda: "")
css_classes["text"] = "input"
css_classes["password"] = "input"
css_classes["email"] = "input"
css_classes["number"] = "input"
css_classes["checkbox"] = "checkbox"
css_classes["textarea"] = "textarea"
# pylint: disable=super-with-arguments
super(CustomForm, self).__init__(*args, **kwargs)
for visible in self.visible_fields():
if hasattr(visible.field.widget, "input_type"):
input_type = visible.field.widget.input_type
if isinstance(visible.field.widget, Textarea):
input_type = "textarea"
visible.field.widget.attrs["rows"] = 5
visible.field.widget.attrs["class"] = css_classes[input_type]

View file

@ -1,68 +0,0 @@
""" using django model forms """
from django import forms
from bookwyrm import models
from bookwyrm.models.fields import ClearableFileInputWithWarning
from .custom_form import CustomForm
# pylint: disable=missing-class-docstring
class EditUserForm(CustomForm):
class Meta:
model = models.User
fields = [
"avatar",
"name",
"email",
"summary",
"show_goal",
"show_suggested_users",
"manually_approves_followers",
"default_post_privacy",
"discoverable",
"hide_follows",
"preferred_timezone",
"preferred_language",
"theme",
]
help_texts = {f: None for f in fields}
widgets = {
"avatar": ClearableFileInputWithWarning(
attrs={"aria-describedby": "desc_avatar"}
),
"name": forms.TextInput(attrs={"aria-describedby": "desc_name"}),
"summary": forms.Textarea(attrs={"aria-describedby": "desc_summary"}),
"email": forms.EmailInput(attrs={"aria-describedby": "desc_email"}),
"discoverable": forms.CheckboxInput(
attrs={"aria-describedby": "desc_discoverable"}
),
}
class LimitedEditUserForm(CustomForm):
class Meta:
model = models.User
fields = [
"avatar",
"name",
"summary",
"manually_approves_followers",
"discoverable",
]
help_texts = {f: None for f in fields}
widgets = {
"avatar": ClearableFileInputWithWarning(
attrs={"aria-describedby": "desc_avatar"}
),
"name": forms.TextInput(attrs={"aria-describedby": "desc_name"}),
"summary": forms.Textarea(attrs={"aria-describedby": "desc_summary"}),
"discoverable": forms.CheckboxInput(
attrs={"aria-describedby": "desc_discoverable"}
),
}
class DeleteUserForm(CustomForm):
class Meta:
model = models.User
fields = ["password"]

View file

@ -1,64 +0,0 @@
""" using django model forms """
from django import forms
from django.forms import widgets
from django.utils.translation import gettext_lazy as _
from bookwyrm import models
from bookwyrm.models.user import FeedFilterChoices
from .custom_form import CustomForm
# pylint: disable=missing-class-docstring
class FeedStatusTypesForm(CustomForm):
class Meta:
model = models.User
fields = ["feed_status_types"]
help_texts = {f: None for f in fields}
widgets = {
"feed_status_types": widgets.CheckboxSelectMultiple(
choices=FeedFilterChoices,
),
}
class ImportForm(forms.Form):
csv_file = forms.FileField()
class ShelfForm(CustomForm):
class Meta:
model = models.Shelf
fields = ["user", "name", "privacy", "description"]
class GoalForm(CustomForm):
class Meta:
model = models.AnnualGoal
fields = ["user", "year", "goal", "privacy"]
class ReportForm(CustomForm):
class Meta:
model = models.Report
fields = ["user", "reporter", "status", "links", "note"]
class ReadThroughForm(CustomForm):
def clean(self):
"""don't let readthroughs end before they start"""
cleaned_data = super().clean()
start_date = cleaned_data.get("start_date")
finish_date = cleaned_data.get("finish_date")
if start_date and finish_date and start_date > finish_date:
self.add_error(
"finish_date", _("Reading finish date cannot be before start date.")
)
stopped_date = cleaned_data.get("stopped_date")
if start_date and stopped_date and start_date > stopped_date:
self.add_error(
"stopped_date", _("Reading stopped date cannot be before start date.")
)
class Meta:
model = models.ReadThrough
fields = ["user", "book", "start_date", "finish_date", "stopped_date"]

View file

@ -1,16 +0,0 @@
""" using django model forms """
from bookwyrm import models
from .custom_form import CustomForm
# pylint: disable=missing-class-docstring
class UserGroupForm(CustomForm):
class Meta:
model = models.User
fields = ["groups"]
class GroupForm(CustomForm):
class Meta:
model = models.Group
fields = ["user", "privacy", "name", "description"]

View file

@ -1,45 +0,0 @@
""" Forms for the landing pages """
from django.forms import PasswordInput
from django.utils.translation import gettext_lazy as _
from bookwyrm import models
from .custom_form import CustomForm
# pylint: disable=missing-class-docstring
class LoginForm(CustomForm):
class Meta:
model = models.User
fields = ["localname", "password"]
help_texts = {f: None for f in fields}
widgets = {
"password": PasswordInput(),
}
class RegisterForm(CustomForm):
class Meta:
model = models.User
fields = ["localname", "email", "password"]
help_texts = {f: None for f in fields}
widgets = {"password": PasswordInput()}
def clean(self):
"""Check if the username is taken"""
cleaned_data = super().clean()
localname = cleaned_data.get("localname").strip()
if models.User.objects.filter(localname=localname).first():
self.add_error("localname", _("User with this username already exists"))
class InviteRequestForm(CustomForm):
def clean(self):
"""make sure the email isn't in use by a registered user"""
cleaned_data = super().clean()
email = cleaned_data.get("email")
if email and models.User.objects.filter(email=email).exists():
self.add_error("email", _("A user with this email already exists."))
class Meta:
model = models.InviteRequest
fields = ["email", "answer"]

View file

@ -1,48 +0,0 @@
""" using django model forms """
from urllib.parse import urlparse
from django.utils.translation import gettext_lazy as _
from bookwyrm import models
from .custom_form import CustomForm
# pylint: disable=missing-class-docstring
class LinkDomainForm(CustomForm):
class Meta:
model = models.LinkDomain
fields = ["name"]
class FileLinkForm(CustomForm):
class Meta:
model = models.FileLink
fields = ["url", "filetype", "availability", "book", "added_by"]
def clean(self):
"""make sure the domain isn't blocked or pending"""
cleaned_data = super().clean()
url = cleaned_data.get("url")
filetype = cleaned_data.get("filetype")
book = cleaned_data.get("book")
domain = urlparse(url).netloc
if models.LinkDomain.objects.filter(domain=domain).exists():
status = models.LinkDomain.objects.get(domain=domain).status
if status == "blocked":
# pylint: disable=line-too-long
self.add_error(
"url",
_(
"This domain is blocked. Please contact your administrator if you think this is an error."
),
)
elif models.FileLink.objects.filter(
url=url, book=book, filetype=filetype
).exists():
# pylint: disable=line-too-long
self.add_error(
"url",
_(
"This link with file type has already been added for this book. If it is not visible, the domain is still pending."
),
)

View file

@ -1,37 +0,0 @@
""" using django model forms """
from django import forms
from django.forms import ChoiceField
from django.utils.translation import gettext_lazy as _
from bookwyrm import models
from .custom_form import CustomForm
# pylint: disable=missing-class-docstring
class ListForm(CustomForm):
class Meta:
model = models.List
fields = ["user", "name", "description", "curation", "privacy", "group"]
class ListItemForm(CustomForm):
class Meta:
model = models.ListItem
fields = ["user", "book", "book_list", "notes"]
class SortListForm(forms.Form):
sort_by = ChoiceField(
choices=(
("order", _("List Order")),
("title", _("Book Title")),
("rating", _("Rating")),
),
label=_("Sort By"),
)
direction = ChoiceField(
choices=(
("ascending", _("Ascending")),
("descending", _("Descending")),
),
)

View file

@ -1,82 +0,0 @@
""" using django model forms """
from bookwyrm import models
from .custom_form import CustomForm
# pylint: disable=missing-class-docstring
class RatingForm(CustomForm):
class Meta:
model = models.ReviewRating
fields = ["user", "book", "rating", "privacy"]
class ReviewForm(CustomForm):
class Meta:
model = models.Review
fields = [
"user",
"book",
"name",
"content",
"rating",
"content_warning",
"sensitive",
"privacy",
]
class CommentForm(CustomForm):
class Meta:
model = models.Comment
fields = [
"user",
"book",
"content",
"content_warning",
"sensitive",
"privacy",
"progress",
"progress_mode",
"reading_status",
]
class QuotationForm(CustomForm):
class Meta:
model = models.Quotation
fields = [
"user",
"book",
"quote",
"content",
"content_warning",
"sensitive",
"privacy",
"position",
"position_mode",
]
class ReplyForm(CustomForm):
class Meta:
model = models.Status
fields = [
"user",
"content",
"content_warning",
"sensitive",
"reply_parent",
"privacy",
]
class StatusForm(CustomForm):
class Meta:
model = models.Status
fields = ["user", "content", "content_warning", "sensitive", "privacy"]
class DirectForm(CustomForm):
class Meta:
model = models.Status
fields = ["user", "content", "content_warning", "sensitive", "privacy"]

View file

@ -1,70 +0,0 @@
""" using django model forms """
from django import forms
class ArrayWidget(forms.widgets.TextInput):
"""Inputs for postgres array fields"""
# pylint: disable=unused-argument
# pylint: disable=no-self-use
def value_from_datadict(self, data, files, name):
"""get all values for this name"""
return [i for i in data.getlist(name) if i]
class Select(forms.Select):
"""custom template for select widget"""
template_name = "widgets/select.html"
class SelectDateWidget(forms.SelectDateWidget):
"""
A widget that splits date input into two <select> boxes and a numerical year.
"""
template_name = "widgets/addon_multiwidget.html"
select_widget = Select
def get_context(self, name, value, attrs):
"""sets individual widgets"""
context = super().get_context(name, value, attrs)
date_context = {}
year_name = self.year_field % name
date_context["year"] = forms.NumberInput().get_context(
name=year_name,
value=context["widget"]["value"]["year"],
attrs={
**context["widget"]["attrs"],
"id": f"id_{year_name}",
"class": "input",
},
)
month_choices = list(self.months.items())
if not self.is_required:
month_choices.insert(0, self.month_none_value)
month_name = self.month_field % name
date_context["month"] = self.select_widget(
attrs, choices=month_choices
).get_context(
name=month_name,
value=context["widget"]["value"]["month"],
attrs={**context["widget"]["attrs"], "id": f"id_{month_name}"},
)
day_choices = [(i, i) for i in range(1, 32)]
if not self.is_required:
day_choices.insert(0, self.day_none_value)
day_name = self.day_field % name
date_context["day"] = self.select_widget(
attrs,
choices=day_choices,
).get_context(
name=day_name,
value=context["widget"]["value"]["day"],
attrs={**context["widget"]["attrs"], "id": f"id_{day_name}"},
)
subwidgets = []
for field in self._parse_date_fmt():
subwidgets.append(date_context[field]["widget"])
context["widget"]["subwidgets"] = subwidgets
return context

View file

@ -1,8 +1,6 @@
""" import classes """ """ import classes """
from .importer import Importer from .importer import Importer
from .calibre_import import CalibreImporter
from .goodreads_import import GoodreadsImporter from .goodreads_import import GoodreadsImporter
from .librarything_import import LibrarythingImporter from .librarything_import import LibrarythingImporter
from .openlibrary_import import OpenLibraryImporter
from .storygraph_import import StorygraphImporter from .storygraph_import import StorygraphImporter

View file

@ -1,28 +0,0 @@
""" handle reading a csv from calibre """
from bookwyrm.models import Shelf
from . import Importer
class CalibreImporter(Importer):
"""csv downloads from Calibre"""
service = "Calibre"
def __init__(self, *args, **kwargs):
# Add timestamp to row_mappings_guesses for date_added to avoid
# integrity error
row_mappings_guesses = []
for field, mapping in self.row_mappings_guesses:
if field in ("date_added",):
row_mappings_guesses.append((field, mapping + ["timestamp"]))
else:
row_mappings_guesses.append((field, mapping))
self.row_mappings_guesses = row_mappings_guesses
super().__init__(*args, **kwargs)
def get_shelf(self, normalized_row):
# Calibre export does not indicate which shelf to use. Go with a default one for now
return Shelf.TO_READ

View file

@ -3,7 +3,14 @@ from . import Importer
class GoodreadsImporter(Importer): class GoodreadsImporter(Importer):
"""Goodreads is the default importer, thus Importer follows its structure. """GoodReads is the default importer, thus Importer follows its structure.
For a more complete example of overriding see librarything_import.py""" For a more complete example of overriding see librarything_import.py"""
service = "Goodreads" service = "GoodReads"
def parse_fields(self, entry):
"""handle the specific fields in goodreads csvs"""
entry.update({"import_source": self.service})
# add missing 'Date Started' field
entry.update({"Date Started": None})
return entry

View file

@ -1,4 +1,4 @@
""" handle reading a csv from an external service, defaults are from Goodreads """ """ handle reading a csv from an external service, defaults are from GoodReads """
import csv import csv
import logging import logging
@ -7,7 +7,7 @@ from django.utils.translation import gettext_lazy as _
from bookwyrm import models from bookwyrm import models
from bookwyrm.models import ImportJob, ImportItem from bookwyrm.models import ImportJob, ImportItem
from bookwyrm.tasks import app, LOW from bookwyrm.tasks import app
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -15,93 +15,33 @@ logger = logging.getLogger(__name__)
class Importer: class Importer:
"""Generic class for csv data import from an outside service""" """Generic class for csv data import from an outside service"""
service = "Import" service = "Unknown"
delimiter = "," delimiter = ","
encoding = "UTF-8" encoding = "UTF-8"
mandatory_fields = ["Title", "Author"]
# these are from Goodreads
row_mappings_guesses = [
("id", ["id", "book id"]),
("title", ["title"]),
("authors", ["author", "authors", "primary author"]),
("isbn_10", ["isbn10", "isbn"]),
("isbn_13", ["isbn13", "isbn", "isbns"]),
("shelf", ["shelf", "exclusive shelf", "read status", "bookshelf"]),
("review_name", ["review name"]),
("review_body", ["my review", "review"]),
("rating", ["my rating", "rating", "star rating"]),
("date_added", ["date added", "entry date", "added"]),
("date_started", ["date started", "started"]),
("date_finished", ["date finished", "last date read", "date read", "finished"]),
]
date_fields = ["date_added", "date_started", "date_finished"]
shelf_mapping_guesses = {
"to-read": ["to-read", "want to read"],
"read": ["read", "already read"],
"reading": ["currently-reading", "reading", "currently reading"],
}
def create_job(self, user, csv_file, include_reviews, privacy): def create_job(self, user, csv_file, include_reviews, privacy):
"""check over a csv and creates a database entry for the job""" """check over a csv and creates a database entry for the job"""
csv_reader = csv.DictReader(csv_file, delimiter=self.delimiter)
rows = enumerate(list(csv_reader))
job = ImportJob.objects.create( job = ImportJob.objects.create(
user=user, user=user, include_reviews=include_reviews, privacy=privacy
include_reviews=include_reviews,
privacy=privacy,
mappings=self.create_row_mappings(csv_reader.fieldnames),
source=self.service,
) )
for index, entry in enumerate(
for index, entry in rows: list(csv.DictReader(csv_file, delimiter=self.delimiter))
self.create_item(job, index, entry) ):
if not all(x in entry for x in self.mandatory_fields):
raise ValueError("Author and title must be in data.")
entry = self.parse_fields(entry)
self.save_item(job, index, entry)
return job return job
def update_legacy_job(self, job): def save_item(self, job, index, data): # pylint: disable=no-self-use
"""patch up a job that was in the old format"""
items = job.items
headers = list(items.first().data.keys())
job.mappings = self.create_row_mappings(headers)
job.updated_date = timezone.now()
job.save()
for item in items.all():
normalized = self.normalize_row(item.data, job.mappings)
normalized["shelf"] = self.get_shelf(normalized)
item.normalized_data = normalized
item.save()
def create_row_mappings(self, headers):
"""guess what the headers mean"""
mappings = {}
for (key, guesses) in self.row_mappings_guesses:
value = [h for h in headers if h.lower() in guesses]
value = value[0] if len(value) else None
if value:
headers.remove(value)
mappings[key] = value
return mappings
def create_item(self, job, index, data):
"""creates and saves an import item""" """creates and saves an import item"""
normalized = self.normalize_row(data, job.mappings) ImportItem(job=job, index=index, data=data).save()
normalized["shelf"] = self.get_shelf(normalized)
ImportItem(job=job, index=index, data=data, normalized_data=normalized).save()
def get_shelf(self, normalized_row): def parse_fields(self, entry):
"""determine which shelf to use""" """updates csv data with additional info"""
shelf_name = normalized_row.get("shelf") entry.update({"import_source": self.service})
if not shelf_name: return entry
return None
shelf_name = shelf_name.lower()
shelf = [
s for (s, gs) in self.shelf_mapping_guesses.items() if shelf_name in gs
]
return shelf[0] if shelf else None
def normalize_row(self, entry, mappings): # pylint: disable=no-self-use
"""use the dataclass to create the formatted row of data"""
return {k: entry.get(v) for k, v in mappings.items()}
def create_retry_job(self, user, original_job, items): def create_retry_job(self, user, original_job, items):
"""retry items that didn't import""" """retry items that didn't import"""
@ -109,66 +49,55 @@ class Importer:
user=user, user=user,
include_reviews=original_job.include_reviews, include_reviews=original_job.include_reviews,
privacy=original_job.privacy, privacy=original_job.privacy,
source=original_job.source,
# TODO: allow users to adjust mappings
mappings=original_job.mappings,
retry=True, retry=True,
) )
for item in items: for item in items:
# this will re-normalize the raw data self.save_item(job, item.index, item.data)
self.create_item(job, item.index, item.data)
return job return job
def start_import(self, job): # pylint: disable=no-self-use def start_import(self, job):
"""initalizes a csv import job""" """initalizes a csv import job"""
result = start_import_task.delay(job.id) result = import_data.delay(self.service, job.id)
job.task_id = result.id job.task_id = result.id
job.save() job.save()
@app.task(queue="low_priority") @app.task(queue="low_priority")
def start_import_task(job_id): def import_data(source, job_id):
"""trigger the child tasks for each row""" """does the actual lookup work in a celery task"""
job = ImportJob.objects.get(id=job_id) job = ImportJob.objects.get(id=job_id)
# these are sub-tasks so that one big task doesn't use up all the memory in celery try:
for item in job.items.values_list("id", flat=True).all(): for item in job.items.all():
import_item_task.delay(item)
@app.task(queue="low_priority")
def import_item_task(item_id):
"""resolve a row into a book"""
item = models.ImportItem.objects.get(id=item_id)
try: try:
item.resolve() item.resolve()
except Exception as err: # pylint: disable=broad-except except Exception as err: # pylint: disable=broad-except
logger.exception(err)
item.fail_reason = _("Error loading book") item.fail_reason = _("Error loading book")
item.save() item.save()
item.update_job() continue
raise err
if item.book or item.book_guess:
item.save()
if item.book: if item.book:
# shelves book and handles reviews # shelves book and handles reviews
handle_imported_book(item) handle_imported_book(
source, job.user, item, job.include_reviews, job.privacy
)
else: else:
item.fail_reason = _("Could not find a match for book") item.fail_reason = _("Could not find a match for book")
item.save() item.save()
item.update_job() finally:
job.complete = True
job.save()
def handle_imported_book(item): def handle_imported_book(source, user, item, include_reviews, privacy):
"""process a csv and then post about it""" """process a csv and then post about it"""
job = item.job
user = job.user
if isinstance(item.book, models.Work): if isinstance(item.book, models.Work):
item.book = item.book.default_edition item.book = item.book.default_edition
if not item.book: if not item.book:
item.fail_reason = _("Error loading book")
item.save()
return return
if not isinstance(item.book, models.Edition):
item.book = item.book.edition
existing_shelf = models.ShelfBook.objects.filter(book=item.book, user=user).exists() existing_shelf = models.ShelfBook.objects.filter(book=item.book, user=user).exists()
@ -176,9 +105,9 @@ def handle_imported_book(item):
if item.shelf and not existing_shelf: if item.shelf and not existing_shelf:
desired_shelf = models.Shelf.objects.get(identifier=item.shelf, user=user) desired_shelf = models.Shelf.objects.get(identifier=item.shelf, user=user)
shelved_date = item.date_added or timezone.now() shelved_date = item.date_added or timezone.now()
models.ShelfBook( models.ShelfBook.objects.create(
book=item.book, shelf=desired_shelf, user=user, shelved_date=shelved_date book=item.book, shelf=desired_shelf, user=user, shelved_date=shelved_date
).save(priority=LOW) )
for read in item.reads: for read in item.reads:
# check for an existing readthrough with the same dates # check for an existing readthrough with the same dates
@ -193,52 +122,35 @@ def handle_imported_book(item):
read.user = user read.user = user
read.save() read.save()
if job.include_reviews and (item.rating or item.review) and not item.linked_review: if include_reviews and (item.rating or item.review):
# we don't know the publication date of the review, # we don't know the publication date of the review,
# but "now" is a bad guess # but "now" is a bad guess
published_date_guess = item.date_read or item.date_added published_date_guess = item.date_read or item.date_added
if item.review: if item.review:
# pylint: disable=consider-using-f-string # pylint: disable=consider-using-f-string
review_title = "Review of {!r} on {!r}".format( review_title = (
"Review of {!r} on {!r}".format(
item.book.title, item.book.title,
job.source, source,
) )
review = models.Review.objects.filter( if item.review
user=user, else ""
book=item.book, )
name=review_title, models.Review.objects.create(
rating=item.rating,
published_date=published_date_guess,
).first()
if not review:
review = models.Review(
user=user, user=user,
book=item.book, book=item.book,
name=review_title, name=review_title,
content=item.review, content=item.review,
rating=item.rating, rating=item.rating,
published_date=published_date_guess, published_date=published_date_guess,
privacy=job.privacy, privacy=privacy,
) )
review.save(software="bookwyrm", priority=LOW)
else: else:
# just a rating # just a rating
review = models.ReviewRating.objects.filter( models.ReviewRating.objects.create(
user=user,
book=item.book,
published_date=published_date_guess,
rating=item.rating,
).first()
if not review:
review = models.ReviewRating(
user=user, user=user,
book=item.book, book=item.book,
rating=item.rating, rating=item.rating,
published_date=published_date_guess, published_date=published_date_guess,
privacy=job.privacy, privacy=privacy,
) )
review.save(software="bookwyrm", priority=LOW)
# only broadcast this review to other bookwyrm instances
item.linked_review = review
item.save()

View file

@ -1,7 +1,6 @@
""" handle reading a tsv from librarything """ """ handle reading a csv from librarything """
import re import re
import math
from bookwyrm.models import Shelf
from . import Importer from . import Importer
@ -12,19 +11,32 @@ class LibrarythingImporter(Importer):
service = "LibraryThing" service = "LibraryThing"
delimiter = "\t" delimiter = "\t"
encoding = "ISO-8859-1" encoding = "ISO-8859-1"
# mandatory_fields : fields matching the book title and author
mandatory_fields = ["Title", "Primary Author"]
def normalize_row(self, entry, mappings): # pylint: disable=no-self-use def parse_fields(self, entry):
"""use the dataclass to create the formatted row of data""" """custom parsing for librarything"""
remove_brackets = lambda v: re.sub(r"\[|\]", "", v) if v else None data = {}
normalized = {k: remove_brackets(entry.get(v)) for k, v in mappings.items()} data["import_source"] = self.service
isbn_13 = normalized.get("isbn_13") data["Book Id"] = entry["Book Id"]
isbn_13 = isbn_13.split(", ") if isbn_13 else [] data["Title"] = entry["Title"]
normalized["isbn_13"] = isbn_13[1] if len(isbn_13) > 0 else None data["Author"] = entry["Primary Author"]
return normalized data["ISBN13"] = entry["ISBN"]
data["My Review"] = entry["Review"]
if entry["Rating"]:
data["My Rating"] = math.ceil(float(entry["Rating"]))
else:
data["My Rating"] = ""
data["Date Added"] = re.sub(r"\[|\]", "", entry["Entry Date"])
data["Date Started"] = re.sub(r"\[|\]", "", entry["Date Started"])
data["Date Read"] = re.sub(r"\[|\]", "", entry["Date Read"])
def get_shelf(self, normalized_row): data["Exclusive Shelf"] = None
if normalized_row["date_finished"]: if data["Date Read"]:
return Shelf.READ_FINISHED data["Exclusive Shelf"] = "read"
if normalized_row["date_started"]: elif data["Date Started"]:
return Shelf.READING data["Exclusive Shelf"] = "reading"
return Shelf.TO_READ else:
data["Exclusive Shelf"] = "to-read"
return data

View file

@ -1,13 +0,0 @@
""" handle reading a csv from openlibrary"""
from . import Importer
class OpenLibraryImporter(Importer):
"""csv downloads from OpenLibrary"""
service = "OpenLibrary"
def __init__(self, *args, **kwargs):
self.row_mappings_guesses.append(("openlibrary_key", ["edition id"]))
self.row_mappings_guesses.append(("openlibrary_work_key", ["work id"]))
super().__init__(*args, **kwargs)

View file

@ -1,8 +1,34 @@
""" handle reading a csv from storygraph""" """ handle reading a csv from librarything """
import re
import math
from . import Importer from . import Importer
class StorygraphImporter(Importer): class StorygraphImporter(Importer):
"""csv downloads from Storygraph""" """csv downloads from librarything"""
service = "Storygraph" service = "Storygraph"
# mandatory_fields : fields matching the book title and author
mandatory_fields = ["Title"]
def parse_fields(self, entry):
"""custom parsing for storygraph"""
data = {}
data["import_source"] = self.service
data["Title"] = entry["Title"]
data["Author"] = entry["Authors"] if "Authors" in entry else entry["Author"]
data["ISBN13"] = entry["ISBN"]
data["My Review"] = entry["Review"]
if entry["Star Rating"]:
data["My Rating"] = math.ceil(float(entry["Star Rating"]))
else:
data["My Rating"] = ""
data["Date Added"] = re.sub(r"[/]", "-", entry["Date Added"])
data["Date Read"] = re.sub(r"[/]", "-", entry["Last Date Read"])
data["Exclusive Shelf"] = (
{"read": "read", "currently-reading": "reading", "to-read": "to-read"}
).get(entry["Read Status"], None)
return data

View file

@ -1,251 +0,0 @@
""" access the list streams stored in redis """
from django.dispatch import receiver
from django.db import transaction
from django.db.models import signals, Count, Q
from bookwyrm import models
from bookwyrm.redis_store import RedisStore
from bookwyrm.tasks import app, MEDIUM, HIGH
class ListsStream(RedisStore):
"""all the lists you can see"""
def stream_id(self, user): # pylint: disable=no-self-use
"""the redis key for this user's instance of this stream"""
if isinstance(user, int):
# allows the function to take an int or an obj
return f"{user}-lists"
return f"{user.id}-lists"
def get_rank(self, obj): # pylint: disable=no-self-use
"""lists are sorted by updated date"""
return obj.updated_date.timestamp()
def add_list(self, book_list):
"""add a list to users' feeds"""
# the pipeline contains all the add-to-stream activities
self.add_object_to_related_stores(book_list)
def add_user_lists(self, viewer, user):
"""add a user's lists to another user's feed"""
# only add the lists that the viewer should be able to see
lists = models.List.privacy_filter(viewer).filter(user=user)
self.bulk_add_objects_to_store(lists, self.stream_id(viewer))
def remove_user_lists(self, viewer, user, exclude_privacy=None):
"""remove a user's list from another user's feed"""
# remove all so that followers only lists are removed
lists = user.list_set
if exclude_privacy:
lists = lists.exclude(privacy=exclude_privacy)
self.bulk_remove_objects_from_store(lists.all(), self.stream_id(viewer))
def get_list_stream(self, user):
"""load the lists to be displayed"""
lists = self.get_store(self.stream_id(user))
return (
models.List.objects.filter(id__in=lists)
.annotate(item_count=Count("listitem", filter=Q(listitem__approved=True)))
# hide lists with no approved books
.filter(item_count__gt=0)
.select_related("user")
.prefetch_related("listitem_set")
.order_by("-updated_date")
.distinct()
)
def populate_lists(self, user):
"""go from zero to a timeline"""
self.populate_store(self.stream_id(user))
def get_audience(self, book_list): # pylint: disable=no-self-use
"""given a list, what users should see it"""
# everybody who could plausibly see this list
audience = models.User.objects.filter(
is_active=True,
local=True, # we only create feeds for users of this instance
).exclude( # not blocked
Q(id__in=book_list.user.blocks.all()) | Q(blocks=book_list.user)
)
group = book_list.group
# only visible to the poster and mentioned users
if book_list.privacy == "direct":
if group:
audience = audience.filter(
Q(id=book_list.user.id) # if the user is the post's author
| ~Q(groups=group.memberships) # if the user is in the group
)
else:
audience = audience.filter(
Q(id=book_list.user.id) # if the user is the post's author
)
# only visible to the poster's followers and tagged users
elif book_list.privacy == "followers":
if group:
audience = audience.filter(
Q(id=book_list.user.id) # if the user is the list's owner
| Q(following=book_list.user) # if the user is following the pwmer
# if a user is in the group
| Q(memberships__group__id=book_list.group.id)
)
else:
audience = audience.filter(
Q(id=book_list.user.id) # if the user is the list's owner
| Q(following=book_list.user) # if the user is following the pwmer
)
return audience.distinct()
def get_stores_for_object(self, obj):
return [self.stream_id(u) for u in self.get_audience(obj)]
def get_lists_for_user(self, user): # pylint: disable=no-self-use
"""given a user, what lists should they see on this stream"""
return models.List.privacy_filter(
user,
privacy_levels=["public", "followers"],
)
def get_objects_for_store(self, store):
user = models.User.objects.get(id=store.split("-")[0])
return self.get_lists_for_user(user)
@receiver(signals.post_save, sender=models.List)
# pylint: disable=unused-argument
def add_list_on_create(sender, instance, created, *args, **kwargs):
"""add newly created lists streamsstreams"""
if not created:
return
# when creating new things, gotta wait on the transaction
transaction.on_commit(lambda: add_list_on_create_command(instance.id))
@receiver(signals.post_delete, sender=models.List)
# pylint: disable=unused-argument
def remove_list_on_delete(sender, instance, *args, **kwargs):
"""remove deleted lists to streams"""
remove_list_task.delay(instance.id)
def add_list_on_create_command(instance_id):
"""runs this code only after the database commit completes"""
add_list_task.delay(instance_id)
@receiver(signals.post_save, sender=models.UserFollows)
# pylint: disable=unused-argument
def add_lists_on_follow(sender, instance, created, *args, **kwargs):
"""add a newly followed user's lists to feeds"""
if not created or not instance.user_subject.local:
return
add_user_lists_task.delay(instance.user_subject.id, instance.user_object.id)
@receiver(signals.post_delete, sender=models.UserFollows)
# pylint: disable=unused-argument
def remove_lists_on_unfollow(sender, instance, *args, **kwargs):
"""remove lists from a feed on unfollow"""
if not instance.user_subject.local:
return
# remove all but public lists
remove_user_lists_task.delay(
instance.user_subject.id, instance.user_object.id, exclude_privacy="public"
)
@receiver(signals.post_save, sender=models.UserBlocks)
# pylint: disable=unused-argument
def remove_lists_on_block(sender, instance, *args, **kwargs):
"""remove lists from all feeds on block"""
# blocks apply ot all feeds
if instance.user_subject.local:
remove_user_lists_task.delay(instance.user_subject.id, instance.user_object.id)
# and in both directions
if instance.user_object.local:
remove_user_lists_task.delay(instance.user_object.id, instance.user_subject.id)
@receiver(signals.post_delete, sender=models.UserBlocks)
# pylint: disable=unused-argument
def add_lists_on_unblock(sender, instance, *args, **kwargs):
"""add lists back to all feeds on unblock"""
# make sure there isn't a block in the other direction
if models.UserBlocks.objects.filter(
user_subject=instance.user_object,
user_object=instance.user_subject,
).exists():
return
# add lists back to streams with lists from anyone
if instance.user_subject.local:
add_user_lists_task.delay(
instance.user_subject.id,
instance.user_object.id,
)
# add lists back to streams with lists from anyone
if instance.user_object.local:
add_user_lists_task.delay(
instance.user_object.id,
instance.user_subject.id,
)
@receiver(signals.post_save, sender=models.User)
# pylint: disable=unused-argument
def populate_lists_on_account_create(sender, instance, created, *args, **kwargs):
"""build a user's feeds when they join"""
if not created or not instance.local:
return
transaction.on_commit(lambda: add_list_on_account_create_command(instance.id))
def add_list_on_account_create_command(user_id):
"""wait for the transaction to complete"""
populate_lists_task.delay(user_id)
# ---- TASKS
@app.task(queue=MEDIUM)
def populate_lists_task(user_id):
"""background task for populating an empty list stream"""
user = models.User.objects.get(id=user_id)
ListsStream().populate_lists(user)
@app.task(queue=MEDIUM)
def remove_list_task(list_id):
"""remove a list from any stream it might be in"""
stores = models.User.objects.filter(local=True, is_active=True).values_list(
"id", flat=True
)
# delete for every store
stores = [ListsStream().stream_id(idx) for idx in stores]
ListsStream().remove_object_from_related_stores(list_id, stores=stores)
@app.task(queue=HIGH)
def add_list_task(list_id):
"""add a list to any stream it should be in"""
book_list = models.List.objects.get(id=list_id)
ListsStream().add_list(book_list)
@app.task(queue=MEDIUM)
def remove_user_lists_task(viewer_id, user_id, exclude_privacy=None):
"""remove all lists by a user from a viewer's stream"""
viewer = models.User.objects.get(id=viewer_id)
user = models.User.objects.get(id=user_id)
ListsStream().remove_user_lists(viewer, user, exclude_privacy=exclude_privacy)
@app.task(queue=MEDIUM)
def add_user_lists_task(viewer_id, user_id):
"""add all lists by a user to a viewer's stream"""
viewer = models.User.objects.get(id=viewer_id)
user = models.User.objects.get(id=user_id)
ListsStream().add_user_lists(viewer, user)

View file

@ -1,23 +0,0 @@
""" Get your admin code to allow install """
from django.core.management.base import BaseCommand
from bookwyrm import models
def get_admin_code():
"""get that code"""
return models.SiteSettings.objects.get().admin_code
class Command(BaseCommand):
"""command-line options"""
help = "Gets admin code for configuring BookWyrm"
# pylint: disable=unused-argument
def handle(self, *args, **options):
"""execute init"""
self.stdout.write("*******************************************")
self.stdout.write("Use this code to create your admin account:")
self.stdout.write(get_admin_code())
self.stdout.write("*******************************************")

View file

@ -5,10 +5,7 @@ import redis
from bookwyrm import settings from bookwyrm import settings
r = redis.Redis( r = redis.Redis(
host=settings.REDIS_ACTIVITY_HOST, host=settings.REDIS_ACTIVITY_HOST, port=settings.REDIS_ACTIVITY_PORT, db=0
port=settings.REDIS_ACTIVITY_PORT,
password=settings.REDIS_ACTIVITY_PASSWORD,
db=settings.REDIS_ACTIVITY_DB_INDEX,
) )

View file

@ -10,9 +10,7 @@ class Command(BaseCommand):
help = "Generate preview images" help = "Generate preview images"
# pylint: disable=no-self-use
def add_arguments(self, parser): def add_arguments(self, parser):
"""options for how the command is run"""
parser.add_argument( parser.add_argument(
"--all", "--all",
"-a", "-a",
@ -40,7 +38,6 @@ class Command(BaseCommand):
preview_images.generate_site_preview_image_task.delay() preview_images.generate_site_preview_image_task.delay()
self.stdout.write(" OK 🖼") self.stdout.write(" OK 🖼")
# pylint: disable=consider-using-f-string
if options["all"]: if options["all"]:
# Users # Users
users = models.User.objects.filter( users = models.User.objects.filter(
@ -56,17 +53,12 @@ class Command(BaseCommand):
self.stdout.write(" OK 🖼") self.stdout.write(" OK 🖼")
# Books # Books
book_ids = ( books = models.Book.objects.select_subclasses().filter()
models.Book.objects.select_subclasses()
.filter()
.values_list("id", flat=True)
)
self.stdout.write( self.stdout.write(
" → Book preview images ({}): ".format(len(book_ids)), ending="" " → Book preview images ({}): ".format(len(books)), ending=""
) )
for book_id in book_ids: for book in books:
preview_images.generate_edition_preview_image_task.delay(book_id) preview_images.generate_edition_preview_image_task.delay(book.id)
self.stdout.write(".", ending="") self.stdout.write(".", ending="")
self.stdout.write(" OK 🖼") self.stdout.write(" OK 🖼")

View file

@ -3,7 +3,7 @@ from django.core.management.base import BaseCommand
from django.contrib.auth.models import Group, Permission from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from bookwyrm import models from bookwyrm.models import Connector, FederatedServer, SiteSettings, User
def init_groups(): def init_groups():
@ -19,7 +19,9 @@ def init_permissions():
{ {
"codename": "edit_instance_settings", "codename": "edit_instance_settings",
"name": "change the instance info", "name": "change the instance info",
"groups": ["admin"], "groups": [
"admin",
],
}, },
{ {
"codename": "set_user_group", "codename": "set_user_group",
@ -53,7 +55,7 @@ def init_permissions():
}, },
] ]
content_type = ContentType.objects.get_for_model(models.User) content_type = ContentType.objects.get_for_model(User)
for permission in permissions: for permission in permissions:
permission_obj = Permission.objects.create( permission_obj = Permission.objects.create(
codename=permission["codename"], codename=permission["codename"],
@ -64,12 +66,15 @@ def init_permissions():
for group_name in permission["groups"]: for group_name in permission["groups"]:
Group.objects.get(name=group_name).permissions.add(permission_obj) Group.objects.get(name=group_name).permissions.add(permission_obj)
# while the groups and permissions shouldn't be changed because the code
# depends on them, what permissions go with what groups should be editable
def init_connectors(): def init_connectors():
"""access book data sources""" """access book data sources"""
models.Connector.objects.create( Connector.objects.create(
identifier="bookwyrm.social", identifier="bookwyrm.social",
name="Bookwyrm.social", name="BookWyrm dot Social",
connector_file="bookwyrm_connector", connector_file="bookwyrm_connector",
base_url="https://bookwyrm.social", base_url="https://bookwyrm.social",
books_url="https://bookwyrm.social/book", books_url="https://bookwyrm.social/book",
@ -79,8 +84,7 @@ def init_connectors():
priority=2, priority=2,
) )
# pylint: disable=line-too-long Connector.objects.create(
models.Connector.objects.create(
identifier="inventaire.io", identifier="inventaire.io",
name="Inventaire", name="Inventaire",
connector_file="inventaire", connector_file="inventaire",
@ -89,10 +93,10 @@ def init_connectors():
covers_url="https://inventaire.io", covers_url="https://inventaire.io",
search_url="https://inventaire.io/api/search?types=works&types=works&search=", search_url="https://inventaire.io/api/search?types=works&types=works&search=",
isbn_search_url="https://inventaire.io/api/entities?action=by-uris&uris=isbn%3A", isbn_search_url="https://inventaire.io/api/entities?action=by-uris&uris=isbn%3A",
priority=1, priority=3,
) )
models.Connector.objects.create( Connector.objects.create(
identifier="openlibrary.org", identifier="openlibrary.org",
name="OpenLibrary", name="OpenLibrary",
connector_file="openlibrary", connector_file="openlibrary",
@ -101,71 +105,34 @@ def init_connectors():
covers_url="https://covers.openlibrary.org", covers_url="https://covers.openlibrary.org",
search_url="https://openlibrary.org/search?q=", search_url="https://openlibrary.org/search?q=",
isbn_search_url="https://openlibrary.org/api/books?jscmd=data&format=json&bibkeys=ISBN:", isbn_search_url="https://openlibrary.org/api/books?jscmd=data&format=json&bibkeys=ISBN:",
priority=1, priority=3,
)
def init_federated_servers():
"""big no to nazis"""
built_in_blocks = ["gab.ai", "gab.com"]
for server in built_in_blocks:
FederatedServer.objects.create(
server_name=server,
status="blocked",
) )
def init_settings(): def init_settings():
"""info about the instance""" """info about the instance"""
models.SiteSettings.objects.create( SiteSettings.objects.create(
support_link="https://www.patreon.com/bookwyrm", support_link="https://www.patreon.com/bookwyrm",
support_title="Patreon", support_title="Patreon",
install_mode=True,
) )
def init_link_domains():
"""safe book links"""
domains = [
("standardebooks.org", "Standard EBooks"),
("www.gutenberg.org", "Project Gutenberg"),
("archive.org", "Internet Archive"),
("openlibrary.org", "Open Library"),
("theanarchistlibrary.org", "The Anarchist Library"),
]
for domain, name in domains:
models.LinkDomain.objects.create(
domain=domain,
name=name,
status="approved",
)
# pylint: disable=no-self-use
# pylint: disable=unused-argument
class Command(BaseCommand): class Command(BaseCommand):
"""command-line options"""
help = "Initializes the database with starter data" help = "Initializes the database with starter data"
def add_arguments(self, parser):
"""specify which function to run"""
parser.add_argument(
"--limit",
default=None,
help="Limit init to specific table",
)
def handle(self, *args, **options): def handle(self, *args, **options):
"""execute init"""
limit = options.get("limit")
tables = [
"group",
"permission",
"connector",
"settings",
"linkdomain",
]
if limit and limit not in tables:
raise Exception("Invalid table limit:", limit)
if not limit or limit == "group":
init_groups() init_groups()
if not limit or limit == "permission":
init_permissions() init_permissions()
if not limit or limit == "connector":
init_connectors() init_connectors()
if not limit or limit == "settings": init_federated_servers()
init_settings() init_settings()
if not limit or limit == "linkdomain":
init_link_domains()

View file

@ -1,54 +0,0 @@
""" Get your admin code to allow install """
from django.core.management.base import BaseCommand
from bookwyrm import models
from bookwyrm.settings import VERSION
# pylint: disable=no-self-use
class Command(BaseCommand):
"""command-line options"""
help = "What version is this?"
def add_arguments(self, parser):
"""specify which function to run"""
parser.add_argument(
"--current",
action="store_true",
help="Version stored in database",
)
parser.add_argument(
"--target",
action="store_true",
help="Version stored in settings",
)
parser.add_argument(
"--update",
action="store_true",
help="Update database version",
)
# pylint: disable=unused-argument
def handle(self, *args, **options):
"""execute init"""
site = models.SiteSettings.objects.get()
current = site.version or "0.0.1"
target = VERSION
if options.get("current"):
print(current)
return
if options.get("target"):
print(target)
return
if options.get("update"):
site.version = target
site.save()
return
if current != target:
print(f"{current}/{target}")
else:
print(current)

View file

@ -1,28 +0,0 @@
""" Re-create list streams """
from django.core.management.base import BaseCommand
from bookwyrm import lists_stream, models
def populate_lists_streams():
"""build all the lists streams for all the users"""
print("Populating lists streams")
users = models.User.objects.filter(
local=True,
is_active=True,
).order_by("-last_active_date")
print("This may take a long time! Please be patient.")
for user in users:
print(".", end="")
lists_stream.populate_lists_task.delay(user.id)
print("\nAll done, thank you for your patience!")
class Command(BaseCommand):
"""start all over with lists streams"""
help = "Populate list streams for all users"
# pylint: disable=no-self-use,unused-argument
def handle(self, *args, **options):
"""run feed builder"""
populate_lists_streams()

View file

@ -1,20 +1,18 @@
""" Re-create user streams """ """ Re-create user streams """
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from bookwyrm import activitystreams, lists_stream, models from bookwyrm import activitystreams, models
def populate_streams(stream=None): def populate_streams(stream=None):
"""build all the streams for all the users""" """build all the streams for all the users"""
streams = [stream] if stream else activitystreams.streams.keys() streams = [stream] if stream else activitystreams.streams.keys()
print("Populating streams", streams) print("Populations streams", streams)
users = models.User.objects.filter( users = models.User.objects.filter(
local=True, local=True,
is_active=True, is_active=True,
).order_by("-last_active_date") ).order_by("-last_active_date")
print("This may take a long time! Please be patient.") print("This may take a long time! Please be patient.")
for user in users: for user in users:
print(".", end="")
lists_stream.populate_lists_task.delay(user.id)
for stream_key in streams: for stream_key in streams:
print(".", end="") print(".", end="")
activitystreams.populate_stream_task.delay(stream_key, user.id) activitystreams.populate_stream_task.delay(stream_key, user.id)

View file

@ -1,31 +0,0 @@
# Generated by Django 3.2.5 on 2021-10-11 16:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0106_user_preferred_language"),
]
operations = [
migrations.AlterField(
model_name="user",
name="preferred_language",
field=models.CharField(
blank=True,
choices=[
("en-us", "English"),
("de-de", "Deutsch (German)"),
("es", "Español (Spanish)"),
("fr-fr", "Français (French)"),
("pt-br", "Português - Brasil (Brazilian Portugues)"),
("zh-hans", "简体中文 (Simplified Chinese)"),
("zh-hant", "繁體中文 (Traditional Chinese)"),
],
max_length=255,
null=True,
),
),
]

View file

@ -1,871 +0,0 @@
# Generated by Django 3.2.5 on 2021-10-16 06:39
import bookwyrm.models.fields
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0106_user_preferred_language"),
]
operations = [
migrations.CreateModel(
name="Group",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created_date", models.DateTimeField(auto_now_add=True)),
("updated_date", models.DateTimeField(auto_now=True)),
(
"remote_id",
bookwyrm.models.fields.RemoteIdField(
max_length=255,
null=True,
validators=[bookwyrm.models.fields.validate_remote_id],
),
),
("name", bookwyrm.models.fields.CharField(max_length=100)),
(
"description",
bookwyrm.models.fields.TextField(blank=True, null=True),
),
(
"privacy",
bookwyrm.models.fields.PrivacyField(
choices=[
("public", "Public"),
("unlisted", "Unlisted"),
("followers", "Followers"),
("direct", "Direct"),
],
default="public",
max_length=255,
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="GroupMember",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created_date", models.DateTimeField(auto_now_add=True)),
("updated_date", models.DateTimeField(auto_now=True)),
],
),
migrations.CreateModel(
name="GroupMemberInvitation",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created_date", models.DateTimeField(auto_now_add=True)),
],
),
migrations.RemoveConstraint(
model_name="notification",
name="notification_type_valid",
),
migrations.AlterField(
model_name="list",
name="curation",
field=bookwyrm.models.fields.CharField(
choices=[
("closed", "Closed"),
("open", "Open"),
("curated", "Curated"),
("group", "Group"),
],
default="closed",
max_length=255,
),
),
migrations.AlterField(
model_name="notification",
name="notification_type",
field=models.CharField(
choices=[
("FAVORITE", "Favorite"),
("REPLY", "Reply"),
("MENTION", "Mention"),
("TAG", "Tag"),
("FOLLOW", "Follow"),
("FOLLOW_REQUEST", "Follow Request"),
("BOOST", "Boost"),
("IMPORT", "Import"),
("ADD", "Add"),
("REPORT", "Report"),
("INVITE", "Invite"),
("ACCEPT", "Accept"),
("JOIN", "Join"),
("LEAVE", "Leave"),
("REMOVE", "Remove"),
],
max_length=255,
),
),
migrations.AlterField(
model_name="user",
name="preferred_language",
field=models.CharField(
blank=True,
choices=[
("en-us", "English"),
("de-de", "Deutsch (German)"),
("es", "Español (Spanish)"),
("fr-fr", "Français (French)"),
("zh-hans", "简体中文 (Simplified Chinese)"),
("zh-hant", "繁體中文 (Traditional Chinese)"),
],
max_length=255,
null=True,
),
),
migrations.AlterField(
model_name="user",
name="preferred_timezone",
field=models.CharField(
choices=[
("Africa/Abidjan", "Africa/Abidjan"),
("Africa/Accra", "Africa/Accra"),
("Africa/Addis_Ababa", "Africa/Addis_Ababa"),
("Africa/Algiers", "Africa/Algiers"),
("Africa/Asmara", "Africa/Asmara"),
("Africa/Asmera", "Africa/Asmera"),
("Africa/Bamako", "Africa/Bamako"),
("Africa/Bangui", "Africa/Bangui"),
("Africa/Banjul", "Africa/Banjul"),
("Africa/Bissau", "Africa/Bissau"),
("Africa/Blantyre", "Africa/Blantyre"),
("Africa/Brazzaville", "Africa/Brazzaville"),
("Africa/Bujumbura", "Africa/Bujumbura"),
("Africa/Cairo", "Africa/Cairo"),
("Africa/Casablanca", "Africa/Casablanca"),
("Africa/Ceuta", "Africa/Ceuta"),
("Africa/Conakry", "Africa/Conakry"),
("Africa/Dakar", "Africa/Dakar"),
("Africa/Dar_es_Salaam", "Africa/Dar_es_Salaam"),
("Africa/Djibouti", "Africa/Djibouti"),
("Africa/Douala", "Africa/Douala"),
("Africa/El_Aaiun", "Africa/El_Aaiun"),
("Africa/Freetown", "Africa/Freetown"),
("Africa/Gaborone", "Africa/Gaborone"),
("Africa/Harare", "Africa/Harare"),
("Africa/Johannesburg", "Africa/Johannesburg"),
("Africa/Juba", "Africa/Juba"),
("Africa/Kampala", "Africa/Kampala"),
("Africa/Khartoum", "Africa/Khartoum"),
("Africa/Kigali", "Africa/Kigali"),
("Africa/Kinshasa", "Africa/Kinshasa"),
("Africa/Lagos", "Africa/Lagos"),
("Africa/Libreville", "Africa/Libreville"),
("Africa/Lome", "Africa/Lome"),
("Africa/Luanda", "Africa/Luanda"),
("Africa/Lubumbashi", "Africa/Lubumbashi"),
("Africa/Lusaka", "Africa/Lusaka"),
("Africa/Malabo", "Africa/Malabo"),
("Africa/Maputo", "Africa/Maputo"),
("Africa/Maseru", "Africa/Maseru"),
("Africa/Mbabane", "Africa/Mbabane"),
("Africa/Mogadishu", "Africa/Mogadishu"),
("Africa/Monrovia", "Africa/Monrovia"),
("Africa/Nairobi", "Africa/Nairobi"),
("Africa/Ndjamena", "Africa/Ndjamena"),
("Africa/Niamey", "Africa/Niamey"),
("Africa/Nouakchott", "Africa/Nouakchott"),
("Africa/Ouagadougou", "Africa/Ouagadougou"),
("Africa/Porto-Novo", "Africa/Porto-Novo"),
("Africa/Sao_Tome", "Africa/Sao_Tome"),
("Africa/Timbuktu", "Africa/Timbuktu"),
("Africa/Tripoli", "Africa/Tripoli"),
("Africa/Tunis", "Africa/Tunis"),
("Africa/Windhoek", "Africa/Windhoek"),
("America/Adak", "America/Adak"),
("America/Anchorage", "America/Anchorage"),
("America/Anguilla", "America/Anguilla"),
("America/Antigua", "America/Antigua"),
("America/Araguaina", "America/Araguaina"),
(
"America/Argentina/Buenos_Aires",
"America/Argentina/Buenos_Aires",
),
("America/Argentina/Catamarca", "America/Argentina/Catamarca"),
(
"America/Argentina/ComodRivadavia",
"America/Argentina/ComodRivadavia",
),
("America/Argentina/Cordoba", "America/Argentina/Cordoba"),
("America/Argentina/Jujuy", "America/Argentina/Jujuy"),
("America/Argentina/La_Rioja", "America/Argentina/La_Rioja"),
("America/Argentina/Mendoza", "America/Argentina/Mendoza"),
(
"America/Argentina/Rio_Gallegos",
"America/Argentina/Rio_Gallegos",
),
("America/Argentina/Salta", "America/Argentina/Salta"),
("America/Argentina/San_Juan", "America/Argentina/San_Juan"),
("America/Argentina/San_Luis", "America/Argentina/San_Luis"),
("America/Argentina/Tucuman", "America/Argentina/Tucuman"),
("America/Argentina/Ushuaia", "America/Argentina/Ushuaia"),
("America/Aruba", "America/Aruba"),
("America/Asuncion", "America/Asuncion"),
("America/Atikokan", "America/Atikokan"),
("America/Atka", "America/Atka"),
("America/Bahia", "America/Bahia"),
("America/Bahia_Banderas", "America/Bahia_Banderas"),
("America/Barbados", "America/Barbados"),
("America/Belem", "America/Belem"),
("America/Belize", "America/Belize"),
("America/Blanc-Sablon", "America/Blanc-Sablon"),
("America/Boa_Vista", "America/Boa_Vista"),
("America/Bogota", "America/Bogota"),
("America/Boise", "America/Boise"),
("America/Buenos_Aires", "America/Buenos_Aires"),
("America/Cambridge_Bay", "America/Cambridge_Bay"),
("America/Campo_Grande", "America/Campo_Grande"),
("America/Cancun", "America/Cancun"),
("America/Caracas", "America/Caracas"),
("America/Catamarca", "America/Catamarca"),
("America/Cayenne", "America/Cayenne"),
("America/Cayman", "America/Cayman"),
("America/Chicago", "America/Chicago"),
("America/Chihuahua", "America/Chihuahua"),
("America/Coral_Harbour", "America/Coral_Harbour"),
("America/Cordoba", "America/Cordoba"),
("America/Costa_Rica", "America/Costa_Rica"),
("America/Creston", "America/Creston"),
("America/Cuiaba", "America/Cuiaba"),
("America/Curacao", "America/Curacao"),
("America/Danmarkshavn", "America/Danmarkshavn"),
("America/Dawson", "America/Dawson"),
("America/Dawson_Creek", "America/Dawson_Creek"),
("America/Denver", "America/Denver"),
("America/Detroit", "America/Detroit"),
("America/Dominica", "America/Dominica"),
("America/Edmonton", "America/Edmonton"),
("America/Eirunepe", "America/Eirunepe"),
("America/El_Salvador", "America/El_Salvador"),
("America/Ensenada", "America/Ensenada"),
("America/Fort_Nelson", "America/Fort_Nelson"),
("America/Fort_Wayne", "America/Fort_Wayne"),
("America/Fortaleza", "America/Fortaleza"),
("America/Glace_Bay", "America/Glace_Bay"),
("America/Godthab", "America/Godthab"),
("America/Goose_Bay", "America/Goose_Bay"),
("America/Grand_Turk", "America/Grand_Turk"),
("America/Grenada", "America/Grenada"),
("America/Guadeloupe", "America/Guadeloupe"),
("America/Guatemala", "America/Guatemala"),
("America/Guayaquil", "America/Guayaquil"),
("America/Guyana", "America/Guyana"),
("America/Halifax", "America/Halifax"),
("America/Havana", "America/Havana"),
("America/Hermosillo", "America/Hermosillo"),
("America/Indiana/Indianapolis", "America/Indiana/Indianapolis"),
("America/Indiana/Knox", "America/Indiana/Knox"),
("America/Indiana/Marengo", "America/Indiana/Marengo"),
("America/Indiana/Petersburg", "America/Indiana/Petersburg"),
("America/Indiana/Tell_City", "America/Indiana/Tell_City"),
("America/Indiana/Vevay", "America/Indiana/Vevay"),
("America/Indiana/Vincennes", "America/Indiana/Vincennes"),
("America/Indiana/Winamac", "America/Indiana/Winamac"),
("America/Indianapolis", "America/Indianapolis"),
("America/Inuvik", "America/Inuvik"),
("America/Iqaluit", "America/Iqaluit"),
("America/Jamaica", "America/Jamaica"),
("America/Jujuy", "America/Jujuy"),
("America/Juneau", "America/Juneau"),
("America/Kentucky/Louisville", "America/Kentucky/Louisville"),
("America/Kentucky/Monticello", "America/Kentucky/Monticello"),
("America/Knox_IN", "America/Knox_IN"),
("America/Kralendijk", "America/Kralendijk"),
("America/La_Paz", "America/La_Paz"),
("America/Lima", "America/Lima"),
("America/Los_Angeles", "America/Los_Angeles"),
("America/Louisville", "America/Louisville"),
("America/Lower_Princes", "America/Lower_Princes"),
("America/Maceio", "America/Maceio"),
("America/Managua", "America/Managua"),
("America/Manaus", "America/Manaus"),
("America/Marigot", "America/Marigot"),
("America/Martinique", "America/Martinique"),
("America/Matamoros", "America/Matamoros"),
("America/Mazatlan", "America/Mazatlan"),
("America/Mendoza", "America/Mendoza"),
("America/Menominee", "America/Menominee"),
("America/Merida", "America/Merida"),
("America/Metlakatla", "America/Metlakatla"),
("America/Mexico_City", "America/Mexico_City"),
("America/Miquelon", "America/Miquelon"),
("America/Moncton", "America/Moncton"),
("America/Monterrey", "America/Monterrey"),
("America/Montevideo", "America/Montevideo"),
("America/Montreal", "America/Montreal"),
("America/Montserrat", "America/Montserrat"),
("America/Nassau", "America/Nassau"),
("America/New_York", "America/New_York"),
("America/Nipigon", "America/Nipigon"),
("America/Nome", "America/Nome"),
("America/Noronha", "America/Noronha"),
("America/North_Dakota/Beulah", "America/North_Dakota/Beulah"),
("America/North_Dakota/Center", "America/North_Dakota/Center"),
(
"America/North_Dakota/New_Salem",
"America/North_Dakota/New_Salem",
),
("America/Nuuk", "America/Nuuk"),
("America/Ojinaga", "America/Ojinaga"),
("America/Panama", "America/Panama"),
("America/Pangnirtung", "America/Pangnirtung"),
("America/Paramaribo", "America/Paramaribo"),
("America/Phoenix", "America/Phoenix"),
("America/Port-au-Prince", "America/Port-au-Prince"),
("America/Port_of_Spain", "America/Port_of_Spain"),
("America/Porto_Acre", "America/Porto_Acre"),
("America/Porto_Velho", "America/Porto_Velho"),
("America/Puerto_Rico", "America/Puerto_Rico"),
("America/Punta_Arenas", "America/Punta_Arenas"),
("America/Rainy_River", "America/Rainy_River"),
("America/Rankin_Inlet", "America/Rankin_Inlet"),
("America/Recife", "America/Recife"),
("America/Regina", "America/Regina"),
("America/Resolute", "America/Resolute"),
("America/Rio_Branco", "America/Rio_Branco"),
("America/Rosario", "America/Rosario"),
("America/Santa_Isabel", "America/Santa_Isabel"),
("America/Santarem", "America/Santarem"),
("America/Santiago", "America/Santiago"),
("America/Santo_Domingo", "America/Santo_Domingo"),
("America/Sao_Paulo", "America/Sao_Paulo"),
("America/Scoresbysund", "America/Scoresbysund"),
("America/Shiprock", "America/Shiprock"),
("America/Sitka", "America/Sitka"),
("America/St_Barthelemy", "America/St_Barthelemy"),
("America/St_Johns", "America/St_Johns"),
("America/St_Kitts", "America/St_Kitts"),
("America/St_Lucia", "America/St_Lucia"),
("America/St_Thomas", "America/St_Thomas"),
("America/St_Vincent", "America/St_Vincent"),
("America/Swift_Current", "America/Swift_Current"),
("America/Tegucigalpa", "America/Tegucigalpa"),
("America/Thule", "America/Thule"),
("America/Thunder_Bay", "America/Thunder_Bay"),
("America/Tijuana", "America/Tijuana"),
("America/Toronto", "America/Toronto"),
("America/Tortola", "America/Tortola"),
("America/Vancouver", "America/Vancouver"),
("America/Virgin", "America/Virgin"),
("America/Whitehorse", "America/Whitehorse"),
("America/Winnipeg", "America/Winnipeg"),
("America/Yakutat", "America/Yakutat"),
("America/Yellowknife", "America/Yellowknife"),
("Antarctica/Casey", "Antarctica/Casey"),
("Antarctica/Davis", "Antarctica/Davis"),
("Antarctica/DumontDUrville", "Antarctica/DumontDUrville"),
("Antarctica/Macquarie", "Antarctica/Macquarie"),
("Antarctica/Mawson", "Antarctica/Mawson"),
("Antarctica/McMurdo", "Antarctica/McMurdo"),
("Antarctica/Palmer", "Antarctica/Palmer"),
("Antarctica/Rothera", "Antarctica/Rothera"),
("Antarctica/South_Pole", "Antarctica/South_Pole"),
("Antarctica/Syowa", "Antarctica/Syowa"),
("Antarctica/Troll", "Antarctica/Troll"),
("Antarctica/Vostok", "Antarctica/Vostok"),
("Arctic/Longyearbyen", "Arctic/Longyearbyen"),
("Asia/Aden", "Asia/Aden"),
("Asia/Almaty", "Asia/Almaty"),
("Asia/Amman", "Asia/Amman"),
("Asia/Anadyr", "Asia/Anadyr"),
("Asia/Aqtau", "Asia/Aqtau"),
("Asia/Aqtobe", "Asia/Aqtobe"),
("Asia/Ashgabat", "Asia/Ashgabat"),
("Asia/Ashkhabad", "Asia/Ashkhabad"),
("Asia/Atyrau", "Asia/Atyrau"),
("Asia/Baghdad", "Asia/Baghdad"),
("Asia/Bahrain", "Asia/Bahrain"),
("Asia/Baku", "Asia/Baku"),
("Asia/Bangkok", "Asia/Bangkok"),
("Asia/Barnaul", "Asia/Barnaul"),
("Asia/Beirut", "Asia/Beirut"),
("Asia/Bishkek", "Asia/Bishkek"),
("Asia/Brunei", "Asia/Brunei"),
("Asia/Calcutta", "Asia/Calcutta"),
("Asia/Chita", "Asia/Chita"),
("Asia/Choibalsan", "Asia/Choibalsan"),
("Asia/Chongqing", "Asia/Chongqing"),
("Asia/Chungking", "Asia/Chungking"),
("Asia/Colombo", "Asia/Colombo"),
("Asia/Dacca", "Asia/Dacca"),
("Asia/Damascus", "Asia/Damascus"),
("Asia/Dhaka", "Asia/Dhaka"),
("Asia/Dili", "Asia/Dili"),
("Asia/Dubai", "Asia/Dubai"),
("Asia/Dushanbe", "Asia/Dushanbe"),
("Asia/Famagusta", "Asia/Famagusta"),
("Asia/Gaza", "Asia/Gaza"),
("Asia/Harbin", "Asia/Harbin"),
("Asia/Hebron", "Asia/Hebron"),
("Asia/Ho_Chi_Minh", "Asia/Ho_Chi_Minh"),
("Asia/Hong_Kong", "Asia/Hong_Kong"),
("Asia/Hovd", "Asia/Hovd"),
("Asia/Irkutsk", "Asia/Irkutsk"),
("Asia/Istanbul", "Asia/Istanbul"),
("Asia/Jakarta", "Asia/Jakarta"),
("Asia/Jayapura", "Asia/Jayapura"),
("Asia/Jerusalem", "Asia/Jerusalem"),
("Asia/Kabul", "Asia/Kabul"),
("Asia/Kamchatka", "Asia/Kamchatka"),
("Asia/Karachi", "Asia/Karachi"),
("Asia/Kashgar", "Asia/Kashgar"),
("Asia/Kathmandu", "Asia/Kathmandu"),
("Asia/Katmandu", "Asia/Katmandu"),
("Asia/Khandyga", "Asia/Khandyga"),
("Asia/Kolkata", "Asia/Kolkata"),
("Asia/Krasnoyarsk", "Asia/Krasnoyarsk"),
("Asia/Kuala_Lumpur", "Asia/Kuala_Lumpur"),
("Asia/Kuching", "Asia/Kuching"),
("Asia/Kuwait", "Asia/Kuwait"),
("Asia/Macao", "Asia/Macao"),
("Asia/Macau", "Asia/Macau"),
("Asia/Magadan", "Asia/Magadan"),
("Asia/Makassar", "Asia/Makassar"),
("Asia/Manila", "Asia/Manila"),
("Asia/Muscat", "Asia/Muscat"),
("Asia/Nicosia", "Asia/Nicosia"),
("Asia/Novokuznetsk", "Asia/Novokuznetsk"),
("Asia/Novosibirsk", "Asia/Novosibirsk"),
("Asia/Omsk", "Asia/Omsk"),
("Asia/Oral", "Asia/Oral"),
("Asia/Phnom_Penh", "Asia/Phnom_Penh"),
("Asia/Pontianak", "Asia/Pontianak"),
("Asia/Pyongyang", "Asia/Pyongyang"),
("Asia/Qatar", "Asia/Qatar"),
("Asia/Qostanay", "Asia/Qostanay"),
("Asia/Qyzylorda", "Asia/Qyzylorda"),
("Asia/Rangoon", "Asia/Rangoon"),
("Asia/Riyadh", "Asia/Riyadh"),
("Asia/Saigon", "Asia/Saigon"),
("Asia/Sakhalin", "Asia/Sakhalin"),
("Asia/Samarkand", "Asia/Samarkand"),
("Asia/Seoul", "Asia/Seoul"),
("Asia/Shanghai", "Asia/Shanghai"),
("Asia/Singapore", "Asia/Singapore"),
("Asia/Srednekolymsk", "Asia/Srednekolymsk"),
("Asia/Taipei", "Asia/Taipei"),
("Asia/Tashkent", "Asia/Tashkent"),
("Asia/Tbilisi", "Asia/Tbilisi"),
("Asia/Tehran", "Asia/Tehran"),
("Asia/Tel_Aviv", "Asia/Tel_Aviv"),
("Asia/Thimbu", "Asia/Thimbu"),
("Asia/Thimphu", "Asia/Thimphu"),
("Asia/Tokyo", "Asia/Tokyo"),
("Asia/Tomsk", "Asia/Tomsk"),
("Asia/Ujung_Pandang", "Asia/Ujung_Pandang"),
("Asia/Ulaanbaatar", "Asia/Ulaanbaatar"),
("Asia/Ulan_Bator", "Asia/Ulan_Bator"),
("Asia/Urumqi", "Asia/Urumqi"),
("Asia/Ust-Nera", "Asia/Ust-Nera"),
("Asia/Vientiane", "Asia/Vientiane"),
("Asia/Vladivostok", "Asia/Vladivostok"),
("Asia/Yakutsk", "Asia/Yakutsk"),
("Asia/Yangon", "Asia/Yangon"),
("Asia/Yekaterinburg", "Asia/Yekaterinburg"),
("Asia/Yerevan", "Asia/Yerevan"),
("Atlantic/Azores", "Atlantic/Azores"),
("Atlantic/Bermuda", "Atlantic/Bermuda"),
("Atlantic/Canary", "Atlantic/Canary"),
("Atlantic/Cape_Verde", "Atlantic/Cape_Verde"),
("Atlantic/Faeroe", "Atlantic/Faeroe"),
("Atlantic/Faroe", "Atlantic/Faroe"),
("Atlantic/Jan_Mayen", "Atlantic/Jan_Mayen"),
("Atlantic/Madeira", "Atlantic/Madeira"),
("Atlantic/Reykjavik", "Atlantic/Reykjavik"),
("Atlantic/South_Georgia", "Atlantic/South_Georgia"),
("Atlantic/St_Helena", "Atlantic/St_Helena"),
("Atlantic/Stanley", "Atlantic/Stanley"),
("Australia/ACT", "Australia/ACT"),
("Australia/Adelaide", "Australia/Adelaide"),
("Australia/Brisbane", "Australia/Brisbane"),
("Australia/Broken_Hill", "Australia/Broken_Hill"),
("Australia/Canberra", "Australia/Canberra"),
("Australia/Currie", "Australia/Currie"),
("Australia/Darwin", "Australia/Darwin"),
("Australia/Eucla", "Australia/Eucla"),
("Australia/Hobart", "Australia/Hobart"),
("Australia/LHI", "Australia/LHI"),
("Australia/Lindeman", "Australia/Lindeman"),
("Australia/Lord_Howe", "Australia/Lord_Howe"),
("Australia/Melbourne", "Australia/Melbourne"),
("Australia/NSW", "Australia/NSW"),
("Australia/North", "Australia/North"),
("Australia/Perth", "Australia/Perth"),
("Australia/Queensland", "Australia/Queensland"),
("Australia/South", "Australia/South"),
("Australia/Sydney", "Australia/Sydney"),
("Australia/Tasmania", "Australia/Tasmania"),
("Australia/Victoria", "Australia/Victoria"),
("Australia/West", "Australia/West"),
("Australia/Yancowinna", "Australia/Yancowinna"),
("Brazil/Acre", "Brazil/Acre"),
("Brazil/DeNoronha", "Brazil/DeNoronha"),
("Brazil/East", "Brazil/East"),
("Brazil/West", "Brazil/West"),
("CET", "CET"),
("CST6CDT", "CST6CDT"),
("Canada/Atlantic", "Canada/Atlantic"),
("Canada/Central", "Canada/Central"),
("Canada/Eastern", "Canada/Eastern"),
("Canada/Mountain", "Canada/Mountain"),
("Canada/Newfoundland", "Canada/Newfoundland"),
("Canada/Pacific", "Canada/Pacific"),
("Canada/Saskatchewan", "Canada/Saskatchewan"),
("Canada/Yukon", "Canada/Yukon"),
("Chile/Continental", "Chile/Continental"),
("Chile/EasterIsland", "Chile/EasterIsland"),
("Cuba", "Cuba"),
("EET", "EET"),
("EST", "EST"),
("EST5EDT", "EST5EDT"),
("Egypt", "Egypt"),
("Eire", "Eire"),
("Etc/GMT", "Etc/GMT"),
("Etc/GMT+0", "Etc/GMT+0"),
("Etc/GMT+1", "Etc/GMT+1"),
("Etc/GMT+10", "Etc/GMT+10"),
("Etc/GMT+11", "Etc/GMT+11"),
("Etc/GMT+12", "Etc/GMT+12"),
("Etc/GMT+2", "Etc/GMT+2"),
("Etc/GMT+3", "Etc/GMT+3"),
("Etc/GMT+4", "Etc/GMT+4"),
("Etc/GMT+5", "Etc/GMT+5"),
("Etc/GMT+6", "Etc/GMT+6"),
("Etc/GMT+7", "Etc/GMT+7"),
("Etc/GMT+8", "Etc/GMT+8"),
("Etc/GMT+9", "Etc/GMT+9"),
("Etc/GMT-0", "Etc/GMT-0"),
("Etc/GMT-1", "Etc/GMT-1"),
("Etc/GMT-10", "Etc/GMT-10"),
("Etc/GMT-11", "Etc/GMT-11"),
("Etc/GMT-12", "Etc/GMT-12"),
("Etc/GMT-13", "Etc/GMT-13"),
("Etc/GMT-14", "Etc/GMT-14"),
("Etc/GMT-2", "Etc/GMT-2"),
("Etc/GMT-3", "Etc/GMT-3"),
("Etc/GMT-4", "Etc/GMT-4"),
("Etc/GMT-5", "Etc/GMT-5"),
("Etc/GMT-6", "Etc/GMT-6"),
("Etc/GMT-7", "Etc/GMT-7"),
("Etc/GMT-8", "Etc/GMT-8"),
("Etc/GMT-9", "Etc/GMT-9"),
("Etc/GMT0", "Etc/GMT0"),
("Etc/Greenwich", "Etc/Greenwich"),
("Etc/UCT", "Etc/UCT"),
("Etc/UTC", "Etc/UTC"),
("Etc/Universal", "Etc/Universal"),
("Etc/Zulu", "Etc/Zulu"),
("Europe/Amsterdam", "Europe/Amsterdam"),
("Europe/Andorra", "Europe/Andorra"),
("Europe/Astrakhan", "Europe/Astrakhan"),
("Europe/Athens", "Europe/Athens"),
("Europe/Belfast", "Europe/Belfast"),
("Europe/Belgrade", "Europe/Belgrade"),
("Europe/Berlin", "Europe/Berlin"),
("Europe/Bratislava", "Europe/Bratislava"),
("Europe/Brussels", "Europe/Brussels"),
("Europe/Bucharest", "Europe/Bucharest"),
("Europe/Budapest", "Europe/Budapest"),
("Europe/Busingen", "Europe/Busingen"),
("Europe/Chisinau", "Europe/Chisinau"),
("Europe/Copenhagen", "Europe/Copenhagen"),
("Europe/Dublin", "Europe/Dublin"),
("Europe/Gibraltar", "Europe/Gibraltar"),
("Europe/Guernsey", "Europe/Guernsey"),
("Europe/Helsinki", "Europe/Helsinki"),
("Europe/Isle_of_Man", "Europe/Isle_of_Man"),
("Europe/Istanbul", "Europe/Istanbul"),
("Europe/Jersey", "Europe/Jersey"),
("Europe/Kaliningrad", "Europe/Kaliningrad"),
("Europe/Kiev", "Europe/Kiev"),
("Europe/Kirov", "Europe/Kirov"),
("Europe/Lisbon", "Europe/Lisbon"),
("Europe/Ljubljana", "Europe/Ljubljana"),
("Europe/London", "Europe/London"),
("Europe/Luxembourg", "Europe/Luxembourg"),
("Europe/Madrid", "Europe/Madrid"),
("Europe/Malta", "Europe/Malta"),
("Europe/Mariehamn", "Europe/Mariehamn"),
("Europe/Minsk", "Europe/Minsk"),
("Europe/Monaco", "Europe/Monaco"),
("Europe/Moscow", "Europe/Moscow"),
("Europe/Nicosia", "Europe/Nicosia"),
("Europe/Oslo", "Europe/Oslo"),
("Europe/Paris", "Europe/Paris"),
("Europe/Podgorica", "Europe/Podgorica"),
("Europe/Prague", "Europe/Prague"),
("Europe/Riga", "Europe/Riga"),
("Europe/Rome", "Europe/Rome"),
("Europe/Samara", "Europe/Samara"),
("Europe/San_Marino", "Europe/San_Marino"),
("Europe/Sarajevo", "Europe/Sarajevo"),
("Europe/Saratov", "Europe/Saratov"),
("Europe/Simferopol", "Europe/Simferopol"),
("Europe/Skopje", "Europe/Skopje"),
("Europe/Sofia", "Europe/Sofia"),
("Europe/Stockholm", "Europe/Stockholm"),
("Europe/Tallinn", "Europe/Tallinn"),
("Europe/Tirane", "Europe/Tirane"),
("Europe/Tiraspol", "Europe/Tiraspol"),
("Europe/Ulyanovsk", "Europe/Ulyanovsk"),
("Europe/Uzhgorod", "Europe/Uzhgorod"),
("Europe/Vaduz", "Europe/Vaduz"),
("Europe/Vatican", "Europe/Vatican"),
("Europe/Vienna", "Europe/Vienna"),
("Europe/Vilnius", "Europe/Vilnius"),
("Europe/Volgograd", "Europe/Volgograd"),
("Europe/Warsaw", "Europe/Warsaw"),
("Europe/Zagreb", "Europe/Zagreb"),
("Europe/Zaporozhye", "Europe/Zaporozhye"),
("Europe/Zurich", "Europe/Zurich"),
("GB", "GB"),
("GB-Eire", "GB-Eire"),
("GMT", "GMT"),
("GMT+0", "GMT+0"),
("GMT-0", "GMT-0"),
("GMT0", "GMT0"),
("Greenwich", "Greenwich"),
("HST", "HST"),
("Hongkong", "Hongkong"),
("Iceland", "Iceland"),
("Indian/Antananarivo", "Indian/Antananarivo"),
("Indian/Chagos", "Indian/Chagos"),
("Indian/Christmas", "Indian/Christmas"),
("Indian/Cocos", "Indian/Cocos"),
("Indian/Comoro", "Indian/Comoro"),
("Indian/Kerguelen", "Indian/Kerguelen"),
("Indian/Mahe", "Indian/Mahe"),
("Indian/Maldives", "Indian/Maldives"),
("Indian/Mauritius", "Indian/Mauritius"),
("Indian/Mayotte", "Indian/Mayotte"),
("Indian/Reunion", "Indian/Reunion"),
("Iran", "Iran"),
("Israel", "Israel"),
("Jamaica", "Jamaica"),
("Japan", "Japan"),
("Kwajalein", "Kwajalein"),
("Libya", "Libya"),
("MET", "MET"),
("MST", "MST"),
("MST7MDT", "MST7MDT"),
("Mexico/BajaNorte", "Mexico/BajaNorte"),
("Mexico/BajaSur", "Mexico/BajaSur"),
("Mexico/General", "Mexico/General"),
("NZ", "NZ"),
("NZ-CHAT", "NZ-CHAT"),
("Navajo", "Navajo"),
("PRC", "PRC"),
("PST8PDT", "PST8PDT"),
("Pacific/Apia", "Pacific/Apia"),
("Pacific/Auckland", "Pacific/Auckland"),
("Pacific/Bougainville", "Pacific/Bougainville"),
("Pacific/Chatham", "Pacific/Chatham"),
("Pacific/Chuuk", "Pacific/Chuuk"),
("Pacific/Easter", "Pacific/Easter"),
("Pacific/Efate", "Pacific/Efate"),
("Pacific/Enderbury", "Pacific/Enderbury"),
("Pacific/Fakaofo", "Pacific/Fakaofo"),
("Pacific/Fiji", "Pacific/Fiji"),
("Pacific/Funafuti", "Pacific/Funafuti"),
("Pacific/Galapagos", "Pacific/Galapagos"),
("Pacific/Gambier", "Pacific/Gambier"),
("Pacific/Guadalcanal", "Pacific/Guadalcanal"),
("Pacific/Guam", "Pacific/Guam"),
("Pacific/Honolulu", "Pacific/Honolulu"),
("Pacific/Johnston", "Pacific/Johnston"),
("Pacific/Kanton", "Pacific/Kanton"),
("Pacific/Kiritimati", "Pacific/Kiritimati"),
("Pacific/Kosrae", "Pacific/Kosrae"),
("Pacific/Kwajalein", "Pacific/Kwajalein"),
("Pacific/Majuro", "Pacific/Majuro"),
("Pacific/Marquesas", "Pacific/Marquesas"),
("Pacific/Midway", "Pacific/Midway"),
("Pacific/Nauru", "Pacific/Nauru"),
("Pacific/Niue", "Pacific/Niue"),
("Pacific/Norfolk", "Pacific/Norfolk"),
("Pacific/Noumea", "Pacific/Noumea"),
("Pacific/Pago_Pago", "Pacific/Pago_Pago"),
("Pacific/Palau", "Pacific/Palau"),
("Pacific/Pitcairn", "Pacific/Pitcairn"),
("Pacific/Pohnpei", "Pacific/Pohnpei"),
("Pacific/Ponape", "Pacific/Ponape"),
("Pacific/Port_Moresby", "Pacific/Port_Moresby"),
("Pacific/Rarotonga", "Pacific/Rarotonga"),
("Pacific/Saipan", "Pacific/Saipan"),
("Pacific/Samoa", "Pacific/Samoa"),
("Pacific/Tahiti", "Pacific/Tahiti"),
("Pacific/Tarawa", "Pacific/Tarawa"),
("Pacific/Tongatapu", "Pacific/Tongatapu"),
("Pacific/Truk", "Pacific/Truk"),
("Pacific/Wake", "Pacific/Wake"),
("Pacific/Wallis", "Pacific/Wallis"),
("Pacific/Yap", "Pacific/Yap"),
("Poland", "Poland"),
("Portugal", "Portugal"),
("ROC", "ROC"),
("ROK", "ROK"),
("Singapore", "Singapore"),
("Turkey", "Turkey"),
("UCT", "UCT"),
("US/Alaska", "US/Alaska"),
("US/Aleutian", "US/Aleutian"),
("US/Arizona", "US/Arizona"),
("US/Central", "US/Central"),
("US/East-Indiana", "US/East-Indiana"),
("US/Eastern", "US/Eastern"),
("US/Hawaii", "US/Hawaii"),
("US/Indiana-Starke", "US/Indiana-Starke"),
("US/Michigan", "US/Michigan"),
("US/Mountain", "US/Mountain"),
("US/Pacific", "US/Pacific"),
("US/Samoa", "US/Samoa"),
("UTC", "UTC"),
("Universal", "Universal"),
("W-SU", "W-SU"),
("WET", "WET"),
("Zulu", "Zulu"),
],
default="UTC",
max_length=255,
),
),
migrations.AddConstraint(
model_name="notification",
constraint=models.CheckConstraint(
check=models.Q(
(
"notification_type__in",
[
"FAVORITE",
"REPLY",
"MENTION",
"TAG",
"FOLLOW",
"FOLLOW_REQUEST",
"BOOST",
"IMPORT",
"ADD",
"REPORT",
"INVITE",
"ACCEPT",
"JOIN",
"LEAVE",
"REMOVE",
],
)
),
name="notification_type_valid",
),
),
migrations.AddField(
model_name="groupmemberinvitation",
name="group",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="user_invitations",
to="bookwyrm.group",
),
),
migrations.AddField(
model_name="groupmemberinvitation",
name="user",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="group_invitations",
to=settings.AUTH_USER_MODEL,
),
),
migrations.AddField(
model_name="groupmember",
name="group",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="memberships",
to="bookwyrm.group",
),
),
migrations.AddField(
model_name="groupmember",
name="user",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="memberships",
to=settings.AUTH_USER_MODEL,
),
),
migrations.AddField(
model_name="group",
name="user",
field=bookwyrm.models.fields.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
),
),
migrations.AddField(
model_name="list",
name="group",
field=models.ForeignKey(
blank=True,
default=None,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="bookwyrm.group",
),
),
migrations.AddField(
model_name="notification",
name="related_group",
field=models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="notifications",
to="bookwyrm.group",
),
),
migrations.AddConstraint(
model_name="groupmemberinvitation",
constraint=models.UniqueConstraint(
fields=("group", "user"), name="unique_invitation"
),
),
migrations.AddConstraint(
model_name="groupmember",
constraint=models.UniqueConstraint(
fields=("group", "user"), name="unique_membership"
),
),
]

View file

@ -1,31 +0,0 @@
# Generated by Django 3.2.5 on 2021-10-11 17:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0107_alter_user_preferred_language"),
]
operations = [
migrations.AlterField(
model_name="user",
name="preferred_language",
field=models.CharField(
blank=True,
choices=[
("en-us", "English"),
("de-de", "Deutsch (German)"),
("es-es", "Español (Spanish)"),
("fr-fr", "Français (French)"),
("pt-br", "Português - Brasil (Brazilian Portuguese)"),
("zh-hans", "简体中文 (Simplified Chinese)"),
("zh-hant", "繁體中文 (Traditional Chinese)"),
],
max_length=255,
null=True,
),
),
]

View file

@ -1,19 +0,0 @@
# Generated by Django 3.2.5 on 2021-10-15 15:54
import bookwyrm.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0108_alter_user_preferred_language"),
]
operations = [
migrations.AddField(
model_name="status",
name="edited_date",
field=bookwyrm.models.fields.DateTimeField(blank=True, null=True),
),
]

View file

@ -1,23 +0,0 @@
# Generated by Django 3.2.5 on 2021-10-15 17:34
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0109_status_edited_date"),
]
operations = [
migrations.AddField(
model_name="quotation",
name="raw_quote",
field=models.TextField(blank=True, null=True),
),
migrations.AddField(
model_name="status",
name="raw_content",
field=models.TextField(blank=True, null=True),
),
]

View file

@ -1,13 +0,0 @@
# Generated by Django 3.2.5 on 2021-10-16 19:30
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0107_auto_20211016_0639"),
("bookwyrm", "0110_auto_20211015_1734"),
]
operations = []

View file

@ -1,93 +0,0 @@
# Generated by Django 3.2.5 on 2021-10-22 08:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0111_merge_0107_auto_20211016_0639_0110_auto_20211015_1734"),
]
operations = [
migrations.RemoveConstraint(
model_name="notification",
name="notification_type_valid",
),
migrations.AlterField(
model_name="notification",
name="notification_type",
field=models.CharField(
choices=[
("FAVORITE", "Favorite"),
("REPLY", "Reply"),
("MENTION", "Mention"),
("TAG", "Tag"),
("FOLLOW", "Follow"),
("FOLLOW_REQUEST", "Follow Request"),
("BOOST", "Boost"),
("IMPORT", "Import"),
("ADD", "Add"),
("REPORT", "Report"),
("INVITE", "Invite"),
("ACCEPT", "Accept"),
("JOIN", "Join"),
("LEAVE", "Leave"),
("REMOVE", "Remove"),
("GROUP_PRIVACY", "Group Privacy"),
("GROUP_NAME", "Group Name"),
("GROUP_DESCRIPTION", "Group Description"),
],
max_length=255,
),
),
migrations.AlterField(
model_name="user",
name="preferred_language",
field=models.CharField(
blank=True,
choices=[
("en-us", "English"),
("de-de", "Deutsch (German)"),
("es-es", "Español (Spanish)"),
("fr-fr", "Français (French)"),
("pt-br", "Português - Brasil (Brazilian Portuguese)"),
("zh-hans", "简体中文 (Simplified Chinese)"),
("zh-hant", "繁體中文 (Traditional Chinese)"),
],
max_length=255,
null=True,
),
),
migrations.AddConstraint(
model_name="notification",
constraint=models.CheckConstraint(
check=models.Q(
(
"notification_type__in",
[
"FAVORITE",
"REPLY",
"MENTION",
"TAG",
"FOLLOW",
"FOLLOW_REQUEST",
"BOOST",
"IMPORT",
"ADD",
"REPORT",
"INVITE",
"ACCEPT",
"JOIN",
"LEAVE",
"REMOVE",
"GROUP_PRIVACY",
"GROUP_NAME",
"GROUP_DESCRIPTION",
],
)
),
name="notification_type_valid",
),
),
]

View file

@ -1,25 +0,0 @@
# Generated by Django 3.2.5 on 2021-11-10 21:04
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0112_auto_20211022_0844"),
]
operations = [
migrations.AddField(
model_name="importitem",
name="normalized_data",
field=models.JSONField(default={}),
preserve_default=False,
),
migrations.AddField(
model_name="importjob",
name="mappings",
field=models.JSONField(default={}),
preserve_default=False,
),
]

View file

@ -1,19 +0,0 @@
# Generated by Django 3.2.5 on 2021-11-13 00:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0113_auto_20211110_2104"),
]
operations = [
migrations.AddField(
model_name="importjob",
name="source",
field=models.CharField(default="Import", max_length=100),
preserve_default=False,
),
]

View file

@ -1,24 +0,0 @@
# Generated by Django 3.2.5 on 2021-11-13 19:35
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0114_importjob_source"),
]
operations = [
migrations.AddField(
model_name="importitem",
name="linked_review",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="bookwyrm.review",
),
),
]

View file

@ -1,23 +0,0 @@
# Generated by Django 3.2.5 on 2021-11-14 17:34
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0115_importitem_linked_review"),
]
operations = [
migrations.RemoveField(
model_name="importjob",
name="task_id",
),
migrations.AddField(
model_name="importjob",
name="updated_date",
field=models.DateTimeField(default=django.utils.timezone.now),
),
]

View file

@ -1,32 +0,0 @@
# Generated by Django 3.2.5 on 2021-11-15 18:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0116_auto_20211114_1734"),
]
operations = [
migrations.AlterField(
model_name="user",
name="preferred_language",
field=models.CharField(
blank=True,
choices=[
("en-us", "English"),
("de-de", "Deutsch (German)"),
("es-es", "Español (Spanish)"),
("fr-fr", "Français (French)"),
("lt-lt", "lietuvių (Lithuanian)"),
("pt-br", "Português - Brasil (Brazilian Portuguese)"),
("zh-hans", "简体中文 (Simplified Chinese)"),
("zh-hant", "繁體中文 (Traditional Chinese)"),
],
max_length=255,
null=True,
),
),
]

View file

@ -1,33 +0,0 @@
# Generated by Django 3.2.5 on 2021-11-17 18:01
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0117_alter_user_preferred_language"),
]
operations = [
migrations.AlterField(
model_name="user",
name="preferred_language",
field=models.CharField(
blank=True,
choices=[
("en-us", "English"),
("de-de", "Deutsch (German)"),
("es-es", "Español (Spanish)"),
("gl-es", "Galego (Galician)"),
("fr-fr", "Français (French)"),
("lt-lt", "Lietuvių (Lithuanian)"),
("pt-br", "Português - Brasil (Brazilian Portuguese)"),
("zh-hans", "简体中文 (Simplified Chinese)"),
("zh-hant", "繁體中文 (Traditional Chinese)"),
],
max_length=255,
null=True,
),
),
]

View file

@ -1,32 +0,0 @@
# Generated by Django 3.2.5 on 2021-11-24 10:15
import bookwyrm.models.user
import django.contrib.postgres.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0118_alter_user_preferred_language"),
]
operations = [
migrations.AddField(
model_name="user",
name="feed_status_types",
field=django.contrib.postgres.fields.ArrayField(
base_field=models.CharField(
choices=[
("review", "Reviews"),
("comment", "Comments"),
("quotation", "Quotations"),
("everything", "Everything else"),
],
max_length=10,
),
default=bookwyrm.models.user.get_feed_filter_choices,
size=8,
),
),
]

View file

@ -1,29 +0,0 @@
# Generated by Django 3.2.5 on 2021-12-04 10:55
from django.db import migrations, models
import uuid
def gen_uuid(apps, schema_editor):
"""sets an unique UUID for embed_key"""
book_lists = apps.get_model("bookwyrm", "List")
db_alias = schema_editor.connection.alias
for book_list in book_lists.objects.using(db_alias).all():
book_list.embed_key = uuid.uuid4()
book_list.save(broadcast=False)
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0119_user_feed_status_types"),
]
operations = [
migrations.AddField(
model_name="list",
name="embed_key",
field=models.UUIDField(editable=False, null=True, unique=True),
),
migrations.RunPython(gen_uuid, reverse_code=migrations.RunPython.noop),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 3.2.5 on 2021-12-22 11:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0120_list_embed_key"),
]
operations = [
migrations.AddField(
model_name="user",
name="summary_keys",
field=models.JSONField(null=True),
),
]

View file

@ -1,19 +0,0 @@
# Generated by Django 3.2.5 on 2022-01-04 18:59
import bookwyrm.models.user
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0121_user_summary_keys"),
]
operations = [
migrations.AlterField(
model_name="annualgoal",
name="year",
field=models.IntegerField(default=bookwyrm.models.user.get_current_year),
),
]

View file

@ -1,34 +0,0 @@
# Generated by Django 3.2.5 on 2022-01-04 22:31
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0122_alter_annualgoal_year"),
]
operations = [
migrations.AlterField(
model_name="user",
name="preferred_language",
field=models.CharField(
blank=True,
choices=[
("en-us", "English"),
("de-de", "Deutsch (German)"),
("es-es", "Español (Spanish)"),
("gl-es", "Galego (Galician)"),
("fr-fr", "Français (French)"),
("lt-lt", "Lietuvių (Lithuanian)"),
("pt-br", "Português do Brasil (Brazilian Portuguese)"),
("pt-pt", "Português Europeu (European Portuguese)"),
("zh-hans", "简体中文 (Simplified Chinese)"),
("zh-hant", "繁體中文 (Traditional Chinese)"),
],
max_length=255,
null=True,
),
),
]

View file

@ -1,33 +0,0 @@
# Generated by Django 3.2.10 on 2022-01-06 17:59
from django.contrib.auth.models import AbstractUser
from django.db import migrations
def get_admins(apps, schema_editor):
"""add any superusers to the "admin" group"""
db_alias = schema_editor.connection.alias
groups = apps.get_model("auth", "Group")
try:
group = groups.objects.using(db_alias).get(name="admin")
except groups.DoesNotExist:
# for tests
return
users = apps.get_model("bookwyrm", "User")
admins = users.objects.using(db_alias).filter(is_superuser=True)
for admin in admins:
admin.groups.add(group)
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0123_alter_user_preferred_language"),
]
operations = [
migrations.RunPython(get_admins, reverse_code=migrations.RunPython.noop),
]

View file

@ -1,36 +0,0 @@
# Generated by Django 3.2.10 on 2022-01-09 01:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0124_auto_20220106_1759"),
]
operations = [
migrations.AlterField(
model_name="user",
name="preferred_language",
field=models.CharField(
blank=True,
choices=[
("en-us", "English"),
("de-de", "Deutsch (German)"),
("es-es", "Español (Spanish)"),
("gl-es", "Galego (Galician)"),
("it-it", "Italiano (Italian)"),
("fr-fr", "Français (French)"),
("lt-lt", "Lietuvių (Lithuanian)"),
("no-no", "Norsk (Norwegian)"),
("pt-br", "Português do Brasil (Brazilian Portuguese)"),
("pt-pt", "Português Europeu (European Portuguese)"),
("zh-hans", "简体中文 (Simplified Chinese)"),
("zh-hant", "繁體中文 (Traditional Chinese)"),
],
max_length=255,
null=True,
),
),
]

View file

@ -1,55 +0,0 @@
# Generated by Django 3.2.10 on 2022-01-12 23:15
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0125_alter_user_preferred_language"),
]
operations = [
migrations.AlterField(
model_name="annualgoal",
name="privacy",
field=models.CharField(
choices=[
("public", "Public"),
("unlisted", "Unlisted"),
("followers", "Followers"),
("direct", "Private"),
],
default="public",
max_length=255,
),
),
migrations.AlterField(
model_name="importjob",
name="privacy",
field=models.CharField(
choices=[
("public", "Public"),
("unlisted", "Unlisted"),
("followers", "Followers"),
("direct", "Private"),
],
default="public",
max_length=255,
),
),
migrations.AlterField(
model_name="user",
name="default_post_privacy",
field=models.CharField(
choices=[
("public", "Public"),
("unlisted", "Unlisted"),
("followers", "Followers"),
("direct", "Private"),
],
default="public",
max_length=255,
),
),
]

View file

@ -1,144 +0,0 @@
# Generated by Django 3.2.10 on 2022-01-10 21:20
import bookwyrm.models.activitypub_mixin
import bookwyrm.models.fields
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0125_alter_user_preferred_language"),
]
operations = [
migrations.CreateModel(
name="LinkDomain",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created_date", models.DateTimeField(auto_now_add=True)),
("updated_date", models.DateTimeField(auto_now=True)),
(
"remote_id",
bookwyrm.models.fields.RemoteIdField(
max_length=255,
null=True,
validators=[bookwyrm.models.fields.validate_remote_id],
),
),
("domain", models.CharField(max_length=255, unique=True)),
(
"status",
models.CharField(
choices=[
("approved", "Approved"),
("blocked", "Blocked"),
("pending", "Pending"),
],
default="pending",
max_length=50,
),
),
("name", models.CharField(max_length=100)),
(
"reported_by",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="Link",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created_date", models.DateTimeField(auto_now_add=True)),
("updated_date", models.DateTimeField(auto_now=True)),
(
"remote_id",
bookwyrm.models.fields.RemoteIdField(
max_length=255,
null=True,
validators=[bookwyrm.models.fields.validate_remote_id],
),
),
("url", bookwyrm.models.fields.URLField(max_length=255)),
(
"added_by",
bookwyrm.models.fields.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
),
),
(
"domain",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="links",
to="bookwyrm.linkdomain",
),
),
],
options={
"abstract": False,
},
bases=(bookwyrm.models.activitypub_mixin.ActivitypubMixin, models.Model),
),
migrations.CreateModel(
name="FileLink",
fields=[
(
"link_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="bookwyrm.link",
),
),
("filetype", bookwyrm.models.fields.CharField(max_length=5)),
(
"book",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="file_links",
to="bookwyrm.book",
),
),
],
options={
"abstract": False,
},
bases=("bookwyrm.link",),
),
]

View file

@ -1,22 +0,0 @@
# Generated by Django 3.2.10 on 2022-01-10 22:11
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0126_filelink_link_linkdomain"),
]
operations = [
migrations.RemoveConstraint(
model_name="report",
name="self_report",
),
migrations.AddField(
model_name="report",
name="links",
field=models.ManyToManyField(blank=True, to="bookwyrm.Link"),
),
]

View file

@ -1,13 +0,0 @@
# Generated by Django 3.2.10 on 2022-01-13 01:14
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0126_auto_20220112_2315"),
("bookwyrm", "0127_auto_20220110_2211"),
]
operations = []

View file

@ -1,32 +0,0 @@
# Generated by Django 3.2.10 on 2022-01-17 17:16
import bookwyrm.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0128_merge_0126_auto_20220112_2315_0127_auto_20220110_2211"),
]
operations = [
migrations.AddField(
model_name="filelink",
name="availability",
field=bookwyrm.models.fields.CharField(
choices=[
("free", "Free"),
("purchase", "Purchasable"),
("loan", "Available for loan"),
],
default="free",
max_length=100,
),
),
migrations.AlterField(
model_name="filelink",
name="filetype",
field=bookwyrm.models.fields.CharField(max_length=50),
),
]

View file

@ -1,21 +0,0 @@
# Generated by Django 3.2.10 on 2022-01-24 20:01
import bookwyrm.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0129_auto_20220117_1716"),
]
operations = [
migrations.AlterField(
model_name="listitem",
name="notes",
field=bookwyrm.models.fields.TextField(
blank=True, max_length=300, null=True
),
),
]

View file

@ -1,37 +0,0 @@
# Generated by Django 3.2.10 on 2022-01-24 17:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0129_auto_20220117_1716"),
]
operations = [
migrations.AlterField(
model_name="user",
name="preferred_language",
field=models.CharField(
blank=True,
choices=[
("en-us", "English"),
("de-de", "Deutsch (German)"),
("es-es", "Español (Spanish)"),
("gl-es", "Galego (Galician)"),
("it-it", "Italiano (Italian)"),
("fr-fr", "Français (French)"),
("lt-lt", "Lietuvių (Lithuanian)"),
("no-no", "Norsk (Norwegian)"),
("pt-br", "Português do Brasil (Brazilian Portuguese)"),
("pt-pt", "Português Europeu (European Portuguese)"),
("sv-se", "Swedish (Svenska)"),
("zh-hans", "简体中文 (Simplified Chinese)"),
("zh-hant", "繁體中文 (Traditional Chinese)"),
],
max_length=255,
null=True,
),
),
]

View file

@ -1,13 +0,0 @@
# Generated by Django 3.2.10 on 2022-01-25 16:44
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0130_alter_listitem_notes"),
("bookwyrm", "0130_alter_user_preferred_language"),
]
operations = []

View file

@ -1,37 +0,0 @@
# Generated by Django 3.2.10 on 2022-02-02 20:42
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0131_merge_20220125_1644"),
]
operations = [
migrations.AlterField(
model_name="user",
name="preferred_language",
field=models.CharField(
blank=True,
choices=[
("en-us", "English"),
("de-de", "Deutsch (German)"),
("es-es", "Español (Spanish)"),
("gl-es", "Galego (Galician)"),
("it-it", "Italiano (Italian)"),
("fr-fr", "Français (French)"),
("lt-lt", "Lietuvių (Lithuanian)"),
("no-no", "Norsk (Norwegian)"),
("pt-br", "Português do Brasil (Brazilian Portuguese)"),
("pt-pt", "Português Europeu (European Portuguese)"),
("sv-se", "Svenska (Swedish)"),
("zh-hans", "简体中文 (Simplified Chinese)"),
("zh-hant", "繁體中文 (Traditional Chinese)"),
],
max_length=255,
null=True,
),
),
]

View file

@ -1,21 +0,0 @@
# Generated by Django 3.2.11 on 2022-02-04 20:06
import bookwyrm.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0132_alter_user_preferred_language"),
]
operations = [
migrations.AlterField(
model_name="listitem",
name="notes",
field=bookwyrm.models.fields.HtmlField(
blank=True, max_length=300, null=True
),
),
]

View file

@ -1,29 +0,0 @@
# Generated by Django 3.2.11 on 2022-02-11 18:59
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0133_alter_listitem_notes"),
]
operations = [
migrations.AddField(
model_name="announcement",
name="display_type",
field=models.CharField(
choices=[
("white-ter", "None"),
("primary-light", "Primary"),
("success-light", "Success"),
("link-light", "Link"),
("warning-light", "Warning"),
("danger-light", "Danger"),
],
default="white-ter",
max_length=20,
),
),
]

View file

@ -1,58 +0,0 @@
# Generated by Django 3.2.12 on 2022-02-17 16:24
import bookwyrm.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0134_announcement_display_type"),
]
operations = [
migrations.RenameField(
model_name="author",
old_name="viaf_id",
new_name="viaf",
),
migrations.RemoveField(
model_name="edition",
name="asin",
),
migrations.AddField(
model_name="author",
name="asin",
field=bookwyrm.models.fields.CharField(
blank=True, max_length=255, null=True
),
),
migrations.AddField(
model_name="author",
name="wikidata",
field=bookwyrm.models.fields.CharField(
blank=True, max_length=255, null=True
),
),
migrations.AddField(
model_name="book",
name="asin",
field=bookwyrm.models.fields.CharField(
blank=True, max_length=255, null=True
),
),
migrations.AddField(
model_name="book",
name="viaf",
field=bookwyrm.models.fields.CharField(
blank=True, max_length=255, null=True
),
),
migrations.AddField(
model_name="book",
name="wikidata",
field=bookwyrm.models.fields.CharField(
blank=True, max_length=255, null=True
),
),
]

View file

@ -1,24 +0,0 @@
# Generated by Django 3.2.12 on 2022-02-17 17:08
from django.db import migrations, models
import uuid
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0135_auto_20220217_1624"),
]
operations = [
migrations.AddField(
model_name="sitesettings",
name="admin_code",
field=models.CharField(default=uuid.uuid4, max_length=50),
),
migrations.AddField(
model_name="sitesettings",
name="install_mode",
field=models.BooleanField(default=False),
),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 3.2.12 on 2022-02-17 19:26
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0136_auto_20220217_1708"),
]
operations = [
migrations.AlterField(
model_name="sitesettings",
name="allow_registration",
field=models.BooleanField(default=False),
),
]

View file

@ -1,39 +0,0 @@
# Generated by Django 3.2.12 on 2022-02-24 18:59
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0137_alter_sitesettings_allow_registration"),
]
operations = [
migrations.CreateModel(
name="AutoMod",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("string_match", models.CharField(max_length=200, unique=True)),
("flag_users", models.BooleanField(default=True)),
("flag_statuses", models.BooleanField(default=True)),
(
"created_by",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to=settings.AUTH_USER_MODEL,
),
),
],
),
]

View file

@ -1,45 +0,0 @@
# Generated by Django 3.2.12 on 2022-02-24 20:41
from django.db import migrations, models
import django.db.models.deletion
def set_report_statuses(apps, schema_editor):
"""copy over status fields"""
db_alias = schema_editor.connection.alias
report_model = apps.get_model("bookwyrm", "Report")
reports = report_model.objects.using(db_alias).filter(statuses__isnull=False)
for report in reports:
report.status = report.statuses.first()
report.save()
def set_reverse(apps, schema_editor):
"""copy over status fields"""
db_alias = schema_editor.connection.alias
report_model = apps.get_model("bookwyrm", "Report")
reports = report_model.objects.using(db_alias).filter(status__isnull=False)
for report in reports:
report.statuses.set(report.status)
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0138_automod"),
]
operations = [
migrations.AddField(
model_name="report",
name="status",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="reports",
to="bookwyrm.status",
),
),
migrations.RunPython(set_report_statuses, reverse_code=set_reverse),
]

View file

@ -1,17 +0,0 @@
# Generated by Django 3.2.12 on 2022-02-24 20:43
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0139_report_status"),
]
operations = [
migrations.RemoveField(
model_name="report",
name="statuses",
),
]

View file

@ -1,24 +0,0 @@
# Generated by Django 3.2.12 on 2022-02-24 20:50
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0140_remove_report_statuses"),
]
operations = [
migrations.AlterField(
model_name="report",
name="status",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="bookwyrm.status",
),
),
]

View file

@ -1,68 +0,0 @@
# Generated by Django 3.2.12 on 2022-02-27 17:52
from django.db import migrations, models
import django.db.models.deletion
def add_default_themes(apps, schema_editor):
"""add light and dark themes"""
db_alias = schema_editor.connection.alias
theme_model = apps.get_model("bookwyrm", "Theme")
theme_model.objects.using(db_alias).create(
name="BookWyrm Light",
path="css/themes/bookwyrm-light.scss",
)
theme_model.objects.using(db_alias).create(
name="BookWyrm Dark",
path="css/themes/bookwyrm-dark.scss",
)
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0141_alter_report_status"),
]
operations = [
migrations.CreateModel(
name="Theme",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created_date", models.DateTimeField(auto_now_add=True)),
("name", models.CharField(max_length=50, unique=True)),
("path", models.CharField(max_length=50, unique=True)),
],
),
migrations.AddField(
model_name="sitesettings",
name="default_theme",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="bookwyrm.theme",
),
),
migrations.AddField(
model_name="user",
name="theme",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="bookwyrm.theme",
),
),
migrations.RunPython(
add_default_themes, reverse_code=migrations.RunPython.noop
),
]

View file

@ -1,19 +0,0 @@
# Generated by Django 3.2.12 on 2022-02-28 19:44
import bookwyrm.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0141_alter_report_status"),
]
operations = [
migrations.AddField(
model_name="user",
name="hide_follows",
field=bookwyrm.models.fields.BooleanField(default=False),
),
]

View file

@ -1,13 +0,0 @@
# Generated by Django 3.2.12 on 2022-02-28 21:28
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0142_auto_20220227_1752"),
("bookwyrm", "0142_user_hide_follows"),
]
operations = []

View file

@ -1,39 +0,0 @@
# Generated by Django 3.2.12 on 2022-03-01 18:46
from django.db import migrations, models
def remove_white(apps, schema_editor):
"""don't hardcode white announcements"""
db_alias = schema_editor.connection.alias
announcement_model = apps.get_model("bookwyrm", "Announcement")
announcement_model.objects.using(db_alias).filter(display_type="white-ter").update(
display_type=None
)
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0143_merge_0142_auto_20220227_1752_0142_user_hide_follows"),
]
operations = [
migrations.AlterField(
model_name="announcement",
name="display_type",
field=models.CharField(
blank=True,
choices=[
("primary-light", "Primary"),
("success-light", "Success"),
("link-light", "Link"),
("warning-light", "Warning"),
("danger-light", "Danger"),
],
max_length=20,
null=True,
),
),
migrations.RunPython(remove_white, reverse_code=migrations.RunPython.noop),
]

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