mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2025-12-25 03:13:13 -05:00
Compare commits
1206 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9119d773f1 | ||
|
|
4ea5cdb8b9 | ||
|
|
f36e5f1d89 | ||
|
|
bce95ff604 | ||
|
|
0f0a5b32cd | ||
|
|
0bd0b794df | ||
|
|
5267ac12b0 | ||
|
|
02678ffe30 | ||
|
|
2907e29a11 | ||
|
|
9d49c4d550 | ||
|
|
e2c6eec628 | ||
|
|
63716e4397 | ||
|
|
27e5955c78 | ||
|
|
e9e6cdccca | ||
|
|
8c8096e348 | ||
|
|
9fcbbc17e8 | ||
|
|
0a2f83cf85 | ||
|
|
01fff0783f | ||
|
|
7ccdb90f9b | ||
|
|
c2e522d9f2 | ||
|
|
92578dd6a2 | ||
|
|
3103f28fc8 | ||
|
|
a5df1275ec | ||
|
|
a4308f9864 | ||
|
|
21526fb676 | ||
|
|
5dc3116c44 | ||
|
|
2a6a87ec16 | ||
|
|
8149b05185 | ||
|
|
61afbbdfbe | ||
|
|
a37455ccda | ||
|
|
6d711aff41 | ||
|
|
d4adb975ec | ||
|
|
9b581d58bd | ||
|
|
79db8a2fe0 | ||
|
|
f722d4751b | ||
|
|
368ed2aaf3 | ||
|
|
50400e1d20 | ||
|
|
750115cab5 | ||
|
|
9d8acdc41f | ||
|
|
7ab36f1a7a | ||
|
|
b8d0e32550 | ||
|
|
d9f0889b36 | ||
|
|
35f40f175c | ||
|
|
291ff86c42 | ||
|
|
d2b0aeab52 | ||
|
|
3cab6e538e | ||
|
|
db67ab6b30 | ||
|
|
b5b31b3dc6 | ||
|
|
a15dd2ccbc | ||
|
|
62cc54f9f5 | ||
|
|
75c5bba7e5 | ||
|
|
642a0493af | ||
|
|
8d8e0be328 | ||
|
|
744b588cea | ||
|
|
d3a21b9ff0 | ||
|
|
3a9c40c566 | ||
|
|
387e0a5250 | ||
|
|
4ea28ba22a | ||
|
|
20660f547c | ||
|
|
2ee63d8568 | ||
|
|
2179d7d1f7 | ||
|
|
034d59373f | ||
|
|
d1ad0ade0f | ||
|
|
991089c17a | ||
|
|
54960d8480 | ||
|
|
5fcfe09bb6 | ||
|
|
01c4974507 | ||
|
|
2d57e0dab2 | ||
|
|
d52e5408c0 | ||
|
|
fdce69daf4 | ||
|
|
cb3ffcb12d | ||
|
|
d7342a349b | ||
|
|
794bbed833 | ||
|
|
0b335e80a6 | ||
|
|
2716d72e31 | ||
|
|
8c849a1077 | ||
|
|
8c1769458d | ||
|
|
2ac6451370 | ||
|
|
7841397b59 | ||
|
|
cd11194ce5 | ||
|
|
be7558f82b | ||
|
|
35a7875f6f | ||
|
|
55f1f834c2 | ||
|
|
f5f32912b1 | ||
|
|
5709435d43 | ||
|
|
1c219dbc3b | ||
|
|
1262982588 | ||
|
|
be8a340a0c | ||
|
|
fb1de15de6 | ||
|
|
2180f11768 | ||
|
|
1083b7521e | ||
|
|
70d40f9e70 | ||
|
|
1094cf2d92 | ||
|
|
aaf6e0f197 | ||
|
|
ec59cd6e4f | ||
|
|
3f7cb41db7 | ||
|
|
432ed09ef8 | ||
|
|
6c8a8841c7 | ||
|
|
c3c762c262 | ||
|
|
cc6f393a86 | ||
|
|
2546c5b74c | ||
|
|
118440c960 | ||
|
|
4f8ca0710f | ||
|
|
e2c1c4c1f7 | ||
|
|
8c18499fd7 | ||
|
|
bd9d5200b1 | ||
|
|
cb98b6347b | ||
|
|
a34d403b2c | ||
|
|
957d8092a3 | ||
|
|
eb799dead3 | ||
|
|
b37d9e2c25 | ||
|
|
9fc6e775aa | ||
|
|
211bf226eb | ||
|
|
360a923e96 | ||
|
|
2b689ffd6b | ||
|
|
feb6107c79 | ||
|
|
d39d5d4cbf | ||
|
|
62a66aa9a7 | ||
|
|
885433a1bd | ||
|
|
f67efd55a7 | ||
|
|
c238ea9136 | ||
|
|
5a0a5b09a1 | ||
|
|
e698d14ec3 | ||
|
|
0caf2fe77f | ||
|
|
c079f49d71 | ||
|
|
dd921f1555 | ||
|
|
e1a504564f | ||
|
|
424fbd4de8 | ||
|
|
7266ff8978 | ||
|
|
3c8d434358 | ||
|
|
088387fa90 | ||
|
|
7bc7017162 | ||
|
|
22adc9fef9 | ||
|
|
1f688c3fe2 | ||
|
|
68040aa568 | ||
|
|
1d751f73ff | ||
|
|
8490ac01cc | ||
|
|
84477ef52a | ||
|
|
b789573de3 | ||
|
|
d5d8e7ce63 | ||
|
|
c7a49458b9 | ||
|
|
a5dde3d3c8 | ||
|
|
5f2fff229d | ||
|
|
f3c67f134c | ||
|
|
1c48fc1c53 | ||
|
|
7c51419f3b | ||
|
|
b3984b02b4 | ||
|
|
758c3fa1a9 | ||
|
|
52a55edd04 | ||
|
|
896dd28fa8 | ||
|
|
c7b4fcd761 | ||
|
|
075e50b911 | ||
|
|
cc436898d5 | ||
|
|
a2cd7fb82d | ||
|
|
213ca2009c | ||
|
|
6add8b9b02 | ||
|
|
adbff13556 | ||
|
|
65757b0019 | ||
|
|
0b17ef329f | ||
|
|
d51a44a240 | ||
|
|
f4a7ef144f | ||
|
|
2a8a79b263 | ||
|
|
edcc5f6441 | ||
|
|
9fc77be51b | ||
|
|
a861d8a89c | ||
|
|
6baf640e6d | ||
|
|
1dd3f227ac | ||
|
|
a89cf71c17 | ||
|
|
2a6a785453 | ||
|
|
7dc9e012fa | ||
|
|
5d65c76686 | ||
|
|
ff184f7e5d | ||
|
|
767cc9b58a | ||
|
|
d8f444e596 | ||
|
|
6bc3e26eff | ||
|
|
68399acb8f | ||
|
|
22923b8e7e | ||
|
|
612c5e6668 | ||
|
|
a5a0264e41 | ||
|
|
fdb73563d6 | ||
|
|
cd2c4b35df | ||
|
|
d1d4cec00f | ||
|
|
6940f405eb | ||
|
|
3e6f7a554a | ||
|
|
4df451a540 | ||
|
|
78e2ee6631 | ||
|
|
fd06d67218 | ||
|
|
97aa3301ea | ||
|
|
ec0bc43c21 | ||
|
|
a8a5db401f | ||
|
|
23c4c2e543 | ||
|
|
d1a69dac90 | ||
|
|
7b819843b7 | ||
|
|
8e1893a215 | ||
|
|
6a43a01dd4 | ||
|
|
63069dd716 | ||
|
|
cd707d20a1 | ||
|
|
c648ee954c | ||
|
|
5695cacc0e | ||
|
|
bad5ad1f1f | ||
|
|
db8d35e332 | ||
|
|
c88df548e9 | ||
|
|
81180207ba | ||
|
|
2a1a6ea433 | ||
|
|
fa8af5596f | ||
|
|
f546a4d382 | ||
|
|
fc0b12af12 | ||
|
|
b2da40421b | ||
|
|
8740bf3a83 | ||
|
|
c2ecf7ef57 | ||
|
|
b9771d7c11 | ||
|
|
d5b53d2bca | ||
|
|
f502cd47e1 | ||
|
|
358fab9a8f | ||
|
|
445e78825a | ||
|
|
d49e17f088 | ||
|
|
e7d9824520 | ||
|
|
c9ebbdd4ec | ||
|
|
85fa211390 | ||
|
|
40a7db086f | ||
|
|
20f066104c | ||
|
|
1d9de9bae2 | ||
|
|
086272f103 | ||
|
|
9a7a05e8a9 | ||
|
|
36352ae6fb | ||
|
|
9419a823e2 | ||
|
|
f32fcd6e11 | ||
|
|
4ded92fcde | ||
|
|
1206215ea7 | ||
|
|
ac033600e9 | ||
|
|
5013d5ec94 | ||
|
|
3f5db2cb03 | ||
|
|
79227b347e | ||
|
|
ffe0c22b3e | ||
|
|
25e5faf135 | ||
|
|
e57ab1835c | ||
|
|
a6f8a9ef06 | ||
|
|
05b51e83a6 | ||
|
|
5625a9ae4f | ||
|
|
ac440aa8b1 | ||
|
|
0cebc33e27 | ||
|
|
11678431e1 | ||
|
|
75c03706cb | ||
|
|
7232c9373f | ||
|
|
06920807c6 | ||
|
|
ccae32f21c | ||
|
|
eaad4e21e4 | ||
|
|
6b4b65109d | ||
|
|
441e9ea887 | ||
|
|
25c369d400 | ||
|
|
491b5beded | ||
|
|
13c26d199b | ||
|
|
a02722a525 | ||
|
|
2553bea835 | ||
|
|
302528256c | ||
|
|
ca28a44743 | ||
|
|
32fd6e3827 | ||
|
|
ec4fa50012 | ||
|
|
8e60a1954b | ||
|
|
885a316955 | ||
|
|
cb1d45b625 | ||
|
|
52d2d75fe9 | ||
|
|
41d4728c89 | ||
|
|
edb669ab36 | ||
|
|
e9ed28b44d | ||
|
|
343373bf4d | ||
|
|
4a9082b70c | ||
|
|
c1e56920ec | ||
|
|
fe64da0841 | ||
|
|
6bf605f98e | ||
|
|
e18b0ad049 | ||
|
|
d7f37e8293 | ||
|
|
f576aa34e4 | ||
|
|
698ede9eb6 | ||
|
|
3ae73f7cad | ||
|
|
340d36c628 | ||
|
|
b08c119e57 | ||
|
|
703f782be1 | ||
|
|
052219e141 | ||
|
|
604d18d594 | ||
|
|
f23d4a4188 | ||
|
|
88f2177e9b | ||
|
|
675d7a0647 | ||
|
|
781d8845be | ||
|
|
c2fdf4812c | ||
|
|
ae1532e509 | ||
|
|
121d2471a7 | ||
|
|
278342f3f0 | ||
|
|
608526b348 | ||
|
|
a0ba1ecfae | ||
|
|
2ef4514987 | ||
|
|
67f63730a3 | ||
|
|
eeb3b2e5d5 | ||
|
|
7314572fc0 | ||
|
|
934d78c50e | ||
|
|
431eb7baf7 | ||
|
|
e0c8895733 | ||
|
|
b18a1d0110 | ||
|
|
a89411aeec | ||
|
|
838ce6615b | ||
|
|
e0cc42653d | ||
|
|
74b940d4eb | ||
|
|
c03e82f094 | ||
|
|
235c5d6b4a | ||
|
|
42e6e0bc50 | ||
|
|
f7eabfe458 | ||
|
|
988dcd1522 | ||
|
|
22aa0d2cb7 | ||
|
|
dd1975817e | ||
|
|
77195718d8 | ||
|
|
ebd354bc8d | ||
|
|
aa1fa3a40e | ||
|
|
2add3b70a4 | ||
|
|
d38a4a2e7e | ||
|
|
8827e6f453 | ||
|
|
742297c1fc | ||
|
|
7ae66a14be | ||
|
|
0cf89ca33c | ||
|
|
68ceada28b | ||
|
|
192ca44d89 | ||
|
|
421dab2405 | ||
|
|
3204aaf161 | ||
|
|
6cf6791fe6 | ||
|
|
0ff16f280e | ||
|
|
a297e4731c | ||
|
|
de5ac9181f | ||
|
|
fbab90e954 | ||
|
|
05472b5a29 | ||
|
|
d6839c5dfa | ||
|
|
dea4fa000e | ||
|
|
c36eaf934f | ||
|
|
4a13cc63ae | ||
|
|
96e0be0a78 | ||
|
|
5f190bdc6c | ||
|
|
73c376427c | ||
|
|
d34f39a9e0 | ||
|
|
8ae9de580d | ||
|
|
a144f347f8 | ||
|
|
f43788d676 | ||
|
|
cac00423a2 | ||
|
|
32429af5e9 | ||
|
|
792c3a07e3 | ||
|
|
2879fa466e | ||
|
|
9eed6693b4 | ||
|
|
c4c6eb3ca6 | ||
|
|
e29f318453 | ||
|
|
8eb2ba9512 | ||
|
|
e9f87bb475 | ||
|
|
8b4e6ac5ae | ||
|
|
ee0f652981 | ||
|
|
7f06f888df | ||
|
|
54f43c7938 | ||
|
|
6ebb18a932 | ||
|
|
7bde1bf44f | ||
|
|
e00c6459ab | ||
|
|
3075ec066f | ||
|
|
3ddc3c3768 | ||
|
|
4d8d4af42a | ||
|
|
1fd0028351 | ||
|
|
f59c5ae16e | ||
|
|
7b7b726ec5 | ||
|
|
9c1d161785 | ||
|
|
5f542e9ce6 | ||
|
|
5484506bc3 | ||
|
|
2e71bc4505 | ||
|
|
136f05b886 | ||
|
|
83cf03a10b | ||
|
|
7b56719716 | ||
|
|
348296763d | ||
|
|
5c7a57ac32 | ||
|
|
0c0b8ea455 | ||
|
|
2f20f43efe | ||
|
|
cf6435503c | ||
|
|
752e98275d | ||
|
|
40ee21a613 | ||
|
|
1662b793a5 | ||
|
|
2e4efe2500 | ||
|
|
3d01faed5f | ||
|
|
9bc3443a3c | ||
|
|
87dc32210e | ||
|
|
671216488e | ||
|
|
f596fc33a1 | ||
|
|
82756923ad | ||
|
|
14042563bf | ||
|
|
06e12396e8 | ||
|
|
b698eee3a1 | ||
|
|
9d15634dc8 | ||
|
|
5f6c298d04 | ||
|
|
f20a2ca781 | ||
|
|
6dcfbc24a9 | ||
|
|
ea9404301b | ||
|
|
da268b4429 | ||
|
|
2775960cf7 | ||
|
|
bff6b2ffb0 | ||
|
|
193600564e | ||
|
|
2abd683759 | ||
|
|
0163800a05 | ||
|
|
958ccd7f7d | ||
|
|
a0eb1df4fa | ||
|
|
3f1c6d1dd0 | ||
|
|
49d1946f29 | ||
|
|
7c448a5362 | ||
|
|
06c40b6c80 | ||
|
|
63f24e75b3 | ||
|
|
87f4068736 | ||
|
|
87a80e0caa | ||
|
|
debdd03a7a | ||
|
|
c58697aecd | ||
|
|
3b3ad37d64 | ||
|
|
d392b06e98 | ||
|
|
99a9f594e2 | ||
|
|
549a5b764d | ||
|
|
26592c31a9 | ||
|
|
378eb924e9 | ||
|
|
f8f4a87a99 | ||
|
|
55289e6837 | ||
|
|
60efbd0389 | ||
|
|
f3903c1aa5 | ||
|
|
b01e62007f | ||
|
|
d23139cd8a | ||
|
|
f59a450448 | ||
|
|
e14bb78ed1 | ||
|
|
7730890525 | ||
|
|
29977609aa | ||
|
|
88c3a7d0bf | ||
|
|
2c89add187 | ||
|
|
0461c57cf3 | ||
|
|
ba0335bb28 | ||
|
|
51e01ee40c | ||
|
|
09a76a2057 | ||
|
|
741220aefe | ||
|
|
2917d6ffcf | ||
|
|
6c73ca5b45 | ||
|
|
79658e2f7c | ||
|
|
f335c3f755 | ||
|
|
86fe129eba | ||
|
|
081104e655 | ||
|
|
96d997a817 | ||
|
|
b55ceda978 | ||
|
|
37b4f5c896 | ||
|
|
b0821a9c6b | ||
|
|
f178790709 | ||
|
|
425b71984a | ||
|
|
3cb2cf5333 | ||
|
|
9c0dc64a47 | ||
|
|
4a9bd3626e | ||
|
|
23a561e8cd | ||
|
|
2a2f1033d0 | ||
|
|
4234c5b35f | ||
|
|
1b09234e91 | ||
|
|
9b5878faae | ||
|
|
e27f4c5768 | ||
|
|
a78b42d9ab | ||
|
|
a1f1bc19e5 | ||
|
|
f6983993d5 | ||
|
|
a868860b7d | ||
|
|
d1b6a4eb43 | ||
|
|
61bfaf012b | ||
|
|
92adc9b610 | ||
|
|
feb4a63bb0 | ||
|
|
30f8318531 | ||
|
|
75eff42329 | ||
|
|
5b040900a7 | ||
|
|
717666fc14 | ||
|
|
a012a6f0d5 | ||
|
|
d0703f9639 | ||
|
|
7b2ade5fcd | ||
|
|
28c839a59d | ||
|
|
1ead724af6 | ||
|
|
3341c6db19 | ||
|
|
206d13594a | ||
|
|
37af406831 | ||
|
|
88f18a1b24 | ||
|
|
8bf410dbca | ||
|
|
c98411ca0e | ||
|
|
fcfb404edf | ||
|
|
a0c8b39f0c | ||
|
|
3a1f2540b1 | ||
|
|
9c680bc59c | ||
|
|
fde95a6a8e | ||
|
|
150a0332f6 | ||
|
|
618c32bdb8 | ||
|
|
ea35850b71 | ||
|
|
87561943f9 | ||
|
|
5fd8d4e847 | ||
|
|
3880f205b6 | ||
|
|
fcbc4cb792 | ||
|
|
f5837fdbd2 | ||
|
|
eb6d0d7922 | ||
|
|
d3dd9099f6 | ||
|
|
a112b23d07 | ||
|
|
4c591f3827 | ||
|
|
62a28f57f6 | ||
|
|
ef689b0857 | ||
|
|
aa903da042 | ||
|
|
9587d8832d | ||
|
|
f125be1347 | ||
|
|
269301852a | ||
|
|
8e5dcd57ce | ||
|
|
920273197d | ||
|
|
1be2e9fbb2 | ||
|
|
7c93eededf | ||
|
|
e0b414d8e9 | ||
|
|
1b17031523 | ||
|
|
2d76c3e84c | ||
|
|
a56c7c29a6 | ||
|
|
54f2e26f93 | ||
|
|
842f5bed81 | ||
|
|
1e5c656e51 | ||
|
|
539e01f97d | ||
|
|
503a4881fe | ||
|
|
03dd4370b9 | ||
|
|
04181fdda7 | ||
|
|
316fd65ab8 | ||
|
|
e8cbd91baf | ||
|
|
157af15a2a | ||
|
|
cba80aeac9 | ||
|
|
efa9e8aa3b | ||
|
|
d294341926 | ||
|
|
b930ecdcd0 | ||
|
|
35dce661bf | ||
|
|
100242f0a6 | ||
|
|
d695f71d36 | ||
|
|
5d60b7a67c | ||
|
|
5d5d89dab9 | ||
|
|
35a625e04b | ||
|
|
1a2d3bb441 | ||
|
|
2e3ac02afb | ||
|
|
1d2bfb4462 | ||
|
|
a5b8a65b7d | ||
|
|
dc320f2e6d | ||
|
|
acbca83553 | ||
|
|
cb26c5dfc8 | ||
|
|
b5c4174700 | ||
|
|
3e37d11c6a | ||
|
|
36e83a9d01 | ||
|
|
efcd759869 | ||
|
|
9f8830b341 | ||
|
|
7c81396ec5 | ||
|
|
9b50665375 | ||
|
|
83795581e6 | ||
|
|
af51524109 | ||
|
|
749f2bff02 | ||
|
|
cd8f8bb90c | ||
|
|
3a031bbbaf | ||
|
|
f4b1acb757 | ||
|
|
3e55e04fbd | ||
|
|
1822a62e14 | ||
|
|
2f991b5557 | ||
|
|
827efbd783 | ||
|
|
9573a68bfe | ||
|
|
738aa12243 | ||
|
|
f25de4b4ce | ||
|
|
c75d265686 | ||
|
|
c691d6028b | ||
|
|
c073512b17 | ||
|
|
dc827df95c | ||
|
|
b8db54d198 | ||
|
|
dc58b42f68 | ||
|
|
9eca4673cd | ||
|
|
ac41a55d4f | ||
|
|
741c05a519 | ||
|
|
ac2d78f7a5 | ||
|
|
a4a93c5f4a | ||
|
|
05e507278e | ||
|
|
cab1641b33 | ||
|
|
9e99edf6f6 | ||
|
|
2841e086df | ||
|
|
00ae511076 | ||
|
|
f97d8ffdfd | ||
|
|
34f337290c | ||
|
|
8159838fc3 | ||
|
|
698aa5a753 | ||
|
|
60f2494eae | ||
|
|
303f999b74 | ||
|
|
f83daf154f | ||
|
|
6444680e06 | ||
|
|
38e1db9c53 | ||
|
|
d71c929ba8 | ||
|
|
c604369e86 | ||
|
|
4865b742c7 | ||
|
|
1246549f4b | ||
|
|
55ee75fed1 | ||
|
|
846a4796e2 | ||
|
|
545c464f4f | ||
|
|
fabf0c28e3 | ||
|
|
e219f7e07c | ||
|
|
830ce14c65 | ||
|
|
79abb8bf8f | ||
|
|
fd4236672e | ||
|
|
00148a2993 | ||
|
|
359fcb24cf | ||
|
|
c1bfa563a3 | ||
|
|
bf4fc9a7aa | ||
|
|
4312b5ad65 | ||
|
|
6fc078090a | ||
|
|
a4548abc19 | ||
|
|
1a39066b45 | ||
|
|
9cf1435130 | ||
|
|
e895bda80b | ||
|
|
882f18ac29 | ||
|
|
ebfe5eee6d | ||
|
|
afac08dc01 | ||
|
|
a0ac379b3c | ||
|
|
f5cb393138 | ||
|
|
b93f8e5e95 | ||
|
|
38c8e1b84f | ||
|
|
275c879e62 | ||
|
|
cde632241b | ||
|
|
ea1e47e579 | ||
|
|
07b399cd80 | ||
|
|
ed20cf3df4 | ||
|
|
f5d7919f72 | ||
|
|
86c4278553 | ||
|
|
2a5c0bb740 | ||
|
|
432dfa9e86 | ||
|
|
8a4e32f05e | ||
|
|
5a8b4fb4ce | ||
|
|
65034e523f | ||
|
|
0c6637406a | ||
|
|
4b0d022db1 | ||
|
|
7a2b3c2d2e | ||
|
|
205eae785e | ||
|
|
e0223e0c5c | ||
|
|
d611391bea | ||
|
|
0c547353cd | ||
|
|
5ce859f267 | ||
|
|
8e0da93476 | ||
|
|
3f7c22cfe0 | ||
|
|
55ee575c9c | ||
|
|
de6627ab32 | ||
|
|
f61a8371f4 | ||
|
|
9b586ae709 | ||
|
|
0bcdf5e0a3 | ||
|
|
64a43d3d40 | ||
|
|
679957b48c | ||
|
|
0399763888 | ||
|
|
3e3780028b | ||
|
|
1c9d19fc76 | ||
|
|
ecdb1e9fee | ||
|
|
b9e5126ab4 | ||
|
|
a34fddc866 | ||
|
|
9b3bfd3d1c | ||
|
|
74000551e6 | ||
|
|
325ee16d39 | ||
|
|
37761bf6e7 | ||
|
|
ad57ce7790 | ||
|
|
169f799a23 | ||
|
|
942d1130a1 | ||
|
|
64cc20aed2 | ||
|
|
3a6731ec8d | ||
|
|
e6f11a17b9 | ||
|
|
cc1cd610e7 | ||
|
|
6a3b5ee844 | ||
|
|
49b119571e | ||
|
|
e024e3deb0 | ||
|
|
f1f907ee33 | ||
|
|
e3f20459dd | ||
|
|
da567a9d6c | ||
|
|
01a4fb57df | ||
|
|
7ccedb559d | ||
|
|
01d52143e8 | ||
|
|
35461ba926 | ||
|
|
b9f49cad45 | ||
|
|
d7487c6d5c | ||
|
|
15122387f4 | ||
|
|
103daf000d | ||
|
|
70df456307 | ||
|
|
375174ee41 | ||
|
|
931064a695 | ||
|
|
49c8a5a375 | ||
|
|
ab9f9701d8 | ||
|
|
da4abcfce2 | ||
|
|
4149549c88 | ||
|
|
fa8cd4a2f0 | ||
|
|
423dc7a6bf | ||
|
|
f19beba014 | ||
|
|
865756e4b2 | ||
|
|
41f834db08 | ||
|
|
2c94753a5a | ||
|
|
557954a259 | ||
|
|
38b72c8c72 | ||
|
|
3f395e816f | ||
|
|
0e05c77fa7 | ||
|
|
6dcc77243a | ||
|
|
110ffe52b7 | ||
|
|
2fab51ea9b | ||
|
|
425f00860f | ||
|
|
793c152b26 | ||
|
|
9df75f551c | ||
|
|
da49280ef2 | ||
|
|
e6087d5129 | ||
|
|
d91a3080d5 | ||
|
|
0485e5192b | ||
|
|
4f9bff20c8 | ||
|
|
683f1ac10a | ||
|
|
e844d2995a | ||
|
|
c0af3d19cd | ||
|
|
78d20e8340 | ||
|
|
6a90caee04 | ||
|
|
98c95a94bc | ||
|
|
d4dc4a30b8 | ||
|
|
70d2dc089c | ||
|
|
8698ad3054 | ||
|
|
7531c83379 | ||
|
|
6188f175ae | ||
|
|
189fab2401 | ||
|
|
a3adba1941 | ||
|
|
cea41af1b8 | ||
|
|
a325070f7f | ||
|
|
d782c54c2c | ||
|
|
58917fbc4d | ||
|
|
8b0547aeb9 | ||
|
|
9efc101161 | ||
|
|
691e8a940b | ||
|
|
bee7623eaf | ||
|
|
430697879f | ||
|
|
749974654a | ||
|
|
f31a661aaf | ||
|
|
70ea3acb05 | ||
|
|
81547563c6 | ||
|
|
c107f2f497 | ||
|
|
5fea2131cd | ||
|
|
d671df30a3 | ||
|
|
3aca96148d | ||
|
|
100b75a5d2 | ||
|
|
7dba36d210 | ||
|
|
0dea5c9877 | ||
|
|
1777dfe821 | ||
|
|
2b6edfb96d | ||
|
|
faa3c99965 | ||
|
|
1cc5a0a094 | ||
|
|
cbafbd44a4 | ||
|
|
f16a804758 | ||
|
|
c30e1bb43a | ||
|
|
31051086ba | ||
|
|
67d3c852dd | ||
|
|
4ea9b10fc4 | ||
|
|
e609f4e0e0 | ||
|
|
b9ee2611a3 | ||
|
|
8de3c41958 | ||
|
|
2a350a9bbe | ||
|
|
89c4c09481 | ||
|
|
a97b023504 | ||
|
|
4aa7152ab4 | ||
|
|
80ff8ddb12 | ||
|
|
45aeeaa069 | ||
|
|
0c24db72c6 | ||
|
|
95c4d72b74 | ||
|
|
1330c0e7a3 | ||
|
|
9af22bcf9f | ||
|
|
d24214c463 | ||
|
|
e8101dd433 | ||
|
|
94bd343eed | ||
|
|
f409633ade | ||
|
|
e927418535 | ||
|
|
be9f9d68db | ||
|
|
ba401877e8 | ||
|
|
77748a951b | ||
|
|
4692526e48 | ||
|
|
eb4b8555c2 | ||
|
|
6a12ca78d1 | ||
|
|
2ed53f8e50 | ||
|
|
615e3bfa3d | ||
|
|
e406bdbc2c | ||
|
|
7fd402aade | ||
|
|
e8522a4a6d | ||
|
|
eb872ddbf6 | ||
|
|
1b1c1bdd5e | ||
|
|
b2f950ebe4 | ||
|
|
8501dcc34e | ||
|
|
9fd1d76fd8 | ||
|
|
3a002cce9e | ||
|
|
416ddf3d34 | ||
|
|
e0f8d1ea9e | ||
|
|
be886b108c | ||
|
|
8b0a19c6a2 | ||
|
|
757fa1b768 | ||
|
|
736d829bd0 | ||
|
|
6829d5351d | ||
|
|
cbcddfbcd1 | ||
|
|
7d531d18d4 | ||
|
|
eee8ed70e7 | ||
|
|
805eb87754 | ||
|
|
e910ec4a51 | ||
|
|
4f425fb99a | ||
|
|
9395a456f0 | ||
|
|
a8256b461a | ||
|
|
3494bce2b8 | ||
|
|
4c0ace1d84 | ||
|
|
cae26e7fe0 | ||
|
|
b6b3e83c1e | ||
|
|
7d47fcf4e9 | ||
|
|
b857c9e4d9 | ||
|
|
25de4326d2 | ||
|
|
257f4f2b5b | ||
|
|
e4a6bd0a1f | ||
|
|
4ab0fbf36b | ||
|
|
8d070349a6 | ||
|
|
d1379935b7 | ||
|
|
64c5fe3157 | ||
|
|
ddf977f665 | ||
|
|
166697d791 | ||
|
|
90d93b733d | ||
|
|
272d2e94a1 | ||
|
|
f84a401714 | ||
|
|
f6b19d40b1 | ||
|
|
969b7ba492 | ||
|
|
c9edec6308 | ||
|
|
9f0ff1348c | ||
|
|
c85d62fc66 | ||
|
|
dae51a8d3e | ||
|
|
d522534a12 | ||
|
|
a3ee2fb69c | ||
|
|
143eafa24a | ||
|
|
a38308a24a | ||
|
|
b981960221 | ||
|
|
67fff17f06 | ||
|
|
5ada8e529c | ||
|
|
22a3654dfd | ||
|
|
9a94c650da | ||
|
|
ddaeb054d0 | ||
|
|
7d1461a752 | ||
|
|
0a3611b94a | ||
|
|
0db439c80d | ||
|
|
99103bc419 | ||
|
|
fcf9f30af0 | ||
|
|
beab927f64 | ||
|
|
91f2f34cd3 | ||
|
|
24a589fe41 | ||
|
|
b1d28a46c3 | ||
|
|
a44f61b507 | ||
|
|
fc567d2fbb | ||
|
|
12e0c7fd7b | ||
|
|
7e77e56e7f | ||
|
|
46706c633e | ||
|
|
6b376fbfbb | ||
|
|
c532b1f94f | ||
|
|
26ab7f5580 | ||
|
|
72c638ca6f | ||
|
|
5478b7d550 | ||
|
|
ea8ab582eb | ||
|
|
73e4f22256 | ||
|
|
a173e66a59 | ||
|
|
cad75408c3 | ||
|
|
cd93d9c697 | ||
|
|
ce869950c3 | ||
|
|
55bd417105 | ||
|
|
ed4592ae0c | ||
|
|
7c30204dd7 | ||
|
|
e6eacc48d6 | ||
|
|
0259e000e3 | ||
|
|
eb0a95f594 | ||
|
|
41ee8cf66f | ||
|
|
8c8834e6aa | ||
|
|
b52d61b6db | ||
|
|
1bed90b804 | ||
|
|
5eabf6869d | ||
|
|
4ee5d348bf | ||
|
|
252a7207f6 | ||
|
|
abc2dc8437 | ||
|
|
145abfa344 | ||
|
|
f60e61e331 | ||
|
|
fd534aba95 | ||
|
|
f23c99f5ea | ||
|
|
1a14cc9513 | ||
|
|
e98131ce7a | ||
|
|
7cff47efab | ||
|
|
27fe267181 | ||
|
|
1dcc3e06d4 | ||
|
|
9125921038 | ||
|
|
5f184693ca | ||
|
|
6087668e26 | ||
|
|
eea2a2c252 | ||
|
|
9554c69a39 | ||
|
|
506ab0f0c7 | ||
|
|
3e26ca5c68 | ||
|
|
3fa8a9f27e | ||
|
|
0cdff07e4b | ||
|
|
8a142c3b11 | ||
|
|
20ca7151d1 | ||
|
|
15abe9f24b | ||
|
|
754b7c3376 | ||
|
|
00b02248d3 | ||
|
|
fda302ebb6 | ||
|
|
70cd675aa1 | ||
|
|
960db5aaab | ||
|
|
8daf43d6e8 | ||
|
|
114ca55b26 | ||
|
|
59f5219c0b | ||
|
|
bc465c7b2f | ||
|
|
bf1b2db415 | ||
|
|
9085756fca | ||
|
|
db43bd1962 | ||
|
|
3c13c06ce1 | ||
|
|
830a385bda | ||
|
|
c92c19d9b2 | ||
|
|
8fe6f5c141 | ||
|
|
39ab8b00c4 | ||
|
|
d3164d3e0d | ||
|
|
beb1823a57 | ||
|
|
b6fa74c601 | ||
|
|
596b6c6f98 | ||
|
|
e6af0e3845 | ||
|
|
0eabf1f7c4 | ||
|
|
91111c7d74 | ||
|
|
7397f4c381 | ||
|
|
02ffb727d5 | ||
|
|
4ba769a49e | ||
|
|
ad71804b70 | ||
|
|
1bf9696a27 | ||
|
|
1bfe5bb6a0 | ||
|
|
b5e0055876 | ||
|
|
f6f6754669 | ||
|
|
752a25b1f8 | ||
|
|
8e8e4bb8bb | ||
|
|
06dc02d6b2 | ||
|
|
540daf2a38 | ||
|
|
9e671d93cb | ||
|
|
269be4e31a | ||
|
|
5969edc0b8 | ||
|
|
42176f42ed | ||
|
|
8c8bb159ea | ||
|
|
b9cf29a0ec | ||
|
|
5db9f33723 | ||
|
|
1ba09cc119 | ||
|
|
02bbe3fa13 | ||
|
|
6a3534da76 | ||
|
|
105a5f2bdc | ||
|
|
45543e9669 | ||
|
|
36bc96f192 | ||
|
|
516b345807 | ||
|
|
4a6d542965 | ||
|
|
fb9bbafd6e | ||
|
|
0c77ca91c1 | ||
|
|
0e44243e55 | ||
|
|
fbadf14b58 | ||
|
|
2558fe6c2b | ||
|
|
10fca9b5ae | ||
|
|
01f338e58b | ||
|
|
5e998796ab | ||
|
|
40231f45f6 | ||
|
|
b19b51c275 | ||
|
|
854877e685 | ||
|
|
028a8ddbda | ||
|
|
abb81209af | ||
|
|
578201c519 | ||
|
|
a5a23b366e | ||
|
|
ac57837f53 | ||
|
|
65b451b465 | ||
|
|
abff1136f9 | ||
|
|
3630172723 | ||
|
|
d241ee3cde | ||
|
|
6994f6bc1d | ||
|
|
25147f84ec | ||
|
|
c02523ee51 | ||
|
|
5cdc8302bb | ||
|
|
b095718545 | ||
|
|
0b53285b89 | ||
|
|
d1ea4360ca | ||
|
|
257372db5a | ||
|
|
855f20f2da | ||
|
|
8a4ffc5e0c | ||
|
|
5b3445a5b5 | ||
|
|
b05bff0fa0 | ||
|
|
51f0f943f7 | ||
|
|
11b42470b6 | ||
|
|
71e5e32206 | ||
|
|
6f44c8ba17 | ||
|
|
4f73e57ab2 | ||
|
|
1b529bba10 | ||
|
|
072cd00e59 | ||
|
|
4b03c1a8dd | ||
|
|
45a6564e17 | ||
|
|
f614413fb1 | ||
|
|
74153d79b8 | ||
|
|
edf06944e0 | ||
|
|
a02582e9f8 | ||
|
|
65641c1256 | ||
|
|
930e686cbd | ||
|
|
c4ff29beda | ||
|
|
cc839a1ae9 | ||
|
|
08309a6f04 | ||
|
|
10b4c3da05 | ||
|
|
6257f6ffb7 | ||
|
|
80f8a524ef | ||
|
|
6f3fc2fcab | ||
|
|
6a8b2b6338 | ||
|
|
fd1c6d718e | ||
|
|
5f2e683b6b | ||
|
|
5f4283ca3f | ||
|
|
9df03a73d9 | ||
|
|
6d813ebb2f | ||
|
|
f961413e94 | ||
|
|
17693b90b5 | ||
|
|
c11dd8bcae | ||
|
|
ef3913d91f | ||
|
|
569b7e78fe | ||
|
|
32b75250dc | ||
|
|
743fcbcfc1 | ||
|
|
748db37a1b | ||
|
|
a75650c045 | ||
|
|
ce9c469acc | ||
|
|
dc8958bee1 | ||
|
|
e405aab310 | ||
|
|
846c3e36cc | ||
|
|
b42a444a67 | ||
|
|
4771f890cb | ||
|
|
991ff88767 | ||
|
|
4fa7155fc3 | ||
|
|
9e49652f80 | ||
|
|
931865b61f | ||
|
|
f0088b256e | ||
|
|
a047d36bf1 | ||
|
|
ebcc814abf | ||
|
|
b83f3a291b | ||
|
|
e4ff6ed732 | ||
|
|
a67b084b52 | ||
|
|
dd3f38fe75 | ||
|
|
3184deb00e | ||
|
|
2847721584 | ||
|
|
894a298f45 | ||
|
|
17610663c1 | ||
|
|
12cf9da8fc | ||
|
|
c47e46263c | ||
|
|
e040a10096 | ||
|
|
ce6c43fb62 | ||
|
|
faf025d2c4 | ||
|
|
8e50742372 | ||
|
|
b0533f2f9b | ||
|
|
fd0d5813fb | ||
|
|
8cd79cdc20 | ||
|
|
d3abe4db3e | ||
|
|
71765f3542 | ||
|
|
1e326fe414 | ||
|
|
f06b3e8af0 | ||
|
|
4edd729850 | ||
|
|
8412aa19fb | ||
|
|
5f0eb73927 | ||
|
|
fd8411b475 | ||
|
|
f312f6028d | ||
|
|
f401b0f635 | ||
|
|
e22c89a0e9 | ||
|
|
e5691d0e98 | ||
|
|
4266029e84 | ||
|
|
849856df26 | ||
|
|
e398fc0b38 | ||
|
|
fb821ba0ef | ||
|
|
514c4106b1 | ||
|
|
3cf89aca10 | ||
|
|
9bf8b615dc | ||
|
|
cb8dd3bc99 | ||
|
|
1cd9caef4a | ||
|
|
1025829123 | ||
|
|
019a931b99 | ||
|
|
8398193a51 | ||
|
|
f560365ded | ||
|
|
ebc2902450 | ||
|
|
b9e806b818 | ||
|
|
dfd9f7b066 | ||
|
|
cb98b6723f | ||
|
|
dcf7d44d72 | ||
|
|
369c460837 | ||
|
|
e99ff005d6 | ||
|
|
c1d6e98349 | ||
|
|
497a4bbeb9 | ||
|
|
f47c806ebd | ||
|
|
bb2a0eb642 | ||
|
|
28fd1917ec | ||
|
|
cf0f7482f1 | ||
|
|
2475eadab9 | ||
|
|
97cf2e6372 | ||
|
|
2c12ce3edf | ||
|
|
daf343c5fd | ||
|
|
31eacad5fb | ||
|
|
54e147ce8e | ||
|
|
b217ac7ae7 | ||
|
|
0727a52b8a | ||
|
|
2c24017e96 | ||
|
|
0f5d37fc7c | ||
|
|
2b3e2039b8 | ||
|
|
748518f567 | ||
|
|
91980d91e8 | ||
|
|
630f2fbf4e | ||
|
|
394d7d73ed | ||
|
|
49a437b103 | ||
|
|
15b38241da | ||
|
|
e02594ba83 | ||
|
|
061fbfff65 | ||
|
|
a5aa6d74b5 | ||
|
|
8a9e150f64 | ||
|
|
44a68bab71 | ||
|
|
facbe08e20 | ||
|
|
728bb76a43 | ||
|
|
bdd9ff796a | ||
|
|
77a46a4ef6 | ||
|
|
a4225769f6 | ||
|
|
cf74187be1 | ||
|
|
454a05986c | ||
|
|
fa2fcf4f08 | ||
|
|
44d7f18428 | ||
|
|
da60b4a097 | ||
|
|
40d460b458 | ||
|
|
86652a8f1f | ||
|
|
e4caf4169f | ||
|
|
5cd7538ed5 | ||
|
|
bfbe19b49b | ||
|
|
45f8d2b1c8 | ||
|
|
8006d7663c | ||
|
|
17f875863c | ||
|
|
4a8ad3db1e | ||
|
|
71261fc767 | ||
|
|
58d1c94b79 | ||
|
|
761b974aa5 | ||
|
|
bd96a29200 | ||
|
|
1427dd989f | ||
|
|
b4281aaf83 | ||
|
|
418821d8d3 | ||
|
|
22968495fd | ||
|
|
ab3de1871c | ||
|
|
f691da53d7 | ||
|
|
25887c0595 | ||
|
|
644be2d59b | ||
|
|
3f880ef304 | ||
|
|
851cb28714 | ||
|
|
92b7439969 | ||
|
|
257e886d87 | ||
|
|
89c6964e30 | ||
|
|
bb6356cfa8 | ||
|
|
8728865b97 | ||
|
|
62bfc6f7b0 | ||
|
|
54ad7db2c1 | ||
|
|
ccbbebccef | ||
|
|
0a5b707fec | ||
|
|
fb3473459d | ||
|
|
d6929e5cf9 | ||
|
|
3207b69874 | ||
|
|
bd317858bf | ||
|
|
9d4c26fd29 | ||
|
|
f0d0550251 | ||
|
|
f132eacb83 | ||
|
|
b75e3a7848 | ||
|
|
79a7e60cfc | ||
|
|
673c660d26 | ||
|
|
8f03899302 | ||
|
|
20e0c948c4 | ||
|
|
8ccd4b5045 | ||
|
|
5b3207bc24 | ||
|
|
57314c56c8 | ||
|
|
4cd1e0a4a5 | ||
|
|
83e9a2bbfb | ||
|
|
46d2b7730e | ||
|
|
b7c2b5c294 | ||
|
|
7b9d140e74 | ||
|
|
0c6850d498 | ||
|
|
ffe02bf210 | ||
|
|
e78dd305f3 | ||
|
|
e12c83faf1 | ||
|
|
05102d3842 | ||
|
|
18767c54ce | ||
|
|
09dc35228f | ||
|
|
312c215813 | ||
|
|
95583dbe2c | ||
|
|
cf20b22404 | ||
|
|
73ba5a591d | ||
|
|
82ebeacea9 | ||
|
|
c0c71c3967 | ||
|
|
aa5a87a1fc | ||
|
|
302faa193a | ||
|
|
9fe3eeb823 | ||
|
|
a626bda1ab | ||
|
|
21f1700d6d | ||
|
|
e0f7ce5de9 | ||
|
|
76eecedfb5 | ||
|
|
8f216a2791 | ||
|
|
75e3d826a0 | ||
|
|
a57b8f6081 | ||
|
|
1cac34d2a0 | ||
|
|
e47bdd043e | ||
|
|
521c71733a | ||
|
|
963273853f | ||
|
|
c0c26a5a20 | ||
|
|
b7533457de | ||
|
|
388a7ceb16 | ||
|
|
8391365d05 | ||
|
|
6a7c3b472a | ||
|
|
f9efe44e1d | ||
|
|
7817ed2f7e | ||
|
|
79c71bd5d9 | ||
|
|
0ddb013e94 | ||
|
|
3b2e75db1d | ||
|
|
3c7fd0fa35 | ||
|
|
1e349214fe | ||
|
|
e689cef201 | ||
|
|
f58d9e49d8 | ||
|
|
1b8d501208 | ||
|
|
1842bb7105 | ||
|
|
d53706bd5d | ||
|
|
b0e01e13bf | ||
|
|
5587429475 | ||
|
|
1e6e843e05 | ||
|
|
4972418dc5 | ||
|
|
1f39ed9d4e | ||
|
|
57d7bda803 | ||
|
|
a088697812 | ||
|
|
2a15d19551 |
@@ -3,6 +3,11 @@ FROM python:3.10-alpine3.18
|
||||
#Install all dependencies.
|
||||
RUN apk add --no-cache postgresql-libs postgresql-client gettext zlib libjpeg libwebp libxml2-dev libxslt-dev openldap git yarn
|
||||
|
||||
# Fix libxml error from xmlsec https://github.com/xmlsec/python-xmlsec/issues/257#issuecomment-1738620862
|
||||
RUN echo "https://dl-cdn.alpinelinux.org/alpine/v3.15/community/" | tee -a /etc/apk/repositories
|
||||
RUN echo "https://dl-cdn.alpinelinux.org/alpine/v3.15/main" | tee -a /etc/apk/repositories
|
||||
RUN apk add --no-cache libxml2-dev=2.9.14-r2 xmlsec-dev=1.2.33-r0
|
||||
|
||||
#Print all logs without buffering it.
|
||||
ENV PYTHONUNBUFFERED 1
|
||||
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
"ms-python.python"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
"containerEnv": {
|
||||
"CSRF_TRUSTED_ORIGINS": "http://localhost:8000,http://localhost:8080"
|
||||
}
|
||||
|
||||
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
||||
|
||||
@@ -29,3 +29,4 @@ vue/babel.config*
|
||||
vue/package.json
|
||||
vue/tsconfig.json
|
||||
vue/src/utils/openapi
|
||||
venv
|
||||
@@ -6,6 +6,9 @@
|
||||
# random secret key, use for example `base64 /dev/urandom | head -c50` to generate one
|
||||
SECRET_KEY=
|
||||
|
||||
# your default timezone See https://timezonedb.com/time-zones for a list of timezones
|
||||
TZ=Europe/Berlin
|
||||
|
||||
# allowed hosts (see documentation), should be set to your hostname(s) but might be * (default) for some proxies/providers
|
||||
# ALLOWED_HOSTS=recipes.mydomain.com
|
||||
|
||||
|
||||
2
.github/dependabot.yml
vendored
2
.github/dependabot.yml
vendored
@@ -16,7 +16,7 @@ updates:
|
||||
interval: "monthly"
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/vue/"
|
||||
directory: "/vue3/"
|
||||
schedule:
|
||||
interval: "monthly"
|
||||
|
||||
|
||||
110
.github/workflows/build-docker-open-data.yml
vendored
110
.github/workflows/build-docker-open-data.yml
vendored
@@ -1,110 +0,0 @@
|
||||
name: Build Docker Container with open data plugin installed
|
||||
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
build-container:
|
||||
name: Build ${{ matrix.name }} Container
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository_owner == 'TandoorRecipes'
|
||||
continue-on-error: ${{ matrix.continue-on-error }}
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
# Standard build config
|
||||
- name: Standard
|
||||
dockerfile: Dockerfile
|
||||
platforms: linux/amd64,linux/arm64
|
||||
suffix: ""
|
||||
continue-on-error: false
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Get version number
|
||||
id: get_version
|
||||
run: |
|
||||
if [[ "$GITHUB_REF" = refs/tags/* ]]; then
|
||||
echo "VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT
|
||||
elif [[ "$GITHUB_REF" = refs/heads/beta ]]; then
|
||||
echo VERSION=beta >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo VERSION=develop >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
# clone open data plugin
|
||||
- name: clone open data plugin repo
|
||||
uses: actions/checkout@master
|
||||
with:
|
||||
repository: TandoorRecipes/open_data_plugin
|
||||
ref: master
|
||||
path: ./recipes/plugins/open_data_plugin
|
||||
|
||||
# Build Vue frontend
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '18'
|
||||
cache: yarn
|
||||
cache-dependency-path: vue/yarn.lock
|
||||
- name: Install dependencies
|
||||
working-directory: ./vue
|
||||
run: yarn install --frozen-lockfile
|
||||
- name: Build dependencies
|
||||
working-directory: ./vue
|
||||
run: yarn build
|
||||
|
||||
- name: Setup Open Data Plugin Links
|
||||
working-directory: ./recipes/plugins/open_data_plugin
|
||||
run: python setup_repo.py
|
||||
|
||||
- name: Build Open Data Frontend
|
||||
working-directory: ./recipes/plugins/open_data_plugin/vue
|
||||
run: yarn build
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Set up Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
if: github.secret_source == 'Actions'
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
if: github.secret_source == 'Actions'
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ github.token }}
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: |
|
||||
vabene1111/recipes
|
||||
ghcr.io/TandoorRecipes/recipes
|
||||
flavor: |
|
||||
latest=false
|
||||
suffix=${{ matrix.suffix }}
|
||||
tags: |
|
||||
type=raw,value=latest,suffix=-open-data-plugin,enable=${{ startsWith(github.ref, 'refs/tags/') }}
|
||||
type=semver,suffix=-open-data-plugin,pattern={{version}}
|
||||
type=semver,suffix=-open-data-plugin,pattern={{major}}.{{minor}}
|
||||
type=semver,suffix=-open-data-plugin,pattern={{major}}
|
||||
type=ref,suffix=-open-data-plugin,event=branch
|
||||
- name: Build and Push
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
file: ${{ matrix.dockerfile }}
|
||||
pull: true
|
||||
push: ${{ github.secret_source == 'Actions' }}
|
||||
platforms: ${{ matrix.platforms }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
14
.github/workflows/build-docker.yml
vendored
14
.github/workflows/build-docker.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
# Standard build config
|
||||
- name: Standard
|
||||
dockerfile: Dockerfile
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
platforms: linux/amd64,linux/arm64
|
||||
suffix: ""
|
||||
continue-on-error: false
|
||||
steps:
|
||||
@@ -34,17 +34,17 @@ jobs:
|
||||
echo VERSION=develop >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
# Build Vue frontend
|
||||
# Build Vue 3 frontend
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '18'
|
||||
node-version: '22'
|
||||
cache: yarn
|
||||
cache-dependency-path: vue/yarn.lock
|
||||
cache-dependency-path: vue3/yarn.lock
|
||||
- name: Install dependencies
|
||||
working-directory: ./vue
|
||||
working-directory: ./vue3
|
||||
run: yarn install --frozen-lockfile
|
||||
- name: Build dependencies
|
||||
working-directory: ./vue
|
||||
working-directory: ./vue3
|
||||
run: yarn build
|
||||
|
||||
- name: Set up QEMU
|
||||
@@ -123,4 +123,4 @@ jobs:
|
||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_BETA_WEBHOOK }}
|
||||
uses: Ilshidur/action-discord@0.3.2
|
||||
with:
|
||||
args: '🚀 The BETA Image has been updated! 🥳'
|
||||
args: '🚀 The Tandoor 2 Image has been updated! 🥳'
|
||||
|
||||
20
.github/workflows/ci.yml
vendored
20
.github/workflows/ci.yml
vendored
@@ -9,14 +9,13 @@ jobs:
|
||||
strategy:
|
||||
max-parallel: 4
|
||||
matrix:
|
||||
python-version: ["3.10"]
|
||||
node-version: ["18"]
|
||||
|
||||
python-version: ["3.12"]
|
||||
node-version: ["22"]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: awalsh128/cache-apt-pkgs-action@v1.4.2
|
||||
- uses: awalsh128/cache-apt-pkgs-action@v1.4.3
|
||||
with:
|
||||
packages: libsasl2-dev python3-dev libldap2-dev libssl-dev
|
||||
packages: libsasl2-dev python3-dev libxml2-dev libxmlsec1-dev libxslt-dev libxmlsec1-openssl libxslt-dev libldap2-dev libssl-dev gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev openssl-dev libffi-dev cargo openldap-dev python3-dev xmlsec-dev xmlsec build-base g++ curl
|
||||
version: 1.0
|
||||
|
||||
# Setup python & dependencies
|
||||
@@ -37,10 +36,9 @@ jobs:
|
||||
with:
|
||||
path: |
|
||||
./cookbook/static
|
||||
./vue/webpack-stats.json
|
||||
./staticfiles
|
||||
key: |
|
||||
${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.node-version }}-collectstatic-${{ hashFiles('**/*.css', '**/*.js', 'vue/src/*') }}
|
||||
${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.node-version }}-collectstatic-${{ hashFiles('**/*.css', '**/*.js', 'vue3/src/*') }}
|
||||
|
||||
# Build Vue frontend & Dependencies
|
||||
- name: Set up Node ${{ matrix.node-version }}
|
||||
@@ -49,30 +47,28 @@ jobs:
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: "yarn"
|
||||
cache-dependency-path: ./vue/yarn.lock
|
||||
cache-dependency-path: ./vue3/yarn.lock
|
||||
|
||||
- name: Install Vue dependencies
|
||||
if: steps.django_cache.outputs.cache-hit != 'true'
|
||||
working-directory: ./vue
|
||||
working-directory: ./vue3
|
||||
run: yarn install
|
||||
|
||||
- name: Build Vue dependencies
|
||||
if: steps.django_cache.outputs.cache-hit != 'true'
|
||||
working-directory: ./vue
|
||||
working-directory: ./vue3
|
||||
run: yarn build
|
||||
|
||||
- name: Compile Django StaticFiles
|
||||
if: steps.django_cache.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
python3 manage.py collectstatic --noinput
|
||||
python3 manage.py collectstatic_js_reverse
|
||||
|
||||
- uses: actions/cache/save@v4
|
||||
if: steps.django_cache.outputs.cache-hit != 'true'
|
||||
with:
|
||||
path: |
|
||||
./cookbook/static
|
||||
./vue/webpack-stats.json
|
||||
./staticfiles
|
||||
key: |
|
||||
${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.node-version }}-collectstatic-${{ hashFiles('**/*.css', '**/*.js', 'vue/src/*') }}
|
||||
|
||||
11
.gitignore
vendored
11
.gitignore
vendored
@@ -75,8 +75,10 @@ cookbook/static/vue
|
||||
vue/webpack-stats.json
|
||||
/docker-compose.override.yml
|
||||
vue/node_modules
|
||||
plugins
|
||||
vue3/node_modules
|
||||
/recipes/plugins
|
||||
vetur.config.js
|
||||
cookbook/static/vue
|
||||
vue/webpack-stats.json
|
||||
cookbook/templates/sw.js
|
||||
vue/.yarn
|
||||
vue3/.vite
|
||||
@@ -84,3 +86,8 @@ vue3/.vite
|
||||
# Configs
|
||||
vetur.config.js
|
||||
venv/
|
||||
.idea/easy-i18n.xml
|
||||
cookbook/static/vue3
|
||||
vue3/node_modules
|
||||
cookbook/tests/other/docs/reports/tests/tests.html
|
||||
cookbook/tests/other/docs/reports/tests/pytest.xml
|
||||
|
||||
6
.idea/prettier.xml
generated
Normal file
6
.idea/prettier.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="PrettierConfiguration">
|
||||
<option name="myConfigurationMode" value="AUTOMATIC" />
|
||||
</component>
|
||||
</project>
|
||||
2
.idea/recipes.iml
generated
2
.idea/recipes.iml
generated
@@ -18,7 +18,7 @@
|
||||
<excludeFolder url="file://$MODULE_DIR$/staticfiles" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.12 (recipes)" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="TemplatesService">
|
||||
|
||||
2
.idea/vcs.xml
generated
2
.idea/vcs.xml
generated
@@ -2,5 +2,7 @@
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/recipes/plugins/enterprise_plugin" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/recipes/plugins/open_data_plugin" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
62
.idea/watcherTasks.xml
generated
62
.idea/watcherTasks.xml
generated
@@ -5,7 +5,7 @@
|
||||
<option name="arguments" value="-m flake8 $FilePath$ --config $ContentRoot$\.flake8" />
|
||||
<option name="checkSyntaxErrors" value="true" />
|
||||
<option name="description" />
|
||||
<option name="exitCodeBehavior" value="ALWAYS" />
|
||||
<option name="exitCodeBehavior" value="NEVER" />
|
||||
<option name="fileExtension" value="py" />
|
||||
<option name="immediateSync" value="false" />
|
||||
<option name="name" value="Flake8 Watcher" />
|
||||
@@ -27,5 +27,65 @@
|
||||
<option name="workingDir" value="" />
|
||||
<envs />
|
||||
</TaskOptions>
|
||||
<TaskOptions isEnabled="false">
|
||||
<option name="arguments" value="-m isort $FilePath$" />
|
||||
<option name="checkSyntaxErrors" value="true" />
|
||||
<option name="description" />
|
||||
<option name="exitCodeBehavior" value="ERROR" />
|
||||
<option name="fileExtension" value="py" />
|
||||
<option name="immediateSync" value="false" />
|
||||
<option name="name" value="isort Watcher" />
|
||||
<option name="output" value="$FilePath$" />
|
||||
<option name="outputFilters">
|
||||
<array />
|
||||
</option>
|
||||
<option name="outputFromStdout" value="false" />
|
||||
<option name="program" value="$PyInterpreterDirectory$/python" />
|
||||
<option name="runOnExternalChanges" value="false" />
|
||||
<option name="scopeName" value="Project Files" />
|
||||
<option name="trackOnlyRoot" value="false" />
|
||||
<option name="workingDir" value="" />
|
||||
<envs />
|
||||
</TaskOptions>
|
||||
<TaskOptions isEnabled="false">
|
||||
<option name="arguments" value="-m yapf -i $FilePath$" />
|
||||
<option name="checkSyntaxErrors" value="true" />
|
||||
<option name="description" />
|
||||
<option name="exitCodeBehavior" value="NEVER" />
|
||||
<option name="fileExtension" value="py" />
|
||||
<option name="immediateSync" value="false" />
|
||||
<option name="name" value="YAPF" />
|
||||
<option name="output" value="$FilePath$" />
|
||||
<option name="outputFilters">
|
||||
<array />
|
||||
</option>
|
||||
<option name="outputFromStdout" value="false" />
|
||||
<option name="program" value="$PyInterpreterDirectory$/python" />
|
||||
<option name="runOnExternalChanges" value="false" />
|
||||
<option name="scopeName" value="Project Files" />
|
||||
<option name="trackOnlyRoot" value="false" />
|
||||
<option name="workingDir" value="" />
|
||||
<envs />
|
||||
</TaskOptions>
|
||||
<TaskOptions isEnabled="false">
|
||||
<option name="arguments" value="--cwd $ProjectFileDir$\vue prettier -w --config $ProjectFileDir$\.prettierrc $FilePath$" />
|
||||
<option name="checkSyntaxErrors" value="true" />
|
||||
<option name="description" />
|
||||
<option name="exitCodeBehavior" value="ERROR" />
|
||||
<option name="fileExtension" value="*" />
|
||||
<option name="immediateSync" value="true" />
|
||||
<option name="name" value="Prettier" />
|
||||
<option name="output" value="" />
|
||||
<option name="outputFilters">
|
||||
<array />
|
||||
</option>
|
||||
<option name="outputFromStdout" value="false" />
|
||||
<option name="program" value="yarn" />
|
||||
<option name="runOnExternalChanges" value="true" />
|
||||
<option name="scopeName" value="Prettier" />
|
||||
<option name="trackOnlyRoot" value="false" />
|
||||
<option name="workingDir" value="" />
|
||||
<envs />
|
||||
</TaskOptions>
|
||||
</component>
|
||||
</project>
|
||||
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@@ -24,7 +24,7 @@
|
||||
"console": "integratedTerminal",
|
||||
"env": {
|
||||
// coverage and pytest can't both be running at the same time
|
||||
"PYTEST_ADDOPTS": "--no-cov"
|
||||
"PYTEST_ADDOPTS": "--no-cov -n 0"
|
||||
},
|
||||
"django": true,
|
||||
"justMyCode": true
|
||||
|
||||
202
.vscode/tasks.json
vendored
202
.vscode/tasks.json
vendored
@@ -1,75 +1,131 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Run Migrations",
|
||||
"type": "shell",
|
||||
"command": "python3 manage.py migrate",
|
||||
},
|
||||
{
|
||||
"label": "Collect Static Files",
|
||||
"type": "shell",
|
||||
"command": "python3 manage.py collectstatic",
|
||||
"dependsOn": ["Yarn Build"],
|
||||
},
|
||||
{
|
||||
"label": "Setup Dev Server",
|
||||
"dependsOn": ["Run Migrations", "Yarn Build"],
|
||||
},
|
||||
{
|
||||
"label": "Run Dev Server",
|
||||
"type": "shell",
|
||||
"dependsOn": ["Setup Dev Server"],
|
||||
"command": "python3 manage.py runserver",
|
||||
},
|
||||
{
|
||||
"label": "Yarn Install",
|
||||
"type": "shell",
|
||||
"command": "yarn install",
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/vue"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Yarn Serve",
|
||||
"type": "shell",
|
||||
"command": "yarn serve",
|
||||
"dependsOn": ["Yarn Install"],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/vue"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Yarn Build",
|
||||
"type": "shell",
|
||||
"command": "yarn build",
|
||||
"dependsOn": ["Yarn Install"],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/vue"
|
||||
},
|
||||
"group": "build",
|
||||
},
|
||||
{
|
||||
"label": "Setup Tests",
|
||||
"dependsOn": ["Run Migrations", "Collect Static Files"],
|
||||
},
|
||||
{
|
||||
"label": "Run all pytests",
|
||||
"type": "shell",
|
||||
"command": "python3 -m pytest cookbook/tests",
|
||||
"dependsOn": ["Setup Tests"],
|
||||
"group": "test",
|
||||
},
|
||||
{
|
||||
"label": "Setup Documentation Dependencies",
|
||||
"type": "shell",
|
||||
"command": "pip install mkdocs-material mkdocs-include-markdown-plugin",
|
||||
},
|
||||
{
|
||||
"label": "Serve Documentation",
|
||||
"type": "shell",
|
||||
"command": "mkdocs serve",
|
||||
"dependsOn": ["Setup Documentation Dependencies"],
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Run Migrations",
|
||||
"type": "shell",
|
||||
"command": "python3 manage.py migrate"
|
||||
},
|
||||
{
|
||||
"label": "Collect Static Files",
|
||||
"type": "shell",
|
||||
"command": "python3 manage.py collectstatic",
|
||||
"dependsOn": ["Yarn Build"]
|
||||
},
|
||||
{
|
||||
"label": "Setup Dev Server",
|
||||
"dependsOn": ["Run Migrations", "Yarn Build"]
|
||||
},
|
||||
{
|
||||
"label": "Run Dev Server",
|
||||
"type": "shell",
|
||||
"dependsOn": ["Setup Dev Server"],
|
||||
"command": "python3 manage.py runserver"
|
||||
},
|
||||
{
|
||||
"label": "Yarn Install",
|
||||
"dependsOn": ["Yarn Install - Vue", "Yarn Install - Vue3"]
|
||||
},
|
||||
{
|
||||
"label": "Yarn Install - Vue",
|
||||
"type": "shell",
|
||||
"command": "yarn install --force",
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/vue"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Yarn Install - Vue3",
|
||||
"type": "shell",
|
||||
"command": "yarn install --force",
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/vue3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Generate API",
|
||||
"dependsOn": ["Generate API - Vue", "Generate API - Vue3"]
|
||||
},
|
||||
{
|
||||
"label": "Generate API - Vue",
|
||||
"type": "shell",
|
||||
"command": "openapi-generator-cli generate -g typescript-axios -i http://127.0.0.1:8000/openapi/",
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/vue/src/utils/openapi"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Generate API - Vue3",
|
||||
"type": "shell",
|
||||
"command": "openapi-generator-cli generate -g typescript-fetch -i http://127.0.0.1:8000/openapi/",
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/vue3/src/openapi"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Yarn Serve",
|
||||
"type": "shell",
|
||||
"command": "yarn serve",
|
||||
"dependsOn": ["Yarn Install - Vue"],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/vue"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Vite Serve",
|
||||
"type": "shell",
|
||||
"command": "vite",
|
||||
"dependsOn": ["Yarn Install - Vue3"],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/vue3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Yarn Build",
|
||||
"dependsOn": ["Yarn Build - Vue", "Vite Build - Vue3"],
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "Yarn Build - Vue",
|
||||
"type": "shell",
|
||||
"command": "yarn build",
|
||||
"dependsOn": ["Yarn Install - Vue"],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/vue"
|
||||
},
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "Vite Build - Vue3",
|
||||
"type": "shell",
|
||||
"command": "vite build",
|
||||
"dependsOn": ["Yarn Install - Vue3"],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/vue3"
|
||||
},
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "Setup Tests",
|
||||
"dependsOn": ["Run Migrations", "Collect Static Files"]
|
||||
},
|
||||
{
|
||||
"label": "Run all pytests",
|
||||
"type": "shell",
|
||||
"command": "python3 -m pytest cookbook/tests",
|
||||
"dependsOn": ["Setup Tests"],
|
||||
"group": "test"
|
||||
},
|
||||
{
|
||||
"label": "Setup Documentation Dependencies",
|
||||
"type": "shell",
|
||||
"command": "pip install mkdocs-material mkdocs-include-markdown-plugin"
|
||||
},
|
||||
{
|
||||
"label": "Serve Documentation",
|
||||
"type": "shell",
|
||||
"command": "mkdocs serve",
|
||||
"dependsOn": ["Setup Documentation Dependencies"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
28
Dockerfile
28
Dockerfile
@@ -1,7 +1,7 @@
|
||||
FROM python:3.12-alpine3.19
|
||||
FROM python:3.13-alpine3.21
|
||||
|
||||
#Install all dependencies.
|
||||
RUN apk add --no-cache postgresql-libs postgresql-client gettext zlib libjpeg libwebp libxml2-dev libxslt-dev openldap git
|
||||
RUN apk add --no-cache postgresql-libs postgresql-client gettext zlib libjpeg libwebp libxml2-dev libxslt-dev openldap git libgcc libstdc++ nginx
|
||||
|
||||
#Print all logs without buffering it.
|
||||
ENV PYTHONUNBUFFERED 1
|
||||
@@ -9,7 +9,7 @@ ENV PYTHONUNBUFFERED 1
|
||||
ENV DOCKER true
|
||||
|
||||
#This port will be used by gunicorn.
|
||||
EXPOSE 8080
|
||||
EXPOSE 80 8080
|
||||
|
||||
#Create app dir and install requirements.
|
||||
RUN mkdir /opt/recipes
|
||||
@@ -21,20 +21,36 @@ RUN \
|
||||
if [ `apk --print-arch` = "armv7" ]; then \
|
||||
printf "[global]\nextra-index-url=https://www.piwheels.org/simple\n" > /etc/pip.conf ; \
|
||||
fi
|
||||
|
||||
# remove Development dependencies from requirements.txt
|
||||
RUN sed -i '/# Development/,$d' requirements.txt
|
||||
RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev openssl-dev libffi-dev cargo openldap-dev python3-dev && \
|
||||
RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev openssl-dev libffi-dev cargo openldap-dev python3-dev xmlsec-dev xmlsec build-base g++ curl && \
|
||||
echo -n "INPUT ( libldap.so )" > /usr/lib/libldap_r.so && \
|
||||
python -m venv venv && \
|
||||
/opt/recipes/venv/bin/python -m pip install --upgrade pip && \
|
||||
venv/bin/pip install wheel==0.42.0 && \
|
||||
venv/bin/pip install setuptools_rust==1.9.0 && \
|
||||
venv/bin/pip debug -v && \
|
||||
venv/bin/pip install wheel==0.45.1 && \
|
||||
venv/bin/pip install setuptools_rust==1.10.2 && \
|
||||
if [ `apk --print-arch` = "aarch64" ]; then \
|
||||
curl https://sh.rustup.rs -sSf | sh -s -- -y; \
|
||||
fi &&\
|
||||
venv/bin/pip install -r requirements.txt --no-cache-dir &&\
|
||||
apk --purge del .build-deps
|
||||
|
||||
#Copy project and execute it.
|
||||
COPY . ./
|
||||
|
||||
# delete default nginx config and link it to tandoors config
|
||||
RUN rm -rf /etc/nginx/http.d
|
||||
RUN ln -s /opt/recipes/http.d /etc/nginx/http.d
|
||||
|
||||
# commented for now https://github.com/TandoorRecipes/recipes/issues/3478
|
||||
#HEALTHCHECK --interval=30s \
|
||||
# --timeout=5s \
|
||||
# --start-period=10s \
|
||||
# --retries=3 \
|
||||
# CMD [ "/usr/bin/wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:8080/openapi" ]
|
||||
|
||||
# collect information from git repositories
|
||||
RUN /opt/recipes/venv/bin/python version.py
|
||||
# delete git repositories to reduce image size
|
||||
|
||||
@@ -71,7 +71,7 @@ Because of that there are several ways you can support us
|
||||
- **Let us host for you** We are offering a [hosted version](https://app.tandoor.dev) where all profits support us and the development of tandoor (currently only available in germany).
|
||||
|
||||
## Contributing
|
||||
Contributions are welcome but please read [this](https://docs.tandoor.dev/contribute/#contributing-code) **BEFORE** contributing anything!
|
||||
Contributions are welcome but please read [this](https://docs.tandoor.dev/contribute/guidelines/) **BEFORE** contributing anything!
|
||||
|
||||
## Your Feedback
|
||||
|
||||
|
||||
34
boot.sh
34
boot.sh
@@ -5,7 +5,11 @@ TANDOOR_PORT="${TANDOOR_PORT:-8080}"
|
||||
GUNICORN_WORKERS="${GUNICORN_WORKERS:-3}"
|
||||
GUNICORN_THREADS="${GUNICORN_THREADS:-2}"
|
||||
GUNICORN_LOG_LEVEL="${GUNICORN_LOG_LEVEL:-'info'}"
|
||||
NGINX_CONF_FILE=/opt/recipes/nginx/conf.d/Recipes.conf
|
||||
|
||||
if [ "${TANDOOR_PORT}" -eq 80 ]; then
|
||||
echo "TANDOOR_PORT set to 8080 because 80 is now taken by the integrated nginx"
|
||||
TANDOOR_PORT=8080
|
||||
fi
|
||||
|
||||
display_warning() {
|
||||
echo "[WARNING]"
|
||||
@@ -14,11 +18,6 @@ display_warning() {
|
||||
|
||||
echo "Checking configuration..."
|
||||
|
||||
# Nginx config file must exist if gunicorn is not active
|
||||
if [ ! -f "$NGINX_CONF_FILE" ] && [ $GUNICORN_MEDIA -eq 0 ]; then
|
||||
display_warning "Nginx configuration file could not be found at the default location!\nPath: ${NGINX_CONF_FILE}"
|
||||
fi
|
||||
|
||||
# SECRET_KEY (or a valid file at SECRET_KEY_FILE) must be set in .env file
|
||||
|
||||
if [ -f "${SECRET_KEY_FILE}" ]; then
|
||||
@@ -29,6 +28,21 @@ if [ -z "${SECRET_KEY}" ]; then
|
||||
display_warning "The environment variable 'SECRET_KEY' (or 'SECRET_KEY_FILE' that points to an existing file) is not set but REQUIRED for running Tandoor!"
|
||||
fi
|
||||
|
||||
if [ -f "${AUTH_LDAP_BIND_PASSWORD_FILE}" ]; then
|
||||
export AUTH_LDAP_BIND_PASSWORD=$(cat "$AUTH_LDAP_BIND_PASSWORD_FILE")
|
||||
fi
|
||||
|
||||
if [ -f "${EMAIL_HOST_PASSWORD_FILE}" ]; then
|
||||
export EMAIL_HOST_PASSWORD=$(cat "$EMAIL_HOST_PASSWORD_FILE")
|
||||
fi
|
||||
|
||||
if [ -f "${SOCIALACCOUNT_PROVIDERS_FILE}" ]; then
|
||||
export SOCIALACCOUNT_PROVIDERS=$(cat "$SOCIALACCOUNT_PROVIDERS_FILE")
|
||||
fi
|
||||
|
||||
if [ -f "${S3_SECRET_ACCESS_KEY_FILE}" ]; then
|
||||
export S3_SECRET_ACCESS_KEY=$(cat "$S3_SECRET_ACCESS_KEY_FILE")
|
||||
fi
|
||||
|
||||
echo "Waiting for database to be ready..."
|
||||
|
||||
@@ -69,7 +83,6 @@ python manage.py migrate
|
||||
|
||||
echo "Collecting static files, this may take a while..."
|
||||
|
||||
python manage.py collectstatic_js_reverse
|
||||
python manage.py collectstatic --noinput
|
||||
|
||||
echo "Done"
|
||||
@@ -78,9 +91,14 @@ chmod -R 755 /opt/recipes/mediafiles
|
||||
|
||||
ipv6_disable=$(cat /sys/module/ipv6/parameters/disable)
|
||||
|
||||
# start nginx
|
||||
echo "Starting nginx"
|
||||
nginx
|
||||
|
||||
echo "Starting gunicorn"
|
||||
# Check if IPv6 is enabled, only then run gunicorn with ipv6 support
|
||||
if [ "$ipv6_disable" -eq 0 ]; then
|
||||
exec gunicorn -b "[::]:$TANDOOR_PORT" --workers $GUNICORN_WORKERS --threads $GUNICORN_THREADS --access-logfile - --error-logfile - --log-level $GUNICORN_LOG_LEVEL recipes.wsgi
|
||||
else
|
||||
exec gunicorn -b ":$TANDOOR_PORT" --workers $GUNICORN_WORKERS --threads $GUNICORN_THREADS --access-logfile - --error-logfile - --log-level $GUNICORN_LOG_LEVEL recipes.wsgi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -7,10 +7,11 @@ from django.utils import translation
|
||||
from django_scopes import scopes_disabled
|
||||
from treebeard.admin import TreeAdmin
|
||||
from treebeard.forms import movenodeform_factory
|
||||
from allauth.account.decorators import secure_admin_login
|
||||
|
||||
from cookbook.managers import DICTIONARY
|
||||
|
||||
from .models import (BookmarkletImport, Comment, CookLog, Food, ImportLog, Ingredient, InviteLink,
|
||||
from .models import (BookmarkletImport, Comment, CookLog, CustomFilter, Food, ImportLog, Ingredient, InviteLink,
|
||||
Keyword, MealPlan, MealType, NutritionInformation, Property, PropertyType,
|
||||
Recipe, RecipeBook, RecipeBookEntry, RecipeImport, SearchPreference, ShareLink,
|
||||
ShoppingListEntry, ShoppingListRecipe, Space, Step, Storage,
|
||||
@@ -18,6 +19,8 @@ from .models import (BookmarkletImport, Comment, CookLog, Food, ImportLog, Ingre
|
||||
TelegramBot, Unit, UnitConversion, UserFile, UserPreference, UserSpace,
|
||||
ViewLog, ConnectorConfig)
|
||||
|
||||
admin.site.login = secure_admin_login(admin.site.login)
|
||||
|
||||
|
||||
class CustomUserAdmin(UserAdmin):
|
||||
def has_add_permission(self, request, obj=None):
|
||||
@@ -103,6 +106,13 @@ class ConnectorConfigAdmin(admin.ModelAdmin):
|
||||
admin.site.register(ConnectorConfig, ConnectorConfigAdmin)
|
||||
|
||||
|
||||
class CustomFilterAdmin(admin.ModelAdmin):
|
||||
list_display = ('id', 'type', 'name')
|
||||
|
||||
|
||||
admin.site.register(CustomFilter, CustomFilterAdmin)
|
||||
|
||||
|
||||
class SyncAdmin(admin.ModelAdmin):
|
||||
list_display = ('storage', 'path', 'active', 'last_checked')
|
||||
search_fields = ('storage__name', 'path')
|
||||
|
||||
@@ -16,15 +16,11 @@ class CookbookConfig(AppConfig):
|
||||
import cookbook.signals # noqa
|
||||
|
||||
if not settings.DISABLE_EXTERNAL_CONNECTORS:
|
||||
try:
|
||||
from cookbook.connectors.connector_manager import ConnectorManager # Needs to be here to prevent loading race condition of oauth2 modules in models.py
|
||||
handler = ConnectorManager()
|
||||
post_save.connect(handler, dispatch_uid="connector_manager")
|
||||
post_delete.connect(handler, dispatch_uid="connector_manager")
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
print('Failed to initialize connectors')
|
||||
pass
|
||||
from cookbook.connectors.connector_manager import ConnectorManager # Needs to be here to prevent loading race condition of oauth2 modules in models.py
|
||||
handler = ConnectorManager()
|
||||
post_save.connect(handler, dispatch_uid="post_save-connector_manager")
|
||||
post_delete.connect(handler, dispatch_uid="post_delete-connector_manager")
|
||||
|
||||
# if not settings.DISABLE_TREE_FIX_STARTUP:
|
||||
# # when starting up run fix_tree to:
|
||||
# # a) make sure that nodes are sorted when switching between sort modes
|
||||
@@ -45,4 +41,4 @@ class CookbookConfig(AppConfig):
|
||||
# except Exception:
|
||||
# if DEBUG:
|
||||
# traceback.print_exc()
|
||||
# pass # dont break startup just because fix could not run, need to investigate cases when this happens
|
||||
# pass # dont break startup just because fix could not run, need to investigate cases when this happens
|
||||
@@ -1,6 +1,43 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from dataclasses import dataclass
|
||||
from typing import Optional
|
||||
|
||||
from cookbook.models import ShoppingListEntry, Space, ConnectorConfig
|
||||
from cookbook.models import ShoppingListEntry, User, ConnectorConfig
|
||||
|
||||
|
||||
@dataclass
|
||||
class UserDTO:
|
||||
username: str
|
||||
first_name: Optional[str]
|
||||
|
||||
@staticmethod
|
||||
def create_from_user(instance: User) -> 'UserDTO':
|
||||
return UserDTO(
|
||||
username=instance.username,
|
||||
first_name=instance.first_name if instance.first_name else None
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class ShoppingListEntryDTO:
|
||||
food_name: str
|
||||
amount: Optional[float]
|
||||
base_unit: Optional[str]
|
||||
unit_name: Optional[str]
|
||||
created_by: UserDTO
|
||||
|
||||
@staticmethod
|
||||
def try_create_from_entry(instance: ShoppingListEntry) -> Optional['ShoppingListEntryDTO']:
|
||||
if instance.food is None or instance.created_by is None:
|
||||
return None
|
||||
|
||||
return ShoppingListEntryDTO(
|
||||
food_name=instance.food.name,
|
||||
amount=instance.amount if instance.amount else None,
|
||||
unit_name=instance.unit.name if instance.unit else None,
|
||||
base_unit=instance.unit.base_unit if instance.unit and instance.unit.base_unit else None,
|
||||
created_by=UserDTO.create_from_user(instance.created_by),
|
||||
)
|
||||
|
||||
|
||||
# A Connector is 'destroyed' & recreated each time 'any' ConnectorConfig in a space changes.
|
||||
@@ -10,20 +47,18 @@ class Connector(ABC):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
async def on_shopping_list_entry_created(self, space: Space, instance: ShoppingListEntry) -> None:
|
||||
async def on_shopping_list_entry_created(self, instance: ShoppingListEntryDTO) -> None:
|
||||
pass
|
||||
|
||||
# This method might not trigger on 'direct' entry updates: https://stackoverflow.com/a/35238823
|
||||
@abstractmethod
|
||||
async def on_shopping_list_entry_updated(self, space: Space, instance: ShoppingListEntry) -> None:
|
||||
async def on_shopping_list_entry_updated(self, instance: ShoppingListEntryDTO) -> None:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
async def on_shopping_list_entry_deleted(self, space: Space, instance: ShoppingListEntry) -> None:
|
||||
async def on_shopping_list_entry_deleted(self, instance: ShoppingListEntryDTO) -> None:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
async def close(self) -> None:
|
||||
pass
|
||||
|
||||
# TODO: Add Recipes & possibly Meal Place listeners/hooks (And maybe more?)
|
||||
|
||||
@@ -5,13 +5,14 @@ import threading
|
||||
from asyncio import Task
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
from logging import Logger
|
||||
from types import UnionType
|
||||
from typing import List, Any, Dict, Optional, Type
|
||||
|
||||
from django.conf import settings
|
||||
from django_scopes import scope
|
||||
|
||||
from cookbook.connectors.connector import Connector
|
||||
from cookbook.connectors.connector import Connector, ShoppingListEntryDTO
|
||||
from cookbook.connectors.homeassistant import HomeAssistant
|
||||
from cookbook.models import ShoppingListEntry, Space, ConnectorConfig
|
||||
|
||||
@@ -30,6 +31,15 @@ class Work:
|
||||
actionType: ActionType
|
||||
|
||||
|
||||
class Singleton(type):
|
||||
_instances = {}
|
||||
|
||||
def __call__(cls, *args, **kwargs):
|
||||
if cls not in cls._instances:
|
||||
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
|
||||
return cls._instances[cls]
|
||||
|
||||
|
||||
# The way ConnectionManager works is as follows:
|
||||
# 1. On init, it starts a worker & creates a queue for 'Work'
|
||||
# 2. Then any time its called, it verifies the type of action (create/update/delete) and if the item is of interest, pushes the Work (non-blocking) to the queue.
|
||||
@@ -38,20 +48,21 @@ class Work:
|
||||
# 3.2 If work is of type REGISTERED_CLASSES, it asynchronously fires of all connectors and wait for them to finish (runtime should depend on the 'slowest' connector)
|
||||
# 4. Work is marked as consumed, and next entry of the queue is consumed.
|
||||
# Each 'Work' is processed in sequential by the worker, so the throughput is about [workers * the slowest connector]
|
||||
class ConnectorManager:
|
||||
# The Singleton class is used for ConnectorManager to have a self-reference and so Python does not garbage collect it
|
||||
class ConnectorManager(metaclass=Singleton):
|
||||
_logger: Logger
|
||||
_queue: queue.Queue
|
||||
_listening_to_classes = REGISTERED_CLASSES | ConnectorConfig
|
||||
|
||||
def __init__(self):
|
||||
self._logger = logging.getLogger("recipes.connector")
|
||||
self._logger.debug("ConnectorManager initializing")
|
||||
self._queue = queue.Queue(maxsize=settings.EXTERNAL_CONNECTORS_QUEUE_SIZE)
|
||||
self._worker = threading.Thread(target=self.worker, args=(0, self._queue,), daemon=True)
|
||||
self._worker.start()
|
||||
|
||||
# Called by post save & post delete signals
|
||||
def __call__(self, instance: Any, **kwargs) -> None:
|
||||
if not isinstance(instance, self._listening_to_classes) or not hasattr(instance, "space"):
|
||||
return
|
||||
|
||||
action_type: ActionType
|
||||
if "created" in kwargs and kwargs["created"]:
|
||||
action_type = ActionType.CREATED
|
||||
@@ -62,22 +73,45 @@ class ConnectorManager:
|
||||
else:
|
||||
return
|
||||
|
||||
try:
|
||||
self._queue.put_nowait(Work(instance, action_type))
|
||||
except queue.Full:
|
||||
logging.info(f"queue was full, so skipping {action_type} of type {type(instance)}")
|
||||
return
|
||||
self._add_work(action_type, instance)
|
||||
|
||||
def _add_work(self, action_type: ActionType, *instances: REGISTERED_CLASSES):
|
||||
for instance in instances:
|
||||
if not isinstance(instance, self._listening_to_classes) or not hasattr(instance, "space"):
|
||||
continue
|
||||
try:
|
||||
_force_load_instance(instance)
|
||||
self._queue.put_nowait(Work(instance, action_type))
|
||||
except queue.Full:
|
||||
self._logger.info(f"queue was full, so skipping {action_type} of type {type(instance)}")
|
||||
|
||||
def stop(self):
|
||||
self._queue.join()
|
||||
self._worker.join()
|
||||
|
||||
@classmethod
|
||||
def is_initialized(cls):
|
||||
return cls in cls._instances
|
||||
|
||||
@staticmethod
|
||||
def add_work(action_type: ActionType, *instances: REGISTERED_CLASSES):
|
||||
"""
|
||||
Manually inject work that failed to come in through the __call__ (aka Django signal)
|
||||
Before the work is processed, we check if the connectionManager is initialized, because if it's not, we don't want to accidentally initialize it.
|
||||
Be careful calling it, because it might result in a instance being processed twice.
|
||||
"""
|
||||
if not ConnectorManager.is_initialized():
|
||||
return
|
||||
ConnectorManager()._add_work(action_type, *instances)
|
||||
|
||||
@staticmethod
|
||||
def worker(worker_id: int, worker_queue: queue.Queue):
|
||||
logger = logging.getLogger("recipes.connector.worker")
|
||||
|
||||
loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(loop)
|
||||
|
||||
logging.info(f"started ConnectionManager worker {worker_id}")
|
||||
logger.info(f"started ConnectionManager worker {worker_id}")
|
||||
|
||||
# When multiple workers are used, please make sure the cache is shared across all threads, otherwise it might lead to un-expected behavior.
|
||||
_connectors_cache: Dict[int, List[Connector]] = dict()
|
||||
@@ -91,6 +125,8 @@ class ConnectorManager:
|
||||
if item is None:
|
||||
break
|
||||
|
||||
logger.debug(f"received {item.instance=} with {item.actionType=}")
|
||||
|
||||
# If a Connector was changed/updated, refresh connector from the database for said space
|
||||
refresh_connector_cache = isinstance(item.instance, ConnectorConfig)
|
||||
|
||||
@@ -99,7 +135,7 @@ class ConnectorManager:
|
||||
|
||||
if connectors is None or refresh_connector_cache:
|
||||
if connectors is not None:
|
||||
loop.run_until_complete(close_connectors(connectors))
|
||||
loop.run_until_complete(_close_connectors(connectors))
|
||||
|
||||
with scope(space=space):
|
||||
connectors: List[Connector] = list()
|
||||
@@ -111,7 +147,7 @@ class ConnectorManager:
|
||||
try:
|
||||
connector: Optional[Connector] = ConnectorManager.get_connected_for_config(config)
|
||||
except BaseException:
|
||||
logging.exception(f"failed to initialize {config.name}")
|
||||
logger.exception(f"failed to initialize {config.name}")
|
||||
continue
|
||||
|
||||
if connector is not None:
|
||||
@@ -123,10 +159,12 @@ class ConnectorManager:
|
||||
worker_queue.task_done()
|
||||
continue
|
||||
|
||||
loop.run_until_complete(run_connectors(connectors, space, item.instance, item.actionType))
|
||||
logger.debug(f"running {len(connectors)} connectors for {item.instance=} with {item.actionType=}")
|
||||
|
||||
loop.run_until_complete(run_connectors(connectors, item.instance, item.actionType))
|
||||
worker_queue.task_done()
|
||||
|
||||
logging.info(f"terminating ConnectionManager worker {worker_id}")
|
||||
logger.info(f"terminating ConnectionManager worker {worker_id}")
|
||||
|
||||
asyncio.set_event_loop(None)
|
||||
loop.close()
|
||||
@@ -140,7 +178,14 @@ class ConnectorManager:
|
||||
return None
|
||||
|
||||
|
||||
async def close_connectors(connectors: List[Connector]):
|
||||
def _force_load_instance(instance: REGISTERED_CLASSES):
|
||||
if isinstance(instance, ShoppingListEntry):
|
||||
_ = instance.food # Force load food
|
||||
_ = instance.unit # Force load unit
|
||||
_ = instance.created_by # Force load created_by
|
||||
|
||||
|
||||
async def _close_connectors(connectors: List[Connector]):
|
||||
tasks: List[Task] = [asyncio.create_task(connector.close()) for connector in connectors]
|
||||
|
||||
if len(tasks) == 0:
|
||||
@@ -152,22 +197,24 @@ async def close_connectors(connectors: List[Connector]):
|
||||
logging.exception("received an exception while closing one of the connectors")
|
||||
|
||||
|
||||
async def run_connectors(connectors: List[Connector], space: Space, instance: REGISTERED_CLASSES, action_type: ActionType):
|
||||
async def run_connectors(connectors: List[Connector], instance: REGISTERED_CLASSES, action_type: ActionType):
|
||||
tasks: List[Task] = list()
|
||||
|
||||
if isinstance(instance, ShoppingListEntry):
|
||||
shopping_list_entry: ShoppingListEntry = instance
|
||||
shopping_list_entry = ShoppingListEntryDTO.try_create_from_entry(instance)
|
||||
if shopping_list_entry is None:
|
||||
return
|
||||
|
||||
match action_type:
|
||||
case ActionType.CREATED:
|
||||
for connector in connectors:
|
||||
tasks.append(asyncio.create_task(connector.on_shopping_list_entry_created(space, shopping_list_entry)))
|
||||
tasks.append(asyncio.create_task(connector.on_shopping_list_entry_created(shopping_list_entry)))
|
||||
case ActionType.UPDATED:
|
||||
for connector in connectors:
|
||||
tasks.append(asyncio.create_task(connector.on_shopping_list_entry_updated(space, shopping_list_entry)))
|
||||
tasks.append(asyncio.create_task(connector.on_shopping_list_entry_updated(shopping_list_entry)))
|
||||
case ActionType.DELETED:
|
||||
for connector in connectors:
|
||||
tasks.append(asyncio.create_task(connector.on_shopping_list_entry_deleted(space, shopping_list_entry)))
|
||||
tasks.append(asyncio.create_task(connector.on_shopping_list_entry_deleted(shopping_list_entry)))
|
||||
|
||||
if len(tasks) == 0:
|
||||
return
|
||||
|
||||
@@ -3,10 +3,10 @@ from logging import Logger
|
||||
from typing import Dict, Tuple
|
||||
from urllib.parse import urljoin
|
||||
|
||||
from aiohttp import ClientError, request
|
||||
from aiohttp import request, ClientResponseError
|
||||
|
||||
from cookbook.connectors.connector import Connector
|
||||
from cookbook.models import ShoppingListEntry, ConnectorConfig, Space
|
||||
from cookbook.connectors.connector import Connector, ShoppingListEntryDTO
|
||||
from cookbook.models import ConnectorConfig
|
||||
|
||||
|
||||
class HomeAssistant(Connector):
|
||||
@@ -17,10 +17,11 @@ class HomeAssistant(Connector):
|
||||
if not config.token or not config.url or not config.todo_entity:
|
||||
raise ValueError("config for HomeAssistantConnector in incomplete")
|
||||
|
||||
self._logger = logging.getLogger(f"recipes.connector.homeassistant.{config.name}")
|
||||
|
||||
if config.url[-1] != "/":
|
||||
config.url += "/"
|
||||
self._config = config
|
||||
self._logger = logging.getLogger("connector.HomeAssistant")
|
||||
|
||||
async def homeassistant_api_call(self, method: str, path: str, data: Dict) -> str:
|
||||
headers = {
|
||||
@@ -31,42 +32,39 @@ class HomeAssistant(Connector):
|
||||
response.raise_for_status()
|
||||
return await response.json()
|
||||
|
||||
async def on_shopping_list_entry_created(self, space: Space, shopping_list_entry: ShoppingListEntry) -> None:
|
||||
async def on_shopping_list_entry_created(self, shopping_list_entry: ShoppingListEntryDTO) -> None:
|
||||
if not self._config.on_shopping_list_entry_created_enabled:
|
||||
return
|
||||
|
||||
item, description = _format_shopping_list_entry(shopping_list_entry)
|
||||
|
||||
logging.debug(f"adding {item=} to {self._config.name}")
|
||||
self._logger.debug(f"adding {item=} with {description=} to {self._config.todo_entity}")
|
||||
|
||||
data = {
|
||||
"entity_id": self._config.todo_entity,
|
||||
"item": item,
|
||||
"description": description,
|
||||
}
|
||||
|
||||
if self._config.supports_description_field:
|
||||
data["description"] = description
|
||||
|
||||
try:
|
||||
await self.homeassistant_api_call("POST", "services/todo/add_item", data)
|
||||
except ClientError as err:
|
||||
self._logger.warning(f"[HomeAssistant {self._config.name}] Received an exception from the api: {err=}, {type(err)=}")
|
||||
except ClientResponseError as err:
|
||||
self._logger.warning(f"received an exception from the api: {err.request_info.url=}, {err.request_info.method=}, {err.status=}, {err.message=}, {type(err)=}")
|
||||
|
||||
async def on_shopping_list_entry_updated(self, space: Space, shopping_list_entry: ShoppingListEntry) -> None:
|
||||
async def on_shopping_list_entry_updated(self, shopping_list_entry: ShoppingListEntryDTO) -> None:
|
||||
if not self._config.on_shopping_list_entry_updated_enabled:
|
||||
return
|
||||
pass
|
||||
|
||||
async def on_shopping_list_entry_deleted(self, space: Space, shopping_list_entry: ShoppingListEntry) -> None:
|
||||
async def on_shopping_list_entry_deleted(self, shopping_list_entry: ShoppingListEntryDTO) -> None:
|
||||
if not self._config.on_shopping_list_entry_deleted_enabled:
|
||||
return
|
||||
|
||||
if not hasattr(shopping_list_entry._state.fields_cache, "food"):
|
||||
# Sometimes the food foreign key is not loaded, and we cant load it from an async process
|
||||
self._logger.debug("required property was not present in ShoppingListEntry")
|
||||
return
|
||||
|
||||
item, _ = _format_shopping_list_entry(shopping_list_entry)
|
||||
|
||||
logging.debug(f"removing {item=} from {self._config.name}")
|
||||
self._logger.debug(f"removing {item=} from {self._config.todo_entity}")
|
||||
|
||||
data = {
|
||||
"entity_id": self._config.todo_entity,
|
||||
@@ -75,27 +73,27 @@ class HomeAssistant(Connector):
|
||||
|
||||
try:
|
||||
await self.homeassistant_api_call("POST", "services/todo/remove_item", data)
|
||||
except ClientError as err:
|
||||
except ClientResponseError as err:
|
||||
# This error will always trigger if the item is not present/found
|
||||
self._logger.debug(f"[HomeAssistant {self._config.name}] Received an exception from the api: {err=}, {type(err)=}")
|
||||
self._logger.debug(f"received an exception from the api: {err.request_info.url=}, {err.request_info.method=}, {err.status=}, {err.message=}, {type(err)=}")
|
||||
|
||||
async def close(self) -> None:
|
||||
pass
|
||||
|
||||
|
||||
def _format_shopping_list_entry(shopping_list_entry: ShoppingListEntry) -> Tuple[str, str]:
|
||||
item = shopping_list_entry.food.name
|
||||
if shopping_list_entry.amount > 0:
|
||||
def _format_shopping_list_entry(shopping_list_entry: ShoppingListEntryDTO) -> Tuple[str, str]:
|
||||
item = shopping_list_entry.food_name
|
||||
if shopping_list_entry.amount:
|
||||
item += f" ({shopping_list_entry.amount:.2f}".rstrip('0').rstrip('.')
|
||||
if shopping_list_entry.unit and shopping_list_entry.unit.base_unit and len(shopping_list_entry.unit.base_unit) > 0:
|
||||
item += f" {shopping_list_entry.unit.base_unit})"
|
||||
elif shopping_list_entry.unit and shopping_list_entry.unit.name and len(shopping_list_entry.unit.name) > 0:
|
||||
item += f" {shopping_list_entry.unit.name})"
|
||||
if shopping_list_entry.base_unit:
|
||||
item += f" {shopping_list_entry.base_unit})"
|
||||
elif shopping_list_entry.unit_name:
|
||||
item += f" {shopping_list_entry.unit_name})"
|
||||
else:
|
||||
item += ")"
|
||||
|
||||
description = "From TandoorRecipes"
|
||||
if shopping_list_entry.created_by.first_name and len(shopping_list_entry.created_by.first_name) > 0:
|
||||
if shopping_list_entry.created_by.first_name:
|
||||
description += f", by {shopping_list_entry.created_by.first_name}"
|
||||
else:
|
||||
description += f", by {shopping_list_entry.created_by.username}"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from datetime import datetime
|
||||
|
||||
from allauth.account.forms import ResetPasswordForm, SignupForm
|
||||
from allauth.socialaccount.forms import SignupForm as SocialSignupForm
|
||||
from django import forms
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ValidationError
|
||||
@@ -12,60 +13,14 @@ from hcaptcha.fields import hCaptchaField
|
||||
|
||||
from .models import Comment, InviteLink, Keyword, Recipe, SearchPreference, Space, Storage, Sync, User, UserPreference, ConnectorConfig
|
||||
|
||||
|
||||
class SelectWidget(widgets.Select):
|
||||
|
||||
class Media:
|
||||
js = ('custom/js/form_select.js', )
|
||||
js = ('custom/js/form_select.js',)
|
||||
|
||||
|
||||
class MultiSelectWidget(widgets.SelectMultiple):
|
||||
|
||||
class Media:
|
||||
js = ('custom/js/form_multiselect.js', )
|
||||
|
||||
|
||||
# Yes there are some stupid browsers that still dont support this but
|
||||
# I dont support people using these browsers.
|
||||
class DateWidget(forms.DateInput):
|
||||
input_type = 'date'
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
kwargs["format"] = "%Y-%m-%d"
|
||||
super().__init__(**kwargs)
|
||||
|
||||
|
||||
class UserNameForm(forms.ModelForm):
|
||||
prefix = 'name'
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ('first_name', 'last_name')
|
||||
|
||||
help_texts = {'first_name': _('Both fields are optional. If none are given the username will be displayed instead')}
|
||||
|
||||
|
||||
class ExternalRecipeForm(forms.ModelForm):
|
||||
file_path = forms.CharField(disabled=True, required=False)
|
||||
file_uid = forms.CharField(disabled=True, required=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
space = kwargs.pop('space')
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['keywords'].queryset = Keyword.objects.filter(space=space).all()
|
||||
|
||||
class Meta:
|
||||
model = Recipe
|
||||
fields = ('name', 'description', 'servings', 'working_time', 'waiting_time', 'file_path', 'file_uid', 'keywords')
|
||||
|
||||
labels = {
|
||||
'name': _('Name'), 'keywords': _('Keywords'), 'working_time': _('Preparation time in minutes'), 'waiting_time': _('Waiting time (cooking/baking) in minutes'),
|
||||
'file_path': _('Path'), 'file_uid': _('Storage UID'),
|
||||
}
|
||||
widgets = {'keywords': MultiSelectWidget}
|
||||
field_classes = {'keywords': SafeModelMultipleChoiceField, }
|
||||
|
||||
|
||||
js = ('custom/js/form_multiselect.js',)
|
||||
class ImportExportBase(forms.Form):
|
||||
DEFAULT = 'DEFAULT'
|
||||
PAPRIKA = 'PAPRIKA'
|
||||
@@ -89,13 +44,13 @@ class ImportExportBase(forms.Form):
|
||||
COOKMATE = 'COOKMATE'
|
||||
REZEPTSUITEDE = 'REZEPTSUITEDE'
|
||||
PDF = 'PDF'
|
||||
GOURMET = 'GOURMET'
|
||||
|
||||
type = forms.ChoiceField(choices=((DEFAULT, _('Default')), (PAPRIKA, 'Paprika'), (NEXTCLOUD, 'Nextcloud Cookbook'), (MEALIE, 'Mealie'), (CHOWDOWN, 'Chowdown'),
|
||||
(SAFFRON, 'Saffron'), (CHEFTAP, 'ChefTap'), (PEPPERPLATE, 'Pepperplate'), (RECETTETEK, 'RecetteTek'), (RECIPESAGE, 'Recipe Sage'),
|
||||
(DOMESTICA, 'Domestica'), (MEALMASTER, 'MealMaster'), (REZKONV, 'RezKonv'), (OPENEATS, 'Openeats'), (RECIPEKEEPER, 'Recipe Keeper'),
|
||||
(PLANTOEAT, 'Plantoeat'), (COOKBOOKAPP, 'CookBookApp'), (COPYMETHAT, 'CopyMeThat'), (PDF, 'PDF'), (MELARECIPES, 'Melarecipes'),
|
||||
(COOKMATE, 'Cookmate'), (REZEPTSUITEDE, 'Recipesuite.de')))
|
||||
|
||||
(COOKMATE, 'Cookmate'), (REZEPTSUITEDE, 'Recipesuite.de'), (GOURMET, 'Gourmet')))
|
||||
|
||||
class MultipleFileInput(forms.ClearableFileInput):
|
||||
allow_multiple_selected = True
|
||||
@@ -120,8 +75,6 @@ class ImportForm(ImportExportBase):
|
||||
files = MultipleFileField(required=True)
|
||||
duplicates = forms.BooleanField(help_text=_('To prevent duplicates recipes with the same name as existing ones are ignored. Check this box to import everything.'),
|
||||
required=False)
|
||||
|
||||
|
||||
class ExportForm(ImportExportBase):
|
||||
recipes = forms.ModelMultipleChoiceField(widget=MultiSelectWidget, queryset=Recipe.objects.none(), required=False)
|
||||
all = forms.BooleanField(required=False)
|
||||
@@ -132,120 +85,7 @@ class ExportForm(ImportExportBase):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['recipes'].queryset = Recipe.objects.filter(space=space).all()
|
||||
|
||||
|
||||
class CommentForm(forms.ModelForm):
|
||||
prefix = 'comment'
|
||||
|
||||
class Meta:
|
||||
model = Comment
|
||||
fields = ('text', )
|
||||
|
||||
labels = {'text': _('Add your comment: '), }
|
||||
widgets = {'text': forms.Textarea(attrs={'rows': 2, 'cols': 15}), }
|
||||
|
||||
|
||||
class StorageForm(forms.ModelForm):
|
||||
username = forms.CharField(widget=forms.TextInput(attrs={'autocomplete': 'new-password'}), required=False)
|
||||
password = forms.CharField(widget=forms.TextInput(attrs={'autocomplete': 'new-password', 'type': 'password'}),
|
||||
required=False,
|
||||
help_text=_('Leave empty for dropbox and enter app password for nextcloud.'))
|
||||
token = forms.CharField(widget=forms.TextInput(attrs={'autocomplete': 'new-password', 'type': 'password'}),
|
||||
required=False,
|
||||
help_text=_('Leave empty for nextcloud and enter api token for dropbox.'))
|
||||
|
||||
class Meta:
|
||||
model = Storage
|
||||
fields = ('name', 'method', 'username', 'password', 'token', 'url', 'path')
|
||||
|
||||
help_texts = {'url': _('Leave empty for dropbox and enter only base url for nextcloud (<code>/remote.php/webdav/</code> is added automatically)'), }
|
||||
|
||||
|
||||
|
||||
class ConnectorConfigForm(forms.ModelForm):
|
||||
enabled = forms.BooleanField(
|
||||
help_text="Is the connector enabled",
|
||||
required=False,
|
||||
)
|
||||
|
||||
on_shopping_list_entry_created_enabled = forms.BooleanField(
|
||||
help_text="Enable action for ShoppingListEntry created events",
|
||||
required=False,
|
||||
)
|
||||
|
||||
on_shopping_list_entry_updated_enabled = forms.BooleanField(
|
||||
help_text="Enable action for ShoppingListEntry updated events",
|
||||
required=False,
|
||||
)
|
||||
|
||||
on_shopping_list_entry_deleted_enabled = forms.BooleanField(
|
||||
help_text="Enable action for ShoppingListEntry deleted events",
|
||||
required=False,
|
||||
)
|
||||
|
||||
update_token = forms.CharField(
|
||||
widget=forms.TextInput(attrs={'autocomplete': 'update-token', 'type': 'password'}),
|
||||
required=False,
|
||||
help_text=_('<a href="https://www.home-assistant.io/docs/authentication/#your-account-profile">Long Lived Access Token</a> for your HomeAssistant instance')
|
||||
)
|
||||
|
||||
url = forms.URLField(
|
||||
required=False,
|
||||
help_text=_('Something like http://homeassistant.local:8123/api'),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = ConnectorConfig
|
||||
|
||||
fields = (
|
||||
'name', 'type', 'enabled', 'on_shopping_list_entry_created_enabled', 'on_shopping_list_entry_updated_enabled',
|
||||
'on_shopping_list_entry_deleted_enabled', 'url', 'todo_entity',
|
||||
)
|
||||
|
||||
help_texts = {
|
||||
'url': _('http://homeassistant.local:8123/api for example'),
|
||||
}
|
||||
|
||||
|
||||
class SyncForm(forms.ModelForm):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
space = kwargs.pop('space')
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['storage'].queryset = Storage.objects.filter(space=space).all()
|
||||
|
||||
class Meta:
|
||||
model = Sync
|
||||
fields = ('storage', 'path', 'active')
|
||||
|
||||
field_classes = {'storage': SafeModelChoiceField, }
|
||||
|
||||
labels = {'storage': _('Storage'), 'path': _('Path'), 'active': _('Active')}
|
||||
|
||||
|
||||
class BatchEditForm(forms.Form):
|
||||
search = forms.CharField(label=_('Search String'))
|
||||
keywords = forms.ModelMultipleChoiceField(queryset=Keyword.objects.none(), required=False, widget=MultiSelectWidget)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
space = kwargs.pop('space')
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['keywords'].queryset = Keyword.objects.filter(space=space).all().order_by('id')
|
||||
|
||||
|
||||
class ImportRecipeForm(forms.ModelForm):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
space = kwargs.pop('space')
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['keywords'].queryset = Keyword.objects.filter(space=space).all()
|
||||
|
||||
class Meta:
|
||||
model = Recipe
|
||||
fields = ('name', 'keywords', 'file_path', 'file_uid')
|
||||
|
||||
labels = {'name': _('Name'), 'keywords': _('Keywords'), 'file_path': _('Path'), 'file_uid': _('File ID'), }
|
||||
widgets = {'keywords': MultiSelectWidget}
|
||||
field_classes = {'keywords': SafeModelChoiceField, }
|
||||
from .models import InviteLink, SearchPreference, Space, User, UserPreference
|
||||
|
||||
|
||||
class InviteLinkForm(forms.ModelForm):
|
||||
@@ -308,6 +148,18 @@ class AllAuthSignupForm(SignupForm):
|
||||
pass
|
||||
|
||||
|
||||
class AllAuthSocialSignupForm(SocialSignupForm):
|
||||
terms = forms.BooleanField(label=_('Accept Terms and Privacy'))
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
if settings.PRIVACY_URL == '' and settings.TERMS_URL == '':
|
||||
self.fields.pop('terms')
|
||||
|
||||
def signup(self, request, user):
|
||||
pass
|
||||
|
||||
|
||||
class CustomPasswordResetForm(ResetPasswordForm):
|
||||
captcha = hCaptchaField()
|
||||
|
||||
@@ -321,37 +173,3 @@ class UserCreateForm(forms.Form):
|
||||
name = forms.CharField(label='Username')
|
||||
password = forms.CharField(widget=forms.TextInput(attrs={'autocomplete': 'new-password', 'type': 'password'}))
|
||||
password_confirm = forms.CharField(widget=forms.TextInput(attrs={'autocomplete': 'new-password', 'type': 'password'}))
|
||||
|
||||
|
||||
class SearchPreferenceForm(forms.ModelForm):
|
||||
prefix = 'search'
|
||||
trigram_threshold = forms.DecimalField(min_value=0.01,
|
||||
max_value=1,
|
||||
decimal_places=2,
|
||||
widget=NumberInput(attrs={'class': "form-control-range", 'type': 'range'}),
|
||||
help_text=_('Determines how fuzzy a search is if it uses trigram similarity matching (e.g. low values mean more typos are ignored).'))
|
||||
preset = forms.CharField(widget=forms.HiddenInput(), required=False)
|
||||
|
||||
class Meta:
|
||||
model = SearchPreference
|
||||
fields = ('search', 'lookup', 'unaccent', 'icontains', 'istartswith', 'trigram', 'fulltext', 'trigram_threshold')
|
||||
|
||||
help_texts = {
|
||||
'search': _('Select type method of search. Click <a href="/docs/search/">here</a> for full description of choices.'), 'lookup':
|
||||
_('Use fuzzy matching on units, keywords and ingredients when editing and importing recipes.'), 'unaccent':
|
||||
_('Fields to search ignoring accents. Selecting this option can improve or degrade search quality depending on language'), 'icontains':
|
||||
_("Fields to search for partial matches. (e.g. searching for 'Pie' will return 'pie' and 'piece' and 'soapie')"), 'istartswith':
|
||||
_("Fields to search for beginning of word matches. (e.g. searching for 'sa' will return 'salad' and 'sandwich')"), 'trigram':
|
||||
_("Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) Note: this option will conflict with 'web' and 'raw' methods of search."), 'fulltext':
|
||||
_("Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods only function with fulltext fields."),
|
||||
}
|
||||
|
||||
labels = {
|
||||
'search': _('Search Method'), 'lookup': _('Fuzzy Lookups'), 'unaccent': _('Ignore Accent'), 'icontains': _("Partial Match"), 'istartswith': _("Starts With"),
|
||||
'trigram': _("Fuzzy Search"), 'fulltext': _("Full Text")
|
||||
}
|
||||
|
||||
widgets = {
|
||||
'search': SelectWidget, 'unaccent': MultiSelectWidget, 'icontains': MultiSelectWidget, 'istartswith': MultiSelectWidget, 'trigram': MultiSelectWidget, 'fulltext':
|
||||
MultiSelectWidget,
|
||||
}
|
||||
|
||||
@@ -1,4 +1,12 @@
|
||||
import socket
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.validators import URLValidator
|
||||
from django.db.models import Func
|
||||
from ipaddress import ip_address
|
||||
|
||||
from recipes import settings
|
||||
|
||||
|
||||
class Round(Func):
|
||||
@@ -11,3 +19,30 @@ def str2bool(v):
|
||||
return v
|
||||
else:
|
||||
return v.lower() in ("yes", "true", "1")
|
||||
|
||||
|
||||
"""
|
||||
validates an url that is supposed to be imported
|
||||
checks that the protocol used is http(s) and that no local address is accessed
|
||||
@:param url to test
|
||||
@:return true if url is valid, false otherwise
|
||||
"""
|
||||
|
||||
|
||||
def validate_import_url(url):
|
||||
try:
|
||||
validator = URLValidator(schemes=['http', 'https'])
|
||||
validator(url)
|
||||
except ValidationError:
|
||||
# if schema is not http or https, consider url invalid
|
||||
return False
|
||||
|
||||
# resolve IP address of url
|
||||
try:
|
||||
url_ip_address = ip_address(str(socket.gethostbyname(urlparse(url).hostname)))
|
||||
except (ValueError, AttributeError, TypeError, Exception) as e:
|
||||
# if ip cannot be parsed, consider url invalid
|
||||
return False
|
||||
|
||||
# validate that IP is neither private nor any other special address
|
||||
return not any([url_ip_address.is_private, url_ip_address.is_reserved, url_ip_address.is_loopback, url_ip_address.is_multicast, url_ip_address.is_link_local, ])
|
||||
|
||||
@@ -109,7 +109,7 @@ class AutomationEngine:
|
||||
Moves a string that should never be treated as a unit to next token and optionally replaced with default unit
|
||||
e.g. NEVER_UNIT: param1: egg, param2: None would modify ['1', 'egg', 'white'] to ['1', '', 'egg', 'white']
|
||||
or NEVER_UNIT: param1: egg, param2: pcs would modify ['1', 'egg', 'yolk'] to ['1', 'pcs', 'egg', 'yolk']
|
||||
:param1 string: string that should never be considered a unit, will be moved to token[2]
|
||||
:param1 tokens: string that should never be considered a unit, will be moved to token[2]
|
||||
:param2 (optional) unit as string: will insert unit string into token[1]
|
||||
:return: unit as string (possibly changed by automation)
|
||||
"""
|
||||
@@ -135,7 +135,7 @@ class AutomationEngine:
|
||||
new_unit = self.never_unit[tokens[1].lower()]
|
||||
never_unit = True
|
||||
except KeyError:
|
||||
return tokens
|
||||
return tokens, never_unit
|
||||
else:
|
||||
if a := Automation.objects.annotate(param_1_lower=Lower('param_1')).filter(space=self.request.space, type=Automation.NEVER_UNIT, param_1_lower__in=[
|
||||
tokens[1].lower(), alt_unit.lower()], disabled=False).order_by('order').first():
|
||||
@@ -144,7 +144,7 @@ class AutomationEngine:
|
||||
|
||||
if never_unit:
|
||||
tokens.insert(1, new_unit)
|
||||
return tokens
|
||||
return tokens, never_unit
|
||||
|
||||
def apply_transpose_automation(self, string):
|
||||
"""
|
||||
|
||||
102
cookbook/helper/drf_spectacular_hooks.py
Normal file
102
cookbook/helper/drf_spectacular_hooks.py
Normal file
@@ -0,0 +1,102 @@
|
||||
# custom processing for schema
|
||||
# reason: DRF writable nested needs ID's to decide if a nested object should be created or updated
|
||||
# the API schema/client make ID's read only by default and strips them entirely in request objects (with COMPONENT_SPLIT_REQUEST enabled)
|
||||
# change the schema to make IDs optional but writable so they are included in the request
|
||||
|
||||
def custom_postprocessing_hook(result, generator, request, public):
|
||||
for c in result['components']['schemas'].keys():
|
||||
# handle schemas used by the client to do requests on the server
|
||||
if 'properties' in result['components']['schemas'][c] and 'id' in result['components']['schemas'][c]['properties']:
|
||||
# make ID field not read only so it's not stripped from the request on the client
|
||||
result['components']['schemas'][c]['properties']['id']['readOnly'] = False
|
||||
# make ID field not required
|
||||
if 'required' in result['components']['schemas'][c] and 'id' in result['components']['schemas'][c]['required']:
|
||||
result['components']['schemas'][c]['required'].remove('id')
|
||||
|
||||
return result
|
||||
|
||||
|
||||
# TODO remove below once legacy API has been fully deprecated
|
||||
from drf_spectacular.openapi import AutoSchema # noqa: E402 isort: skip
|
||||
import functools # noqa: E402 isort: skip
|
||||
import re # noqa: E402 isort: skip
|
||||
|
||||
|
||||
class LegacySchema(AutoSchema):
|
||||
operation_id_base = None
|
||||
|
||||
@functools.cached_property
|
||||
def path(self):
|
||||
path = re.sub(pattern=self.path_prefix, repl='', string=self.path, flags=re.IGNORECASE)
|
||||
# remove path variables
|
||||
return re.sub(pattern=r'\{[\w\-]+\}', repl='', string=path)
|
||||
|
||||
def get_operation_id(self):
|
||||
"""
|
||||
Compute an operation ID from the view type and get_operation_id_base method.
|
||||
"""
|
||||
method_name = getattr(self.view, 'action', self.method.lower())
|
||||
if self._is_list_view():
|
||||
action = 'list'
|
||||
elif method_name not in self.method_mapping:
|
||||
action = self._to_camel_case(method_name)
|
||||
else:
|
||||
action = self.method_mapping[self.method.lower()]
|
||||
|
||||
name = self.get_operation_id_base(action)
|
||||
|
||||
return action + name
|
||||
|
||||
def get_operation_id_base(self, action):
|
||||
"""
|
||||
Compute the base part for operation ID from the model, serializer or view name.
|
||||
"""
|
||||
model = getattr(getattr(self.view, 'queryset', None), 'model', None)
|
||||
|
||||
if self.operation_id_base is not None:
|
||||
name = self.operation_id_base
|
||||
|
||||
# Try to deduce the ID from the view's model
|
||||
elif model is not None:
|
||||
name = model.__name__
|
||||
|
||||
# Try with the serializer class name
|
||||
elif self.get_serializer() is not None:
|
||||
name = self.get_serializer().__class__.__name__
|
||||
if name.endswith('Serializer'):
|
||||
name = name[:-10]
|
||||
|
||||
# Fallback to the view name
|
||||
else:
|
||||
name = self.view.__class__.__name__
|
||||
if name.endswith('APIView'):
|
||||
name = name[:-7]
|
||||
elif name.endswith('View'):
|
||||
name = name[:-4]
|
||||
|
||||
# Due to camel-casing of classes and `action` being lowercase, apply title in order to find if action truly
|
||||
# comes at the end of the name
|
||||
if name.endswith(action.title()): # ListView, UpdateAPIView, ThingDelete ...
|
||||
name = name[:-len(action)]
|
||||
|
||||
if action == 'list' and not name.endswith('s'): # listThings instead of listThing
|
||||
name += 's'
|
||||
|
||||
return name
|
||||
|
||||
def get_serializer(self):
|
||||
view = self.view
|
||||
|
||||
if not hasattr(view, 'get_serializer'):
|
||||
return None
|
||||
|
||||
try:
|
||||
return view.get_serializer()
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
def _to_camel_case(self, snake_str):
|
||||
components = snake_str.split('_')
|
||||
# We capitalize the first letter of each component except the first one
|
||||
# with the 'title' method and join them together.
|
||||
return components[0] + ''.join(x.title() for x in components[1:])
|
||||
@@ -35,6 +35,33 @@ def get_filetype(name):
|
||||
return '.jpeg'
|
||||
|
||||
|
||||
def is_file_type_allowed(filename, image_only=False):
|
||||
is_file_allowed = False
|
||||
allowed_file_types = ['.pdf', '.docx', '.xlsx', '.css']
|
||||
allowed_image_types = ['.png', '.jpg', '.jpeg', '.gif', '.webp']
|
||||
check_list = allowed_image_types
|
||||
if not image_only:
|
||||
check_list += allowed_file_types
|
||||
|
||||
for file_type in check_list:
|
||||
if filename.lower().endswith(file_type):
|
||||
is_file_allowed = True
|
||||
|
||||
return is_file_allowed
|
||||
|
||||
|
||||
def strip_image_meta(image_object, file_format):
|
||||
image_object = Image.open(image_object)
|
||||
|
||||
data = list(image_object.getdata())
|
||||
image_without_exif = Image.new(image_object.mode, image_object.size)
|
||||
image_without_exif.putdata(data)
|
||||
|
||||
im_io = BytesIO()
|
||||
image_without_exif.save(im_io, file_format)
|
||||
return im_io
|
||||
|
||||
|
||||
# TODO this whole file needs proper documentation, refactoring, and testing
|
||||
# TODO also add env variable to define which images sizes should be compressed
|
||||
# filetype argument can not be optional, otherwise this function will treat all images as if they were a jpeg
|
||||
@@ -45,9 +72,19 @@ def handle_image(request, image_object, filetype):
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
file_format = None
|
||||
if filetype == '.jpeg' or filetype == '.jpg':
|
||||
file_format = 'JPEG'
|
||||
if filetype == '.png':
|
||||
file_format = 'PNG'
|
||||
|
||||
if (image_object.size / 1000) > 500: # if larger than 500 kb compress
|
||||
if filetype == '.jpeg' or filetype == '.jpg':
|
||||
return rescale_image_jpeg(image_object)
|
||||
if filetype == '.png':
|
||||
return rescale_image_png(image_object)
|
||||
else:
|
||||
return strip_image_meta(image_object, file_format)
|
||||
|
||||
# TODO webp and gifs bypass the scaling and metadata checks, fix
|
||||
return image_object
|
||||
|
||||
@@ -118,7 +118,7 @@ class IngredientParser:
|
||||
note = ''
|
||||
start = 0
|
||||
# search for first occurrence of an argument ending in a comma
|
||||
while start < len(tokens) and not tokens[start].endswith(','):
|
||||
while start < len(tokens) and not tokens[start].endswith((',', ';', ':')):
|
||||
start += 1
|
||||
if start == len(tokens):
|
||||
# no token ending in a comma found -> use everything as food
|
||||
@@ -176,7 +176,6 @@ class IngredientParser:
|
||||
# if something like this is detected move it to the beginning so the parser can handle it
|
||||
if len(ingredient) < 1000 and re.search(r'^([^\W\d_])+(.)*[1-9](\d)*\s*([^\W\d_])+', ingredient):
|
||||
match = re.search(r'[1-9](\d)*\s*([^\W\d_])+', ingredient)
|
||||
print(f'reording from {ingredient} to {ingredient[match.start():match.end()] + " " + ingredient.replace(ingredient[match.start():match.end()], "")}')
|
||||
ingredient = ingredient[match.start():match.end()] + ' ' + ingredient.replace(ingredient[match.start():match.end()], '')
|
||||
|
||||
# if the string contains parenthesis early on remove it and place it at the end
|
||||
@@ -211,39 +210,46 @@ class IngredientParser:
|
||||
# three arguments if it already has a unit there can't be
|
||||
# a fraction for the amount
|
||||
if len(tokens) > 2:
|
||||
never_unit_applied = False
|
||||
if not self.ignore_rules:
|
||||
tokens = self.automation.apply_never_unit_automation(tokens)
|
||||
try:
|
||||
if unit is not None:
|
||||
# a unit is already found, no need to try the second argument for a fraction
|
||||
# probably not the best method to do it, but I didn't want to make an if check and paste the exact same thing in the else as already is in the except
|
||||
raise ValueError
|
||||
# try to parse second argument as amount and add that, in case of '2 1/2' or '2 ½'
|
||||
amount += self.parse_fraction(tokens[1])
|
||||
# assume that units can't end with a comma
|
||||
if len(tokens) > 3 and not tokens[2].endswith(','):
|
||||
# try to use third argument as unit and everything else as food, use everything as food if it fails
|
||||
try:
|
||||
food, note = self.parse_food(tokens[3:])
|
||||
unit = tokens[2]
|
||||
except ValueError:
|
||||
tokens, never_unit_applied = self.automation.apply_never_unit_automation(tokens)
|
||||
|
||||
if never_unit_applied:
|
||||
unit = tokens[1]
|
||||
food, note = self.parse_food(tokens[2:])
|
||||
else:
|
||||
try:
|
||||
if unit is not None:
|
||||
# a unit is already found, no need to try the second argument for a fraction
|
||||
# probably not the best method to do it, but I didn't want to make an if check and paste the exact same thing in the else as already is in the except
|
||||
raise ValueError
|
||||
# try to parse second argument as amount and add that, in case of '2 1/2' or '2 ½'
|
||||
if tokens[1]:
|
||||
amount += self.parse_fraction(tokens[1])
|
||||
# assume that units can't end with a comma
|
||||
if len(tokens) > 3 and not tokens[2].endswith(','):
|
||||
# try to use third argument as unit and everything else as food, use everything as food if it fails
|
||||
try:
|
||||
food, note = self.parse_food(tokens[3:])
|
||||
unit = tokens[2]
|
||||
except ValueError:
|
||||
food, note = self.parse_food(tokens[2:])
|
||||
else:
|
||||
food, note = self.parse_food(tokens[2:])
|
||||
else:
|
||||
food, note = self.parse_food(tokens[2:])
|
||||
except ValueError:
|
||||
# assume that units can't end with a comma
|
||||
if not tokens[1].endswith(','):
|
||||
# try to use second argument as unit and everything else as food, use everything as food if it fails
|
||||
try:
|
||||
food, note = self.parse_food(tokens[2:])
|
||||
if unit is None:
|
||||
unit = tokens[1]
|
||||
else:
|
||||
note = tokens[1]
|
||||
except ValueError:
|
||||
except ValueError:
|
||||
# assume that units can't end with a comma
|
||||
if not tokens[1].endswith(','):
|
||||
# try to use second argument as unit and everything else as food, use everything as food if it fails
|
||||
try:
|
||||
food, note = self.parse_food(tokens[2:])
|
||||
if unit is None:
|
||||
unit = tokens[1]
|
||||
else:
|
||||
note = tokens[1]
|
||||
except ValueError:
|
||||
food, note = self.parse_food(tokens[1:])
|
||||
else:
|
||||
food, note = self.parse_food(tokens[1:])
|
||||
else:
|
||||
food, note = self.parse_food(tokens[1:])
|
||||
else:
|
||||
# only two arguments, first one is the amount
|
||||
# which means this is the food
|
||||
@@ -264,6 +270,7 @@ class IngredientParser:
|
||||
|
||||
if food and not self.ignore_rules:
|
||||
food = self.automation.apply_food_automation(food)
|
||||
|
||||
if len(food) > Food._meta.get_field('name').max_length: # test if food name is to long
|
||||
# try splitting it at a space and taking only the first arg
|
||||
if len(food.split()) > 1 and len(food.split()[0]) < Food._meta.get_field('name').max_length:
|
||||
|
||||
@@ -7,7 +7,9 @@ class StyleTreeprocessor(Treeprocessor):
|
||||
def run_processor(self, node):
|
||||
for child in node:
|
||||
if child.tag == "table":
|
||||
child.set("class", "table table-bordered")
|
||||
child.set("class", "markdown-table")
|
||||
if child.tag == "th" or child.tag == "td":
|
||||
child.set("class", "markdown-table-cell")
|
||||
if child.tag == "img":
|
||||
child.set("class", "img-fluid")
|
||||
self.run_processor(child)
|
||||
|
||||
@@ -6,6 +6,8 @@ from cookbook.models import (Food, FoodProperty, Property, PropertyType, Superma
|
||||
SupermarketCategory, SupermarketCategoryRelation, Unit, UnitConversion)
|
||||
import re
|
||||
|
||||
from recipes.settings import DEBUG
|
||||
|
||||
|
||||
class OpenDataImportResponse:
|
||||
total_created = 0
|
||||
@@ -339,7 +341,7 @@ class OpenDataImporter:
|
||||
obj_dict = {
|
||||
'name': self.data[datatype][k]['name'],
|
||||
'plural_name': self.data[datatype][k]['plural_name'] if self.data[datatype][k]['plural_name'] != '' else None,
|
||||
'supermarket_category_id': self.slug_id_cache['category'][self.data[datatype][k]['store_category']],
|
||||
'supermarket_category_id': self.slug_id_cache['category'][self.data[datatype][k]['store_category']] if self.data[datatype][k]['store_category'] in self.slug_id_cache['category'] else None,
|
||||
'fdc_id': re.sub(r'\D', '', self.data[datatype][k]['fdc_id']) if self.data[datatype][k]['fdc_id'] != '' else None,
|
||||
'open_data_slug': k,
|
||||
'properties_food_unit_id': None,
|
||||
@@ -367,12 +369,28 @@ class OpenDataImporter:
|
||||
create_list.append({'data': obj_dict})
|
||||
|
||||
if self.update_existing and len(update_list) > 0:
|
||||
model_type.objects.bulk_update(update_list, field_list)
|
||||
od_response.total_updated += len(update_list)
|
||||
try:
|
||||
model_type.objects.bulk_update(update_list, field_list)
|
||||
od_response.total_updated += len(update_list)
|
||||
except Exception:
|
||||
if DEBUG:
|
||||
print('========= LOAD FOOD FAILED ============')
|
||||
print(update_list)
|
||||
print(existing_data_names)
|
||||
print(existing_data_slugs)
|
||||
traceback.print_exc()
|
||||
|
||||
if len(create_list) > 0:
|
||||
Food.load_bulk(create_list, None)
|
||||
od_response.total_created += len(create_list)
|
||||
try:
|
||||
Food.load_bulk(create_list, None)
|
||||
od_response.total_created += len(create_list)
|
||||
except Exception:
|
||||
if DEBUG:
|
||||
print('========= LOAD FOOD FAILED ============')
|
||||
print(create_list)
|
||||
print(existing_data_names)
|
||||
print(existing_data_slugs)
|
||||
traceback.print_exc()
|
||||
|
||||
# --------------- PROPERTY STUFF -----------------------
|
||||
model_type = Property
|
||||
|
||||
@@ -160,18 +160,15 @@ class GroupRequiredMixin(object):
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
if not has_group_permission(request.user, self.groups_required):
|
||||
if not request.user.is_authenticated:
|
||||
messages.add_message(request, messages.ERROR,
|
||||
_('You are not logged in and therefore cannot view this page!'))
|
||||
messages.add_message(request, messages.ERROR, _('You are not logged in and therefore cannot view this page!'))
|
||||
return HttpResponseRedirect(reverse_lazy('account_login') + '?next=' + request.path)
|
||||
else:
|
||||
messages.add_message(request, messages.ERROR,
|
||||
_('You do not have the required permissions to view this page!'))
|
||||
messages.add_message(request, messages.ERROR, _('You do not have the required permissions to view this page!'))
|
||||
return HttpResponseRedirect(reverse_lazy('index'))
|
||||
try:
|
||||
obj = self.get_object()
|
||||
if obj.get_space() != request.space:
|
||||
messages.add_message(request, messages.ERROR,
|
||||
_('You do not have the required permissions to view this page!'))
|
||||
messages.add_message(request, messages.ERROR, _('You do not have the required permissions to view this page!'))
|
||||
return HttpResponseRedirect(reverse_lazy('index'))
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
@@ -44,13 +44,17 @@ class FoodPropertyHelper:
|
||||
if i.food is not None:
|
||||
conversions = uch.get_conversions(i)
|
||||
for pt in property_types:
|
||||
# if a property could be calculated with an actual value
|
||||
found_property = False
|
||||
if i.food.properties_food_amount == 0 or i.food.properties_food_unit is None: # if food is configured incorrectly
|
||||
computed_properties[pt.id]['food_values'][i.food.id] = {'id': i.food.id, 'food': i.food.name, 'value': None}
|
||||
# if food has a value for the given property type (no matter if conversion is possible)
|
||||
has_property_value = False
|
||||
if i.food.properties_food_amount == 0 or i.food.properties_food_unit is None and not (i.amount == 0 or i.no_amount): # if food is configured incorrectly
|
||||
computed_properties[pt.id]['food_values'][i.food.id] = {'id': i.food.id, 'food': {'id': i.food.id, 'name': i.food.name}, 'value': None}
|
||||
computed_properties[pt.id]['missing_value'] = True
|
||||
else:
|
||||
for p in i.food.properties.all():
|
||||
if p.property_type == pt and p.property_amount is not None:
|
||||
has_property_value = True
|
||||
for c in conversions:
|
||||
if c.unit == i.food.properties_food_unit:
|
||||
found_property = True
|
||||
@@ -58,12 +62,19 @@ class FoodPropertyHelper:
|
||||
computed_properties[pt.id]['food_values'] = self.add_or_create(
|
||||
computed_properties[p.property_type.id]['food_values'], c.food.id, (c.amount / i.food.properties_food_amount) * p.property_amount, c.food)
|
||||
if not found_property:
|
||||
if i.amount == 0: # don't count ingredients without an amount as missing
|
||||
computed_properties[pt.id]['missing_value'] = computed_properties[pt.id]['missing_value'] or False # don't override if another food was already missing
|
||||
computed_properties[pt.id]['food_values'][i.food.id] = {'id': i.food.id, 'food': i.food.name, 'value': 0}
|
||||
# if no amount and food does not exist yet add it but don't count as missing
|
||||
if i.amount == 0 or i.no_amount and i.food.id not in computed_properties[pt.id]['food_values']:
|
||||
computed_properties[pt.id]['food_values'][i.food.id] = {'id': i.food.id, 'food': {'id': i.food.id, 'name': i.food.name}, 'value': 0}
|
||||
# if amount is present but unit is missing indicate it in the result
|
||||
elif i.unit is None:
|
||||
if i.food.id not in computed_properties[pt.id]['food_values']:
|
||||
computed_properties[pt.id]['food_values'][i.food.id] = {'id': i.food.id, 'food': {'id': i.food.id, 'name': i.food.name}, 'value': 0}
|
||||
computed_properties[pt.id]['food_values'][i.food.id]['missing_unit'] = True
|
||||
else:
|
||||
computed_properties[pt.id]['missing_value'] = True
|
||||
computed_properties[pt.id]['food_values'][i.food.id] = {'id': i.food.id, 'food': i.food.name, 'value': None}
|
||||
computed_properties[pt.id]['food_values'][i.food.id] = {'id': i.food.id, 'food': {'id': i.food.id, 'name': i.food.name}, 'value': None}
|
||||
if has_property_value and i.unit is not None:
|
||||
computed_properties[pt.id]['food_values'][i.food.id]['missing_conversion'] = {'base_unit': {'id': i.unit.id, 'name': i.unit.name}, 'converted_unit': {'id': i.food.properties_food_unit.id, 'name': i.food.properties_food_unit.name}}
|
||||
|
||||
return computed_properties
|
||||
|
||||
@@ -74,5 +85,5 @@ class FoodPropertyHelper:
|
||||
if key in d and d[key]['value']:
|
||||
d[key]['value'] += value
|
||||
else:
|
||||
d[key] = {'id': food.id, 'food': food.name, 'value': value}
|
||||
d[key] = {'id': food.id, 'food': {'id': food.id, 'name': food.name}, 'value': value}
|
||||
return d
|
||||
|
||||
@@ -49,7 +49,11 @@ class RecipeSearch():
|
||||
self._search_prefs = SearchPreference()
|
||||
self._string = self._params.get('query').strip(
|
||||
) if self._params.get('query', None) else None
|
||||
|
||||
self._rating = self._params.get('rating', None)
|
||||
self._rating_gte = self._params.get('rating_gte', None)
|
||||
self._rating_lte = self._params.get('rating_lte', None)
|
||||
|
||||
self._keywords = {
|
||||
'or': self._params.get('keywords_or', None) or self._params.get('keywords', None),
|
||||
'and': self._params.get('keywords_and', None),
|
||||
@@ -70,20 +74,36 @@ class RecipeSearch():
|
||||
}
|
||||
self._steps = self._params.get('steps', None)
|
||||
self._units = self._params.get('units', None)
|
||||
# TODO add created by
|
||||
# TODO image exists
|
||||
self._sort_order = self._params.get('sort_order', None)
|
||||
self._internal = str2bool(self._params.get('internal', None))
|
||||
self._random = str2bool(self._params.get('random', False))
|
||||
self._sort_order = self._params.get('sort_order', None)
|
||||
if self._sort_order == 'random':
|
||||
self._random = True
|
||||
self.sort_order = None
|
||||
else:
|
||||
self._random = str2bool(self._params.get('random', False))
|
||||
self._new = str2bool(self._params.get('new', False))
|
||||
self._num_recent = int(self._params.get('num_recent', 0))
|
||||
self._include_children = str2bool(
|
||||
self._params.get('include_children', None))
|
||||
self._timescooked = self._params.get('timescooked', None)
|
||||
self._cookedon = self._params.get('cookedon', None)
|
||||
self._timescooked_gte = self._params.get('timescooked_gte', None)
|
||||
self._timescooked_lte = self._params.get('timescooked_lte', None)
|
||||
|
||||
self._createdon = self._params.get('createdon', None)
|
||||
self._createdon_gte = self._params.get('createdon_gte', None)
|
||||
self._createdon_lte = self._params.get('createdon_lte', None)
|
||||
|
||||
self._updatedon = self._params.get('updatedon', None)
|
||||
self._viewedon = self._params.get('viewedon', None)
|
||||
self._updatedon_gte = self._params.get('updatedon_gte', None)
|
||||
self._updatedon_lte = self._params.get('updatedon_lte', None)
|
||||
|
||||
self._viewedon_gte = self._params.get('viewedon_gte', None)
|
||||
self._viewedon_lte = self._params.get('viewedon_lte', None)
|
||||
|
||||
self._cookedon_gte = self._params.get('cookedon_gte', None)
|
||||
self._cookedon_lte = self._params.get('cookedon_lte', None)
|
||||
|
||||
self._createdby = self._params.get('createdby', None)
|
||||
self._makenow = self._params.get('makenow', None)
|
||||
# this supports hidden feature to find recipes missing X ingredients
|
||||
if isinstance(self._makenow, bool) and self._makenow == True:
|
||||
@@ -130,16 +150,19 @@ class RecipeSearch():
|
||||
|
||||
self._build_sort_order()
|
||||
self._recently_viewed(num_recent=self._num_recent)
|
||||
self._cooked_on_filter(cooked_date=self._cookedon)
|
||||
self._created_on_filter(created_date=self._createdon)
|
||||
self._updated_on_filter(updated_date=self._updatedon)
|
||||
self._viewed_on_filter(viewed_date=self._viewedon)
|
||||
self._favorite_recipes(times_cooked=self._timescooked)
|
||||
|
||||
self._cooked_on_filter()
|
||||
self._created_on_filter()
|
||||
self._updated_on_filter()
|
||||
self._viewed_on_filter()
|
||||
|
||||
self._created_by_filter(created_by_user_id=self._createdby)
|
||||
self._favorite_recipes()
|
||||
self._new_recipes()
|
||||
self.keyword_filters(**self._keywords)
|
||||
self.food_filters(**self._foods)
|
||||
self.book_filters(**self._books)
|
||||
self.rating_filter(rating=self._rating)
|
||||
self.rating_filter()
|
||||
self.internal_filter(internal=self._internal)
|
||||
self.step_filters(steps=self._steps)
|
||||
self.unit_filters(units=self._units)
|
||||
@@ -186,9 +209,9 @@ class RecipeSearch():
|
||||
else:
|
||||
order += default_order
|
||||
order[:] = [Lower('name').asc() if x ==
|
||||
'name' else x for x in order]
|
||||
'name' else x for x in order]
|
||||
order[:] = [Lower('name').desc() if x ==
|
||||
'-name' else x for x in order]
|
||||
'-name' else x for x in order]
|
||||
self.orderby = order
|
||||
|
||||
def string_filters(self, string=None):
|
||||
@@ -227,9 +250,9 @@ class RecipeSearch():
|
||||
query_filter |= Q(**{"%s" % f: self._string})
|
||||
self._queryset = self._queryset.filter(query_filter).distinct()
|
||||
|
||||
def _cooked_on_filter(self, cooked_date=None):
|
||||
if self._sort_includes('lastcooked') or cooked_date:
|
||||
lessthan = self._sort_includes('-lastcooked') or '-' in (cooked_date or [])[:1]
|
||||
def _cooked_on_filter(self):
|
||||
if self._sort_includes('lastcooked') or self._cookedon_gte or self._cookedon_lte:
|
||||
lessthan = self._sort_includes('-lastcooked') or self._cookedon_lte
|
||||
if lessthan:
|
||||
default = timezone.now() - timedelta(days=100000)
|
||||
else:
|
||||
@@ -237,51 +260,44 @@ class RecipeSearch():
|
||||
self._queryset = self._queryset.annotate(
|
||||
lastcooked=Coalesce(Max(Case(When(cooklog__created_by=self._request.user, cooklog__space=self._request.space, then='cooklog__created_at'))), Value(default))
|
||||
)
|
||||
if cooked_date is None:
|
||||
return
|
||||
|
||||
cooked_date = date(*[int(x)for x in cooked_date.split('-') if x != ''])
|
||||
|
||||
if lessthan:
|
||||
self._queryset = self._queryset.filter(lastcooked__date__lte=cooked_date).exclude(lastcooked=default)
|
||||
else:
|
||||
self._queryset = self._queryset.filter(lastcooked__date__gte=cooked_date).exclude(lastcooked=default)
|
||||
|
||||
def _created_on_filter(self, created_date=None):
|
||||
if created_date is None:
|
||||
return
|
||||
lessthan = '-' in created_date[:1]
|
||||
created_date = date(*[int(x) for x in created_date.split('-') if x != ''])
|
||||
if lessthan:
|
||||
self._queryset = self._queryset.filter(created_at__date__lte=created_date)
|
||||
else:
|
||||
self._queryset = self._queryset.filter(created_at__date__gte=created_date)
|
||||
|
||||
def _updated_on_filter(self, updated_date=None):
|
||||
if updated_date is None:
|
||||
return
|
||||
lessthan = '-' in updated_date[:1]
|
||||
updated_date = date(*[int(x)for x in updated_date.split('-') if x != ''])
|
||||
if lessthan:
|
||||
self._queryset = self._queryset.filter(updated_at__date__lte=updated_date)
|
||||
else:
|
||||
self._queryset = self._queryset.filter(updated_at__date__gte=updated_date)
|
||||
if self._cookedon_lte:
|
||||
self._queryset = self._queryset.filter(lastcooked__date__lte=self._cookedon_lte).exclude(lastcooked=default)
|
||||
elif self._cookedon_gte:
|
||||
self._queryset = self._queryset.filter(lastcooked__date__gte=self._cookedon_gte).exclude(lastcooked=default)
|
||||
|
||||
def _viewed_on_filter(self, viewed_date=None):
|
||||
if self._sort_includes('lastviewed') or viewed_date:
|
||||
if self._sort_includes('lastviewed') or self._viewedon_gte or self._viewedon_lte:
|
||||
longTimeAgo = timezone.now() - timedelta(days=100000)
|
||||
self._queryset = self._queryset.annotate(
|
||||
lastviewed=Coalesce(Max(Case(When(viewlog__created_by=self._request.user, viewlog__space=self._request.space, then='viewlog__created_at'))), Value(longTimeAgo))
|
||||
)
|
||||
if viewed_date is None:
|
||||
return
|
||||
lessthan = '-' in viewed_date[:1]
|
||||
viewed_date = date(*[int(x)for x in viewed_date.split('-') if x != ''])
|
||||
|
||||
if lessthan:
|
||||
self._queryset = self._queryset.filter(lastviewed__date__lte=viewed_date).exclude(lastviewed=longTimeAgo)
|
||||
else:
|
||||
self._queryset = self._queryset.filter(lastviewed__date__gte=viewed_date).exclude(lastviewed=longTimeAgo)
|
||||
if self._viewedon_lte:
|
||||
self._queryset = self._queryset.filter(lastviewed__date__lte=self._viewedon_lte).exclude(lastviewed=longTimeAgo)
|
||||
elif self._viewedon_gte:
|
||||
self._queryset = self._queryset.filter(lastviewed__date__gte=self._viewedon_gte).exclude(lastviewed=longTimeAgo)
|
||||
|
||||
def _created_on_filter(self):
|
||||
if self._createdon:
|
||||
self._queryset = self._queryset.filter(created_at__date=self._createdon)
|
||||
elif self._createdon_lte:
|
||||
self._queryset = self._queryset.filter(created_at__date__lte=self._createdon_lte)
|
||||
elif self._createdon_gte:
|
||||
self._queryset = self._queryset.filter(created_at__date__gte=self._createdon_gte)
|
||||
|
||||
def _updated_on_filter(self):
|
||||
if self._updatedon:
|
||||
self._queryset = self._queryset.filter(updated_at__date__date=self._updatedon)
|
||||
elif self._updatedon_lte:
|
||||
self._queryset = self._queryset.filter(updated_at__date__lte=self._updatedon_lte)
|
||||
elif self._updatedon_gte:
|
||||
self._queryset = self._queryset.filter(updated_at__date__gte=self._updatedon_gte)
|
||||
|
||||
def _created_by_filter(self, created_by_user_id=None):
|
||||
if created_by_user_id is None:
|
||||
return
|
||||
self._queryset = self._queryset.filter(created_by__id=created_by_user_id)
|
||||
|
||||
def _new_recipes(self, new_days=7):
|
||||
# TODO make new days a user-setting
|
||||
@@ -307,9 +323,9 @@ class RecipeSearch():
|
||||
)
|
||||
self._queryset = self._queryset.annotate(recent=Coalesce(Max(Case(When(pk__in=num_recent_recipes.values('recipe'), then='viewlog__pk'))), Value(0)))
|
||||
|
||||
def _favorite_recipes(self, times_cooked=None):
|
||||
if self._sort_includes('favorite') or times_cooked:
|
||||
less_than = '-' in (str(times_cooked) or []) and not self._sort_includes('-favorite')
|
||||
def _favorite_recipes(self):
|
||||
if self._sort_includes('favorite') or self._timescooked or self._timescooked_gte or self._timescooked_lte:
|
||||
less_than = self._timescooked_lte and not self._sort_includes('-favorite')
|
||||
if less_than:
|
||||
default = 1000
|
||||
else:
|
||||
@@ -321,15 +337,13 @@ class RecipeSearch():
|
||||
.values('count')
|
||||
)
|
||||
self._queryset = self._queryset.annotate(favorite=Coalesce(Subquery(favorite_recipes), default))
|
||||
if times_cooked is None:
|
||||
return
|
||||
|
||||
if times_cooked == '0':
|
||||
if self._timescooked:
|
||||
self._queryset = self._queryset.filter(favorite=0)
|
||||
elif less_than:
|
||||
self._queryset = self._queryset.filter(favorite__lte=int(times_cooked.replace('-', ''))).exclude(favorite=0)
|
||||
else:
|
||||
self._queryset = self._queryset.filter(favorite__gte=int(times_cooked))
|
||||
elif self._timescooked_lte:
|
||||
self._queryset = self._queryset.filter(favorite__lte=int(self._timescooked_lte)).exclude(favorite=0)
|
||||
elif self._timescooked_gte:
|
||||
self._queryset = self._queryset.filter(favorite__gte=int(self._timescooked_gte))
|
||||
|
||||
def keyword_filters(self, **kwargs):
|
||||
if all([kwargs[x] is None for x in kwargs]):
|
||||
@@ -407,25 +421,16 @@ class RecipeSearch():
|
||||
units = [units]
|
||||
self._queryset = self._queryset.filter(steps__ingredients__unit__in=units)
|
||||
|
||||
def rating_filter(self, rating=None):
|
||||
if rating or self._sort_includes('rating'):
|
||||
lessthan = '-' in (rating or [])
|
||||
reverse = 'rating' in (self._sort_order or []) and '-rating' not in (self._sort_order or [])
|
||||
if lessthan or reverse:
|
||||
default = 100
|
||||
else:
|
||||
default = 0
|
||||
# TODO make ratings a settings user-only vs all-users
|
||||
self._queryset = self._queryset.annotate(rating=Round(Avg(Case(When(cooklog__created_by=self._request.user, then='cooklog__rating'), default=default))))
|
||||
if rating is None:
|
||||
return
|
||||
def rating_filter(self):
|
||||
if self._rating or self._rating_lte or self._rating_gte or self._sort_includes('rating'):
|
||||
self._queryset = self._queryset.annotate(rating=Round(Avg(Case(When(cooklog__created_by=self._request.user, then='cooklog__rating'), default=0))))
|
||||
|
||||
if rating == '0':
|
||||
self._queryset = self._queryset.filter(rating=0)
|
||||
elif lessthan:
|
||||
self._queryset = self._queryset.filter(rating__lte=int(rating[1:])).exclude(rating=0)
|
||||
else:
|
||||
self._queryset = self._queryset.filter(rating__gte=int(rating))
|
||||
if self._rating:
|
||||
self._queryset = self._queryset.filter(rating=round(int(self._rating)))
|
||||
elif self._rating_gte:
|
||||
self._queryset = self._queryset.filter(rating__gte=int(self._rating_gte))
|
||||
elif self._rating_lte:
|
||||
self._queryset = self._queryset.filter(rating__gte=int(self._rating_lte)).exclude(rating=0)
|
||||
|
||||
def internal_filter(self, internal=None):
|
||||
if not internal:
|
||||
@@ -535,11 +540,11 @@ class RecipeSearch():
|
||||
shopping_users = [*self._request.user.get_shopping_share(), self._request.user]
|
||||
|
||||
onhand_filter = (
|
||||
Q(steps__ingredients__food__onhand_users__in=shopping_users) # food onhand
|
||||
# or substitute food onhand
|
||||
| Q(steps__ingredients__food__substitute__onhand_users__in=shopping_users)
|
||||
| Q(steps__ingredients__food__in=self.__children_substitute_filter(shopping_users))
|
||||
| Q(steps__ingredients__food__in=self.__sibling_substitute_filter(shopping_users))
|
||||
Q(steps__ingredients__food__onhand_users__in=shopping_users) # food onhand
|
||||
# or substitute food onhand
|
||||
| Q(steps__ingredients__food__substitute__onhand_users__in=shopping_users)
|
||||
| Q(steps__ingredients__food__in=self.__children_substitute_filter(shopping_users))
|
||||
| Q(steps__ingredients__food__in=self.__sibling_substitute_filter(shopping_users))
|
||||
)
|
||||
makenow_recipes = Recipe.objects.annotate(
|
||||
count_food=Count('steps__ingredients__food__pk', filter=Q(steps__ingredients__food__isnull=False), distinct=True),
|
||||
|
||||
@@ -6,7 +6,7 @@ from django.utils.dateparse import parse_duration
|
||||
from django.utils.translation import gettext as _
|
||||
from isodate import parse_duration as iso_parse_duration
|
||||
from isodate.isoerror import ISO8601Error
|
||||
from pytube import YouTube
|
||||
from pytubefix import YouTube
|
||||
from recipe_scrapers._utils import get_host_name, get_minutes
|
||||
|
||||
from cookbook.helper.automation_helper import AutomationEngine
|
||||
@@ -28,7 +28,9 @@ def get_from_scraper(scrape, request):
|
||||
source_url = scrape.url
|
||||
except Exception:
|
||||
pass
|
||||
if source_url:
|
||||
if source_url == "https://urlnotfound.none" or not source_url:
|
||||
recipe_json['source_url'] = ''
|
||||
else:
|
||||
recipe_json['source_url'] = source_url
|
||||
try:
|
||||
keywords.append(source_url.replace('http://', '').replace('https://', '').split('/')[0])
|
||||
@@ -104,14 +106,14 @@ def get_from_scraper(scrape, request):
|
||||
|
||||
# assign image
|
||||
try:
|
||||
recipe_json['image'] = parse_image(scrape.image()) or None
|
||||
recipe_json['image_url'] = parse_image(scrape.image()) or None
|
||||
except Exception:
|
||||
recipe_json['image'] = None
|
||||
if not recipe_json['image']:
|
||||
recipe_json['image_url'] = None
|
||||
if not recipe_json['image_url']:
|
||||
try:
|
||||
recipe_json['image'] = parse_image(scrape.schema.data.get('image')) or ''
|
||||
recipe_json['image_url'] = parse_image(scrape.schema.data.get('image')) or ''
|
||||
except Exception:
|
||||
recipe_json['image'] = ''
|
||||
recipe_json['image_url'] = ''
|
||||
|
||||
# assign keywords
|
||||
try:
|
||||
@@ -203,6 +205,7 @@ def get_from_scraper(scrape, request):
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
recipe_json['properties'] = []
|
||||
try:
|
||||
recipe_json['properties'] = get_recipe_properties(request.space, scrape.schema.nutrients())
|
||||
print(recipe_json['properties'])
|
||||
@@ -225,6 +228,13 @@ def get_recipe_properties(space, property_data):
|
||||
"property-proteins": "proteinContent",
|
||||
"property-fats": "fatContent",
|
||||
}
|
||||
|
||||
serving_size = 1
|
||||
try:
|
||||
serving_size = parse_servings(property_data['servingSize'])
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
recipe_properties = []
|
||||
for pt in PropertyType.objects.filter(space=space, open_data_slug__in=list(properties.keys())).all():
|
||||
for p in list(properties.keys()):
|
||||
@@ -235,7 +245,7 @@ def get_recipe_properties(space, property_data):
|
||||
'id': pt.id,
|
||||
'name': pt.name,
|
||||
},
|
||||
'property_amount': parse_servings(property_data[properties[p]]) / parse_servings(property_data['servingSize']),
|
||||
'property_amount': parse_servings(property_data[properties[p]]) / serving_size,
|
||||
})
|
||||
|
||||
return recipe_properties
|
||||
@@ -272,9 +282,8 @@ def get_from_youtube_scraper(url, request):
|
||||
default_recipe_json['image'] = video.thumbnail_url
|
||||
if video.description:
|
||||
default_recipe_json['steps'][0]['instruction'] = automation_engine.apply_regex_replace_automation(video.description, Automation.INSTRUCTION_REPLACE)
|
||||
|
||||
except Exception:
|
||||
pass
|
||||
traceback.print_exc()
|
||||
|
||||
return default_recipe_json
|
||||
|
||||
@@ -423,9 +432,9 @@ def parse_keywords(keyword_json, request):
|
||||
if len(kw) != 0:
|
||||
kw = automation_engine.apply_keyword_automation(kw)
|
||||
if k := Keyword.objects.filter(name__iexact=kw, space=request.space).first():
|
||||
keywords.append({'label': str(k), 'name': k.name, 'id': k.id})
|
||||
keywords.append({'label': str(k), 'name': k.name, 'id': k.id, 'import_keyword': True})
|
||||
else:
|
||||
keywords.append({'label': kw, 'name': kw})
|
||||
keywords.append({'label': kw, 'name': kw, 'import_keyword': False})
|
||||
|
||||
return keywords
|
||||
|
||||
@@ -482,7 +491,11 @@ def get_images_from_soup(soup, url):
|
||||
u = u.split('?')[0]
|
||||
filename = re.search(r'/([\w_-]+[.](jpg|jpeg|gif|png))$', u)
|
||||
if filename:
|
||||
if (('http' not in u) and (url)):
|
||||
if u.startswith('//'):
|
||||
# urls from e.g. ottolenghi.co.uk start with //
|
||||
u = 'https:' + u
|
||||
if ('http' not in u) and url:
|
||||
print(f'rewriting URL {u}')
|
||||
# sometimes an image source can be relative
|
||||
# if it is provide the base url
|
||||
u = '{}://{}{}'.format(prot, site, u)
|
||||
|
||||
@@ -12,7 +12,7 @@ class ScopeMiddleware:
|
||||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request):
|
||||
prefix = settings.JS_REVERSE_SCRIPT_PREFIX or ''
|
||||
prefix = settings.SCRIPT_NAME or ''
|
||||
|
||||
# need to disable scopes for writing requests into userpref and enable for loading ?
|
||||
if request.path.startswith(prefix + '/api/user-preference/'):
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
import json
|
||||
from recipe_scrapers._abstract import AbstractScraper
|
||||
|
||||
|
||||
class CooksIllustrated(AbstractScraper):
|
||||
@classmethod
|
||||
def host(cls, site='cooksillustrated'):
|
||||
return {
|
||||
'cooksillustrated': f"{site}.com",
|
||||
'americastestkitchen': f"{site}.com",
|
||||
'cookscountry': f"{site}.com",
|
||||
}.get(site)
|
||||
|
||||
def title(self):
|
||||
return self.schema.title()
|
||||
|
||||
def image(self):
|
||||
return self.schema.image()
|
||||
|
||||
def total_time(self):
|
||||
if not self.recipe:
|
||||
self.get_recipe()
|
||||
return self.recipe['recipeTimeNote']
|
||||
|
||||
def yields(self):
|
||||
if not self.recipe:
|
||||
self.get_recipe()
|
||||
return self.recipe['yields']
|
||||
|
||||
def ingredients(self):
|
||||
if not self.recipe:
|
||||
self.get_recipe()
|
||||
ingredients = []
|
||||
for group in self.recipe['ingredientGroups']:
|
||||
ingredients += group['fields']['recipeIngredientItems']
|
||||
return [
|
||||
"{} {} {}{}".format(
|
||||
i['fields']['qty'] or '',
|
||||
i['fields']['measurement'] or '',
|
||||
i['fields']['ingredient']['fields']['title'] or '',
|
||||
i['fields']['postText'] or ''
|
||||
)
|
||||
for i in ingredients
|
||||
]
|
||||
|
||||
def instructions(self):
|
||||
if not self.recipe:
|
||||
self.get_recipe()
|
||||
if self.recipe.get('headnote', False):
|
||||
i = ['Note: ' + self.recipe.get('headnote', '')]
|
||||
else:
|
||||
i = []
|
||||
return "\n".join(
|
||||
i
|
||||
+ [self.recipe.get('whyThisWorks', '')]
|
||||
+ [
|
||||
instruction['fields']['content']
|
||||
for instruction in self.recipe['instructions']
|
||||
]
|
||||
)
|
||||
|
||||
def nutrients(self):
|
||||
raise NotImplementedError("This should be implemented.")
|
||||
|
||||
def get_recipe(self):
|
||||
j = json.loads(self.soup.find(type='application/json').string)
|
||||
name = list(j['props']['initialState']['content']['documents'])[0]
|
||||
self.recipe = j['props']['initialState']['content']['documents'][name]
|
||||
@@ -1,43 +0,0 @@
|
||||
from json import JSONDecodeError
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
from recipe_scrapers import SCRAPERS, get_host_name
|
||||
from recipe_scrapers._factory import SchemaScraperFactory
|
||||
from recipe_scrapers._schemaorg import SchemaOrg
|
||||
|
||||
from .cooksillustrated import CooksIllustrated
|
||||
|
||||
CUSTOM_SCRAPERS = {
|
||||
CooksIllustrated.host(site="cooksillustrated"): CooksIllustrated,
|
||||
CooksIllustrated.host(site="americastestkitchen"): CooksIllustrated,
|
||||
CooksIllustrated.host(site="cookscountry"): CooksIllustrated,
|
||||
}
|
||||
SCRAPERS.update(CUSTOM_SCRAPERS)
|
||||
|
||||
|
||||
def text_scraper(text, url=None):
|
||||
domain = None
|
||||
if url:
|
||||
domain = get_host_name(url)
|
||||
if domain in SCRAPERS:
|
||||
scraper_class = SCRAPERS[domain]
|
||||
else:
|
||||
scraper_class = SchemaScraperFactory.SchemaScraper
|
||||
|
||||
class TextScraper(scraper_class):
|
||||
def __init__(
|
||||
self,
|
||||
html=None,
|
||||
url=None,
|
||||
):
|
||||
self.supported_only = False
|
||||
self.meta_http_equiv = False
|
||||
self.soup = BeautifulSoup(html, "html.parser")
|
||||
self.url = url
|
||||
self.recipe = None
|
||||
try:
|
||||
self.schema = SchemaOrg(html)
|
||||
except (JSONDecodeError, AttributeError):
|
||||
pass
|
||||
|
||||
return TextScraper(url=url, html=text)
|
||||
@@ -113,7 +113,7 @@ class RecipeShoppingEditor():
|
||||
if not self.servings:
|
||||
self.servings = getattr(self.mealplan, 'servings', None) or getattr(self.recipe, 'servings', 1.0)
|
||||
|
||||
self._shopping_list_recipe = ShoppingListRecipe.objects.create(recipe=self.recipe, mealplan=self.mealplan, servings=self.servings)
|
||||
self._shopping_list_recipe = ShoppingListRecipe.objects.create(recipe=self.recipe, mealplan=self.mealplan, servings=self.servings, space=self.space, created_by=self.created_by)
|
||||
|
||||
if ingredients:
|
||||
self._add_ingredients(ingredients=ingredients)
|
||||
@@ -153,8 +153,9 @@ class RecipeShoppingEditor():
|
||||
return True
|
||||
|
||||
for sle in ShoppingListEntry.objects.filter(list_recipe=self._shopping_list_recipe):
|
||||
sle.amount = sle.ingredient.amount * Decimal(self._servings_factor)
|
||||
sle.save()
|
||||
if sle.ingredient: # TODO temporarily dont scale manual entries until ingredient_amount or some other base amount has been migrated to SLE
|
||||
sle.amount = sle.ingredient.amount * Decimal(self._servings_factor)
|
||||
sle.save()
|
||||
self._shopping_list_recipe.servings = self.servings
|
||||
self._shopping_list_recipe.save()
|
||||
return True
|
||||
|
||||
@@ -3,6 +3,8 @@ from gettext import gettext as _
|
||||
import bleach
|
||||
import markdown as md
|
||||
from jinja2 import Template, TemplateSyntaxError, UndefinedError
|
||||
from jinja2.exceptions import SecurityError
|
||||
from jinja2.sandbox import SandboxedEnvironment
|
||||
from markdown.extensions.tables import TableExtension
|
||||
|
||||
from cookbook.helper.mdx_attributes import MarkdownFormatExtension
|
||||
@@ -68,7 +70,7 @@ def render_instructions(step): # TODO deduplicate markdown cleanup code
|
||||
parsed_md = md.markdown(
|
||||
instructions,
|
||||
extensions=[
|
||||
'markdown.extensions.fenced_code', TableExtension(),
|
||||
'markdown.extensions.fenced_code', 'markdown.extensions.sane_lists', 'markdown.extensions.nl2br', TableExtension(),
|
||||
UrlizeExtension(), MarkdownFormatExtension()
|
||||
]
|
||||
)
|
||||
@@ -89,11 +91,13 @@ def render_instructions(step): # TODO deduplicate markdown cleanup code
|
||||
return f"<scalable-number v-bind:number='{bleach.clean(str(number))}' v-bind:factor='ingredient_factor'></scalable-number>"
|
||||
|
||||
try:
|
||||
template = Template(instructions)
|
||||
instructions = template.render(ingredients=ingredients, scale=scale)
|
||||
env = SandboxedEnvironment()
|
||||
instructions = env.from_string(instructions).render(ingredients=ingredients, scale=scale)
|
||||
except TemplateSyntaxError:
|
||||
return _('Could not parse template code.') + ' Error: Template Syntax broken'
|
||||
except UndefinedError:
|
||||
return _('Could not parse template code.') + ' Error: Undefined Error'
|
||||
except SecurityError:
|
||||
return _('Could not parse template code.') + ' Error: Security Error'
|
||||
|
||||
return instructions
|
||||
|
||||
@@ -20,6 +20,7 @@ CONVERSION_TABLE = {
|
||||
'gallon': 0.264172,
|
||||
'tbsp': 67.628,
|
||||
'tsp': 202.884,
|
||||
'us_cup': 4.22675,
|
||||
'imperial_fluid_ounce': 35.1951,
|
||||
'imperial_pint': 1.75975,
|
||||
'imperial_quart': 0.879877,
|
||||
|
||||
@@ -2,12 +2,12 @@ import re
|
||||
from io import BytesIO
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.recipe_url_import import (get_from_scraper, get_images_from_soup,
|
||||
iso_duration_to_minutes)
|
||||
from cookbook.helper.scrapers.scrapers import text_scraper
|
||||
from recipe_scrapers import scrape_html
|
||||
from cookbook.integration.integration import Integration
|
||||
from cookbook.models import Ingredient, Recipe, Step
|
||||
|
||||
@@ -20,7 +20,7 @@ class CookBookApp(Integration):
|
||||
def get_recipe_from_file(self, file):
|
||||
recipe_html = file.getvalue().decode("utf-8")
|
||||
|
||||
scrape = text_scraper(text=recipe_html)
|
||||
scrape = scrape_html(html=recipe_html, org_url="https://cookbookapp.import", supported_only=False)
|
||||
recipe_json = get_from_scraper(scrape, self.request)
|
||||
images = list(dict.fromkeys(get_images_from_soup(scrape.soup, None)))
|
||||
|
||||
@@ -60,14 +60,15 @@ class CookBookApp(Integration):
|
||||
food=f, unit=u, amount=ingredient.get('amount', None), note=ingredient.get('note', None), original_text=ingredient.get('original_text', None), space=self.request.space,
|
||||
))
|
||||
|
||||
if len(images) > 0:
|
||||
try:
|
||||
url = images[0]
|
||||
if validators.url(url, public=True):
|
||||
try:
|
||||
for url in images:
|
||||
# import the first valid image which is not cookbookapp branding
|
||||
if validate_import_url(url) and not url.startswith("https://media.cookbookmanager.com/brand/"):
|
||||
response = requests.get(url)
|
||||
self.import_recipe_image(recipe, BytesIO(response.content))
|
||||
except Exception as e:
|
||||
print('failed to import image ', str(e))
|
||||
break
|
||||
except Exception as e:
|
||||
print('failed to import image ', str(e))
|
||||
|
||||
recipe.save()
|
||||
return recipe
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from io import BytesIO
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time
|
||||
from cookbook.integration.integration import Integration
|
||||
@@ -69,7 +69,7 @@ class Cookmate(Integration):
|
||||
if recipe_xml.find('imageurl') is not None:
|
||||
try:
|
||||
url = recipe_xml.find('imageurl').text.strip()
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
response = requests.get(url)
|
||||
self.import_recipe_image(recipe, BytesIO(response.content))
|
||||
except Exception as e:
|
||||
|
||||
211
cookbook/integration/gourmet.py
Normal file
211
cookbook/integration/gourmet.py
Normal file
@@ -0,0 +1,211 @@
|
||||
import base64
|
||||
from io import BytesIO
|
||||
from lxml import etree
|
||||
import requests
|
||||
from pathlib import Path
|
||||
|
||||
from bs4 import BeautifulSoup, Tag
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time, iso_duration_to_minutes
|
||||
from cookbook.integration.integration import Integration
|
||||
from cookbook.models import Ingredient, Recipe, Step, Keyword
|
||||
from recipe_scrapers import scrape_html
|
||||
|
||||
|
||||
class Gourmet(Integration):
|
||||
|
||||
def split_recipe_file(self, file):
|
||||
encoding = 'utf-8'
|
||||
byte_string = file.read()
|
||||
text_obj = byte_string.decode(encoding, errors="ignore")
|
||||
soup = BeautifulSoup(text_obj, "html.parser")
|
||||
return soup.find_all("div", {"class": "recipe"})
|
||||
|
||||
def get_ingredients_recursive(self, step, ingredients, ingredient_parser):
|
||||
if isinstance(ingredients, Tag):
|
||||
for ingredient in ingredients.children:
|
||||
if not isinstance(ingredient, Tag):
|
||||
continue
|
||||
|
||||
if ingredient.name in ["li"]:
|
||||
step_name = "".join(ingredient.findAll(text=True, recursive=False)).strip().rstrip(":")
|
||||
|
||||
step.ingredients.add(Ingredient.objects.create(
|
||||
is_header=True,
|
||||
note=step_name[:256],
|
||||
original_text=step_name,
|
||||
space=self.request.space,
|
||||
))
|
||||
next_ingrediets = ingredient.find("ul", {"class": "ing"})
|
||||
self.get_ingredients_recursive(step, next_ingrediets, ingredient_parser)
|
||||
|
||||
else:
|
||||
try:
|
||||
amount, unit, food, note = ingredient_parser.parse(ingredient.text.strip())
|
||||
f = ingredient_parser.get_food(food)
|
||||
u = ingredient_parser.get_unit(unit)
|
||||
step.ingredients.add(
|
||||
Ingredient.objects.create(
|
||||
food=f,
|
||||
unit=u,
|
||||
amount=amount,
|
||||
note=note,
|
||||
original_text=ingredient.text.strip(),
|
||||
space=self.request.space,
|
||||
)
|
||||
)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
def get_recipe_from_file(self, file):
|
||||
# 'file' comes is as a beautifulsoup object
|
||||
|
||||
source_url = None
|
||||
for item in file.find_all('a'):
|
||||
if item.has_attr('href'):
|
||||
source_url = item.get("href")
|
||||
break
|
||||
|
||||
name = file.find("p", {"class": "title"}).find("span", {"itemprop": "name"}).text.strip()
|
||||
|
||||
recipe = Recipe.objects.create(
|
||||
name=name[:128],
|
||||
source_url=source_url,
|
||||
created_by=self.request.user,
|
||||
internal=True,
|
||||
space=self.request.space,
|
||||
)
|
||||
|
||||
for category in file.find_all("span", {"itemprop": "recipeCategory"}):
|
||||
keyword, created = Keyword.objects.get_or_create(name=category.text, space=self.request.space)
|
||||
recipe.keywords.add(keyword)
|
||||
|
||||
try:
|
||||
recipe.servings = parse_servings(file.find("span", {"itemprop": "recipeYield"}).text.strip())
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
try:
|
||||
prep_time = file.find("span", {"itemprop": "prepTime"}).text.strip().split()
|
||||
prep_time[0] = prep_time[0].replace(',', '.')
|
||||
if prep_time[1].lower() in ['stunde', 'stunden', 'hour', 'hours']:
|
||||
prep_time_min = int(float(prep_time[0]) * 60)
|
||||
elif prep_time[1].lower() in ['tag', 'tage', 'day', 'days']:
|
||||
prep_time_min = int(float(prep_time[0]) * 60 * 24)
|
||||
else:
|
||||
prep_time_min = int(prep_time[0])
|
||||
recipe.waiting_time = prep_time_min
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
try:
|
||||
cook_time = file.find("span", {"itemprop": "cookTime"}).text.strip().split()
|
||||
cook_time[0] = cook_time[0].replace(',', '.')
|
||||
if cook_time[1].lower() in ['stunde', 'stunden', 'hour', 'hours']:
|
||||
cook_time_min = int(float(cook_time[0]) * 60)
|
||||
elif cook_time[1].lower() in ['tag', 'tage', 'day', 'days']:
|
||||
cook_time_min = int(float(cook_time[0]) * 60 * 24)
|
||||
else:
|
||||
cook_time_min = int(cook_time[0])
|
||||
|
||||
recipe.working_time = cook_time_min
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
for cuisine in file.find_all('span', {'itemprop': 'recipeCuisine'}):
|
||||
cuisine_name = cuisine.text
|
||||
keyword = Keyword.objects.get_or_create(space=self.request.space, name=cuisine_name)
|
||||
if len(keyword):
|
||||
recipe.keywords.add(keyword[0])
|
||||
|
||||
for category in file.find_all('span', {'itemprop': 'recipeCategory'}):
|
||||
category_name = category.text
|
||||
keyword = Keyword.objects.get_or_create(space=self.request.space, name=category_name)
|
||||
if len(keyword):
|
||||
recipe.keywords.add(keyword[0])
|
||||
|
||||
step = Step.objects.create(
|
||||
instruction='',
|
||||
space=self.request.space,
|
||||
show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
|
||||
)
|
||||
|
||||
ingredient_parser = IngredientParser(self.request, True)
|
||||
|
||||
ingredients = file.find("ul", {"class": "ing"})
|
||||
self.get_ingredients_recursive(step, ingredients, ingredient_parser)
|
||||
|
||||
instructions = file.find("div", {"class": "instructions"})
|
||||
if isinstance(instructions, Tag):
|
||||
for instruction in instructions.children:
|
||||
if not isinstance(instruction, Tag) or instruction.text == "":
|
||||
continue
|
||||
if instruction.name == "h3":
|
||||
if step.instruction:
|
||||
step.save()
|
||||
recipe.steps.add(step)
|
||||
step = Step.objects.create(
|
||||
instruction='',
|
||||
space=self.request.space,
|
||||
)
|
||||
|
||||
step.name = instruction.text.strip()[:128]
|
||||
else:
|
||||
if instruction.name == "div":
|
||||
for instruction_step in instruction.children:
|
||||
for br in instruction_step.find_all("br"):
|
||||
br.replace_with("\n")
|
||||
step.instruction += instruction_step.text.strip() + ' \n\n'
|
||||
|
||||
notes = file.find("div", {"class": "modifications"})
|
||||
if notes:
|
||||
for n in notes.children:
|
||||
if n.text == "":
|
||||
continue
|
||||
if n.name == "h3":
|
||||
step.instruction += f'*{n.text.strip()}:* \n\n'
|
||||
else:
|
||||
for br in n.find_all("br"):
|
||||
br.replace_with("\n")
|
||||
|
||||
step.instruction += '*' + n.text.strip() + '* \n\n'
|
||||
|
||||
description = ''
|
||||
try:
|
||||
description = file.find("div", {"id": "description"}).text.strip()
|
||||
except AttributeError:
|
||||
pass
|
||||
if len(description) <= 512:
|
||||
recipe.description = description
|
||||
else:
|
||||
recipe.description = description[:480] + ' ... (full description below)'
|
||||
step.instruction += '*Description:* \n\n*' + description + '* \n\n'
|
||||
|
||||
step.save()
|
||||
recipe.steps.add(step)
|
||||
|
||||
# import the Primary recipe image that is stored in the Zip
|
||||
try:
|
||||
image_path = file.find("img").get("src")
|
||||
image_filename = image_path.split("\\")[1]
|
||||
|
||||
for f in self.import_zip.filelist:
|
||||
zip_file_name = Path(f.filename).name
|
||||
if image_filename == zip_file_name:
|
||||
image_file = self.import_zip.read(f)
|
||||
image_bytes = BytesIO(image_file)
|
||||
self.import_recipe_image(recipe, image_bytes, filetype='.jpeg')
|
||||
break
|
||||
except Exception as e:
|
||||
print(recipe.name, ': failed to import image ', str(e))
|
||||
|
||||
recipe.save()
|
||||
return recipe
|
||||
|
||||
def get_files_from_recipes(self, recipes, el, cookie):
|
||||
raise NotImplementedError('Method not implemented in storage integration')
|
||||
|
||||
def get_file_from_recipe(self, recipe):
|
||||
raise NotImplementedError('Method not implemented in storage integration')
|
||||
@@ -153,6 +153,19 @@ class Integration:
|
||||
il.total_recipes = len(new_file_list)
|
||||
file_list = new_file_list
|
||||
|
||||
if isinstance(self, cookbook.integration.gourmet.Gourmet):
|
||||
self.import_zip = import_zip
|
||||
new_file_list = []
|
||||
for file in file_list:
|
||||
if file.file_size == 0:
|
||||
next
|
||||
if file.filename.startswith("index.htm"):
|
||||
next
|
||||
if file.filename.endswith(".htm"):
|
||||
new_file_list += self.split_recipe_file(BytesIO(import_zip.read(file.filename)))
|
||||
il.total_recipes = len(new_file_list)
|
||||
file_list = new_file_list
|
||||
|
||||
for z in file_list:
|
||||
try:
|
||||
if not hasattr(z, 'filename') or isinstance(z, Tag):
|
||||
|
||||
@@ -72,14 +72,14 @@ class Mealie(Integration):
|
||||
)
|
||||
recipe.steps.add(step)
|
||||
|
||||
if 'recipe_yield' in recipe_json:
|
||||
if 'recipe_yield' in recipe_json and recipe_json['recipe_yield'] is not None:
|
||||
recipe.servings = parse_servings(recipe_json['recipe_yield'])
|
||||
recipe.servings_text = parse_servings_text(recipe_json['recipe_yield'])
|
||||
|
||||
if 'total_time' in recipe_json and recipe_json['total_time'] is not None:
|
||||
recipe.working_time = parse_time(recipe_json['total_time'])
|
||||
|
||||
if 'org_url' in recipe_json:
|
||||
if 'org_url' in recipe_json and recipe_json['org_url'] is not None:
|
||||
recipe.source_url = recipe_json['org_url']
|
||||
|
||||
recipe.save()
|
||||
|
||||
@@ -6,8 +6,8 @@ from gettext import gettext as _
|
||||
from io import BytesIO
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text
|
||||
from cookbook.integration.integration import Integration
|
||||
@@ -84,13 +84,23 @@ class Paprika(Integration):
|
||||
|
||||
recipe.steps.add(step)
|
||||
|
||||
# Paprika exports can have images in either of image_url, or photo_data.
|
||||
# If a user takes an image himself, only photo_data will be set.
|
||||
# If a user imports an image, both will be set. But the photo_data will be a center-cropped square resized version, so the image_url is preferred.
|
||||
|
||||
# Try to download image if possible
|
||||
try:
|
||||
if recipe_json.get("image_url", None):
|
||||
url = recipe_json.get("image_url", None)
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
response = requests.get(url)
|
||||
self.import_recipe_image(recipe, BytesIO(response.content))
|
||||
if response.status_code == 200 and len(response.content) > 0:
|
||||
self.import_recipe_image(recipe, BytesIO(response.content))
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# If no image downloaded, try to extract from photo_data
|
||||
if not recipe.image:
|
||||
if recipe_json.get("photo_data", None):
|
||||
self.import_recipe_image(recipe, BytesIO(base64.b64decode(recipe_json['photo_data'])), filetype='.jpeg')
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from io import BytesIO
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time
|
||||
from cookbook.integration.integration import Integration
|
||||
@@ -75,7 +75,7 @@ class Plantoeat(Integration):
|
||||
|
||||
if image_url:
|
||||
try:
|
||||
if validators.url(image_url, public=True):
|
||||
if validate_import_url(image_url):
|
||||
response = requests.get(image_url)
|
||||
self.import_recipe_image(recipe, BytesIO(response.content))
|
||||
except Exception as e:
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
import imghdr
|
||||
import json
|
||||
import re
|
||||
from io import BytesIO
|
||||
from zipfile import ZipFile
|
||||
|
||||
import requests
|
||||
import validators
|
||||
from PIL import Image
|
||||
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.image_processing import get_filetype
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.integration.integration import Integration
|
||||
@@ -125,9 +126,9 @@ class RecetteTek(Integration):
|
||||
else:
|
||||
if file['originalPicture'] != '':
|
||||
url = file['originalPicture']
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
response = requests.get(url)
|
||||
if imghdr.what(BytesIO(response.content)) is not None:
|
||||
if Image.open(BytesIO(response.content)).verify():
|
||||
self.import_recipe_image(recipe, BytesIO(response.content), filetype=get_filetype(file['originalPicture']))
|
||||
else:
|
||||
raise Exception("Original image failed to download.")
|
||||
|
||||
@@ -2,8 +2,8 @@ import json
|
||||
from io import BytesIO
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time
|
||||
from cookbook.integration.integration import Integration
|
||||
@@ -56,7 +56,7 @@ class RecipeSage(Integration):
|
||||
if len(file['image']) > 0:
|
||||
try:
|
||||
url = file['image'][0]
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
response = requests.get(url)
|
||||
self.import_recipe_image(recipe, BytesIO(response.content))
|
||||
except Exception as e:
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-11-28 11:03+0000\n"
|
||||
"Last-Translator: Mahmoud Aljouhari <mapgohary@gmail.com>\n"
|
||||
"Language-Team: Arabic <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
@@ -1946,286 +1946,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-04-12 11:55+0000\n"
|
||||
"Last-Translator: noxonad <noxonad@proton.me>\n"
|
||||
"Language-Team: Bulgarian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -2236,81 +2236,81 @@ msgstr "Покажи дневник"
|
||||
msgid "URL Import"
|
||||
msgstr "Импортиране на URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Параметърът updated_at е форматиран неправилно"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Не съществува {self.basename} с идентификатор {pk}"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Не може да се слее със същия обект!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Не съществува {self.basename} с идентификатор {target}"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Не може да се слее с дъщерен обект!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} беше обединен успешно с {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr "Възникна грешка при опит за сливане на {source.name} с {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} беше преместен успешно в основния."
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Възникна грешка при опит за преместване "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Не може да премести обект към себе си!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Не съществува {self.basename} с идентификатор {parent}"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} беше преместен успешно в родител {parent.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} беше премахнат от списъка за пазаруване."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} беше добавен към списъка за пазаруване."
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
@@ -2318,17 +2318,17 @@ msgstr ""
|
||||
"Идентификатор на рецептата, част от която е стъпка. За параметър за "
|
||||
"многократно повторение."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"Идентификатор на рецептата, част от която е стъпка. За параметър за "
|
||||
"многократно повторение."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "Низът на заявката съответства (размито) спрямо името на обекта."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2336,7 +2336,7 @@ msgstr ""
|
||||
"Низът на заявката съвпада (размито) с името на рецептата. В бъдеще също и "
|
||||
"пълнотекстово търсене."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
@@ -2344,69 +2344,69 @@ msgstr ""
|
||||
"Идентификатор на ключовата дума, която рецептата трябва да има. За параметър "
|
||||
"за многократно повторение. Еквивалентно на keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"Идентификатори на ключови думи, повторете за няколко. Връща рецепти с някоя "
|
||||
"от ключовите думи"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Идентификатори на ключови думи, повторете за няколко. Връща рецепти с всички "
|
||||
"ключови думи."
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"Идентификатори на ключови думи, повторете за няколко. Изключва рецепти с "
|
||||
"някоя от ключовите думи."
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Идентификатори на ключови думи, повторете за няколко. Изключва рецепти с "
|
||||
"всички ключови думи."
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"Идентификация на храната, която рецептата трябва да има. За параметър за "
|
||||
"многократно повторение."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"Идентификатори на храни, повторете за няколко. Връща рецепти с някоя от "
|
||||
"храните"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Идентификатори на храни, повторете за няколко. Връща рецептите с всички "
|
||||
"храни."
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"Идентификатори на храни, повторете за няколко. Изключва рецепти с някоя от "
|
||||
"храните."
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Идентификатори на храни, повторете за няколко. Изключва рецепти с всички "
|
||||
"храни."
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "Идентификатор на единицата, която рецептата трябва да има."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
@@ -2414,50 +2414,50 @@ msgstr ""
|
||||
"Оценка на рецептата трябва да има или по-висока. [0 - 5] Отрицателна "
|
||||
"стойност филтрира оценка по-малка от."
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"Идентификатор на книгата, в която трябва да е рецепта. За параметър за "
|
||||
"многократно повторение."
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
"Идентификационен № на книги, повторете за няколко. Връща рецепти с някоя от "
|
||||
"книгите"
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
"Идентификационен № на книги, повторете за няколко. Връща рецептите с всички "
|
||||
"книги."
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
"Идентификационен № на книги, повторете за няколко. Изключва рецептите с "
|
||||
"някоя от книгите."
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
"Идентификационен № на книги, повторете за няколко. Изключва рецептите от "
|
||||
"всички книги."
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr "Ако трябва да се върнат само вътрешни рецепти. [вярно/<b>невярно</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr "Връща резултатите в произволен ред. [вярно/<b>невярно</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Първо връща нови резултати в резултатите от търсенето. [вярно/<b>невярно</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
@@ -2465,7 +2465,7 @@ msgstr ""
|
||||
"Филтрирайте рецепти, приготвени X пъти или повече. Отрицателните стойности "
|
||||
"връщат приготвени по-малко от X пъти"
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2473,7 +2473,7 @@ msgstr ""
|
||||
"Филтрирайте последно приготвените рецепти на или след ГГГГ-ММ-ДД. "
|
||||
"Предварително – филтрира на или преди дата."
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2481,7 +2481,7 @@ msgstr ""
|
||||
"Филтрирайте рецептите, създадени на или след ГГГГ-ММ-ДД. Предварително – "
|
||||
"филтрира на или преди дата."
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2489,7 +2489,7 @@ msgstr ""
|
||||
"Филтрирайте рецептите, актуализирани на или след ГГГГ-ММ-ДД. Предварително – "
|
||||
"филтрира на или преди дата."
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2497,13 +2497,13 @@ msgstr ""
|
||||
"Филтрирането на рецептите последно разглеждани на или след ГГГГ-ММ-ДД. "
|
||||
"Предварително – филтрира на или преди дата."
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Филтрирайте рецепти, които могат да се приготвят с храна в наличност. [вярно/"
|
||||
"<b>невярно</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
@@ -2511,7 +2511,7 @@ msgstr ""
|
||||
"Връща записа в списъка за пазаруване с първичен ключ на идентификатора. "
|
||||
"Разрешени са множество стойности."
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
@@ -2525,17 +2525,17 @@ msgstr ""
|
||||
"и двете, <b>скорошни</b>]<br> - скорошни включва неотметнати елементи и "
|
||||
"наскоро завършени елементи."
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
"Връща записите в списъка за пазаруване, сортирани по реда на категории "
|
||||
"супермаркети."
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Returns the shopping list entry with a primary key of id. Multiple "
|
||||
@@ -2547,45 +2547,45 @@ msgstr ""
|
||||
"Връща записа в списъка за пазаруване с първичен ключ на идентификатора. "
|
||||
"Разрешени са множество стойности."
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Няма нищо за правене."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "Връзката е отказана."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "Лоша URL схема."
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Не бяха намерени полезни данни."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Импортирането не е реализирано за този доставчик"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Тази функция все още не е налична в хостваната версия на tandoor!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Синхронизирането успешно!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Грешка при синхронизирането с хранилището"
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-01-09 12:07+0000\n"
|
||||
"Last-Translator: Jan Kubošek <kuboja@outlook.cz>\n"
|
||||
"Language-Team: Czech <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
@@ -2114,282 +2114,282 @@ msgstr "Zobrazit nápovědu"
|
||||
msgid "URL Import"
|
||||
msgstr "Import URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
#, fuzzy
|
||||
#| msgid "Parameter filter_list incorrectly formatted"
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Parametr filter_list v nesprávném formátu"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Nelze sloučit se stejným objektem!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
#, fuzzy
|
||||
#| msgid "Cannot merge with the same object!"
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Nelze sloučit se stejným objektem!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "The requested page could not be found."
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Požadovaná stránka nebyla nalezena."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Import není pro tohoto poskytovatele implementován!"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
#, fuzzy
|
||||
@@ -2397,11 +2397,11 @@ msgstr "Import není pro tohoto poskytovatele implementován!"
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Tato funkce není dostupná v demo verzi!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synchronizace proběhla úspěšně!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Chyba synchronizace s úložištěm"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-04-12 11:55+0000\n"
|
||||
"Last-Translator: noxonad <noxonad@proton.me>\n"
|
||||
"Language-Team: Danish <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
@@ -2224,96 +2224,96 @@ msgstr "Vis log"
|
||||
msgid "URL Import"
|
||||
msgstr "URL import"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Parameter updated_at ikke formateret korrekt"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Ingen {self.basename} med ID {pk} eksisterer"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Kan ikke sammenflette med det samme objekt!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Ingen {self.basename} med ID {target} eksisterer"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Kan ikke sammenflette med et objekt som er et barn!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} blev sammenflettet med {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
"Der opstod en fejl under sammenfletningen af {source.name} med {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} blev flyttet til roden."
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Der skete en fejl under flytningen "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Kan ikke flytte et objekt til sig selv!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Ingen {self.basename} med ID {parent} eksisterer"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} blev flyttet til forælder {parent.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} blev fjernet fra indkøbslisten."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} blev tilføjet til indkøbslisten."
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr "ID på den opskrift som et trin er del af. For flere, gentag parameter."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr "ID på den opskrift som et trin er del af. For flere, gentag parameter."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "Søgningen matchede (fuzzy) mod objektets navn."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2321,7 +2321,7 @@ msgstr ""
|
||||
"Søgningen matchede (fuzzy) mod opskriftens navn. I fremtiden også heltekst "
|
||||
"søgning."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
@@ -2329,64 +2329,64 @@ msgstr ""
|
||||
"ID på nøgeord som opskriften skal have. For flere, gentag parameter. "
|
||||
"Sammenligneligt med keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"Nøgleord ID'er, gentag for flere. Returnerer opskrifter med bare et af "
|
||||
"nøgleorderne"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Nøgleord ID'er, gentag for flere. Returnerer opskrifter med alle "
|
||||
"nøgleorderne."
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"Nøgleord ID'er, gentag for flere. Ekskluderer opskrifter med bare et af "
|
||||
"nøgleorderne."
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Nøgleord ID'er, gentag for flere. Ekskluderer opskrifter med alle "
|
||||
"nøgleorderne."
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr "ID på mad en opskrift skal have. For flere, gentag parameter."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"Mad ID'er, gentag for flere. Returnerer mad med bare et af de angivne mad"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Mad ID'er, gentag for flere. Returnerer opskrifter med alt det angivne mad."
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"Mad ID'er, gentag for flere. Eksluderer opskrifter med bare et af det "
|
||||
"angivne mad."
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Mad ID'er, gentag for flere. Eksluderer opskrifter med alt det angivne mad."
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "ID på enhed en opskrift skal have."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
@@ -2394,42 +2394,42 @@ msgstr ""
|
||||
"Bedømmelse en opskrift mindst skal have. [0 - 5] Negative værdier filtrerer "
|
||||
"opskrifter med mindre end det angivne."
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr "ID på bog en opskrift skal være i. For flere, gentag parameter."
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
"Bog ID'er, gentag for flere. Returnerer opskrifter med bare en af bøgerne"
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr "Bog ID'er, gentag for flere. Returnerer opskrifter med alle bøgerne."
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
"Bog ID'er, gentag for flere. Eksluderer opskrifter med bare en af bøgerne."
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr "Bog ID'er, gentag for flere. Ekskluderer opskrifter med alle bøgerne."
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr "Om kun interne opskrifter skal returneres. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr "Returnerer resultaterne i tilfældig rækkefølge. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Returnerer nye resultater først i søgeresultaterne. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
@@ -2437,7 +2437,7 @@ msgstr ""
|
||||
"Filtrer opskrifter tilberedt X gange eller flere. Negative værdier "
|
||||
"returnerer tilberedt mindre end X gange"
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2445,7 +2445,7 @@ msgstr ""
|
||||
"Filtrer opskrifter sidst tilberedt på eller efter d. YYYY-MM-DD. Hvis datoen "
|
||||
"starter med '-', filtrerer den i stedet på eller før dato."
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2453,7 +2453,7 @@ msgstr ""
|
||||
"Filtrer opskrifter oprettet på eller efter d. YYYY-MM-DD. Hvis datoen "
|
||||
"starter med '-', filtrerer den i stedet på eller før dato."
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2461,7 +2461,7 @@ msgstr ""
|
||||
"Filtrer opskrifter opdateret på eller efter d. YYYY-MM-DD. Hvis datoen "
|
||||
"starter med '-', filtrerer den i stedet på eller før dato."
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2469,19 +2469,19 @@ msgstr ""
|
||||
"Filtrer opskrifter sidst åbnet på eller efter d. YYYY-MM-DD. Hvis datoen "
|
||||
"starter med '-', filtrerer den i stedet på eller før dato."
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Filtrer opskrifter der kan laves med tilgængeligt mad. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
"Returnerer indkøbslistepunktet med primær nøgle på ID. Flere værdier tilladt."
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
@@ -2495,17 +2495,17 @@ msgstr ""
|
||||
"false, both, <b>recent</b>]<br> - 'recent' har både ikke afkrydsede artikler "
|
||||
"og nyligt færdiggjorte artikler."
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
"Returnerer indkøbslistepunkterne sorteret efter "
|
||||
"supermarkedskategorirækkefølge."
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Returns the shopping list entry with a primary key of id. Multiple "
|
||||
@@ -2516,46 +2516,46 @@ msgid ""
|
||||
msgstr ""
|
||||
"Returnerer indkøbslistepunktet med primær nøgle på ID. Flere værdier tilladt."
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Ikke noget at gøre."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "Forbindelse nægtet."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "Ugyldigt link."
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Intet brugbart data kunne findes."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Importering er ikke implementeret for denne udbyder"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
"Denne funktion er endnu ikke tilgængelig i den hostede version af Tandoor!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synkronisering var en succes!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Der skete en fejl under synkroniseringen med lageret"
|
||||
|
||||
|
||||
Binary file not shown.
@@ -14,17 +14,17 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2024-05-11 00:33+0000\n"
|
||||
"Last-Translator: Jakob Priesner <jakob.priesner@outlook.de>\n"
|
||||
"Language-Team: German <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
"backend/de/>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-09-27 13:58+0000\n"
|
||||
"Last-Translator: supaeasy <crafty_renewably854@supaeasy.de>\n"
|
||||
"Language-Team: German <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/de/>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.4.2\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -395,7 +395,7 @@ msgstr "Sektion"
|
||||
|
||||
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
|
||||
msgid "Fixes foods with "
|
||||
msgstr ""
|
||||
msgstr "Behebt Lebensmittel mit "
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:14
|
||||
msgid "Rebuilds full text search index on Recipe"
|
||||
@@ -478,7 +478,7 @@ msgstr "Essensplan"
|
||||
#: .\cookbook\models.py:456 .\cookbook\templates\base.html:122
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "Books"
|
||||
msgstr "Bücher"
|
||||
msgstr "Kochbücher"
|
||||
|
||||
#: .\cookbook\models.py:457 .\cookbook\templates\base.html:118
|
||||
#: .\cookbook\views\views.py:460
|
||||
@@ -542,10 +542,8 @@ msgid "Instruction Replace"
|
||||
msgstr "Anleitung ersetzen"
|
||||
|
||||
#: .\cookbook\models.py:1472
|
||||
#, fuzzy
|
||||
#| msgid "New Unit"
|
||||
msgid "Never Unit"
|
||||
msgstr "Neue Einheit"
|
||||
msgstr "Nie Einheit"
|
||||
|
||||
#: .\cookbook\models.py:1473
|
||||
msgid "Transpose Words"
|
||||
@@ -2143,7 +2141,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\system.html:86
|
||||
msgid "Allowed Hosts"
|
||||
msgstr ""
|
||||
msgstr "Erlaubte Hosts"
|
||||
|
||||
#: .\cookbook\templates\system.html:90
|
||||
msgid ""
|
||||
@@ -2153,6 +2151,11 @@ msgid ""
|
||||
"this.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Die erlaubten Hosts sind so konfiguriert, dass sie jeden Host "
|
||||
"erlauben. Das mag in einigen Fällen in Ordnung sein, sollte aber im "
|
||||
"Regelfall vermieden werden. Bitte lies in der Dokumentation dazu nach.\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:97
|
||||
msgid "Database"
|
||||
@@ -2206,101 +2209,101 @@ msgstr "Anzeigen"
|
||||
msgid "URL Import"
|
||||
msgstr "URL-Import"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Der Parameter updated_at ist falsch formatiert"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Kein {self.basename} mit der ID {pk} existiert"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Zusammenführen mit selben Objekt nicht möglich!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Kein {self.basename} mit der ID {target} existiert"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Zusammenführen mit untergeordnetem Objekt nicht möglich!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} wurde erfolgreich mit {target.name} zusammengeführt"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
"Beim zusammenführen von {source.name} mit {target.name} ist ein Fehler "
|
||||
"aufgetreten"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} wurde erfolgreich zur Wurzel verschoben."
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Fehler aufgetreten beim verschieben von "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Ein Element kann nicht in sich selbst verschoben werden!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Kein {self.basename} mit ID {parent} existiert"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
"{child.name} wurde erfolgreich zum Überelement {parent.name} verschoben"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} wurde von der Einkaufsliste entfernt."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} wurde der Einkaufsliste hinzugefügt."
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
"Filtern Sie Essenspläne ab Datum (einschließlich) im Format JJJJ-MM-TT."
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
"Filtern Sie die Essenspläne nach Datum (einschließlich) im Format JJJJ-MM-TT."
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"Filtern Sie Mahlzeitenpläne nach der MealType ID. Für mehrere "
|
||||
"Wiederholungsparameter."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID des Rezeptes zu dem ein Schritt gehört. Kann mehrfach angegeben werden."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "Abfragezeichenfolge, die mit dem Objektnamen übereinstimmt (ungenau)."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2308,7 +2311,7 @@ msgstr ""
|
||||
"Suchbegriff wird mit dem Rezeptnamen abgeglichen. In Zukunft auch "
|
||||
"Volltextsuche."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
@@ -2316,69 +2319,69 @@ msgstr ""
|
||||
"ID des Stichwortes, das ein Rezept haben muss. Kann mehrfach angegeben "
|
||||
"werden. Äquivalent zu keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"Stichwort IDs. Kann mehrfach angegeben werden. Listet Rezepte zu jedem der "
|
||||
"angegebenen Stichwörter"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Stichwort IDs. Kann mehrfach angegeben werden. Listet Rezepte mit allen "
|
||||
"angegebenen Stichwörtern."
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"Stichwort ID. Kann mehrfach angegeben werden. Schließt Rezepte einem der "
|
||||
"angegebenen Stichwörtern aus."
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Stichwort IDs. Kann mehrfach angegeben werden. Schließt Rezepte mit allen "
|
||||
"angegebenen Stichwörtern aus."
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID einer Zutat, zu der Rezepte gelistet werden sollen. Kann mehrfach "
|
||||
"angegeben werden."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"Zutat ID. Kann mehrfach angegeben werden. Listet Rezepte mindestens einer "
|
||||
"der Zutaten"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Zutat ID. Kann mehrfach angegeben werden. Listet Rezepte mit allen "
|
||||
"angegebenen Zutaten."
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"Zutat ID. Kann mehrfach angegeben werden. Schließt Rezepte aus, die eine der "
|
||||
"angegebenen Zutaten enthalten."
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Zutat ID. Kann mehrfach angegeben werden. Schließt Rezepte aus, die alle "
|
||||
"angegebenen Zutaten enthalten."
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "ID der Einheit, die ein Rezept haben sollte."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
@@ -2386,50 +2389,50 @@ msgstr ""
|
||||
"Mindestbewertung eines Rezeptes (0-5). Negative Werte filtern nach "
|
||||
"Maximalbewertung."
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr "Buch ID, in dem das Rezept ist. Kann mehrfach angegeben werden."
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
"Buch ID. Kann mehrfach angegeben werden. Listet alle Rezepte aus den "
|
||||
"angegebenen Büchern"
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
"Buch ID. Kann mehrfach angegeben werden. Listet die Rezepte, die in allen "
|
||||
"Büchern enthalten sind."
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
"Buch IDs. Kann mehrfach angegeben werden. Schließt Rezepte aus den "
|
||||
"angegebenen Büchern aus."
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
"Buch IDs. Kann mehrfach angegeben werden. Schließt Rezepte aus, die in allen "
|
||||
"angegebenen Büchern enthalten sind."
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr "Nur interne Rezepte sollen gelistet werden. [ja/<b>nein</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Die Suchergebnisse sollen in zufälliger Reihenfolge gelistet werden. [ja/"
|
||||
"<b>nein</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Die neuesten Suchergebnisse sollen zuerst angezeigt werden. [ja/<b>nein</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
@@ -2437,7 +2440,7 @@ msgstr ""
|
||||
"Rezepte listen, die mindestens x-mal gekocht wurden. Eine negative Zahl "
|
||||
"listet Rezepte, die weniger als x-mal gekocht wurden"
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2446,7 +2449,7 @@ msgstr ""
|
||||
"wurden. Mit vorangestelltem - , werden Rezepte am oder vor dem Datum "
|
||||
"gelistet."
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2454,7 +2457,7 @@ msgstr ""
|
||||
"Rezepte listen, die am angegebenen Datum oder später erstellt wurden. Wenn - "
|
||||
"vorangestellt wird, wird am oder vor dem Datum gelistet."
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2462,7 +2465,7 @@ msgstr ""
|
||||
"Rezepte listen, die am angegebenen Datum oder später aktualisiert wurden. "
|
||||
"Wenn - vorangestellt wird, wird am oder vor dem Datum gelistet."
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2470,13 +2473,13 @@ msgstr ""
|
||||
"Rezepte listen, die am angegebenen Datum oder später zuletzt angesehen "
|
||||
"wurden. Wenn - vorangestellt wird, wird am oder vor dem Datum gelistet."
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Rezepte listen, die mit vorhandenen Zutaten gekocht werden können. [ja/"
|
||||
"<b>nein</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
@@ -2484,7 +2487,7 @@ msgstr ""
|
||||
"Zeigt denjenigen Eintrag auf der Einkaufliste mit der angegebenen ID. Kann "
|
||||
"mehrfach angegeben werden."
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
@@ -2494,66 +2497,62 @@ msgstr ""
|
||||
"<b>kürzlich</b>]<br> - kürzlich enthält nicht abgehakte "
|
||||
"Einträge und kürzlich abgeschlossene Einträge."
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
"Listet die Einträge der Einkaufsliste sortiert nach Supermarktkategorie."
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr "Filter für Einträge mit dem angegebenen Rezept"
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Returns the shopping list entry with a primary key of id. Multiple "
|
||||
#| "values allowed."
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
"Zeigt denjenigen Eintrag auf der Einkaufliste mit der angegebenen ID. Kann "
|
||||
"mehrfach angegeben werden."
|
||||
"Zeigt Automationen, die dem Automationstyp entsprechen. Kann mehrfach "
|
||||
"angegeben werden."
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Nichts zu tun."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr "Ungültige URL"
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "Verbindung fehlgeschlagen."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "Ungültiges URL Schema."
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Es konnten keine passenden Daten gefunden werden."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr "Datei überschreitet das Speicherplatzlimit"
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Importieren ist für diesen Anbieter noch nicht implementiert"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Diese Funktion ist in dieser Version von Tandoor noch nicht verfügbar!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synchronisation erfolgreich!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Fehler beim Synchronisieren"
|
||||
|
||||
@@ -2582,10 +2581,8 @@ msgstr ""
|
||||
"Monitor verwendet wird."
|
||||
|
||||
#: .\cookbook\views\delete.py:135
|
||||
#, fuzzy
|
||||
#| msgid "Storage Backend"
|
||||
msgid "Connectors Config Backend"
|
||||
msgstr "Speicherquelle"
|
||||
msgstr "Backendkonfiguration für Konnektoren"
|
||||
|
||||
#: .\cookbook\views\delete.py:157
|
||||
msgid "Invite Link"
|
||||
@@ -2644,10 +2641,8 @@ msgid "Shopping List"
|
||||
msgstr "Einkaufsliste"
|
||||
|
||||
#: .\cookbook\views\lists.py:77 .\cookbook\views\new.py:98
|
||||
#, fuzzy
|
||||
#| msgid "Storage Backend"
|
||||
msgid "Connector Config Backend"
|
||||
msgstr "Speicherquelle"
|
||||
msgstr "Backendkonfiguration für Konnektoren"
|
||||
|
||||
#: .\cookbook\views\lists.py:91
|
||||
msgid "Invite Links"
|
||||
@@ -2743,7 +2738,7 @@ msgstr "Sie verwenden PostgreSQL %(v1)s. PostgreSQL %(v2)s wird empfohlen"
|
||||
|
||||
#: .\cookbook\views\views.py:313
|
||||
msgid "Unable to determine PostgreSQL version."
|
||||
msgstr ""
|
||||
msgstr "PostgreSQL version konnte nicht erkannt werden."
|
||||
|
||||
#: .\cookbook\views\views.py:317
|
||||
msgid ""
|
||||
@@ -2755,18 +2750,14 @@ msgstr ""
|
||||
"PostgreSQL-Datenbanken funktionieren."
|
||||
|
||||
#: .\cookbook\views\views.py:360
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The setup page can only be used to create the first user! If you have "
|
||||
#| "forgotten your superuser credentials please consult the django "
|
||||
#| "documentation on how to reset passwords."
|
||||
msgid ""
|
||||
"The setup page can only be used to create the first "
|
||||
"user! If you have forgotten your superuser credentials "
|
||||
"please consult the django documentation on how to reset passwords."
|
||||
msgstr ""
|
||||
"Die Setup-Seite kann nur für den ersten Nutzer verwendet werden. Zum "
|
||||
"Zurücksetzen von Passwörtern bitte der Django-Dokumentation folgen."
|
||||
"Die Setup-Seite kann nur für den ersten Nutzer verwendet "
|
||||
"werden. Falls du die Superuser Logindaten vergessen "
|
||||
"hast, folge bitte der Django-Dokumentation um Passwörter zurückzusetzen."
|
||||
|
||||
#: .\cookbook\views\views.py:369
|
||||
msgid "Passwords dont match!"
|
||||
|
||||
@@ -7,17 +7,17 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2023-08-21 09:19+0000\n"
|
||||
"Last-Translator: Theodoros Grammenos <teogramm@outlook.com>\n"
|
||||
"Language-Team: Greek <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
"backend/el/>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-09-23 21:58+0000\n"
|
||||
"Last-Translator: Emmker <emmker@gmail.com>\n"
|
||||
"Language-Team: Greek <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/el/>\n"
|
||||
"Language: el\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -33,7 +33,7 @@ msgstr "Όνομα"
|
||||
|
||||
#: .\cookbook\forms.py:62 .\cookbook\forms.py:246 .\cookbook\views\lists.py:103
|
||||
msgid "Keywords"
|
||||
msgstr "Λέξεις κλειδιά"
|
||||
msgstr "Λέξεις Κλειδιά"
|
||||
|
||||
#: .\cookbook\forms.py:62
|
||||
msgid "Preparation time in minutes"
|
||||
@@ -98,7 +98,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\forms.py:205
|
||||
msgid "http://homeassistant.local:8123/api for example"
|
||||
msgstr ""
|
||||
msgstr "http://homeassistant.local:8123/api για παράδειγμα"
|
||||
|
||||
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
|
||||
msgid "Storage"
|
||||
@@ -2030,286 +2030,286 @@ msgstr "Προβολή αρχείων καταγραφής"
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -1934,286 +1934,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -13,9 +13,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2024-03-27 19:02+0000\n"
|
||||
"Last-Translator: Axel Breiterman <axelbreiterman@gmail.com>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2025-06-23 08:28+0000\n"
|
||||
"Last-Translator: Ángel <1024mb@users.noreply.translate.tandoor.dev>\n"
|
||||
"Language-Team: Spanish <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/es/>\n"
|
||||
"Language: es\n"
|
||||
@@ -23,7 +23,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.4.2\n"
|
||||
"X-Generator: Weblate 5.8.4\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -66,31 +66,30 @@ msgid ""
|
||||
"To prevent duplicates recipes with the same name as existing ones are "
|
||||
"ignored. Check this box to import everything."
|
||||
msgstr ""
|
||||
"Para evitar duplicados, las recetas con el mismo nombre serán ignoradas. "
|
||||
"Marca esta opción para importar todas las recetas."
|
||||
"Para evitar duplicados, las recetas con el mismo nombre que las ya "
|
||||
"existentes serán ignoradas. Marca esta casilla para importar todo."
|
||||
|
||||
#: .\cookbook\forms.py:143
|
||||
msgid "Add your comment: "
|
||||
msgstr "Añada su comentario: "
|
||||
msgstr "Añade tu comentario: "
|
||||
|
||||
#: .\cookbook\forms.py:151
|
||||
msgid "Leave empty for dropbox and enter app password for nextcloud."
|
||||
msgstr ""
|
||||
"Déjelo vacío para Dropbox e ingrese la contraseña de la aplicación para "
|
||||
"nextcloud."
|
||||
"Déjalo vacío para Dropbox o ingresa la contraseña de la aplicación para "
|
||||
"Nextcloud."
|
||||
|
||||
#: .\cookbook\forms.py:154
|
||||
msgid "Leave empty for nextcloud and enter api token for dropbox."
|
||||
msgstr ""
|
||||
"Déjelo en blanco para nextcloud e ingrese el token de api para dropbox."
|
||||
msgstr "Déjalo vacío para Nextcloud o ingresa el token API para Dropbox."
|
||||
|
||||
#: .\cookbook\forms.py:160
|
||||
msgid ""
|
||||
"Leave empty for dropbox and enter only base url for nextcloud (<code>/remote."
|
||||
"php/webdav/</code> is added automatically)"
|
||||
msgstr ""
|
||||
"Dejar vació para Dropbox e introducir sólo la URL base para Nextcloud "
|
||||
"(<code>/remote.php/webdav/</code> se añade automáticamente)"
|
||||
"Déjalo vacío para Dropbox o ingresa solo la URL base para Nextcloud "
|
||||
"(<code>/remote.php/webdav/</code> es añadido automáticamente)"
|
||||
|
||||
#: .\cookbook\forms.py:188
|
||||
msgid ""
|
||||
@@ -98,15 +97,16 @@ msgid ""
|
||||
"profile\">Long Lived Access Token</a> for your HomeAssistant instance"
|
||||
msgstr ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Token de larga duración</a>para tu instancia de HomeAssistant"
|
||||
"profile\">Token de acceso de larga duración</a> para tu instancia de "
|
||||
"HomeAssistant"
|
||||
|
||||
#: .\cookbook\forms.py:193
|
||||
msgid "Something like http://homeassistant.local:8123/api"
|
||||
msgstr "Algo similar a http://homeassistant.local:8123/api"
|
||||
msgstr "Algo como http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:205
|
||||
msgid "http://homeassistant.local:8123/api for example"
|
||||
msgstr "por ejemplo http://homeassistant.local:8123/api for example"
|
||||
msgstr "Por ejemplo http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
|
||||
msgid "Storage"
|
||||
@@ -284,14 +284,12 @@ msgid "You have more users than allowed in your space."
|
||||
msgstr "Tenés mas usuarios que los permitidos en tu espacio"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:310
|
||||
#, fuzzy
|
||||
#| msgid "Use fractions"
|
||||
msgid "reverse rotation"
|
||||
msgstr "Usar fracciones"
|
||||
msgstr "rotación inversa"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:311
|
||||
msgid "careful rotation"
|
||||
msgstr ""
|
||||
msgstr "rotación cuidadosa"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:312
|
||||
msgid "knead"
|
||||
@@ -398,8 +396,9 @@ msgid "Section"
|
||||
msgstr "Sección"
|
||||
|
||||
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
|
||||
#, fuzzy
|
||||
msgid "Fixes foods with "
|
||||
msgstr ""
|
||||
msgstr "Corrige alimentos con "
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:14
|
||||
msgid "Rebuilds full text search index on Recipe"
|
||||
@@ -436,16 +435,14 @@ msgid "Other"
|
||||
msgstr "Otro"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
#, fuzzy
|
||||
#| msgid "Fats"
|
||||
msgid "Fat"
|
||||
msgstr "Grasas"
|
||||
msgstr "Grasa"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
|
||||
msgid "g"
|
||||
msgstr ""
|
||||
msgstr "gr."
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
msgid "Carbohydrates"
|
||||
@@ -468,6 +465,8 @@ msgid ""
|
||||
"Maximum file storage for space in MB. 0 for unlimited, -1 to disable file "
|
||||
"upload."
|
||||
msgstr ""
|
||||
"Almacenamiento máximo de archivos para el espacio en MB. 0 para ilimitado, -"
|
||||
"1 para desactivar la carga de archivos."
|
||||
|
||||
#: .\cookbook\models.py:454 .\cookbook\templates\search.html:7
|
||||
#: .\cookbook\templates\settings.html:18
|
||||
@@ -498,18 +497,16 @@ msgid "Nutrition"
|
||||
msgstr "Información Nutricional"
|
||||
|
||||
#: .\cookbook\models.py:918
|
||||
#, fuzzy
|
||||
#| msgid "Merge"
|
||||
msgid "Allergen"
|
||||
msgstr "Combinar"
|
||||
msgstr "Alérgeno"
|
||||
|
||||
#: .\cookbook\models.py:919
|
||||
msgid "Price"
|
||||
msgstr ""
|
||||
msgstr "Precio"
|
||||
|
||||
#: .\cookbook\models.py:919
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
msgstr "Objetivo"
|
||||
|
||||
#: .\cookbook\models.py:1408 .\cookbook\templates\search_info.html:28
|
||||
msgid "Simple"
|
||||
@@ -532,54 +529,40 @@ msgid "Food Alias"
|
||||
msgstr "Alias de la Comida"
|
||||
|
||||
#: .\cookbook\models.py:1468
|
||||
#, fuzzy
|
||||
#| msgid "Units"
|
||||
msgid "Unit Alias"
|
||||
msgstr "Unidades"
|
||||
msgstr "Alias de unidad"
|
||||
|
||||
#: .\cookbook\models.py:1469
|
||||
#, fuzzy
|
||||
#| msgid "Keywords"
|
||||
msgid "Keyword Alias"
|
||||
msgstr "Palabras clave"
|
||||
msgstr "Alias de palabra clave"
|
||||
|
||||
#: .\cookbook\models.py:1470
|
||||
#, fuzzy
|
||||
#| msgid "Description"
|
||||
msgid "Description Replace"
|
||||
msgstr "Descripción"
|
||||
msgstr "Reemplazo de descripción"
|
||||
|
||||
#: .\cookbook\models.py:1471
|
||||
#, fuzzy
|
||||
#| msgid "Instructions"
|
||||
msgid "Instruction Replace"
|
||||
msgstr "Instrucciones"
|
||||
msgstr "Reemplazo de instrucciones"
|
||||
|
||||
#: .\cookbook\models.py:1472
|
||||
#, fuzzy
|
||||
#| msgid "New Unit"
|
||||
msgid "Never Unit"
|
||||
msgstr "Nueva Unidad"
|
||||
msgstr "Unidad prohibida"
|
||||
|
||||
#: .\cookbook\models.py:1473
|
||||
msgid "Transpose Words"
|
||||
msgstr ""
|
||||
msgstr "Transponer palabras"
|
||||
|
||||
#: .\cookbook\models.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "Food Alias"
|
||||
msgid "Food Replace"
|
||||
msgstr "Alias de la Comida"
|
||||
msgstr "Reemplazo de alimento"
|
||||
|
||||
#: .\cookbook\models.py:1475
|
||||
#, fuzzy
|
||||
#| msgid "Description"
|
||||
msgid "Unit Replace"
|
||||
msgstr "Descripción"
|
||||
msgstr "Reemplazo de unidad"
|
||||
|
||||
#: .\cookbook\models.py:1476
|
||||
msgid "Name Replace"
|
||||
msgstr ""
|
||||
msgstr "Reemplazo de nombre"
|
||||
|
||||
#: .\cookbook\models.py:1503 .\cookbook\views\delete.py:40
|
||||
#: .\cookbook\views\edit.py:210 .\cookbook\views\new.py:39
|
||||
@@ -587,10 +570,8 @@ msgid "Recipe"
|
||||
msgstr "Receta"
|
||||
|
||||
#: .\cookbook\models.py:1504
|
||||
#, fuzzy
|
||||
#| msgid "Food"
|
||||
msgid "Food"
|
||||
msgstr "Comida"
|
||||
msgstr "Alimento"
|
||||
|
||||
#: .\cookbook\models.py:1505 .\cookbook\templates\base.html:149
|
||||
msgid "Keyword"
|
||||
@@ -648,22 +629,26 @@ msgstr "Invitación para Tandoor Recipes"
|
||||
|
||||
#: .\cookbook\serializer.py:1426
|
||||
msgid "Existing shopping list to update"
|
||||
msgstr ""
|
||||
msgstr "Lista de compras existente para actualizar"
|
||||
|
||||
#: .\cookbook\serializer.py:1428
|
||||
msgid ""
|
||||
"List of ingredient IDs from the recipe to add, if not provided all "
|
||||
"ingredients will be added."
|
||||
msgstr ""
|
||||
"Lista de IDs de ingredientes de la receta para agregar; si no se "
|
||||
"proporciona, se agregarán todos los ingredientes."
|
||||
|
||||
#: .\cookbook\serializer.py:1430
|
||||
msgid ""
|
||||
"Providing a list_recipe ID and servings of 0 will delete that shopping list."
|
||||
msgstr ""
|
||||
"Proporcionar un ID list_recipe y porciones igual a 0 eliminará esa lista de "
|
||||
"compras."
|
||||
|
||||
#: .\cookbook\serializer.py:1439
|
||||
msgid "Amount of food to add to the shopping list"
|
||||
msgstr ""
|
||||
msgstr "Cantidad de alimento a agregar a la lista de compras"
|
||||
|
||||
#: .\cookbook\serializer.py:1441
|
||||
msgid "ID of unit to use for the shopping list"
|
||||
@@ -2153,282 +2138,282 @@ msgstr "Mostrar Enlaces"
|
||||
msgid "URL Import"
|
||||
msgstr "Importar URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
#, fuzzy
|
||||
#| msgid "Parameter filter_list incorrectly formatted"
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Parámetro filter_list formateado incorrectamente"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "¡No se puede unir con el mismo objeto!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
#, fuzzy
|
||||
#| msgid "Cannot merge with the same object!"
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "¡No se puede unir con el mismo objeto!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "The requested page could not be found."
|
||||
msgid "No usable data could be found."
|
||||
msgstr "La página solicitada no pudo ser encontrada."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "La importación no está implementada para este proveedor"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
#, fuzzy
|
||||
@@ -2436,11 +2421,11 @@ msgstr "La importación no está implementada para este proveedor"
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "¡Esta funcionalidad no está disponible en la versión demo!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "¡Sincronización exitosa!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Error de sincronización con el almacenamiento"
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -13,17 +13,17 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2024-05-28 00:57+0000\n"
|
||||
"Last-Translator: tarek EL SOL <tarek.elsol@gmail.com>\n"
|
||||
"Language-Team: French <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
"backend/fr/>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2025-02-16 14:58+0000\n"
|
||||
"Last-Translator: Elvis Gosselin <elvis.gosselin@tutanota.com>\n"
|
||||
"Language-Team: French <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.4.2\n"
|
||||
"X-Generator: Weblate 5.8.4\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -506,18 +506,16 @@ msgid "Nutrition"
|
||||
msgstr "Informations nutritionnelles"
|
||||
|
||||
#: .\cookbook\models.py:918
|
||||
#, fuzzy
|
||||
#| msgid "Merge"
|
||||
msgid "Allergen"
|
||||
msgstr "Fusionner"
|
||||
msgstr "Allergène"
|
||||
|
||||
#: .\cookbook\models.py:919
|
||||
msgid "Price"
|
||||
msgstr ""
|
||||
msgstr "Prix"
|
||||
|
||||
#: .\cookbook\models.py:919
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
msgstr "Objectif"
|
||||
|
||||
#: .\cookbook\models.py:1408 .\cookbook\templates\search_info.html:28
|
||||
msgid "Simple"
|
||||
@@ -1039,7 +1037,7 @@ msgstr "Exporter"
|
||||
|
||||
#: .\cookbook\templates\base.html:287
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
msgstr "Propriétés"
|
||||
|
||||
#: .\cookbook\templates\base.html:301 .\cookbook\views\lists.py:255
|
||||
#, fuzzy
|
||||
@@ -2112,6 +2110,11 @@ msgid ""
|
||||
"script to generate version information (done automatically in docker).\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Vous devez exécuter <code>version.py</code> dans votre script de "
|
||||
"mise à jour pour générer les informations de version (automatique avec "
|
||||
"docker).\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:46
|
||||
msgid "Media Serving"
|
||||
@@ -2199,7 +2202,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\system.html:86
|
||||
msgid "Allowed Hosts"
|
||||
msgstr ""
|
||||
msgstr "Hôtes autorisés"
|
||||
|
||||
#: .\cookbook\templates\system.html:90
|
||||
msgid ""
|
||||
@@ -2209,6 +2212,11 @@ msgid ""
|
||||
"this.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Votre configuration autorise tous les hôtes, cela ok dans "
|
||||
"certaines installations mais évité. Veuillez consulter les documentations à "
|
||||
"ce sujet.\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:97
|
||||
msgid "Database"
|
||||
@@ -2235,18 +2243,26 @@ msgid ""
|
||||
"issue.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Les migrations de données ne devraient jamais échouer!\n"
|
||||
" Les échecs de migrations vont causer des problèmes de "
|
||||
"fonctionnement majeurs dans l’application..\n"
|
||||
" Si une migration échoue, vérifiez que vous êtes sur la dernière "
|
||||
"version et si c'est le cas veuillez créer un ticket sur GitHub avec le "
|
||||
"contenu du journal de migration.\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:182
|
||||
msgid "False"
|
||||
msgstr ""
|
||||
msgstr "Faux"
|
||||
|
||||
#: .\cookbook\templates\system.html:182
|
||||
msgid "True"
|
||||
msgstr ""
|
||||
msgstr "Vrai"
|
||||
|
||||
#: .\cookbook\templates\system.html:207
|
||||
msgid "Hide"
|
||||
msgstr ""
|
||||
msgstr "Cacher"
|
||||
|
||||
#: .\cookbook\templates\system.html:210
|
||||
#, fuzzy
|
||||
@@ -2258,83 +2274,85 @@ msgstr "Afficher le journal"
|
||||
msgid "URL Import"
|
||||
msgstr "Import URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Le paramètre « update_at » n'est pas correctement formaté"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Il n’existe aucun(e) {self.basename} avec l’identifiant {pk}"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Impossible de fusionner un objet avec lui-même !"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Il n’existe aucun(e) {self.basename} avec l’id {target}"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Impossible de fusionner avec l’objet enfant !"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} a été fusionné avec succès avec {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
"Une erreur est survenue lors de la tentative de fusion de {source.name} avec "
|
||||
"{target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} a été déplacé avec succès vers la racine."
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Une erreur est survenue en essayant de déplacer "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Impossible de déplacer un objet vers lui-même !"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Il n’existe aucun(e) {self.basename} avec l’id {parent}"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} a été déplacé avec succès vers le parent {parent.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} a été supprimé(e) de la liste de courses."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} a été ajouté(e) à la liste de courses."
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
msgstr "Filtrer les repas depuis la date (incluse) avec le format YYYY-MM-DD."
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
"Filtrer les plannings de repas depuis la date (incluse) avec le format YYYY-"
|
||||
"MM-DD."
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
@@ -2342,18 +2360,18 @@ msgstr ""
|
||||
"Identifiant de la recette dont fait partie une étape. Pour plusieurs "
|
||||
"paramètres de répétition."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"Identifiant de la recette dont fait partie une étape. Pour plusieurs "
|
||||
"paramètres de répétition."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
"Correspondance (floue) entre la chaîne de requête et le nom de l'objet."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2361,7 +2379,7 @@ msgstr ""
|
||||
"La chaîne d'interrogation correspond (de manière floue) au nom de la "
|
||||
"recette. À l'avenir, la recherche en texte intégral sera également possible."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
@@ -2369,69 +2387,69 @@ msgstr ""
|
||||
"ID du mot-clé qu'une recette doit avoir. Pour les paramètres à répétition "
|
||||
"multiple. Equivalent à keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"ID des mots-clés, répéter pour plusieurs. Retourner les recettes avec "
|
||||
"n'importe quel mot-clé"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"ID des mots-clés, répéter pour plusieurs. Retourner les recettes contenant "
|
||||
"tous les mots-clés."
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"ID des mots-clés, répéter pour plusieurs. Exclure les recettes contenant "
|
||||
"l'un des mots-clés."
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"ID des mots-clés, répéter pour plusieurs. Exclure les recettes contenant "
|
||||
"l'un des mots-clés."
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID de l'aliment qu'une recette doit contenir. Pour les paramètres de "
|
||||
"répétition multiples."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"ID des aliments, répéter pour plusieurs. Retourner les recettes contenant "
|
||||
"l'un des aliments"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"ID des aliments, répéter pour plusieurs. Retourner les recettes avec tous "
|
||||
"les aliments."
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"ID des aliments, répéter pour plusieurs. Exclure les recettes contenant l'un "
|
||||
"des aliments."
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"ID des aliments, répéter pour plusieurs. Exclure les recettes contenant tous "
|
||||
"les aliments."
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "ID de l'unité qu'une recette doit avoir."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
@@ -2439,128 +2457,128 @@ msgstr ""
|
||||
"Note qu'une recette devrait avoir ou être supérieure. [0 - 5] Une valeur "
|
||||
"négative filtre une note inférieure à."
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Rien à faire."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr "Url non valide"
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "Connexion refusée."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "Mauvais schéma d’URL."
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Aucune information utilisable n'a été trouvée."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "L’importation n’est pas implémentée pour ce fournisseur"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
@@ -2568,11 +2586,11 @@ msgstr ""
|
||||
"Cette fonctionnalité n’est pas encore disponible dans la version hébergée de "
|
||||
"Tandoor !"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synchronisation réussie !"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Erreur lors de la synchronisation avec le stockage"
|
||||
|
||||
|
||||
Binary file not shown.
@@ -7,28 +7,28 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2023-11-15 08:20+0000\n"
|
||||
"Last-Translator: avi meyer <avmeyer@gmail.com>\n"
|
||||
"Language-Team: Hebrew <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
"backend/he/>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2025-03-07 15:08+0000\n"
|
||||
"Last-Translator: yonatan ben-menachem <2bmyonatan@gmail.com>\n"
|
||||
"Language-Team: Hebrew <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/he/>\n"
|
||||
"Language: he\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
|
||||
"n % 10 == 0) ? 2 : 3));\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"X-Generator: Weblate 5.8.4\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
"Both fields are optional. If none are given the username will be displayed "
|
||||
"instead"
|
||||
msgstr ""
|
||||
msgstr "שני השדות אופציונלים. אם שני השדות ריקים, שם המשתמש יוצג במקום."
|
||||
|
||||
#: .\cookbook\forms.py:62 .\cookbook\forms.py:246
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
msgstr "שם"
|
||||
|
||||
#: .\cookbook\forms.py:62 .\cookbook\forms.py:246 .\cookbook\views\lists.py:103
|
||||
msgid "Keywords"
|
||||
@@ -36,47 +36,51 @@ msgstr "מילות מפתח"
|
||||
|
||||
#: .\cookbook\forms.py:62
|
||||
msgid "Preparation time in minutes"
|
||||
msgstr ""
|
||||
msgstr "זמן הכנה בדקות"
|
||||
|
||||
#: .\cookbook\forms.py:62
|
||||
msgid "Waiting time (cooking/baking) in minutes"
|
||||
msgstr ""
|
||||
msgstr "זמן המתנה (בישול/אפייה) בדקות"
|
||||
|
||||
#: .\cookbook\forms.py:63 .\cookbook\forms.py:222 .\cookbook\forms.py:246
|
||||
msgid "Path"
|
||||
msgstr ""
|
||||
msgstr "נתיב"
|
||||
|
||||
#: .\cookbook\forms.py:63
|
||||
msgid "Storage UID"
|
||||
msgstr ""
|
||||
msgstr "אחסון UID"
|
||||
|
||||
#: .\cookbook\forms.py:93
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
msgstr "ברירת מחדל"
|
||||
|
||||
#: .\cookbook\forms.py:121
|
||||
msgid ""
|
||||
"To prevent duplicates recipes with the same name as existing ones are "
|
||||
"ignored. Check this box to import everything."
|
||||
msgstr ""
|
||||
"בשביל למנוע כפילויות, מתוכנים בעלי שם זהה למתכון קיים לא יעובדו. סמן כאן כדי "
|
||||
"לייבא בכל זאת."
|
||||
|
||||
#: .\cookbook\forms.py:143
|
||||
msgid "Add your comment: "
|
||||
msgstr ""
|
||||
msgstr "הוסף את ההערה שלך::- "
|
||||
|
||||
#: .\cookbook\forms.py:151
|
||||
msgid "Leave empty for dropbox and enter app password for nextcloud."
|
||||
msgstr ""
|
||||
msgstr "השאר ריק עבור Dropbox והכנס סיסמא עבור NextCloud."
|
||||
|
||||
#: .\cookbook\forms.py:154
|
||||
msgid "Leave empty for nextcloud and enter api token for dropbox."
|
||||
msgstr ""
|
||||
msgstr "השאר ריק עבור NextCloud והכנס טוקן API עבור Dropbox."
|
||||
|
||||
#: .\cookbook\forms.py:160
|
||||
msgid ""
|
||||
"Leave empty for dropbox and enter only base url for nextcloud (<code>/remote."
|
||||
"php/webdav/</code> is added automatically)"
|
||||
msgstr ""
|
||||
"השאר ריק עבור dropbox וכנס רק URL בסיסי עבור nextcloud (<code>/remote.php/"
|
||||
"webdav/</code> נוסף אוטומטי)"
|
||||
|
||||
#: .\cookbook\forms.py:188
|
||||
msgid ""
|
||||
@@ -86,49 +90,49 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\forms.py:193
|
||||
msgid "Something like http://homeassistant.local:8123/api"
|
||||
msgstr ""
|
||||
msgstr "משהו דומה לhttp://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:205
|
||||
msgid "http://homeassistant.local:8123/api for example"
|
||||
msgstr ""
|
||||
msgstr "לדוגמא http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
|
||||
msgid "Storage"
|
||||
msgstr ""
|
||||
msgstr "אחסון"
|
||||
|
||||
#: .\cookbook\forms.py:222
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
msgstr "פעיל"
|
||||
|
||||
#: .\cookbook\forms.py:226
|
||||
msgid "Search String"
|
||||
msgstr ""
|
||||
msgstr "מחרוזת חיפוש"
|
||||
|
||||
#: .\cookbook\forms.py:246
|
||||
msgid "File ID"
|
||||
msgstr ""
|
||||
msgstr "ID של הקובץ"
|
||||
|
||||
#: .\cookbook\forms.py:262
|
||||
msgid "Maximum number of users for this space reached."
|
||||
msgstr ""
|
||||
msgstr "המספר המקסימלי של משתמשים עבור מרחב זה נוצל."
|
||||
|
||||
#: .\cookbook\forms.py:268
|
||||
msgid "Email address already taken!"
|
||||
msgstr ""
|
||||
msgstr "כתובת האימייל כבר בשימוש!"
|
||||
|
||||
#: .\cookbook\forms.py:275
|
||||
msgid ""
|
||||
"An email address is not required but if present the invite link will be sent "
|
||||
"to the user."
|
||||
msgstr ""
|
||||
msgstr "כתובת אימייל לא נדרשת אבל אם קיימת, קישור השיתוף ישלח למשתמש."
|
||||
|
||||
#: .\cookbook\forms.py:287
|
||||
msgid "Name already taken."
|
||||
msgstr ""
|
||||
msgstr "שם כבר בשימוש."
|
||||
|
||||
#: .\cookbook\forms.py:298
|
||||
msgid "Accept Terms and Privacy"
|
||||
msgstr ""
|
||||
msgstr "הסכם לתנאים ולפרטיות"
|
||||
|
||||
#: .\cookbook\forms.py:332
|
||||
msgid ""
|
||||
@@ -147,6 +151,7 @@ msgid ""
|
||||
"Use fuzzy matching on units, keywords and ingredients when editing and "
|
||||
"importing recipes."
|
||||
msgstr ""
|
||||
"השתמש בהתאמה גמישה ליחידות, מילות מפתח ורכיבים בעת עריכה וייבוא מתכונים."
|
||||
|
||||
#: .\cookbook\forms.py:342
|
||||
msgid ""
|
||||
@@ -235,7 +240,7 @@ msgstr ""
|
||||
#: .\cookbook\helper\permission_helper.py:237
|
||||
#: .\cookbook\helper\permission_helper.py:252
|
||||
msgid "You cannot interact with this object as it is not owned by you!"
|
||||
msgstr ""
|
||||
msgstr "אינך יכול/ה לפעול על אובייקט זה כיוון שהוא לא בבעלותך!"
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:402
|
||||
msgid "You have reached the maximum number of recipes for your space."
|
||||
@@ -439,7 +444,7 @@ msgstr ""
|
||||
#: .\cookbook\models.py:457 .\cookbook\templates\base.html:118
|
||||
#: .\cookbook\views\views.py:460
|
||||
msgid "Shopping"
|
||||
msgstr ""
|
||||
msgstr "קניות"
|
||||
|
||||
#: .\cookbook\models.py:752
|
||||
msgid " is part of a recipe step and cannot be deleted"
|
||||
@@ -524,7 +529,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\models.py:1504
|
||||
msgid "Food"
|
||||
msgstr ""
|
||||
msgstr "אוכל"
|
||||
|
||||
#: .\cookbook\models.py:1505 .\cookbook\templates\base.html:149
|
||||
msgid "Keyword"
|
||||
@@ -544,7 +549,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\serializer.py:1270
|
||||
msgid "Hello"
|
||||
msgstr ""
|
||||
msgstr "שלום"
|
||||
|
||||
#: .\cookbook\serializer.py:1270
|
||||
msgid "You have been invited by "
|
||||
@@ -565,12 +570,12 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\serializer.py:1278
|
||||
msgid "The invitation is valid until "
|
||||
msgstr ""
|
||||
msgstr "ההזמנה תקפה עד "
|
||||
|
||||
#: .\cookbook\serializer.py:1280
|
||||
msgid ""
|
||||
"Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub "
|
||||
msgstr ""
|
||||
msgstr "Tandoor Recipes הוא מנהל מתכונים בקוד פתוח. ניתן למצוא אותנו ב-GitHub. "
|
||||
|
||||
#: .\cookbook\serializer.py:1283
|
||||
msgid "Tandoor Recipes Invite"
|
||||
@@ -608,11 +613,11 @@ msgstr ""
|
||||
#: .\cookbook\templates\generic\delete_template.html:15
|
||||
#: .\cookbook\templates\generic\edit_template.html:28
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
msgstr "מחיקה"
|
||||
|
||||
#: .\cookbook\templates\404.html:5
|
||||
msgid "404 Error"
|
||||
msgstr ""
|
||||
msgstr "שגיאה 404"
|
||||
|
||||
#: .\cookbook\templates\404.html:18
|
||||
msgid "The page you are looking for could not be found."
|
||||
@@ -624,12 +629,12 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\404.html:35
|
||||
msgid "Report a Bug"
|
||||
msgstr ""
|
||||
msgstr "דווח על באג"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:6
|
||||
#: .\cookbook\templates\account\email.html:17
|
||||
msgid "E-mail Addresses"
|
||||
msgstr ""
|
||||
msgstr "כתובות אימייל"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:12
|
||||
#: .\cookbook\templates\account\password_change.html:11
|
||||
@@ -639,11 +644,11 @@ msgstr ""
|
||||
#: .\cookbook\templates\socialaccount\connections.html:10
|
||||
#: .\cookbook\templates\user_settings.html:8
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
msgstr "הגדרות"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:13
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
msgstr "מייל"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:19
|
||||
msgid "The following e-mail addresses are associated with your account:"
|
||||
@@ -651,33 +656,33 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\account\email.html:36
|
||||
msgid "Verified"
|
||||
msgstr ""
|
||||
msgstr "מאומת"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:38
|
||||
msgid "Unverified"
|
||||
msgstr ""
|
||||
msgstr "לא מאומת"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:40
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
msgstr "ראשי"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:47
|
||||
msgid "Make Primary"
|
||||
msgstr ""
|
||||
msgstr "הגדר כראשי"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:49
|
||||
msgid "Re-send Verification"
|
||||
msgstr ""
|
||||
msgstr "שלח אימות מחדש"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:50
|
||||
#: .\cookbook\templates\generic\delete_template.html:57
|
||||
#: .\cookbook\templates\socialaccount\connections.html:44
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
msgstr "הסרה"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:58
|
||||
msgid "Warning:"
|
||||
msgstr ""
|
||||
msgstr "אזהרה:"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:58
|
||||
msgid ""
|
||||
@@ -687,11 +692,11 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\account\email.html:64
|
||||
msgid "Add E-mail Address"
|
||||
msgstr ""
|
||||
msgstr "הוספת כתובת מייל"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:69
|
||||
msgid "Add E-mail"
|
||||
msgstr ""
|
||||
msgstr "הוספת מייל"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:79
|
||||
msgid "Do you really want to remove the selected e-mail address?"
|
||||
@@ -700,7 +705,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\email_confirm.html:6
|
||||
#: .\cookbook\templates\account\email_confirm.html:10
|
||||
msgid "Confirm E-mail Address"
|
||||
msgstr ""
|
||||
msgstr "אשר כתובת מייל"
|
||||
|
||||
#: .\cookbook\templates\account\email_confirm.html:16
|
||||
#, python-format
|
||||
@@ -714,7 +719,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\email_confirm.html:22
|
||||
#: .\cookbook\templates\generic\delete_template.html:72
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
msgstr "אשר"
|
||||
|
||||
#: .\cookbook\templates\account\email_confirm.html:29
|
||||
#, python-format
|
||||
@@ -727,7 +732,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\login.html:8 .\cookbook\templates\base.html:388
|
||||
#: .\cookbook\templates\openid\login.html:8
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
msgstr "התחבר"
|
||||
|
||||
#: .\cookbook\templates\account\login.html:15
|
||||
#: .\cookbook\templates\account\login.html:31
|
||||
@@ -739,7 +744,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\openid\login.html:26
|
||||
#: .\cookbook\templates\socialaccount\authentication_error.html:15
|
||||
msgid "Sign In"
|
||||
msgstr ""
|
||||
msgstr "התחבר"
|
||||
|
||||
#: .\cookbook\templates\account\login.html:34
|
||||
#: .\cookbook\templates\account\password_reset.html:41
|
||||
@@ -747,7 +752,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\socialaccount\signup.html:8
|
||||
#: .\cookbook\templates\socialaccount\signup.html:57
|
||||
msgid "Sign Up"
|
||||
msgstr ""
|
||||
msgstr "הירשם"
|
||||
|
||||
#: .\cookbook\templates\account\login.html:38
|
||||
msgid "Lost your password?"
|
||||
@@ -756,7 +761,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\login.html:39
|
||||
#: .\cookbook\templates\account\password_reset.html:29
|
||||
msgid "Reset My Password"
|
||||
msgstr ""
|
||||
msgstr "איפוס סיסמא"
|
||||
|
||||
#: .\cookbook\templates\account\login.html:50
|
||||
msgid "Social Login"
|
||||
@@ -770,7 +775,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\logout.html:9
|
||||
#: .\cookbook\templates\account\logout.html:18
|
||||
msgid "Sign Out"
|
||||
msgstr ""
|
||||
msgstr "התנתק"
|
||||
|
||||
#: .\cookbook\templates\account\logout.html:11
|
||||
msgid "Are you sure you want to sign out?"
|
||||
@@ -789,7 +794,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\password_change.html:12
|
||||
#: .\cookbook\templates\account\password_set.html:12
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
msgstr "סיסמא"
|
||||
|
||||
#: .\cookbook\templates\account\password_change.html:22
|
||||
msgid "Forgot Password?"
|
||||
@@ -844,52 +849,52 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\password_set.html:16
|
||||
#: .\cookbook\templates\account\password_set.html:21
|
||||
msgid "Set Password"
|
||||
msgstr ""
|
||||
msgstr "קבע סיסמא"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:6
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
msgstr "הירשם"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:12
|
||||
msgid "Create an Account"
|
||||
msgstr ""
|
||||
msgstr "צור משתמש"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:42
|
||||
#: .\cookbook\templates\socialaccount\signup.html:33
|
||||
msgid "I accept the follwoing"
|
||||
msgstr ""
|
||||
msgstr "אני מקבל את התנאים הבאים"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:45
|
||||
#: .\cookbook\templates\socialaccount\signup.html:36
|
||||
msgid "Terms and Conditions"
|
||||
msgstr ""
|
||||
msgstr "תנאים והגבלות"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:48
|
||||
#: .\cookbook\templates\socialaccount\signup.html:39
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
msgstr "ו"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:52
|
||||
#: .\cookbook\templates\socialaccount\signup.html:43
|
||||
msgid "Privacy Policy"
|
||||
msgstr ""
|
||||
msgstr "מדיניות פרטיות"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:65
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
msgstr "צור משתמש"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:69
|
||||
msgid "Already have an account?"
|
||||
msgstr ""
|
||||
msgstr "יש לך חשבון?"
|
||||
|
||||
#: .\cookbook\templates\account\signup_closed.html:5
|
||||
#: .\cookbook\templates\account\signup_closed.html:11
|
||||
msgid "Sign Up Closed"
|
||||
msgstr ""
|
||||
msgstr "ההרשמה סגורה"
|
||||
|
||||
#: .\cookbook\templates\account\signup_closed.html:13
|
||||
msgid "We are sorry, but the sign up is currently closed."
|
||||
msgstr ""
|
||||
msgstr "אנו מצטערים, אך ההרשמה כרגע סגורה."
|
||||
|
||||
#: .\cookbook\templates\api_info.html:5 .\cookbook\templates\base.html:378
|
||||
#: .\cookbook\templates\rest_framework\api.html:11
|
||||
@@ -898,11 +903,11 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:110 .\cookbook\templates\index.html:87
|
||||
msgid "Recipes"
|
||||
msgstr ""
|
||||
msgstr "מתכונים"
|
||||
|
||||
#: .\cookbook\templates\base.html:161 .\cookbook\views\lists.py:120
|
||||
msgid "Foods"
|
||||
msgstr ""
|
||||
msgstr "מאכלים"
|
||||
|
||||
#: .\cookbook\templates\base.html:173 .\cookbook\views\lists.py:137
|
||||
msgid "Units"
|
||||
@@ -918,11 +923,11 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:211 .\cookbook\views\lists.py:186
|
||||
msgid "Automations"
|
||||
msgstr ""
|
||||
msgstr "אוטומציות"
|
||||
|
||||
#: .\cookbook\templates\base.html:225 .\cookbook\views\lists.py:222
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
msgstr "קבצים"
|
||||
|
||||
#: .\cookbook\templates\base.html:237
|
||||
msgid "Batch Edit"
|
||||
@@ -943,7 +948,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\export_response.html:7
|
||||
#: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20
|
||||
msgid "Export"
|
||||
msgstr ""
|
||||
msgstr "יצא"
|
||||
|
||||
#: .\cookbook\templates\base.html:287
|
||||
msgid "Properties"
|
||||
@@ -968,7 +973,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:336 .\cookbook\templates\space_manage.html:15
|
||||
msgid "Space Settings"
|
||||
msgstr ""
|
||||
msgstr "הגדרות מרחב"
|
||||
|
||||
#: .\cookbook\templates\base.html:340
|
||||
msgid "External Connectors"
|
||||
@@ -976,21 +981,21 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:345 .\cookbook\templates\system.html:13
|
||||
msgid "System"
|
||||
msgstr ""
|
||||
msgstr "מערכת"
|
||||
|
||||
#: .\cookbook\templates\base.html:347
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
msgstr "מנהל"
|
||||
|
||||
#: .\cookbook\templates\base.html:351
|
||||
#: .\cookbook\templates\space_overview.html:25
|
||||
msgid "Your Spaces"
|
||||
msgstr ""
|
||||
msgstr "המרחבים שלך"
|
||||
|
||||
#: .\cookbook\templates\base.html:362
|
||||
#: .\cookbook\templates\space_overview.html:6
|
||||
msgid "Overview"
|
||||
msgstr ""
|
||||
msgstr "סקירה כללית"
|
||||
|
||||
#: .\cookbook\templates\base.html:372
|
||||
msgid "Markdown Guide"
|
||||
@@ -1010,7 +1015,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:383
|
||||
msgid "Log out"
|
||||
msgstr ""
|
||||
msgstr "התנתק"
|
||||
|
||||
#: .\cookbook\templates\base.html:406
|
||||
msgid "You are using the free version of Tandor"
|
||||
@@ -1068,7 +1073,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\batch\monitor.html:29
|
||||
msgid "Show Recipes"
|
||||
msgstr ""
|
||||
msgstr "הראה מתכונים"
|
||||
|
||||
#: .\cookbook\templates\batch\monitor.html:30
|
||||
msgid "Show Log"
|
||||
@@ -1109,7 +1114,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\generic\delete_template.html:22
|
||||
msgid "This cannot be undone!"
|
||||
msgstr ""
|
||||
msgstr "לא ניתן לבטל פעולה זו!"
|
||||
|
||||
#: .\cookbook\templates\generic\delete_template.html:27
|
||||
msgid "Protected"
|
||||
@@ -1126,7 +1131,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\generic\edit_template.html:6
|
||||
#: .\cookbook\templates\generic\edit_template.html:14
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "ערוך"
|
||||
|
||||
#: .\cookbook\templates\generic\edit_template.html:32
|
||||
msgid "View"
|
||||
@@ -1160,7 +1165,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\generic\table_template.html:98
|
||||
msgid "next"
|
||||
msgstr ""
|
||||
msgstr "הבא"
|
||||
|
||||
#: .\cookbook\templates\history.html:20
|
||||
msgid "View Log"
|
||||
@@ -1173,7 +1178,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\import_response.html:7 .\cookbook\views\delete.py:90
|
||||
#: .\cookbook\views\edit.py:174
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
msgstr "יבא"
|
||||
|
||||
#: .\cookbook\templates\include\storage_backend_warning.html:4
|
||||
msgid "Security Warning"
|
||||
@@ -1354,7 +1359,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\no_groups_info.html:5
|
||||
#: .\cookbook\templates\no_groups_info.html:12
|
||||
msgid "No Permissions"
|
||||
msgstr ""
|
||||
msgstr "אין הרשאות"
|
||||
|
||||
#: .\cookbook\templates\no_groups_info.html:17
|
||||
msgid "You do not have any groups and therefor cannot use this application."
|
||||
@@ -1363,12 +1368,12 @@ msgstr ""
|
||||
#: .\cookbook\templates\no_groups_info.html:18
|
||||
#: .\cookbook\templates\no_perm_info.html:15
|
||||
msgid "Please contact your administrator."
|
||||
msgstr ""
|
||||
msgstr "אנא פנה למנהל המערכת."
|
||||
|
||||
#: .\cookbook\templates\no_perm_info.html:5
|
||||
#: .\cookbook\templates\no_perm_info.html:12
|
||||
msgid "No Permission"
|
||||
msgstr ""
|
||||
msgstr "אין הרשאות"
|
||||
|
||||
#: .\cookbook\templates\no_perm_info.html:15
|
||||
msgid ""
|
||||
@@ -1378,11 +1383,11 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\offline.html:6
|
||||
msgid "Offline"
|
||||
msgstr ""
|
||||
msgstr "לא מקוון"
|
||||
|
||||
#: .\cookbook\templates\offline.html:19
|
||||
msgid "You are currently offline!"
|
||||
msgstr ""
|
||||
msgstr "אתה כרגע במצב לא מקוון!"
|
||||
|
||||
#: .\cookbook\templates\offline.html:20
|
||||
msgid ""
|
||||
@@ -1393,7 +1398,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\openid\login.html:27
|
||||
#: .\cookbook\templates\socialaccount\authentication_error.html:27
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
msgstr "אחורה"
|
||||
|
||||
#: .\cookbook\templates\property_editor.html:7
|
||||
msgid "Property Editor"
|
||||
@@ -1420,7 +1425,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\search_info.html:9
|
||||
#: .\cookbook\templates\settings.html:24
|
||||
msgid "Search Settings"
|
||||
msgstr ""
|
||||
msgstr "הגדרות חיפוש"
|
||||
|
||||
#: .\cookbook\templates\search_info.html:10
|
||||
msgid ""
|
||||
@@ -1436,7 +1441,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\search_info.html:19
|
||||
msgid "Search Methods"
|
||||
msgstr ""
|
||||
msgstr "שיטות חיפוש"
|
||||
|
||||
#: .\cookbook\templates\search_info.html:23
|
||||
msgid ""
|
||||
@@ -1519,7 +1524,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\search_info.html:69
|
||||
msgid "Search Fields"
|
||||
msgstr ""
|
||||
msgstr "שדות חיפוש"
|
||||
|
||||
#: .\cookbook\templates\search_info.html:73
|
||||
msgid ""
|
||||
@@ -1938,286 +1943,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
2543
cookbook/locale/hr/LC_MESSAGES/django.po
Normal file
2543
cookbook/locale/hr/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-12-05 09:15+0000\n"
|
||||
"Last-Translator: Ferenc <ugyes@freemail.hu>\n"
|
||||
"Language-Team: Hungarian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -2268,81 +2268,81 @@ msgstr "Napló megjelenítése"
|
||||
msgid "URL Import"
|
||||
msgstr "URL importálása"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Az updated_at paraméter helytelenül van formázva"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Nem létezik {self.basename} azonosítóval {pk}"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Nem egyesíthető ugyanazzal az objektummal!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Nem létezik {self.basename} azonosítóval {target}"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Nem lehet egyesíteni a gyermekobjektummal!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} sikeresen egyesült a {target.name} -vel"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr "Hiba történt a {source.name} és a {target.name} egyesítése során"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} sikeresen átkerült a gyökérbe."
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Hiba történt az áthelyezés közben "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Nem lehet egy objektumot önmagába mozgatni!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Nem létezik {self.basename} azonosítóval {parent}"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} sikeresen átkerült a {parent.name} szülőhöz"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} lekerült a bevásárlólistáról."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} hozzá lett adva a bevásárlólistához."
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
@@ -2350,17 +2350,17 @@ msgstr ""
|
||||
"A recept azonosítója, amelynek egy lépés része. Többszörös ismétlés esetén "
|
||||
"paraméter."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"A recept azonosítója, amelynek egy lépés része. Többszörös ismétlés esetén "
|
||||
"paraméter."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "A lekérdezés karakterlánca az objektum nevével összevetve (fuzzy)."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2368,7 +2368,7 @@ msgstr ""
|
||||
"A lekérdezési karakterláncot a recept nevével összevetve (fuzzy). A jövőben "
|
||||
"teljes szöveges keresés is."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
@@ -2376,69 +2376,69 @@ msgstr ""
|
||||
"A recept kulcsszavának azonosítója. Többszörös ismétlődő paraméter esetén. "
|
||||
"Egyenértékű a keywords_or kulcsszavakkal"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"Kulcsszó azonosítók. Többször is megadható. A megadott kulcsszavak "
|
||||
"mindegyikéhez tartozó receptek listázza"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Kulcsszó azonosítók. Többször is megadható. Az összes megadott kulcsszót "
|
||||
"tartalmazó receptek listázása."
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"Kulcsszó azonosító. Többször is megadható. Kizárja a recepteket a megadott "
|
||||
"kulcsszavak egyikéből."
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Kulcsszó azonosítók. Többször is megadható. Kizárja az összes megadott "
|
||||
"kulcsszóval rendelkező receptet."
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"Annak az összetevőnek az azonosítója, amelynek receptjeit fel kell sorolni. "
|
||||
"Többször is megadható."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"Összetevő azonosító. Többször is megadható. Legalább egy összetevő "
|
||||
"receptjeinek listája"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Összetevő azonosító. Többször is megadható. Az összes megadott összetevőt "
|
||||
"tartalmazó receptek listája."
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"Összetevő azonosító. Többször is megadható. Kizárja azokat a recepteket, "
|
||||
"amelyek a megadott összetevők bármelyikét tartalmazzák."
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Összetevő azonosító. Többször is megadható. Kizárja az összes megadott "
|
||||
"összetevőt tartalmazó recepteket."
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "A recepthez tartozó mértékegység azonosítója."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
@@ -2446,51 +2446,51 @@ msgstr ""
|
||||
"Egy recept minimális értékelése (0-5). A negatív értékek a maximális "
|
||||
"értékelés szerint szűrnek."
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"A könyv azonosítója, amelyben a recept található. Többször is megadható."
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
"A könyv azonosítója. Többször is megadható. A megadott könyvek összes "
|
||||
"receptjének listája"
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
"A könyv azonosítója. Többször is megadható. Az összes könyvben szereplő "
|
||||
"recept listája."
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
"A könyv azonosítói. Többször is megadható. Kizárja a megadott könyvek "
|
||||
"receptjeit."
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
"A könyv azonosítói. Többször is megadható. Kizárja az összes megadott "
|
||||
"könyvben szereplő receptet."
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr "Ha csak a belső recepteket kell visszaadni. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Az eredményeket véletlenszerű sorrendben adja vissza. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Az új találatokat adja vissza először a keresési eredmények között. [true/"
|
||||
"<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
@@ -2498,7 +2498,7 @@ msgstr ""
|
||||
"X-szer vagy többször főzött receptek szűrése. A negatív értékek X "
|
||||
"alkalomnál kevesebbet főzött recepteket jelenítik meg"
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2507,7 +2507,7 @@ msgstr ""
|
||||
"vagy később főztek meg utoljára. A - jelölve az adott dátumon vagy azt "
|
||||
"megelőzően elkészítettek kerülnek be a receptek listájába."
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2516,7 +2516,7 @@ msgstr ""
|
||||
"vagy később hoztak létre. A - jelölve az adott dátumon vagy azt megelőzően "
|
||||
"hozták létre."
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2525,7 +2525,7 @@ msgstr ""
|
||||
"vagy később frissültek. A - jelölve az adott dátumon vagy azt megelőzően "
|
||||
"frissültek."
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2534,13 +2534,13 @@ msgstr ""
|
||||
"vagy később néztek meg utoljára. A - jelölve az adott dátumon vagy azt "
|
||||
"megelőzően néztek meg utoljára."
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Felsorolja azokat a recepteket, amelyeket a rendelkezésre álló összetevőkből "
|
||||
"el lehet készíteni. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
@@ -2548,7 +2548,7 @@ msgstr ""
|
||||
"Visszaadja az id elsődleges kulccsal rendelkező bevásárlólista-bejegyzést. "
|
||||
"Több érték megengedett."
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
@@ -2562,17 +2562,17 @@ msgstr ""
|
||||
"mindkettő, <b>legutóbbi</b>]<br> – a legutóbbi a nem bejelölt és a nemrég "
|
||||
"befejezett elemeket tartalmazza."
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
"Visszaadja a bevásárlólista bejegyzéseit szupermarket kategóriák szerinti "
|
||||
"sorrendben."
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Returns the shopping list entry with a primary key of id. Multiple "
|
||||
@@ -2584,45 +2584,45 @@ msgstr ""
|
||||
"Visszaadja az id elsődleges kulccsal rendelkező bevásárlólista-bejegyzést. "
|
||||
"Több érték megengedett."
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Semmi feladat."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr "Érvénytelen URL"
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "Kapcsolat megtagadva."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "Rossz URL séma."
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Nem sikerült használható adatokat találni."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Az importálás nincs implementálva ennél a szolgáltatónál"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Ez a funkció még nem érhető el a tandoor hosztolt verziójában!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Szinkronizálás sikeres!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Hiba szinkronizálás közben a tárolóval"
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-01-08 17:55+0000\n"
|
||||
"Last-Translator: Joachim Weber <joachim.weber@gmx.de>\n"
|
||||
"Language-Team: Armenian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -2121,282 +2121,282 @@ msgstr "Ցուցադրել օգնություն"
|
||||
msgid "URL Import"
|
||||
msgstr "URL ներմուծում"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
#, fuzzy
|
||||
#| msgid "Parameter filter_list incorrectly formatted"
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "filter_list պարամետրը սխալ է ձևավորված"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Հնարավոր չէ միավորել նույն օբյեկտի հետ:"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
#, fuzzy
|
||||
#| msgid "Cannot merge with the same object!"
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Հնարավոր չէ միավորել նույն օբյեկտի հետ:"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "The requested page could not be found."
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Պահանջվող էջը չի գտնվել:"
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Ներմուծումն այս պրովայդերի համար իրականացված չէ"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
#, fuzzy
|
||||
@@ -2404,11 +2404,11 @@ msgstr "Ներմուծումն այս պրովայդերի համար իրակա
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Այս հատկությունը հասանելի չէ փորձնական տարբերակում։"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Սինքրոնիզացիան հաջողված է:"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Պահոցի հետ սինքրոնիզացիայի սխալ"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2022-10-12 08:33+0000\n"
|
||||
"Last-Translator: wella <wella.design@gmail.com>\n"
|
||||
"Language-Team: Indonesian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -1962,286 +1962,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -7,9 +7,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2023-08-19 21:36+0000\n"
|
||||
"Last-Translator: NeoID <neoid@animenord.com>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2025-01-26 05:58+0000\n"
|
||||
"Last-Translator: Ole Martin Ruud <nett@barskern.no>\n"
|
||||
"Language-Team: Norwegian Bokmål <http://translate.tandoor.dev/projects/"
|
||||
"tandoor/recipes-backend/nb_NO/>\n"
|
||||
"Language: nb_NO\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"X-Generator: Weblate 5.8.4\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -326,10 +326,8 @@ msgid "Imported %s recipes."
|
||||
msgstr "Importerte %s oppskrifter."
|
||||
|
||||
#: .\cookbook\integration\openeats.py:28
|
||||
#, fuzzy
|
||||
#| msgid "Recipes"
|
||||
msgid "Recipe source:"
|
||||
msgstr "Oppskrifter"
|
||||
msgstr "Oppskriftskilde:"
|
||||
|
||||
#: .\cookbook\integration\paprika.py:49
|
||||
msgid "Notes"
|
||||
@@ -555,7 +553,7 @@ msgstr "Oppskrift"
|
||||
|
||||
#: .\cookbook\models.py:1504
|
||||
msgid "Food"
|
||||
msgstr ""
|
||||
msgstr "Mat"
|
||||
|
||||
#: .\cookbook\models.py:1505 .\cookbook\templates\base.html:149
|
||||
msgid "Keyword"
|
||||
@@ -846,10 +844,8 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\templates\account\password_reset.html:32
|
||||
#, fuzzy
|
||||
#| msgid "Password reset is not implemented for the time being!"
|
||||
msgid "Password reset is disabled on this instance."
|
||||
msgstr "Det er foreløpig ikke implementert funksjon for å nullstille passord!"
|
||||
msgstr "Nullstilling av passord er skrudd av for denne instansen."
|
||||
|
||||
#: .\cookbook\templates\account\password_reset_done.html:25
|
||||
msgid ""
|
||||
@@ -912,7 +908,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\signup.html:48
|
||||
#: .\cookbook\templates\socialaccount\signup.html:39
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
msgstr "og"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:52
|
||||
#: .\cookbook\templates\socialaccount\signup.html:43
|
||||
@@ -946,8 +942,6 @@ msgid "Recipes"
|
||||
msgstr "Oppskrifter"
|
||||
|
||||
#: .\cookbook\templates\base.html:161 .\cookbook\views\lists.py:120
|
||||
#, fuzzy
|
||||
#| msgid "New Food"
|
||||
msgid "Foods"
|
||||
msgstr "Ny matvare"
|
||||
|
||||
@@ -989,10 +983,8 @@ msgstr "Historikk"
|
||||
#: .\cookbook\templates\base.html:263
|
||||
#: .\cookbook\templates\ingredient_editor.html:7
|
||||
#: .\cookbook\templates\ingredient_editor.html:13
|
||||
#, fuzzy
|
||||
#| msgid "Ingredients"
|
||||
msgid "Ingredient Editor"
|
||||
msgstr "Ingredienser"
|
||||
msgstr "Ingrediensredigerer"
|
||||
|
||||
#: .\cookbook\templates\base.html:275
|
||||
#: .\cookbook\templates\export_response.html:7
|
||||
@@ -1002,7 +994,7 @@ msgstr "Eksporter"
|
||||
|
||||
#: .\cookbook\templates\base.html:287
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
msgstr "Egenskaper"
|
||||
|
||||
#: .\cookbook\templates\base.html:301 .\cookbook\views\lists.py:255
|
||||
msgid "Unit Conversions"
|
||||
@@ -1179,7 +1171,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\generic\delete_template.html:27
|
||||
msgid "Protected"
|
||||
msgstr ""
|
||||
msgstr "Beskyttet"
|
||||
|
||||
#: .\cookbook\templates\generic\delete_template.html:42
|
||||
msgid "Cascade"
|
||||
@@ -1938,7 +1930,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\system.html:75 .\cookbook\templates\system.html:88
|
||||
#: .\cookbook\templates\system.html:102 .\cookbook\templates\system.html:113
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
msgstr "Advarsel"
|
||||
|
||||
#: .\cookbook\templates\system.html:47 .\cookbook\templates\system.html:61
|
||||
#: .\cookbook\templates\system.html:75 .\cookbook\templates\system.html:88
|
||||
@@ -2053,286 +2045,286 @@ msgstr "Vis hjelp"
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -12,17 +12,17 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2024-02-10 12:20+0000\n"
|
||||
"Last-Translator: Jonan B <jonanb@pm.me>\n"
|
||||
"Language-Team: Dutch <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
"backend/nl/>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2025-02-16 14:58+0000\n"
|
||||
"Last-Translator: Cots Partier <cots.pastier.34@icloud.com>\n"
|
||||
"Language-Team: Dutch <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/nl/>\n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"X-Generator: Weblate 5.8.4\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -65,8 +65,8 @@ msgid ""
|
||||
"To prevent duplicates recipes with the same name as existing ones are "
|
||||
"ignored. Check this box to import everything."
|
||||
msgstr ""
|
||||
"Om dubbelingen te voorkomen worden recepten met dezelfde naam als een "
|
||||
"bestaand recept genegeerd. Vink aan om alles te importeren."
|
||||
"Standaard worden dubbele recepten, op basis van de naam, genegeerd. Vink "
|
||||
"deze optie aan om toch alles te importeren."
|
||||
|
||||
#: .\cookbook\forms.py:143
|
||||
msgid "Add your comment: "
|
||||
@@ -93,14 +93,17 @@ msgid ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Long Lived Access Token</a> for your HomeAssistant instance"
|
||||
msgstr ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Toegangtokens met lange levensduur</a> voor jouw HomeAssistant "
|
||||
"installatie"
|
||||
|
||||
#: .\cookbook\forms.py:193
|
||||
msgid "Something like http://homeassistant.local:8123/api"
|
||||
msgstr ""
|
||||
msgstr "Bijvoorbeeld http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:205
|
||||
msgid "http://homeassistant.local:8123/api for example"
|
||||
msgstr ""
|
||||
msgstr "http://homeassistant.local:8123/api bijvoorbeeld"
|
||||
|
||||
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
|
||||
msgid "Storage"
|
||||
@@ -283,7 +286,7 @@ msgstr "omgekeerde rotatie"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:311
|
||||
msgid "careful rotation"
|
||||
msgstr "voorzichtige rotatie"
|
||||
msgstr "rotire atentă"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:312
|
||||
msgid "knead"
|
||||
@@ -303,7 +306,7 @@ msgstr "gisten"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:316
|
||||
msgid "sous-vide"
|
||||
msgstr "sous-vide"
|
||||
msgstr "sous-vide (vacuümgaren)"
|
||||
|
||||
#: .\cookbook\helper\shopping_helper.py:150
|
||||
msgid "You must supply a servings size"
|
||||
@@ -390,7 +393,7 @@ msgstr "Sectie"
|
||||
|
||||
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
|
||||
msgid "Fixes foods with "
|
||||
msgstr ""
|
||||
msgstr "Repareer voedingsmiddelen met "
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:14
|
||||
msgid "Rebuilds full text search index on Recipe"
|
||||
@@ -427,16 +430,14 @@ msgid "Other"
|
||||
msgstr "Overige"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
#, fuzzy
|
||||
#| msgid "Fats"
|
||||
msgid "Fat"
|
||||
msgstr "Vetten"
|
||||
msgstr "Vet"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
|
||||
msgid "g"
|
||||
msgstr ""
|
||||
msgstr "g"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
msgid "Carbohydrates"
|
||||
@@ -452,7 +453,7 @@ msgstr "Calorieën"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:20
|
||||
msgid "kcal"
|
||||
msgstr ""
|
||||
msgstr "kcal"
|
||||
|
||||
#: .\cookbook\models.py:325
|
||||
msgid ""
|
||||
@@ -475,7 +476,7 @@ msgstr "Maaltijdplan"
|
||||
#: .\cookbook\models.py:456 .\cookbook\templates\base.html:122
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "Books"
|
||||
msgstr "Boeken"
|
||||
msgstr "Kookboeken"
|
||||
|
||||
#: .\cookbook\models.py:457 .\cookbook\templates\base.html:118
|
||||
#: .\cookbook\views\views.py:460
|
||||
@@ -491,18 +492,16 @@ msgid "Nutrition"
|
||||
msgstr "Voedingswaarde"
|
||||
|
||||
#: .\cookbook\models.py:918
|
||||
#, fuzzy
|
||||
#| msgid "Merge"
|
||||
msgid "Allergen"
|
||||
msgstr "Samenvoegen"
|
||||
msgstr "Allergeen"
|
||||
|
||||
#: .\cookbook\models.py:919
|
||||
msgid "Price"
|
||||
msgstr ""
|
||||
msgstr "Prijs"
|
||||
|
||||
#: .\cookbook\models.py:919
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
msgstr "Doel"
|
||||
|
||||
#: .\cookbook\models.py:1408 .\cookbook\templates\search_info.html:28
|
||||
msgid "Simple"
|
||||
@@ -541,30 +540,24 @@ msgid "Instruction Replace"
|
||||
msgstr "Vervang instructies"
|
||||
|
||||
#: .\cookbook\models.py:1472
|
||||
#, fuzzy
|
||||
#| msgid "New Unit"
|
||||
msgid "Never Unit"
|
||||
msgstr "Nieuwe eenheid"
|
||||
msgstr "Nooit eenheid"
|
||||
|
||||
#: .\cookbook\models.py:1473
|
||||
msgid "Transpose Words"
|
||||
msgstr ""
|
||||
msgstr "Omzetten Woorden"
|
||||
|
||||
#: .\cookbook\models.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "Food Alias"
|
||||
msgid "Food Replace"
|
||||
msgstr "Ingrediënt alias"
|
||||
msgstr "Voedingsmiddelen vervangen"
|
||||
|
||||
#: .\cookbook\models.py:1475
|
||||
#, fuzzy
|
||||
#| msgid "Description Replace"
|
||||
msgid "Unit Replace"
|
||||
msgstr "Verrvang beschrijving"
|
||||
msgstr "Eenheid Vervangen"
|
||||
|
||||
#: .\cookbook\models.py:1476
|
||||
msgid "Name Replace"
|
||||
msgstr ""
|
||||
msgstr "Naam Vervangen"
|
||||
|
||||
#: .\cookbook\models.py:1503 .\cookbook\views\delete.py:40
|
||||
#: .\cookbook\views\edit.py:210 .\cookbook\views\new.py:39
|
||||
@@ -577,7 +570,7 @@ msgstr "Ingrediënt"
|
||||
|
||||
#: .\cookbook\models.py:1505 .\cookbook\templates\base.html:149
|
||||
msgid "Keyword"
|
||||
msgstr "Etiket"
|
||||
msgstr "Trefwoord"
|
||||
|
||||
#: .\cookbook\serializer.py:222
|
||||
msgid "File uploads are not enabled for this Space."
|
||||
@@ -637,8 +630,8 @@ msgid ""
|
||||
"List of ingredient IDs from the recipe to add, if not provided all "
|
||||
"ingredients will be added."
|
||||
msgstr ""
|
||||
"Lijst van ingrediënten ID's van het toe te voegen recept, als deze niet "
|
||||
"opgegeven worden worden alle ingrediënten toegevoegd."
|
||||
"Lijst van ingrediënt ID's van het toe te voegen recept, als deze niet worden "
|
||||
"opgegeven worden alle ingrediënten toegevoegd."
|
||||
|
||||
#: .\cookbook\serializer.py:1430
|
||||
msgid ""
|
||||
@@ -907,7 +900,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\account\password_reset_from_key.html:33
|
||||
msgid "change password"
|
||||
msgstr "Wijzig wachtwoord"
|
||||
msgstr "wijzig wachtwoord"
|
||||
|
||||
#: .\cookbook\templates\account\password_reset_from_key.html:36
|
||||
#: .\cookbook\templates\account\password_reset_from_key_done.html:19
|
||||
@@ -1021,13 +1014,11 @@ msgstr "Exporteren"
|
||||
|
||||
#: .\cookbook\templates\base.html:287
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
msgstr "Eigenschappen"
|
||||
|
||||
#: .\cookbook\templates\base.html:301 .\cookbook\views\lists.py:255
|
||||
#, fuzzy
|
||||
#| msgid "Account Connections"
|
||||
msgid "Unit Conversions"
|
||||
msgstr "Account verbindingen"
|
||||
msgstr "Eenheid omzetten"
|
||||
|
||||
#: .\cookbook\templates\base.html:318 .\cookbook\templates\index.html:47
|
||||
msgid "Import Recipe"
|
||||
@@ -1047,10 +1038,8 @@ msgid "Space Settings"
|
||||
msgstr "Ruimte Instellingen"
|
||||
|
||||
#: .\cookbook\templates\base.html:340
|
||||
#, fuzzy
|
||||
#| msgid "External Recipes"
|
||||
msgid "External Connectors"
|
||||
msgstr "Externe recepten"
|
||||
msgstr "Externe Connectors"
|
||||
|
||||
#: .\cookbook\templates\base.html:345 .\cookbook\templates\system.html:13
|
||||
msgid "System"
|
||||
@@ -1439,11 +1428,11 @@ msgstr "Tabellen"
|
||||
#: .\cookbook\templates\markdown_info.html:153
|
||||
msgid ""
|
||||
"Markdown tables are hard to create by hand. It is recommended to use a table "
|
||||
"editor like <a href=\"https://www.tablesgenerator.com/markdown_tables\" rel="
|
||||
"\"noreferrer noopener\" target=\"_blank\">this one.</a>"
|
||||
"editor like <a href=\"https://www.tablesgenerator.com/markdown_tables\" "
|
||||
"rel=\"noreferrer noopener\" target=\"_blank\">this one.</a>"
|
||||
msgstr ""
|
||||
"Het is lastig om met de hand Markdown tabellen te maken. Het wordt "
|
||||
"aangeraden om een tabel editor zoals <a href=\"https://www.tablesgenerator."
|
||||
"aangeraden om een tabel 'editor' zoals <a href=\"https://www.tablesgenerator."
|
||||
"com/markdown_tables\" rel=\"noreferrer noopener\" target=\"_blank\">deze</a> "
|
||||
"te gebruiken."
|
||||
|
||||
@@ -1513,10 +1502,8 @@ msgid "Back"
|
||||
msgstr "Terug"
|
||||
|
||||
#: .\cookbook\templates\property_editor.html:7
|
||||
#, fuzzy
|
||||
#| msgid "Ingredient Editor"
|
||||
msgid "Property Editor"
|
||||
msgstr "Ingrediënten editor"
|
||||
msgstr "Eigenschappen Editor"
|
||||
|
||||
#: .\cookbook\templates\recipe_view.html:36
|
||||
msgid "Comments"
|
||||
@@ -1856,7 +1843,7 @@ msgstr "Perfect voor grote databases"
|
||||
|
||||
#: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5
|
||||
msgid "Cookbook Setup"
|
||||
msgstr "Kookboek Setup"
|
||||
msgstr "Kookboek configuratie"
|
||||
|
||||
#: .\cookbook\templates\setup.html:14
|
||||
msgid "Setup"
|
||||
@@ -1973,10 +1960,8 @@ msgid "Sign in using"
|
||||
msgstr "Log in met"
|
||||
|
||||
#: .\cookbook\templates\space_manage.html:7
|
||||
#, fuzzy
|
||||
#| msgid "Space Membership"
|
||||
msgid "Space Management"
|
||||
msgstr "Space Lidmaatschap"
|
||||
msgstr "Ruimte Management"
|
||||
|
||||
#: .\cookbook\templates\space_manage.html:26
|
||||
msgid "Space:"
|
||||
@@ -2072,6 +2057,10 @@ msgid ""
|
||||
"script to generate version information (done automatically in docker).\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Je moet <code>version.py</code> uitvoeren in je update script om "
|
||||
"versie informatie te genereren (gebeurt automatisch in docker).\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:46
|
||||
msgid "Media Serving"
|
||||
@@ -2158,7 +2147,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\system.html:86
|
||||
msgid "Allowed Hosts"
|
||||
msgstr ""
|
||||
msgstr "Hosts met toestemming"
|
||||
|
||||
#: .\cookbook\templates\system.html:90
|
||||
msgid ""
|
||||
@@ -2168,6 +2157,11 @@ msgid ""
|
||||
"this.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Jouw 'hosts met toestemming' zijn geconfigureerd om alle hosts "
|
||||
"toestemming te geven. Dit is in niet altijd fout maar zou eigenlijk "
|
||||
"voorkomen moeten worden. Raadpleeg de documentatie hiervoor.\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:97
|
||||
msgid "Database"
|
||||
@@ -2178,10 +2172,8 @@ msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: .\cookbook\templates\system.html:110 .\cookbook\templates\system.html:127
|
||||
#, fuzzy
|
||||
#| msgid "Use fractions"
|
||||
msgid "Migrations"
|
||||
msgstr "Gebruik fracties"
|
||||
msgstr "Migraties"
|
||||
|
||||
#: .\cookbook\templates\system.html:116
|
||||
msgid ""
|
||||
@@ -2194,93 +2186,103 @@ msgid ""
|
||||
"issue.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Migraties mogen nooit mislukken!\n"
|
||||
" Mislukte migraties zullen er waarschijnlijk voor zorgen dat "
|
||||
"grote delen van de app niet correct werken.\n"
|
||||
" Als een migratie mislukt, zorg er dan voor dat de applicatie de "
|
||||
"nieuwste versie is, blijft het probleem bestaan, plaats dan het "
|
||||
"migratielogboek en het onderstaande overzicht in een GitHub-issue.\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:182
|
||||
msgid "False"
|
||||
msgstr ""
|
||||
msgstr "Niet waar"
|
||||
|
||||
#: .\cookbook\templates\system.html:182
|
||||
msgid "True"
|
||||
msgstr ""
|
||||
msgstr "Waar"
|
||||
|
||||
#: .\cookbook\templates\system.html:207
|
||||
msgid "Hide"
|
||||
msgstr ""
|
||||
msgstr "Verberg"
|
||||
|
||||
#: .\cookbook\templates\system.html:210
|
||||
#, fuzzy
|
||||
#| msgid "Show Log"
|
||||
msgid "Show"
|
||||
msgstr "Toon Log"
|
||||
msgstr "Toon"
|
||||
|
||||
#: .\cookbook\templates\url_import.html:8
|
||||
msgid "URL Import"
|
||||
msgstr "Importeer URL"
|
||||
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Parameter updatet_at is onjuist geformateerd"
|
||||
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Er bestaat geen {self.basename} met id {pk}"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238 .\cookbook\views\api.py:239
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Kan niet met hetzelfde object samenvoegen!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245 .\cookbook\views\api.py:246
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Er bestaat geen {self.basename} met id {target}"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250 .\cookbook\views\api.py:251
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Kan niet met kindobject samenvoegen!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288 .\cookbook\views\api.py:289
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} is succesvol samengevoegd met {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293 .\cookbook\views\api.py:294
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
"Er is een error opgetreden bij het samenvoegen van {source.name} met {target."
|
||||
"name}"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349 .\cookbook\views\api.py:350
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} is succesvol verplaatst naar het hoogste niveau."
|
||||
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Er is een error opgetreden bij het verplaatsen "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355 .\cookbook\views\api.py:356
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Kan object niet verplaatsen naar zichzelf!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361 .\cookbook\views\api.py:362
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Er bestaat geen {self.basename} met id {parent}"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367 .\cookbook\views\api.py:368
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} is succesvol verplaatst naar {parent.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589 .\cookbook\views\api.py:590
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} is verwijderd van het boodschappenlijstje."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050 .\cookbook\views\api.py:595
|
||||
#: .\cookbook\views\api.py:1038 .\cookbook\views\api.py:1051
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} is toegevoegd aan het boodschappenlijstje."
|
||||
@@ -2288,30 +2290,29 @@ msgstr "{obj.name} is toegevoegd aan het boodschappenlijstje."
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
"Filter maaltijdplannen vanaf datum (inclusief) in het formaat JJJJ-MM-DD."
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
"Filter maaltijdplannen tot nu toe (inclusief) in het formaat JJJJ-MM-DD."
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID van het recept waar de stap onderdeel van is. Herhaal parameter voor "
|
||||
"meerdere."
|
||||
"Filter maaltijdplannen met MealType ID. Herhaal parameter voor meerdere."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872 .\cookbook\views\api.py:873
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID van het recept waar de stap onderdeel van is. Herhaal parameter voor "
|
||||
"meerdere."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873 .\cookbook\views\api.py:874
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "Zoekterm komt overeen (fuzzy) met object naam."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909 .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2319,7 +2320,7 @@ msgstr ""
|
||||
"Zoekterm komt overeen (fuzzy) met recept naam. In de toekomst wordt zoeken "
|
||||
"op volledige tekst ondersteund."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910 .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
@@ -2327,109 +2328,115 @@ msgstr ""
|
||||
"ID van etiket dat een recept moet hebben. Herhaal parameter voor meerdere. "
|
||||
"Gelijkwaardig aan keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911 .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"Etiket ID, herhaal voor meerdere. Geeft recepten met elk geselecteerd etiket "
|
||||
"weer"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912 .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Etiket ID, herhaal voor meerdere. Geeft recepten met alle geselecteerde "
|
||||
"etiketten weer."
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913 .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"Etiket ID, herhaal voor meerdere. Sluit recepten met één van de etiketten "
|
||||
"uit."
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914 .\cookbook\views\api.py:915
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Etiket ID, herhaal voor meerdere. Sluit recepten met alle etiketten uit."
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915 .\cookbook\views\api.py:916
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID van ingrediënt dat een recept moet hebben. Herhaal parameter voor "
|
||||
"meerdere."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916 .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"Ingrediënt ID, herhaal voor meerdere. Geeft recepten met elk ingrediënt weer"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917 .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Ingrediënt ID, herhaal voor meerdere. Geef recepten met alle ingrediënten "
|
||||
"weer."
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918 .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"Ingrediënt ID, herhaal voor meerdere. sluit recepten met één van de "
|
||||
"ingrediënten uit."
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919 .\cookbook\views\api.py:920
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Ingrediënt ID, herhaal voor meerdere. Sluit recepten met alle ingrediënten "
|
||||
"uit."
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920 .\cookbook\views\api.py:921
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "ID van eenheid dat een recept moet hebben."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921 .\cookbook\views\api.py:922
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr "Een waardering van een recept gaat van 0 tot 5."
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922 .\cookbook\views\api.py:923
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID van boek dat een recept moet hebben. Herhaal parameter voor meerdere."
|
||||
"ID van een kookboek dat een recept moet bevatten. Herhaal parameter voor "
|
||||
"meerdere."
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923 .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr "Boek ID, herhaal voor meerdere. Geeft recepten uit alle boeken weer"
|
||||
msgstr ""
|
||||
"Kookboek ID, herhaal voor meerdere. Geeft recepten uit de geselecteerde "
|
||||
"kookboeken weer"
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924 .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr "Boek IDs, herhaal voor meerdere. Geeft recepten weer uit alle boeken."
|
||||
msgstr ""
|
||||
"Kookboek IDs, herhaal voor meerdere. Geeft recepten weer uit alle kookboeken."
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925 .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
"Boek IDs, herhaal voor meerdere. Sluit recepten uit elk van de boeken uit."
|
||||
"Kookboek IDs, herhaal voor meerdere. Sluit recepten uit elk van de "
|
||||
"geselecteerde kookboeken uit."
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926 .\cookbook\views\api.py:927
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr "Boek IDs, herhaal voor meerdere. Sluit recepten uit alle boeken uit."
|
||||
msgstr ""
|
||||
"Kookboek IDs, herhaal voor meerdere. Sluit recepten uit alle boeken uit."
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927 .\cookbook\views\api.py:928
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Wanneer alleen interne recepten gevonden moeten worden. [waar/<b>onwaar</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928 .\cookbook\views\api.py:929
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Geeft de resultaten in willekeurige volgorde weer. [waar/<b>onwaar</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929 .\cookbook\views\api.py:930
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr "Geeft nieuwe resultaten eerst weer. [waar/<b>onwaar</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930 .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
@@ -2437,7 +2444,7 @@ msgstr ""
|
||||
"Filter recepten X maal of meer bereid. Negatieve waarden geven minder dan X "
|
||||
"keer bereide recepten weer"
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931 .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2445,7 +2452,7 @@ msgstr ""
|
||||
"Filter recepten op laatst bereid op of na JJJJ-MM-DD. Voorafgaand - filters "
|
||||
"op of voor datum."
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932 .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2453,7 +2460,7 @@ msgstr ""
|
||||
"Filter recepten aangemaakt op of na JJJJ-MM-DD. Voorafgaand - filters op of "
|
||||
"voor datum."
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933 .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2461,7 +2468,7 @@ msgstr ""
|
||||
"Filter recepten op geüpdatet op of na JJJJ-MM-DD. Voorafgaand - filters op "
|
||||
"of voor datum."
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934 .\cookbook\views\api.py:935
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2469,13 +2476,13 @@ msgstr ""
|
||||
"Filter recepten op laatst bekeken op of na JJJJ-MM-DD. Voorafgaand - filters "
|
||||
"op of voor datum."
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935 .\cookbook\views\api.py:936
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Filter recepten die bereid kunnen worden met ingrediënten die op voorraad "
|
||||
"zijn. [waar/<b>onwaar</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122 .\cookbook\views\api.py:1123
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
@@ -2484,78 +2491,71 @@ msgstr ""
|
||||
"Meerdere waarden toegestaan."
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
#| "b>]<br> - recent includes unchecked items and recently completed items."
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
"Filter boodschappenlijstjes op aangevinkt. [waar,onwaar,beide,<b>recent</"
|
||||
"Filter boodschappenlijstjes op aangevinkt. [waar, onwaar, beide,<b>recent</"
|
||||
"b>]<br> - recent bevat niet aangevinkte en recent voltooide items."
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128 .\cookbook\views\api.py:1129
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
"Geeft items op boodschappenlijstjes gesorteerd per supermarktcategorie weer."
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
msgstr "Filter op vermeldingen met het gegeven recept"
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Returns the shopping list entry with a primary key of id. Multiple "
|
||||
#| "values allowed."
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
"Geeft het boodschappenlijstje item met een primaire sleutel van id. "
|
||||
"Vraag de automatiseringen die overeenkomen met het automatiseringstype op. "
|
||||
"Meerdere waarden toegestaan."
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415 .\cookbook\views\api.py:1416
|
||||
msgid "Nothing to do."
|
||||
msgstr "Niks te doen."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445 .\cookbook\views\api.py:1443
|
||||
msgid "Invalid Url"
|
||||
msgstr "Ongeldige URL"
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449 .\cookbook\views\api.py:1447
|
||||
msgid "Connection Refused."
|
||||
msgstr "Verbinding geweigerd."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451 .\cookbook\views\api.py:1449
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "Verkeerd URL schema."
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474 .\cookbook\views\api.py:1472
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Er is geen bruikbare data gevonden."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
msgstr "Bestand is boven de ruimte limiet"
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1564
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Importeren is voor deze provider niet geïmplementeerd"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
#: .\cookbook\views\new.py:82 .\cookbook\views\api.py:1648
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Deze optie is nog niet beschikbaar in de gehoste versie van Tandoor!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671 .\cookbook\views\api.py:1669
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synchronisatie succesvol!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674 .\cookbook\views\api.py:1672
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Er is een fout opgetreden bij het synchroniseren met Opslag"
|
||||
|
||||
@@ -2583,10 +2583,8 @@ msgstr ""
|
||||
"tenminste een Bewaker."
|
||||
|
||||
#: .\cookbook\views\delete.py:135
|
||||
#, fuzzy
|
||||
#| msgid "Storage Backend"
|
||||
msgid "Connectors Config Backend"
|
||||
msgstr "Opslag backend"
|
||||
msgstr "Connectors Configuratie backend"
|
||||
|
||||
#: .\cookbook\views\delete.py:157
|
||||
msgid "Invite Link"
|
||||
@@ -2609,14 +2607,12 @@ msgid "There was an error updating this storage backend!"
|
||||
msgstr "Er is een fout opgetreden bij het updaten van deze opslag backend!"
|
||||
|
||||
#: .\cookbook\views\edit.py:134
|
||||
#, fuzzy
|
||||
#| msgid "Changes saved!"
|
||||
msgid "Config saved!"
|
||||
msgstr "Wijzigingen opgeslagen!"
|
||||
msgstr "Configuratie opgeslagen!"
|
||||
|
||||
#: .\cookbook\views\edit.py:142
|
||||
msgid "ConnectorConfig"
|
||||
msgstr ""
|
||||
msgstr "ConnectorConfiguratie"
|
||||
|
||||
#: .\cookbook\views\edit.py:198
|
||||
msgid "Changes saved!"
|
||||
@@ -2647,10 +2643,8 @@ msgid "Shopping List"
|
||||
msgstr "Boodschappenlijst"
|
||||
|
||||
#: .\cookbook\views\lists.py:77 .\cookbook\views\new.py:98
|
||||
#, fuzzy
|
||||
#| msgid "Storage Backend"
|
||||
msgid "Connector Config Backend"
|
||||
msgstr "Opslag backend"
|
||||
msgstr "Connector Configuratie Backend"
|
||||
|
||||
#: .\cookbook\views\lists.py:91
|
||||
msgid "Invite Links"
|
||||
@@ -2674,13 +2668,11 @@ msgstr "Stappen"
|
||||
|
||||
#: .\cookbook\views\lists.py:270
|
||||
msgid "Property Types"
|
||||
msgstr ""
|
||||
msgstr "Eigenschap Types"
|
||||
|
||||
#: .\cookbook\views\new.py:86
|
||||
#, fuzzy
|
||||
#| msgid "This feature is not available in the demo version!"
|
||||
msgid "This feature is not enabled by the server admin!"
|
||||
msgstr "Deze optie is niet beschikbaar in de demo versie!"
|
||||
msgstr "Deze optie is niet ingeschakeld door de server administrator!"
|
||||
|
||||
#: .\cookbook\views\new.py:123
|
||||
msgid "Imported new recipe!"
|
||||
@@ -2696,11 +2688,9 @@ msgid "This feature is not available in the demo version!"
|
||||
msgstr "Deze optie is niet beschikbaar in de demo versie!"
|
||||
|
||||
#: .\cookbook\views\views.py:74
|
||||
#, fuzzy
|
||||
#| msgid "You have reached the maximum number of recipes for your space."
|
||||
msgid ""
|
||||
"You have the reached the maximum amount of spaces that can be owned by you."
|
||||
msgstr "Je hebt het maximaal aantal recepten voor jouw ruimte bereikt."
|
||||
msgstr "Je hebt het maximaal aantal Ruimtes die jij kan aanmaken bereikt."
|
||||
|
||||
#: .\cookbook\views\views.py:89
|
||||
msgid ""
|
||||
@@ -2738,49 +2728,37 @@ msgstr "'Fuzzy' zoeken is niet te gebruiken met deze zoekmethode!"
|
||||
#, python-format
|
||||
msgid "PostgreSQL %(v)s is deprecated. Upgrade to a fully supported version!"
|
||||
msgstr ""
|
||||
"PostgreSQL %(v)s is verouderd. Upgrade naar een volledig ondersteunde "
|
||||
"versie!"
|
||||
|
||||
#: .\cookbook\views\views.py:309
|
||||
#, python-format
|
||||
msgid "You are running PostgreSQL %(v1)s. PostgreSQL %(v2)s is recommended"
|
||||
msgstr ""
|
||||
msgstr "Je gebruikt PostgreSQL %(v1)s. PostgreSQL %(v2)s wordt aanbevolen"
|
||||
|
||||
#: .\cookbook\views\views.py:313
|
||||
msgid "Unable to determine PostgreSQL version."
|
||||
msgstr ""
|
||||
msgstr "Kan PostgreSQL-versie niet bepalen."
|
||||
|
||||
#: .\cookbook\views\views.py:317
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "\n"
|
||||
#| " This application is not running with a Postgres database "
|
||||
#| "backend. This is ok but not recommended as some\n"
|
||||
#| " features only work with postgres databases.\n"
|
||||
#| " "
|
||||
msgid ""
|
||||
"This application is not running with a Postgres database backend. This is ok "
|
||||
"but not recommended as some features only work with postgres databases."
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Deze applicatie draait niet met een Postgres database als "
|
||||
"backend. Dit is ok maar wordt niet aanbevolen omdat sommige functies \n"
|
||||
" alleen werken met Postgres databases.\n"
|
||||
" "
|
||||
"Deze applicatie draait niet met een Postgres database als backend. Dit is ok "
|
||||
"maar wordt niet aanbevolen omdat sommige functies alleen werken met Postgres "
|
||||
"databases."
|
||||
|
||||
#: .\cookbook\views\views.py:360
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The setup page can only be used to create the first user! If you have "
|
||||
#| "forgotten your superuser credentials please consult the django "
|
||||
#| "documentation on how to reset passwords."
|
||||
msgid ""
|
||||
"The setup page can only be used to create the first "
|
||||
"user! If you have forgotten your superuser credentials "
|
||||
"please consult the django documentation on how to reset passwords."
|
||||
msgstr ""
|
||||
"De setup pagina kan alleen gebruikt worden om de eerste gebruiker aan te "
|
||||
"maken! Indien je de superuser inloggegevens bent vergeten zal je de django "
|
||||
"documentatie raad moeten plegen voor een methode om je wachtwoord te "
|
||||
"resetten."
|
||||
"maken! Indien je de superuser inloggegevens bent "
|
||||
"vergeten zal je de django documentatie moeten raadplegen voor een methode om "
|
||||
"je wachtwoord te resetten."
|
||||
|
||||
#: .\cookbook\views\views.py:369
|
||||
msgid "Passwords dont match!"
|
||||
@@ -2820,7 +2798,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\views\views.py:451
|
||||
msgid "Manage recipes, shopping list, meal plans and more."
|
||||
msgstr ""
|
||||
msgstr "Beheer recepten, boodschappen lijstjes, maaltijdplannen en meer."
|
||||
|
||||
#: .\cookbook\views\views.py:458
|
||||
msgid "Plan"
|
||||
@@ -2828,17 +2806,15 @@ msgstr "Plan"
|
||||
|
||||
#: .\cookbook\views\views.py:458
|
||||
msgid "View your meal Plan"
|
||||
msgstr ""
|
||||
msgstr "Bekijk jouw maaltijdplan"
|
||||
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "View your cookbooks"
|
||||
msgstr ""
|
||||
msgstr "Bekijk jouw kookboeken"
|
||||
|
||||
#: .\cookbook\views\views.py:460
|
||||
#, fuzzy
|
||||
#| msgid "New Shopping List"
|
||||
msgid "View your shopping lists"
|
||||
msgstr "Nieuwe boodschappenlijst"
|
||||
msgstr "Bekijk jouw boodschappenlijst"
|
||||
|
||||
#~ msgid "Default unit"
|
||||
#~ msgstr "Standaard eenheid"
|
||||
@@ -2946,8 +2922,8 @@ msgstr "Nieuwe boodschappenlijst"
|
||||
#~ "You can use markdown to format this field. See the <a href=\"/docs/"
|
||||
#~ "markdown/\">docs here</a>"
|
||||
#~ msgstr ""
|
||||
#~ "Je kunt markdown gebruiken om dit veld te op te maken. Bekijk de <a href="
|
||||
#~ "\"/docs/markdown/\">documentatie hier</a>"
|
||||
#~ "Je kunt markdown gebruiken om dit veld te op te maken. Bekijk de <a "
|
||||
#~ "href=\"/docs/markdown/\">documentatie hier</a>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Users will see all items you add to your shopping list. They must add "
|
||||
|
||||
@@ -10,19 +10,19 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2024-03-19 23:47+0000\n"
|
||||
"Last-Translator: Tomasz Klimczak <klemensble@gmail.com>\n"
|
||||
"Language-Team: Polish <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
"backend/pl/>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2025-01-26 05:58+0000\n"
|
||||
"Last-Translator: Dominik Ruczajewski <slick.moose.dev@gmail.com>\n"
|
||||
"Language-Team: Polish <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/pl/>\n"
|
||||
"Language: pl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
|
||||
"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
|
||||
"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||
"X-Generator: Weblate 5.4.2\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && ("
|
||||
"n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && "
|
||||
"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||
"X-Generator: Weblate 5.8.4\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -65,6 +65,8 @@ msgid ""
|
||||
"To prevent duplicates recipes with the same name as existing ones are "
|
||||
"ignored. Check this box to import everything."
|
||||
msgstr ""
|
||||
"Aby zapobiec duplikatom, przepisy o tej samej nazwie co istniejące zostaną "
|
||||
"pominięte. Zaznacz to pole, aby zaimportować wszystko."
|
||||
|
||||
#: .\cookbook\forms.py:143
|
||||
msgid "Add your comment: "
|
||||
@@ -91,14 +93,16 @@ msgid ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Long Lived Access Token</a> for your HomeAssistant instance"
|
||||
msgstr ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Long Lived Access Token</a> dla Twojej instancji Home Assistant"
|
||||
|
||||
#: .\cookbook\forms.py:193
|
||||
msgid "Something like http://homeassistant.local:8123/api"
|
||||
msgstr ""
|
||||
msgstr "Coś w stylu http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:205
|
||||
msgid "http://homeassistant.local:8123/api for example"
|
||||
msgstr ""
|
||||
msgstr "na przykład http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
|
||||
msgid "Storage"
|
||||
@@ -106,11 +110,11 @@ msgstr "Magazyn"
|
||||
|
||||
#: .\cookbook\forms.py:222
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
msgstr "Aktywuj"
|
||||
|
||||
#: .\cookbook\forms.py:226
|
||||
msgid "Search String"
|
||||
msgstr "Wyszukaj ciąg"
|
||||
msgstr "Wyszukaj tekst"
|
||||
|
||||
#: .\cookbook\forms.py:246
|
||||
msgid "File ID"
|
||||
@@ -118,101 +122,117 @@ msgstr "Numer identyfikacyjny pliku"
|
||||
|
||||
#: .\cookbook\forms.py:262
|
||||
msgid "Maximum number of users for this space reached."
|
||||
msgstr ""
|
||||
msgstr "Osiągnięto maksymalną liczbę użytkowników dla tej przestrzeni."
|
||||
|
||||
#: .\cookbook\forms.py:268
|
||||
msgid "Email address already taken!"
|
||||
msgstr ""
|
||||
msgstr "Wybrany adres email jest już zajęty!"
|
||||
|
||||
#: .\cookbook\forms.py:275
|
||||
msgid ""
|
||||
"An email address is not required but if present the invite link will be sent "
|
||||
"to the user."
|
||||
msgstr ""
|
||||
"Adres email nie jest wymagany, jednak gdy zostanie podany link z "
|
||||
"zaproszeniem zostanie wysłany do użytkownika."
|
||||
|
||||
#: .\cookbook\forms.py:287
|
||||
msgid "Name already taken."
|
||||
msgstr ""
|
||||
msgstr "Podana nazwa jest już zajęta."
|
||||
|
||||
#: .\cookbook\forms.py:298
|
||||
msgid "Accept Terms and Privacy"
|
||||
msgstr ""
|
||||
msgstr "Zaakceptuj Regulamin oraz Politykę Prywatności"
|
||||
|
||||
#: .\cookbook\forms.py:332
|
||||
msgid ""
|
||||
"Determines how fuzzy a search is if it uses trigram similarity matching (e."
|
||||
"g. low values mean more typos are ignored)."
|
||||
msgstr ""
|
||||
"Określa, jak niedokładne może być wyszukiwanie, jeśli wykorzystuje "
|
||||
"dopasowanie podobieństwa trigramowego (np. niskie wartości oznaczają, że "
|
||||
"więcej literówek jest ignorowanych)."
|
||||
|
||||
#: .\cookbook\forms.py:340
|
||||
msgid ""
|
||||
"Select type method of search. Click <a href=\"/docs/search/\">here</a> for "
|
||||
"full description of choices."
|
||||
msgstr ""
|
||||
"Wybierz metodę wyszukiwania. Kliknij <a href=\"/docs/search/\">tutaj</a>, "
|
||||
"aby zapoznać się z pełnym opisem dostępnych opcji."
|
||||
|
||||
#: .\cookbook\forms.py:341
|
||||
msgid ""
|
||||
"Use fuzzy matching on units, keywords and ingredients when editing and "
|
||||
"importing recipes."
|
||||
msgstr ""
|
||||
"Użyj niedokładnego dopasowywania dla jednostek, słów kluczowych i składników "
|
||||
"podczas edytowania i importowania przepisów."
|
||||
|
||||
#: .\cookbook\forms.py:342
|
||||
msgid ""
|
||||
"Fields to search ignoring accents. Selecting this option can improve or "
|
||||
"degrade search quality depending on language"
|
||||
msgstr ""
|
||||
"Pola do przeszukiwania z pominięciem akcentów. Wybranie tej opcji może "
|
||||
"poprawić lub pogorszyć jakość wyszukiwania w zależności od języka"
|
||||
|
||||
#: .\cookbook\forms.py:343
|
||||
msgid ""
|
||||
"Fields to search for partial matches. (e.g. searching for 'Pie' will return "
|
||||
"'pie' and 'piece' and 'soapie')"
|
||||
msgstr ""
|
||||
"Pola do przeszukiwania częściowych dopasowań (np. wyszukiwanie 'Ciasto' "
|
||||
"zwróci 'ciasto', 'ciasteczko' i 'ciastolina')"
|
||||
|
||||
#: .\cookbook\forms.py:344
|
||||
msgid ""
|
||||
"Fields to search for beginning of word matches. (e.g. searching for 'sa' "
|
||||
"will return 'salad' and 'sandwich')"
|
||||
msgstr ""
|
||||
"Pola do przeszukiwania dopasowań na początku wyrazu (np. wyszukiwanie 'sa' "
|
||||
"zwróci 'sałatka' i 'sandwich')"
|
||||
|
||||
#: .\cookbook\forms.py:345
|
||||
msgid ""
|
||||
"Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) "
|
||||
"Note: this option will conflict with 'web' and 'raw' methods of search."
|
||||
msgstr ""
|
||||
"Pola do wyszukiwania z użyciem 'niedokładnego' dopasowywania (np. "
|
||||
"wyszukiwanie 'przepisz' znajdzie 'przepis'). Uwaga: ta opcja będzie "
|
||||
"kolidować z metodami wyszukiwania 'web' i 'raw'."
|
||||
|
||||
#: .\cookbook\forms.py:346
|
||||
msgid ""
|
||||
"Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods "
|
||||
"only function with fulltext fields."
|
||||
msgstr ""
|
||||
"Pola do wyszukiwania pełno tekstowego. Uwaga: metody wyszukiwania 'web', "
|
||||
"'phrase' i 'raw' działają wyłącznie z polami pełno tekstowymi."
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
#, fuzzy
|
||||
#| msgid "Search"
|
||||
msgid "Search Method"
|
||||
msgstr "Szukaj"
|
||||
msgstr "Metoda wyszukiwania"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Fuzzy Lookups"
|
||||
msgstr ""
|
||||
msgstr "Niedokładne dopasowanie"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Ignore Accent"
|
||||
msgstr ""
|
||||
msgstr "Ignoruj akcenty"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Partial Match"
|
||||
msgstr ""
|
||||
msgstr "Częściowe dopasowanie"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Starts With"
|
||||
msgstr ""
|
||||
msgstr "Zaczyna się od"
|
||||
|
||||
#: .\cookbook\forms.py:351
|
||||
#, fuzzy
|
||||
#| msgid "Search"
|
||||
msgid "Fuzzy Search"
|
||||
msgstr "Szukaj"
|
||||
msgstr "Niedokładne wyszukiwanie"
|
||||
|
||||
#: .\cookbook\forms.py:351
|
||||
#, fuzzy
|
||||
@@ -225,6 +245,8 @@ msgid ""
|
||||
"In order to prevent spam, the requested email was not send. Please wait a "
|
||||
"few minutes and try again."
|
||||
msgstr ""
|
||||
"Aby zapobiec spamowi, żądany e-mail nie został wysłany. Proszę poczekać "
|
||||
"kilka minut i spróbować ponownie."
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:164
|
||||
#: .\cookbook\helper\permission_helper.py:187 .\cookbook\views\views.py:117
|
||||
@@ -255,57 +277,57 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:402
|
||||
msgid "You have reached the maximum number of recipes for your space."
|
||||
msgstr ""
|
||||
msgstr "Osiągnąłeś maksymalną liczbę przepisów dla swojej przestrzeni."
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:414
|
||||
msgid "You have more users than allowed in your space."
|
||||
msgstr ""
|
||||
msgstr "Masz więcej użytkowników, niż jest dozwolone w Twojej przestrzeni."
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:310
|
||||
msgid "reverse rotation"
|
||||
msgstr ""
|
||||
msgstr "rotacja wsteczna"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:311
|
||||
msgid "careful rotation"
|
||||
msgstr ""
|
||||
msgstr "delikatna rotacja"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:312
|
||||
msgid "knead"
|
||||
msgstr ""
|
||||
msgstr "zagnieść"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:313
|
||||
msgid "thicken"
|
||||
msgstr ""
|
||||
msgstr "zagęścić"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:314
|
||||
msgid "warm up"
|
||||
msgstr ""
|
||||
msgstr "podgrzać"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:315
|
||||
msgid "ferment"
|
||||
msgstr ""
|
||||
msgstr "doprowadzić do wrzenia"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:316
|
||||
msgid "sous-vide"
|
||||
msgstr ""
|
||||
msgstr "gotować w próżni"
|
||||
|
||||
#: .\cookbook\helper\shopping_helper.py:150
|
||||
msgid "You must supply a servings size"
|
||||
msgstr ""
|
||||
msgstr "Musisz podać wielkość porcji"
|
||||
|
||||
#: .\cookbook\helper\template_helper.py:95
|
||||
#: .\cookbook\helper\template_helper.py:97
|
||||
msgid "Could not parse template code."
|
||||
msgstr ""
|
||||
msgstr "Nie można przeanalizować kodu szablonu."
|
||||
|
||||
#: .\cookbook\integration\copymethat.py:44
|
||||
#: .\cookbook\integration\melarecipes.py:37
|
||||
msgid "Favorite"
|
||||
msgstr ""
|
||||
msgstr "Ulubione"
|
||||
|
||||
#: .\cookbook\integration\copymethat.py:50
|
||||
msgid "I made this"
|
||||
msgstr ""
|
||||
msgstr "Stworzyłem to"
|
||||
|
||||
#: .\cookbook\integration\integration.py:209
|
||||
msgid ""
|
||||
@@ -320,10 +342,12 @@ msgid ""
|
||||
"An unexpected error occurred during the import. Please make sure you have "
|
||||
"uploaded a valid file."
|
||||
msgstr ""
|
||||
"Wystąpił nieoczekiwany błąd podczas importu. Upewnij się, że przesłałeś "
|
||||
"prawidłowy plik."
|
||||
|
||||
#: .\cookbook\integration\integration.py:217
|
||||
msgid "The following recipes were ignored because they already existed:"
|
||||
msgstr ""
|
||||
msgstr "Następujące przepisy zostały pominięte, ponieważ już istnieją:"
|
||||
|
||||
#: .\cookbook\integration\integration.py:221
|
||||
#, python-format
|
||||
@@ -341,14 +365,12 @@ msgid "Notes"
|
||||
msgstr "Notatka"
|
||||
|
||||
#: .\cookbook\integration\paprika.py:52
|
||||
#, fuzzy
|
||||
#| msgid "Information"
|
||||
msgid "Nutritional Information"
|
||||
msgstr "Informacja"
|
||||
msgstr "Informacje o wartości odżywczej"
|
||||
|
||||
#: .\cookbook\integration\paprika.py:56
|
||||
msgid "Source"
|
||||
msgstr ""
|
||||
msgstr "Źródło"
|
||||
|
||||
#: .\cookbook\integration\recettetek.py:54
|
||||
#: .\cookbook\integration\recipekeeper.py:70
|
||||
@@ -377,23 +399,25 @@ msgstr "Sekcja"
|
||||
|
||||
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
|
||||
msgid "Fixes foods with "
|
||||
msgstr ""
|
||||
msgstr "Poprawia potrawy z "
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:14
|
||||
msgid "Rebuilds full text search index on Recipe"
|
||||
msgstr ""
|
||||
msgstr "Odbudowuje indeks wyszukiwania pełno tekstowego dla przepisu"
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:18
|
||||
msgid "Only Postgresql databases use full text search, no index to rebuild"
|
||||
msgstr ""
|
||||
"Pełno tekstowe wyszukiwanie jest używane tylko w bazach danych PostgreSQL, "
|
||||
"brak indeksu do odbudowy"
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:29
|
||||
msgid "Recipe index rebuild complete."
|
||||
msgstr ""
|
||||
msgstr "Odbudowa indeksu przepisu zakończona."
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:31
|
||||
msgid "Recipe index rebuild failed."
|
||||
msgstr ""
|
||||
msgstr "Odbudowa indeksu przepisu nie powiodła się."
|
||||
|
||||
#: .\cookbook\migrations\0047_auto_20200602_1133.py:14
|
||||
msgid "Breakfast"
|
||||
@@ -412,8 +436,6 @@ msgid "Other"
|
||||
msgstr "Inne"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
#, fuzzy
|
||||
#| msgid "Fats"
|
||||
msgid "Fat"
|
||||
msgstr "Tłuszcze"
|
||||
|
||||
@@ -421,7 +443,7 @@ msgstr "Tłuszcze"
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
|
||||
msgid "g"
|
||||
msgstr ""
|
||||
msgstr "g"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
msgid "Carbohydrates"
|
||||
@@ -437,13 +459,15 @@ msgstr "Kalorie"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:20
|
||||
msgid "kcal"
|
||||
msgstr ""
|
||||
msgstr "kcal"
|
||||
|
||||
#: .\cookbook\models.py:325
|
||||
msgid ""
|
||||
"Maximum file storage for space in MB. 0 for unlimited, -1 to disable file "
|
||||
"upload."
|
||||
msgstr ""
|
||||
"Maksymalna pojemność na pliki dla przestrzeni w MB. 0 oznacza brak limitu, -"
|
||||
"1 wyłącza możliwość przesyłania plików."
|
||||
|
||||
#: .\cookbook\models.py:454 .\cookbook\templates\search.html:7
|
||||
#: .\cookbook\templates\settings.html:18
|
||||
@@ -2108,290 +2132,290 @@ msgstr "Wyświetl pomoc"
|
||||
msgid "URL Import"
|
||||
msgstr "Importuj z URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
#, fuzzy
|
||||
#| msgid "Parameter filter_list incorrectly formatted"
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Nieprawidłowo sformatowany parametr filter_list"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Nie można scalić tego samego obiektu!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
#, fuzzy
|
||||
#| msgid "Cannot merge with the same object!"
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Nie można scalić tego samego obiektu!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Nie znaleziono żadnych przydatnych danych."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr "Plik przekracza limit miejsca"
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Importowanie dla tego usługodawcy nie zostało zaimplementowane"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Ta funkcja nie jest jeszcze dostępna w hostowanej wersji tandoor!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synchronizacja powiodła się!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Błąd synchronizacji z magazynem"
|
||||
|
||||
|
||||
@@ -11,9 +11,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2023-10-07 18:02+0000\n"
|
||||
"Last-Translator: Guilherme Roda <glealroda@gmail.com>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2025-02-21 10:58+0000\n"
|
||||
"Last-Translator: Filipe Neves <homemdasneves@gmail.com>\n"
|
||||
"Language-Team: Portuguese <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/pt/>\n"
|
||||
"Language: pt\n"
|
||||
@@ -21,7 +21,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"X-Generator: Weblate 5.8.4\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -94,14 +94,16 @@ msgid ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Long Lived Access Token</a> for your HomeAssistant instance"
|
||||
msgstr ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Token de longa duração</a>para a sua instância HomeAssistant"
|
||||
|
||||
#: .\cookbook\forms.py:193
|
||||
msgid "Something like http://homeassistant.local:8123/api"
|
||||
msgstr ""
|
||||
msgstr "Algo como http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:205
|
||||
msgid "http://homeassistant.local:8123/api for example"
|
||||
msgstr ""
|
||||
msgstr "http://homeassistant.local:8123/api por exemplo"
|
||||
|
||||
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
|
||||
msgid "Storage"
|
||||
@@ -181,18 +183,25 @@ msgid ""
|
||||
"Fields to search for partial matches. (e.g. searching for 'Pie' will return "
|
||||
"'pie' and 'piece' and 'soapie')"
|
||||
msgstr ""
|
||||
"Campos a pesquisar por correspondência. (Ex: pesquisar por 'mor' retorna "
|
||||
"'morango' e 'amora')"
|
||||
|
||||
#: .\cookbook\forms.py:344
|
||||
msgid ""
|
||||
"Fields to search for beginning of word matches. (e.g. searching for 'sa' "
|
||||
"will return 'salad' and 'sandwich')"
|
||||
msgstr ""
|
||||
"Campos a pesquisar para correspondências no início da palavra. (por exemplo, "
|
||||
"pesquisar por \"sa\" retornará \"salada\" e \"sanduíche\")"
|
||||
|
||||
#: .\cookbook\forms.py:345
|
||||
msgid ""
|
||||
"Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) "
|
||||
"Note: this option will conflict with 'web' and 'raw' methods of search."
|
||||
msgstr ""
|
||||
"Campos para pesquisa aproximada. (por exemplo, pesquisar por \"recita\" "
|
||||
"encontrará \"receita\"). Nota: esta opção entra em conflito com os métodos "
|
||||
"de pesquisa \"web\" e \"raw\"."
|
||||
|
||||
#: .\cookbook\forms.py:346
|
||||
msgid ""
|
||||
@@ -206,19 +215,19 @@ msgstr "Método de Pesquisa"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Fuzzy Lookups"
|
||||
msgstr ""
|
||||
msgstr "Pesquisas Aproximadas"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Ignore Accent"
|
||||
msgstr ""
|
||||
msgstr "Ignorar pronúncia"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Partial Match"
|
||||
msgstr ""
|
||||
msgstr "Correspondência parcial"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Starts With"
|
||||
msgstr ""
|
||||
msgstr "Começa com"
|
||||
|
||||
#: .\cookbook\forms.py:351
|
||||
msgid "Fuzzy Search"
|
||||
@@ -233,6 +242,8 @@ msgid ""
|
||||
"In order to prevent spam, the requested email was not send. Please wait a "
|
||||
"few minutes and try again."
|
||||
msgstr ""
|
||||
"Para evitar spam, o email solicitado não foi enviado. Por favor, aguarde "
|
||||
"alguns minutos e tente novamente."
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:164
|
||||
#: .\cookbook\helper\permission_helper.py:187 .\cookbook\views\views.py:117
|
||||
@@ -257,11 +268,11 @@ msgstr "Sem permissões para aceder a esta página!"
|
||||
#: .\cookbook\helper\permission_helper.py:237
|
||||
#: .\cookbook\helper\permission_helper.py:252
|
||||
msgid "You cannot interact with this object as it is not owned by you!"
|
||||
msgstr ""
|
||||
msgstr "Não pode interagir com este objeto, pois não é seu!"
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:402
|
||||
msgid "You have reached the maximum number of recipes for your space."
|
||||
msgstr ""
|
||||
msgstr "Atingiu o número máximo de receitas para o seu espaço."
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:414
|
||||
msgid "You have more users than allowed in your space."
|
||||
@@ -1989,286 +2000,286 @@ msgstr "Mostrar Log"
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -1934,286 +1934,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,18 +7,18 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2023-05-01 07:55+0000\n"
|
||||
"Last-Translator: axeron2036 <admin@axeron2036.ru>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2025-07-28 17:58+0000\n"
|
||||
"Last-Translator: Aleksey <streltsov3@gmail.com>\n"
|
||||
"Language-Team: Russian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/ru/>\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.8.4\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -90,22 +90,24 @@ msgid ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Long Lived Access Token</a> for your HomeAssistant instance"
|
||||
msgstr ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Длительный токен доступа</a> для вашей установки HomeAssistant"
|
||||
|
||||
#: .\cookbook\forms.py:193
|
||||
msgid "Something like http://homeassistant.local:8123/api"
|
||||
msgstr ""
|
||||
msgstr "Что-то вроде http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:205
|
||||
msgid "http://homeassistant.local:8123/api for example"
|
||||
msgstr ""
|
||||
msgstr "Например, http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
|
||||
msgid "Storage"
|
||||
msgstr ""
|
||||
msgstr "Хранилище"
|
||||
|
||||
#: .\cookbook\forms.py:222
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
msgstr "Активный"
|
||||
|
||||
#: .\cookbook\forms.py:226
|
||||
msgid "Search String"
|
||||
@@ -125,16 +127,12 @@ msgid "Email address already taken!"
|
||||
msgstr "Этот email уже используется!"
|
||||
|
||||
#: .\cookbook\forms.py:275
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "An email address is not required but if present the invite link will be "
|
||||
#| "send to the user."
|
||||
msgid ""
|
||||
"An email address is not required but if present the invite link will be sent "
|
||||
"to the user."
|
||||
msgstr ""
|
||||
"email не требуется, но если он присутствует, пользователю будет отправлена "
|
||||
"ссылка для приглашения."
|
||||
"Адрес электронной почты не обязателен, но если он указан, ссылка-приглашение "
|
||||
"будет отправлена пользователю."
|
||||
|
||||
#: .\cookbook\forms.py:287
|
||||
msgid "Name already taken."
|
||||
@@ -149,6 +147,9 @@ msgid ""
|
||||
"Determines how fuzzy a search is if it uses trigram similarity matching (e."
|
||||
"g. low values mean more typos are ignored)."
|
||||
msgstr ""
|
||||
"Определяет степень нечёткости поиска при использовании сопоставления по "
|
||||
"триграммам (например, низкие значения означают, что больше опечаток "
|
||||
"игнорируется)."
|
||||
|
||||
#: .\cookbook\forms.py:340
|
||||
#, fuzzy
|
||||
@@ -183,24 +184,33 @@ msgid ""
|
||||
"Fields to search for partial matches. (e.g. searching for 'Pie' will return "
|
||||
"'pie' and 'piece' and 'soapie')"
|
||||
msgstr ""
|
||||
"Поля для поиска по частичному совпадению. (например, поиск по слову «Pie» "
|
||||
"вернёт «pie», «piece» и «soapie»)"
|
||||
|
||||
#: .\cookbook\forms.py:344
|
||||
msgid ""
|
||||
"Fields to search for beginning of word matches. (e.g. searching for 'sa' "
|
||||
"will return 'salad' and 'sandwich')"
|
||||
msgstr ""
|
||||
"Поля для поиска по совпадению начала слова. (например, поиск по «sa» вернёт "
|
||||
"«salad» и «sandwich»)"
|
||||
|
||||
#: .\cookbook\forms.py:345
|
||||
msgid ""
|
||||
"Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) "
|
||||
"Note: this option will conflict with 'web' and 'raw' methods of search."
|
||||
msgstr ""
|
||||
"Поля для нечёткого поиска. (например, поиск по слову «recpie» найдёт "
|
||||
"«recipe»). Примечание: эта опция конфликтует с методами поиска «web» и "
|
||||
"«raw»."
|
||||
|
||||
#: .\cookbook\forms.py:346
|
||||
msgid ""
|
||||
"Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods "
|
||||
"only function with fulltext fields."
|
||||
msgstr ""
|
||||
"Поля для полнотекстового поиска. Примечание: методы поиска «web», «phrase» "
|
||||
"и «raw» работают только с полнотекстовыми полями."
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Search Method"
|
||||
@@ -208,38 +218,40 @@ msgstr "Способ поиска"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Fuzzy Lookups"
|
||||
msgstr ""
|
||||
msgstr "Нечёткое сопоставление"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Ignore Accent"
|
||||
msgstr ""
|
||||
msgstr "Игнорировать акценты"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Partial Match"
|
||||
msgstr ""
|
||||
msgstr "Частичное совпадение"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Starts With"
|
||||
msgstr ""
|
||||
msgstr "Начинается с"
|
||||
|
||||
#: .\cookbook\forms.py:351
|
||||
msgid "Fuzzy Search"
|
||||
msgstr ""
|
||||
msgstr "Неточный поиск"
|
||||
|
||||
#: .\cookbook\forms.py:351
|
||||
msgid "Full Text"
|
||||
msgstr ""
|
||||
msgstr "Полный текст"
|
||||
|
||||
#: .\cookbook\helper\AllAuthCustomAdapter.py:41
|
||||
msgid ""
|
||||
"In order to prevent spam, the requested email was not send. Please wait a "
|
||||
"few minutes and try again."
|
||||
msgstr ""
|
||||
"Во избежание спама запрошенное электронное письмо не было отправлено. "
|
||||
"Подождите несколько минут и попробуйте снова."
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:164
|
||||
#: .\cookbook\helper\permission_helper.py:187 .\cookbook\views\views.py:117
|
||||
msgid "You are not logged in and therefore cannot view this page!"
|
||||
msgstr ""
|
||||
msgstr "Вы не вошли в систему и поэтому не можете просматривать эту страницу!"
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:168
|
||||
#: .\cookbook\helper\permission_helper.py:174
|
||||
@@ -252,7 +264,7 @@ msgstr ""
|
||||
#: .\cookbook\helper\permission_helper.py:341 .\cookbook\views\data.py:35
|
||||
#: .\cookbook\views\views.py:127 .\cookbook\views\views.py:131
|
||||
msgid "You do not have the required permissions to view this page!"
|
||||
msgstr ""
|
||||
msgstr "У вас нет необходимых разрешений для просмотра этой страницы!"
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:192
|
||||
#: .\cookbook\helper\permission_helper.py:215
|
||||
@@ -260,102 +272,108 @@ msgstr ""
|
||||
#: .\cookbook\helper\permission_helper.py:252
|
||||
msgid "You cannot interact with this object as it is not owned by you!"
|
||||
msgstr ""
|
||||
"Вы не можете взаимодействовать с этим объектом, так как он не принадлежит "
|
||||
"вам!"
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:402
|
||||
msgid "You have reached the maximum number of recipes for your space."
|
||||
msgstr ""
|
||||
msgstr "Вы достигли максимального количества рецептов для вашего пространства."
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:414
|
||||
msgid "You have more users than allowed in your space."
|
||||
msgstr ""
|
||||
msgstr "У вас больше пользователей, чем разрешено в вашем пространстве."
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:310
|
||||
msgid "reverse rotation"
|
||||
msgstr ""
|
||||
msgstr "обратное вращение"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:311
|
||||
msgid "careful rotation"
|
||||
msgstr ""
|
||||
msgstr "осторожное вращение"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:312
|
||||
msgid "knead"
|
||||
msgstr ""
|
||||
msgstr "замесить"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:313
|
||||
msgid "thicken"
|
||||
msgstr ""
|
||||
msgstr "загустить"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:314
|
||||
msgid "warm up"
|
||||
msgstr ""
|
||||
msgstr "разогреть"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:315
|
||||
msgid "ferment"
|
||||
msgstr ""
|
||||
msgstr "ферментировать"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:316
|
||||
msgid "sous-vide"
|
||||
msgstr ""
|
||||
msgstr "су-вид"
|
||||
|
||||
#: .\cookbook\helper\shopping_helper.py:150
|
||||
msgid "You must supply a servings size"
|
||||
msgstr ""
|
||||
msgstr "Вы должны указать размер порции"
|
||||
|
||||
#: .\cookbook\helper\template_helper.py:95
|
||||
#: .\cookbook\helper\template_helper.py:97
|
||||
msgid "Could not parse template code."
|
||||
msgstr ""
|
||||
msgstr "Не удалось разобрать код шаблона."
|
||||
|
||||
#: .\cookbook\integration\copymethat.py:44
|
||||
#: .\cookbook\integration\melarecipes.py:37
|
||||
msgid "Favorite"
|
||||
msgstr ""
|
||||
msgstr "Избранное"
|
||||
|
||||
#: .\cookbook\integration\copymethat.py:50
|
||||
msgid "I made this"
|
||||
msgstr ""
|
||||
msgstr "Я это сделал"
|
||||
|
||||
#: .\cookbook\integration\integration.py:209
|
||||
msgid ""
|
||||
"Importer expected a .zip file. Did you choose the correct importer type for "
|
||||
"your data ?"
|
||||
msgstr ""
|
||||
"Импортер требует файл .zip. Вы выбрали правильный тип импортера для ваших "
|
||||
"данных?"
|
||||
|
||||
#: .\cookbook\integration\integration.py:212
|
||||
msgid ""
|
||||
"An unexpected error occurred during the import. Please make sure you have "
|
||||
"uploaded a valid file."
|
||||
msgstr ""
|
||||
"Во время импорта произошла непредвиденная ошибка. Пожалуйста, убедитесь, что "
|
||||
"вы загрузили корректный файл."
|
||||
|
||||
#: .\cookbook\integration\integration.py:217
|
||||
msgid "The following recipes were ignored because they already existed:"
|
||||
msgstr ""
|
||||
msgstr "Следующие рецепты были проигнорированы, так как уже существуют:"
|
||||
|
||||
#: .\cookbook\integration\integration.py:221
|
||||
#, python-format
|
||||
msgid "Imported %s recipes."
|
||||
msgstr ""
|
||||
msgstr "Импортировано %s рецептов."
|
||||
|
||||
#: .\cookbook\integration\openeats.py:28
|
||||
msgid "Recipe source:"
|
||||
msgstr ""
|
||||
msgstr "Источник рецепта:"
|
||||
|
||||
#: .\cookbook\integration\paprika.py:49
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
msgstr "Заметки"
|
||||
|
||||
#: .\cookbook\integration\paprika.py:52
|
||||
msgid "Nutritional Information"
|
||||
msgstr ""
|
||||
msgstr "Пищевая ценность"
|
||||
|
||||
#: .\cookbook\integration\paprika.py:56
|
||||
msgid "Source"
|
||||
msgstr ""
|
||||
msgstr "Источник"
|
||||
|
||||
#: .\cookbook\integration\recettetek.py:54
|
||||
#: .\cookbook\integration\recipekeeper.py:70
|
||||
msgid "Imported from"
|
||||
msgstr ""
|
||||
msgstr "Импортировано из"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:23
|
||||
#, fuzzy
|
||||
@@ -364,65 +382,67 @@ msgstr "Порции"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:25
|
||||
msgid "Waiting time"
|
||||
msgstr ""
|
||||
msgstr "Время ожидания"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:27
|
||||
msgid "Preparation Time"
|
||||
msgstr ""
|
||||
msgstr "Время подготовки"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\index.html:7
|
||||
msgid "Cookbook"
|
||||
msgstr ""
|
||||
msgstr "Книга рецептов"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:31
|
||||
msgid "Section"
|
||||
msgstr ""
|
||||
msgstr "Раздел"
|
||||
|
||||
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
|
||||
msgid "Fixes foods with "
|
||||
msgstr ""
|
||||
msgstr "Исправляет продукты с "
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:14
|
||||
msgid "Rebuilds full text search index on Recipe"
|
||||
msgstr ""
|
||||
msgstr "Перестраивает полнотекстовый индекс поиска для рецептов"
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:18
|
||||
msgid "Only Postgresql databases use full text search, no index to rebuild"
|
||||
msgstr ""
|
||||
"Полнотекстовый поиск используется только в базах данных Postgresql, индекс "
|
||||
"перестраивать не нужно"
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:29
|
||||
msgid "Recipe index rebuild complete."
|
||||
msgstr ""
|
||||
msgstr "Перестройка индекса рецептов завершена."
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:31
|
||||
msgid "Recipe index rebuild failed."
|
||||
msgstr ""
|
||||
msgstr "Перестройка индекса рецептов не удалась."
|
||||
|
||||
#: .\cookbook\migrations\0047_auto_20200602_1133.py:14
|
||||
msgid "Breakfast"
|
||||
msgstr ""
|
||||
msgstr "Завтрак"
|
||||
|
||||
#: .\cookbook\migrations\0047_auto_20200602_1133.py:19
|
||||
msgid "Lunch"
|
||||
msgstr ""
|
||||
msgstr "Обед"
|
||||
|
||||
#: .\cookbook\migrations\0047_auto_20200602_1133.py:24
|
||||
msgid "Dinner"
|
||||
msgstr ""
|
||||
msgstr "Ужин"
|
||||
|
||||
#: .\cookbook\migrations\0047_auto_20200602_1133.py:29 .\cookbook\models.py:919
|
||||
msgid "Other"
|
||||
msgstr ""
|
||||
msgstr "Другое"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
msgid "Fat"
|
||||
msgstr ""
|
||||
msgstr "Толстый"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
|
||||
msgid "g"
|
||||
msgstr ""
|
||||
msgstr "г"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
msgid "Carbohydrates"
|
||||
@@ -454,17 +474,17 @@ msgstr ""
|
||||
#: .\cookbook\models.py:455 .\cookbook\templates\base.html:114
|
||||
#: .\cookbook\templates\meal_plan.html:7
|
||||
msgid "Meal-Plan"
|
||||
msgstr ""
|
||||
msgstr "План питания"
|
||||
|
||||
#: .\cookbook\models.py:456 .\cookbook\templates\base.html:122
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "Books"
|
||||
msgstr "Книги"
|
||||
msgstr "Книги рецептов"
|
||||
|
||||
#: .\cookbook\models.py:457 .\cookbook\templates\base.html:118
|
||||
#: .\cookbook\views\views.py:460
|
||||
msgid "Shopping"
|
||||
msgstr ""
|
||||
msgstr "Покупки"
|
||||
|
||||
#: .\cookbook\models.py:752
|
||||
msgid " is part of a recipe step and cannot be deleted"
|
||||
@@ -929,7 +949,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:110 .\cookbook\templates\index.html:87
|
||||
msgid "Recipes"
|
||||
msgstr ""
|
||||
msgstr "Рецепты"
|
||||
|
||||
#: .\cookbook\templates\base.html:161 .\cookbook\views\lists.py:120
|
||||
msgid "Foods"
|
||||
@@ -1969,286 +1989,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,9 +7,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2024-03-11 13:02+0000\n"
|
||||
"Last-Translator: Kn <kn@users.noreply.translate.tandoor.dev>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2025-02-07 08:58+0000\n"
|
||||
"Last-Translator: Mattias G <mattias.granlund@gmail.com>\n"
|
||||
"Language-Team: Swedish <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/sv/>\n"
|
||||
"Language: sv\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.4.2\n"
|
||||
"X-Generator: Weblate 5.8.4\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -151,48 +151,61 @@ msgid ""
|
||||
"Select type method of search. Click <a href=\"/docs/search/\">here</a> for "
|
||||
"full description of choices."
|
||||
msgstr ""
|
||||
"Välj typ av sökmetod. Klicka <a href=\"/docs/search/\">här</a> för "
|
||||
"fullständig beskrivning av alternativen."
|
||||
|
||||
#: .\cookbook\forms.py:341
|
||||
msgid ""
|
||||
"Use fuzzy matching on units, keywords and ingredients when editing and "
|
||||
"importing recipes."
|
||||
msgstr ""
|
||||
"Använd \"fuzzy\" matchning på enheter, nyckelord och ingredienser när du "
|
||||
"redigerar och importerar recept."
|
||||
|
||||
#: .\cookbook\forms.py:342
|
||||
msgid ""
|
||||
"Fields to search ignoring accents. Selecting this option can improve or "
|
||||
"degrade search quality depending on language"
|
||||
msgstr ""
|
||||
"Fält att söka medan man ignorerar accenter. Val av detta alternativ kan "
|
||||
"förbättra eller försämra sökkvaliteten beroende på språk"
|
||||
|
||||
#: .\cookbook\forms.py:343
|
||||
msgid ""
|
||||
"Fields to search for partial matches. (e.g. searching for 'Pie' will return "
|
||||
"'pie' and 'piece' and 'soapie')"
|
||||
msgstr ""
|
||||
"Fält att söka efter delvisa matchningar. (t.ex. att söka efter 'Pie' kommer "
|
||||
"att returnera 'pie' och 'piece' och 'soapie')"
|
||||
|
||||
#: .\cookbook\forms.py:344
|
||||
msgid ""
|
||||
"Fields to search for beginning of word matches. (e.g. searching for 'sa' "
|
||||
"will return 'salad' and 'sandwich')"
|
||||
msgstr ""
|
||||
"Fält att söka för matchningar i början av ord. (t.ex. att söka efter 'sa' "
|
||||
"kommer att returnera 'salad' och 'sandwich')"
|
||||
|
||||
#: .\cookbook\forms.py:345
|
||||
msgid ""
|
||||
"Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) "
|
||||
"Note: this option will conflict with 'web' and 'raw' methods of search."
|
||||
msgstr ""
|
||||
"Fält för 'fuzzy'-sökning. (t.ex. att söka efter 'recpie' kommer att hitta "
|
||||
"'recipe'.Observera: detta alternativet kommer att komma i konflikt med "
|
||||
"sökmetoderna 'web' och 'raw'.)"
|
||||
|
||||
#: .\cookbook\forms.py:346
|
||||
msgid ""
|
||||
"Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods "
|
||||
"only function with fulltext fields."
|
||||
msgstr ""
|
||||
"Fält för fulltextsökning. Observera: Sökmetoderna 'web', 'phrase' och 'raw' "
|
||||
"fungerar endast med fulltextfält."
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
#, fuzzy
|
||||
#| msgid "Search"
|
||||
msgid "Search Method"
|
||||
msgstr "Sök"
|
||||
msgstr "Sök Metod"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Fuzzy Lookups"
|
||||
@@ -211,22 +224,20 @@ msgid "Starts With"
|
||||
msgstr "Börjar med"
|
||||
|
||||
#: .\cookbook\forms.py:351
|
||||
#, fuzzy
|
||||
#| msgid "Search"
|
||||
msgid "Fuzzy Search"
|
||||
msgstr "Sök"
|
||||
msgstr "Fuzzy Sök"
|
||||
|
||||
#: .\cookbook\forms.py:351
|
||||
#, fuzzy
|
||||
#| msgid "Text"
|
||||
msgid "Full Text"
|
||||
msgstr "Text"
|
||||
msgstr "Hel Text"
|
||||
|
||||
#: .\cookbook\helper\AllAuthCustomAdapter.py:41
|
||||
msgid ""
|
||||
"In order to prevent spam, the requested email was not send. Please wait a "
|
||||
"few minutes and try again."
|
||||
msgstr ""
|
||||
"För att förhindra spam, så skickades inte den begärda e-posten. Vänta några "
|
||||
"minuter och försök igen."
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:164
|
||||
#: .\cookbook\helper\permission_helper.py:187 .\cookbook\views\views.py:117
|
||||
@@ -255,19 +266,19 @@ msgstr "Du kan inte interagera med detta objekt för att det ägs inte av dig!"
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:402
|
||||
msgid "You have reached the maximum number of recipes for your space."
|
||||
msgstr ""
|
||||
msgstr "Du har nått det maximala antalet recept för din utrymme."
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:414
|
||||
msgid "You have more users than allowed in your space."
|
||||
msgstr ""
|
||||
msgstr "Du har mer användare än tillåtet för ditt utrymme."
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:310
|
||||
msgid "reverse rotation"
|
||||
msgstr ""
|
||||
msgstr "återvänd rotering"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:311
|
||||
msgid "careful rotation"
|
||||
msgstr ""
|
||||
msgstr "försiktig rotering"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:312
|
||||
msgid "knead"
|
||||
@@ -291,7 +302,7 @@ msgstr "sous-vide"
|
||||
|
||||
#: .\cookbook\helper\shopping_helper.py:150
|
||||
msgid "You must supply a servings size"
|
||||
msgstr ""
|
||||
msgstr "Du måste ange en portionstorlek"
|
||||
|
||||
#: .\cookbook\helper\template_helper.py:95
|
||||
#: .\cookbook\helper\template_helper.py:97
|
||||
@@ -305,7 +316,7 @@ msgstr "Favorit"
|
||||
|
||||
#: .\cookbook\integration\copymethat.py:50
|
||||
msgid "I made this"
|
||||
msgstr ""
|
||||
msgstr "Jag gjorde den här"
|
||||
|
||||
#: .\cookbook\integration\integration.py:209
|
||||
msgid ""
|
||||
@@ -319,6 +330,8 @@ msgid ""
|
||||
"An unexpected error occurred during the import. Please make sure you have "
|
||||
"uploaded a valid file."
|
||||
msgstr ""
|
||||
"Ett oväntat fel uppstod under importeringen. Se till att du har laddat upp "
|
||||
"en giltig fil."
|
||||
|
||||
#: .\cookbook\integration\integration.py:217
|
||||
msgid "The following recipes were ignored because they already existed:"
|
||||
@@ -330,10 +343,8 @@ msgid "Imported %s recipes."
|
||||
msgstr "Importerade %s recept."
|
||||
|
||||
#: .\cookbook\integration\openeats.py:28
|
||||
#, fuzzy
|
||||
#| msgid "Recipe Home"
|
||||
msgid "Recipe source:"
|
||||
msgstr "Recept Hem"
|
||||
msgstr "Recept källa:"
|
||||
|
||||
#: .\cookbook\integration\paprika.py:49
|
||||
msgid "Notes"
|
||||
@@ -374,23 +385,25 @@ msgstr "Sektion"
|
||||
|
||||
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
|
||||
msgid "Fixes foods with "
|
||||
msgstr ""
|
||||
msgstr "Korrigerar livsmedel med "
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:14
|
||||
msgid "Rebuilds full text search index on Recipe"
|
||||
msgstr ""
|
||||
msgstr "Återuppbygger fulltextsökningens index för Recept"
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:18
|
||||
msgid "Only Postgresql databases use full text search, no index to rebuild"
|
||||
msgstr ""
|
||||
"Endast Postgresql-databaser använder fulltextsökning, inget index att "
|
||||
"återuppbygga med"
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:29
|
||||
msgid "Recipe index rebuild complete."
|
||||
msgstr ""
|
||||
msgstr "Recept index återbyggning färdig."
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:31
|
||||
msgid "Recipe index rebuild failed."
|
||||
msgstr ""
|
||||
msgstr "Recept index återbyggning misslyckades."
|
||||
|
||||
#: .\cookbook\migrations\0047_auto_20200602_1133.py:14
|
||||
msgid "Breakfast"
|
||||
@@ -439,6 +452,8 @@ msgid ""
|
||||
"Maximum file storage for space in MB. 0 for unlimited, -1 to disable file "
|
||||
"upload."
|
||||
msgstr ""
|
||||
"Maximal lagringsutrymme för utrymme i MB. 0 för obegränsad, -1 för att "
|
||||
"inaktivera filuppladdning."
|
||||
|
||||
#: .\cookbook\models.py:454 .\cookbook\templates\search.html:7
|
||||
#: .\cookbook\templates\settings.html:18
|
||||
@@ -462,7 +477,7 @@ msgstr "Handla"
|
||||
|
||||
#: .\cookbook\models.py:752
|
||||
msgid " is part of a recipe step and cannot be deleted"
|
||||
msgstr ""
|
||||
msgstr " är en del av ett receptsteg och kan inte tas bort"
|
||||
|
||||
#: .\cookbook\models.py:918
|
||||
msgid "Nutrition"
|
||||
@@ -501,34 +516,24 @@ msgid "Food Alias"
|
||||
msgstr "Alternativt namn för mat"
|
||||
|
||||
#: .\cookbook\models.py:1468
|
||||
#, fuzzy
|
||||
#| msgid "Units"
|
||||
msgid "Unit Alias"
|
||||
msgstr "Enheter"
|
||||
msgstr "Enhetsalias"
|
||||
|
||||
#: .\cookbook\models.py:1469
|
||||
#, fuzzy
|
||||
#| msgid "Keywords"
|
||||
msgid "Keyword Alias"
|
||||
msgstr "Nyckelord"
|
||||
msgstr "Nyckelordsalias"
|
||||
|
||||
#: .\cookbook\models.py:1470
|
||||
#, fuzzy
|
||||
#| msgid "Description"
|
||||
msgid "Description Replace"
|
||||
msgstr "Beskrivning"
|
||||
msgstr "Beskrivning Ersätt"
|
||||
|
||||
#: .\cookbook\models.py:1471
|
||||
#, fuzzy
|
||||
#| msgid "Instructions"
|
||||
msgid "Instruction Replace"
|
||||
msgstr "Instruktioner"
|
||||
msgstr "Instruktioner Ersätt"
|
||||
|
||||
#: .\cookbook\models.py:1472
|
||||
#, fuzzy
|
||||
#| msgid "New Unit"
|
||||
msgid "Never Unit"
|
||||
msgstr "Ny enhet"
|
||||
msgstr "Aldrig Enhet"
|
||||
|
||||
#: .\cookbook\models.py:1473
|
||||
msgid "Transpose Words"
|
||||
@@ -539,14 +544,12 @@ msgid "Food Replace"
|
||||
msgstr "Ersätt mat"
|
||||
|
||||
#: .\cookbook\models.py:1475
|
||||
#, fuzzy
|
||||
#| msgid "Edit Recipe"
|
||||
msgid "Unit Replace"
|
||||
msgstr "Redigera recept"
|
||||
msgstr "Ersätt Enhet"
|
||||
|
||||
#: .\cookbook\models.py:1476
|
||||
msgid "Name Replace"
|
||||
msgstr ""
|
||||
msgstr "Ersättningsnamn"
|
||||
|
||||
#: .\cookbook\models.py:1503 .\cookbook\views\delete.py:40
|
||||
#: .\cookbook\views\edit.py:210 .\cookbook\views\new.py:39
|
||||
@@ -563,15 +566,15 @@ msgstr "Nyckelord"
|
||||
|
||||
#: .\cookbook\serializer.py:222
|
||||
msgid "File uploads are not enabled for this Space."
|
||||
msgstr ""
|
||||
msgstr "Filuppladdning är inte aktiverat för det här utrymmet."
|
||||
|
||||
#: .\cookbook\serializer.py:233
|
||||
msgid "You have reached your file upload limit."
|
||||
msgstr ""
|
||||
msgstr "Du har nått din maxgräns för uppladdningar."
|
||||
|
||||
#: .\cookbook\serializer.py:328
|
||||
msgid "Cannot modify Space owner permission."
|
||||
msgstr ""
|
||||
msgstr "Kan inte modifiera utrymmets ägar-rättigheter."
|
||||
|
||||
#: .\cookbook\serializer.py:1270
|
||||
msgid "Hello"
|
||||
@@ -579,56 +582,61 @@ msgstr "Hej"
|
||||
|
||||
#: .\cookbook\serializer.py:1270
|
||||
msgid "You have been invited by "
|
||||
msgstr ""
|
||||
msgstr "Du har bjudits in av "
|
||||
|
||||
#: .\cookbook\serializer.py:1272
|
||||
msgid " to join their Tandoor Recipes space "
|
||||
msgstr ""
|
||||
msgstr " för att ansluta till deras Tandoor recept utrymme "
|
||||
|
||||
#: .\cookbook\serializer.py:1274
|
||||
msgid "Click the following link to activate your account: "
|
||||
msgstr ""
|
||||
msgstr "Klicka på länken för att aktivera ditt konto: "
|
||||
|
||||
#: .\cookbook\serializer.py:1276
|
||||
msgid ""
|
||||
"If the link does not work use the following code to manually join the space: "
|
||||
msgstr ""
|
||||
"Om länken inte fungerar kan du testa följande kod för att manuellt aktivera "
|
||||
"ditt utrymme: "
|
||||
|
||||
#: .\cookbook\serializer.py:1278
|
||||
msgid "The invitation is valid until "
|
||||
msgstr ""
|
||||
msgstr "Inbjudningen är giltig till "
|
||||
|
||||
#: .\cookbook\serializer.py:1280
|
||||
msgid ""
|
||||
"Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub "
|
||||
msgstr ""
|
||||
"Tandoor recept är en recept-hanterar med öppen källkod. Se mer på GitHub "
|
||||
|
||||
#: .\cookbook\serializer.py:1283
|
||||
msgid "Tandoor Recipes Invite"
|
||||
msgstr ""
|
||||
msgstr "Tandoor recept inbjudan"
|
||||
|
||||
#: .\cookbook\serializer.py:1426
|
||||
msgid "Existing shopping list to update"
|
||||
msgstr ""
|
||||
msgstr "Existerande inköpslistor att uppdatera"
|
||||
|
||||
#: .\cookbook\serializer.py:1428
|
||||
msgid ""
|
||||
"List of ingredient IDs from the recipe to add, if not provided all "
|
||||
"ingredients will be added."
|
||||
msgstr ""
|
||||
"Lista med ingrediens ID:n från receptet att lägga till, om inget angetts "
|
||||
"kommer alla ingredienser bli tillagda."
|
||||
|
||||
#: .\cookbook\serializer.py:1430
|
||||
msgid ""
|
||||
"Providing a list_recipe ID and servings of 0 will delete that shopping list."
|
||||
msgstr ""
|
||||
msgstr "Anges ett list_recept ID och 0 portioner kommer den listan raderas."
|
||||
|
||||
#: .\cookbook\serializer.py:1439
|
||||
msgid "Amount of food to add to the shopping list"
|
||||
msgstr ""
|
||||
msgstr "Mängd av ingrediens att lägga till på inköpslistan"
|
||||
|
||||
#: .\cookbook\serializer.py:1441
|
||||
msgid "ID of unit to use for the shopping list"
|
||||
msgstr ""
|
||||
msgstr "ID eller enhet att använda för inköpslistan"
|
||||
|
||||
#: .\cookbook\serializer.py:1443
|
||||
msgid "When set to true will delete all food from active shopping lists."
|
||||
@@ -678,7 +686,7 @@ msgstr "Email"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:19
|
||||
msgid "The following e-mail addresses are associated with your account:"
|
||||
msgstr ""
|
||||
msgstr "Följande epost-addresser är associerade med ditt konto:"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:36
|
||||
msgid "Verified"
|
||||
@@ -693,14 +701,12 @@ msgid "Primary"
|
||||
msgstr "Primär"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:47
|
||||
#, fuzzy
|
||||
#| msgid "Make Header"
|
||||
msgid "Make Primary"
|
||||
msgstr "Skapa titel"
|
||||
msgstr "Markera som primär"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:49
|
||||
msgid "Re-send Verification"
|
||||
msgstr ""
|
||||
msgstr "Sänd verifikationen igen"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:50
|
||||
#: .\cookbook\templates\generic\delete_template.html:57
|
||||
@@ -2105,280 +2111,280 @@ msgstr "Visa hjälp"
|
||||
msgid "URL Import"
|
||||
msgstr "URL-import"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Parameter updated_at felaktigt formaterad"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Kan inte slås samman med samma objekt!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
#, fuzzy
|
||||
#| msgid "Cannot merge with the same object!"
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Kan inte slås samman med samma objekt!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "The requested page could not be found."
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Sidan kunde inte hittas."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Importering är inte implementerad för denna leverantör"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
#, fuzzy
|
||||
@@ -2386,11 +2392,11 @@ msgstr "Importering är inte implementerad för denna leverantör"
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Denna funktion är inte tillgänglig i demoversionen!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synkroniseringen lyckades!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Fel vid synkronisering med lagring"
|
||||
|
||||
|
||||
@@ -10,9 +10,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2024-07-03 16:38+0000\n"
|
||||
"Last-Translator: Taylan TATLI <uyelik-tandoor@tatli.me>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2025-01-20 05:20+0000\n"
|
||||
"Last-Translator: Yigit <yigit.gungor@outlook.com>\n"
|
||||
"Language-Team: Turkish <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/tr/>\n"
|
||||
"Language: tr\n"
|
||||
@@ -20,7 +20,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Weblate 5.4.2\n"
|
||||
"X-Generator: Weblate 5.8.4\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -199,7 +199,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Search Method"
|
||||
msgstr ""
|
||||
msgstr "Arama Metodu"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Fuzzy Lookups"
|
||||
@@ -207,15 +207,15 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Ignore Accent"
|
||||
msgstr ""
|
||||
msgstr "Harflerdeki Vurguları Görmezden Gel"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Partial Match"
|
||||
msgstr ""
|
||||
msgstr "Kısmi Eşleşme"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Starts With"
|
||||
msgstr ""
|
||||
msgstr "İle başlayan"
|
||||
|
||||
#: .\cookbook\forms.py:351
|
||||
msgid "Fuzzy Search"
|
||||
@@ -223,18 +223,20 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\forms.py:351
|
||||
msgid "Full Text"
|
||||
msgstr ""
|
||||
msgstr "Tam Metin"
|
||||
|
||||
#: .\cookbook\helper\AllAuthCustomAdapter.py:41
|
||||
msgid ""
|
||||
"In order to prevent spam, the requested email was not send. Please wait a "
|
||||
"few minutes and try again."
|
||||
msgstr ""
|
||||
"İstenmeyen e-postayı önlemek için istenen e-posta gönderilemedi. Lütfen "
|
||||
"birkaç dakika bekleyin ve tekrar deneyin."
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:164
|
||||
#: .\cookbook\helper\permission_helper.py:187 .\cookbook\views\views.py:117
|
||||
msgid "You are not logged in and therefore cannot view this page!"
|
||||
msgstr ""
|
||||
msgstr "Giriş yapmadınız ve bu nedenle bu sayfayı görüntüleyemezsiniz!"
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:168
|
||||
#: .\cookbook\helper\permission_helper.py:174
|
||||
@@ -247,68 +249,68 @@ msgstr ""
|
||||
#: .\cookbook\helper\permission_helper.py:341 .\cookbook\views\data.py:35
|
||||
#: .\cookbook\views\views.py:127 .\cookbook\views\views.py:131
|
||||
msgid "You do not have the required permissions to view this page!"
|
||||
msgstr ""
|
||||
msgstr "Bu sayfayı görüntülemek için gerekli izinlere sahip değilsiniz!"
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:192
|
||||
#: .\cookbook\helper\permission_helper.py:215
|
||||
#: .\cookbook\helper\permission_helper.py:237
|
||||
#: .\cookbook\helper\permission_helper.py:252
|
||||
msgid "You cannot interact with this object as it is not owned by you!"
|
||||
msgstr ""
|
||||
msgstr "Bu nesne size ait olmadığı için onunla etkileşime giremezsiniz!"
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:402
|
||||
msgid "You have reached the maximum number of recipes for your space."
|
||||
msgstr ""
|
||||
msgstr "Alanınız için maksimum tarif sayısına ulaştınız."
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:414
|
||||
msgid "You have more users than allowed in your space."
|
||||
msgstr ""
|
||||
msgstr "Alanınızda izin verilenden daha fazla kullanıcı var."
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:310
|
||||
msgid "reverse rotation"
|
||||
msgstr ""
|
||||
msgstr "ters dönüş"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:311
|
||||
msgid "careful rotation"
|
||||
msgstr ""
|
||||
msgstr "dikkatli dönüş"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:312
|
||||
msgid "knead"
|
||||
msgstr ""
|
||||
msgstr "yoğur"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:313
|
||||
msgid "thicken"
|
||||
msgstr ""
|
||||
msgstr "kalınlaştır"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:314
|
||||
msgid "warm up"
|
||||
msgstr ""
|
||||
msgstr "ısıt"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:315
|
||||
msgid "ferment"
|
||||
msgstr ""
|
||||
msgstr "mayala"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:316
|
||||
msgid "sous-vide"
|
||||
msgstr ""
|
||||
msgstr "sous-vide"
|
||||
|
||||
#: .\cookbook\helper\shopping_helper.py:150
|
||||
msgid "You must supply a servings size"
|
||||
msgstr ""
|
||||
msgstr "Bir porsiyon büyüklüğü vermelisiniz"
|
||||
|
||||
#: .\cookbook\helper\template_helper.py:95
|
||||
#: .\cookbook\helper\template_helper.py:97
|
||||
msgid "Could not parse template code."
|
||||
msgstr ""
|
||||
msgstr "Şablon kodu ayrıştırılamadı."
|
||||
|
||||
#: .\cookbook\integration\copymethat.py:44
|
||||
#: .\cookbook\integration\melarecipes.py:37
|
||||
msgid "Favorite"
|
||||
msgstr ""
|
||||
msgstr "Favori"
|
||||
|
||||
#: .\cookbook\integration\copymethat.py:50
|
||||
msgid "I made this"
|
||||
msgstr ""
|
||||
msgstr "Bunu yaptım"
|
||||
|
||||
#: .\cookbook\integration\integration.py:209
|
||||
msgid ""
|
||||
@@ -324,28 +326,28 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\integration\integration.py:217
|
||||
msgid "The following recipes were ignored because they already existed:"
|
||||
msgstr ""
|
||||
msgstr "Aşağıdaki tarifler zaten mevcut olduğu için göz ardı edildi:"
|
||||
|
||||
#: .\cookbook\integration\integration.py:221
|
||||
#, python-format
|
||||
msgid "Imported %s recipes."
|
||||
msgstr ""
|
||||
msgstr "%s tarif içe aktarıldı."
|
||||
|
||||
#: .\cookbook\integration\openeats.py:28
|
||||
msgid "Recipe source:"
|
||||
msgstr ""
|
||||
msgstr "Tarif kaynağı:"
|
||||
|
||||
#: .\cookbook\integration\paprika.py:49
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
msgstr "Notlar"
|
||||
|
||||
#: .\cookbook\integration\paprika.py:52
|
||||
msgid "Nutritional Information"
|
||||
msgstr ""
|
||||
msgstr "Beslenme Bilgileri"
|
||||
|
||||
#: .\cookbook\integration\paprika.py:56
|
||||
msgid "Source"
|
||||
msgstr ""
|
||||
msgstr "Kaynak"
|
||||
|
||||
#: .\cookbook\integration\recettetek.py:54
|
||||
#: .\cookbook\integration\recipekeeper.py:70
|
||||
@@ -354,23 +356,23 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\integration\saffron.py:23
|
||||
msgid "Servings"
|
||||
msgstr ""
|
||||
msgstr "Porsiyon"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:25
|
||||
msgid "Waiting time"
|
||||
msgstr ""
|
||||
msgstr "Bekleme süresi"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:27
|
||||
msgid "Preparation Time"
|
||||
msgstr ""
|
||||
msgstr "Hazırlık Süresi"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\index.html:7
|
||||
msgid "Cookbook"
|
||||
msgstr ""
|
||||
msgstr "Yemek kitabı"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:31
|
||||
msgid "Section"
|
||||
msgstr ""
|
||||
msgstr "Bölüm"
|
||||
|
||||
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
|
||||
msgid "Fixes foods with "
|
||||
@@ -383,6 +385,8 @@ msgstr ""
|
||||
#: .\cookbook\management\commands\rebuildindex.py:18
|
||||
msgid "Only Postgresql databases use full text search, no index to rebuild"
|
||||
msgstr ""
|
||||
"Yalnızca Postgresql veritabanları tam metin araması kullanır, yeniden "
|
||||
"oluşturulacak dizin yoktur"
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:29
|
||||
msgid "Recipe index rebuild complete."
|
||||
@@ -1955,286 +1959,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,18 +7,18 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2023-04-12 11:55+0000\n"
|
||||
"Last-Translator: noxonad <noxonad@proton.me>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2025-01-16 18:58+0000\n"
|
||||
"Last-Translator: Anton Shevtsov <ashevtsovs@gmail.com>\n"
|
||||
"Language-Team: Ukrainian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/uk/>\n"
|
||||
"Language: uk\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.8.4\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -32,51 +32,55 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\forms.py:62 .\cookbook\forms.py:246 .\cookbook\views\lists.py:103
|
||||
msgid "Keywords"
|
||||
msgstr ""
|
||||
msgstr "Ключові слова"
|
||||
|
||||
#: .\cookbook\forms.py:62
|
||||
msgid "Preparation time in minutes"
|
||||
msgstr ""
|
||||
msgstr "Час приготування у хвилинах"
|
||||
|
||||
#: .\cookbook\forms.py:62
|
||||
msgid "Waiting time (cooking/baking) in minutes"
|
||||
msgstr ""
|
||||
msgstr "Час очікування (варіння/випічка) у хвилинах"
|
||||
|
||||
#: .\cookbook\forms.py:63 .\cookbook\forms.py:222 .\cookbook\forms.py:246
|
||||
msgid "Path"
|
||||
msgstr ""
|
||||
msgstr "Шлях"
|
||||
|
||||
#: .\cookbook\forms.py:63
|
||||
msgid "Storage UID"
|
||||
msgstr ""
|
||||
msgstr "UID сховища"
|
||||
|
||||
#: .\cookbook\forms.py:93
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
msgstr "За замовчуванням"
|
||||
|
||||
#: .\cookbook\forms.py:121
|
||||
msgid ""
|
||||
"To prevent duplicates recipes with the same name as existing ones are "
|
||||
"ignored. Check this box to import everything."
|
||||
msgstr ""
|
||||
"Щоб запобігти дублюванням, рецепти з назвами, що вже існують, "
|
||||
"ігноруватимуться. Установіть цей прапорець, щоб імпортувати все."
|
||||
|
||||
#: .\cookbook\forms.py:143
|
||||
msgid "Add your comment: "
|
||||
msgstr ""
|
||||
msgstr "Додайте ваш коментар: "
|
||||
|
||||
#: .\cookbook\forms.py:151
|
||||
msgid "Leave empty for dropbox and enter app password for nextcloud."
|
||||
msgstr ""
|
||||
msgstr "Залиште порожнім для dropbox і введіть api ключі для nextcloud."
|
||||
|
||||
#: .\cookbook\forms.py:154
|
||||
msgid "Leave empty for nextcloud and enter api token for dropbox."
|
||||
msgstr ""
|
||||
msgstr "Залиште порожнім для nextcloud і введіть api ключі для dropbox."
|
||||
|
||||
#: .\cookbook\forms.py:160
|
||||
msgid ""
|
||||
"Leave empty for dropbox and enter only base url for nextcloud (<code>/remote."
|
||||
"php/webdav/</code> is added automatically)"
|
||||
msgstr ""
|
||||
"Залиште порожнім для dropbox і введіть лише базовий url для nextcloud "
|
||||
"(<code>/remote.php/webdav/</code> буде додано автоматично)"
|
||||
|
||||
#: .\cookbook\forms.py:188
|
||||
msgid ""
|
||||
@@ -937,13 +941,13 @@ msgstr ""
|
||||
#: .\cookbook\templates\ingredient_editor.html:7
|
||||
#: .\cookbook\templates\ingredient_editor.html:13
|
||||
msgid "Ingredient Editor"
|
||||
msgstr ""
|
||||
msgstr "Редактор Інгредієнтів"
|
||||
|
||||
#: .\cookbook\templates\base.html:275
|
||||
#: .\cookbook\templates\export_response.html:7
|
||||
#: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20
|
||||
msgid "Export"
|
||||
msgstr ""
|
||||
msgstr "Експорт"
|
||||
|
||||
#: .\cookbook\templates\base.html:287
|
||||
msgid "Properties"
|
||||
@@ -1936,286 +1940,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2020-06-02 19:28+0000\n"
|
||||
"Last-Translator: Hieu, 2021\n"
|
||||
"Language-Team: Vietnamese (https://www.transifex.com/django-recipes/"
|
||||
@@ -2025,288 +2025,288 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr "Nhập URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "The requested page could not be found."
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Không thể tìm thấy trang được yêu cầu."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Đồng bộ thành công!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,9 +7,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2024-02-15 03:19+0000\n"
|
||||
"Last-Translator: dalan <xzdlj@outlook.com>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-11-04 10:29+0000\n"
|
||||
"Last-Translator: Johnny Ip <ip.iohnny@gmail.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <http://translate.tandoor.dev/projects/"
|
||||
"tandoor/recipes-backend/zh_Hans/>\n"
|
||||
"Language: zh_CN\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -86,14 +86,16 @@ msgid ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Long Lived Access Token</a> for your HomeAssistant instance"
|
||||
msgstr ""
|
||||
"您的HomeAssistant示例的<a href=\"https://www.home-assistant.io/docs/"
|
||||
"authentication/#your-account-profile\">长期访问令牌</a>"
|
||||
|
||||
#: .\cookbook\forms.py:193
|
||||
msgid "Something like http://homeassistant.local:8123/api"
|
||||
msgstr ""
|
||||
msgstr "形如 http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:205
|
||||
msgid "http://homeassistant.local:8123/api for example"
|
||||
msgstr ""
|
||||
msgstr "例如 http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
|
||||
msgid "Storage"
|
||||
@@ -356,7 +358,7 @@ msgstr "准备时间"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\index.html:7
|
||||
msgid "Cookbook"
|
||||
msgstr "菜谱"
|
||||
msgstr "烹饪手册"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:31
|
||||
msgid "Section"
|
||||
@@ -364,7 +366,7 @@ msgstr "部分"
|
||||
|
||||
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
|
||||
msgid "Fixes foods with "
|
||||
msgstr ""
|
||||
msgstr "修复食谱中的重复字段 "
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:14
|
||||
msgid "Rebuilds full text search index on Recipe"
|
||||
@@ -400,29 +402,29 @@ msgstr "其他"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
msgid "Fat"
|
||||
msgstr ""
|
||||
msgstr "脂肪"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
|
||||
msgid "g"
|
||||
msgstr ""
|
||||
msgstr "克"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
msgid "Carbohydrates"
|
||||
msgstr ""
|
||||
msgstr "碳水化合物"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
|
||||
msgid "Proteins"
|
||||
msgstr ""
|
||||
msgstr "蛋白质"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:20
|
||||
msgid "Calories"
|
||||
msgstr ""
|
||||
msgstr "卡路里"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:20
|
||||
msgid "kcal"
|
||||
msgstr ""
|
||||
msgstr "千卡"
|
||||
|
||||
#: .\cookbook\models.py:325
|
||||
msgid ""
|
||||
@@ -443,7 +445,7 @@ msgstr "膳食计划"
|
||||
#: .\cookbook\models.py:456 .\cookbook\templates\base.html:122
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "Books"
|
||||
msgstr "书籍"
|
||||
msgstr "烹饪手册"
|
||||
|
||||
#: .\cookbook\models.py:457 .\cookbook\templates\base.html:118
|
||||
#: .\cookbook\views\views.py:460
|
||||
@@ -455,24 +457,20 @@ msgid " is part of a recipe step and cannot be deleted"
|
||||
msgstr " 是菜谱步骤的一部分,不能删除"
|
||||
|
||||
#: .\cookbook\models.py:918
|
||||
#, fuzzy
|
||||
#| msgid "Automations"
|
||||
msgid "Nutrition"
|
||||
msgstr "自动化"
|
||||
msgstr "营养"
|
||||
|
||||
#: .\cookbook\models.py:918
|
||||
#, fuzzy
|
||||
#| msgid "Merge"
|
||||
msgid "Allergen"
|
||||
msgstr "合并"
|
||||
msgstr "过敏原"
|
||||
|
||||
#: .\cookbook\models.py:919
|
||||
msgid "Price"
|
||||
msgstr ""
|
||||
msgstr "价格"
|
||||
|
||||
#: .\cookbook\models.py:919
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
msgstr "目标"
|
||||
|
||||
#: .\cookbook\models.py:1408 .\cookbook\templates\search_info.html:28
|
||||
msgid "Simple"
|
||||
@@ -511,30 +509,24 @@ msgid "Instruction Replace"
|
||||
msgstr "指示"
|
||||
|
||||
#: .\cookbook\models.py:1472
|
||||
#, fuzzy
|
||||
#| msgid "New Unit"
|
||||
msgid "Never Unit"
|
||||
msgstr "新单位"
|
||||
msgstr "禁用单位识别"
|
||||
|
||||
#: .\cookbook\models.py:1473
|
||||
msgid "Transpose Words"
|
||||
msgstr ""
|
||||
msgstr "字符串转置"
|
||||
|
||||
#: .\cookbook\models.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "Food Alias"
|
||||
msgid "Food Replace"
|
||||
msgstr "食物别名"
|
||||
msgstr "食物替换"
|
||||
|
||||
#: .\cookbook\models.py:1475
|
||||
#, fuzzy
|
||||
#| msgid "Description Replace"
|
||||
msgid "Unit Replace"
|
||||
msgstr "描述"
|
||||
msgstr "单位替换"
|
||||
|
||||
#: .\cookbook\models.py:1476
|
||||
msgid "Name Replace"
|
||||
msgstr ""
|
||||
msgstr "名称替换"
|
||||
|
||||
#: .\cookbook\models.py:1503 .\cookbook\views\delete.py:40
|
||||
#: .\cookbook\views\edit.py:210 .\cookbook\views\new.py:39
|
||||
@@ -571,7 +563,7 @@ msgstr "您已被邀请至 "
|
||||
|
||||
#: .\cookbook\serializer.py:1272
|
||||
msgid " to join their Tandoor Recipes space "
|
||||
msgstr " 加入他们的泥炉食谱空间 "
|
||||
msgstr " 加入他们的 Tandoor 食谱空间 "
|
||||
|
||||
#: .\cookbook\serializer.py:1274
|
||||
msgid "Click the following link to activate your account: "
|
||||
@@ -589,11 +581,11 @@ msgstr "邀请有效期至 "
|
||||
#: .\cookbook\serializer.py:1280
|
||||
msgid ""
|
||||
"Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub "
|
||||
msgstr "泥炉食谱是一个开源食谱管理器。 在 GitHub 上查看 "
|
||||
msgstr "Tandoor 是一个开源食谱管理器。 在 GitHub 上查看 "
|
||||
|
||||
#: .\cookbook\serializer.py:1283
|
||||
msgid "Tandoor Recipes Invite"
|
||||
msgstr "泥炉食谱邀请"
|
||||
msgstr "Tandoor 食谱邀请"
|
||||
|
||||
#: .\cookbook\serializer.py:1426
|
||||
msgid "Existing shopping list to update"
|
||||
@@ -979,13 +971,11 @@ msgstr "导出"
|
||||
|
||||
#: .\cookbook\templates\base.html:287
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
msgstr "属性"
|
||||
|
||||
#: .\cookbook\templates\base.html:301 .\cookbook\views\lists.py:255
|
||||
#, fuzzy
|
||||
#| msgid "Account Connections"
|
||||
msgid "Unit Conversions"
|
||||
msgstr "帐号连接"
|
||||
msgstr "单位转换"
|
||||
|
||||
#: .\cookbook\templates\base.html:318 .\cookbook\templates\index.html:47
|
||||
msgid "Import Recipe"
|
||||
@@ -1005,10 +995,8 @@ msgid "Space Settings"
|
||||
msgstr "空间设置"
|
||||
|
||||
#: .\cookbook\templates\base.html:340
|
||||
#, fuzzy
|
||||
#| msgid "External Recipes"
|
||||
msgid "External Connectors"
|
||||
msgstr "外部菜谱"
|
||||
msgstr "外部连接器"
|
||||
|
||||
#: .\cookbook\templates\base.html:345 .\cookbook\templates\system.html:13
|
||||
msgid "System"
|
||||
@@ -1038,7 +1026,7 @@ msgstr "GitHub"
|
||||
|
||||
#: .\cookbook\templates\base.html:376
|
||||
msgid "Translate Tandoor"
|
||||
msgstr "翻译泥炉"
|
||||
msgstr "翻译 Tandoor"
|
||||
|
||||
#: .\cookbook\templates\base.html:380
|
||||
msgid "API Browser"
|
||||
@@ -1050,7 +1038,7 @@ msgstr "退出"
|
||||
|
||||
#: .\cookbook\templates\base.html:406
|
||||
msgid "You are using the free version of Tandor"
|
||||
msgstr "你正在使用免费版的泥炉"
|
||||
msgstr "你正在使用免费版的 Tandoor"
|
||||
|
||||
#: .\cookbook\templates\base.html:407
|
||||
msgid "Upgrade Now"
|
||||
@@ -1123,7 +1111,7 @@ msgstr "这可能需要几分钟,取决于同步的菜谱数量,请等待。
|
||||
|
||||
#: .\cookbook\templates\books.html:7
|
||||
msgid "Recipe Books"
|
||||
msgstr "菜谱书"
|
||||
msgstr "烹饪手册"
|
||||
|
||||
#: .\cookbook\templates\export.html:7 .\cookbook\templates\test2.html:6
|
||||
msgid "Export Recipes"
|
||||
@@ -1453,10 +1441,8 @@ msgid "Back"
|
||||
msgstr "返回"
|
||||
|
||||
#: .\cookbook\templates\property_editor.html:7
|
||||
#, fuzzy
|
||||
#| msgid "Ingredient Editor"
|
||||
msgid "Property Editor"
|
||||
msgstr "食材编辑器"
|
||||
msgstr "属性编辑器"
|
||||
|
||||
#: .\cookbook\templates\recipe_view.html:36
|
||||
msgid "Comments"
|
||||
@@ -1770,7 +1756,7 @@ msgstr "非常适合大型数据库"
|
||||
|
||||
#: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5
|
||||
msgid "Cookbook Setup"
|
||||
msgstr "安装菜谱"
|
||||
msgstr "安装菜谱应用"
|
||||
|
||||
#: .\cookbook\templates\setup.html:14
|
||||
msgid "Setup"
|
||||
@@ -1879,10 +1865,8 @@ msgid "Sign in using"
|
||||
msgstr "登录使用"
|
||||
|
||||
#: .\cookbook\templates\space_manage.html:7
|
||||
#, fuzzy
|
||||
#| msgid "Space Membership"
|
||||
msgid "Space Management"
|
||||
msgstr "成员"
|
||||
msgstr "空间管理"
|
||||
|
||||
#: .\cookbook\templates\space_manage.html:26
|
||||
msgid "Space:"
|
||||
@@ -1974,6 +1958,10 @@ msgid ""
|
||||
"script to generate version information (done automatically in docker).\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" 您需要在您的更新脚本中执行 <code>version.py</code> "
|
||||
"生成版本信息(Docker实例中会自动执行)。\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:46
|
||||
msgid "Media Serving"
|
||||
@@ -2000,9 +1988,11 @@ msgid ""
|
||||
" your installation.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<b>不推荐</b> 使用 gunicorn/python 提供媒体文件。\n"
|
||||
" 请按照 <a href=\"https://github.com/vabene1111/recipes/releases/"
|
||||
"tag/0.8.1\">这里</a> 描述的步骤操作更新安装。\n"
|
||||
"<b>不推荐</b> 使用 gunicorn/python 提供媒体文件!\n"
|
||||
" 请按照\n"
|
||||
" <a href=\"https://github.com/vabene1111/recipes/releases/tag/0.8."
|
||||
"1\">这里</a> 描述的步骤\n"
|
||||
" 操作更新安装。\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:55 .\cookbook\templates\system.html:70
|
||||
@@ -2057,7 +2047,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\system.html:86
|
||||
msgid "Allowed Hosts"
|
||||
msgstr ""
|
||||
msgstr "域名白名单"
|
||||
|
||||
#: .\cookbook\templates\system.html:90
|
||||
msgid ""
|
||||
@@ -2067,6 +2057,10 @@ msgid ""
|
||||
"this.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" 您未配置域名白名单,本实例可以通过任意域名访问,某些特殊情况下可"
|
||||
"能有用,但请尽量避免这样配置,请参考文档配置 ALLOWED_HOSTS 。\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:97
|
||||
msgid "Database"
|
||||
@@ -2077,10 +2071,8 @@ msgid "Info"
|
||||
msgstr "信息"
|
||||
|
||||
#: .\cookbook\templates\system.html:110 .\cookbook\templates\system.html:127
|
||||
#, fuzzy
|
||||
#| msgid "Use fractions"
|
||||
msgid "Migrations"
|
||||
msgstr "使用分数"
|
||||
msgstr "数据库结构变更"
|
||||
|
||||
#: .\cookbook\templates\system.html:116
|
||||
msgid ""
|
||||
@@ -2093,323 +2085,317 @@ msgid ""
|
||||
"issue.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" 正常情况下数据库迁移不应产生任何报错!\n"
|
||||
" 数据库迁移失败很可能导致本应用的功能出错或完全不可用。\n"
|
||||
" 如果您在最新版本上数据库迁移依然产生错误,"
|
||||
"请将数据库迁移日志和页面下方的信息反馈至 Github Issue 中。\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:182
|
||||
msgid "False"
|
||||
msgstr ""
|
||||
msgstr "否"
|
||||
|
||||
#: .\cookbook\templates\system.html:182
|
||||
msgid "True"
|
||||
msgstr ""
|
||||
msgstr "是"
|
||||
|
||||
#: .\cookbook\templates\system.html:207
|
||||
msgid "Hide"
|
||||
msgstr ""
|
||||
msgstr "隐藏"
|
||||
|
||||
#: .\cookbook\templates\system.html:210
|
||||
#, fuzzy
|
||||
#| msgid "Show Log"
|
||||
msgid "Show"
|
||||
msgstr "显示记录"
|
||||
msgstr "显示"
|
||||
|
||||
#: .\cookbook\templates\url_import.html:8
|
||||
msgid "URL Import"
|
||||
msgstr "链接导入"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "参数 updated_at 格式不正确"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "不存在ID是 {pk} 的 {self.basename}"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "无法与同一对象合并!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "不存在 ID 为 {target} 的 {self.basename}"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "无法与子对象合并!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} 已成功与 {target.name} 合并"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr "视图合并 {source.name} 和 {target.name} 时出错"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} 已成功移动到根目录。"
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "尝试移动时出错 "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "无法将对象移动到自身!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "不存在 ID 为 {parent} 的 {self.basename}"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} 成功移动到父节点 {parent.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} 已从购物清单中删除。"
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} 已添加到购物清单中。"
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
msgstr "指定开始日期以过滤膳食计划(包含选择的日期),日期格式为 YYYY-MM-DD。"
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr "指定结束日期以过滤膳食计划(包含选择的日期),日期格式为 YYYY-MM-DD。"
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr "食谱中的步骤ID。 对于多个重复参数。"
|
||||
msgstr "指定 MealType ID 以过滤膳食计划,重复此参数以选择多个对象。"
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr "食谱中的步骤ID。 对于多个重复参数。"
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "请求参数与对象名称匹配(模糊)。"
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr "请求参数与食谱名称匹配(模糊)。 未来会添加全文搜索。"
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr "菜谱应包含的关键字 ID。 对于多个重复参数。 相当于keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr "允许多个关键字 ID。 返回带有任一关键字的食谱"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr "允许多个关键字 ID。 返回带有所有关键字的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr "允许多个关键字 ID。 排除带有任一关键字的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr "允许多个关键字 ID。 排除带有所有关键字的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr "食谱中食物带有ID。并可添加多个食物。"
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr "食谱中食物带有ID。并可添加多个食物"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr "食谱中食物带有ID。返回包含任何食物的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr "食谱中食物带有ID。排除包含任一食物的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr "食谱中食物带有ID。排除包含所有食物的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "食谱应具有单一ID。"
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr "配方的评分范围从 0 到 5。"
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr "烹饪书应该在食谱中具有ID。并且可以添加多本。"
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr "书的ID允许多个。返回包含任一书籍的食谱"
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr "书的ID允许多个。返回包含所有书籍的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr "书的ID允许多个。排除包含任一书籍的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr "书的ID允许多个。排除包含所有书籍的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr "只返回内部食谱。 [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr "按随机排序返回结果。 [true/<b> false </b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr "在搜索结果中首先返回新结果。 [是/<b>否</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr "筛选烹饪 X 次或更多次的食谱。 负值返回烹饪少于 X 次"
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
"筛选最后烹饪在 YYYY-MM-DD 当天或之后的食谱。 前置 - 在日期或日期之前筛选。"
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr "筛选在 YYYY-MM-DD 或之后创建的食谱。 前置 - 在日期或日期之前过滤。"
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr "筛选在 YYYY-MM-DD 或之后更新的食谱。 前置 - 在日期或日期之前筛选。"
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
"筛选最后查看时间是在 YYYY-MM-DD 或之后的食谱。 前置 - 在日期或日期之前筛选。"
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr "筛选可以直接用手制作的食谱。 [真/<b>假</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr "返回主键为 id 的购物清单条目。 允许多个值。"
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
#| "b>]<br> - recent includes unchecked items and recently completed items."
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
"在选中时筛选购物清单列表。 [真, 假, 两者都有, <b>最近</b>]<br> - 最近包括未"
|
||||
"选中的项目和最近完成的项目。"
|
||||
"勾选并筛选购物清单列表。 [真, 假, 两者都有, <b>最近</b>]"
|
||||
"<br> - 最近包括未选中的项目和最近完成的项目。"
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr "返回按超市分类排序的购物清单列表。"
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
msgstr "筛选包含所选食谱的对象"
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Returns the shopping list entry with a primary key of id. Multiple "
|
||||
#| "values allowed."
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr "返回主键为 id 的购物清单条目。 允许多个值。"
|
||||
msgstr "返回与自动化类型相匹配的自动化条目。 允许多个值。"
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "无事可做。"
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr "无效网址"
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "连接被拒绝。"
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "错误的 URL Schema。"
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "找不到可用的数据。"
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
msgstr "文件大小超出空间限值"
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "此提供程序未实现导入"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "此功能在泥炉的托管版本中尚不可用!"
|
||||
msgstr "此功能在 Tandoor 的托管版本中尚不可用!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "同步成功!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "与存储同步时出错"
|
||||
|
||||
@@ -2434,10 +2420,8 @@ msgid ""
|
||||
msgstr "无法删除此存储后端,因为它至少在一台显示器中使用。"
|
||||
|
||||
#: .\cookbook\views\delete.py:135
|
||||
#, fuzzy
|
||||
#| msgid "Storage Backend"
|
||||
msgid "Connectors Config Backend"
|
||||
msgstr "存储后端"
|
||||
msgstr "连接器后端配置"
|
||||
|
||||
#: .\cookbook\views\delete.py:157
|
||||
msgid "Invite Link"
|
||||
@@ -2460,14 +2444,12 @@ msgid "There was an error updating this storage backend!"
|
||||
msgstr "更新此存储后端时出错!"
|
||||
|
||||
#: .\cookbook\views\edit.py:134
|
||||
#, fuzzy
|
||||
#| msgid "Changes saved!"
|
||||
msgid "Config saved!"
|
||||
msgstr "更改已保存!"
|
||||
msgstr "配置已保存!"
|
||||
|
||||
#: .\cookbook\views\edit.py:142
|
||||
msgid "ConnectorConfig"
|
||||
msgstr ""
|
||||
msgstr "连接器配置"
|
||||
|
||||
#: .\cookbook\views\edit.py:198
|
||||
msgid "Changes saved!"
|
||||
@@ -2496,10 +2478,8 @@ msgid "Shopping List"
|
||||
msgstr "采购单"
|
||||
|
||||
#: .\cookbook\views\lists.py:77 .\cookbook\views\new.py:98
|
||||
#, fuzzy
|
||||
#| msgid "Storage Backend"
|
||||
msgid "Connector Config Backend"
|
||||
msgstr "存储后端"
|
||||
msgstr "连接器后端配置"
|
||||
|
||||
#: .\cookbook\views\lists.py:91
|
||||
msgid "Invite Links"
|
||||
@@ -2523,13 +2503,11 @@ msgstr "步骤"
|
||||
|
||||
#: .\cookbook\views\lists.py:270
|
||||
msgid "Property Types"
|
||||
msgstr ""
|
||||
msgstr "属性类型"
|
||||
|
||||
#: .\cookbook\views\new.py:86
|
||||
#, fuzzy
|
||||
#| msgid "This feature is not available in the demo version!"
|
||||
msgid "This feature is not enabled by the server admin!"
|
||||
msgstr "此功能在演示版本中不可用!"
|
||||
msgstr "此功能被服务器管理员禁用!"
|
||||
|
||||
#: .\cookbook\views\new.py:123
|
||||
msgid "Imported new recipe!"
|
||||
@@ -2545,11 +2523,9 @@ msgid "This feature is not available in the demo version!"
|
||||
msgstr "此功能在演示版本中不可用!"
|
||||
|
||||
#: .\cookbook\views\views.py:74
|
||||
#, fuzzy
|
||||
#| msgid "You have reached the maximum number of recipes for your space."
|
||||
msgid ""
|
||||
"You have the reached the maximum amount of spaces that can be owned by you."
|
||||
msgstr "你已经达到了空间的菜谱的最大数量。"
|
||||
msgstr "你拥有的空间数量已经达到上限。"
|
||||
|
||||
#: .\cookbook\views\views.py:89
|
||||
msgid ""
|
||||
@@ -2582,48 +2558,32 @@ msgstr "模糊搜索与此搜索方法不兼容!"
|
||||
#: .\cookbook\views\views.py:306
|
||||
#, python-format
|
||||
msgid "PostgreSQL %(v)s is deprecated. Upgrade to a fully supported version!"
|
||||
msgstr ""
|
||||
msgstr "PostgreSQL %(v)s 版本过时。请升级到支持的版本!"
|
||||
|
||||
#: .\cookbook\views\views.py:309
|
||||
#, python-format
|
||||
msgid "You are running PostgreSQL %(v1)s. PostgreSQL %(v2)s is recommended"
|
||||
msgstr ""
|
||||
msgstr "您运行的 PostgreSQL 版本是 %(v1)s。推荐版本为 PostgreSQL %(v2)s"
|
||||
|
||||
#: .\cookbook\views\views.py:313
|
||||
msgid "Unable to determine PostgreSQL version."
|
||||
msgstr ""
|
||||
msgstr "无法确认 PostgreSQL 版本。"
|
||||
|
||||
#: .\cookbook\views\views.py:317
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "\n"
|
||||
#| " This application is not running with a Postgres database "
|
||||
#| "backend. This is ok but not recommended as some\n"
|
||||
#| " features only work with postgres databases.\n"
|
||||
#| " "
|
||||
msgid ""
|
||||
"This application is not running with a Postgres database backend. This is ok "
|
||||
"but not recommended as some features only work with postgres databases."
|
||||
msgstr ""
|
||||
"\n"
|
||||
" 此应用程序未使用 PostgreSQL 数据库在后端运行。 这并没有关系,但这"
|
||||
"是不推荐的,\n"
|
||||
" 因为有些功能仅适用于 PostgreSQL 数据库。\n"
|
||||
" "
|
||||
msgstr "此应用未使用 PostgreSQL 数据库作为后端。 这是可运行的配置,但不推荐,"
|
||||
"因为部分功能仅在 PostgreSQL 数据库下可用。"
|
||||
|
||||
#: .\cookbook\views\views.py:360
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The setup page can only be used to create the first user! If you have "
|
||||
#| "forgotten your superuser credentials please consult the django "
|
||||
#| "documentation on how to reset passwords."
|
||||
msgid ""
|
||||
"The setup page can only be used to create the first "
|
||||
"user! If you have forgotten your superuser credentials "
|
||||
"please consult the django documentation on how to reset passwords."
|
||||
msgstr ""
|
||||
"设置页面只能用于创建第一个用户!如果您忘记了超级用户凭据,请参阅 Django 文"
|
||||
"档,了解如何重置密码。"
|
||||
"设置页面只能用于创建第一个用户! "
|
||||
"如果您忘记了超级用户凭据,请参阅 Django 文档,了解如何重置密码。"
|
||||
|
||||
#: .\cookbook\views\views.py:369
|
||||
msgid "Passwords dont match!"
|
||||
@@ -2659,27 +2619,23 @@ msgstr "菜谱共享链接已被禁用!有关更多信息,请与页面管理
|
||||
|
||||
#: .\cookbook\views\views.py:451
|
||||
msgid "Manage recipes, shopping list, meal plans and more."
|
||||
msgstr ""
|
||||
msgstr "管理菜谱、购物清单、膳食计划等。"
|
||||
|
||||
#: .\cookbook\views\views.py:458
|
||||
#, fuzzy
|
||||
#| msgid "Meal-Plan"
|
||||
msgid "Plan"
|
||||
msgstr "膳食计划"
|
||||
msgstr "计划"
|
||||
|
||||
#: .\cookbook\views\views.py:458
|
||||
msgid "View your meal Plan"
|
||||
msgstr ""
|
||||
msgstr "查看您的膳食计划"
|
||||
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "View your cookbooks"
|
||||
msgstr ""
|
||||
msgstr "查看你的烹饪手册"
|
||||
|
||||
#: .\cookbook\views\views.py:460
|
||||
#, fuzzy
|
||||
#| msgid "New Shopping List"
|
||||
msgid "View your shopping lists"
|
||||
msgstr "新购物清单"
|
||||
msgstr "查看你的购物清单"
|
||||
|
||||
#~ msgid "Default unit"
|
||||
#~ msgstr "默认单位"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.15 on 2024-09-15 10:30
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cookbook', '0218_alter_mealplan_from_date_alter_mealplan_to_date'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='connectorconfig',
|
||||
name='supports_description_field',
|
||||
field=models.BooleanField(default=True, help_text='Does the todo entity support the description field'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,24 @@
|
||||
# Generated by Django 4.2.18 on 2025-03-14 10:50
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('cookbook', '0219_connectorconfig_supports_description_field'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='shoppinglistrecipe',
|
||||
name='created_by',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shoppinglistrecipe',
|
||||
name='space',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='cookbook.space'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,42 @@
|
||||
# Generated by Django 4.2.18 on 2025-03-14 10:50
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
from django.db.models import F, Count
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
|
||||
def add_space_and_owner_to_shopping_list_recipe(apps, schema_editor):
|
||||
print('migrating shopping list recipe space attribute, this might take a while ...')
|
||||
with scopes_disabled():
|
||||
ShoppingListRecipe = apps.get_model('cookbook', 'ShoppingListRecipe')
|
||||
|
||||
# delete all shopping list recipes that do not have entries as those are of no use anyway
|
||||
ShoppingListRecipe.objects.annotate(entry_count=Count('entries')).filter(entry_count__lte=0).delete()
|
||||
|
||||
shopping_list_recipes = ShoppingListRecipe.objects.all().prefetch_related('entries')
|
||||
update_list = []
|
||||
|
||||
for slr in shopping_list_recipes:
|
||||
if entry := slr.entries.first():
|
||||
if entry.space and entry.created_by:
|
||||
slr.space = entry.space
|
||||
slr.created_by = entry.created_by
|
||||
update_list.append(slr)
|
||||
else:
|
||||
print(slr, 'missing data on entry')
|
||||
else:
|
||||
print(slr, 'missing entry')
|
||||
|
||||
ShoppingListRecipe.objects.bulk_update(update_list, ['space', 'created_by'], batch_size=500)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
('cookbook', '0220_shoppinglistrecipe_created_by_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(add_space_and_owner_to_shopping_list_recipe),
|
||||
]
|
||||
@@ -0,0 +1,26 @@
|
||||
# Generated by Django 4.2.18 on 2025-03-14 12:41
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('cookbook', '0221_migrate_shoppinglistrecipe_space_created_by'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='shoppinglistrecipe',
|
||||
name='created_by',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='shoppinglistrecipe',
|
||||
name='space',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cookbook.space'),
|
||||
),
|
||||
]
|
||||
@@ -126,7 +126,7 @@ class TreeModel(MP_Node):
|
||||
return None
|
||||
|
||||
@property
|
||||
def full_name(self):
|
||||
def full_name(self) -> str:
|
||||
"""
|
||||
Returns a string representation of a tree node and it's ancestors,
|
||||
e.g. 'Cuisine > Asian > Chinese > Catonese'.
|
||||
@@ -406,6 +406,7 @@ class ConnectorConfig(models.Model, PermissionModelMixin):
|
||||
on_shopping_list_entry_created_enabled = models.BooleanField(default=False)
|
||||
on_shopping_list_entry_updated_enabled = models.BooleanField(default=False)
|
||||
on_shopping_list_entry_deleted_enabled = models.BooleanField(default=False)
|
||||
supports_description_field = models.BooleanField(default=True, help_text="Does the todo entity support the description field")
|
||||
|
||||
url = models.URLField(blank=True, null=True)
|
||||
token = models.CharField(max_length=512, blank=True, null=True)
|
||||
@@ -911,12 +912,19 @@ class PropertyType(models.Model, PermissionModelMixin, MergeModelMixin):
|
||||
GOAL = 'GOAL'
|
||||
OTHER = 'OTHER'
|
||||
|
||||
CHOICES = (
|
||||
(NUTRITION, _('Nutrition')),
|
||||
(ALLERGEN, _('Allergen')),
|
||||
(PRICE, _('Price')),
|
||||
(GOAL, _('Goal')),
|
||||
(OTHER, _('Other')),
|
||||
)
|
||||
|
||||
name = models.CharField(max_length=128)
|
||||
unit = models.CharField(max_length=64, blank=True, null=True)
|
||||
order = models.IntegerField(default=0)
|
||||
description = models.CharField(max_length=512, blank=True, null=True)
|
||||
category = models.CharField(max_length=64, choices=((NUTRITION, _('Nutrition')), (ALLERGEN, _('Allergen')),
|
||||
(PRICE, _('Price')), (GOAL, _('Goal')), (OTHER, _('Other'))), null=True, blank=True)
|
||||
category = models.CharField(max_length=64, choices=CHOICES, null=True, blank=True)
|
||||
open_data_slug = models.CharField(max_length=128, null=True, blank=True, default=None)
|
||||
|
||||
fdc_id = models.IntegerField(null=True, default=None, blank=True)
|
||||
@@ -1086,6 +1094,19 @@ class RecipeImport(models.Model, PermissionModelMixin):
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def convert_to_recipe(self, user):
|
||||
recipe = Recipe(
|
||||
name=self.name,
|
||||
file_path=self.file_path,
|
||||
storage=self.storage,
|
||||
file_uid=self.file_uid,
|
||||
created_by=user,
|
||||
space=self.space
|
||||
)
|
||||
recipe.save()
|
||||
self.delete()
|
||||
return recipe
|
||||
|
||||
|
||||
class RecipeBook(ExportModelOperationsMixin('book'), models.Model, PermissionModelMixin):
|
||||
name = models.CharField(max_length=128)
|
||||
@@ -1178,31 +1199,18 @@ class MealPlan(ExportModelOperationsMixin('meal_plan'), models.Model, Permission
|
||||
|
||||
class ShoppingListRecipe(ExportModelOperationsMixin('shopping_list_recipe'), models.Model, PermissionModelMixin):
|
||||
name = models.CharField(max_length=32, blank=True, default='')
|
||||
recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, null=True, blank=True) # TODO make required after old shoppinglist deprecated
|
||||
servings = models.DecimalField(default=1, max_digits=8, decimal_places=4)
|
||||
recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, null=True, blank=True)
|
||||
mealplan = models.ForeignKey(MealPlan, on_delete=models.CASCADE, null=True, blank=True)
|
||||
|
||||
objects = ScopedManager(space='recipe__space')
|
||||
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
space = models.ForeignKey(Space, on_delete=models.CASCADE)
|
||||
|
||||
@staticmethod
|
||||
def get_space_key():
|
||||
return 'recipe', 'space'
|
||||
|
||||
def get_space(self):
|
||||
return self.recipe.space
|
||||
objects = ScopedManager(space='space')
|
||||
|
||||
def __str__(self):
|
||||
return f'Shopping list recipe {self.id} - {self.recipe}'
|
||||
|
||||
def get_owner(self):
|
||||
try:
|
||||
if not self.entries.exists():
|
||||
return 'orphan'
|
||||
else:
|
||||
return getattr(self.entries.first(), 'created_by', None)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
class ShoppingListEntry(ExportModelOperationsMixin('shopping_list_entry'), models.Model, PermissionModelMixin):
|
||||
list_recipe = models.ForeignKey(ShoppingListRecipe, on_delete=models.CASCADE, null=True, blank=True, related_name='entries')
|
||||
@@ -1462,19 +1470,21 @@ class Automation(ExportModelOperationsMixin('automations'), models.Model, Permis
|
||||
UNIT_REPLACE = 'UNIT_REPLACE'
|
||||
NAME_REPLACE = 'NAME_REPLACE'
|
||||
|
||||
automation_types = (
|
||||
(FOOD_ALIAS, _('Food Alias')),
|
||||
(UNIT_ALIAS, _('Unit Alias')),
|
||||
(KEYWORD_ALIAS, _('Keyword Alias')),
|
||||
(DESCRIPTION_REPLACE, _('Description Replace')),
|
||||
(INSTRUCTION_REPLACE, _('Instruction Replace')),
|
||||
(NEVER_UNIT, _('Never Unit')),
|
||||
(TRANSPOSE_WORDS, _('Transpose Words')),
|
||||
(FOOD_REPLACE, _('Food Replace')),
|
||||
(UNIT_REPLACE, _('Unit Replace')),
|
||||
(NAME_REPLACE, _('Name Replace')),
|
||||
)
|
||||
|
||||
type = models.CharField(max_length=128,
|
||||
choices=(
|
||||
(FOOD_ALIAS, _('Food Alias')),
|
||||
(UNIT_ALIAS, _('Unit Alias')),
|
||||
(KEYWORD_ALIAS, _('Keyword Alias')),
|
||||
(DESCRIPTION_REPLACE, _('Description Replace')),
|
||||
(INSTRUCTION_REPLACE, _('Instruction Replace')),
|
||||
(NEVER_UNIT, _('Never Unit')),
|
||||
(TRANSPOSE_WORDS, _('Transpose Words')),
|
||||
(FOOD_REPLACE, _('Food Replace')),
|
||||
(UNIT_REPLACE, _('Unit Replace')),
|
||||
(NAME_REPLACE, _('Name Replace')),
|
||||
))
|
||||
choices=automation_types)
|
||||
name = models.CharField(max_length=128, default='')
|
||||
description = models.TextField(blank=True, null=True)
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@ import os
|
||||
from datetime import datetime
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.models import Recipe, RecipeImport, SyncLog
|
||||
from cookbook.provider.provider import Provider
|
||||
|
||||
@@ -31,7 +31,7 @@ class Dropbox(Provider):
|
||||
except ValueError:
|
||||
log_entry = SyncLog(status='ERROR', msg=str(r), sync=monitor)
|
||||
log_entry.save()
|
||||
return r
|
||||
return log_entry
|
||||
|
||||
import_count = 0
|
||||
# TODO check if has_more is set and import that as well
|
||||
@@ -59,7 +59,7 @@ class Dropbox(Provider):
|
||||
monitor.last_checked = datetime.now()
|
||||
monitor.save()
|
||||
|
||||
return True
|
||||
return log_entry
|
||||
|
||||
@staticmethod
|
||||
def create_share_link(recipe):
|
||||
@@ -107,7 +107,7 @@ class Dropbox(Provider):
|
||||
recipe.save()
|
||||
|
||||
url = recipe.link.replace('www.dropbox.', 'dl.dropboxusercontent.')
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
response = requests.get(url)
|
||||
|
||||
return io.BytesIO(response.content)
|
||||
|
||||
@@ -12,21 +12,25 @@ class Local(Provider):
|
||||
|
||||
@staticmethod
|
||||
def import_all(monitor):
|
||||
if '/etc/' in monitor.path or '/root/' in monitor.path or '/mediafiles/' in monitor.path or '/usr/' in monitor.path:
|
||||
return False
|
||||
|
||||
files = [f for f in listdir(monitor.path) if isfile(join(monitor.path, f))]
|
||||
|
||||
import_count = 0
|
||||
for file in files:
|
||||
path = monitor.path + '/' + file
|
||||
if not Recipe.objects.filter(file_path__iexact=path, space=monitor.space).exists() and not RecipeImport.objects.filter(file_path=path, space=monitor.space).exists():
|
||||
name = os.path.splitext(file)[0]
|
||||
new_recipe = RecipeImport(
|
||||
name=name,
|
||||
file_path=path,
|
||||
storage=monitor.storage,
|
||||
space=monitor.space,
|
||||
)
|
||||
new_recipe.save()
|
||||
import_count += 1
|
||||
if file.endswith('.pdf') or file.endswith('.png') or file.endswith('.jpg') or file.endswith('.jpeg') or file.endswith('.gif'):
|
||||
path = monitor.path + '/' + file
|
||||
if not Recipe.objects.filter(file_path__iexact=path, space=monitor.space).exists() and not RecipeImport.objects.filter(file_path=path, space=monitor.space).exists():
|
||||
name = os.path.splitext(file)[0]
|
||||
new_recipe = RecipeImport(
|
||||
name=name,
|
||||
file_path=path,
|
||||
storage=monitor.storage,
|
||||
space=monitor.space,
|
||||
)
|
||||
new_recipe.save()
|
||||
import_count += 1
|
||||
|
||||
log_entry = SyncLog(
|
||||
status='SUCCESS',
|
||||
@@ -38,7 +42,7 @@ class Local(Provider):
|
||||
monitor.last_checked = datetime.now()
|
||||
monitor.save()
|
||||
|
||||
return True
|
||||
return log_entry
|
||||
|
||||
@staticmethod
|
||||
def get_file(recipe):
|
||||
|
||||
@@ -4,8 +4,9 @@ import tempfile
|
||||
from datetime import datetime
|
||||
|
||||
import requests
|
||||
import validators
|
||||
import webdav3.client as wc
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.models import Recipe, RecipeImport, SyncLog
|
||||
from cookbook.provider.provider import Provider
|
||||
from requests.auth import HTTPBasicAuth
|
||||
@@ -65,7 +66,7 @@ class Nextcloud(Provider):
|
||||
monitor.last_checked = datetime.now()
|
||||
monitor.save()
|
||||
|
||||
return True
|
||||
return log_entry
|
||||
|
||||
@staticmethod
|
||||
def create_share_link(recipe):
|
||||
@@ -93,7 +94,7 @@ class Nextcloud(Provider):
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
r = requests.get(
|
||||
url,
|
||||
headers=headers,
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
from rest_framework.schemas.openapi import AutoSchema
|
||||
from rest_framework.schemas.utils import is_list_view
|
||||
|
||||
|
||||
class QueryParam(object):
|
||||
def __init__(self, name, description=None, qtype='string', required=False):
|
||||
self.name = name
|
||||
self.description = description
|
||||
self.qtype = qtype
|
||||
self.required = required
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.name}, {self.qtype}, {self.description}'
|
||||
|
||||
|
||||
class QueryParamAutoSchema(AutoSchema):
|
||||
def get_path_parameters(self, path, method):
|
||||
if not is_list_view(path, method, self.view):
|
||||
return super().get_path_parameters(path, method)
|
||||
parameters = super().get_path_parameters(path, method)
|
||||
for q in self.view.query_params:
|
||||
parameters.append({
|
||||
"name": q.name, "in": "query", "required": q.required,
|
||||
"description": q.description,
|
||||
'schema': {'type': q.qtype, },
|
||||
})
|
||||
|
||||
return parameters
|
||||
|
||||
|
||||
class TreeSchema(AutoSchema):
|
||||
def get_path_parameters(self, path, method):
|
||||
if not is_list_view(path, method, self.view):
|
||||
return super(TreeSchema, self).get_path_parameters(path, method)
|
||||
|
||||
api_name = path.split('/')[2]
|
||||
parameters = super().get_path_parameters(path, method)
|
||||
parameters.append({
|
||||
"name": 'query', "in": "query", "required": False,
|
||||
"description": 'Query string matched against {} name.'.format(api_name),
|
||||
'schema': {'type': 'string', },
|
||||
})
|
||||
parameters.append({
|
||||
"name": 'root', "in": "query", "required": False,
|
||||
"description": 'Return first level children of {obj} with ID [int]. Integer 0 will return root {obj}s.'.format(
|
||||
obj=api_name),
|
||||
'schema': {'type': 'integer', },
|
||||
})
|
||||
parameters.append({
|
||||
"name": 'tree', "in": "query", "required": False,
|
||||
"description": 'Return all self and children of {} with ID [int].'.format(api_name),
|
||||
'schema': {'type': 'integer', },
|
||||
})
|
||||
return parameters
|
||||
|
||||
|
||||
class FilterSchema(AutoSchema):
|
||||
def get_path_parameters(self, path, method):
|
||||
if not is_list_view(path, method, self.view):
|
||||
return super(FilterSchema, self).get_path_parameters(path, method)
|
||||
|
||||
api_name = path.split('/')[2]
|
||||
parameters = super().get_path_parameters(path, method)
|
||||
parameters.append({
|
||||
"name": 'query', "in": "query", "required": False,
|
||||
"description": 'Query string matched against {} name.'.format(api_name),
|
||||
'schema': {'type': 'string', },
|
||||
})
|
||||
return parameters
|
||||
File diff suppressed because it is too large
Load Diff
@@ -120,37 +120,6 @@ def update_food_inheritance(sender, instance=None, created=False, **kwargs):
|
||||
child.save()
|
||||
|
||||
|
||||
@receiver(post_save, sender=MealPlan)
|
||||
def auto_add_shopping(sender, instance=None, created=False, weak=False, **kwargs):
|
||||
print("MEAL_AUTO_ADD Signal trying to auto add to shopping")
|
||||
if not instance:
|
||||
print("MEAL_AUTO_ADD Instance is none")
|
||||
return
|
||||
|
||||
try:
|
||||
space = instance.get_space()
|
||||
user = instance.get_owner()
|
||||
with scope(space=space):
|
||||
slr_exists = instance.shoppinglistrecipe_set.exists()
|
||||
|
||||
if not created and slr_exists:
|
||||
for x in instance.shoppinglistrecipe_set.all():
|
||||
# assuming that permissions checks for the MealPlan have happened upstream
|
||||
if instance.servings != x.servings:
|
||||
SLR = RecipeShoppingEditor(id=x.id, user=user, space=instance.space)
|
||||
SLR.edit_servings(servings=instance.servings)
|
||||
elif not user.userpreference.mealplan_autoadd_shopping or not instance.recipe:
|
||||
print("MEAL_AUTO_ADD No recipe or no setting")
|
||||
return
|
||||
|
||||
if created:
|
||||
SLR = RecipeShoppingEditor(user=user, space=space)
|
||||
SLR.create(mealplan=instance, servings=instance.servings)
|
||||
print("MEAL_AUTO_ADD Created SLR")
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
|
||||
@receiver(post_save, sender=Unit)
|
||||
def clear_unit_cache(sender, instance=None, created=False, **kwargs):
|
||||
if instance:
|
||||
|
||||
87
cookbook/static/assets/logo_color_plan.svg
Normal file
87
cookbook/static/assets/logo_color_plan.svg
Normal file
@@ -0,0 +1,87 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1"
|
||||
id="svg48" inkscape:export-xdpi="48" inkscape:export-ydpi="48" sodipodi:docname="logo_color_shopping.svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:serif="http://www.serif.com/" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 558.1 558.1"
|
||||
style="enable-background:new 0 0 558.1 558.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:url(#ellipse2_00000062882008473870802360000001235346600214014370_);}
|
||||
.st1{clip-path:url(#SVGID_00000040562990235419179500000014537515251997333940_);}
|
||||
.st2{fill-rule:evenodd;clip-rule:evenodd;fill:#161616;}
|
||||
.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#FFCB76;}
|
||||
.st4{fill-rule:evenodd;clip-rule:evenodd;fill:#FF6F00;}
|
||||
.st5{clip-path:url(#SVGID_00000026884998257896383920000012290328997039565247_);}
|
||||
.st6{fill-rule:evenodd;clip-rule:evenodd;fill:#FFD100;}
|
||||
.st7{fill:#161616;}
|
||||
</style>
|
||||
<sodipodi:namedview bordercolor="#666666" borderopacity="1" gridtolerance="10" guidetolerance="10" id="namedview50" inkscape:current-layer="svg48" inkscape:cx="256" inkscape:cy="256" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="1377" inkscape:window-maximized="1" inkscape:window-width="2560" inkscape:window-x="2552" inkscape:window-y="-8" inkscape:zoom="2.0039062" objecttolerance="10" pagecolor="#ffffff" showgrid="false">
|
||||
</sodipodi:namedview>
|
||||
<g id="Kreis" transform="matrix(0.92371046,0,0,0.95776263,3.7134303,-54.329713)">
|
||||
|
||||
<linearGradient id="ellipse2_00000072976586691886204630000005673338158137684613_" gradientUnits="userSpaceOnUse" x1="-24.1585" y1="348.0664" x2="-23.1585" y2="348.0664" gradientTransform="matrix(2.147900e-06 0 0 -2.227081e-06 4347.1548 66.3621)">
|
||||
<stop offset="0" style="stop-color:#272727"/>
|
||||
<stop offset="1" style="stop-color:#6C6C6C"/>
|
||||
</linearGradient>
|
||||
|
||||
<ellipse id="ellipse2" style="fill-rule:evenodd;clip-rule:evenodd;fill:url(#ellipse2_00000072976586691886204630000005673338158137684613_);" cx="298.1" cy="348.1" rx="302.1" ry="291.3"/>
|
||||
<g>
|
||||
<defs>
|
||||
<circle id="SVGID_1_" cx="298.1" cy="348.1" r="279"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_00000080899089203538361760000014164288875061347472_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g id="g18" style="clip-path:url(#SVGID_00000080899089203538361760000014164288875061347472_);">
|
||||
<g id="Shadow" transform="matrix(1.10322,0,0,1.064,-5.58287,50.5786)">
|
||||
<path id="path7" class="st2" d="M163.2,477.5l271.2,271.2L759.1,557L416.4,214.2L163.2,477.5z"/>
|
||||
<g id="g11" transform="translate(-4.22105,0.775864)">
|
||||
<path id="path9" class="st2" d="M223.4,188.6L545.8,511l121-106.1L326,64.1l-3.2,78.4L223.4,188.6z"/>
|
||||
</g>
|
||||
<g id="g15" transform="translate(-85.3876,27.8512)">
|
||||
<path id="path13" class="st2" d="M328.5,154.7l322.4,322.4l3.1-71.6L313.3,64.7l-3.6,82.2L328.5,154.7z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="g23" transform="matrix(0.93750213,0,0,0.93750213,15.953517,15.99888)">
|
||||
<path id="path21" class="st3" d="M280.6,238.7c35.1,0,65.8-14.8,85.3-30.1c19.7-15.6,48.3-12.5,64.2,6.9
|
||||
c26.2,31.7,41.8,71.9,41.8,115.6c0,71.6-44.2,159.9-105.6,190.9c-26.4,13.3-53.8,19.6-85.6,19.6l0,0h-0.1h-0.1l0,0
|
||||
c-31.8,0-59.2-6.3-85.6-19.6C133.5,491.1,89.3,402.7,89.3,331.2c0-43.7,15.7-83.9,41.8-115.6c15.9-19.4,44.5-22.5,64.2-6.9
|
||||
C214.8,224,245.5,238.7,280.6,238.7L280.6,238.7z"/>
|
||||
</g>
|
||||
<g id="Flame-2" transform="matrix(0.61547875,0,0,0.56833279,-138.25728,-438.60298)" serif:id="Flame 2">
|
||||
<path id="path25" class="st4" d="M636,823.4c-2.8-4-2.8-9.6-0.1-13.7c2.8-4.1,7.7-5.6,12.1-3.9c22.2,8.9,51.2,22.5,73.8,40.9
|
||||
c46.9,38.3,59.7,63.9,70.2,90.3c12.4,31.2,14.2,63.5,11.6,86c-7.6,64.6-56,117.9-125,117.9c-69,0-123.9-52.8-125-117.9
|
||||
c-0.7-39.2,12.1-70.5,26.1-92.8c3.5-5.6,10-7.8,15.8-5.6c5.8,2.3,9.5,8.6,8.8,15.3c-2,14.1-3.3,28.8-2.7,40.6
|
||||
c2.2,39.8,25.9,50,50.2,49.8c25.9-0.2,52.1-22.2,42.7-78.4C686.3,902.9,656.8,853.5,636,823.4L636,823.4z"/>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_00000067227953264718972400000007310393595166440114_" d="M636,823.4c-2.8-4-2.8-9.6-0.1-13.7
|
||||
c2.8-4.1,7.7-5.6,12.1-3.9c22.2,8.9,51.2,22.5,73.8,40.9c46.9,38.3,59.7,63.9,70.2,90.3c12.4,31.2,14.2,63.5,11.6,86
|
||||
c-7.6,64.6-56,117.9-125,117.9c-69,0-123.9-52.8-125-117.9c-0.7-39.2,12.1-70.5,26.1-92.8c3.5-5.6,10-7.8,15.8-5.6
|
||||
c5.8,2.3,9.5,8.6,8.8,15.3c-2,14.1-3.3,28.8-2.7,40.6c2.2,39.8,25.9,50,50.2,49.8c25.9-0.2,52.1-22.2,42.7-78.4
|
||||
C686.3,902.9,656.8,853.5,636,823.4L636,823.4z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_00000178886517717031376290000002615817110574070691_">
|
||||
<use xlink:href="#SVGID_00000067227953264718972400000007310393595166440114_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g id="g34" style="clip-path:url(#SVGID_00000178886517717031376290000002615817110574070691_);">
|
||||
<g id="g32" transform="matrix(1.28784,-0.270602,0.285942,1.59598,247.349,825.209)">
|
||||
<path id="path30" class="st6" d="M279.8,36.7c28.5,13.5,59.3,44.8,67.8,85.1c14.1,67-25.3,85.6-59.1,84
|
||||
c-54.2-2.6-72.4-45.5-36.2-97.1C274.8,76.8,253.9,24.5,279.8,36.7z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path class="st7" d="M245.7,280.1c6.2,0,11.1,5,11.1,11.1v11.1h44.5v-11.1c0-6.2,5-11.1,11.1-11.1s11.1,5,11.1,11.1v11.1h16.7
|
||||
c9.2,0,16.7,7.5,16.7,16.7v16.7H201.2V319c0-9.2,7.5-16.7,16.7-16.7h16.7v-11.1C234.5,285,239.5,280.1,245.7,280.1z M201.2,346.8
|
||||
h155.8v94.6c0,9.2-7.5,16.7-16.7,16.7H217.8c-9.2,0-16.7-7.5-16.7-16.7V346.8z M223.4,374.6v11.1c0,3.1,2.5,5.6,5.6,5.6h11.1
|
||||
c3.1,0,5.6-2.5,5.6-5.6v-11.1c0-3.1-2.5-5.6-5.6-5.6H229C225.9,369.1,223.4,371.6,223.4,374.6z M267.9,374.6v11.1
|
||||
c0,3.1,2.5,5.6,5.6,5.6h11.1c3.1,0,5.6-2.5,5.6-5.6v-11.1c0-3.1-2.5-5.6-5.6-5.6h-11.1C270.4,369.1,267.9,371.6,267.9,374.6z
|
||||
M318,369.1c-3.1,0-5.6,2.5-5.6,5.6v11.1c0,3.1,2.5,5.6,5.6,5.6h11.1c3.1,0,5.6-2.5,5.6-5.6v-11.1c0-3.1-2.5-5.6-5.6-5.6H318z
|
||||
M223.4,419.1v11.1c0,3.1,2.5,5.6,5.6,5.6h11.1c3.1,0,5.6-2.5,5.6-5.6v-11.1c0-3.1-2.5-5.6-5.6-5.6H229
|
||||
C225.9,413.6,223.4,416.1,223.4,419.1z M273.5,413.6c-3.1,0-5.6,2.5-5.6,5.6v11.1c0,3.1,2.5,5.6,5.6,5.6h11.1c3.1,0,5.6-2.5,5.6-5.6
|
||||
v-11.1c0-3.1-2.5-5.6-5.6-5.6H273.5z M312.4,419.1v11.1c0,3.1,2.5,5.6,5.6,5.6h11.1c3.1,0,5.6-2.5,5.6-5.6v-11.1
|
||||
c0-3.1-2.5-5.6-5.6-5.6H318C314.9,413.6,312.4,416.1,312.4,419.1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.5 KiB |
BIN
cookbook/static/assets/logo_color_plan_144.png
Normal file
BIN
cookbook/static/assets/logo_color_plan_144.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.5 KiB |
BIN
cookbook/static/assets/logo_color_plan_512.png
Normal file
BIN
cookbook/static/assets/logo_color_plan_512.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
83
cookbook/static/assets/logo_color_shopping.svg
Normal file
83
cookbook/static/assets/logo_color_shopping.svg
Normal file
@@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1"
|
||||
id="svg48" inkscape:export-xdpi="48" inkscape:export-ydpi="48" sodipodi:docname="logo_color_shopping.svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:serif="http://www.serif.com/" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 558.1 558.1"
|
||||
style="enable-background:new 0 0 558.1 558.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:url(#ellipse2_00000123406314579419878720000015292012387505797789_);}
|
||||
.st1{clip-path:url(#SVGID_00000069378195777491616980000011609770225407185072_);}
|
||||
.st2{fill-rule:evenodd;clip-rule:evenodd;fill:#161616;}
|
||||
.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#FFCB76;}
|
||||
.st4{fill-rule:evenodd;clip-rule:evenodd;fill:#FF6F00;}
|
||||
.st5{clip-path:url(#SVGID_00000129168706913539839680000006972943119257724314_);}
|
||||
.st6{fill-rule:evenodd;clip-rule:evenodd;fill:#FFD100;}
|
||||
</style>
|
||||
<sodipodi:namedview bordercolor="#666666" borderopacity="1" gridtolerance="10" guidetolerance="10" id="namedview50" inkscape:current-layer="svg48" inkscape:cx="256" inkscape:cy="256" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="1377" inkscape:window-maximized="1" inkscape:window-width="2560" inkscape:window-x="2552" inkscape:window-y="-8" inkscape:zoom="2.0039062" objecttolerance="10" pagecolor="#ffffff" showgrid="false">
|
||||
</sodipodi:namedview>
|
||||
<g id="Kreis" transform="matrix(0.92371046,0,0,0.95776263,3.7134303,-54.329713)">
|
||||
|
||||
<linearGradient id="ellipse2_00000092432231847401152480000013557045245219773118_" gradientUnits="userSpaceOnUse" x1="-24.1585" y1="348.0664" x2="-23.1585" y2="348.0664" gradientTransform="matrix(2.147900e-06 0 0 -2.227081e-06 4347.1548 66.3621)">
|
||||
<stop offset="0" style="stop-color:#272727"/>
|
||||
<stop offset="1" style="stop-color:#6C6C6C"/>
|
||||
</linearGradient>
|
||||
|
||||
<ellipse id="ellipse2" style="fill-rule:evenodd;clip-rule:evenodd;fill:url(#ellipse2_00000092432231847401152480000013557045245219773118_);" cx="298.1" cy="348.1" rx="302.1" ry="291.3"/>
|
||||
<g>
|
||||
<defs>
|
||||
<circle id="SVGID_1_" cx="298.1" cy="348.1" r="279"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_00000078750348294658121660000005213362532985289101_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g id="g18" style="clip-path:url(#SVGID_00000078750348294658121660000005213362532985289101_);">
|
||||
<g id="Shadow" transform="matrix(1.10322,0,0,1.064,-5.58287,50.5786)">
|
||||
<path id="path7" class="st2" d="M163.2,477.5l271.2,271.2L759.1,557L416.4,214.2L163.2,477.5z"/>
|
||||
<g id="g11" transform="translate(-4.22105,0.775864)">
|
||||
<path id="path9" class="st2" d="M223.4,188.6L545.8,511l121-106.1L326,64.1l-3.2,78.4L223.4,188.6z"/>
|
||||
</g>
|
||||
<g id="g15" transform="translate(-85.3876,27.8512)">
|
||||
<path id="path13" class="st2" d="M328.5,154.7l322.4,322.4l3.1-71.6L313.3,64.7l-3.6,82.2L328.5,154.7z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="g23" transform="matrix(0.93750213,0,0,0.93750213,15.953517,15.99888)">
|
||||
<path id="path21" class="st3" d="M280.6,238.7c35.1,0,65.8-14.8,85.3-30.1c19.7-15.6,48.3-12.5,64.2,6.9
|
||||
c26.2,31.7,41.8,71.9,41.8,115.6c0,71.6-44.2,159.9-105.6,190.9c-26.4,13.3-53.8,19.6-85.6,19.6l0,0h-0.1h-0.1l0,0
|
||||
c-31.8,0-59.2-6.3-85.6-19.6C133.5,491.1,89.3,402.7,89.3,331.2c0-43.7,15.7-83.9,41.8-115.6c15.9-19.4,44.5-22.5,64.2-6.9
|
||||
C214.8,224,245.5,238.7,280.6,238.7L280.6,238.7z"/>
|
||||
</g>
|
||||
<g id="Flame-2" transform="matrix(0.61547875,0,0,0.56833279,-138.25728,-438.60298)" serif:id="Flame 2">
|
||||
<path id="path25" class="st4" d="M636,823.4c-2.8-4-2.8-9.6-0.1-13.7c2.8-4.1,7.7-5.6,12.1-3.9c22.2,8.9,51.2,22.5,73.8,40.9
|
||||
c46.9,38.3,59.7,63.9,70.2,90.3c12.4,31.2,14.2,63.5,11.6,86c-7.6,64.6-56,117.9-125,117.9c-69,0-123.9-52.8-125-117.9
|
||||
c-0.7-39.2,12.1-70.5,26.1-92.8c3.5-5.6,10-7.8,15.8-5.6c5.8,2.3,9.5,8.6,8.8,15.3c-2,14.1-3.3,28.8-2.7,40.6
|
||||
c2.2,39.8,25.9,50,50.2,49.8c25.9-0.2,52.1-22.2,42.7-78.4C686.3,902.9,656.8,853.5,636,823.4L636,823.4z"/>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_00000170974775404888027640000005842834300324528060_" d="M636,823.4c-2.8-4-2.8-9.6-0.1-13.7
|
||||
c2.8-4.1,7.7-5.6,12.1-3.9c22.2,8.9,51.2,22.5,73.8,40.9c46.9,38.3,59.7,63.9,70.2,90.3c12.4,31.2,14.2,63.5,11.6,86
|
||||
c-7.6,64.6-56,117.9-125,117.9c-69,0-123.9-52.8-125-117.9c-0.7-39.2,12.1-70.5,26.1-92.8c3.5-5.6,10-7.8,15.8-5.6
|
||||
c5.8,2.3,9.5,8.6,8.8,15.3c-2,14.1-3.3,28.8-2.7,40.6c2.2,39.8,25.9,50,50.2,49.8c25.9-0.2,52.1-22.2,42.7-78.4
|
||||
C686.3,902.9,656.8,853.5,636,823.4L636,823.4z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_00000137101924108689735560000002063526552501109413_">
|
||||
<use xlink:href="#SVGID_00000170974775404888027640000005842834300324528060_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<g id="g34" style="clip-path:url(#SVGID_00000137101924108689735560000002063526552501109413_);">
|
||||
<g id="g32" transform="matrix(1.28784,-0.270602,0.285942,1.59598,247.349,825.209)">
|
||||
<path id="path30" class="st6" d="M279.8,36.7c28.5,13.5,59.3,44.8,67.8,85.1c14.1,67-25.3,85.6-59.1,84
|
||||
c-54.2-2.6-72.4-45.5-36.2-97.1C274.8,76.8,253.9,24.5,279.8,36.7z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path id="path958" class="st2" d="M182.4,290.6c0-4.5,3.6-8.1,8.1-8.1h15.4c7.4,0,14,4.3,17.1,10.8h139.1c8.9,0,15.4,8.5,13.1,17.1
|
||||
l-13.9,51.5c-2.9,10.6-12.5,18-23.5,18h-97.6l1.8,9.6c0.7,3.8,4.1,6.6,8,6.6h97.6c4.5,0,8.1,3.6,8.1,8.1s-3.6,8.1-8.1,8.1H250
|
||||
c-11.7,0-21.8-8.3-23.9-19.8L208.6,301c-0.2-1.3-1.4-2.2-2.7-2.2h-15.4C186,298.8,182.4,295.1,182.4,290.6L182.4,290.6z
|
||||
M225.7,439.5c0-9,7.3-16.3,16.2-16.3c9,0,16.3,7.3,16.3,16.2c0,0,0,0,0,0c0,9-7.3,16.3-16.2,16.3
|
||||
C233,455.8,225.7,448.5,225.7,439.5C225.7,439.6,225.7,439.5,225.7,439.5z M339.4,423.3c9,0,16.2,7.3,16.3,16.2
|
||||
c0,9-7.3,16.2-16.2,16.3c0,0,0,0,0,0c-9,0-16.2-7.3-16.3-16.2C323.2,430.6,330.4,423.3,339.4,423.3
|
||||
C339.4,423.3,339.4,423.3,339.4,423.3z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user