Compare commits
531 commits
Author | SHA1 | Date | |
---|---|---|---|
|
ba06a08d29 | ||
|
b0156b1621 | ||
|
5755ea24cd | ||
|
efb463bbcc | ||
|
54e7fb767b | ||
|
067b88ecf5 | ||
|
fef28dcde2 | ||
|
7438c52c3e | ||
|
bd8bcfd2fc | ||
|
81f648047c | ||
|
0b0b6918bf | ||
|
5741a3571a | ||
|
0fedb675f0 | ||
|
47833a6b8c | ||
|
1976d38cca | ||
|
cb90704387 | ||
|
b9319a569f | ||
|
7686b73a84 | ||
|
1108485aa4 | ||
|
d786e7b6ff | ||
|
98eb4db8b9 | ||
|
48e741f98c | ||
|
b6ea8226b3 | ||
|
07a7987d99 | ||
|
0fb0a8ed55 | ||
|
82a58858a4 | ||
|
eba34e54cf | ||
|
2cfac0c190 | ||
|
b518ba65f1 | ||
|
3306e82859 | ||
|
7dd66f0a6f | ||
|
b4cae36582 | ||
|
cb1332176d | ||
|
a0c0534a01 | ||
|
262861ab0b | ||
|
9635d60442 | ||
|
47416690f3 | ||
|
65b144f569 | ||
|
16f8c66b55 | ||
|
c8ec2359d6 | ||
|
4d7ae4215d | ||
|
53fd334032 | ||
|
e8284addf0 | ||
|
6f47c295e7 | ||
|
6e066888fe | ||
|
74afabf954 | ||
|
dd2b2fcbe7 | ||
|
da4b443c73 | ||
|
f08fc666ff | ||
|
84ca90561b | ||
|
e124393674 | ||
|
7a9642f9b6 | ||
|
7d0e3b1207 | ||
|
04d0c371f7 | ||
|
1aef54a3f3 | ||
|
52e7a4ca82 | ||
|
b6b534c638 | ||
|
4c91ffce18 | ||
|
be84760b37 | ||
|
bd6c8dc4c7 | ||
|
91b10aebe2 | ||
|
edc77e1eab | ||
|
7796d75de2 | ||
|
539bc5945b | ||
|
27c8e79063 | ||
|
b4b6af88f7 | ||
|
d6fb4b7439 | ||
|
45db300b59 | ||
|
865e297edb | ||
|
e49fb0280a | ||
|
787cfcd21c | ||
|
7b0297f63a | ||
|
a0fd9e128c | ||
|
af354e5cbb | ||
|
36c30e3e60 | ||
|
0ff1d805f9 | ||
|
f47923d1ee | ||
|
ed9ded697a | ||
|
a7e598ed39 | ||
|
110d5dde30 | ||
|
357530f20f | ||
|
680d829d8b | ||
|
ea2cff73fc | ||
|
3d04289ddf | ||
|
5498925b1d | ||
|
25e8c3b1d8 | ||
|
0bc12d8252 | ||
|
f561924869 | ||
|
796449de03 | ||
|
3d66d444e4 | ||
|
e15311f6cc | ||
|
6f7c3fea78 | ||
|
e4da7b7350 | ||
|
de241cc8c6 | ||
|
7dabd7a8f2 | ||
|
470f882d26 | ||
|
6b6ec69ea2 | ||
|
42950c8f29 | ||
|
2063140f72 | ||
|
c503a14116 | ||
|
9ba9be7851 | ||
|
64acf8faa1 | ||
|
3e2461e946 | ||
|
dd0b0e4e2d | ||
|
f2c6f88f31 | ||
|
ce43126d40 | ||
|
960763c26e | ||
|
f38361d565 | ||
|
bbc1cb6e1e | ||
|
14d5794869 | ||
|
1c9bc56266 | ||
|
4da1ad44ba | ||
|
7c8c5bc847 | ||
|
a96901f5e7 | ||
|
a89eab0ba3 | ||
|
65c69fed5b | ||
|
3b56fbd49b | ||
|
bb53b1a273 | ||
|
f030f1d64a | ||
|
ca3d913d9a | ||
|
6853f27be4 | ||
|
44778dc2bd | ||
|
aa61d58331 | ||
|
2021fb17dc | ||
|
0e0bb9d56f | ||
|
36e185b8f4 | ||
|
c3fd2866b4 | ||
|
bee2aeb87b | ||
|
3db96dbcac | ||
|
5357b89539 | ||
|
999431fdc1 | ||
|
d9583f3dd9 | ||
|
a0e545103c | ||
|
a82ba38b6d | ||
|
5c4e81da27 | ||
|
1a7179dde4 | ||
|
a33d8c4441 | ||
|
58848093dd | ||
|
ee0e859c70 | ||
|
fdbc66bbe5 | ||
|
a9db1a24b7 | ||
|
1ed4082af2 | ||
|
ef8e792e70 | ||
|
c61635d7d4 | ||
|
9e305bf16e | ||
|
11244b9b32 | ||
|
48c2f928de | ||
|
77ba89b788 | ||
|
5409c70fbe | ||
|
7f011b69b3 | ||
|
fad7a0daf4 | ||
|
968a9622a1 | ||
|
9db68244b0 | ||
|
8d6e83da77 | ||
|
878d8a9393 | ||
|
aaaaedbeb9 | ||
|
6f4024582b | ||
|
0771660022 | ||
|
d53f2a4ef7 | ||
|
109d71c726 | ||
|
ab3a6278de | ||
|
e2977ea1da | ||
|
9968faae18 | ||
|
ebb4451104 | ||
|
573c1ec828 | ||
|
2d69bee340 | ||
|
16def65808 | ||
|
a7ad5a6feb | ||
|
73b41a1e56 | ||
|
fd788d5395 | ||
|
9f48727396 | ||
|
c93c0db8a9 | ||
|
3ca57f95e8 | ||
|
2f1c5d42c4 | ||
|
743fa68f42 | ||
|
7061d85096 | ||
|
b2056122cd | ||
|
5b11d213bb | ||
|
3047d7537a | ||
|
4b7e94978a | ||
|
4b7dd72353 | ||
|
7a7493ec77 | ||
|
256090b747 | ||
|
3386a8ebdd | ||
|
0c6f46cd02 | ||
|
e4b2e8f9eb | ||
|
03c8a018e0 | ||
|
c773acead6 | ||
|
bc46115e63 | ||
|
b82968acec | ||
|
69c5ddd8f2 | ||
|
c65050d4e1 | ||
|
44cff11f33 | ||
|
0c91e9d814 | ||
|
728b293195 | ||
|
1abe1b4076 | ||
|
75093b7c93 | ||
|
6659aeadb8 | ||
|
5fee12c32b | ||
|
800634ae28 | ||
|
842804e9ab | ||
|
e539a64b88 | ||
|
ce10c46994 | ||
|
6e129761ab | ||
|
1b4d7b090d | ||
|
a1cfff465f | ||
|
04e28ea67f | ||
|
afdd9e0a61 | ||
|
7f027bb292 | ||
|
8bbd32a63f | ||
|
14722c7991 | ||
|
1944a3e888 | ||
|
3cb9fb355d | ||
|
3d019e9804 | ||
|
88fa5614a3 | ||
|
5b73e11d32 | ||
|
e32cccd0d3 | ||
|
a072e7dab7 | ||
|
ec62051820 | ||
|
fc1bf1fbb7 | ||
|
3b851f5790 | ||
|
a580d2715a | ||
|
e8fe4ac2ec | ||
|
4337bb3daf | ||
|
7c15fdf76c | ||
|
2ba7f11873 | ||
|
98550edace | ||
|
f59187450c | ||
|
f63bf33135 | ||
|
61b35bb075 | ||
|
58be4cec5c | ||
|
dfbacb66a6 | ||
|
460c5a5cbe | ||
|
926914e3c4 | ||
|
395a242d44 | ||
|
ffb069d20f | ||
|
7889eceea4 | ||
|
d2af7fd3e6 | ||
|
71c75225f5 | ||
|
a9a80b1d24 | ||
|
a8501eb542 | ||
|
a8e7712526 | ||
|
b624aeebd7 | ||
|
4d18c611df | ||
|
773b7b149e | ||
|
3cf2962af0 | ||
|
a2d73b42a3 | ||
|
4a72ca42a0 | ||
|
8e0cf213ac | ||
|
543fa35ac1 | ||
|
98dc63dc84 | ||
|
ae124bce31 | ||
|
1c49617c2e | ||
|
27adbf406c | ||
|
c50a821dd6 | ||
|
f4473a1f73 | ||
|
a67354af2d | ||
|
4dca746392 | ||
|
19ff7b2ef9 | ||
|
f91290a3b9 | ||
|
7cf11efa05 | ||
|
1c1fb8455b | ||
|
1dab3bf25c | ||
|
d444c7e096 | ||
|
492d26cad3 | ||
|
ed61ddaa18 | ||
|
9b94fda320 | ||
|
bb281168ed | ||
|
e97fa96a04 | ||
|
04ade1935a | ||
|
cb30672c9a | ||
|
d2adc2d052 | ||
|
d9e542d118 | ||
|
d536035424 | ||
|
39597bd460 | ||
|
2d64c363be | ||
|
7822e357a3 | ||
|
90b2f935b7 | ||
|
f1f91f0c4e | ||
|
a10f6dc4bf | ||
|
41b67d36ca | ||
|
92957103ba | ||
|
605e62656c | ||
|
87d911de6a | ||
|
d86ce4b145 | ||
|
b5142386fe | ||
|
b42f8ce87f | ||
|
f157453c5a | ||
|
783af542dc | ||
|
1f5a5278c4 | ||
|
8a093da63c | ||
|
bb194afb4c | ||
|
7ccaa2f592 | ||
|
023ed0360b | ||
|
cd43fff8c0 | ||
|
4bf7ca7de6 | ||
|
4c673451b4 | ||
|
75625229e2 | ||
|
30ff5759e1 | ||
|
242a5e8dde | ||
|
7945f0d3c5 | ||
|
8721fe88e6 | ||
|
beffe0c08f | ||
|
4d463b784b | ||
|
4ca37dd0de | ||
|
b6817c1861 | ||
|
965ce1d989 | ||
|
1f9d7c1232 | ||
|
b3d2cc12cd | ||
|
695bed4c4d | ||
|
e976f60987 | ||
|
e08e670b7b | ||
|
f409b000cf | ||
|
e3b77d027d | ||
|
740fe2ca89 | ||
|
1230717600 | ||
|
4378df16ad | ||
|
a2b599e8db | ||
|
68afde7994 | ||
|
ac430219b6 | ||
|
27bc4f4305 | ||
|
b26a38d4ec | ||
|
ec94c95cb1 | ||
|
d60431f58d | ||
|
845f01ccda | ||
|
87b25b41ee | ||
|
a56b2876c6 | ||
|
5c6a4f7531 | ||
|
7d1fadca18 | ||
|
a5c893574e | ||
|
7cbe37efbd | ||
|
c4a64d9d79 | ||
|
46036bb22f | ||
|
df39d06cb4 | ||
|
83b6e153ca | ||
|
b5fb9fc392 | ||
|
9c0341fde1 | ||
|
6a8405d12d | ||
|
7a47559fd4 | ||
|
bad1943e41 | ||
|
9a2f42116f | ||
|
b5742257e7 | ||
|
c96ceaf3a7 | ||
|
01c4b224a0 | ||
|
64051a4591 | ||
|
c4c654f543 | ||
|
26280d8e62 | ||
|
196dd97b8f | ||
|
c25cd05d6e | ||
|
e80910f8a9 | ||
|
8e2bc1fd68 | ||
|
f9abbfbbf4 | ||
|
7d82ed7823 | ||
|
1c5dd4fa60 | ||
|
3cc6d3d49c | ||
|
901dbe192a | ||
|
285e7d5ad0 | ||
|
e350f3f2ed | ||
|
13b9771ab2 | ||
|
85d85f26da | ||
|
43c8e56fbd | ||
|
277b21b0e4 | ||
|
225afce711 | ||
|
7650ab3827 | ||
|
7fd8c731ea | ||
|
72e0eef396 | ||
|
6d90875705 | ||
|
ac4e4b0b54 | ||
|
025951ddf2 | ||
|
c9520162bd | ||
|
441c05e736 | ||
|
4ba2ae90cf | ||
|
b408e7a617 | ||
|
97c994b834 | ||
|
b7d1fc2a51 | ||
|
f0ab882e6d | ||
|
8d6155fe21 | ||
|
f7f9022570 | ||
|
106d8b755c | ||
|
62ff7bef80 | ||
|
51d4b7838f | ||
|
0305fbc5e9 | ||
|
2248d9bacf | ||
|
0c8c70f9d8 | ||
|
028651703b | ||
|
6d1514a5f4 | ||
|
f2b37adae6 | ||
|
0dcb4a9497 | ||
|
cca24ddb84 | ||
|
f2a7f502b7 | ||
|
c326650fcd | ||
|
999799adfc | ||
|
c10cd83afa | ||
|
ec293b897f | ||
|
b8c335ebb0 | ||
|
63d558865b | ||
|
73ae31e28d | ||
|
1983c75ba9 | ||
|
af968b6aed | ||
|
3ca8f605d4 | ||
|
0472786ef5 | ||
|
681c934438 | ||
|
e2a0c11d43 | ||
|
45eae5f36f | ||
|
20c7450211 | ||
|
a2267f4b2e | ||
|
a315243af9 | ||
|
f1cf7c8956 | ||
|
bfb04b894f | ||
|
525d0740f8 | ||
|
f92e43e216 | ||
|
e2d1287a55 | ||
|
e345cac18f | ||
|
ead6608100 | ||
|
07341d66e5 | ||
|
f809d735d6 | ||
|
66b959814b | ||
|
cb4727feb3 | ||
|
f142ccc42d | ||
|
4fe12b917c | ||
|
283b60d209 | ||
|
8af4cb7f69 | ||
|
67567afe04 | ||
|
73a110554b | ||
|
9c834671b4 | ||
|
637894823a | ||
|
92a59268ec | ||
|
e6f13cc56f | ||
|
63dba67c05 | ||
|
f6edf0d725 | ||
|
f14cb76bce | ||
|
7d7e676b16 | ||
|
4adc592344 | ||
|
b39857a83d | ||
|
2c0ca78e9c | ||
|
aabf3c15c1 | ||
|
85e5246387 | ||
|
a3c754df46 | ||
|
6601beb2ff | ||
|
74c89a9eca | ||
|
baad5cb8a1 | ||
|
9b7064e476 | ||
|
efd1c6289d | ||
|
c1505a35aa | ||
|
88a8f01ec5 | ||
|
23b93e76f2 | ||
|
8d125d46ff | ||
|
a005016bd0 | ||
|
07dae68939 | ||
|
7b72446dc8 | ||
|
eb41bacbe2 | ||
|
0354b79813 | ||
|
527d52e5be | ||
|
4d61670ac8 | ||
|
e122568d2e | ||
|
1ecd54ef5d | ||
|
f4df8b046d | ||
|
4f27000d6e | ||
|
a150745a0e | ||
|
31d16f0c53 | ||
|
76feea0a33 | ||
|
24c873c102 | ||
|
a51ceaf252 | ||
|
9117d85845 | ||
|
dd29366d7d | ||
|
76bd56d060 | ||
|
fa726feb16 | ||
|
590650e1d1 | ||
|
dda8e05b2a | ||
|
21f922a9ea | ||
|
cda08957d6 | ||
|
28a7e2779b | ||
|
292f3b5d12 | ||
|
a64020a119 | ||
|
c4e7882e10 | ||
|
be837a66fe | ||
|
7a7201e15a | ||
|
e3d690e42d | ||
|
dbd08f2eb3 | ||
|
58e8cf4f8f | ||
|
129749c213 | ||
|
12d1d9ba3d | ||
|
0a866b2387 | ||
|
d15ad518b0 | ||
|
6667d7b319 | ||
|
269195758d | ||
|
9180af735b | ||
|
bd326893bb | ||
|
11b15350ab | ||
|
5bbebd9029 | ||
|
6790fa5d2f | ||
|
1ae3be27a2 | ||
|
7b98535bff | ||
|
ab6900a3ee | ||
|
8bbbd01a14 | ||
|
9a88edeedf | ||
|
d9702d76e0 | ||
|
bdc6675276 | ||
|
4344d07bca | ||
|
895a56aaf9 | ||
|
9c060e82d2 | ||
|
a8500e7efc | ||
|
7ebd6f8bb6 | ||
|
1d34bfe7e6 | ||
|
09f2bc0f1a | ||
|
91dd166044 | ||
|
d67bd3f947 | ||
|
993c164e58 | ||
|
2d8d1256f4 | ||
|
50f86f6139 | ||
|
f0b9bad923 | ||
|
daa6d82058 | ||
|
8602cdd93e | ||
|
a5ba22334d | ||
|
310b8ecd9d | ||
|
a22a6587dd | ||
|
816ac05bdc | ||
|
c987bf7d4d | ||
|
8ad5ff58e9 | ||
|
c4d3cac23a | ||
|
49eea2eb4e | ||
|
205689e487 | ||
|
b52a36b2d0 | ||
|
9ea4ff7ddc | ||
|
859481e021 | ||
|
d57ab8c1dd | ||
|
385d53f85b | ||
|
4e133b1a8e | ||
|
a2b472db1d | ||
|
94c1390a91 | ||
|
2f01d6d2df |
10
.github/ISSUE_TEMPLATE/blank.md
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
name: Blank
|
||||
about: Use this when the other two are not applicable
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: vishnuraghavb
|
||||
|
||||
---
|
||||
|
||||
|
15
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -1,31 +1,32 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: "[BUG]"
|
||||
title: "[Bug]"
|
||||
labels: bug
|
||||
assignees: vishnuraghavb
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
<!---A clear and concise description of what the bug is-->
|
||||
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
2. Tap on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
<!---A clear and concise description of what you expected to happen-->
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
<!---If applicable, add screenshots to help explain your problem-->
|
||||
|
||||
**Device information (please complete the following information):**
|
||||
- Android Version: [e.g. 8 or Oreo]
|
||||
- EnRecipes Version(as in app's about page): [e.g. 1.1.4]
|
||||
- EnRecipes Version(as in app's about page): [e.g. 2.0.0]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
<!---Add any other context about the problem here-->
|
||||
|
|
10
.github/ISSUE_TEMPLATE/feature_request.md
vendored
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: "[FEATURE REQUEST]"
|
||||
title: "[Feature request]"
|
||||
labels: enhancement
|
||||
assignees: vishnuraghavb
|
||||
|
||||
|
@ -11,13 +11,13 @@ assignees: vishnuraghavb
|
|||
- [ ] I've checked the roadmap and my feature request is not listed there
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
<!---A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]-->
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
<!---A clear and concise description of what you want to happen-->
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
<!---A clear and concise description of any alternative solutions or features you've considered-->
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
<!---Add any other context or screenshots about the feature request here-->
|
||||
|
|
|
@ -6,4 +6,4 @@ Here are some important resources:
|
|||
|
||||
- The [roadmap](https://github.com/vishnuraghavb/EnRecipes/projects/1) will tell you whats the future of EnRecipes. Your feedback and suggestions are very important to make EnRecipes the best. If you have an idea to improve EnRecipes, [do let me know](https://github.com/vishnuraghavb/EnRecipes#having-issues-suggestions-and-feedback). I'm always open to ideas ;)
|
||||
- You can help [translate EnRecipes using Weblate](https://hosted.weblate.org/engage/enrecipes/) into the language of your choice. See [translation instructions](https://github.com/vishnuraghavb/EnRecipes/wiki/Translation-Instructions) in the wiki for more information.
|
||||
- Bugs, suggestions or feedback? You can [create an issue here](https://github.com/vishnuraghavb/EnRecipes/issues) or [join the Telegram group](http://t.me/enrecipes)(quicker replies) or contact me at apps@vishnuraghav.com
|
||||
- Bugs, suggestions or feedback? You can [create an issue here](https://github.com/vishnuraghavb/EnRecipes/issues) or [join the Telegram group](http://t.me/enrecipes) (quicker replies) or contact me at apps@vishnuraghav.com
|
||||
|
|
84
README.md
|
@ -1,4 +1,16 @@
|
|||
<p align="center"><a href="https://enrecipes.vercel.app"><img src="fastlane/metadata/android/en-GB/images/featureGraphic.png" width="100%"></a></p>
|
||||
## ⏸️ This project has been PAUSED for an unknown period of time.
|
||||
|
||||
#### :warning: IMPORTANT NOTICE for users with EnRecipes v1.3.2 or before:
|
||||
|
||||
To continue receiving updates, please update your EnRecipes to the latest version.
|
||||
|
||||
There are some significant changes in this version. So, in order to continue, you must do the following:
|
||||
|
||||
1. Export a full backup.
|
||||
2. Uninstall EnRecipes.
|
||||
3. Install this version and Import your data.
|
||||
|
||||
<p align="center"><a href="https://enrecipes.vercel.app"><img src="fastlane/metadata/android/en-US/images/featureGraphic.png" width="100%"></a></p>
|
||||
|
||||
<h1 align="center">A Simple, Offline Recipe Manager</h1>
|
||||
<p align="center">EnRecipes is an open source, privacy-friendly digital cookbook that lets you create, manage and share your recipes.</p>
|
||||
|
@ -6,16 +18,16 @@
|
|||
<a href="https://www.gnu.org/licenses/gpl-3.0" alt="License: GPLv3"><img src="https://img.shields.io/badge/license-GPL%20v3-blue"></a> <a href="https://github.com/vishnuraghavb/EnRecipes/releases" alt="Release version"><img src="https://img.shields.io/github/v/release/vishnuraghavb/EnRecipes?color=ff5200"/></a> <a href="https://hosted.weblate.org/engage/enrecipes/">
|
||||
<img src="https://hosted.weblate.org/widgets/enrecipes/-/app-translations/svg-badge.svg" alt="Translation status" /></a>
|
||||
<p align="center">
|
||||
<a href="https://play.google.com/store/apps/details?id=com.vishnuraghav.enrecipes"><img src="assets/Images/google-play-badge.png" height="80"/></a><a href="https://apt.izzysoft.de/fdroid/index/apk/com.vishnuraghav.enrecipes"><img src="assets/Images/IzzyOnDroid.png" height="80"/></a><br>You can also get the <a href="https://github.com/vishnuraghavb/EnRecipes/releases/latest">latest release on GitHub</a>
|
||||
<a href="https://f-droid.org/packages/com.vishnuraghav.EnRecipes"><img src="assets/Images/fdroid-badge.png" height="80"/></a><a href="https://apt.izzysoft.de/fdroid/index/apk/com.vishnuraghav.EnRecipes"><img src="assets/Images/IzzyOnDroid-badge.png" height="80"/></a><a href="https://play.google.com/store/apps/details?id=com.vishnuraghav.EnRecipes"><img src="assets/Images/google-play-badge.png" height="80"/></a><br>You can also get the <a href="https://github.com/vishnuraghavb/EnRecipes/releases/latest">latest release on GitHub</a>
|
||||
</p>
|
||||
<h2 align="center">Enjoying EnRecipes?</h2>
|
||||
<p align="center">Please consider making a small donation to help fund the project. Developing an application, especially one that is open source and completely free, takes a lot of time and effort.
|
||||
<br>
|
||||
<br>
|
||||
<a href="https://www.vishnuraghav.com/donate/"><img alt="Donate to Vishnu Raghav" src="assets/Images/donate.svg" width="240"></a></p>
|
||||
<a href="https://www.vishnuraghav.com/donate/"><img alt="Donate to Vishnu Raghav" src="assets/Images/donate.svg" height="48"></a></p>
|
||||
<hr>
|
||||
<h3 align="center">Important Links</h3>
|
||||
<p align="center"><a href="https://github.com/vishnuraghavb/EnRecipes/wiki/User-Guide">User Guide</a> - <a href="https://github.com/vishnuraghavb/EnRecipes/blob/main/PRIVACY.md">Privacy Policy</a> - <a href="https://github.com/vishnuraghavb/EnRecipes/blob/main/CONTRIBUTING.md">Contribution Guide</a> - <a href="https://github.com/vishnuraghavb/EnRecipes/projects/1">Roadmap</a> - <a href="https://t.me/enrecipes/">Telegram Group</a> - <a href="https://enrecipes.vercel.app/">Website</a></p>
|
||||
<p align="center"><a href="https://github.com/vishnuraghavb/EnRecipes/wiki/User-Guide">User Guide</a> · <a href="https://github.com/vishnuraghavb/EnRecipes/blob/main/PRIVACY.md">Privacy Policy</a> · <a href="https://github.com/vishnuraghavb/EnRecipes/blob/main/CONTRIBUTING.md">Contribution Guide</a> · <a href="https://github.com/vishnuraghavb/EnRecipes/projects/1">Roadmap</a> · <a href="https://t.me/enrecipes/">Telegram Group</a> · <a href="https://enrecipes.vercel.app/">Website</a></p>
|
||||
<hr>
|
||||
|
||||
## Features
|
||||
|
@ -28,37 +40,34 @@
|
|||
- Scale your recipe ingredients to serve more or less people
|
||||
- Get notified of the last time you tried a recipe
|
||||
- Share your recipe to anyone by any means as a nicely formatted message. You can share the recipe photo too.
|
||||
- Shake device to view random recipe
|
||||
- Shake your device to view a random recipe
|
||||
- Create meal plans
|
||||
- Import/Export recipes
|
||||
- Set cooking timers
|
||||
- You can Import or Export your data
|
||||
- Light, Dark and Black themes
|
||||
|
||||
## Highlights
|
||||
|
||||
- 100% free and open-source
|
||||
- Private by Design
|
||||
- No permissions required
|
||||
- No special permissions required
|
||||
- No annoying ads or pop-ups
|
||||
|
||||
**Languages being translated**:
|
||||
|
||||
[![Translation status](https://hosted.weblate.org/widgets/enrecipes/-/app-translations/multi-auto.svg)](https://hosted.weblate.org/engage/enrecipes/)
|
||||
|
||||
Check the [Roadmap](https://github.com/vishnuraghavb/EnRecipes/projects/1) for upcoming features.
|
||||
|
||||
Please read the [User Guide](https://github.com/vishnuraghavb/EnRecipes/wiki/User-Guide) to get the most out of EnRecipes.
|
||||
|
||||
## Screenshots
|
||||
|
||||
| <img src="fastlane/metadata/android/en-GB/images/phoneScreenshots/1.png" width=276> | <img src="fastlane/metadata/android/en-GB/images/phoneScreenshots/2.png" width=276> |
|
||||
| <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/1.png" width=276> | <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/2.png" width=276> |
|
||||
| :---------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------: |
|
||||
| **Home - Light theme** | **Home - Dark theme** |
|
||||
| <img src="fastlane/metadata/android/en-GB/images/phoneScreenshots/3.png" width=276> | <img src="fastlane/metadata/android/en-GB/images/phoneScreenshots/4.png" width=276> |
|
||||
| **Home - Black theme** | **Recipe view** |
|
||||
| <img src="fastlane/metadata/android/en-GB/images/phoneScreenshots/5.png" width=276> | <img src="fastlane/metadata/android/en-GB/images/phoneScreenshots/6.png" width=276> |
|
||||
| **Share menu** | **Scale ingredients** |
|
||||
| <img src="fastlane/metadata/android/en-GB/images/phoneScreenshots/7.png" width=276> | <img src="fastlane/metadata/android/en-GB/images/phoneScreenshots/8.png" width=276> |
|
||||
| **Meal planner** | **About** |
|
||||
| <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/3.png" width=276> | <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/4.png" width=276> |
|
||||
| **Recipe view** | **Scale ingredients** |
|
||||
| <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/5.png" width=276> | <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/6.png" width=276> |
|
||||
| **Share menu** | **Meal Planner** |
|
||||
| <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/7.png" width=276> | <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/8.png" width=276> |
|
||||
| **Cooking Timer** | **About** |
|
||||
|
||||
## Contribution
|
||||
|
||||
|
@ -74,19 +83,52 @@ You can,
|
|||
- [Join the Telegram group](http://t.me/enrecipes) (quicker replies)
|
||||
- Contact me at apps@vishnuraghav.com
|
||||
|
||||
### Looking to translate the app to your own language?
|
||||
### Looking to translate EnRecipes?
|
||||
|
||||
EnRecipes is being translated using [Weblate](https://hosted.weblate.org/engage/enrecipes/). See [translation instructions](https://github.com/vishnuraghavb/EnRecipes/wiki/Translation-Instructions) in the wiki for more information.
|
||||
|
||||
<a href="https://hosted.weblate.org/engage/enrecipes/">
|
||||
<!-- <a href="https://hosted.weblate.org/engage/enrecipes/">
|
||||
<img src="https://hosted.weblate.org/widgets/enrecipes/-/app-translations/287x66-grey.png" alt="Translation status" />
|
||||
</a> -->
|
||||
<a href="https://hosted.weblate.org/engage/enrecipes/">
|
||||
<img src="https://hosted.weblate.org/widgets/enrecipes/-/open-graph.png" alt="Translation status" />
|
||||
</a>
|
||||
|
||||
## Credits
|
||||
|
||||
This app was written in my free time using NativeScript-Vue. I would like to thank all those people who helped me understand the concepts during the process and my special thanks to the NativeScript team and the community. I also would like to thank the members of the [EnRecipes Telegram group](https://t.me/enrecipes) for contributing their ideas for this project.
|
||||
|
||||
### Recipes used in the Screenshots
|
||||
### Translation credits
|
||||
|
||||
| Language | Translator(s) |
|
||||
| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Arabic | [phwright](https://hosted.weblate.org/user/phwright/) |
|
||||
| Catalan | J. Lavoie |
|
||||
| Danish | [mondstern](https://hosted.weblate.org/user/mondstern/), Henrik Dankvardt, J. Lavoie, Allan Nordhøy, Jonas Hansen |
|
||||
| Dutch | Heimen Stoffels |
|
||||
| English (India) | Vishnu Raghav B |
|
||||
| English (United Kingdom) | Vishnu Raghav B |
|
||||
| English (United States) | Vishnu Raghav B |
|
||||
| Finnish | J. Lavoie |
|
||||
| French | J. Lavoie, Swann Fournial, fabeuss, [mondstern](https://hosted.weblate.org/user/mondstern/) |
|
||||
| French (Canada) | Swann Fournial, J. Lavoie |
|
||||
| French (Switzerland) | Swann Fournial, J. Lavoie |
|
||||
| French (Belgium) | Swann Fournial, J. Lavoie |
|
||||
| German | J. Lavoie, nautilusx, Swann Fournial |
|
||||
| Hindi | Vishnu Raghav B, V |
|
||||
| Indonesian | Reza Almanda, [mondstern](https://hosted.weblate.org/user/mondstern/) |
|
||||
| Italian | J. Lavoie, [mondstern](https://hosted.weblate.org/user/mondstern/), Andrea Ghensi |
|
||||
| Japanese | Y. Sakamoto, K. Herbert |
|
||||
| Malayalam | Vishnu Raghav B |
|
||||
| Norwegian Bokmål | Allan Nordhøy, [mondstern](https://hosted.weblate.org/user/mondstern/), Lars A Reinton |
|
||||
| Portuguese | Sérgio Morais, [mondstern](https://hosted.weblate.org/user/mondstern/), J. Lavoie |
|
||||
| Portuguese (Brazil) | [mondstern](https://hosted.weblate.org/user/mondstern/), Sérgio Morais, Wesley, Ricardo Zamarrenho Carvalho Correa, J. Lavoie, Nínive de Jesus Celestino, emmanuel einstein campos vasconcelos, Fabio Oliveira |
|
||||
| Russian | dm9pZCAq, [mondstern](https://hosted.weblate.org/user/mondstern/), Leca |
|
||||
| Spanish | taraletti, J. Lavoie, Sansom, [mondstern](https://hosted.weblate.org/user/mondstern/), Diego |
|
||||
| Spanish (Argentina) | another-sapiens |
|
||||
| Tamil | Vishnu Raghav B |
|
||||
|
||||
### Screenshot recipe credits
|
||||
|
||||
- **Meen Pollichathu** by [Bency Veronica](https://www.instagram.com/bencys_lil_kitchen)
|
||||
- **Curd Vada** by P. Shanmugalakshmi
|
||||
|
|
560
app/app.scss
|
@ -1,3 +1,4 @@
|
|||
// Colours
|
||||
$gray0: #f8f9fa;
|
||||
$gray1: #f1f3f5;
|
||||
$gray2: #e9ecef;
|
||||
|
@ -11,39 +12,48 @@ $gray9: #212529;
|
|||
$gray10: #000000;
|
||||
$orange: #ff5200;
|
||||
|
||||
// FontSizes based on Minor Third
|
||||
$t1: 25;
|
||||
$t2: 21;
|
||||
$t3: 17;
|
||||
$t4: 14;
|
||||
$t5: 12; // Base
|
||||
$t6: 10;
|
||||
|
||||
Page {
|
||||
font-family: "Inter-Medium";
|
||||
font-size: 14;
|
||||
font-family: 'Inter-Medium', sans-serif;
|
||||
font-size: $t4;
|
||||
}
|
||||
.ico {
|
||||
font-family: "enrecipes";
|
||||
font-size: 24;
|
||||
vertical-alignment: center;
|
||||
&.sm {
|
||||
font-size: 16;
|
||||
font-family: 'EnRecipes';
|
||||
font-size: 23;
|
||||
&.s {
|
||||
font-size: $t3;
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
.tb {
|
||||
font-family: "Inter-Bold";
|
||||
.vc {
|
||||
vertical-align: center;
|
||||
}
|
||||
.tac {
|
||||
.tb {
|
||||
font-family: 'Inter-Bold', sans-serif;
|
||||
}
|
||||
.tc {
|
||||
text-align: center;
|
||||
}
|
||||
.tw {
|
||||
text-wrap: true;
|
||||
}
|
||||
.pageTitle {
|
||||
@extend .tb;
|
||||
@extend .tw;
|
||||
font-size: 25;
|
||||
padding: 16;
|
||||
|
||||
.pTitle {
|
||||
font-size: $t1;
|
||||
padding: 16 16 24;
|
||||
}
|
||||
|
||||
.Light {
|
||||
color: $gray9;
|
||||
background: $gray1;
|
||||
Page,
|
||||
.filters,
|
||||
.sticky {
|
||||
background: $gray1;
|
||||
}
|
||||
|
@ -58,9 +68,9 @@ Page {
|
|||
.appbar,
|
||||
.modal {
|
||||
background: $gray0;
|
||||
box-shadow: 0 2 rgba($gray10, 0.1);
|
||||
}
|
||||
.fieldLabel,
|
||||
.dayName,
|
||||
.fLabel,
|
||||
.sub {
|
||||
color: $gray6;
|
||||
}
|
||||
|
@ -68,7 +78,7 @@ Page {
|
|||
color: $gray3;
|
||||
background: $gray2;
|
||||
}
|
||||
.snackBar {
|
||||
.snackbar {
|
||||
color: $gray1;
|
||||
background: $gray9;
|
||||
}
|
||||
|
@ -80,7 +90,6 @@ Page {
|
|||
color: $gray1;
|
||||
background: $gray9;
|
||||
Page,
|
||||
.filters,
|
||||
.sticky {
|
||||
background: $gray9;
|
||||
}
|
||||
|
@ -97,8 +106,7 @@ Page {
|
|||
color: $gray0;
|
||||
background: $gray8;
|
||||
}
|
||||
.fieldLabel,
|
||||
.dayName,
|
||||
.fLabel,
|
||||
.sub {
|
||||
color: $gray5;
|
||||
}
|
||||
|
@ -106,7 +114,7 @@ Page {
|
|||
color: $gray9;
|
||||
background: $gray10;
|
||||
}
|
||||
.snackBar {
|
||||
.snackbar {
|
||||
color: $gray9;
|
||||
background: $gray1;
|
||||
}
|
||||
|
@ -118,7 +126,6 @@ Page {
|
|||
color: $gray2;
|
||||
background: $gray10;
|
||||
Page,
|
||||
.filters,
|
||||
.sticky {
|
||||
background: $gray10;
|
||||
}
|
||||
|
@ -135,8 +142,7 @@ Page {
|
|||
color: $gray1;
|
||||
background: $gray9;
|
||||
}
|
||||
.fieldLabel,
|
||||
.dayName,
|
||||
.fLabel,
|
||||
.sub {
|
||||
color: $gray6;
|
||||
}
|
||||
|
@ -144,7 +150,7 @@ Page {
|
|||
color: $gray10;
|
||||
background: $gray9;
|
||||
}
|
||||
.snackBar {
|
||||
.snackbar {
|
||||
color: $gray10;
|
||||
background: $gray2;
|
||||
}
|
||||
|
@ -152,141 +158,139 @@ Page {
|
|||
color: $gray10;
|
||||
}
|
||||
}
|
||||
|
||||
TextField.combField,
|
||||
#searchBar {
|
||||
#search {
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// Elements
|
||||
TextField,
|
||||
TextView {
|
||||
width: 100%;
|
||||
// width: 100%;
|
||||
padding: 14 8;
|
||||
border-bottom-width: 1;
|
||||
}
|
||||
TextView {
|
||||
line-height: 4;
|
||||
}
|
||||
#searchBar {
|
||||
padding-left: 0;
|
||||
margin: 0;
|
||||
#search {
|
||||
padding: 13 8;
|
||||
}
|
||||
.inputField {
|
||||
.inputC {
|
||||
margin-bottom: 24;
|
||||
}
|
||||
.fieldLabel {
|
||||
font-size: 12;
|
||||
.fLabel {
|
||||
font-size: $t5;
|
||||
}
|
||||
.progressContainer {
|
||||
width: 100%;
|
||||
}
|
||||
Progress {
|
||||
margin: 16;
|
||||
progress {
|
||||
color: $orange;
|
||||
height: 2;
|
||||
background-color: $gray5;
|
||||
}
|
||||
Switch {
|
||||
background-color: $orange;
|
||||
off-background-color: $gray5;
|
||||
}
|
||||
// -----------------------------
|
||||
// Side Drawer
|
||||
.segment {
|
||||
border-radius: 12;
|
||||
margin: 0 4 0 0;
|
||||
padding: 0 12;
|
||||
.value {
|
||||
padding-left: 8;
|
||||
vertical-alignment: center;
|
||||
}
|
||||
&.select {
|
||||
color: $orange;
|
||||
@extend .hl;
|
||||
}
|
||||
}
|
||||
Button {
|
||||
background-color: transparent;
|
||||
button {
|
||||
z-index: 0;
|
||||
padding: 8;
|
||||
border-radius: 12;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
&:active {
|
||||
@extend .fade;
|
||||
}
|
||||
&.ico {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
text-transform: none;
|
||||
background-color: transparent;
|
||||
&.sst {
|
||||
width: 48;
|
||||
height: 48;
|
||||
}
|
||||
&.ico {
|
||||
width: 48;
|
||||
height: 48;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
&:active {
|
||||
@extend .fade;
|
||||
}
|
||||
}
|
||||
&.si {
|
||||
width: 40;
|
||||
height: 40;
|
||||
}
|
||||
&.text {
|
||||
@extend .tb;
|
||||
horizontal-alignment: left;
|
||||
color: $orange;
|
||||
}
|
||||
&.st {
|
||||
font-size: $t5;
|
||||
padding: 12;
|
||||
}
|
||||
&.big {
|
||||
margin-top: 8;
|
||||
padding: 16 0;
|
||||
}
|
||||
&.sm {
|
||||
font-size: 12;
|
||||
padding: 12;
|
||||
}
|
||||
&.min {
|
||||
width: 40;
|
||||
height: 40;
|
||||
}
|
||||
&.x {
|
||||
width: 32;
|
||||
height: 32;
|
||||
min-width: 0;
|
||||
margin: 0 0 0 8;
|
||||
vertical-alignment: center;
|
||||
}
|
||||
&.rate {
|
||||
margin: 0 4 0 0;
|
||||
width: 32;
|
||||
height: 32;
|
||||
}
|
||||
&.fb:active {
|
||||
@extend .fade;
|
||||
}
|
||||
}
|
||||
ActivityIndicator {
|
||||
width: 24;
|
||||
height: 24;
|
||||
margin: 14;
|
||||
color: $orange;
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// HOME
|
||||
.emptyState {
|
||||
// Home
|
||||
.segment {
|
||||
border-radius: 12;
|
||||
padding: 8;
|
||||
.v {
|
||||
padding: 0 4;
|
||||
}
|
||||
}
|
||||
.t3 {
|
||||
font-size: $t3;
|
||||
}
|
||||
.empty {
|
||||
padding: 16 16 8;
|
||||
Label {
|
||||
@extend .tw;
|
||||
}
|
||||
.title {
|
||||
@extend .tb;
|
||||
font-size: 17;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// Recipe Items
|
||||
.recipeItem {
|
||||
// Recipe Item
|
||||
.recipe {
|
||||
padding: 8 16;
|
||||
.recipeInfo {
|
||||
vertical-alignment: center;
|
||||
padding: 0 0 4 8;
|
||||
.info {
|
||||
padding: 0 8 4;
|
||||
}
|
||||
.title {
|
||||
padding: 0 0 4;
|
||||
}
|
||||
.attr {
|
||||
font-size: 10;
|
||||
padding: 0 6 1 2;
|
||||
}
|
||||
}
|
||||
.simple .recipeInfo {
|
||||
.oh {
|
||||
orientation: horizontal;
|
||||
}
|
||||
.t6 {
|
||||
font-size: $t6;
|
||||
}
|
||||
.attr {
|
||||
font-size: $t6;
|
||||
padding: 0 4 2;
|
||||
}
|
||||
.simple .info {
|
||||
padding: 8 0;
|
||||
}
|
||||
.minimal .title {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.grid {
|
||||
padding: 8;
|
||||
.recipeInfo {
|
||||
.info {
|
||||
padding: 8 0 4;
|
||||
}
|
||||
&.odd {
|
||||
|
@ -296,239 +300,199 @@ Button {
|
|||
padding: 8 16 8 8;
|
||||
}
|
||||
}
|
||||
.photogrid .recipeInfo {
|
||||
.photogrid .info {
|
||||
padding: 8 0 0;
|
||||
}
|
||||
.lastItem {
|
||||
margin-bottom: 128;
|
||||
}
|
||||
.selected {
|
||||
@extend .hl;
|
||||
}
|
||||
.unselected {
|
||||
background-color: transparent;
|
||||
}
|
||||
.imgHolder {
|
||||
border-radius: 12;
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// SETTINGS
|
||||
.group-info {
|
||||
padding: 16 16 16 72;
|
||||
line-height: 4;
|
||||
}
|
||||
.options-list {
|
||||
.option {
|
||||
vertical-align: center;
|
||||
padding: 14 8;
|
||||
margin: 0 16;
|
||||
.ico {
|
||||
padding: 0;
|
||||
margin: 0 24 0 16;
|
||||
}
|
||||
.info,
|
||||
.sub {
|
||||
@extend .tw;
|
||||
}
|
||||
.sub {
|
||||
font-size: 12;
|
||||
// CookingTimer
|
||||
.timer {
|
||||
padding: 8 16 0;
|
||||
.info {
|
||||
margin: 8 8 8 16;
|
||||
&.r {
|
||||
margin: 8 16 8 8;
|
||||
}
|
||||
}
|
||||
.listSpace {
|
||||
height: 72;
|
||||
progress {
|
||||
margin: 8 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// ABOUT
|
||||
.app-info {
|
||||
.icon {
|
||||
// Settings
|
||||
.groupInfo {
|
||||
padding: 16 16 16 72;
|
||||
&.r {
|
||||
padding: 16 72 16 16;
|
||||
}
|
||||
}
|
||||
.options {
|
||||
.option {
|
||||
vertical-align: center;
|
||||
padding: 14 16;
|
||||
.ico {
|
||||
width: 40;
|
||||
text-align: center;
|
||||
}
|
||||
.info {
|
||||
padding: 0 16;
|
||||
@extend .tw;
|
||||
}
|
||||
.sub {
|
||||
font-size: $t5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// About
|
||||
.appInfo {
|
||||
.logo {
|
||||
horizontal-alignment: center;
|
||||
}
|
||||
.name {
|
||||
font-size: 21;
|
||||
font-size: $t2;
|
||||
}
|
||||
.info {
|
||||
padding: 8 16 24;
|
||||
line-height: 4;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// VIEW RECIPE
|
||||
// ViewRecipe
|
||||
.photo {
|
||||
border-radius: 12;
|
||||
margin: 24 16 0 0;
|
||||
vertical-align: top;
|
||||
}
|
||||
.photoviewer {
|
||||
.imgV {
|
||||
width: 96;
|
||||
height: 96;
|
||||
opacity: 0;
|
||||
background: #000;
|
||||
}
|
||||
.attribute {
|
||||
.attrT {
|
||||
margin: 8 16;
|
||||
.title {
|
||||
margin-right: 8;
|
||||
font-size: 12;
|
||||
.sub {
|
||||
font-size: $t5;
|
||||
}
|
||||
.value {
|
||||
.v {
|
||||
@extend .tb;
|
||||
@extend .tw;
|
||||
}
|
||||
.clickable {
|
||||
color: $orange;
|
||||
}
|
||||
}
|
||||
.ingredient {
|
||||
.check {
|
||||
padding: 0 16;
|
||||
.value {
|
||||
@extend .tw;
|
||||
vertical-align: center;
|
||||
padding: 14 0 14 16;
|
||||
.v {
|
||||
padding: 14 16;
|
||||
line-height: 4;
|
||||
}
|
||||
}
|
||||
.instruction {
|
||||
padding: 0 16;
|
||||
.count {
|
||||
@extend .tb;
|
||||
font-size: 17;
|
||||
}
|
||||
.value {
|
||||
@extend .tw;
|
||||
padding: 14 0 14 16;
|
||||
line-height: 4;
|
||||
.t {
|
||||
padding: 14 0;
|
||||
}
|
||||
}
|
||||
.done {
|
||||
opacity: 0.5;
|
||||
// @extend .fade;
|
||||
.value {
|
||||
.v {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
}
|
||||
.combination {
|
||||
@extend .tw;
|
||||
text-align: left;
|
||||
padding: 16;
|
||||
line-height: 4;
|
||||
}
|
||||
.note {
|
||||
@extend .tw;
|
||||
line-height: 4;
|
||||
padding: 16 0;
|
||||
}
|
||||
.dateInfo {
|
||||
padding: 32 16 16;
|
||||
font-size: 12;
|
||||
padding: 16 24;
|
||||
line-height: 4;
|
||||
}
|
||||
.t5 {
|
||||
font-size: $t5;
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// APPBAR
|
||||
// AppBar
|
||||
|
||||
.appbar {
|
||||
z-index: 4;
|
||||
min-height: 56;
|
||||
margin: 8;
|
||||
padding: 4;
|
||||
margin: 0 8 8;
|
||||
border-radius: 16;
|
||||
.title {
|
||||
@extend .tb;
|
||||
@extend .tw;
|
||||
vertical-align: center;
|
||||
line-height: 4;
|
||||
}
|
||||
.msg {
|
||||
padding: 14 16;
|
||||
}
|
||||
.fab {
|
||||
margin-left: 4;
|
||||
padding: 2;
|
||||
.ico {
|
||||
margin: 2;
|
||||
}
|
||||
}
|
||||
.toolbar {
|
||||
z-index: 4;
|
||||
padding: 4;
|
||||
margin-bottom: 0;
|
||||
horizontal-alignment: left;
|
||||
height: 1;
|
||||
vertical-align: bottom;
|
||||
transform: translateY(48);
|
||||
padding: 4 2;
|
||||
.tool {
|
||||
padding: 0 12;
|
||||
Label {
|
||||
vertical-alignment: center;
|
||||
}
|
||||
.ico {
|
||||
padding-right: 8;
|
||||
}
|
||||
orientation: horizontal;
|
||||
padding: 0 8;
|
||||
}
|
||||
.v {
|
||||
padding: 0 4;
|
||||
}
|
||||
}
|
||||
.fab {
|
||||
width: 48;
|
||||
height: 48;
|
||||
margin: 0 4 0 0;
|
||||
border-radius: 12;
|
||||
background: $orange;
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// EDIT RECIPE
|
||||
.sectionTitle {
|
||||
@extend .tb;
|
||||
@extend .tw;
|
||||
font-size: 21;
|
||||
padding: 0;
|
||||
// EditRecipe
|
||||
.section {
|
||||
padding: 0 16;
|
||||
margin: 32 0 16;
|
||||
}
|
||||
.t2 {
|
||||
font-size: $t2;
|
||||
}
|
||||
.sticky {
|
||||
width: 100%;
|
||||
padding: 0 16 16;
|
||||
margin: 0;
|
||||
}
|
||||
.countdown {
|
||||
font-size: 17;
|
||||
color: $orange;
|
||||
.ingActions {
|
||||
orientation: horizontal;
|
||||
button {
|
||||
margin-right: 16;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// MEAL PLANNER
|
||||
// MealPlanner
|
||||
.calendar {
|
||||
padding: 0 8;
|
||||
.navBtn {
|
||||
margin: 0;
|
||||
}
|
||||
.monthName {
|
||||
text-align: center;
|
||||
vertical-alignment: center;
|
||||
font-size: 17;
|
||||
}
|
||||
.dayName {
|
||||
margin: 8 0;
|
||||
font-size: 12;
|
||||
text-align: center;
|
||||
}
|
||||
.day {
|
||||
border-radius: 12;
|
||||
}
|
||||
.hasPlans {
|
||||
color: $orange;
|
||||
}
|
||||
.activeDay {
|
||||
background-color: rgba($orange, 0.2);
|
||||
padding: 0 16 16;
|
||||
.accent.sub {
|
||||
color: rgba($orange, 0.6);
|
||||
}
|
||||
}
|
||||
.dayPlan {
|
||||
padding: 16 16 80;
|
||||
width: 100%;
|
||||
.periodLabel {
|
||||
font-size: 17;
|
||||
text-transform: capitalize;
|
||||
vertical-align: center;
|
||||
.plans {
|
||||
margin: 0 16;
|
||||
.date {
|
||||
padding: 16 0 8;
|
||||
}
|
||||
.recipeTitle {
|
||||
@extend .tw;
|
||||
text-align: left;
|
||||
padding: 16 8;
|
||||
line-height: 4;
|
||||
.type {
|
||||
padding: 8 0;
|
||||
}
|
||||
.plan {
|
||||
min-height: 48;
|
||||
padding: 4 0;
|
||||
}
|
||||
.info {
|
||||
min-height: 40;
|
||||
padding: 0 8;
|
||||
}
|
||||
.note {
|
||||
padding: 4 0;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// DIALOGS
|
||||
// Dialogs
|
||||
.modal {
|
||||
max-width: 320;
|
||||
width: 100%;
|
||||
|
@ -538,40 +502,20 @@ Button {
|
|||
@extend .tb;
|
||||
@extend .tw;
|
||||
padding: 16;
|
||||
font-size: 21;
|
||||
font-size: $t2;
|
||||
}
|
||||
.input {
|
||||
padding: 0 16 8;
|
||||
}
|
||||
.description {
|
||||
line-height: 4;
|
||||
padding: 0 16 8;
|
||||
}
|
||||
ListPicker {
|
||||
width: 25%;
|
||||
height: 160;
|
||||
width: 30%;
|
||||
height: 144;
|
||||
margin: 16 0;
|
||||
}
|
||||
.listItem {
|
||||
@extend .tw;
|
||||
width: 100%;
|
||||
letter-spacing: 0;
|
||||
text-transform: none;
|
||||
line-height: 4;
|
||||
padding: 13 16;
|
||||
margin: 0;
|
||||
background: transparent;
|
||||
}
|
||||
.shareItem {
|
||||
border-radius: 12;
|
||||
margin: 0 8 8;
|
||||
text-align: center;
|
||||
.ico {
|
||||
padding: 16 0 0;
|
||||
}
|
||||
.item {
|
||||
@extend .tw;
|
||||
padding: 8 16 16;
|
||||
}
|
||||
background-color: transparent;
|
||||
}
|
||||
.actions {
|
||||
padding: 4;
|
||||
|
@ -581,48 +525,68 @@ Button {
|
|||
margin: 0 0 8;
|
||||
}
|
||||
}
|
||||
.noResInfo {
|
||||
@extend .tac;
|
||||
@extend .tw;
|
||||
padding: 16;
|
||||
line-height: 4;
|
||||
}
|
||||
// -----------------------------
|
||||
ActivityIndicator {
|
||||
width: 24;
|
||||
height: 24;
|
||||
margin: 12;
|
||||
color: $orange;
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// Transitions
|
||||
.hl {
|
||||
animation-name: hl;
|
||||
.select {
|
||||
color: $orange;
|
||||
animation-name: select;
|
||||
animation-duration: 0.2s;
|
||||
animation-fill-mode: forwards;
|
||||
animation-timing-function: ease-out;
|
||||
animation-timing-function: ease;
|
||||
}
|
||||
@keyframes hl {
|
||||
.deselect {
|
||||
background-color: transparent;
|
||||
}
|
||||
@keyframes select {
|
||||
0% {
|
||||
opacity: 0.5;
|
||||
background-color: transparent;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
background-color: rgba($orange, 0.2);
|
||||
background-color: rgba($orange, 0.1);
|
||||
}
|
||||
}
|
||||
.fade {
|
||||
animation-name: fade;
|
||||
animation-duration: 0.2s;
|
||||
animation-fill-mode: forwards;
|
||||
animation-timing-function: ease-out;
|
||||
animation-timing-function: ease;
|
||||
}
|
||||
@keyframes fade {
|
||||
0% {
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
opacity: 0.5;
|
||||
opacity: 0.75;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// Helpers
|
||||
.f {
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
.accent {
|
||||
color: $orange;
|
||||
}
|
||||
.hal {
|
||||
horizontal-alignment: left;
|
||||
&.r {
|
||||
horizontal-alignment: right;
|
||||
}
|
||||
}
|
||||
.har {
|
||||
horizontal-alignment: right;
|
||||
&.r {
|
||||
horizontal-alignment: left;
|
||||
}
|
||||
}
|
||||
.edge {
|
||||
width: 16;
|
||||
}
|
||||
.ls {
|
||||
height: 72;
|
||||
}
|
||||
.lh4 {
|
||||
line-height: 4;
|
||||
}
|
||||
|
|
454
app/components/CookingTimer.vue
Normal file
|
@ -0,0 +1,454 @@
|
|||
<template>
|
||||
<Page @loaded="pgLoad" actionBarHidden="true">
|
||||
<GridLayout rows="*, auto" columns="*">
|
||||
<ScrollView
|
||||
@scroll="svScroll($event)"
|
||||
rowSpan="2"
|
||||
scrollBarIndicatorVisible="false"
|
||||
>
|
||||
<StackLayout>
|
||||
<RGridLayout :rtl="RTL" rows="auto" columns="*, auto, 12">
|
||||
<RLabel class="pTitle tw tb" :text="'timer' | L" />
|
||||
<Button col="1" class="ico" :text="icon.cog" @tap="navigateTo" />
|
||||
</RGridLayout>
|
||||
<Timer
|
||||
v-for="timer in activeTs"
|
||||
:key="timer.id + key"
|
||||
:timer="timer"
|
||||
:formattedTime="formattedTime"
|
||||
:removeTimer="removeTimer"
|
||||
:togglePause="togglePause"
|
||||
:timerAlert="timerAlert"
|
||||
:showToast="showToast"
|
||||
/>
|
||||
<StackLayout class="ls"> </StackLayout>
|
||||
</StackLayout>
|
||||
</ScrollView>
|
||||
<GridLayout v-if="!activeTs.length" rows="*, auto">
|
||||
<StackLayout row="1" class="empty">
|
||||
<RLabel class="tb t3 tw" :text="'ccwt' | L" />
|
||||
<RLabel class="tw" :text="'plsAdd' | L" />
|
||||
</StackLayout>
|
||||
</GridLayout>
|
||||
<RGridLayout
|
||||
:rtl="RTL"
|
||||
row="1"
|
||||
@loaded="abLoad"
|
||||
class="appbar"
|
||||
:hidden="showUndo"
|
||||
columns="auto, *, auto"
|
||||
>
|
||||
<Button class="ico rtl" :text="icon.back" @tap="navigateBack" />
|
||||
<Button class="ico fab" :text="icon.plus" @tap="addTimer" col="2" />
|
||||
</RGridLayout>
|
||||
<SnackBar
|
||||
:hidden="!showUndo || toast"
|
||||
:count="countdown"
|
||||
:msg="snackMsg"
|
||||
:undo="undoDel"
|
||||
:action="hideBar"
|
||||
:onload="sbLoad"
|
||||
/>
|
||||
<Toast :onload="tbLoad" :toast="toast" :action="hideBar" />
|
||||
<Label
|
||||
rowSpan="2"
|
||||
class="edge hal"
|
||||
:class="{ 'f r': RTL }"
|
||||
@swipe="swipeBack($event, navigateBack)"
|
||||
/>
|
||||
<Label
|
||||
rowSpan="2"
|
||||
class="edge har rtl"
|
||||
:class="{ r: RTL, f: !RTL }"
|
||||
@swipe="swipeBack($event, navigateBack)"
|
||||
/>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { localize } from "@nativescript/localize";
|
||||
import {
|
||||
Observable,
|
||||
Application,
|
||||
Utils,
|
||||
Device,
|
||||
Frame,
|
||||
} from "@nativescript/core";
|
||||
import {
|
||||
getNumber,
|
||||
setNumber,
|
||||
remove,
|
||||
} from "@nativescript/core/application-settings";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import EnRecipes from "./EnRecipes.vue";
|
||||
import Action from "./modals/Action.vue";
|
||||
import CTSettings from "./settings/CTSettings.vue";
|
||||
import TimePickerHMS from "./modals/TimePickerHMS.vue";
|
||||
import TimerReminder from "./modals/TimerReminder.vue";
|
||||
import Timer from "./sub/Timer.vue";
|
||||
import Toast from "./sub/Toast.vue";
|
||||
import SnackBar from "./sub/SnackBar.vue";
|
||||
import * as utils from "~/shared/utils";
|
||||
import { EvtBus } from "~/main";
|
||||
let barTimer;
|
||||
declare const com, android: any;
|
||||
export default {
|
||||
components: { Timer, Toast, SnackBar },
|
||||
props: ["recipeID"],
|
||||
data() {
|
||||
return {
|
||||
scrollPos: 1,
|
||||
appbar: null,
|
||||
toastbar: null,
|
||||
snackbar: null,
|
||||
scrollView: null,
|
||||
countdown: 5,
|
||||
snackMsg: null,
|
||||
showUndo: 0,
|
||||
undo: 0,
|
||||
toast: null,
|
||||
key: 99,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState([
|
||||
"icon",
|
||||
"recipes",
|
||||
"timerS",
|
||||
"timerV",
|
||||
"timerPs",
|
||||
"activeTs",
|
||||
"FGS",
|
||||
"RTL",
|
||||
]),
|
||||
hasBackStack() {
|
||||
return Frame.topmost().backStack.length;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["addAT", "removeAT", "clearATIs", "updateAT", "setFgS"]),
|
||||
pgLoad({ object }) {
|
||||
object.bindingContext = new Observable();
|
||||
if (this.activeTs.filter((e: any) => e.done).length) this.openReminder();
|
||||
setNumber("isTimer", 1);
|
||||
},
|
||||
abLoad({ object }) {
|
||||
this.appbar = object;
|
||||
},
|
||||
tbLoad({ object }) {
|
||||
this.toastbar = object;
|
||||
},
|
||||
sbLoad({ object }) {
|
||||
this.snackbar = object;
|
||||
},
|
||||
svScroll(args) {
|
||||
this.scrollView = args.object;
|
||||
let scrollUp;
|
||||
let y = args.scrollY;
|
||||
if (y) {
|
||||
scrollUp = y < this.scrollPos;
|
||||
this.scrollPos = Math.abs(y);
|
||||
let ab = this.appbar.translateY;
|
||||
if (!scrollUp && ab == 0) this.animateBar(this.appbar, 0);
|
||||
else if (scrollUp && ab == 64) this.animateBar(this.appbar, 1);
|
||||
}
|
||||
},
|
||||
|
||||
// HELPERS
|
||||
getRecipeTitle(id) {
|
||||
let recipe = this.recipes.filter((e) => e.id === id)[0];
|
||||
return recipe ? recipe.title : `[ ${localize("resNF")} ]`;
|
||||
},
|
||||
formattedTime(time) {
|
||||
let hr = localize("hr");
|
||||
let min = localize("min");
|
||||
let sec = localize("sec");
|
||||
|
||||
let t = time.split(":");
|
||||
|
||||
let h = parseInt(t[0]);
|
||||
let m = parseInt(t[1]);
|
||||
let s = parseInt(t[2]);
|
||||
|
||||
let hasHrs = h ? `${h} ${hr}` : "";
|
||||
let hasMins = m ? `${h ? " " : ""}${m} ${min}` : "";
|
||||
let hasSecs = s ? `${h || m ? " " : ""}${s} ${sec}` : "";
|
||||
|
||||
return hasHrs + hasMins + hasSecs;
|
||||
},
|
||||
|
||||
// NOTIFICATION HANDLERS
|
||||
timerInfo() {
|
||||
let activeCount = this.activeTs.length;
|
||||
let pausedCount = this.activeTs.filter((e) => e.isPaused).length;
|
||||
let ongoingCount = activeCount - pausedCount;
|
||||
this.foregroundService(activeCount);
|
||||
function show() {
|
||||
utils.TimerNotif.show({
|
||||
bID: "info",
|
||||
cID: "cti",
|
||||
cName: "Cooking Timer info",
|
||||
description: localize("oAP", ongoingCount + "", pausedCount),
|
||||
nID: 6,
|
||||
priority: -2,
|
||||
sound: null,
|
||||
title: localize("timer"),
|
||||
});
|
||||
}
|
||||
if (this.FGS) setTimeout(() => this.activeTs.length && show(), 250);
|
||||
utils.wakeLock(ongoingCount);
|
||||
},
|
||||
timerAlert() {
|
||||
let title, description, bID;
|
||||
let firedTimers = this.activeTs.filter((e) => e.done);
|
||||
let timer = firedTimers[0];
|
||||
if (firedTimers.length > 1) {
|
||||
title = localize("texp", firedTimers.length);
|
||||
description = localize("ttv");
|
||||
bID = "alerts";
|
||||
} else if (firedTimers.length == 1) {
|
||||
title =
|
||||
timer.label +
|
||||
(timer.recipeID ? " - " + this.getRecipeTitle(timer.recipeID) : "");
|
||||
description = this.formattedTime(timer.time);
|
||||
bID = "timer" + timer.id;
|
||||
} else {
|
||||
utils.TimerNotif.clear(7);
|
||||
return;
|
||||
}
|
||||
utils.TimerNotif.show({
|
||||
actions: 1,
|
||||
bID,
|
||||
cID: "cta",
|
||||
cName: "Cooking Timer alerts",
|
||||
description,
|
||||
multi: firedTimers.length > 1,
|
||||
nID: 7,
|
||||
priority: 1,
|
||||
sound: this.timerS.uri,
|
||||
title,
|
||||
vibrate: this.timerV,
|
||||
});
|
||||
if (firedTimers.length == 1) {
|
||||
Application.android.registerBroadcastReceiver(bID, (ctx, intent) => {
|
||||
EvtBus.$emit(bID, intent.getStringExtra("action"));
|
||||
Application.android.unregisterBroadcastReceiver(bID);
|
||||
});
|
||||
} else {
|
||||
Application.android.unregisterBroadcastReceiver(bID);
|
||||
Application.android.registerBroadcastReceiver(bID, (ctx, intent) => {
|
||||
if (intent.getStringExtra("action") == "dismissAll") {
|
||||
firedTimers.forEach((t) => this.removeTimer(t.id, 1));
|
||||
Application.android.unregisterBroadcastReceiver(bID);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
openReminder() {
|
||||
this.clearATIs();
|
||||
this.$showModal(TimerReminder, {
|
||||
fullscreen: true,
|
||||
props: {
|
||||
formattedTime: this.formattedTime,
|
||||
removeTimer: this.removeTimer,
|
||||
togglePause: this.togglePause,
|
||||
timerAlert: this.timerAlert,
|
||||
showToast: this.showToast,
|
||||
},
|
||||
}).then(() => {
|
||||
this.clearATIs();
|
||||
this.key = Math.floor(Math.random() * 900) + 100;
|
||||
});
|
||||
},
|
||||
foregroundService(n) {
|
||||
const ctx = Utils.ad.getApplicationContext();
|
||||
const intent = new android.content.Intent(
|
||||
ctx,
|
||||
com.tns.ForegroundService.class
|
||||
);
|
||||
if (n && !this.FGS) {
|
||||
parseInt(Device.sdkVersion) < 26
|
||||
? ctx.startService(intent)
|
||||
: ctx.startForegroundService(intent);
|
||||
this.setFgS(1);
|
||||
setNumber("FGS", 1);
|
||||
} else if (!this.activeTs.length) {
|
||||
ctx.stopService(intent);
|
||||
this.setFgS(0);
|
||||
setNumber("FGS", 0);
|
||||
}
|
||||
},
|
||||
|
||||
// DATA HANDLERS
|
||||
addTimer() {
|
||||
this.$showModal(TimePickerHMS, {
|
||||
props: {
|
||||
title: "ntmr",
|
||||
label: `${localize("tmr", this.activeTs.length + 1)}`,
|
||||
action: "strtBtn",
|
||||
showPreset: this.timerPs.length,
|
||||
},
|
||||
}).then((res) => {
|
||||
if (res) {
|
||||
if (res == "presets") {
|
||||
let list = this.timerPs.map(
|
||||
(e) => `${e.label} - ${this.formattedTime(e.time)}`
|
||||
);
|
||||
this.$showModal(Action, {
|
||||
props: {
|
||||
title: "prsts",
|
||||
list,
|
||||
},
|
||||
}).then((preset) => {
|
||||
if (preset) {
|
||||
let timer = JSON.parse(
|
||||
JSON.stringify(this.timerPs[list.indexOf(preset)])
|
||||
);
|
||||
timer.id = utils.getRandomID(1);
|
||||
timer.recipeID = this.recipeID;
|
||||
timer.timerInt = timer.isPaused = 0;
|
||||
timer.preset = timer.mode = 1;
|
||||
this.addAT({
|
||||
timer,
|
||||
i: this.activeTs.length,
|
||||
});
|
||||
this.timerInfo();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
let mode = res.time != "00:00:00" ? 1 : 0;
|
||||
this.addAT({
|
||||
timer: {
|
||||
id: utils.getRandomID(1),
|
||||
label: res.label,
|
||||
recipeID: this.recipeID,
|
||||
time: res.time,
|
||||
timerInt: 0,
|
||||
isPaused: 0,
|
||||
preset: 0,
|
||||
done: 0,
|
||||
mode,
|
||||
},
|
||||
i: this.activeTs.length,
|
||||
});
|
||||
this.timerInfo();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
removeTimer(id, noUndo) {
|
||||
let i = this.activeTs.findIndex((e) => e.id == id);
|
||||
let temp = this.activeTs[i];
|
||||
clearInterval(temp.timerInt);
|
||||
temp.timerInt = 0;
|
||||
this.removeAT(i);
|
||||
let secs = [getNumber(`${temp.id}c`, 0), getNumber(`${temp.id}d`, 0)];
|
||||
function removeSettings() {
|
||||
remove(`${temp.id}c`);
|
||||
remove(`${temp.id}d`);
|
||||
}
|
||||
removeSettings();
|
||||
if (!noUndo) {
|
||||
this.showUndoBar("tmrRm")
|
||||
.then(() => {
|
||||
setNumber(`${temp.id}c`, secs[0]),
|
||||
setNumber(`${temp.id}d`, secs[1]),
|
||||
this.addAT({
|
||||
timer: temp,
|
||||
i,
|
||||
});
|
||||
this.timerInfo();
|
||||
})
|
||||
.catch(() => removeSettings());
|
||||
}
|
||||
this.timerAlert();
|
||||
this.timerInfo();
|
||||
},
|
||||
togglePause(timer, n) {
|
||||
timer.isPaused =
|
||||
typeof n === "number" ? n : (!timer.isPaused as boolean | 0);
|
||||
this.updateAT(timer);
|
||||
n ? 0 : this.timerInfo();
|
||||
},
|
||||
showToast(data) {
|
||||
this.animateBar(this.snackbar, 0);
|
||||
this.animateBar(this.appbar, 0).then(() => {
|
||||
this.showUndo = 0;
|
||||
this.toast = localize(data);
|
||||
this.animateBar(this.toastbar, 1, 1);
|
||||
let a = 5;
|
||||
clearInterval(barTimer);
|
||||
barTimer = setInterval(() => a-- < 1 && this.hideBar(), 1000);
|
||||
});
|
||||
},
|
||||
showUndoBar(message) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.animateBar(this.toastbar, 0);
|
||||
this.animateBar(this.appbar, 0).then(() => {
|
||||
this.toast = null;
|
||||
this.showUndo = 1;
|
||||
this.snackMsg = message;
|
||||
this.countdown = 5;
|
||||
this.animateBar(this.snackbar, 1, 1).then(() => {
|
||||
let a = 5;
|
||||
clearInterval(barTimer);
|
||||
barTimer = setInterval(() => {
|
||||
if (this.undo) {
|
||||
this.hideBar();
|
||||
resolve(1);
|
||||
}
|
||||
this.countdown = Math.round((a -= 0.1));
|
||||
if (this.countdown < 1) {
|
||||
this.hideBar();
|
||||
reject(1);
|
||||
}
|
||||
}, 100);
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
hideBar() {
|
||||
clearInterval(barTimer);
|
||||
this.animateBar(this.toast ? this.toastbar : this.snackbar, 0).then(
|
||||
() => {
|
||||
this.showUndo = this.undo = 0;
|
||||
this.toast = null;
|
||||
this.animateBar(this.appbar, 1);
|
||||
}
|
||||
);
|
||||
},
|
||||
undoDel() {
|
||||
this.undo = 1;
|
||||
},
|
||||
|
||||
//NAVIGATION HANDLERS
|
||||
navigateTo() {
|
||||
this.$navigateTo(CTSettings, {
|
||||
transition: {
|
||||
name: this.RTL ? "slideRight" : "slide",
|
||||
duration: 200,
|
||||
curve: "easeOut",
|
||||
},
|
||||
});
|
||||
},
|
||||
navigateBack() {
|
||||
setNumber("isTimer", 0);
|
||||
this.hasBackStack
|
||||
? this.$navigateBack()
|
||||
: this.$navigateTo(EnRecipes, {
|
||||
clearHistory: true,
|
||||
});
|
||||
},
|
||||
|
||||
// HELPERS
|
||||
},
|
||||
created() {
|
||||
this.clearATIs();
|
||||
this.recipeID && this.addTimer();
|
||||
},
|
||||
destroyed() {
|
||||
setNumber("isTimer", 0);
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -1,57 +0,0 @@
|
|||
<template>
|
||||
<Page @loaded="onPageLoad">
|
||||
<ActionBar flat="true">
|
||||
<GridLayout rows="*" columns="auto, *, auto">
|
||||
<Button class="ico left" :text="icon.back" @tap="$navigateBack()" />
|
||||
<Label class="title tb" :text="'grocery' | L" col="1" />
|
||||
<Button class="ico left" :text="icon.today" col="2" />
|
||||
</GridLayout>
|
||||
</ActionBar>
|
||||
<GridLayout columns="" rows=""> </GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ApplicationSettings, Observable } from "@nativescript/core";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
appTheme: "Light",
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "recipes", "mealPlans"]),
|
||||
isLightMode() {
|
||||
return this.appTheme === "Light";
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["setComponent"]),
|
||||
onPageLoad(args) {
|
||||
const page = args.object;
|
||||
page.bindingContext = new Observable();
|
||||
this.setComponent("GroceryList");
|
||||
},
|
||||
// HELPERS
|
||||
|
||||
// NAVIGATION HANDLERS
|
||||
viewRecipe(recipeID) {
|
||||
let recipe = this.recipes.filter((e) => e.id === recipeID)[0];
|
||||
if (recipe) {
|
||||
this.$navigateTo(ViewRecipe, {
|
||||
props: {
|
||||
filterTrylater: true,
|
||||
recipeID,
|
||||
},
|
||||
backstackVisible: false,
|
||||
});
|
||||
}
|
||||
},
|
||||
// DATA HANDLERS
|
||||
},
|
||||
created() {
|
||||
this.appTheme = ApplicationSettings.getString("appTheme", "Light");
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -1,106 +0,0 @@
|
|||
<template>
|
||||
<Page @loaded="onPageLoad" actionBarHidden="true">
|
||||
<GridLayout rows="*, auto" columns="auto, *">
|
||||
<ListView
|
||||
colSpan="2"
|
||||
rowSpan="2"
|
||||
class="options-list"
|
||||
for="item in items"
|
||||
>
|
||||
<v-template if="$index == 0">
|
||||
<Label class="pageTitle" :text="'Settings' | L" />
|
||||
</v-template>
|
||||
<v-template if="$index == 6">
|
||||
<StackLayout class="listSpace"> </StackLayout>
|
||||
</v-template>
|
||||
<v-template>
|
||||
<GridLayout
|
||||
columns="auto, *"
|
||||
class="option"
|
||||
@touch="touch($event, item.view)"
|
||||
>
|
||||
<Label
|
||||
verticalAlignment="center"
|
||||
class="ico"
|
||||
:text="icon[item.icon]"
|
||||
/>
|
||||
<Label verticalAlignment="center" col="1" :text="item.title | L" />
|
||||
</GridLayout>
|
||||
</v-template>
|
||||
</ListView>
|
||||
<GridLayout row="1" class="appbar" rows="*" columns="auto, *">
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Observable } from "@nativescript/core";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import Interface from "./Settings/Interface.vue";
|
||||
import Options from "./Settings/Options.vue";
|
||||
import Database from "./Settings/Database.vue";
|
||||
import Reset from "./Settings/Reset.vue";
|
||||
import About from "./Settings/About.vue";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
items: [
|
||||
{},
|
||||
{
|
||||
icon: "interface",
|
||||
title: "intf",
|
||||
view: Interface,
|
||||
},
|
||||
{
|
||||
icon: "opts",
|
||||
title: "opts",
|
||||
view: Options,
|
||||
},
|
||||
{
|
||||
icon: "db",
|
||||
title: "db",
|
||||
view: Database,
|
||||
},
|
||||
{
|
||||
icon: "reset",
|
||||
title: "rest",
|
||||
view: Reset,
|
||||
},
|
||||
{
|
||||
icon: "info",
|
||||
title: "About",
|
||||
view: About,
|
||||
},
|
||||
{},
|
||||
],
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon"]),
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["setComponent"]),
|
||||
onPageLoad(args) {
|
||||
const page = args.object;
|
||||
page.bindingContext = new Observable();
|
||||
this.setComponent("Settings");
|
||||
},
|
||||
// HELPERS
|
||||
navigateTo(view) {
|
||||
this.$navigateTo(view, {
|
||||
transition: {
|
||||
name: "slide",
|
||||
duration: 200,
|
||||
curve: "easeOut",
|
||||
},
|
||||
});
|
||||
},
|
||||
touch({ object, action }, view) {
|
||||
object.className = action.match(/down|move/) ? "option fade" : "option";
|
||||
if (action == "up") this.navigateTo(view);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -1,116 +0,0 @@
|
|||
<template>
|
||||
<Page @loaded="onPageLoad" actionBarHidden="true">
|
||||
<GridLayout rows="*, auto" columns="auto, *">
|
||||
<ListView
|
||||
rowSpan="2"
|
||||
colSpan="2"
|
||||
class="options-list"
|
||||
for="item in items"
|
||||
>
|
||||
<v-template if="$index == 0">
|
||||
<Label class="pageTitle" :text="'About' | L" />
|
||||
</v-template>
|
||||
<v-template if="$index == 1">
|
||||
<StackLayout class="app-info">
|
||||
<Image
|
||||
class="icon"
|
||||
src="res://logo"
|
||||
stretch="none"
|
||||
/>
|
||||
<Label class="name tb tac" :text="'EnRecipes' | L" />
|
||||
<Label :text="getVersion" class="version tb tac" />
|
||||
|
||||
<Label class="info tac tw" :text="'appInfo' | L" />
|
||||
</StackLayout>
|
||||
</v-template>
|
||||
<v-template if="$index == 8">
|
||||
<StackLayout class="listSpace"> </StackLayout>
|
||||
</v-template>
|
||||
<v-template>
|
||||
<GridLayout
|
||||
columns="auto, *"
|
||||
class="option"
|
||||
@touch="touch($event, item.url)"
|
||||
>
|
||||
<Label class="ico" :text="icon[item.icon]" />
|
||||
<Label col="1" :text="item.title | L" />
|
||||
</GridLayout>
|
||||
</v-template>
|
||||
</ListView>
|
||||
<GridLayout row="1" class="appbar" rows="*" columns="auto, *">
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Application, Observable, Utils } from "@nativescript/core";
|
||||
import { mapState } from "vuex";
|
||||
|
||||
export default {
|
||||
computed: {
|
||||
...mapState(["icon"]),
|
||||
items() {
|
||||
return [
|
||||
{},
|
||||
{},
|
||||
{
|
||||
icon: "gh",
|
||||
title: "gh",
|
||||
url: "https://github.com/vishnuraghavb/EnRecipes",
|
||||
},
|
||||
{
|
||||
icon: "tg",
|
||||
title: "joinTG",
|
||||
url: "https://t.me/enrecipes",
|
||||
},
|
||||
{
|
||||
icon: "help",
|
||||
title: "guide",
|
||||
url: "https://github.com/vishnuraghavb/EnRecipes/wiki/User-Guide",
|
||||
},
|
||||
{
|
||||
icon: "priv",
|
||||
title: "priv",
|
||||
url:
|
||||
"https://github.com/vishnuraghavb/EnRecipes/blob/main/PRIVACY.md",
|
||||
},
|
||||
{
|
||||
icon: "don",
|
||||
title: "donate",
|
||||
url: "https://www.vishnuraghav.com/donate",
|
||||
},
|
||||
{
|
||||
icon: "trans",
|
||||
title: "trnsl",
|
||||
url: "https://hosted.weblate.org/projects/enrecipes/app-translations",
|
||||
},
|
||||
{},
|
||||
];
|
||||
},
|
||||
getVersion() {
|
||||
let ctx = Application.android.context;
|
||||
return (
|
||||
"v" +
|
||||
ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0)
|
||||
.versionName
|
||||
);
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
onPageLoad(args) {
|
||||
const page = args.object;
|
||||
page.bindingContext = new Observable();
|
||||
},
|
||||
// HELPERS
|
||||
openURL(url) {
|
||||
Utils.openUrl(url);
|
||||
},
|
||||
touch({ object, action }, url) {
|
||||
object.className = action.match(/down|move/) ? "option fade" : "option";
|
||||
if (action == "up") this.openURL(url);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -1,139 +0,0 @@
|
|||
<template>
|
||||
<Page @loaded="onPageLoad" actionBarHidden="true">
|
||||
<GridLayout rows="*, auto" columns="auto, *">
|
||||
<ListView
|
||||
colSpan="2"
|
||||
rowSpan="2"
|
||||
class="options-list"
|
||||
for="item in items"
|
||||
>
|
||||
<v-template if="$index == 0">
|
||||
<Label class="pageTitle" :text="'Settings' | L" />
|
||||
</v-template>
|
||||
<v-template if="item.type == 'switch'">
|
||||
<GridLayout columns="auto, *, auto" class="option">
|
||||
<Label class="ico" :text="icon[item.icon]" />
|
||||
<StackLayout col="1" verticalAlignment="center">
|
||||
<Label :text="item.title | L" class="info" />
|
||||
<Label
|
||||
v-if="item.subTitle"
|
||||
:text="item.subTitle | L"
|
||||
class="sub"
|
||||
/>
|
||||
</StackLayout>
|
||||
<Switch
|
||||
:color="item.checked ? '#ff5200' : '#adb5bd'"
|
||||
col="2"
|
||||
:checked="item.checked"
|
||||
@checkedChange="item.action"
|
||||
/>
|
||||
</GridLayout>
|
||||
</v-template>
|
||||
<v-template if="item.type == 'list'">
|
||||
<GridLayout
|
||||
columns="auto, *"
|
||||
class="option"
|
||||
@touch="touch($event, item.action)"
|
||||
>
|
||||
<Label class="ico" :text="icon[item.icon]" />
|
||||
<StackLayout col="1">
|
||||
<Label :text="item.title | L" class="info" />
|
||||
<Label :text="item.subTitle" class="sub" />
|
||||
</StackLayout>
|
||||
</GridLayout>
|
||||
</v-template>
|
||||
<v-template>
|
||||
<StackLayout class="listSpace"> </StackLayout>
|
||||
</v-template>
|
||||
</ListView>
|
||||
<GridLayout row="1" class="appbar" rows="*" columns="auto, *">
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Observable } from "@nativescript/core";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import { localize } from "@nativescript/localize";
|
||||
import ActionDialog from "../modal/ActionDialog.vue";
|
||||
import * as utils from "~/shared/utils";
|
||||
|
||||
export default {
|
||||
computed: {
|
||||
...mapState(["icon", "timerDelay", "timerSound", "timerVibrate"]),
|
||||
items() {
|
||||
return [
|
||||
{},
|
||||
{
|
||||
type: "list",
|
||||
icon: "delay",
|
||||
title: "dlyDur",
|
||||
subTitle: this.timerDelay,
|
||||
action: this.showDelayList,
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "sound",
|
||||
title: "tmrSnd",
|
||||
subTitle: this.timerSound.title,
|
||||
action: this.showSoundsList,
|
||||
},
|
||||
{
|
||||
type: "switch",
|
||||
icon: "vibrate",
|
||||
title: "tmrvbrt",
|
||||
checked: this.timerVibrate,
|
||||
action: this.toggleTimerVibrate,
|
||||
},
|
||||
{},
|
||||
];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["setTimerDelay", "setTimerSound", "setTimerVibrate"]),
|
||||
onPageLoad(args) {
|
||||
const page = args.object;
|
||||
page.bindingContext = new Observable();
|
||||
},
|
||||
toggleTimerVibrate({ object }) {
|
||||
this.setTimerVibrate(object.checked);
|
||||
},
|
||||
showDelayList() {
|
||||
let list = [
|
||||
...Array.from(Array(4), (_, x) => x + 1),
|
||||
...Array.from(Array(6), (_, x) => (x + 1) * 5),
|
||||
].map(
|
||||
(e, i) => `${e} ${i == 0 ? localize("minute") : localize("minutes")}`
|
||||
);
|
||||
this.$showModal(ActionDialog, {
|
||||
props: {
|
||||
title: "dlyDur",
|
||||
list,
|
||||
},
|
||||
}).then((dur) => dur && this.setTimerDelay(dur));
|
||||
},
|
||||
showSoundsList() {
|
||||
let tones = utils.getTones();
|
||||
this.$showModal(ActionDialog, {
|
||||
props: {
|
||||
title: "tmrSnd",
|
||||
list: tones.map((e) => e.title),
|
||||
},
|
||||
}).then(
|
||||
(tone) =>
|
||||
tone &&
|
||||
tone !== this.timerSound.title &&
|
||||
this.setTimerSound(tones.filter((e) => e.title === tone)[0])
|
||||
);
|
||||
},
|
||||
|
||||
// HELPERS
|
||||
touch({ object, action }, method) {
|
||||
object.className = action.match(/down|move/) ? "option fade" : "option";
|
||||
if (action == "up") method();
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -1,455 +0,0 @@
|
|||
<template>
|
||||
<Page @loaded="onPageLoad" actionBarHidden="true">
|
||||
<GridLayout rows="*, auto" columns="auto, *">
|
||||
<ListView
|
||||
colSpan="2"
|
||||
rowSpan="2"
|
||||
class="options-list"
|
||||
for="item in items"
|
||||
>
|
||||
<v-template if="$index == 0">
|
||||
<Label class="pageTitle" :text="'db' | L" />
|
||||
</v-template>
|
||||
<v-template if="$index == 4">
|
||||
<StackLayout class="listSpace"> </StackLayout>
|
||||
</v-template>
|
||||
<v-template>
|
||||
<GridLayout
|
||||
columns="auto, *"
|
||||
class="option"
|
||||
@touch="touch($event, item.action)"
|
||||
>
|
||||
<Label class="ico" :text="icon[item.icon]" />
|
||||
<StackLayout col="1" verticalAlignment="center">
|
||||
<Label :text="item.title | L" class="info" />
|
||||
<Label v-if="item.subTitle" :text="item.subTitle" class="sub" />
|
||||
</StackLayout>
|
||||
</GridLayout>
|
||||
</v-template>
|
||||
</ListView>
|
||||
<GridLayout
|
||||
v-show="!toast && !progress"
|
||||
row="1"
|
||||
class="appbar"
|
||||
rows="*"
|
||||
columns="auto, *"
|
||||
>
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
<GridLayout
|
||||
v-show="toast"
|
||||
row="1"
|
||||
colSpan="2"
|
||||
class="appbar snackBar"
|
||||
columns="*"
|
||||
@tap="toast = null"
|
||||
>
|
||||
<FlexboxLayout minHeight="48" alignItems="center">
|
||||
<Label class="title msg" :text="toast" />
|
||||
</FlexboxLayout>
|
||||
</GridLayout>
|
||||
<GridLayout
|
||||
v-show="progress"
|
||||
row="1"
|
||||
colSpan="2"
|
||||
class="appbar snackBar"
|
||||
columns="auto, *"
|
||||
>
|
||||
<ActivityIndicator :busy="progress ? true : false" />
|
||||
<Label col="1" class="title" :text="progress" textWrap="true" />
|
||||
</GridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
ApplicationSettings,
|
||||
path,
|
||||
knownFolders,
|
||||
File,
|
||||
Folder,
|
||||
Observable,
|
||||
Application,
|
||||
} from "@nativescript/core";
|
||||
import { localize } from "@nativescript/localize";
|
||||
import ConfirmDialog from "../modal/ConfirmDialog.vue";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
|
||||
import * as utils from "~/shared/utils";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
backupFolder: null,
|
||||
progress: null,
|
||||
toast: null,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState([
|
||||
"icon",
|
||||
"recipes",
|
||||
"cuisines",
|
||||
"categories",
|
||||
"yieldUnits",
|
||||
"units",
|
||||
"mealPlans",
|
||||
"importSummary",
|
||||
]),
|
||||
items() {
|
||||
return [
|
||||
{},
|
||||
{
|
||||
icon: "folder",
|
||||
title: "buFol",
|
||||
subTitle: this.backupFolder,
|
||||
action: this.setBackupFolder,
|
||||
},
|
||||
{
|
||||
icon: "exp",
|
||||
title: "expBu",
|
||||
subTitle: localize("buInfo"),
|
||||
action: this.exportCheck,
|
||||
},
|
||||
{
|
||||
icon: "imp",
|
||||
title: "impBu",
|
||||
subTitle: localize("impInfo"),
|
||||
action: this.openZipFile,
|
||||
},
|
||||
{},
|
||||
];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions([
|
||||
"importListItemsAction",
|
||||
"importRecipesAction",
|
||||
"importMealPlansAction",
|
||||
"unlinkBrokenImages",
|
||||
"clearImportSummary",
|
||||
]),
|
||||
onPageLoad(args) {
|
||||
const page = args.object;
|
||||
page.bindingContext = new Observable();
|
||||
const ContentResolver = Application.android.nativeApp.getContentResolver();
|
||||
this.backupFolder = ApplicationSettings.getString("backupFolder");
|
||||
if (
|
||||
!this.backupFolder ||
|
||||
ContentResolver.getPersistedUriPermissions().isEmpty()
|
||||
) {
|
||||
this.backupFolder = null;
|
||||
}
|
||||
},
|
||||
// BACKUP FOLDER PICKER
|
||||
setBackupFolder(startExport) {
|
||||
const ContentResolver = Application.android.nativeApp.getContentResolver();
|
||||
const FLAGS =
|
||||
android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION |
|
||||
android.content.Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
|
||||
utils.getBackupFolder().then((uri) => {
|
||||
if (uri != null) {
|
||||
if (this.backupFolder)
|
||||
ContentResolver.releasePersistableUriPermission(
|
||||
new android.net.Uri.parse(this.backupFolder),
|
||||
FLAGS
|
||||
);
|
||||
this.backupFolder = uri.toString();
|
||||
ApplicationSettings.setString("backupFolder", this.backupFolder);
|
||||
// PERSIST PERMISSIONS
|
||||
ContentResolver.takePersistableUriPermission(uri, FLAGS);
|
||||
if (startExport && this.backupFolder) {
|
||||
this.exportBackup();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// EXPORT HANDLERS
|
||||
exportCheck() {
|
||||
const ContentResolver = Application.android.nativeApp.getContentResolver();
|
||||
if (!this.recipes.length) {
|
||||
this.toast = localize("aFBu");
|
||||
utils.timer(5, (val) => {
|
||||
if (!val) this.toast = val;
|
||||
});
|
||||
} else {
|
||||
if (
|
||||
!this.backupFolder ||
|
||||
ContentResolver.getPersistedUriPermissions().isEmpty()
|
||||
) {
|
||||
this.setBackupFolder(true);
|
||||
} else this.exportBackup();
|
||||
}
|
||||
},
|
||||
exportBackup() {
|
||||
this.progress = localize("expip");
|
||||
this.exportFiles("create");
|
||||
let date = new Date();
|
||||
let formattedDate =
|
||||
date.getFullYear() +
|
||||
"-" +
|
||||
("0" + (date.getMonth() + 1)).slice(-2) +
|
||||
"-" +
|
||||
("0" + date.getDate()).slice(-2) +
|
||||
"_" +
|
||||
("0" + date.getHours()).slice(-2) +
|
||||
("0" + date.getMinutes()).slice(-2) +
|
||||
("0" + date.getSeconds()).slice(-2);
|
||||
|
||||
let filename = `${localize("EnRecipes")}_${formattedDate}.zip`;
|
||||
let fromPath = path.join(knownFolders.documents().path, "EnRecipes");
|
||||
utils.Zip.zip(fromPath, this.backupFolder, filename)
|
||||
.then((res) => res && this.showExportSummary(filename))
|
||||
.catch((err) => {
|
||||
console.log("Backup error: ", err);
|
||||
this.progress = null;
|
||||
this.setBackupFolder(true);
|
||||
});
|
||||
},
|
||||
exportFiles(option) {
|
||||
const folder = path.join(knownFolders.documents().path, "EnRecipes");
|
||||
const EnRecipesFile = File.fromPath(path.join(folder, "recipes.json"));
|
||||
let userCuisinesFile,
|
||||
userCategoriesFile,
|
||||
userYieldUnitsFile,
|
||||
userUnitsFile,
|
||||
mealPlansFile;
|
||||
if (this.cuisines.length)
|
||||
userCuisinesFile = File.fromPath(
|
||||
path.join(folder, "userCuisines.json")
|
||||
);
|
||||
if (this.categories.length)
|
||||
userCategoriesFile = File.fromPath(
|
||||
path.join(folder, "userCategories.json")
|
||||
);
|
||||
if (this.yieldUnits.length)
|
||||
userYieldUnitsFile = File.fromPath(
|
||||
path.join(folder, "userYieldUnits.json")
|
||||
);
|
||||
if (this.units.length)
|
||||
userUnitsFile = File.fromPath(path.join(folder, "userUnits.json"));
|
||||
if (this.mealPlans.length)
|
||||
mealPlansFile = File.fromPath(path.join(folder, "mealPlans.json"));
|
||||
switch (option) {
|
||||
case "create":
|
||||
this.writeDataToFile(EnRecipesFile, this.recipes);
|
||||
this.cuisines.length &&
|
||||
this.writeDataToFile(userCuisinesFile, this.cuisines);
|
||||
this.categories.length &&
|
||||
this.writeDataToFile(userCategoriesFile, this.categories);
|
||||
this.yieldUnits.length &&
|
||||
this.writeDataToFile(userYieldUnitsFile, this.yieldUnits);
|
||||
this.units.length && this.writeDataToFile(userUnitsFile, this.units);
|
||||
this.mealPlans.length &&
|
||||
this.writeDataToFile(mealPlansFile, this.mealPlans);
|
||||
break;
|
||||
case "delete":
|
||||
EnRecipesFile.remove();
|
||||
this.cuisines.length && userCuisinesFile.remove();
|
||||
this.categories.length && userCategoriesFile.remove();
|
||||
this.yieldUnits.length && userYieldUnitsFile.remove();
|
||||
this.units.length && userUnitsFile.remove();
|
||||
this.mealPlans.length && mealPlansFile.remove();
|
||||
break;
|
||||
}
|
||||
},
|
||||
writeDataToFile(file, data) {
|
||||
file.writeText(JSON.stringify(data));
|
||||
},
|
||||
showExportSummary(filename) {
|
||||
this.progress = null;
|
||||
let description = localize("buto", `"${filename}"`);
|
||||
this.$showModal(ConfirmDialog, {
|
||||
props: {
|
||||
title: "expSuc",
|
||||
description,
|
||||
okButtonText: "OK",
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
// IMPORT HANDLERS
|
||||
openZipFile() {
|
||||
utils.getBackupFile().then((uri) => {
|
||||
if (uri) {
|
||||
let dest = knownFolders.temp().path;
|
||||
utils.Zip.unzip(uri, dest)
|
||||
.then((res) => res && this.validateZipContent(res, uri))
|
||||
.catch(() => this.failedImport(localize("buInc")));
|
||||
}
|
||||
});
|
||||
},
|
||||
validateZipContent(extractedFolderPath, uri) {
|
||||
this.progress = localize("impip");
|
||||
let cacheFolderPath = extractedFolderPath + "/EnRecipes";
|
||||
const EnRecipesFilePath = cacheFolderPath + "/recipes.json";
|
||||
const ImagesFolderPath = cacheFolderPath + "/Images";
|
||||
const userCuisinesFilePath = cacheFolderPath + "/userCuisines.json";
|
||||
const userCategoriesFilePath = cacheFolderPath + "/userCategories.json";
|
||||
const userYieldUnitsFilePath = cacheFolderPath + "/userYieldUnits.json";
|
||||
const userUnitsFilePath = cacheFolderPath + "/userUnits.json";
|
||||
const mealPlansFilePath = cacheFolderPath + "/mealPlans.json";
|
||||
if (Folder.exists(cacheFolderPath)) {
|
||||
this.isFileDataValid([
|
||||
{
|
||||
path: EnRecipesFilePath,
|
||||
db: "EnRecipesDB",
|
||||
file: "recipes.json",
|
||||
},
|
||||
{
|
||||
path: userCuisinesFilePath,
|
||||
db: "userCuisinesDB",
|
||||
file: "userCuisines.json",
|
||||
},
|
||||
{
|
||||
path: userCategoriesFilePath,
|
||||
db: "userCategoriesDB",
|
||||
file: "userCategories.json",
|
||||
},
|
||||
{
|
||||
path: userYieldUnitsFilePath,
|
||||
db: "userYieldUnitsDB",
|
||||
file: "userYieldUnits.json",
|
||||
},
|
||||
{
|
||||
path: userUnitsFilePath,
|
||||
db: "userUnitsDB",
|
||||
file: "userUnits.json",
|
||||
},
|
||||
{
|
||||
path: mealPlansFilePath,
|
||||
db: "mealPlansDB",
|
||||
file: "mealPlans.json",
|
||||
},
|
||||
]);
|
||||
const timer = setInterval(() => {
|
||||
if (!this.progress) clearInterval(timer);
|
||||
if (this.progress && this.importSummary.found) {
|
||||
Folder.exists(ImagesFolderPath)
|
||||
? this.importImages(uri)
|
||||
: this.showImportSummary();
|
||||
}
|
||||
}, 100);
|
||||
} else this.failedImport(localize("buInc"));
|
||||
},
|
||||
isFileDataValid(file) {
|
||||
const files = file.filter((e) => File.exists(e.path));
|
||||
if (files.length) {
|
||||
let isValid = files.map((e) => false);
|
||||
files.forEach((file, i) => {
|
||||
File.fromPath(file.path)
|
||||
.readText()
|
||||
.then((data) => {
|
||||
isValid[i] = this.hasValidJSON(data);
|
||||
if (!isValid[i]) {
|
||||
this.failedImport(
|
||||
`${localize("buMod")}\n\n${localize("invFile")}: ${file.file}`
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
if (isValid.every((e) => e === true)) {
|
||||
files.forEach((file) => {
|
||||
File.fromPath(file.path)
|
||||
.readText()
|
||||
.then((data) => {
|
||||
this.importDataToDB(JSON.parse(data), file.db);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
} else this.failedImport(localize("buEmp"));
|
||||
},
|
||||
failedImport(description) {
|
||||
this.progress = null;
|
||||
knownFolders.temp().clear();
|
||||
this.$showModal(ConfirmDialog, {
|
||||
props: {
|
||||
title: "impFail",
|
||||
description,
|
||||
okButtonText: "OK",
|
||||
},
|
||||
});
|
||||
},
|
||||
hasValidJSON(data) {
|
||||
try {
|
||||
JSON.parse(data) && Array.isArray(JSON.parse(data));
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
importDataToDB(data, db) {
|
||||
switch (db) {
|
||||
case "EnRecipesDB":
|
||||
this.importRecipesAction(data);
|
||||
break;
|
||||
case "userCuisinesDB":
|
||||
this.importListItemsAction({
|
||||
data,
|
||||
listName: "cuisines",
|
||||
});
|
||||
break;
|
||||
case "userCategoriesDB":
|
||||
this.importListItemsAction({
|
||||
data,
|
||||
listName: "categories",
|
||||
});
|
||||
break;
|
||||
case "userYieldUnitsDB":
|
||||
this.importListItemsAction({
|
||||
data,
|
||||
listName: "yieldUnits",
|
||||
});
|
||||
break;
|
||||
case "userUnitsDB":
|
||||
this.importListItemsAction({
|
||||
data,
|
||||
listName: "units",
|
||||
});
|
||||
break;
|
||||
case "mealPlansDB":
|
||||
this.importMealPlansAction(data);
|
||||
break;
|
||||
}
|
||||
},
|
||||
importImages(uri) {
|
||||
let destPath = knownFolders.documents().path;
|
||||
Folder.fromPath(destPath);
|
||||
utils.Zip.unzip(uri, destPath).then((res) => {
|
||||
if (res) {
|
||||
this.showImportSummary();
|
||||
this.unlinkBrokenImages();
|
||||
}
|
||||
});
|
||||
},
|
||||
showImportSummary() {
|
||||
this.progress = null;
|
||||
knownFolders.temp().clear();
|
||||
this.exportFiles("delete");
|
||||
let { found, imported, updated } = this.importSummary;
|
||||
let exists = Math.abs(found - imported - updated) + updated;
|
||||
let importedNote = `\n${localize("recI")} ${imported}`;
|
||||
let existsNote = `\n${localize("recE")} ${exists}`;
|
||||
let updatedNote = `\n${localize("recU")} ${updated}`;
|
||||
this.$showModal(ConfirmDialog, {
|
||||
props: {
|
||||
title: "impSuc",
|
||||
description: `${found} ${localize(
|
||||
"recF"
|
||||
)}\n${importedNote}${existsNote}${updatedNote}`,
|
||||
okButtonText: "OK",
|
||||
},
|
||||
}).then(() => this.clearImportSummary());
|
||||
},
|
||||
|
||||
// HELPERS
|
||||
touch({ object, action }, method) {
|
||||
object.className = action.match(/down|move/) ? "option fade" : "option";
|
||||
if (action == "up") method();
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -1,171 +0,0 @@
|
|||
<template>
|
||||
<Page @loaded="onPageLoad" actionBarHidden="true">
|
||||
<GridLayout rows="*, auto" columns="auto, *">
|
||||
<ListView
|
||||
colSpan="2"
|
||||
rowSpan="2"
|
||||
class="options-list"
|
||||
for="item in items"
|
||||
>
|
||||
<v-template if="$index == 0">
|
||||
<Label class="pageTitle" :text="'intf' | L" />
|
||||
</v-template>
|
||||
<v-template if="$index == 4">
|
||||
<StackLayout class="listSpace"> </StackLayout>
|
||||
</v-template>
|
||||
<v-template>
|
||||
<GridLayout
|
||||
columns="auto, *"
|
||||
class="option"
|
||||
@touch="touch($event, item.action)"
|
||||
>
|
||||
<Label class="ico" :text="icon[item.icon]" />
|
||||
<StackLayout col="1">
|
||||
<Label :text="item.title | L" class="info" />
|
||||
<Label :text="item.subTitle" class="sub" />
|
||||
</StackLayout>
|
||||
</GridLayout>
|
||||
</v-template>
|
||||
</ListView>
|
||||
<GridLayout row="1" class="appbar" rows="*" columns="auto, *">
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
ApplicationSettings,
|
||||
Observable,
|
||||
Device,
|
||||
Frame,
|
||||
} from "@nativescript/core";
|
||||
import { localize, overrideLocale } from "@nativescript/localize";
|
||||
import ActionDialog from "../modal/ActionDialog.vue";
|
||||
import ConfirmDialog from "../modal/ConfirmDialog.vue";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import * as utils from "~/shared/utils";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
appLanguage: "English",
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "language", "appTheme", "layout"]),
|
||||
items() {
|
||||
return [
|
||||
{},
|
||||
{
|
||||
icon: "lang",
|
||||
title: "lang",
|
||||
subTitle: this.appLanguage,
|
||||
action: this.selectAppLanguage,
|
||||
},
|
||||
{
|
||||
icon: "theme",
|
||||
title: "Theme",
|
||||
subTitle: localize(
|
||||
ApplicationSettings.getString("appTheme", "sysDef")
|
||||
),
|
||||
action: this.selectThemes,
|
||||
},
|
||||
{
|
||||
icon: "layout",
|
||||
title: "listVM",
|
||||
subTitle: localize(this.layout),
|
||||
action: this.setLayoutMode,
|
||||
},
|
||||
{},
|
||||
];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["setTheme", "setLayout"]),
|
||||
onPageLoad(args) {
|
||||
const page = args.object;
|
||||
page.bindingContext = new Observable();
|
||||
},
|
||||
// LANGUAGE SELECTION
|
||||
selectAppLanguage() {
|
||||
let languages = this.language.map((e) => e.title);
|
||||
this.$showModal(ActionDialog, {
|
||||
props: {
|
||||
title: "lang",
|
||||
list: [...languages],
|
||||
},
|
||||
}).then((action) => {
|
||||
if (action && action !== "Cancel" && this.appLanguage !== action) {
|
||||
let currentLocale = Device.language.split("-")[0];
|
||||
let locale = this.language.filter((e) => e.title === action)[0]
|
||||
.locale;
|
||||
if (currentLocale !== locale) {
|
||||
this.$showModal(ConfirmDialog, {
|
||||
props: {
|
||||
title: "appRst",
|
||||
description: localize("nLangInfo"),
|
||||
cancelButtonText: "cBtn",
|
||||
okButtonText: "rst",
|
||||
},
|
||||
}).then((result) => {
|
||||
if (result) {
|
||||
this.appLanguage = action;
|
||||
ApplicationSettings.setString("appLanguage", action);
|
||||
overrideLocale(locale);
|
||||
setTimeout(utils.restartApp, 250);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
// THEME SELECTION
|
||||
selectThemes() {
|
||||
this.$showModal(ActionDialog, {
|
||||
props: {
|
||||
title: "Theme",
|
||||
list: ["Light", "Dark", "Black", "sysDef", "sysDefB"],
|
||||
},
|
||||
}).then((action) => {
|
||||
if (
|
||||
action &&
|
||||
(ApplicationSettings.getString("appTheme") != this.appTheme
|
||||
? true
|
||||
: this.appTheme != action)
|
||||
) {
|
||||
this.setTheme(action);
|
||||
Frame.reloadPage();
|
||||
}
|
||||
});
|
||||
},
|
||||
// LAYOUT MODE
|
||||
setLayoutMode() {
|
||||
this.$showModal(ActionDialog, {
|
||||
props: {
|
||||
title: "listVM",
|
||||
list: ["detailed", "grid", "photogrid", "simple", "minimal"],
|
||||
},
|
||||
}).then((action) => {
|
||||
if (action && action !== "Cancel" && this.layoutMode !== action) {
|
||||
let act = action.toLowerCase();
|
||||
ApplicationSettings.setString("layout", act);
|
||||
this.setLayout(act);
|
||||
}
|
||||
});
|
||||
},
|
||||
// HELPERS
|
||||
touch({ object, action }, method) {
|
||||
object.className = action.match(/down|move/) ? "option fade" : "option";
|
||||
if (action == "up") method();
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.appLanguage = ApplicationSettings.getString(
|
||||
"appLanguage",
|
||||
localize("sysDef")
|
||||
);
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -1,119 +0,0 @@
|
|||
<template>
|
||||
<Page @loaded="onPageLoad" actionBarHidden="true">
|
||||
<GridLayout rows="*, auto" columns="auto, *">
|
||||
<ListView
|
||||
colSpan="2"
|
||||
rowSpan="2"
|
||||
class="options-list"
|
||||
for="item in items"
|
||||
>
|
||||
<v-template if="$index == 0">
|
||||
<Label class="pageTitle" :text="'opts' | L" />
|
||||
</v-template>
|
||||
<v-template if="item.type == 'switch'">
|
||||
<GridLayout columns="auto, *, auto" class="option">
|
||||
<Label class="ico" :text="icon[item.icon]" />
|
||||
<StackLayout col="1" verticalAlignment="center">
|
||||
<Label :text="item.title | L" class="info" />
|
||||
<Label
|
||||
v-if="item.subTitle"
|
||||
:text="item.subTitle | L"
|
||||
class="sub"
|
||||
/>
|
||||
</StackLayout>
|
||||
<Switch
|
||||
:color="item.checked ? '#ff5200' : '#adb5bd'"
|
||||
col="2"
|
||||
:checked="item.checked"
|
||||
@checkedChange="item.action"
|
||||
/>
|
||||
</GridLayout>
|
||||
</v-template>
|
||||
<v-template>
|
||||
<StackLayout class="listSpace"> </StackLayout>
|
||||
</v-template>
|
||||
</ListView>
|
||||
<GridLayout
|
||||
v-show="!toast"
|
||||
row="1"
|
||||
class="appbar"
|
||||
rows="*"
|
||||
columns="auto, *"
|
||||
>
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
<GridLayout
|
||||
v-show="toast"
|
||||
row="1"
|
||||
colSpan="2"
|
||||
class="appbar snackBar"
|
||||
columns="*"
|
||||
@tap="toast = null"
|
||||
>
|
||||
<FlexboxLayout minHeight="48" alignItems="center">
|
||||
<Label class="title msg" :text="toast" />
|
||||
</FlexboxLayout>
|
||||
</GridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Observable } from "@nativescript/core";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import { localize } from "@nativescript/localize";
|
||||
import * as utils from "~/shared/utils";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
toast: null,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "shakeEnabled", "mondayFirst"]),
|
||||
items() {
|
||||
return [
|
||||
{},
|
||||
{
|
||||
type: "switch",
|
||||
icon: "shuf",
|
||||
title: "sVw",
|
||||
subTitle: "sVwInfo",
|
||||
checked: this.shakeEnabled,
|
||||
action: this.toggleShake,
|
||||
},
|
||||
{
|
||||
type: "switch",
|
||||
icon: "week",
|
||||
title: "swm",
|
||||
checked: this.mondayFirst,
|
||||
action: this.toggleFirstDay,
|
||||
},
|
||||
{},
|
||||
];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["setShake", "setFirstDay"]),
|
||||
onPageLoad(args) {
|
||||
const page = args.object;
|
||||
page.bindingContext = new Observable();
|
||||
},
|
||||
toggleFirstDay({ object }) {
|
||||
this.setFirstDay(object.checked);
|
||||
},
|
||||
// SHAKE VIEW RANDOM RECIPE
|
||||
toggleShake({ object }) {
|
||||
let checked = object.checked;
|
||||
if (checked && !utils.hasAccelerometer()) {
|
||||
object.checked = false;
|
||||
this.toast = localize("noAccSensor");
|
||||
utils.timer(5, (val) => {
|
||||
if (!val) this.toast = val;
|
||||
});
|
||||
} else this.setShake(checked);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -1,112 +0,0 @@
|
|||
<template>
|
||||
<Page @loaded="onPageLoad" actionBarHidden="true">
|
||||
<GridLayout rows="*, auto" columns="auto, *">
|
||||
<ListView
|
||||
colSpan="2"
|
||||
rowSpan="2"
|
||||
class="options-list"
|
||||
for="item in items"
|
||||
>
|
||||
<v-template if="$index == 0">
|
||||
<Label class="pageTitle" :text="'rest' | L" />
|
||||
</v-template>
|
||||
<v-template if="$index == 5">
|
||||
<Label class="group-info sub tw" :text="'restInfo' | L" />
|
||||
</v-template>
|
||||
<v-template if="$index == 6">
|
||||
<StackLayout class="listSpace"> </StackLayout>
|
||||
</v-template>
|
||||
<v-template>
|
||||
<GridLayout
|
||||
columns="auto, *"
|
||||
class="option"
|
||||
@touch="touch($event, item.type)"
|
||||
>
|
||||
<Label class="ico" :text="icon.reset" />
|
||||
<Label col="1" :text="item.title | L" class="info" />
|
||||
</GridLayout>
|
||||
</v-template>
|
||||
</ListView>
|
||||
<GridLayout
|
||||
v-show="!toast"
|
||||
row="1"
|
||||
class="appbar"
|
||||
rows="*"
|
||||
columns="auto, *"
|
||||
>
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
<GridLayout
|
||||
v-show="toast"
|
||||
row="1"
|
||||
colSpan="2"
|
||||
class="appbar snackBar"
|
||||
columns="*"
|
||||
@tap="toast = null"
|
||||
>
|
||||
<FlexboxLayout minHeight="48" alignItems="center">
|
||||
<Label class="title msg" :text="toast" />
|
||||
</FlexboxLayout>
|
||||
</GridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Observable } from "@nativescript/core";
|
||||
import { localize } from "@nativescript/localize";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import * as utils from "~/shared/utils";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
toast: null,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon"]),
|
||||
items() {
|
||||
return [
|
||||
{},
|
||||
{
|
||||
type: "cuisines",
|
||||
title: "restCuiL",
|
||||
},
|
||||
{
|
||||
type: "categories",
|
||||
title: "restCatL",
|
||||
},
|
||||
{
|
||||
type: "yieldUnits",
|
||||
title: "restYUL",
|
||||
},
|
||||
{
|
||||
type: "units",
|
||||
title: "restUL",
|
||||
},
|
||||
{},
|
||||
{},
|
||||
];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["resetListItemsAction"]),
|
||||
onPageLoad(args) {
|
||||
const page = args.object;
|
||||
page.bindingContext = new Observable();
|
||||
},
|
||||
// RESET
|
||||
resetListItems(listName) {
|
||||
this.resetListItemsAction(listName);
|
||||
this.toast = localize("restDone");
|
||||
utils.timer(5, (val) => {
|
||||
if (!val) this.toast = val;
|
||||
});
|
||||
},
|
||||
touch({ object, action }, type) {
|
||||
object.className = action.match(/down|move/) ? "option fade" : "option";
|
||||
if (action == "up") this.resetListItems(type);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -1,15 +1,11 @@
|
|||
<template>
|
||||
<Page
|
||||
@loaded="transparentPage"
|
||||
backgroundColor="transparent"
|
||||
:class="appTheme"
|
||||
>
|
||||
<Page @loaded="mLoad" backgroundColor="transparent" :class="theme">
|
||||
<GridLayout
|
||||
columns="*"
|
||||
:rows="`auto, auto, ${stretch ? '*' : 'auto'}, auto`"
|
||||
class="modal"
|
||||
>
|
||||
<Label class="title" :text="title | L" />
|
||||
<RLabel class="title" :text="title | L" />
|
||||
<ListView
|
||||
rowHeight="48"
|
||||
row="2"
|
||||
|
@ -17,10 +13,9 @@
|
|||
:height="stretch ? '100%' : listHeight"
|
||||
>
|
||||
<v-template>
|
||||
<Label
|
||||
<RLabel
|
||||
class="listItem"
|
||||
:class="{ tb: title === 'srt' && sortType === item }"
|
||||
:color="title === 'srt' && sortType === item ? '#ff5200' : ''"
|
||||
:class="{ select: item == selected || $index == selected }"
|
||||
:text="`${localized(item)}`"
|
||||
@touch="touch"
|
||||
@tap="tapAction(item)"
|
||||
|
@ -28,20 +23,20 @@
|
|||
/>
|
||||
</v-template>
|
||||
</ListView>
|
||||
<GridLayout row="3" columns="auto, *, auto" class="actions">
|
||||
<RGridLayout :rtl="RTL" row="3" columns="auto, *, auto" class="actions">
|
||||
<Button
|
||||
v-if="action"
|
||||
class="text sm"
|
||||
:hidden="!action"
|
||||
class="text tb st fb"
|
||||
:text="action | L"
|
||||
@tap="$modal.close(action)"
|
||||
/>
|
||||
<Button
|
||||
col="2"
|
||||
class="text sm"
|
||||
class="text tb st fb"
|
||||
:text="'cBtn' | L"
|
||||
@tap="$modal.close(false)"
|
||||
@tap="$modal.close(0)"
|
||||
/>
|
||||
</GridLayout>
|
||||
</RGridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
@ -50,11 +45,11 @@
|
|||
import { Screen } from "@nativescript/core";
|
||||
import { localize } from "@nativescript/localize";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import ConfirmDialog from "./ConfirmDialog.vue";
|
||||
import Confirm from "./Confirm.vue";
|
||||
|
||||
interface IData {
|
||||
newList: unknown[];
|
||||
stretch: boolean;
|
||||
stretch: number;
|
||||
listHeight: number;
|
||||
}
|
||||
|
||||
|
@ -72,27 +67,31 @@ export default {
|
|||
type: String,
|
||||
required: false,
|
||||
},
|
||||
selected: {
|
||||
type: String,
|
||||
required: false,
|
||||
},
|
||||
},
|
||||
data(): IData {
|
||||
return {
|
||||
newList: this.list,
|
||||
stretch: false,
|
||||
stretch: 0,
|
||||
listHeight: 0,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["sortType", "icon", "appTheme"]),
|
||||
...mapState(["icon", "theme", "RTL"]),
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["removeListItemAction"]),
|
||||
...mapActions(["removeLI", "deleteTP"]),
|
||||
localized(item: string): string {
|
||||
return this.title !== "lang" ? localize(item) : item;
|
||||
},
|
||||
tapAction(item: string): void {
|
||||
this.$modal.close(item);
|
||||
},
|
||||
deletionConfirmation(description: string): void {
|
||||
return this.$showModal(ConfirmDialog, {
|
||||
removeConfirmation(description: string): void {
|
||||
return this.$showModal(Confirm, {
|
||||
props: {
|
||||
title: "conf",
|
||||
description,
|
||||
|
@ -101,39 +100,61 @@ export default {
|
|||
},
|
||||
});
|
||||
},
|
||||
deletionConfirmation(description: string): void {
|
||||
return this.$showModal(Confirm, {
|
||||
props: {
|
||||
title: "conf",
|
||||
description,
|
||||
cancelButtonText: "cBtn",
|
||||
okButtonText: "dBtn",
|
||||
},
|
||||
});
|
||||
},
|
||||
removeItem(item: string): void {
|
||||
let vm = this;
|
||||
let index = this.newList.findIndex((e) => e === item);
|
||||
let localizedItem = `"${localize(item)}"`;
|
||||
function removeListItem(listName: string, desc: string): void {
|
||||
vm.deletionConfirmation(`${localize(desc, localizedItem)}`).then(
|
||||
function removeLI(listName: string, desc: string): void {
|
||||
vm.removeConfirmation(`${localize(desc, localizedItem)}`).then(
|
||||
(action: boolean) => {
|
||||
if (action != null && action)
|
||||
vm.removeListItemAction({
|
||||
if (action)
|
||||
vm.removeLI({
|
||||
item,
|
||||
listName,
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
function deleteTP(): void {
|
||||
vm.deletionConfirmation(`${localize("delPrst", `"${item}"`)}`).then(
|
||||
(action: boolean) => {
|
||||
if (action) {
|
||||
vm.deleteTP(index);
|
||||
vm.newList.splice(index, 1);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
switch (this.title) {
|
||||
case "cui":
|
||||
removeListItem("cuisines", "rmCuiInfo");
|
||||
removeLI("cuisines", "rmCuiInfo");
|
||||
break;
|
||||
case "cat":
|
||||
removeListItem("categories", "rmCatInfo");
|
||||
removeLI("categories", "rmCatInfo");
|
||||
break;
|
||||
case "yieldU":
|
||||
removeListItem("yieldUnits", "rmYUInfo");
|
||||
removeLI("yieldUnits", "rmYUInfo");
|
||||
break;
|
||||
case "Unit":
|
||||
removeListItem("units", "rmUInfo");
|
||||
removeLI("units", "rmUInfo");
|
||||
break;
|
||||
case "prsts":
|
||||
deleteTP();
|
||||
break;
|
||||
}
|
||||
},
|
||||
touch({ object, action }): void {
|
||||
object.className = action.match(/down|move/)
|
||||
? "listItem fade"
|
||||
: "listItem";
|
||||
this.touchFade(object, action);
|
||||
},
|
||||
},
|
||||
created() {
|
||||
|
@ -145,7 +166,7 @@ export default {
|
|||
if (modalHeight < usableHeight) {
|
||||
this.listHeight = listHeight;
|
||||
} else {
|
||||
this.stretch = true;
|
||||
this.stretch = 1;
|
||||
}
|
||||
},
|
||||
};
|
|
@ -1,17 +1,14 @@
|
|||
<template>
|
||||
<Page
|
||||
@loaded="transparentPage"
|
||||
backgroundColor="transparent"
|
||||
:class="appTheme"
|
||||
>
|
||||
<Page @loaded="mLoad" backgroundColor="transparent" :class="theme">
|
||||
<GridLayout columns="*" rows="auto, auto, *, auto" class="modal">
|
||||
<Label class="title" :text="title | L" />
|
||||
<RLabel class="title" :text="title | L" />
|
||||
<StackLayout
|
||||
row="1"
|
||||
v-if="filteredRecipes.length || searchQuery"
|
||||
:hidden="!filteredRecipes.length && !searchQuery"
|
||||
class="input"
|
||||
>
|
||||
<TextField
|
||||
@loaded="setGravity"
|
||||
class="modalInput"
|
||||
:hint="'ser' | L"
|
||||
v-model="searchQuery"
|
||||
|
@ -19,7 +16,7 @@
|
|||
</StackLayout>
|
||||
<ListView row="2" for="recipe in filteredRecipes">
|
||||
<v-template>
|
||||
<Label
|
||||
<RLabel
|
||||
class="listItem"
|
||||
:text="recipe.title"
|
||||
@touch="touch($event, recipe)"
|
||||
|
@ -28,30 +25,26 @@
|
|||
</ListView>
|
||||
<Label
|
||||
row="2"
|
||||
class="noResInfo"
|
||||
v-if="!filteredRecipes.length && !searchQuery"
|
||||
:text="'recListEmp' | L"
|
||||
padding="16"
|
||||
lineHeight="4"
|
||||
class="tc tw"
|
||||
:hidden="!noResult"
|
||||
:text="noResult | L"
|
||||
/>
|
||||
<Label
|
||||
row="2"
|
||||
class="noResInfo"
|
||||
v-if="!filteredRecipes.length && searchQuery"
|
||||
:text="'noRecs' | L"
|
||||
/>
|
||||
<GridLayout row="3" columns="auto, *, auto" class="actions">
|
||||
<RGridLayout :rtl="RTL" row="3" columns="auto, *, auto" class="actions">
|
||||
<Button
|
||||
v-if="action"
|
||||
class="text sm"
|
||||
:hidden="!action"
|
||||
class="text tb st fb"
|
||||
:text="action | L"
|
||||
@tap="$modal.close(action)"
|
||||
/>
|
||||
<Button
|
||||
col="2"
|
||||
class="text sm"
|
||||
:text="'CANCEL' | L"
|
||||
@tap="$modal.close(false)"
|
||||
class="text tb st fb"
|
||||
:text="'cBtn' | L"
|
||||
@tap="$modal.close(0)"
|
||||
/>
|
||||
</GridLayout>
|
||||
</RGridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
@ -66,7 +59,7 @@ export default {
|
|||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "appTheme"]),
|
||||
...mapState(["icon", "theme", "RTL"]),
|
||||
filteredRecipes() {
|
||||
return this.recipes
|
||||
.map((e, i) => {
|
||||
|
@ -76,19 +69,22 @@ export default {
|
|||
cuisine: e.cuisine,
|
||||
category: e.category,
|
||||
tags: e.tags.map((e) => e.toLowerCase()).join(),
|
||||
ingredients: e.ingredients.map((e) => e.item.toLowerCase()).join(),
|
||||
ingredients: e.ingredients.map((e) => e.value.toLowerCase()).join(),
|
||||
};
|
||||
})
|
||||
.filter((e) => this.recipeFilter(e));
|
||||
},
|
||||
noResult() {
|
||||
if (!this.recipes.length) return "recListEmp";
|
||||
else if (!this.filteredRecipes.length && this.searchQuery)
|
||||
return "noRecs";
|
||||
else 0;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
tapAction(recipe) {
|
||||
this.$modal.close(recipe.id);
|
||||
},
|
||||
centerLabel(args) {
|
||||
args.object.android.setGravity(16);
|
||||
},
|
||||
recipeFilter(e) {
|
||||
let searchQuery = this.searchQuery.toLowerCase();
|
||||
return (
|
||||
|
@ -100,9 +96,7 @@ export default {
|
|||
);
|
||||
},
|
||||
touch({ object, action }, recipe) {
|
||||
object.className = action.match(/down|move/)
|
||||
? "listItem fade"
|
||||
: "listItem";
|
||||
this.touchFade(object, action);
|
||||
if (action == "up") this.tapAction(recipe);
|
||||
},
|
||||
},
|
|
@ -1,32 +1,28 @@
|
|||
<template>
|
||||
<Page
|
||||
@loaded="transparentPage"
|
||||
backgroundColor="transparent"
|
||||
:class="appTheme"
|
||||
>
|
||||
<Page @loaded="mLoad" backgroundColor="transparent" :class="theme">
|
||||
<GridLayout rows="auto, auto, auto" class="modal">
|
||||
<Label class="title" :text="title | L" />
|
||||
<RLabel class="title" :text="title | L" />
|
||||
<Label
|
||||
row="1"
|
||||
v-if="description"
|
||||
class="description tw"
|
||||
class="desc input tw lh4"
|
||||
:text="description"
|
||||
/>
|
||||
<GridLayout row="2" columns="*, auto, auto" class="actions">
|
||||
<RGridLayout :rtl="RTL" row="2" columns="*, auto, auto" class="actions">
|
||||
<Button
|
||||
v-if="cancelButtonText"
|
||||
col="1"
|
||||
class="text sm"
|
||||
class="text tb st fb"
|
||||
:text="cancelButtonText | L"
|
||||
@tap="$modal.close(false)"
|
||||
@tap="$modal.close(0)"
|
||||
/>
|
||||
<Button
|
||||
col="2"
|
||||
class="text sm"
|
||||
class="text tb st fb"
|
||||
:text="okButtonText | L"
|
||||
@tap="$modal.close(true)"
|
||||
@tap="$modal.close(1)"
|
||||
/>
|
||||
</GridLayout>
|
||||
</RGridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
@ -53,7 +49,7 @@ export default {
|
|||
},
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "appTheme"]),
|
||||
...mapState(["icon", "theme", "RTL"]),
|
||||
},
|
||||
};
|
||||
</script>
|
108
app/components/modals/DMYPicker.vue
Normal file
|
@ -0,0 +1,108 @@
|
|||
<template>
|
||||
<Page
|
||||
@loaded="mLoad"
|
||||
backgroundColor="transparent"
|
||||
:class="theme"
|
||||
>
|
||||
<GridLayout rows="auto, auto, auto" class="modal">
|
||||
<RLabel class="title" :text="title | L" />
|
||||
<RStackLayout
|
||||
:rtl="RTL"
|
||||
row="1"
|
||||
orientation="horizontal"
|
||||
horizontalAlignment="center"
|
||||
>
|
||||
<ListPicker
|
||||
@loaded="onLPLoad"
|
||||
:items="days"
|
||||
:selectedIndex="dIndex"
|
||||
@selectedIndexChange="setD"
|
||||
></ListPicker>
|
||||
<ListPicker
|
||||
@loaded="onLPLoad"
|
||||
:items="months"
|
||||
:selectedIndex="currentM"
|
||||
@selectedIndexChange="setM"
|
||||
></ListPicker>
|
||||
<ListPicker
|
||||
:items="years"
|
||||
:selectedIndex="yIndex"
|
||||
@selectedIndexChange="setY"
|
||||
></ListPicker>
|
||||
</RStackLayout>
|
||||
<RGridLayout :rtl="RTL" row="2" columns="*, auto, auto" class="actions">
|
||||
<Button
|
||||
col="1"
|
||||
class="text tb st fb"
|
||||
:text="'cBtn' | L"
|
||||
@tap="$modal.close(0)"
|
||||
/>
|
||||
<Button
|
||||
col="2"
|
||||
class="text tb st fb"
|
||||
:text="'SET' | L"
|
||||
@tap="$modal.close(selected)"
|
||||
/>
|
||||
</RGridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from "vuex";
|
||||
import { localize } from "@nativescript/localize";
|
||||
export default {
|
||||
props: ["title", "monthNames", "currentD", "currentM", "currentY"],
|
||||
data() {
|
||||
return {
|
||||
selectedD: 0,
|
||||
selectedM: 0,
|
||||
selectedY: 0,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "theme", "RTL"]),
|
||||
days() {
|
||||
let ld = new Date(this.selectedY, this.selectedM + 1, 0).getDate();
|
||||
return Array.from({ length: ld }, (v, i) => i + 1);
|
||||
},
|
||||
dIndex() {
|
||||
return this.days.indexOf(this.selectedD || this.currentD);
|
||||
},
|
||||
months() {
|
||||
return this.monthNames.map((e) => localize(e));
|
||||
},
|
||||
years() {
|
||||
let min = 1900;
|
||||
let max = min + 200;
|
||||
let years = [];
|
||||
for (let i = min; i <= max; i++) years.push(i);
|
||||
return years;
|
||||
},
|
||||
yIndex() {
|
||||
return this.years.indexOf(this.currentY);
|
||||
},
|
||||
selected() {
|
||||
return {
|
||||
date: this.selectedD,
|
||||
month: this.selectedM,
|
||||
year: this.selectedY,
|
||||
};
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
onLPLoad({ object }) {
|
||||
object.android.setWrapSelectorWheel(true);
|
||||
},
|
||||
setD(args) {
|
||||
this.selectedD = args.object.selectedIndex + 1;
|
||||
},
|
||||
setM(args) {
|
||||
this.selectedM = args.object.selectedIndex;
|
||||
},
|
||||
setY(args) {
|
||||
this.selectedY = this.years[args.object.selectedIndex];
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -1,28 +1,32 @@
|
|||
<template>
|
||||
<Page @loaded="onPageLoad" backgroundColor="transparent" :class="appTheme">
|
||||
<Page @loaded="pgLoad" backgroundColor="transparent" :class="theme">
|
||||
<GridLayout rows="auto, auto, *, auto" columns="*" class="modal">
|
||||
<Label class="title" :text="`fltr` | L" />
|
||||
<RLabel class="title a" :text="`fltr` | L" />
|
||||
<ScrollView orientation="horizontal" row="1" @loaded="onScrollLoad">
|
||||
<StackLayout class="filters" orientation="horizontal">
|
||||
<RStackLayout :rtl="RTL" class="filters" orientation="horizontal">
|
||||
<GridLayout
|
||||
rows="48"
|
||||
columns="auto, auto"
|
||||
class="segment"
|
||||
rows="32"
|
||||
columns="32, auto"
|
||||
class="segment rtl"
|
||||
v-for="(item, index) in pathList"
|
||||
:key="index"
|
||||
:class="{
|
||||
select: filterType === item.type,
|
||||
}"
|
||||
:class="{ select: filter === item.type }"
|
||||
@touch="touchSelector($event, item.type)"
|
||||
>
|
||||
<Label class="ico" :text="icon[item.type]" />
|
||||
<Label v-if="item.title" class="value" :text="item.title" col="1" />
|
||||
<Label class="ico tc vc" :text="icon[item.type]" />
|
||||
<Label
|
||||
:hidden="!item.title"
|
||||
class="v vc"
|
||||
:class="{ f: RTL }"
|
||||
:text="item.title"
|
||||
col="1"
|
||||
/>
|
||||
</GridLayout>
|
||||
</StackLayout>
|
||||
</RStackLayout>
|
||||
</ScrollView>
|
||||
<ListView row="2" class="options-list" for="item in filterList">
|
||||
<ListView row="2" class="options" for="item in filterList">
|
||||
<v-template>
|
||||
<Label
|
||||
<RLabel
|
||||
class="listItem"
|
||||
verticalAlignment="center"
|
||||
col="1"
|
||||
|
@ -31,21 +35,26 @@
|
|||
/>
|
||||
</v-template>
|
||||
</ListView>
|
||||
<GridLayout row="3" columns="auto, *, auto, auto" class="actions">
|
||||
<Button class="text sm" :text="'rest' | L" @tap="resetFilter" />
|
||||
<RGridLayout
|
||||
:rtl="RTL"
|
||||
row="3"
|
||||
columns="auto, *, auto, auto"
|
||||
class="actions"
|
||||
>
|
||||
<Button class="text tb st fb" :text="'rstBtn' | L" @tap="resetFilter" />
|
||||
<Button
|
||||
col="2"
|
||||
class="text sm"
|
||||
class="text tb st fb"
|
||||
:text="'cBtn' | L"
|
||||
@tap="$modal.close()"
|
||||
/>
|
||||
<Button
|
||||
col="3"
|
||||
class="text sm"
|
||||
class="text tb st fb"
|
||||
:text="'apply' | L"
|
||||
@tap="applyFilter"
|
||||
/>
|
||||
</GridLayout>
|
||||
</RGridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
@ -57,11 +66,11 @@ let filterTimer;
|
|||
export default {
|
||||
data() {
|
||||
return {
|
||||
filterType: "cuisine",
|
||||
filter: "cuisine",
|
||||
localCuisine: null,
|
||||
localCategory: null,
|
||||
localTag: null,
|
||||
reset: false,
|
||||
reset: 0,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
|
@ -70,10 +79,11 @@ export default {
|
|||
"recipes",
|
||||
"cuisines",
|
||||
"categories",
|
||||
"selectedCuisine",
|
||||
"selectedCategory",
|
||||
"selectedTag",
|
||||
"appTheme",
|
||||
"selCuisine",
|
||||
"selCategory",
|
||||
"selTag",
|
||||
"theme",
|
||||
"RTL",
|
||||
]),
|
||||
pathList() {
|
||||
let arr = [
|
||||
|
@ -90,7 +100,7 @@ export default {
|
|||
title: localize(this.localTag),
|
||||
},
|
||||
];
|
||||
switch (this.filterType) {
|
||||
switch (this.filter) {
|
||||
case "cuisine":
|
||||
return arr.slice(0, -2);
|
||||
case "category":
|
||||
|
@ -99,7 +109,7 @@ export default {
|
|||
return arr;
|
||||
},
|
||||
filterList() {
|
||||
switch (this.filterType) {
|
||||
switch (this.filter) {
|
||||
case "cuisine":
|
||||
return this.cuisineList;
|
||||
case "category":
|
||||
|
@ -163,27 +173,21 @@ export default {
|
|||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions([
|
||||
"setComponent",
|
||||
"setCuisine",
|
||||
"setCategory",
|
||||
"setTag",
|
||||
"clearFilter",
|
||||
]),
|
||||
onPageLoad(args) {
|
||||
this.transparentPage(args);
|
||||
this.localCuisine = this.selectedCuisine;
|
||||
this.localCategory = this.selectedCategory;
|
||||
this.localTag = this.selectedTag;
|
||||
if (this.localCuisine) this.filterType = "category";
|
||||
if (this.localCategory && this.localTag) this.filterType = "tag";
|
||||
...mapActions(["setCuisine", "setCategory", "setTag"]),
|
||||
pgLoad(args) {
|
||||
this.mLoad(args);
|
||||
this.localCuisine = this.selCuisine;
|
||||
this.localCategory = this.selCategory;
|
||||
this.localTag = this.selTag;
|
||||
if (this.localCuisine) this.filter = "category";
|
||||
if (this.localCategory && this.localTag) this.filter = "tag";
|
||||
this.scrollToRight();
|
||||
},
|
||||
onScrollLoad(args) {
|
||||
this.scrollview = args.object;
|
||||
},
|
||||
setFilterType(type) {
|
||||
this.filterType = type;
|
||||
this.filter = type;
|
||||
switch (type) {
|
||||
case "cuisine":
|
||||
this.localCategory = null;
|
||||
|
@ -198,22 +202,22 @@ export default {
|
|||
setTimeout(
|
||||
() =>
|
||||
this.scrollview.scrollToHorizontalOffset(
|
||||
this.scrollview.scrollableWidth,
|
||||
this.RTL ? 0 : this.scrollview.scrollableWidth,
|
||||
true
|
||||
),
|
||||
10
|
||||
);
|
||||
},
|
||||
setRecipeFilter(item) {
|
||||
this.reset = false;
|
||||
switch (this.filterType) {
|
||||
this.reset = 0;
|
||||
switch (this.filter) {
|
||||
case "cuisine":
|
||||
this.localCuisine = item;
|
||||
this.filterType = "category";
|
||||
this.filter = "category";
|
||||
break;
|
||||
case "category":
|
||||
this.localCategory = item;
|
||||
if (this.tagList.length) this.filterType = "tag";
|
||||
if (this.tagList.length) this.filter = "tag";
|
||||
break;
|
||||
default:
|
||||
this.localTag = item;
|
||||
|
@ -225,28 +229,23 @@ export default {
|
|||
this.setCuisine(this.localCuisine);
|
||||
this.setCategory(this.localCategory);
|
||||
this.setTag(this.localTag);
|
||||
this.filterFavourites = this.filterTrylater = false;
|
||||
if (this.reset) this.setComponent("EnRecipes");
|
||||
else this.setComponent("Filtered recipes");
|
||||
this.$modal.close();
|
||||
this.filterFavourites = this.filterTrylater = 0;
|
||||
this.$modal.close(this.reset);
|
||||
},
|
||||
resetFilter() {
|
||||
this.filterType = "cuisine";
|
||||
this.filter = "cuisine";
|
||||
this.localCuisine = this.localCategory = this.localTag = null;
|
||||
this.reset = true;
|
||||
this.reset = 1;
|
||||
},
|
||||
touch({ object, action }, item) {
|
||||
object.className = action.match(/down|move/)
|
||||
? "listItem fade"
|
||||
: "listItem";
|
||||
this.touchFade(object, action);
|
||||
if (action == "up") this.setRecipeFilter(item);
|
||||
},
|
||||
touchSelector({ object, action }, type) {
|
||||
let selected = this.filterType == type;
|
||||
object.className = action.match(/down|move/)
|
||||
? `segment ${selected ? "select" : "fade"}`
|
||||
: `segment ${selected && "select"}`;
|
||||
if (action == "up") this.setFilterType(type);
|
||||
if (this.filter != type) {
|
||||
this.touchFade(object, action);
|
||||
if (action == "up") this.setFilterType(type);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
|
@ -1,33 +1,44 @@
|
|||
<template>
|
||||
<Page
|
||||
@loaded="transparentPage"
|
||||
@loaded="mLoad"
|
||||
backgroundColor="transparent"
|
||||
:class="appTheme"
|
||||
:class="theme"
|
||||
>
|
||||
<GridLayout rows="auto, auto, auto" class="modal">
|
||||
<Label class="title" :text="title | L" />
|
||||
<RLabel class="title" :text="title | L" />
|
||||
<StackLayout row="1" class="input">
|
||||
<TextView
|
||||
v-if="type == 'view'"
|
||||
autocorrect="true"
|
||||
autocapitalizationType="sentences"
|
||||
class="modalInput"
|
||||
@loaded="focusField"
|
||||
v-model="text"
|
||||
/>
|
||||
<TextField
|
||||
autocapitalizationType="sentences"
|
||||
autocorrect="true"
|
||||
v-else
|
||||
class="modalInput"
|
||||
@loaded="focusField"
|
||||
v-model="text"
|
||||
@returnPress="$modal.close(text)"
|
||||
/>
|
||||
</StackLayout>
|
||||
<GridLayout row="2" columns="*, auto, auto" class="actions">
|
||||
<RGridLayout :rtl="RTL" row="2" columns="*, auto, auto" class="actions">
|
||||
<Button
|
||||
col="1"
|
||||
class="text sm"
|
||||
class="text tb st fb"
|
||||
:text="'cBtn' | L"
|
||||
@tap="$modal.close(false)"
|
||||
@tap="$modal.close(0)"
|
||||
/>
|
||||
<Button
|
||||
col="2"
|
||||
class="text sm"
|
||||
class="text tb st fb"
|
||||
:text="action | L"
|
||||
@tap="$modal.close(text)"
|
||||
/>
|
||||
</GridLayout>
|
||||
</RGridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
@ -37,20 +48,23 @@ import { Utils } from "@nativescript/core";
|
|||
import { localize } from "@nativescript/localize";
|
||||
import { mapState } from "vuex";
|
||||
export default {
|
||||
props: ["title", "hint", "placeholder", "action"],
|
||||
props: ["title", "type", "hint", "placeholder", "action"],
|
||||
data() {
|
||||
return {
|
||||
text: null,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "appTheme"]),
|
||||
...mapState(["icon", "theme", "RTL"]),
|
||||
},
|
||||
methods: {
|
||||
focusField({ object }) {
|
||||
this.setGravity(object);
|
||||
let a = this.placeholder;
|
||||
typeof a == "number"
|
||||
? (object.keyboardType = "number")
|
||||
: this.type
|
||||
? ""
|
||||
: (object.autocapitalizationType = "words");
|
||||
object.hint = this.hint;
|
||||
object.focus();
|
|
@ -1,46 +1,44 @@
|
|||
<template>
|
||||
<Page
|
||||
@loaded="transparentPage"
|
||||
@loaded="mLoad"
|
||||
backgroundColor="transparent"
|
||||
:class="appTheme"
|
||||
:class="theme"
|
||||
>
|
||||
<GridLayout rows="auto, auto, auto" class="modal">
|
||||
<Label class="title" :text="title | L" />
|
||||
<StackLayout
|
||||
<RLabel class="title" :text="title | L" />
|
||||
<RStackLayout
|
||||
:rtl="RTL"
|
||||
row="1"
|
||||
class="dialogListPicker"
|
||||
orientation="horizontal"
|
||||
horizontalAlignment="center"
|
||||
>
|
||||
<ListPicker
|
||||
@loaded="onLPLoad"
|
||||
ref="hrPicker"
|
||||
:items="hrsList"
|
||||
:selectedIndex="hrIndex"
|
||||
@selectedIndexChange="setHrs"
|
||||
></ListPicker>
|
||||
<ListPicker
|
||||
@loaded="onLPLoad"
|
||||
ref="minPicker"
|
||||
:items="minsList"
|
||||
:selectedIndex="minIndex"
|
||||
@selectedIndexChange="setMins"
|
||||
></ListPicker>
|
||||
</StackLayout>
|
||||
<GridLayout row="2" columns="*, auto, auto" class="actions">
|
||||
</RStackLayout>
|
||||
<RGridLayout :rtl="RTL" row="2" columns="*, auto, auto" class="actions">
|
||||
<Button
|
||||
col="1"
|
||||
class="text sm"
|
||||
class="text tb st fb"
|
||||
:text="'cBtn' | L"
|
||||
@tap="$modal.close(false)"
|
||||
@tap="$modal.close(0)"
|
||||
/>
|
||||
<Button
|
||||
col="2"
|
||||
class="text sm"
|
||||
:text="action | L"
|
||||
class="text tb st fb"
|
||||
:text="'SET' | L"
|
||||
@tap="$modal.close(selectedTime)"
|
||||
/>
|
||||
</GridLayout>
|
||||
</RGridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
@ -49,7 +47,7 @@
|
|||
import { mapState } from "vuex";
|
||||
import { localize } from "@nativescript/localize";
|
||||
export default {
|
||||
props: ["title", "selectedHr", "selectedMin", "action"],
|
||||
props: ["title", "selectedHr", "selectedMin"],
|
||||
data() {
|
||||
return {
|
||||
hrs: [],
|
||||
|
@ -59,19 +57,14 @@ export default {
|
|||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "appTheme"]),
|
||||
...mapState(["icon", "theme", "RTL"]),
|
||||
hrsList() {
|
||||
let h = [...Array(24).keys()];
|
||||
this.hrs = h;
|
||||
return h.map((e) => `${e} ${localize("hr")}`);
|
||||
},
|
||||
minsList() {
|
||||
let m = [
|
||||
...new Set([
|
||||
...Array(11).keys(),
|
||||
...Array.from(Array(12), (_, x) => x * 5),
|
||||
]),
|
||||
];
|
||||
let m = [...Array(60).keys()];
|
||||
this.mins = m;
|
||||
return m.map((e) => `${e} ${localize("min")}`);
|
||||
},
|
133
app/components/modals/TimePickerHMS.vue
Normal file
|
@ -0,0 +1,133 @@
|
|||
<template>
|
||||
<Page @loaded="mLoad" backgroundColor="transparent" :class="theme">
|
||||
<GridLayout rows="auto, auto, auto" class="modal">
|
||||
<RLabel class="title" :text="title | L" />
|
||||
<StackLayout row="1">
|
||||
<StackLayout class="input">
|
||||
<TextField
|
||||
@loaded="setGravity"
|
||||
class="modalInput"
|
||||
v-model="setLabel"
|
||||
:hint="label"
|
||||
autocapitalizationType="words"
|
||||
autocorrect="true"
|
||||
/></StackLayout>
|
||||
<RStackLayout
|
||||
:rtl="RTL"
|
||||
orientation="horizontal"
|
||||
horizontalAlignment="center"
|
||||
>
|
||||
<ListPicker
|
||||
@loaded="onLPLoad"
|
||||
:items="hrsList"
|
||||
@selectedIndexChange="setHr"
|
||||
></ListPicker>
|
||||
<ListPicker
|
||||
@loaded="onLPLoad"
|
||||
:items="minsList"
|
||||
@selectedIndexChange="setMin"
|
||||
></ListPicker>
|
||||
<ListPicker
|
||||
@loaded="onLPLoad"
|
||||
:items="secsList"
|
||||
@selectedIndexChange="setSec"
|
||||
></ListPicker>
|
||||
</RStackLayout>
|
||||
</StackLayout>
|
||||
|
||||
<RGridLayout
|
||||
:rtl="RTL"
|
||||
row="2"
|
||||
columns="auto, *, auto, auto"
|
||||
class="actions r"
|
||||
>
|
||||
<Button
|
||||
v-if="showPreset"
|
||||
class="text tb st fb"
|
||||
:text="'prstBtn' | L"
|
||||
@tap="$modal.close('presets')"
|
||||
/>
|
||||
<Button
|
||||
col="2"
|
||||
class="text tb st fb"
|
||||
:text="'cBtn' | L"
|
||||
@tap="$modal.close(0)"
|
||||
/>
|
||||
<Button
|
||||
col="3"
|
||||
class="text tb st fb"
|
||||
:text="action | L"
|
||||
@tap="respond"
|
||||
/>
|
||||
</RGridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Utils } from "@nativescript/core";
|
||||
import { localize } from "@nativescript/localize";
|
||||
import { mapState } from "vuex";
|
||||
export default {
|
||||
props: ["title", "label", "action", "showPreset"],
|
||||
data() {
|
||||
return {
|
||||
hrs: [],
|
||||
mins: [],
|
||||
secs: [],
|
||||
selectedHrs: "00",
|
||||
selectedMins: "00",
|
||||
selectedSecs: "00",
|
||||
setLabel: null,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "theme", "RTL"]),
|
||||
hrsList() {
|
||||
let h = [...Array(24).keys()];
|
||||
this.hrs = h;
|
||||
return h.map((e) => `${e} ${localize("hr")}`);
|
||||
},
|
||||
minsList() {
|
||||
let m = [...Array(60).keys()];
|
||||
this.mins = m;
|
||||
return m.map((e) => `${e} ${localize("min")}`);
|
||||
},
|
||||
secsList() {
|
||||
let s = [...Array(60).keys()];
|
||||
this.secs = s;
|
||||
return s.map((e) => `${e} ${localize("sec")}`);
|
||||
},
|
||||
selectedTime() {
|
||||
return `${this.selectedHrs}:${this.selectedMins}:${this.selectedSecs}`;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
onLPLoad({ object }) {
|
||||
object.android.setWrapSelectorWheel(true);
|
||||
},
|
||||
setHr(args) {
|
||||
let hr = "0" + this.hrs[args.object.selectedIndex];
|
||||
this.selectedHrs = hr.slice(-2);
|
||||
},
|
||||
setMin(args) {
|
||||
let min = "0" + this.mins[args.object.selectedIndex];
|
||||
this.selectedMins = min.slice(-2);
|
||||
},
|
||||
setSec(args) {
|
||||
let sec = "0" + this.secs[args.object.selectedIndex];
|
||||
this.selectedSecs = sec.slice(-2);
|
||||
},
|
||||
focusField({ object }) {
|
||||
object.focus();
|
||||
setTimeout(() => Utils.ad.showSoftInput(object.android), 100);
|
||||
},
|
||||
respond() {
|
||||
this.$modal.close({
|
||||
label: this.setLabel ? this.setLabel : this.label,
|
||||
time: this.selectedTime,
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
112
app/components/modals/TimerReminder.vue
Normal file
|
@ -0,0 +1,112 @@
|
|||
<template>
|
||||
<Page @loaded="pgLoad" :class="theme" backgroundColor="#ff5200">
|
||||
<GridLayout rows="*, *">
|
||||
<Button
|
||||
class="ico fab"
|
||||
fontSize="128"
|
||||
:width="screenWidth"
|
||||
:height="screenWidth"
|
||||
:text="icon.timer"
|
||||
/>
|
||||
<GridLayout row="1" rows="*, auto" columns="*, auto, *">
|
||||
<ScrollView :class="theme" rowSpan="2" colSpan="3">
|
||||
<StackLayout paddingTop="8">
|
||||
<Timer
|
||||
v-for="timer in timers"
|
||||
:key="timer.id"
|
||||
:timer="timer"
|
||||
:formattedTime="formattedTime"
|
||||
:removeTimer="removeTimer"
|
||||
:togglePause="togglePause"
|
||||
:timerAlert="timerAlert"
|
||||
:showToast="showToast"
|
||||
/>
|
||||
<StackLayout class="ls"> </StackLayout>
|
||||
</StackLayout>
|
||||
</ScrollView>
|
||||
<GridLayout col="1" row="1" class="appbar">
|
||||
<Button
|
||||
class="ico fab"
|
||||
margin="0"
|
||||
:text="icon.x"
|
||||
@tap="removeTimers"
|
||||
col="1"
|
||||
/>
|
||||
</GridLayout>
|
||||
</GridLayout>
|
||||
</GridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { Application, Screen, Device, Color, Utils } from "@nativescript/core";
|
||||
import Timer from "../sub/Timer.vue";
|
||||
import * as utils from "~/shared/utils";
|
||||
import { mapState } from "vuex";
|
||||
const windowMgr = android.view.WindowManager;
|
||||
|
||||
export default {
|
||||
components: { Timer },
|
||||
props: [
|
||||
"formattedTime",
|
||||
"removeTimer",
|
||||
"togglePause",
|
||||
"timerAlert",
|
||||
"showToast",
|
||||
],
|
||||
computed: {
|
||||
...mapState(["icon", "theme", "activeTs"]),
|
||||
screenWidth() {
|
||||
return Screen.mainScreen.widthDIPs;
|
||||
},
|
||||
timers() {
|
||||
let timers = this.activeTs.filter((e) => e.done);
|
||||
if (!timers.length) {
|
||||
this.$modal.close(1);
|
||||
this.isScreenLocked && this.turnOffScreen();
|
||||
}
|
||||
return timers;
|
||||
},
|
||||
sdkv() {
|
||||
return parseInt(Device.sdkVersion);
|
||||
},
|
||||
isScreenLocked() {
|
||||
const keyguardMgr = Utils.ad
|
||||
.getApplicationContext()
|
||||
.getSystemService(android.content.Context.KEYGUARD_SERVICE);
|
||||
return this.sdkv > 21
|
||||
? keyguardMgr.isDeviceLocked()
|
||||
: keyguardMgr.isKeyguardLocked();
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
pgLoad({ object }) {
|
||||
let dialog = object._dialogFragment.getDialog();
|
||||
let dialogWindow = dialog.getWindow();
|
||||
let decorView = dialogWindow.getDecorView();
|
||||
dialog.setCancelable(false);
|
||||
if (this.isScreenLocked) {
|
||||
const flags =
|
||||
windowMgr.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
|
||||
windowMgr.LayoutParams.FLAG_TURN_SCREEN_ON |
|
||||
windowMgr.LayoutParams.FLAG_KEEP_SCREEN_ON;
|
||||
dialogWindow.addFlags(flags);
|
||||
}
|
||||
utils.setBarColors(dialogWindow, decorView, this.theme);
|
||||
dialogWindow.setStatusBarColor(new Color("#ff5200").android);
|
||||
},
|
||||
removeTimers() {
|
||||
this.timers.forEach((timer) => this.removeTimer(timer.id, 1));
|
||||
this.isScreenLocked && this.turnOffScreen();
|
||||
},
|
||||
turnOffScreen() {
|
||||
const window = Application.android.startActivity.getWindow();
|
||||
const flags =
|
||||
windowMgr.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
|
||||
windowMgr.LayoutParams.FLAG_TURN_SCREEN_ON |
|
||||
windowMgr.LayoutParams.FLAG_KEEP_SCREEN_ON;
|
||||
window.clearFlags(flags);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
120
app/components/settings/About.vue
Normal file
|
@ -0,0 +1,120 @@
|
|||
<template>
|
||||
<Page @loaded="pgLoad" actionBarHidden="true">
|
||||
<RGridLayout :rtl="RTL" rows="*, auto" columns="auto, *">
|
||||
<ListView rowSpan="2" colSpan="2" class="options" for="item in items">
|
||||
<v-template if="$index == 0">
|
||||
<Label class="pTitle tw tb" :text="'About' | L" />
|
||||
</v-template>
|
||||
<v-template if="$index == 1">
|
||||
<StackLayout class="appInfo">
|
||||
<Image class="logo" src="res://logo" stretch="none" />
|
||||
<Label class="name tb tc" :text="'EnRecipes' | L" />
|
||||
<Label :text="getVersion" class="tb tc" />
|
||||
|
||||
<Label class="info tc tw lh4" text="by Vishnu Raghav B" />
|
||||
<Label class="info tc tw lh4" :text="'appInfo' | L" />
|
||||
</StackLayout>
|
||||
</v-template>
|
||||
<v-template if="$index == 8">
|
||||
<StackLayout class="ls"> </StackLayout>
|
||||
</v-template>
|
||||
<v-template>
|
||||
<RGridLayout
|
||||
:rtl="RTL"
|
||||
columns="auto, *"
|
||||
class="option"
|
||||
@touch="touch($event, item.url)"
|
||||
>
|
||||
<Label
|
||||
class="ico"
|
||||
:class="{ rtl: /help|don/.test(item.icon) }"
|
||||
:text="icon[item.icon]"
|
||||
/>
|
||||
|
||||
<Label col="1" class="info" :text="item.title | L" />
|
||||
</RGridLayout>
|
||||
</v-template>
|
||||
</ListView>
|
||||
<GridLayout row="1" class="appbar rtl" rows="*" columns="auto, *">
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
|
||||
<Label
|
||||
rowSpan="2"
|
||||
colSpan="2"
|
||||
class="edge har rtl f"
|
||||
@swipe="swipeBack"
|
||||
/>
|
||||
</RGridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Application, Observable, Utils } from '@nativescript/core'
|
||||
import { mapState } from 'vuex'
|
||||
|
||||
export default {
|
||||
computed: {
|
||||
...mapState(['icon', 'RTL']),
|
||||
items() {
|
||||
return [
|
||||
{},
|
||||
{},
|
||||
{
|
||||
icon: 'lang',
|
||||
title: 'Official Website',
|
||||
url: 'https://enrecipes.vercel.app',
|
||||
},
|
||||
// {
|
||||
// icon: 'gh',
|
||||
// title: 'gh',
|
||||
// url: 'https://github.com/vishnuraghavb/EnRecipes',
|
||||
// },
|
||||
{
|
||||
icon: 'tg',
|
||||
title: 'joinTG',
|
||||
url: 'https://t.me/enrecipes',
|
||||
},
|
||||
{
|
||||
icon: 'help',
|
||||
title: 'guide',
|
||||
url: 'https://github.com/vishnuraghavb/EnRecipes-Wiki/wiki/User-Guide',
|
||||
},
|
||||
{
|
||||
icon: 'priv',
|
||||
title: 'priv',
|
||||
url: 'https://github.com/vishnuraghavb/EnRecipes-Wiki/blob/main/PRIVACY.md',
|
||||
},
|
||||
{
|
||||
icon: 'don',
|
||||
title: 'donate',
|
||||
url: 'https://www.vishnuraghav.com/donate',
|
||||
},
|
||||
// {
|
||||
// icon: "trans",
|
||||
// title: "trnsl",
|
||||
// url: "https://hosted.weblate.org/projects/enrecipes/app-translations",
|
||||
// },
|
||||
{},
|
||||
]
|
||||
},
|
||||
getVersion() {
|
||||
let ctx = Application.android.context
|
||||
return (
|
||||
'v' +
|
||||
ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0)
|
||||
.versionName
|
||||
)
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
pgLoad({ object }) {
|
||||
object.bindingContext = new Observable()
|
||||
},
|
||||
touch({ object, action }, url) {
|
||||
this.touchFade(object, action)
|
||||
if (action == 'up') Utils.openUrl(url)
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
87
app/components/settings/AppSettings.vue
Normal file
|
@ -0,0 +1,87 @@
|
|||
<template>
|
||||
<Page @loaded="pgLoad" actionBarHidden="true">
|
||||
<RGridLayout :rtl="RTL" rows="*, auto" columns="auto, *">
|
||||
<OptionsList title="Settings" :items="items" :action="navigateTo" />
|
||||
<GridLayout row="1" class="appbar rtl" rows="*" columns="auto, *">
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
|
||||
<Label
|
||||
rowSpan="2"
|
||||
colSpan="2"
|
||||
class="edge har rtl f"
|
||||
@swipe="swipeBack"
|
||||
/>
|
||||
</RGridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { Observable } from "@nativescript/core";
|
||||
import { mapState } from "vuex";
|
||||
import Interface from "./Interface.vue";
|
||||
import Options from "./Options.vue";
|
||||
import Database from "./Database.vue";
|
||||
import Reset from "./Reset.vue";
|
||||
import About from "./About.vue";
|
||||
import OptionsList from "../sub/OptionsList.vue";
|
||||
export default {
|
||||
components: { OptionsList },
|
||||
data() {
|
||||
return {
|
||||
items: [
|
||||
{},
|
||||
{
|
||||
type: "list",
|
||||
icon: "interface",
|
||||
rtl: 0,
|
||||
title: "intf",
|
||||
data: Interface,
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "opts",
|
||||
rtl: 1,
|
||||
title: "opts",
|
||||
data: Options,
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "db",
|
||||
rtl: 0,
|
||||
title: "db",
|
||||
data: Database,
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "reset",
|
||||
rtl: 1,
|
||||
title: "rest",
|
||||
data: Reset,
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "info",
|
||||
rtl: 0,
|
||||
title: "About",
|
||||
data: About,
|
||||
},
|
||||
{},
|
||||
],
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "RTL"]),
|
||||
},
|
||||
methods: {
|
||||
pgLoad({ object }) {
|
||||
object.bindingContext = new Observable();
|
||||
},
|
||||
navigateTo(view) {
|
||||
this.$navigateTo(view, {
|
||||
animated: false,
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
161
app/components/settings/CTSettings.vue
Normal file
|
@ -0,0 +1,161 @@
|
|||
<template>
|
||||
<Page @loaded="pgLoad" actionBarHidden="true">
|
||||
<RGridLayout :rtl="RTL" rows="*, auto" columns="auto, *">
|
||||
<OptionsList title="Settings" :items="items" />
|
||||
<GridLayout row="1" class="appbar rtl" rows="*" columns="auto, *">
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
|
||||
<Label
|
||||
rowSpan="2"
|
||||
colSpan="2"
|
||||
class="edge har rtl f"
|
||||
@swipe="swipeBack"
|
||||
/>
|
||||
</RGridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
Observable,
|
||||
Device,
|
||||
Application,
|
||||
ApplicationSettings,
|
||||
Utils,
|
||||
} from "@nativescript/core";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import { localize } from "@nativescript/localize";
|
||||
import OptionsList from "../sub/OptionsList";
|
||||
import Action from "../modals/Action";
|
||||
import * as utils from "~/shared/utils";
|
||||
|
||||
export default {
|
||||
components: { OptionsList },
|
||||
computed: {
|
||||
...mapState(["icon", "timerD", "timerS", "timerV", "RTL"]),
|
||||
items() {
|
||||
let options = [
|
||||
{
|
||||
type: "list",
|
||||
icon: "sound",
|
||||
rtl: 0,
|
||||
title: "tmrSnd",
|
||||
subTitle: this.timerS.title,
|
||||
action: this.showSoundsList,
|
||||
},
|
||||
{
|
||||
type: "switch",
|
||||
icon: "vibrate",
|
||||
rtl: 0,
|
||||
title: "tmrvbrt",
|
||||
checked: !!this.timerV,
|
||||
action: this.toggleTimerVibrate,
|
||||
},
|
||||
];
|
||||
let openSettings = [
|
||||
{
|
||||
type: "list",
|
||||
icon: "sound",
|
||||
rtl: 0,
|
||||
title: "notifSetg",
|
||||
subTitle: null,
|
||||
action: this.openNotificationChannelSettings,
|
||||
},
|
||||
];
|
||||
let list = this.channelExists() ? openSettings : options;
|
||||
return [
|
||||
{},
|
||||
{
|
||||
type: "list",
|
||||
icon: "delay",
|
||||
rtl: 0,
|
||||
title: "dlyDur",
|
||||
subTitle:
|
||||
this.delayList[this.delayList.findIndex((e) => e.n == this.timerD)]
|
||||
.l,
|
||||
action: this.showDelayList,
|
||||
},
|
||||
...list,
|
||||
{},
|
||||
];
|
||||
},
|
||||
delayList() {
|
||||
return [
|
||||
...Array.from(Array(4), (_, x) => x + 1),
|
||||
...Array.from(Array(6), (_, x) => (x + 1) * 5),
|
||||
].map((e) => {
|
||||
return {
|
||||
l: `${this.localeN(e)} ${localize(e > 1 ? "minutes" : "minute")}`,
|
||||
n: e,
|
||||
};
|
||||
});
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["setTD", "setTS", "setTV"]),
|
||||
pgLoad({ object }) {
|
||||
object.bindingContext = new Observable();
|
||||
ApplicationSettings.setNumber("isTimer", 2);
|
||||
},
|
||||
showDelayList() {
|
||||
this.$showModal(Action, {
|
||||
props: {
|
||||
title: "dlyDur",
|
||||
list: this.delayList.map((e) => e.l),
|
||||
selected: this.delayList.findIndex((e) => e.n == this.timerD),
|
||||
},
|
||||
}).then(
|
||||
(res) =>
|
||||
res &&
|
||||
this.setTD(
|
||||
this.delayList[this.delayList.findIndex((e) => e.l == res)].n
|
||||
)
|
||||
);
|
||||
},
|
||||
showSoundsList() {
|
||||
let getTones = utils.getTones();
|
||||
this.$showModal(Action, {
|
||||
props: {
|
||||
title: "tmrSnd",
|
||||
list: getTones.tones.map((e) => e.title),
|
||||
selected: getTones.tones.findIndex(
|
||||
(e) => e.title == this.timerS.title
|
||||
),
|
||||
},
|
||||
}).then(
|
||||
(tone) =>
|
||||
tone &&
|
||||
tone !== this.timerS.title &&
|
||||
this.setTS(getTones.tones.filter((e) => e.title === tone)[0])
|
||||
);
|
||||
},
|
||||
toggleTimerVibrate() {
|
||||
this.setTV(!this.timerV | 0);
|
||||
},
|
||||
openNotificationChannelSettings() {
|
||||
const ctx = Application.android.context;
|
||||
const Settings = android.provider.Settings;
|
||||
const Intent = android.content.Intent;
|
||||
let intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
|
||||
intent.putExtra(
|
||||
Settings.EXTRA_APP_PACKAGE,
|
||||
Application.android.packageName
|
||||
);
|
||||
intent.putExtra(Settings.EXTRA_CHANNEL_ID, "cta");
|
||||
intent.setFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
ctx.startActivity(intent);
|
||||
},
|
||||
channelExists() {
|
||||
if (Device.sdkVersion * 1 >= 26) {
|
||||
const ctx = Utils.ad.getApplicationContext();
|
||||
const NotifySrv = ctx.getSystemService(
|
||||
android.content.Context.NOTIFICATION_SERVICE
|
||||
);
|
||||
return NotifySrv.getNotificationChannel("cta");
|
||||
}
|
||||
return null;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
488
app/components/settings/Database.vue
Normal file
|
@ -0,0 +1,488 @@
|
|||
<template>
|
||||
<Page @loaded="pageL" actionBarHidden="true">
|
||||
<RGridLayout :rtl="RTL" rows="*, auto" columns="auto, *">
|
||||
<OptionsList title="db" :items="items" />
|
||||
<GridLayout
|
||||
:hidden="toast || progress"
|
||||
@loaded="appbarL"
|
||||
row="1"
|
||||
class="appbar rtl"
|
||||
rows="*"
|
||||
columns="auto, *"
|
||||
>
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
<Toast :onload="toastL" :toast="toast" :action="hideBar" />
|
||||
<RGridLayout
|
||||
:rtl="RTL"
|
||||
v-show="progress"
|
||||
row="1"
|
||||
colSpan="2"
|
||||
class="appbar snackbar rtl"
|
||||
columns="auto, *"
|
||||
>
|
||||
<ActivityIndicator :busy="!!progress" />
|
||||
<RLabel margin="0 2" col="1" class="tb tw vc lh4" :text="progress" />
|
||||
</RGridLayout>
|
||||
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
|
||||
<Label
|
||||
rowSpan="2"
|
||||
colSpan="2"
|
||||
class="edge har rtl f"
|
||||
@swipe="swipeBack"
|
||||
/>
|
||||
</RGridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
ApplicationSettings,
|
||||
path,
|
||||
knownFolders,
|
||||
AndroidApplication,
|
||||
File,
|
||||
Folder,
|
||||
Observable,
|
||||
Application,
|
||||
getFileAccess,
|
||||
} from "@nativescript/core";
|
||||
import { localize } from "@nativescript/localize";
|
||||
import Confirm from "../modals/Confirm";
|
||||
import OptionsList from "../sub/OptionsList";
|
||||
import Toast from "../sub/Toast";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import { openOrCreate } from "@akylas/nativescript-sqlite";
|
||||
import * as utils from "~/shared/utils";
|
||||
|
||||
export default {
|
||||
components: { OptionsList, Toast },
|
||||
data() {
|
||||
return {
|
||||
backupFolder: 0,
|
||||
progress: null,
|
||||
toast: 0,
|
||||
appbar: 0,
|
||||
toastbar: 0,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState([
|
||||
"icon",
|
||||
"recipes",
|
||||
"cuisines",
|
||||
"categories",
|
||||
"yieldUnits",
|
||||
"units",
|
||||
"mealPlans",
|
||||
"impSum",
|
||||
"RTL",
|
||||
]),
|
||||
items() {
|
||||
return [
|
||||
{},
|
||||
{
|
||||
type: "list",
|
||||
icon: "folder",
|
||||
title: "buFol",
|
||||
subTitle: this.backupFolder,
|
||||
action: this.setBackupFolder,
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "exp",
|
||||
title: "expBu",
|
||||
subTitle: localize("buInfo"),
|
||||
action: this.exportCheck,
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "imp",
|
||||
title: "impBu",
|
||||
subTitle: localize("impInfo"),
|
||||
action: this.openZipFile,
|
||||
},
|
||||
{},
|
||||
];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions([
|
||||
"importLIs",
|
||||
"importRsJSON",
|
||||
"importRsDB",
|
||||
"importMPsJSON",
|
||||
"importMPsDB",
|
||||
"importTPs",
|
||||
"unLinkBIs",
|
||||
"clearIS",
|
||||
]),
|
||||
pageL({ object }) {
|
||||
object.bindingContext = new Observable();
|
||||
const ContentResolver =
|
||||
Application.android.nativeApp.getContentResolver();
|
||||
this.backupFolder = ApplicationSettings.getString("backupFolder", null);
|
||||
if (
|
||||
!this.backupFolder ||
|
||||
ContentResolver.getPersistedUriPermissions().isEmpty()
|
||||
) {
|
||||
this.backupFolder = null;
|
||||
}
|
||||
},
|
||||
appbarL({ object }) {
|
||||
this.appbar = object;
|
||||
},
|
||||
toastL({ object }) {
|
||||
this.toastbar = object;
|
||||
},
|
||||
|
||||
// BackupFolderPicker
|
||||
setBackupFolder(startExport) {
|
||||
const ContentResolver =
|
||||
Application.android.nativeApp.getContentResolver();
|
||||
const FLAGS =
|
||||
android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION |
|
||||
android.content.Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
|
||||
utils.getBackupFolder().then((uri) => {
|
||||
if (uri != null) {
|
||||
// ReleaseExistingPermissions
|
||||
if (this.backupFolder && this.backupFolder != uri.toString())
|
||||
ContentResolver.releasePersistableUriPermission(
|
||||
new android.net.Uri.parse(this.backupFolder),
|
||||
FLAGS
|
||||
);
|
||||
this.backupFolder = uri.toString();
|
||||
ApplicationSettings.setString("backupFolder", this.backupFolder);
|
||||
// PersistPermissions
|
||||
ContentResolver.takePersistableUriPermission(uri, FLAGS);
|
||||
if (startExport && this.backupFolder) {
|
||||
this.exportBackup();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// EXPORT HANDLERS
|
||||
exportCheck() {
|
||||
const ContentResolver =
|
||||
Application.android.nativeApp.getContentResolver();
|
||||
if (!this.recipes.length) this.showToast(localize("aFBu"));
|
||||
else {
|
||||
if (
|
||||
!this.backupFolder ||
|
||||
ContentResolver.getPersistedUriPermissions().isEmpty()
|
||||
) {
|
||||
this.setBackupFolder(1);
|
||||
} else this.exportBackup();
|
||||
}
|
||||
},
|
||||
exportBackup() {
|
||||
this.progress = localize("expip");
|
||||
this.hijackBackEvent();
|
||||
let date = new Date();
|
||||
let intlDate =
|
||||
date.getFullYear() +
|
||||
"-" +
|
||||
("0" + (date.getMonth() + 1)).slice(-2) +
|
||||
"-" +
|
||||
("0" + date.getDate()).slice(-2) +
|
||||
"_" +
|
||||
("0" + date.getHours()).slice(-2) +
|
||||
("0" + date.getMinutes()).slice(-2) +
|
||||
("0" + date.getSeconds()).slice(-2);
|
||||
|
||||
// Copy db file to EnRecipes folder
|
||||
utils.copyDBToExport();
|
||||
|
||||
let filename = `${localize("EnRecipes")}_${intlDate}.zip`;
|
||||
let fromPath = path.join(knownFolders.documents().path, "EnRecipes");
|
||||
utils.Zip.zip(fromPath, this.backupFolder, filename)
|
||||
.then((res) => res && this.showExportSummary(filename))
|
||||
.catch((err) => {
|
||||
console.log("Backup error: ", err);
|
||||
this.progress = 0;
|
||||
this.releaseBackEvent();
|
||||
this.setBackupFolder(1);
|
||||
});
|
||||
},
|
||||
showExportSummary(filename) {
|
||||
// delete copied db file
|
||||
getFileAccess().deleteFile(
|
||||
path.join(
|
||||
knownFolders.documents().getFolder("EnRecipes").path,
|
||||
"EnRecipes.db"
|
||||
)
|
||||
);
|
||||
this.progress = 0;
|
||||
this.releaseBackEvent();
|
||||
let description = localize("buto", `"${filename}"`);
|
||||
this.$showModal(Confirm, {
|
||||
props: {
|
||||
title: "expSuc",
|
||||
description,
|
||||
okButtonText: "OK",
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
// IMPORT HANDLERS
|
||||
openZipFile() {
|
||||
utils.getBackupFile().then((uri) => {
|
||||
if (uri) {
|
||||
knownFolders.temp().clear();
|
||||
let dest = knownFolders.temp().path;
|
||||
utils.Zip.unzip(uri, dest)
|
||||
.then((res) => res && this.validateZipContent(res, uri))
|
||||
.catch(() => this.failedImport(localize("buInc")));
|
||||
}
|
||||
});
|
||||
},
|
||||
validateZipContent(dest, uri) {
|
||||
this.progress = localize("impip");
|
||||
this.hijackBackEvent();
|
||||
let cache = dest + "/EnRecipes";
|
||||
const recipesDB = cache + "/EnRecipes.db";
|
||||
const recipes = cache + "/recipes.json";
|
||||
const images = cache + "/Images";
|
||||
const userCuisines = cache + "/userCuisines.json";
|
||||
const userCategories = cache + "/userCategories.json";
|
||||
const userYieldUnits = cache + "/userYieldUnits.json";
|
||||
const userUnits = cache + "/userUnits.json";
|
||||
const mealPlans = cache + "/mealPlans.json";
|
||||
let vm = this;
|
||||
// IMPORT IMAGES FINALLY
|
||||
function importImages() {
|
||||
const timer = setInterval(() => {
|
||||
if (!vm.progress) clearInterval(timer);
|
||||
if (vm.progress && vm.impSum.found) {
|
||||
Folder.exists(images)
|
||||
? vm.importImages(uri)
|
||||
: vm.showImportSummary();
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
if (Folder.exists(cache)) {
|
||||
if (File.exists(recipesDB)) {
|
||||
// IMPORT FROM DB FILE
|
||||
this.extractData(recipesDB);
|
||||
importImages();
|
||||
} else if (File.exists(recipes)) {
|
||||
// IMPORT FROM JSON FILES
|
||||
this.isFileDataValid([
|
||||
{
|
||||
path: recipes,
|
||||
db: "recipes",
|
||||
file: "recipes.json",
|
||||
},
|
||||
{
|
||||
path: userCuisines,
|
||||
db: "userCuisines",
|
||||
file: "userCuisines.json",
|
||||
},
|
||||
{
|
||||
path: userCategories,
|
||||
db: "userCategories",
|
||||
file: "userCategories.json",
|
||||
},
|
||||
{
|
||||
path: userYieldUnits,
|
||||
db: "userYieldUnits",
|
||||
file: "userYieldUnits.json",
|
||||
},
|
||||
{
|
||||
path: userUnits,
|
||||
db: "userUnits",
|
||||
file: "userUnits.json",
|
||||
},
|
||||
{
|
||||
path: mealPlans,
|
||||
db: "mealPlans",
|
||||
file: "mealPlans.json",
|
||||
},
|
||||
]);
|
||||
importImages();
|
||||
} else this.failedImport(localize("buEmp"));
|
||||
} else this.failedImport(localize("buInc"));
|
||||
},
|
||||
isFileDataValid(file) {
|
||||
const files = file.filter((e) => File.exists(e.path));
|
||||
if (files.length) {
|
||||
let isValid = files.map(() => 0);
|
||||
files.forEach((file, i) => {
|
||||
File.fromPath(file.path)
|
||||
.readText()
|
||||
.then((data) => {
|
||||
isValid[i] = this.hasValidJSON(data);
|
||||
if (!isValid[i]) {
|
||||
this.failedImport(
|
||||
`${localize("buMod")}\n\n${localize("invFile")}: ${file.file}`
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
if (isValid.every((e) => e === 1)) {
|
||||
files.forEach((file) => {
|
||||
File.fromPath(file.path)
|
||||
.readText()
|
||||
.then((data) => {
|
||||
this.importData(JSON.parse(data), file.db);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
} else this.failedImport(localize("buEmp"));
|
||||
},
|
||||
failedImport(description) {
|
||||
this.progress = 0;
|
||||
this.releaseBackEvent();
|
||||
knownFolders.temp().clear();
|
||||
this.$showModal(Confirm, {
|
||||
props: {
|
||||
title: "impFail",
|
||||
description,
|
||||
okButtonText: "OK",
|
||||
},
|
||||
});
|
||||
},
|
||||
hasValidJSON(data) {
|
||||
try {
|
||||
JSON.parse(data) && Array.isArray(JSON.parse(data));
|
||||
} catch (e) {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
},
|
||||
extractData(recipesDB) {
|
||||
const db = openOrCreate(recipesDB);
|
||||
|
||||
// Import recipes
|
||||
db.select("SELECT * FROM recipes").then((res) => {
|
||||
this.importRsDB(res);
|
||||
});
|
||||
|
||||
// Import listitems
|
||||
db.select(
|
||||
`SELECT cuisines, categories, yieldUnits, units FROM lists`
|
||||
).then((res) =>
|
||||
Object.keys(res[0]).forEach((listName) =>
|
||||
this.importLIs({
|
||||
data: JSON.parse(res[0][listName]),
|
||||
listName,
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
// Import mealPlans
|
||||
db.select(`SELECT * FROM mealPlans`).then((res) => this.importMPsDB(res));
|
||||
|
||||
// Import timerPs
|
||||
db.select(`SELECT * FROM timerPresets`).then((res) =>
|
||||
this.importTPs(res)
|
||||
);
|
||||
},
|
||||
importData(data, db) {
|
||||
switch (db) {
|
||||
case "recipes":
|
||||
this.importRsJSON(data);
|
||||
break;
|
||||
case "userCuisines":
|
||||
this.importLIs({
|
||||
data,
|
||||
listName: "cuisines",
|
||||
});
|
||||
break;
|
||||
case "userCategories":
|
||||
this.importLIs({
|
||||
data,
|
||||
listName: "categories",
|
||||
});
|
||||
break;
|
||||
case "userYieldUnits":
|
||||
this.importLIs({
|
||||
data,
|
||||
listName: "yieldUnits",
|
||||
});
|
||||
break;
|
||||
case "userUnits":
|
||||
this.importLIs({
|
||||
data,
|
||||
listName: "units",
|
||||
});
|
||||
break;
|
||||
case "mealPlans":
|
||||
this.importMPsJSON(data);
|
||||
break;
|
||||
}
|
||||
},
|
||||
importImages(uri) {
|
||||
let destPath = knownFolders.documents().path;
|
||||
Folder.fromPath(destPath);
|
||||
utils.Zip.unzip(uri, destPath).then((res) => {
|
||||
if (res) {
|
||||
// delete unzipped data files
|
||||
Folder.fromPath(path.join(destPath, "EnRecipes"))
|
||||
.getEntities()
|
||||
.then((entities) => {
|
||||
entities.forEach((entity) => {
|
||||
if (/.json|.db/.test(entity._extension))
|
||||
File.fromPath(entity._path).remove();
|
||||
});
|
||||
});
|
||||
this.showImportSummary();
|
||||
this.unLinkBIs();
|
||||
}
|
||||
});
|
||||
},
|
||||
showImportSummary() {
|
||||
this.progress = 0;
|
||||
this.releaseBackEvent();
|
||||
let { found, imported, updated } = this.impSum;
|
||||
let exists = Math.abs(found - imported - updated) + updated;
|
||||
let importedNote = `\n${localize("recI")} ${imported}`;
|
||||
let existsNote = `\n${localize("recE")} ${exists}`;
|
||||
let updatedNote = `\n${localize("recU")} ${updated}`;
|
||||
this.$showModal(Confirm, {
|
||||
props: {
|
||||
title: "impSuc",
|
||||
description: `${found} ${localize(
|
||||
"recF"
|
||||
)}\n${importedNote}${existsNote}${updatedNote}`,
|
||||
okButtonText: "OK",
|
||||
},
|
||||
}).then(() => this.clearIS());
|
||||
},
|
||||
|
||||
// NAVIGATION HANDLERS
|
||||
hijackBackEvent() {
|
||||
AndroidApplication.on(
|
||||
AndroidApplication.activityBackPressedEvent,
|
||||
this.backEvent
|
||||
);
|
||||
},
|
||||
releaseBackEvent() {
|
||||
AndroidApplication.off(
|
||||
AndroidApplication.activityBackPressedEvent,
|
||||
this.backEvent
|
||||
);
|
||||
},
|
||||
backEvent(args) {
|
||||
args.cancel = true;
|
||||
},
|
||||
|
||||
// TOAST
|
||||
showToast(data) {
|
||||
this.animateBar(this.appbar, 0).then(() => {
|
||||
this.toast = data;
|
||||
this.animateBar(this.toastbar, 1, 1);
|
||||
utils.timer(5, (val) => !val && this.hideBar());
|
||||
});
|
||||
},
|
||||
hideBar() {
|
||||
this.animateBar(this.toastbar, 0).then(() => {
|
||||
this.toast = null;
|
||||
this.animateBar(this.appbar, 1);
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
160
app/components/settings/Interface.vue
Normal file
|
@ -0,0 +1,160 @@
|
|||
<template>
|
||||
<Page @loaded="pageL" actionBarHidden="true">
|
||||
<RGridLayout :rtl="RTL" rows="*, auto" columns="auto, *">
|
||||
<OptionsList title="intf" :items="items" />
|
||||
<GridLayout row="1" class="appbar rtl" rows="*" columns="auto, *">
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
|
||||
<Label
|
||||
rowSpan="2"
|
||||
colSpan="2"
|
||||
class="edge har rtl f"
|
||||
@swipe="swipeBack"
|
||||
/>
|
||||
</RGridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ApplicationSettings, Observable, Frame } from "@nativescript/core";
|
||||
import Action from "../modals/Action";
|
||||
import OptionsList from "../sub/OptionsList";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import * as utils from "~/shared/utils";
|
||||
import { localize } from "@nativescript/localize";
|
||||
|
||||
export default {
|
||||
components: { OptionsList },
|
||||
data() {
|
||||
return {
|
||||
applang: 0,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "langs", "theme", "layout", "RTL", "mSystem"]),
|
||||
items() {
|
||||
return [
|
||||
{},
|
||||
{
|
||||
type: "list",
|
||||
icon: "lang",
|
||||
rtl: 0,
|
||||
title: "lang",
|
||||
subTitle: localize(this.applang),
|
||||
action: this.setAppLang,
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "theme",
|
||||
rtl: 0,
|
||||
title: "Theme",
|
||||
subTitle: localize(ApplicationSettings.getString("theme", "sysDef")),
|
||||
action: this.setTheme,
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "layout",
|
||||
rtl: 1,
|
||||
title: "listVM",
|
||||
subTitle: localize(this.layout),
|
||||
action: this.setLayoutMode,
|
||||
},
|
||||
// {
|
||||
// type: "list",
|
||||
// icon: "layout",
|
||||
// rtl: 0,
|
||||
// title: "mSystem",
|
||||
// subTitle: localize(this.mSystem),
|
||||
// action: this.setMSystem,
|
||||
// },
|
||||
{},
|
||||
];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["setT", "setL", "setRTL", "setMS"]),
|
||||
pageL({ object }) {
|
||||
object.bindingContext = new Observable();
|
||||
},
|
||||
|
||||
// LanguageSelection
|
||||
setAppLang() {
|
||||
let languages = this.langs.map((e) => e.title);
|
||||
this.$showModal(Action, {
|
||||
props: {
|
||||
title: "lang",
|
||||
list: [...languages],
|
||||
selected: this.applang,
|
||||
},
|
||||
}).then((action) => {
|
||||
if (action && this.applang !== action) {
|
||||
let currentLocale = ApplicationSettings.getString(
|
||||
"appLocale",
|
||||
"none"
|
||||
).split("-");
|
||||
let locale = this.langs.filter((e) => e.title === action)[0].locale;
|
||||
if (currentLocale !== locale) {
|
||||
this.applang = action;
|
||||
ApplicationSettings.setString("applang", action);
|
||||
ApplicationSettings.setString("appLocale", locale);
|
||||
utils.updateLocale();
|
||||
this.setRTL();
|
||||
Frame.reloadPage();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// ThemeSelection
|
||||
setTheme() {
|
||||
this.$showModal(Action, {
|
||||
props: {
|
||||
title: "Theme",
|
||||
list: ["Light", "Dark", "Black", "sysDef", "sysDefB"],
|
||||
selected: ApplicationSettings.getString("theme", "sysDef"),
|
||||
},
|
||||
}).then((action) => {
|
||||
if (
|
||||
action &&
|
||||
(ApplicationSettings.getString("theme") != this.theme
|
||||
? 1
|
||||
: this.theme != action)
|
||||
) {
|
||||
this.setT(action);
|
||||
Frame.reloadPage();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// LayoutMode
|
||||
setLayoutMode() {
|
||||
this.$showModal(Action, {
|
||||
props: {
|
||||
title: "listVM",
|
||||
list: ["detailed", "grid", "photogrid", "simple", "minimal"],
|
||||
selected: this.layout,
|
||||
},
|
||||
}).then((mode) => {
|
||||
if (mode && this.layout !== mode) this.setL(mode.toLowerCase());
|
||||
});
|
||||
},
|
||||
|
||||
// MeasuringSystem
|
||||
setMSystem() {
|
||||
this.$showModal(Action, {
|
||||
props: {
|
||||
title: "mSystem",
|
||||
list: ["mtrc", "imprl"],
|
||||
selected: this.mSystem,
|
||||
},
|
||||
}).then((sys) => {
|
||||
if (sys && this.mSystem !== sys) this.setMS(sys);
|
||||
});
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.applang = ApplicationSettings.getString("applang", "sysDef");
|
||||
},
|
||||
};
|
||||
</script>
|
90
app/components/settings/MPSettings.vue
Normal file
|
@ -0,0 +1,90 @@
|
|||
<template>
|
||||
<Page @loaded="pgLoad" actionBarHidden="true">
|
||||
<RGridLayout :rtl="RTL" rows="*, auto" columns="auto, *">
|
||||
<OptionsList title="Settings" :items="items" />
|
||||
<GridLayout row="1" class="appbar rtl" rows="*" columns="auto, *">
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
|
||||
<Label
|
||||
rowSpan="2"
|
||||
colSpan="2"
|
||||
class="edge har rtl f"
|
||||
@swipe="swipeBack"
|
||||
/>
|
||||
</RGridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Observable } from "@nativescript/core";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import Action from "../modals/Action";
|
||||
import OptionsList from "../sub/OptionsList";
|
||||
import { localize } from "@nativescript/localize";
|
||||
|
||||
export default {
|
||||
components: { OptionsList },
|
||||
computed: {
|
||||
...mapState(["icon", "startMon", "RTL", "plannerV", "planDel"]),
|
||||
items() {
|
||||
return [
|
||||
{},
|
||||
{
|
||||
type: "list",
|
||||
icon: "calv",
|
||||
title: "calVM",
|
||||
subTitle: localize(this.plannerV),
|
||||
action: this.selectPlannerView,
|
||||
},
|
||||
{
|
||||
type: "switch",
|
||||
icon: "week",
|
||||
title: "swm",
|
||||
checked: !!this.startMon,
|
||||
action: this.toggleFirstDay,
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "mpd",
|
||||
title: "admp",
|
||||
subTitle: localize(this.planDel),
|
||||
action: this.selectDeletionTime,
|
||||
},
|
||||
{},
|
||||
];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["setFD", "setPlannerV", "setPlanDel"]),
|
||||
pgLoad({ object }) {
|
||||
object.bindingContext = new Observable();
|
||||
},
|
||||
toggleFirstDay() {
|
||||
this.setFD(!this.startMon | 0);
|
||||
},
|
||||
selectPlannerView() {
|
||||
this.$showModal(Action, {
|
||||
props: {
|
||||
title: "calVM",
|
||||
list: ["d", "wk", "mnth"],
|
||||
selected: this.plannerV,
|
||||
},
|
||||
}).then((res) => {
|
||||
if (res && this.plannerV != res) this.setPlannerV(res);
|
||||
});
|
||||
},
|
||||
selectDeletionTime() {
|
||||
this.$showModal(Action, {
|
||||
props: {
|
||||
title: "admp",
|
||||
list: ["otaw", "otam", "otay", "nvr"],
|
||||
selected: this.planDel,
|
||||
},
|
||||
}).then((res) => {
|
||||
if (res && this.planDel != res) this.setPlanDel(res);
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
117
app/components/settings/Options.vue
Normal file
|
@ -0,0 +1,117 @@
|
|||
<template>
|
||||
<Page @loaded="pgLoad" actionBarHidden="true">
|
||||
<RGridLayout :rtl="RTL" rows="*, auto" columns="auto, *">
|
||||
<OptionsList title="opts" :items="items" />
|
||||
<GridLayout
|
||||
:hidden="toast"
|
||||
@loaded="abLoad"
|
||||
row="1"
|
||||
class="appbar rtl"
|
||||
rows="*"
|
||||
columns="auto, *"
|
||||
>
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
<Toast :onload="tbLoad" :toast="toast" :action="hideBar" />
|
||||
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
|
||||
<Label
|
||||
rowSpan="2"
|
||||
colSpan="2"
|
||||
class="edge har rtl f"
|
||||
@swipe="swipeBack"
|
||||
/>
|
||||
</RGridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Observable } from "@nativescript/core";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import { localize } from "@nativescript/localize";
|
||||
import OptionsList from "../sub/OptionsList";
|
||||
import Toast from "../sub/Toast";
|
||||
import * as utils from "~/shared/utils";
|
||||
|
||||
export default {
|
||||
components: { OptionsList, Toast },
|
||||
data() {
|
||||
return {
|
||||
appbar: null,
|
||||
toastbar: null,
|
||||
toast: null,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "shake", "RTL", "edgeS", "awakeV"]),
|
||||
items() {
|
||||
return [
|
||||
{},
|
||||
{
|
||||
type: "switch",
|
||||
icon: "shuf",
|
||||
title: "sVw",
|
||||
subTitle: localize("sVwInfo"),
|
||||
checked: !!this.shake,
|
||||
action: this.toggleShake,
|
||||
},
|
||||
{
|
||||
type: "switch",
|
||||
icon: "awake",
|
||||
title: "ksavr",
|
||||
subTitle: localize("ksavrInfo"),
|
||||
checked: !!this.awakeV,
|
||||
action: this.toggleAwake,
|
||||
},
|
||||
{
|
||||
type: "switch",
|
||||
icon: "edge",
|
||||
title: "esgb",
|
||||
subTitle: localize("esgbInfo"),
|
||||
checked: !!this.edgeS,
|
||||
action: this.toggleSwipe,
|
||||
},
|
||||
{},
|
||||
];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["setS", "toggleEdgeS", "toggleAwakeV"]),
|
||||
pgLoad({ object }) {
|
||||
object.bindingContext = new Observable();
|
||||
},
|
||||
abLoad({ object }) {
|
||||
this.appbar = object;
|
||||
},
|
||||
tbLoad({ object }) {
|
||||
this.toastbar = object;
|
||||
},
|
||||
|
||||
toggleShake() {
|
||||
let checked = this.shake;
|
||||
if (checked && !utils.hasAccelerometer())
|
||||
this.showToast(localize("noAccSensor"));
|
||||
else this.setS(+!checked);
|
||||
},
|
||||
toggleSwipe() {
|
||||
this.toggleEdgeS(+!this.edgeS);
|
||||
},
|
||||
toggleAwake() {
|
||||
this.toggleAwakeV(+!this.awakeV);
|
||||
},
|
||||
|
||||
showToast(data) {
|
||||
this.animateBar(this.appbar, 0).then(() => {
|
||||
this.toast = data;
|
||||
this.animateBar(this.toastbar, 1, 1);
|
||||
utils.timer(5, (val) => !val && this.hideBar());
|
||||
});
|
||||
},
|
||||
hideBar() {
|
||||
this.animateBar(this.toastbar, 0).then(() => {
|
||||
this.toast = null;
|
||||
this.animateBar(this.appbar, 1);
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
115
app/components/settings/Reset.vue
Normal file
|
@ -0,0 +1,115 @@
|
|||
<template>
|
||||
<Page @loaded="pgLoad" actionBarHidden="true">
|
||||
<RGridLayout :rtl="RTL" rows="*, auto" columns="auto, *">
|
||||
<OptionsList title="rest" :items="items" :action="reset" />
|
||||
<GridLayout
|
||||
:hidden="toast"
|
||||
row="1"
|
||||
class="appbar rtl"
|
||||
@loaded="abLoad"
|
||||
columns="auto, *"
|
||||
>
|
||||
<Button class="ico" :text="icon.back" @tap="$navigateBack()" />
|
||||
</GridLayout>
|
||||
<Toast :onload="tbLoad" :toast="toast" :action="hideToast" />
|
||||
<Label rowSpan="2" class="edge hal rtl" @swipe="swipeBack" />
|
||||
<Label
|
||||
rowSpan="2"
|
||||
colSpan="2"
|
||||
class="edge har rtl f"
|
||||
@swipe="swipeBack"
|
||||
/>
|
||||
</RGridLayout>
|
||||
</Page>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Observable } from "@nativescript/core";
|
||||
import { localize } from "@nativescript/localize";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import * as utils from "~/shared/utils";
|
||||
import OptionsList from "../sub/OptionsList";
|
||||
import Toast from "../sub/Toast";
|
||||
let barTimer;
|
||||
|
||||
export default {
|
||||
components: { OptionsList, Toast },
|
||||
data() {
|
||||
return {
|
||||
toast: 0,
|
||||
appbar: 0,
|
||||
toastbar: 0,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "RTL"]),
|
||||
items() {
|
||||
return [
|
||||
{},
|
||||
{
|
||||
type: "list",
|
||||
icon: "reset",
|
||||
rtl: 1,
|
||||
title: "restCuiL",
|
||||
data: "cuisines",
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "reset",
|
||||
rtl: 1,
|
||||
title: "restCatL",
|
||||
data: "categories",
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "reset",
|
||||
rtl: 1,
|
||||
title: "restYUL",
|
||||
data: "yieldUnits",
|
||||
},
|
||||
{
|
||||
type: "list",
|
||||
icon: "reset",
|
||||
rtl: 1,
|
||||
title: "restUL",
|
||||
data: "units",
|
||||
},
|
||||
{
|
||||
type: "info",
|
||||
title: "restInfo",
|
||||
},
|
||||
{},
|
||||
];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["resetLIs"]),
|
||||
pgLoad({ object }) {
|
||||
object.bindingContext = new Observable();
|
||||
},
|
||||
abLoad({ object }) {
|
||||
this.appbar = object;
|
||||
},
|
||||
tbLoad({ object }) {
|
||||
this.toastbar = object;
|
||||
},
|
||||
reset(list) {
|
||||
this.resetLIs(list);
|
||||
this.showToast();
|
||||
},
|
||||
showToast() {
|
||||
this.animateBar(this.appbar, 0).then(() => {
|
||||
this.toast = localize("restDone");
|
||||
this.animateBar(this.toastbar, 1, 1);
|
||||
});
|
||||
utils.timer(5, (val) => !val && this.hideToast());
|
||||
},
|
||||
hideToast() {
|
||||
this.animateBar(this.toastbar, 0).then(() => {
|
||||
this.toast = null;
|
||||
this.animateBar(this.appbar, 1);
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
87
app/components/sub/OptionsList.vue
Normal file
|
@ -0,0 +1,87 @@
|
|||
<template>
|
||||
<ListView colSpan="2" rowSpan="2" class="options" for="item in items">
|
||||
<v-template if="$index == 0">
|
||||
<Label class="pTitle tw tb" :text="title | L" />
|
||||
</v-template>
|
||||
<v-template if="item.type == 'switch'">
|
||||
<RGridLayout
|
||||
:rtl="RTL"
|
||||
columns="auto, *, auto"
|
||||
class="option"
|
||||
@touch="touch($event, item.data, item.action)"
|
||||
>
|
||||
<Label class="ico vc rtl" :text="icon[item.icon]" />
|
||||
<StackLayout col="1" class="info">
|
||||
<RLabel :text="item.title | L" class="tw" />
|
||||
<RLabel
|
||||
v-if="item.subTitle"
|
||||
:text="item.subTitle | L"
|
||||
class="sub tw"
|
||||
/>
|
||||
</StackLayout>
|
||||
<Switch
|
||||
@loaded="swLoad"
|
||||
isUserInteractionEnabled="false"
|
||||
:color="item.checked ? '#ff5200' : '#adb5bd'"
|
||||
col="2"
|
||||
:checked="item.checked"
|
||||
/>
|
||||
</RGridLayout>
|
||||
</v-template>
|
||||
<v-template if="item.type == 'list'">
|
||||
<RGridLayout
|
||||
:rtl="RTL"
|
||||
columns="auto, *"
|
||||
class="option"
|
||||
@touch="touch($event, item.data, item.action)"
|
||||
>
|
||||
<Label
|
||||
class="ico vc"
|
||||
:class="{ rtl: item.rtl }"
|
||||
:text="icon[item.icon]"
|
||||
/>
|
||||
<StackLayout col="1" class="info">
|
||||
<RLabel :text="item.title | L" class="tw" />
|
||||
<RLabel
|
||||
:hidden="!item.subTitle"
|
||||
:text="item.subTitle"
|
||||
class="sub tw"
|
||||
/>
|
||||
</StackLayout>
|
||||
</RGridLayout>
|
||||
</v-template>
|
||||
<v-template if="item.type == 'info'">
|
||||
<Label
|
||||
class="groupInfo sub tw lh4"
|
||||
:class="{ r: RTL }"
|
||||
:text="item.title | L"
|
||||
/>
|
||||
</v-template>
|
||||
<v-template>
|
||||
<StackLayout class="ls"> </StackLayout>
|
||||
</v-template>
|
||||
</ListView>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from "vuex";
|
||||
import * as utils from "~/shared/utils";
|
||||
|
||||
export default {
|
||||
props: ["title", "items", "action"],
|
||||
computed: {
|
||||
...mapState(["icon", "RTL"]),
|
||||
},
|
||||
methods: {
|
||||
swLoad({ object }) {
|
||||
object.android.setRotation(
|
||||
this.RTL && utils.sysRTL() ? 0 : this.RTL || utils.sysRTL() ? 180 : 0
|
||||
);
|
||||
},
|
||||
touch({ object, action }, data, localAction) {
|
||||
this.touchFade(object, action);
|
||||
if (action == "up") localAction ? localAction(data) : this.action(data);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
31
app/components/sub/SnackBar.vue
Normal file
|
@ -0,0 +1,31 @@
|
|||
<template>
|
||||
<RGridLayout
|
||||
:rtl="RTL"
|
||||
row="1"
|
||||
class="appbar snackbar"
|
||||
columns="auto, *, auto"
|
||||
@swipe="action"
|
||||
@loaded="onload"
|
||||
>
|
||||
<Button @tap="action" :text="count" class="ico t3 accent tb" />
|
||||
<RLabel
|
||||
@tap="action"
|
||||
margin="0 2"
|
||||
class="tw vc lh4"
|
||||
col="1"
|
||||
:text="msg | L"
|
||||
/>
|
||||
<Button class="ico fab rtl" :text="icon.undo" @tap="undo" col="3" />
|
||||
</RGridLayout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from "vuex";
|
||||
|
||||
export default {
|
||||
props: ["count", "msg", "undo", "action", "onload"],
|
||||
computed: {
|
||||
...mapState(["icon", "RTL"]),
|
||||
},
|
||||
};
|
||||
</script>
|
272
app/components/sub/Timer.vue
Normal file
|
@ -0,0 +1,272 @@
|
|||
<template>
|
||||
<RGridLayout
|
||||
:rtl="RTL"
|
||||
rows="auto, auto"
|
||||
columns="auto, *, auto, auto, auto"
|
||||
class="timer"
|
||||
>
|
||||
<Button
|
||||
class="ico si rtl"
|
||||
:text="done ? icon.ring : timer.isPaused ? icon.start : icon.pause"
|
||||
@tap="!done && toggleProgress()"
|
||||
/>
|
||||
<StackLayout
|
||||
col="1"
|
||||
class="info"
|
||||
:colSpan="timer.isPaused || !timer.preset ? 1 : 2"
|
||||
>
|
||||
<RLabel :text="timer.label" class="tb title tw a" />
|
||||
<RLabel
|
||||
:hidden="!timer.recipeID && done"
|
||||
@touch="!done && touch($event)"
|
||||
:text="getRecipeTitle"
|
||||
class="a accent"
|
||||
/>
|
||||
<RLabel
|
||||
:text="
|
||||
progress == 0
|
||||
? countUp
|
||||
? getCount
|
||||
: formattedTime(timer.time)
|
||||
: getCount
|
||||
"
|
||||
/>
|
||||
</StackLayout>
|
||||
<Button
|
||||
col="2"
|
||||
class="ico rtl"
|
||||
:hidden="(!timer.isPaused && timer.preset) || done || countUp"
|
||||
:text="isReset || timer.preset ? icon.reset : icon.addTo"
|
||||
@tap="isReset || timer.preset ? resetTimer() : addPreset()"
|
||||
/>
|
||||
<Button
|
||||
col="3"
|
||||
class="ico"
|
||||
@tap="countUp ? addPreset() : addDelay()"
|
||||
:text="countUp ? icon.addTo : icon.delay"
|
||||
/>
|
||||
<Button
|
||||
col="4"
|
||||
class="ico si"
|
||||
:text="icon.x"
|
||||
@tap="removeTimer(timer.id, done)"
|
||||
/>
|
||||
<Progress @loaded="pLoaded" row="1" colSpan="5" />
|
||||
</RGridLayout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ApplicationSettings, Device } from "@nativescript/core";
|
||||
import { localize } from "@nativescript/localize";
|
||||
import { mapState, mapActions } from "vuex";
|
||||
import ActionWithSearch from "../modals/ActionWithSearch";
|
||||
import EditRecipe from "../EditRecipe";
|
||||
import * as utils from "~/shared/utils";
|
||||
import { EvtBus } from "~/main";
|
||||
export default {
|
||||
props: [
|
||||
"timer",
|
||||
"formattedTime",
|
||||
"removeTimer",
|
||||
"togglePause",
|
||||
"timerAlert",
|
||||
"showToast",
|
||||
],
|
||||
data() {
|
||||
return {
|
||||
pBar: 0,
|
||||
count: 0,
|
||||
delay: 0,
|
||||
progress: 0,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(["icon", "recipes", "timerD", "timerPs", "RTL"]),
|
||||
getRecipeTitle() {
|
||||
let { recipeID } = this.timer;
|
||||
if (recipeID) {
|
||||
let recipe = this.recipes.filter((e) => e.id == this.timer.recipeID)[0];
|
||||
if (recipe) return recipe.title;
|
||||
else {
|
||||
this.timer.recipeID = null;
|
||||
return localize("fwr");
|
||||
}
|
||||
} else return localize("fwr");
|
||||
},
|
||||
done() {
|
||||
return this.timer.done;
|
||||
},
|
||||
countUp() {
|
||||
return this.timer.mode == 0;
|
||||
},
|
||||
isReset() {
|
||||
return this.timer.isPaused && this.progress != 0;
|
||||
},
|
||||
getTotalTime() {
|
||||
return this.delay + this.actualTime;
|
||||
},
|
||||
actualTime() {
|
||||
let t = this.timer.time.split(":");
|
||||
return +t[0] * 60 * 60 + +t[1] * 60 + +t[2];
|
||||
},
|
||||
getCount() {
|
||||
let c = this.count;
|
||||
let s = Math.abs(c);
|
||||
return (
|
||||
(c < 0 ? "-" : "") +
|
||||
new Date(s * 1000)
|
||||
.toISOString()
|
||||
.slice(
|
||||
s < 10
|
||||
? 18
|
||||
: s < 60
|
||||
? 17
|
||||
: s < 600
|
||||
? 15
|
||||
: s < 3600
|
||||
? 14
|
||||
: s < 36000
|
||||
? 12
|
||||
: s < 86400
|
||||
? 11
|
||||
: 0,
|
||||
19
|
||||
)
|
||||
);
|
||||
},
|
||||
sdkv() {
|
||||
return parseInt(Device.sdkVersion);
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["addTP", "sortATs"]),
|
||||
pLoaded({ object }) {
|
||||
this.pBar = object.android;
|
||||
this.pBar.setRotation(
|
||||
this.RTL && utils.sysRTL() ? 0 : this.RTL || utils.sysRTL() ? 180 : 0
|
||||
);
|
||||
this.initTimer();
|
||||
},
|
||||
attachRecipe() {
|
||||
this.$showModal(ActionWithSearch, {
|
||||
props: {
|
||||
title: "selRec",
|
||||
recipes: this.recipes,
|
||||
action: "aNBtn",
|
||||
},
|
||||
}).then((res) => {
|
||||
if (res == "aNBtn") {
|
||||
this.$navigateTo(EditRecipe, {
|
||||
animated: false,
|
||||
});
|
||||
} else if (res) {
|
||||
let timer = this.timer;
|
||||
timer.recipeID = res;
|
||||
this.sortATs();
|
||||
}
|
||||
});
|
||||
},
|
||||
setNum(type, val) {
|
||||
ApplicationSettings.setNumber(`${this.timer.id}${type}`, val);
|
||||
},
|
||||
setProgress() {
|
||||
this.progress = 100 - (this.count / this.getTotalTime) * 100;
|
||||
this.sdkv > 23
|
||||
? this.pBar.setProgress(this.progress, true)
|
||||
: this.pBar.setProgress(this.progress);
|
||||
},
|
||||
initTimer() {
|
||||
this.resetInterval();
|
||||
this.setProgress();
|
||||
!this.timer.isPaused && this.pBar.setIndeterminate(this.countUp);
|
||||
if (this.progress < 100 || !this.timer.timerInt) {
|
||||
this.timer.timerInt = setInterval(() => {
|
||||
if (!this.timer.isPaused) {
|
||||
this.setNum("c", this.countUp ? this.count++ : --this.count);
|
||||
this.setProgress();
|
||||
} else this.resetInterval();
|
||||
if (this.progress >= 100 && this.count >= 0) {
|
||||
this.timer.done = 1;
|
||||
this.timerAlert();
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
},
|
||||
resetInterval() {
|
||||
clearInterval(this.timer.timerInt);
|
||||
this.timer.timerInt = 0;
|
||||
this.pBar.setIndeterminate(false);
|
||||
},
|
||||
resetTimer() {
|
||||
this.count = this.actualTime;
|
||||
this.progress = this.delay = this.timer.done = 0;
|
||||
ApplicationSettings.remove(`${this.timer.id}d`);
|
||||
this.setNum("c", this.count);
|
||||
this.toggleProgress(1);
|
||||
this.sdkv > 23
|
||||
? this.pBar.setProgress(0, true)
|
||||
: this.pBar.setProgress(0);
|
||||
},
|
||||
toggleProgress(n) {
|
||||
this.togglePause(this.timer, n);
|
||||
this.timer.isPaused ? this.resetInterval() : this.initTimer();
|
||||
},
|
||||
addPreset() {
|
||||
let exist = this.timerPs.some((e) => e.id == this.timer.id);
|
||||
this.timer.preset = 1;
|
||||
if (this.countUp) {
|
||||
this.timer.time = new Date(this.count * 1000)
|
||||
.toISOString()
|
||||
.substr(11, 8);
|
||||
}
|
||||
let timer = JSON.parse(JSON.stringify(this.timer));
|
||||
let { recipeID, timerInt, isPaused, preset, done, mode, ...presetTimer } =
|
||||
timer;
|
||||
this.addTP(presetTimer);
|
||||
exist ? this.showToast("prstTU") : this.showToast("aTPrst");
|
||||
},
|
||||
addDelay() {
|
||||
this.timer.done = 0;
|
||||
let td = this.timerD;
|
||||
let delayDur =
|
||||
this.localeN(td) + " " + localize(td > 1 ? "minutes" : "minute");
|
||||
this.showToast(localize("wDBy", this.timer.label, delayDur));
|
||||
let delay = td * 60;
|
||||
if (this.done) this.delay = delay;
|
||||
else this.delay += delay;
|
||||
if (this.count >= 0) this.count += delay;
|
||||
else this.count = this.delay;
|
||||
this.setNum("d", this.delay);
|
||||
this.setNum("c", this.count);
|
||||
this.resetInterval();
|
||||
this.initTimer();
|
||||
this.timerAlert();
|
||||
},
|
||||
|
||||
// HELPERS
|
||||
touch({ object, action }) {
|
||||
this.touchFade(object, action);
|
||||
if (action == "up") this.attachRecipe();
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.delay = ApplicationSettings.getNumber(`${this.timer.id}d`, 0);
|
||||
this.count = ApplicationSettings.getNumber(
|
||||
`${this.timer.id}c`,
|
||||
this.actualTime
|
||||
);
|
||||
let bID = "timer" + this.timer.id;
|
||||
EvtBus.$off(bID);
|
||||
EvtBus.$on(bID, (e) => {
|
||||
switch (e) {
|
||||
case "delay":
|
||||
this.addDelay();
|
||||
break;
|
||||
case "dismiss":
|
||||
this.removeTimer(this.timer.id, 1);
|
||||
break;
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
</script>
|
22
app/components/sub/Toast.vue
Normal file
|
@ -0,0 +1,22 @@
|
|||
<template>
|
||||
<GridLayout
|
||||
:hidden="!toast"
|
||||
row="1"
|
||||
colSpan="2"
|
||||
class="appbar snackbar"
|
||||
columns="*"
|
||||
@swipe="action"
|
||||
@tap="action"
|
||||
@loaded="onload"
|
||||
>
|
||||
<StackLayout minHeight="48">
|
||||
<RLabel padding="16 20" :text="toast" />
|
||||
</StackLayout>
|
||||
</GridLayout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: ["toast", "action", "onload"],
|
||||
};
|
||||
</script>
|
BIN
app/fonts/EnRecipes.ttf
Normal file
292
app/i18n/ar.json
Normal file
|
@ -0,0 +1,292 @@
|
|||
{
|
||||
"aap": "ألحق صورة",
|
||||
"About": "حول",
|
||||
"aBtn": "أضف",
|
||||
"aD": "انتهى!",
|
||||
"addCmbBtn": "ADD COMBINATION",
|
||||
"aFBu": "أضف وصفة لتقوم بالنسخ الاحتياطي",
|
||||
"aIngBtn": "أضف مكون",
|
||||
"allCats": "كل الأصناف",
|
||||
"allCuis": "كل المطابخ",
|
||||
"allTs": "كل العلامات",
|
||||
"American": "أمريكية",
|
||||
"aNBtn": "أضف جديدة",
|
||||
"aNoBtn": "أضف ملاحظة",
|
||||
"app.name": "EnRecipes",
|
||||
"appCrd": "شورك عبر EnRecipes. احصل عليه على F-Droid, IzzyOnDroid, أو متجر بلاي.",
|
||||
"Appetizers": "مقبلات",
|
||||
"appInfo": "EnRecipes كتاب طبخ مفتوح المصدر صديق للخصوصية يتيح لك إنشاء وصفاتك و إدارتها ومشاركتها",
|
||||
"apply": "طبق",
|
||||
"appRst": "إعادة تشغيل التطبيق متطلبة",
|
||||
"aStpBtn": "أضف خطوة",
|
||||
"Barbecue": "شواء",
|
||||
"Beverages": "مشروبات",
|
||||
"Black": "أسود",
|
||||
"Brazilian": "برازيلية",
|
||||
"Breads": "أخباز",
|
||||
"breakfast": "فطور",
|
||||
"British": "بريطانية",
|
||||
"buEmp": "مجلد النسخ الاحتيطية فارغ",
|
||||
"buFol": "مجلد النسخ الاحتياطية",
|
||||
"buInc": "ملف نسخة احتياطي مشوه أو فاسد",
|
||||
"buInfo": "يولد ملف ZIP يحتوي على جميع بياناتك يمكن استيراده مجدداً",
|
||||
"buMod": "لف النسخة الاحتياطة عدل في مكان آخر",
|
||||
"cat": "الصنف",
|
||||
"cBtn": "ألغ",
|
||||
"Challenging": "صعبة",
|
||||
"Chinese": "صينية",
|
||||
"clove": "فص",
|
||||
"cm": "سم",
|
||||
"cmbs": "مجموعات",
|
||||
"conBtn": "أكمل",
|
||||
"conf": "أكد",
|
||||
"cookT": "وقت الطبخ",
|
||||
"cPic": "قص الصورة",
|
||||
"Created": "أنشئت",
|
||||
"cui": "المطبخ",
|
||||
"cup": "كأس",
|
||||
"Cup": "كأس",
|
||||
"dAgo": "قبل %s أيام",
|
||||
"Danish": "دنماركي",
|
||||
"Dark": "داكن",
|
||||
"db": "قاعدة البيانات",
|
||||
"dBtn": "DELETE",
|
||||
"delRecInfo": "أنت على وشك أن تحذف الوصفة %s أبدياً",
|
||||
"delRecsInfo": "أنت على وشك أنت تحذف %s أبدياً",
|
||||
"Desserts": "حلا",
|
||||
"detailed": "مفصل",
|
||||
"Difficulty level": "مستوى الصعوبة",
|
||||
"dinner": "عشاء",
|
||||
"disBtn": "استبعد",
|
||||
"disc": "هذه الوصفة فيها تغييرات غير محفوظة. ما الذي تريد فعله؟",
|
||||
"donate": "تبرع",
|
||||
"dozen": "درزن",
|
||||
"drop": "قطرة",
|
||||
"dsp": "dstspn",
|
||||
"Easy": "سهلة",
|
||||
"editRec": "عدل الوصفة",
|
||||
"Egyptian": "مصرية",
|
||||
"English": "إنجليزية",
|
||||
"EnRecipes": "EnRecipes",
|
||||
"expBu": "صدر نسخة احتياطية كاملة",
|
||||
"expip": "جار التصدير",
|
||||
"expSuc": "نجح التصدير",
|
||||
"favourites": "المفضلات",
|
||||
"Filipino": "فلبينية",
|
||||
"Filtered recipes": "الوصفات المصفاة",
|
||||
"fl oz": "fl oz",
|
||||
"fltr": "المصفاة",
|
||||
"Fluid Ounce": "أونصة سائلة",
|
||||
"French": "فرنسية",
|
||||
"fsList": "وصفاتك المفضلة مسرودة هنا",
|
||||
"g": "غ",
|
||||
"gal": "جال",
|
||||
"Gallon": "جالون",
|
||||
"German": "ألمانية",
|
||||
"gh": "اعرض على GitHub",
|
||||
"Gram": "غرام",
|
||||
"Greek": "إغريقية",
|
||||
"grid": "شبكة",
|
||||
"grocery": "قائمة التسوق",
|
||||
"guide": "دليل المستخدم",
|
||||
"Healthy": "صحية",
|
||||
"hr": "hr",
|
||||
"impBu": "استورد البيانات",
|
||||
"impFail": "فشل الاستيراد",
|
||||
"impInfo": "يدعم النسخ الاحتياطية الكاملة المصدرة من هذا التطبيق",
|
||||
"impip": "جار الاستيراد",
|
||||
"impSuc": "نجح الاستيراد",
|
||||
"in": "إن",
|
||||
"Indian": "هندية",
|
||||
"ings": "المكونات",
|
||||
"inss": "التعليمات",
|
||||
"intf": "الواجهة",
|
||||
"invFile": "ملف غير صحيح",
|
||||
"Irish": "إيرلندية",
|
||||
"it": "Item",
|
||||
"Italian": "إيطالية",
|
||||
"Jamaican": "جمايكية",
|
||||
"Japanese": "يابانية",
|
||||
"Jewish": "يهودية",
|
||||
"joinTG": "انضم لمجموعة التلغرام",
|
||||
"kEdit": "KEEP EDITING",
|
||||
"Kenyan": "كينية",
|
||||
"kg": "كغ",
|
||||
"Kilogram": "كيلوغرام",
|
||||
"Korean": "كورية",
|
||||
"l": "ل",
|
||||
"lang": "اللغة",
|
||||
"large": "كبير",
|
||||
"Last updated": "آخر تحديث",
|
||||
"lb": "lb",
|
||||
"leaf": "ورقة",
|
||||
"Light": "فاتح",
|
||||
"listVM": "وضع عرض القائمة",
|
||||
"Litre": "لتر",
|
||||
"Loaf": "رغيف",
|
||||
"ltAgo": "منذ وقت طويل",
|
||||
"lunch": "غداء",
|
||||
"mAgo": "منذ %s أشهر",
|
||||
"Main dishes": "الأطباق الرئيسة",
|
||||
"Meat": "لحم",
|
||||
"medium": "medium",
|
||||
"Mexican": "مكسيكية",
|
||||
"mg": "مغ",
|
||||
"Millilitre": "مللتر",
|
||||
"min": "min",
|
||||
"sec": "ثان",
|
||||
"minimal": "الأقل",
|
||||
"ml": "مل",
|
||||
"Moderate": "متوسطة",
|
||||
"newCui": "مطبخ جديد",
|
||||
"Newest first": "الأجد أولاً",
|
||||
"newRec": "وصفة جديدة",
|
||||
"newUnit": "وحدة جديدة",
|
||||
"Nigerian": "نيجيرية",
|
||||
"nLangInfo": "أعد تشغيل EnRecipes لاستخدام اللغة الجديدة",
|
||||
"nNBtn": "ليس الآن",
|
||||
"no": "ملاحظة",
|
||||
"noAccSensor": "مقياس التسارع إما معطل أو لا يعمل",
|
||||
"noFavs": "لا مفضلات حتى الآن",
|
||||
"Noodles": "نودلز",
|
||||
"noRecs": "لا وصفات مطابقة لبحثك",
|
||||
"noRecsInL": "لا توجد وصفات هنا تطابق بحثك",
|
||||
"nos": "ملاحظات",
|
||||
"nwCat": "صنف جديد",
|
||||
"nwYiU": "وحدة إنتاج جديدة",
|
||||
"OK": "OK",
|
||||
"Oldest first": "الأقدم أولاً",
|
||||
"opts": "الاعدادات",
|
||||
"Ounce": "أونصة",
|
||||
"oz": "oz",
|
||||
"Pasta": "باستا",
|
||||
"Patty": "فطيرة",
|
||||
"photogrid": "شبكة صور",
|
||||
"pht": "صورة الوصفة",
|
||||
"piece": "قطعة",
|
||||
"Piece": "قطعة",
|
||||
"pinch": "رشة",
|
||||
"planner": "مخططة الوجبات",
|
||||
"plsAdd": "استعمل زر الزائد لإضافة واحدة",
|
||||
"Portuguese": "برتغالية",
|
||||
"Poultry": "دواجن",
|
||||
"Pound": "رطل",
|
||||
"prepT": "وقت التحضير",
|
||||
"priv": "سياسة الخصوصية",
|
||||
"pt": "pt",
|
||||
"qt": "qt",
|
||||
"Quickest first": "الاسرع أولاً",
|
||||
"Rating": "التقييم",
|
||||
"rBtn": "REMOVE",
|
||||
"rec": "الوصفة",
|
||||
"recE": "موجود أصلاً:",
|
||||
"recF": "وصفات عثرت",
|
||||
"recI": "المستورد:",
|
||||
"recListEmp": "لا شيء هنا! أضف بعض الوصفات ثم حاول مجدداً",
|
||||
"recPic": "صورة الوصفة",
|
||||
"recRm": "أزيلت الوصفة",
|
||||
"recs": "الوصفات",
|
||||
"recTitle": "وصفتي الصحية",
|
||||
"recU": "حدثت:",
|
||||
"req": "%s مطلوب(ة)",
|
||||
"resNF": "لم يعثر على الوصفة",
|
||||
"rest": "إعادة تعيين",
|
||||
"restCatL": "أعد تعيين قائمة الأصناف",
|
||||
"restCuiL": "أعد تعيين قائمة المطابخ",
|
||||
"restDone": "انتهت إعادة التعيين",
|
||||
"restInfo": "ستؤدي إعادة تعيين قائمة ما إلى حذف الإدخالات التي أنشأها المستخدم واستعادة الإدخالات الافتراضية. الوصفات الحالية لن تتأثر.",
|
||||
"restUL": "Reset unit list",
|
||||
"restYUL": "أعد تعيين قائمة وحدات الإنتاج",
|
||||
"Rice": "أرز",
|
||||
"rmCatInfo": "أنت على وشك أن تزيل %s من قائمة الأصناف",
|
||||
"rmCmb": "أزيلت المجموعة",
|
||||
"rmCuiInfo": "أنت على وشك أن تزيل %s من قائمة المطابخ",
|
||||
"rmIng": "أزيل المكون",
|
||||
"rmIns": "أزيلت التعليمة",
|
||||
"rmN": "أزيلت الملاحظة",
|
||||
"rmUInfo": "أنت على وشك أن تزيل %s من قائمة الوحدات",
|
||||
"rmYUInfo": "أنت على وشك أن تزيل %s من قائمة وحدات الإنتاج",
|
||||
"Roll": "لفة",
|
||||
"rp": "أزل الصورة",
|
||||
"rst": "أعد التشغيل",
|
||||
"Russian": "روسية",
|
||||
"Salads": "سلطات",
|
||||
"Sauces": "صلصات",
|
||||
"Scottish": "سكتلندية",
|
||||
"Seafood": "بحرية",
|
||||
"selRec": "اختر وصفة",
|
||||
"ser": "ابحث",
|
||||
"Serving": "حصة",
|
||||
"SET": "SET",
|
||||
"Settings": "الإعدادات",
|
||||
"shr": "شارك",
|
||||
"Side dishes": "الأطباق الجانبية",
|
||||
"simple": "بسيط",
|
||||
"Slowest first": "الأبطأ أولاً",
|
||||
"sltd": "المختارة",
|
||||
"small": "صغير",
|
||||
"snacks": "وجبات خفيفة",
|
||||
"Soups": "شوربات",
|
||||
"Spanish": "اسبانية",
|
||||
"Sri Lankan": "سري لانكية",
|
||||
"srpu": "شارك صورة الوصفة باستعمال...",
|
||||
"srt": "افرز",
|
||||
"sru": "شارك وصفة باستعمال...",
|
||||
"stars": "التقييم النجمي",
|
||||
"stick": "اصبع",
|
||||
"stp": "خطوة",
|
||||
"strAdd": "ابدأ إضافة وصفاتك!",
|
||||
"sVw": "هز لرؤية وصفة عشوائية",
|
||||
"sVwInfo": "لمساعدتك على اختيار ما تطبخ عندما لا تستطيع الاختيار",
|
||||
"Swedish": "سويدية",
|
||||
"swm": "ابدأ الاسبوع يوم الاثنين",
|
||||
"sysDef": "System default",
|
||||
"Tablespoon": "ملعقة",
|
||||
"tbsp": "ملعقة كبيرة",
|
||||
"Teaspoon": "ملعقة شاي",
|
||||
"Thai": "تايلندية",
|
||||
"Theme": "السمة",
|
||||
"title": "العنوان",
|
||||
"tLInfo": "الوصفات التي تريد تجربتها مسرودة هنا",
|
||||
"today": "اليوم",
|
||||
"triedInfo": "جربت هذه الوصفة %s",
|
||||
"trnsl": "ترجم",
|
||||
"trylater": "حاول لاحقاً",
|
||||
"trySer": "ابحث في كل الوصفات؟",
|
||||
"ts": "العلامات",
|
||||
"tsInfo": "افصل بمساقات",
|
||||
"tsp": "ملعقة كبيرة",
|
||||
"Turkish": "تركية",
|
||||
"Undefined": "غير معرف",
|
||||
"unit": "وحدة",
|
||||
"Unit": "وحدة",
|
||||
"unsaved": "تغيرات غبر محفوظة",
|
||||
"untRec": "وصفة بلا عنوان",
|
||||
"Vegan": "نباتي صرف",
|
||||
"Vegetarian": "نباتي",
|
||||
"Vietnamese": "فيتنامية",
|
||||
"wAgo": "قبل %s أسابيع",
|
||||
"yesterday": "أمس",
|
||||
"yieldQ": "كمية الإنتاج",
|
||||
"yieldU": "وحدة الانتاج",
|
||||
"yld": "الانتاج",
|
||||
"buto": "نسخ احتياطياً إلى %s",
|
||||
"sysDefB": "System default + Black",
|
||||
"timer": "مؤقت الطبخ",
|
||||
"ntmr": "مؤقت جديد",
|
||||
"strtBtn": "ابدأ",
|
||||
"stop": "قف",
|
||||
"delay": "التأخير",
|
||||
"tmr": "مؤقت %s",
|
||||
"prstBtn": "PRESETS",
|
||||
"fwr": "لأي وصفة؟",
|
||||
"aTPrst": "أضيف إلى الإعدادات المسبقة",
|
||||
"tmrSnd": "صوت المؤقت",
|
||||
"tmrvbrt": "اهتزاز المؤقت",
|
||||
"dlyDur": "مدة التأخير",
|
||||
"minute": "دقيقة",
|
||||
"minutes": "دقائق",
|
||||
"hour": "ساعة",
|
||||
"hours": "ساعات",
|
||||
"seconds": "ثوان"
|
||||
}
|
|
@ -143,13 +143,6 @@
|
|||
"yesterday": "i går",
|
||||
"disBtn": "AFFALD",
|
||||
"fltr": "Filtrer",
|
||||
"FRI": "FRE",
|
||||
"MON": "MAN",
|
||||
"SAT": "LøR",
|
||||
"SUN": "SøN",
|
||||
"THU": "TOR",
|
||||
"TUE": "TIR",
|
||||
"WED": "ONS",
|
||||
"no": "Bemærk",
|
||||
"nNBtn": "IKKE NU",
|
||||
"nLangInfo": "Genstart EnRecipes for at bruge det nye sprog",
|
||||
|
@ -157,8 +150,6 @@
|
|||
"newRec": "Ny opskrift",
|
||||
"newCui": "Nyt køkken",
|
||||
"minimal": "Minimalt",
|
||||
"May": "maj",
|
||||
"March": "Marts",
|
||||
"mAgo": "%s måneder siden",
|
||||
"noAccSensor": "Accelerometersensoren er enten deaktiveret eller fungerer ikke",
|
||||
"noRecsInL": "Ingen af opskrifterne her matcher din søgning",
|
||||
|
@ -170,10 +161,7 @@
|
|||
"ltAgo": "for lang tid siden",
|
||||
"listVM": "Visning af liste",
|
||||
"kEdit": "FORTSÆT REDIGERING",
|
||||
"June": "Juni",
|
||||
"July": "Juli",
|
||||
"joinTG": "Tilmeld dig Telegram-gruppen",
|
||||
"January": "Januar",
|
||||
"it": "Varen",
|
||||
"invFile": "Ugyldig fil",
|
||||
"inss": "Vejledning",
|
||||
|
@ -186,7 +174,6 @@
|
|||
"grid": "Gitter",
|
||||
"gh": "Se på GitHub",
|
||||
"Filtered recipes": "Filtrerede opskrifter",
|
||||
"February": "Februar",
|
||||
"expip": "Eksport i gang",
|
||||
"editRec": "Rediger opskrift",
|
||||
"donate": "Donér",
|
||||
|
@ -207,11 +194,9 @@
|
|||
"simple": "Enkel",
|
||||
"shr": "Del",
|
||||
"ser": "Søg",
|
||||
"September": "September",
|
||||
"detailed": "Detaljeret",
|
||||
"delRecsInfo": "Du er ved at slette %s permanent",
|
||||
"delRecInfo": "Du er ved at slette opskriften %s permanent",
|
||||
"December": "December",
|
||||
"dBtn": "SLETNING",
|
||||
"dAgo": "%s dage siden",
|
||||
"cui": "Køkken",
|
||||
|
@ -228,9 +213,7 @@
|
|||
"buFol": "Backup-mappe",
|
||||
"buEmp": "Backup-filen er tom",
|
||||
"Black": "Sort",
|
||||
"August": "August",
|
||||
"aStpBtn": "TILFØJ TRIN",
|
||||
"April": "April",
|
||||
"appRst": "App genstart nødvendig",
|
||||
"apply": "ANSØG",
|
||||
"appInfo": "EnRecipes er en open source, privatlivsvenlig digital kogebog, som giver dig mulighed for at oprette, administrere og dele dine opskrifter",
|
||||
|
@ -285,10 +268,29 @@
|
|||
"pht": "Foto af opskriften",
|
||||
"photogrid": "Foto gitter",
|
||||
"opts": "Indstillinger",
|
||||
"October": "Oktober",
|
||||
"nwYiU": "Ny udbytteenhed",
|
||||
"nwCat": "Ny kategori",
|
||||
"November": "November",
|
||||
"sysDefB": "Systemstandard + sort",
|
||||
"sec": "s"
|
||||
"sec": "s",
|
||||
"delay": "Udset",
|
||||
"stop": "Stopper",
|
||||
"strtBtn": "STARTER",
|
||||
"ntmr": "Ny timer",
|
||||
"timer": "Kogetid Timer",
|
||||
"hour": "timer",
|
||||
"hours": "timers",
|
||||
"aTPrst": "Tilføjet til forudindstillinger",
|
||||
"fwr": "til hvilken opskrift?",
|
||||
"prstBtn": "FORUDSÆTTER",
|
||||
"tmrSnd": "Timeren lyd",
|
||||
"tmr": "Timeren %s",
|
||||
"tmrvbrt": "Timer vibrerer",
|
||||
"dlyDur": "Forsinkelsens varighed",
|
||||
"minute": "minut",
|
||||
"minutes": "minutter",
|
||||
"seconds": "sekunder",
|
||||
"notifSetg": "Indstillinger for meddelelser",
|
||||
"tmrRm": "Timer fjernet",
|
||||
"delPrst": "Du er ved at slette %s fra de forudindstillinger",
|
||||
"prsts": "Forindstillinger"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes ist ein quelloffenes, datenschutzfreundliches, digitales Kochbuch, mit dem du deine Rezepte erstellen, verwalten und teilen kannst",
|
||||
"apply": "ANWENDEN",
|
||||
"appRst": "Neustart der Anwendung erforderlich",
|
||||
"April": "April",
|
||||
"aStpBtn": "SCHRITT HINZUFÜGEN",
|
||||
"August": "August",
|
||||
"Barbecue": "Grill",
|
||||
"Beverages": "Getränke",
|
||||
"Black": "Schwarz",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Dunkel",
|
||||
"db": "Datenbank",
|
||||
"dBtn": "LÖSCHEN",
|
||||
"December": "Dezember",
|
||||
"delRecInfo": "Du bist dabei, das Rezept %s dauerhaft zu löschen",
|
||||
"delRecsInfo": "Du bist dabei, %s dauerhaft zu löschen",
|
||||
"Desserts": "Nachspeisen",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Export wird durchgeführt",
|
||||
"expSuc": "Export erfolgreich",
|
||||
"favourites": "Favoriten",
|
||||
"February": "Februar",
|
||||
"Filipino": "Philipinisch",
|
||||
"Filtered recipes": "Gefilterte Rezepte",
|
||||
"fl oz": "fl",
|
||||
"fltr": "Filter",
|
||||
"Fluid Ounce": "Flüssige Unze",
|
||||
"French": "Französisch",
|
||||
"FRI": "Fr.",
|
||||
"fsList": "Deine Lieblingsrezepte findest du hier",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -108,15 +103,12 @@
|
|||
"intf": "Benutzeroberfläche",
|
||||
"invFile": "Ungültige Datei",
|
||||
"Irish": "Irisch",
|
||||
"it": "Element",
|
||||
"it": "Element %s",
|
||||
"Italian": "Italienisch",
|
||||
"Jamaican": "Jamaikanisch",
|
||||
"January": "Januar",
|
||||
"Japanese": "Japanisch",
|
||||
"Jewish": "Jüdisch",
|
||||
"joinTG": "Tritt der Telegram-Gruppe bei",
|
||||
"July": "Juli",
|
||||
"June": "Juni",
|
||||
"kEdit": "WEITER BEARBEITEN",
|
||||
"Kenyan": "Kenianisch",
|
||||
"kg": "kg",
|
||||
|
@ -136,8 +128,6 @@
|
|||
"lunch": "Mittagessen",
|
||||
"mAgo": "%s Monate zuvor",
|
||||
"Main dishes": "Hauptspeisen",
|
||||
"March": "März",
|
||||
"May": "Mai",
|
||||
"Meat": "Fleisch",
|
||||
"medium": "medium",
|
||||
"Mexican": "Mexikanisch",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "Minimal",
|
||||
"ml": "ml",
|
||||
"Moderate": "Moderat",
|
||||
"MON": "Mo.",
|
||||
"newCui": "Neue Küche",
|
||||
"Newest first": "Neueste zuerst",
|
||||
"newRec": "Neues Rezept",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "Keine Rezepte passen zu deiner Suche",
|
||||
"noRecsInL": "Keines der hier aufgeführten Rezepte entspricht deiner Suche",
|
||||
"nos": "Notizen",
|
||||
"November": "November",
|
||||
"nwCat": "Neue Kategorie",
|
||||
"nwYiU": "Neue Ertragseinheit",
|
||||
"October": "Oktober",
|
||||
"OK": "OK",
|
||||
"Oldest first": "Älteste zuerst",
|
||||
"opts": "Optionen",
|
||||
|
@ -179,7 +166,7 @@
|
|||
"Piece": "Stück",
|
||||
"pinch": "Prise",
|
||||
"planner": "Essensplaner",
|
||||
"plsAdd": "Verwende das Plus-Symbol, um eins hinzuzufügen",
|
||||
"plsAdd": "Verwende das +-Schaltfläche, um eins hinzuzufügen",
|
||||
"Portuguese": "Portugiesisch",
|
||||
"Poultry": "Geflügel",
|
||||
"Pound": "Pfund",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "NEU STARTEN",
|
||||
"Russian": "Russisch",
|
||||
"Salads": "Salate",
|
||||
"SAT": "Sa.",
|
||||
"Sauces": "Soßen",
|
||||
"Scottish": "Schottisch",
|
||||
"Seafood": "Meeresfrüchte",
|
||||
"selRec": "Rezept auswählen",
|
||||
"September": "September",
|
||||
"ser": "Suchen",
|
||||
"Serving": "Portion",
|
||||
"SET": "EINSTELLEN",
|
||||
|
@ -248,9 +233,8 @@
|
|||
"sru": "Rezept teilen mit …",
|
||||
"stars": "Bewertung in Sternen",
|
||||
"stick": "Stange",
|
||||
"stp": "Schritt",
|
||||
"stp": "Schritt %s",
|
||||
"strAdd": "Beginne deine Rezepte hinzuzufügen!",
|
||||
"SUN": "So.",
|
||||
"sVw": "Schütteln, um ein zufälliges Rezept anzuzeigen",
|
||||
"sVwInfo": "Hilft dir, wenn du dich nicht entscheiden kannst, was gekocht werden soll",
|
||||
"Swedish": "Swedisch",
|
||||
|
@ -261,7 +245,6 @@
|
|||
"Teaspoon": "TL",
|
||||
"Thai": "Thailändisch",
|
||||
"Theme": "Thema",
|
||||
"THU": "Do.",
|
||||
"title": "Titel",
|
||||
"tLInfo": "Rezepte, die du später ausprobieren willst, sind hier aufgelistet",
|
||||
"today": "heute",
|
||||
|
@ -272,7 +255,6 @@
|
|||
"ts": "Markierungen",
|
||||
"tsInfo": "mit Leerzeichen trennen",
|
||||
"tsp": "TL",
|
||||
"TUE": "Di.",
|
||||
"Turkish": "Türkisch",
|
||||
"Undefined": "Unsortiert",
|
||||
"unit": "Einheit",
|
||||
|
@ -283,21 +265,19 @@
|
|||
"Vegetarian": "Vegetarisch",
|
||||
"Vietnamese": "Vietnamesisch",
|
||||
"wAgo": "%s Wochen zuvor",
|
||||
"WED": "Mi.",
|
||||
"yesterday": "gestern",
|
||||
"yieldQ": "Ertragsmenge",
|
||||
"yieldU": "Ertragseinheit",
|
||||
"yld": "Ergebnis",
|
||||
"buto": "Gesichert in %s",
|
||||
"sysDefB": "Systemstandard + schwarz",
|
||||
"tmr": "Kochwecker %s",
|
||||
"tmr": "Kurzzeitwecker %s",
|
||||
"strtBtn": "START",
|
||||
"ntmr": "Neuer Kochwecker",
|
||||
"timer": "Kochwecker",
|
||||
"sec": "sec",
|
||||
"tmrvbrt": "Kochwecker vibrieren",
|
||||
"tmrSnd": "Kochwecker-Ton",
|
||||
"tmrPrsts": "Voreinstellungen des Kochweckers",
|
||||
"ntmr": "Neuer Kurzzeitwecker",
|
||||
"timer": "Kurzzeitwecker",
|
||||
"sec": "s",
|
||||
"tmrvbrt": "Kurzzeitweckervibration",
|
||||
"tmrSnd": "Kurzzeitweckerton",
|
||||
"aTPrst": "Zu Voreinstellungen hinzugefügt",
|
||||
"fwr": "für welches Rezept?",
|
||||
"prstBtn": "Voreinstellungen",
|
||||
|
@ -308,5 +288,44 @@
|
|||
"minutes": "Minuten",
|
||||
"minute": "Minute",
|
||||
"dlyDur": "Verzögerungsdauer",
|
||||
"delay": "Verzögerung"
|
||||
"delay": "Verzögern",
|
||||
"tmrRm": "Kurzzeitwecker entfernt",
|
||||
"notifSetg": "Benachrichtigungseinstellungen",
|
||||
"delPrst": "Du bist dabei, %s aus den Voreinstellungen zu löschen",
|
||||
"prsts": "Voreinstellungen",
|
||||
"ttv": "Zum Anzeigen tippen",
|
||||
"dismissAll": "Alle Kurzzeitwecker verwerfen",
|
||||
"dismiss": "Verwerfen",
|
||||
"texp": "%s Kurzzeitwecker abgelaufen",
|
||||
"wDBy": "%1$s wurde um %2$s verzögert",
|
||||
"prstTU": "Voreingestellte Zeit aktualisiert",
|
||||
"ccwt": "Koche selbstbewusst mit Kurzzeitweckern!",
|
||||
"gtD": "Zu Datum gehen",
|
||||
"random": "Zufällig",
|
||||
"oAP": "%1$s laufend, %2$s angehalten",
|
||||
"ystr": "Gestern",
|
||||
"tmrw": "Morgen",
|
||||
"tdy": "Heute",
|
||||
"cpy": "Kopie",
|
||||
"calVM": "Modus der Kalenderansicht",
|
||||
"d": "Tag",
|
||||
"wk": "Woche",
|
||||
"mnth": "Monat",
|
||||
"nvr": "Nie",
|
||||
"otaw": "Älter als eine Woche",
|
||||
"otam": "Älter als ein Monat",
|
||||
"otay": "Älter als ein Jahr",
|
||||
"admp": "Mahlzeitenpläne automatisch löschen",
|
||||
"plsCrt": "Verwende die Plus-Schaltfläche, um einen zu erstellen",
|
||||
"ehwmp": "Iss gesund mit Essensplänen!",
|
||||
"selMT": "Mahlzeitentyp auswählen",
|
||||
"rstBtn": "ZURÜCKSETZEN",
|
||||
"add": "Hinzufügen",
|
||||
"ksavr": "Bildschirm während der Rezeptanzeige eingeschaltet halten",
|
||||
"esgbInfo": "Deaktiviere diese Option, wenn du Probleme mit der Navigation hast",
|
||||
"esgb": "Randwischen zum Zurückgehen",
|
||||
"ksavrInfo": "Verhindert, dass sich der Bildschirm während der Anzeige eines Rezepts ausschaltet",
|
||||
"sectRm": "Abschnitt entfernt",
|
||||
"addSectBtn": "ABSCHNITT HINZUFÜGEN",
|
||||
"sect": "Abschnitt %s"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes is an open source, privacy-friendly digital cookbook that lets you create, manage and share your recipes",
|
||||
"apply": "APPLY",
|
||||
"appRst": "App restart required",
|
||||
"April": "April",
|
||||
"aStpBtn": "ADD STEP",
|
||||
"August": "August",
|
||||
"Barbecue": "Barbecue",
|
||||
"Beverages": "Beverages",
|
||||
"Black": "Black",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Dark",
|
||||
"db": "Database",
|
||||
"dBtn": "DELETE",
|
||||
"December": "December",
|
||||
"delRecInfo": "You are about to permanently delete the recipe %s",
|
||||
"delRecsInfo": "You are about to permanently delete %s",
|
||||
"Desserts": "Desserts",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Export in progress",
|
||||
"expSuc": "Export success",
|
||||
"favourites": "Favourites",
|
||||
"February": "February",
|
||||
"Filipino": "Filipino",
|
||||
"Filtered recipes": "Filtered recipes",
|
||||
"fl oz": "fl oz",
|
||||
"fltr": "Filter",
|
||||
"Fluid Ounce": "Fluid Ounce",
|
||||
"French": "French",
|
||||
"FRI": "FRI",
|
||||
"fsList": "Your favourite recipes are listed here",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -108,15 +103,12 @@
|
|||
"intf": "Interface",
|
||||
"invFile": "Invalid file",
|
||||
"Irish": "Irish",
|
||||
"it": "Item",
|
||||
"it": "Item %s",
|
||||
"Italian": "Italian",
|
||||
"Jamaican": "Jamaican",
|
||||
"January": "January",
|
||||
"Japanese": "Japanese",
|
||||
"Jewish": "Jewish",
|
||||
"joinTG": "Join the Telegram group",
|
||||
"July": "July",
|
||||
"June": "June",
|
||||
"kEdit": "KEEP EDITING",
|
||||
"Kenyan": "Kenyan",
|
||||
"kg": "kg",
|
||||
|
@ -136,8 +128,6 @@
|
|||
"lunch": "Lunch",
|
||||
"mAgo": "%s months ago",
|
||||
"Main dishes": "Main dishes",
|
||||
"March": "March",
|
||||
"May": "May",
|
||||
"Meat": "Meat",
|
||||
"medium": "medium",
|
||||
"Mexican": "Mexican",
|
||||
|
@ -148,7 +138,6 @@
|
|||
"minimal": "Minimal",
|
||||
"ml": "ml",
|
||||
"Moderate": "Moderate",
|
||||
"MON": "MON",
|
||||
"newCui": "New cuisine",
|
||||
"Newest first": "Newest first",
|
||||
"newRec": "New recipe",
|
||||
|
@ -163,10 +152,8 @@
|
|||
"noRecs": "No recipes match your search",
|
||||
"noRecsInL": "None of the recipes here matches your search",
|
||||
"nos": "Notes",
|
||||
"November": "November",
|
||||
"nwCat": "New category",
|
||||
"nwYiU": "New yield unit",
|
||||
"October": "October",
|
||||
"OK": "OK",
|
||||
"Oldest first": "Oldest first",
|
||||
"opts": "Options",
|
||||
|
@ -180,7 +167,7 @@
|
|||
"Piece": "Piece",
|
||||
"pinch": "pinch",
|
||||
"planner": "Meal Planner",
|
||||
"plsAdd": "Use the plus button to add one",
|
||||
"plsAdd": "Use the + button to add one",
|
||||
"Portuguese": "Portuguese",
|
||||
"Poultry": "Poultry",
|
||||
"Pound": "Pound",
|
||||
|
@ -224,12 +211,10 @@
|
|||
"rst": "RESTART",
|
||||
"Russian": "Russian",
|
||||
"Salads": "Salads",
|
||||
"SAT": "SAT",
|
||||
"Sauces": "Sauces",
|
||||
"Scottish": "Scottish",
|
||||
"Seafood": "Seafood",
|
||||
"selRec": "Select recipe",
|
||||
"September": "September",
|
||||
"ser": "Search",
|
||||
"Serving": "Serving",
|
||||
"SET": "SET",
|
||||
|
@ -249,9 +234,8 @@
|
|||
"sru": "Share recipe using...",
|
||||
"stars": "Star rating",
|
||||
"stick": "stick",
|
||||
"stp": "Step",
|
||||
"stp": "Step %s",
|
||||
"strAdd": "Start adding your recipes!",
|
||||
"SUN": "SUN",
|
||||
"sVw": "Shake to view random recipe",
|
||||
"sVwInfo": "Helps you choose what to cook when you can't decide",
|
||||
"Swedish": "Swedish",
|
||||
|
@ -262,7 +246,6 @@
|
|||
"Teaspoon": "Teaspoon",
|
||||
"Thai": "Thai",
|
||||
"Theme": "Theme",
|
||||
"THU": "THU",
|
||||
"title": "Title",
|
||||
"tLInfo": "Recipes you want to try later are listed here",
|
||||
"today": "today",
|
||||
|
@ -273,7 +256,6 @@
|
|||
"ts": "Tags",
|
||||
"tsInfo": "separate with spaces",
|
||||
"tsp": "tsp",
|
||||
"TUE": "TUE",
|
||||
"Turkish": "Turkish",
|
||||
"Undefined": "Undefined",
|
||||
"unit": "unit",
|
||||
|
@ -284,7 +266,6 @@
|
|||
"Vegetarian": "Vegetarian",
|
||||
"Vietnamese": "Vietnamese",
|
||||
"wAgo": "%s weeks ago",
|
||||
"WED": "WED",
|
||||
"yesterday": "yesterday",
|
||||
"yieldQ": "Yield quantity",
|
||||
"yieldU": "Yield unit",
|
||||
|
@ -298,7 +279,8 @@
|
|||
"delay": "Delay",
|
||||
"tmr": "Timer %s",
|
||||
"prstBtn": "PRESETS",
|
||||
"tmrPrsts": "Timer presets",
|
||||
"prsts": "Presets",
|
||||
"delPrst": "You are about to delete %s from the presets",
|
||||
"fwr": "for which recipe?",
|
||||
"aTPrst": "Added to presets",
|
||||
"tmrSnd": "Timer sound",
|
||||
|
@ -308,5 +290,42 @@
|
|||
"minutes": "minutes",
|
||||
"hour": "hour",
|
||||
"hours": "hours",
|
||||
"seconds": "seconds"
|
||||
"seconds": "seconds",
|
||||
"tmrRm": "Timer removed",
|
||||
"notifSetg": "Notification settings",
|
||||
"random": "Random",
|
||||
"gtD": "Go to date",
|
||||
"ccwt": "Cook confidently with timers!",
|
||||
"prstTU": "Preset time updated",
|
||||
"wDBy": "%1$s was delayed by %2$s",
|
||||
"texp": "%s timers expired",
|
||||
"dismiss": "Dismiss",
|
||||
"dismissAll": "Dismiss all timers",
|
||||
"ttv": "Tap to view",
|
||||
"oAP": "%1$s ongoing, %2$s paused",
|
||||
"calVM": "Calendar view mode",
|
||||
"mnth": "Month",
|
||||
"wk": "Week",
|
||||
"d": "Day",
|
||||
"cpy": "copy",
|
||||
"tdy": "Today",
|
||||
"tmrw": "Tomorrow",
|
||||
"ystr": "Yesterday",
|
||||
"selMT": "Select meal type",
|
||||
"ehwmp": "Eat healthy with meal plans!",
|
||||
"plsCrt": "Use the + button to create one",
|
||||
"admp": "Auto-delete meal plans",
|
||||
"otay": "Older than a year",
|
||||
"otam": "Older than a month",
|
||||
"otaw": "Older than a week",
|
||||
"nvr": "Never",
|
||||
"add": "Add",
|
||||
"rstBtn": "RESET",
|
||||
"ksavr": "Keep screen awake while viewing recipe",
|
||||
"ksavrInfo": "Prevents the screen from turning off while viewing a recipe",
|
||||
"esgb": "Edge swipe to go back",
|
||||
"esgbInfo": "Disable this option if you have any navigation issues",
|
||||
"sect": "Section %s",
|
||||
"addSectBtn": "ADD SECTION",
|
||||
"sectRm": "Section removed"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes is an open source, privacy-friendly digital cookbook that lets you create, manage and share your recipes",
|
||||
"apply": "APPLY",
|
||||
"appRst": "App restart required",
|
||||
"April": "April",
|
||||
"aStpBtn": "ADD STEP",
|
||||
"August": "August",
|
||||
"Barbecue": "Barbecue",
|
||||
"Beverages": "Beverages",
|
||||
"Black": "Black",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Dark",
|
||||
"db": "Database",
|
||||
"dBtn": "DELETE",
|
||||
"December": "December",
|
||||
"delRecInfo": "You are about to permanently delete the recipe %s",
|
||||
"delRecsInfo": "You are about to permanently delete %s",
|
||||
"Desserts": "Desserts",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Export in progress",
|
||||
"expSuc": "Export success",
|
||||
"favourites": "Favourites",
|
||||
"February": "February",
|
||||
"Filipino": "Filipino",
|
||||
"Filtered recipes": "Filtered recipes",
|
||||
"fl oz": "fl oz",
|
||||
"fltr": "Filter",
|
||||
"Fluid Ounce": "Fluid Ounce",
|
||||
"French": "French",
|
||||
"FRI": "FRI",
|
||||
"fsList": "Your favourite recipes are listed here",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -95,7 +90,7 @@
|
|||
"grocery": "Grocery List",
|
||||
"guide": "User guide",
|
||||
"Healthy": "Healthy",
|
||||
"hr": "hr",
|
||||
"hr": "h",
|
||||
"impBu": "Import data",
|
||||
"impFail": "Import failed",
|
||||
"impInfo": "Supports full backups exported by this app",
|
||||
|
@ -108,15 +103,12 @@
|
|||
"intf": "Interface",
|
||||
"invFile": "Invalid file",
|
||||
"Irish": "Irish",
|
||||
"it": "Item",
|
||||
"it": "Item %s",
|
||||
"Italian": "Italian",
|
||||
"Jamaican": "Jamaican",
|
||||
"January": "January",
|
||||
"Japanese": "Japanese",
|
||||
"Jewish": "Jewish",
|
||||
"joinTG": "Join the Telegram group",
|
||||
"July": "July",
|
||||
"June": "June",
|
||||
"kEdit": "KEEP EDITING",
|
||||
"Kenyan": "Kenyan",
|
||||
"kg": "kg",
|
||||
|
@ -136,8 +128,6 @@
|
|||
"lunch": "Lunch",
|
||||
"mAgo": "%s months ago",
|
||||
"Main dishes": "Main dishes",
|
||||
"March": "March",
|
||||
"May": "May",
|
||||
"Meat": "Meat",
|
||||
"medium": "medium",
|
||||
"Mexican": "Mexican",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "Minimal",
|
||||
"ml": "ml",
|
||||
"Moderate": "Moderate",
|
||||
"MON": "MON",
|
||||
"newCui": "New cuisine",
|
||||
"Newest first": "Newest first",
|
||||
"newRec": "New recipe",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "No recipes match your search",
|
||||
"noRecsInL": "None of the recipes here matches your search",
|
||||
"nos": "Notes",
|
||||
"November": "November",
|
||||
"nwCat": "New category",
|
||||
"nwYiU": "New yield unit",
|
||||
"October": "October",
|
||||
"OK": "OK",
|
||||
"Oldest first": "Oldest first",
|
||||
"opts": "Options",
|
||||
|
@ -179,7 +166,7 @@
|
|||
"Piece": "Piece",
|
||||
"pinch": "pinch",
|
||||
"planner": "Meal Planner",
|
||||
"plsAdd": "Use the plus button to add one",
|
||||
"plsAdd": "Use the + button to add one",
|
||||
"Portuguese": "Portuguese",
|
||||
"Poultry": "Poultry",
|
||||
"Pound": "Pound",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "RESTART",
|
||||
"Russian": "Russian",
|
||||
"Salads": "Salads",
|
||||
"SAT": "SAT",
|
||||
"Sauces": "Sauces",
|
||||
"Scottish": "Scottish",
|
||||
"Seafood": "Seafood",
|
||||
"selRec": "Select recipe",
|
||||
"September": "September",
|
||||
"ser": "Search",
|
||||
"Serving": "Serving",
|
||||
"SET": "SET",
|
||||
|
@ -248,9 +233,8 @@
|
|||
"sru": "Share recipe using...",
|
||||
"stars": "Star rating",
|
||||
"stick": "stick",
|
||||
"stp": "Step",
|
||||
"stp": "Step %s",
|
||||
"strAdd": "Start adding your recipes!",
|
||||
"SUN": "SUN",
|
||||
"sVw": "Shake to view random recipe",
|
||||
"sVwInfo": "Helps you choose what to cook when you can't decide",
|
||||
"Swedish": "Swedish",
|
||||
|
@ -261,7 +245,6 @@
|
|||
"Teaspoon": "Teaspoon",
|
||||
"Thai": "Thai",
|
||||
"Theme": "Theme",
|
||||
"THU": "THU",
|
||||
"title": "Title",
|
||||
"tLInfo": "Recipes you want to try later are listed here",
|
||||
"today": "today",
|
||||
|
@ -272,7 +255,6 @@
|
|||
"ts": "Tags",
|
||||
"tsInfo": "separate with spaces",
|
||||
"tsp": "tsp",
|
||||
"TUE": "TUE",
|
||||
"Turkish": "Turkish",
|
||||
"Undefined": "Undefined",
|
||||
"unit": "unit",
|
||||
|
@ -283,7 +265,6 @@
|
|||
"Vegetarian": "Vegetarian",
|
||||
"Vietnamese": "Vietnamese",
|
||||
"wAgo": "%s weeks ago",
|
||||
"WED": "WED",
|
||||
"yesterday": "yesterday",
|
||||
"yieldQ": "Yield quantity",
|
||||
"yieldU": "Yield unit",
|
||||
|
@ -294,7 +275,6 @@
|
|||
"tmrSnd": "Timer sound",
|
||||
"aTPrst": "Added to presets",
|
||||
"fwr": "for which recipe?",
|
||||
"tmrPrsts": "Timer presets",
|
||||
"prstBtn": "PRESETS",
|
||||
"tmr": "Timer %s",
|
||||
"stop": "Stop",
|
||||
|
@ -308,5 +288,44 @@
|
|||
"minutes": "minutes",
|
||||
"minute": "minute",
|
||||
"dlyDur": "Delay duration",
|
||||
"delay": "Delay"
|
||||
"delay": "Delay",
|
||||
"notifSetg": "Notification settings",
|
||||
"tmrRm": "Timer removed",
|
||||
"delPrst": "You are about to delete %s from the presets",
|
||||
"prsts": "Presets",
|
||||
"ttv": "Tap to view",
|
||||
"dismissAll": "Dismiss all timers",
|
||||
"dismiss": "Dismiss",
|
||||
"texp": "%s timers expired",
|
||||
"wDBy": "%1$s was delayed by %2$s",
|
||||
"prstTU": "Preset time updated",
|
||||
"ccwt": "Cook confidently with timers!",
|
||||
"gtD": "Go to date",
|
||||
"random": "Random",
|
||||
"ystr": "Yesterday",
|
||||
"tmrw": "Tomorrow",
|
||||
"tdy": "Today",
|
||||
"cpy": "copy",
|
||||
"calVM": "Calendar view mode",
|
||||
"oAP": "%1$s ongoing, %2$s paused",
|
||||
"d": "Day",
|
||||
"wk": "Week",
|
||||
"mnth": "Month",
|
||||
"nvr": "Never",
|
||||
"otaw": "Older than a week",
|
||||
"otam": "Older than a month",
|
||||
"otay": "Older than a year",
|
||||
"admp": "Auto-delete meal plans",
|
||||
"plsCrt": "Use the + button to create one",
|
||||
"ehwmp": "Eat healthy with meal plans!",
|
||||
"selMT": "Select meal type",
|
||||
"rstBtn": "RESET",
|
||||
"add": "Add",
|
||||
"esgbInfo": "Disable this option if you have any navigation issues",
|
||||
"esgb": "Edge swipe to go back",
|
||||
"ksavrInfo": "Prevents the screen from turning off while viewing a recipe",
|
||||
"ksavr": "Keep screen awake while viewing recipe",
|
||||
"sectRm": "Section removed",
|
||||
"addSectBtn": "ADD SECTION",
|
||||
"sect": "Section %s"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes is an open source, privacy-friendly digital cookbook that lets you create, manage and share your recipes",
|
||||
"apply": "APPLY",
|
||||
"appRst": "App restart required",
|
||||
"April": "April",
|
||||
"aStpBtn": "ADD STEP",
|
||||
"August": "August",
|
||||
"Barbecue": "Barbecue",
|
||||
"Beverages": "Beverages",
|
||||
"Black": "Black",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Dark",
|
||||
"db": "Database",
|
||||
"dBtn": "DELETE",
|
||||
"December": "December",
|
||||
"delRecInfo": "You are about to permanently delete the recipe %s",
|
||||
"delRecsInfo": "You are about to permanently delete %s",
|
||||
"Desserts": "Desserts",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Export in progress",
|
||||
"expSuc": "Export success",
|
||||
"favourites": "Favorites",
|
||||
"February": "February",
|
||||
"Filipino": "Filipino",
|
||||
"Filtered recipes": "Filtered recipes",
|
||||
"fl oz": "fl oz",
|
||||
"fltr": "Filter",
|
||||
"Fluid Ounce": "Fluid Ounce",
|
||||
"French": "French",
|
||||
"FRI": "FRI",
|
||||
"fsList": "Your favorite recipes are listed here",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -95,7 +90,7 @@
|
|||
"grocery": "Grocery List",
|
||||
"guide": "User guide",
|
||||
"Healthy": "Healthy",
|
||||
"hr": "hr",
|
||||
"hr": "h",
|
||||
"impBu": "Import data",
|
||||
"impFail": "Import failed",
|
||||
"impInfo": "Supports full backups exported by this app",
|
||||
|
@ -108,15 +103,12 @@
|
|||
"intf": "Interface",
|
||||
"invFile": "Invalid file",
|
||||
"Irish": "Irish",
|
||||
"it": "Item",
|
||||
"it": "Item %s",
|
||||
"Italian": "Italian",
|
||||
"Jamaican": "Jamaican",
|
||||
"January": "January",
|
||||
"Japanese": "Japanese",
|
||||
"Jewish": "Jewish",
|
||||
"joinTG": "Join the Telegram group",
|
||||
"July": "July",
|
||||
"June": "June",
|
||||
"kEdit": "KEEP EDITING",
|
||||
"Kenyan": "Kenyan",
|
||||
"kg": "kg",
|
||||
|
@ -136,8 +128,6 @@
|
|||
"lunch": "Lunch",
|
||||
"mAgo": "%s months ago",
|
||||
"Main dishes": "Main dishes",
|
||||
"March": "March",
|
||||
"May": "May",
|
||||
"Meat": "Meat",
|
||||
"medium": "medium",
|
||||
"Mexican": "Mexican",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "Minimal",
|
||||
"ml": "ml",
|
||||
"Moderate": "Moderate",
|
||||
"MON": "MON",
|
||||
"newCui": "New cuisine",
|
||||
"Newest first": "Newest first",
|
||||
"newRec": "New recipe",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "No recipes match your search",
|
||||
"noRecsInL": "None of the recipes here matches your search",
|
||||
"nos": "Notes",
|
||||
"November": "November",
|
||||
"nwCat": "New category",
|
||||
"nwYiU": "New yield unit",
|
||||
"October": "October",
|
||||
"OK": "OK",
|
||||
"Oldest first": "Oldest first",
|
||||
"opts": "Options",
|
||||
|
@ -179,7 +166,7 @@
|
|||
"Piece": "Piece",
|
||||
"pinch": "pinch",
|
||||
"planner": "Meal Planner",
|
||||
"plsAdd": "Use the plus button to add one",
|
||||
"plsAdd": "Use the + button to add one",
|
||||
"Portuguese": "Portuguese",
|
||||
"Poultry": "Poultry",
|
||||
"Pound": "Pound",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "RESTART",
|
||||
"Russian": "Russian",
|
||||
"Salads": "Salads",
|
||||
"SAT": "SAT",
|
||||
"Sauces": "Sauces",
|
||||
"Scottish": "Scottish",
|
||||
"Seafood": "Seafood",
|
||||
"selRec": "Select recipe",
|
||||
"September": "September",
|
||||
"ser": "Search",
|
||||
"Serving": "Serving",
|
||||
"SET": "SET",
|
||||
|
@ -248,9 +233,8 @@
|
|||
"sru": "Share recipe using...",
|
||||
"stars": "Star rating",
|
||||
"stick": "stick",
|
||||
"stp": "Step",
|
||||
"stp": "Step %s",
|
||||
"strAdd": "Start adding your recipes!",
|
||||
"SUN": "SUN",
|
||||
"sVw": "Shake to view random recipe",
|
||||
"sVwInfo": "Helps you choose what to cook when you can't decide",
|
||||
"Swedish": "Swedish",
|
||||
|
@ -261,7 +245,6 @@
|
|||
"Teaspoon": "Teaspoon",
|
||||
"Thai": "Thai",
|
||||
"Theme": "Theme",
|
||||
"THU": "THU",
|
||||
"title": "Title",
|
||||
"tLInfo": "Recipes you want to try later are listed here",
|
||||
"today": "today",
|
||||
|
@ -272,7 +255,6 @@
|
|||
"ts": "Tags",
|
||||
"tsInfo": "separate with spaces",
|
||||
"tsp": "tsp",
|
||||
"TUE": "TUE",
|
||||
"Turkish": "Turkish",
|
||||
"Undefined": "Undefined",
|
||||
"unit": "unit",
|
||||
|
@ -283,7 +265,6 @@
|
|||
"Vegetarian": "Vegetarian",
|
||||
"Vietnamese": "Vietnamese",
|
||||
"wAgo": "%s weeks ago",
|
||||
"WED": "WED",
|
||||
"yesterday": "yesterday",
|
||||
"yieldQ": "Yield quantity",
|
||||
"yieldU": "Yield unit",
|
||||
|
@ -294,7 +275,6 @@
|
|||
"tmrSnd": "Timer sound",
|
||||
"aTPrst": "Added to presets",
|
||||
"fwr": "for which recipe?",
|
||||
"tmrPrsts": "Timer presets",
|
||||
"prstBtn": "PRESETS",
|
||||
"tmr": "Timer %s",
|
||||
"stop": "Stop",
|
||||
|
@ -308,5 +288,44 @@
|
|||
"minutes": "minutes",
|
||||
"minute": "minute",
|
||||
"dlyDur": "Delay duration",
|
||||
"delay": "Delay"
|
||||
"delay": "Delay",
|
||||
"notifSetg": "Notification settings",
|
||||
"tmrRm": "Timer removed",
|
||||
"delPrst": "You are about to delete %s from the presets",
|
||||
"prsts": "Presets",
|
||||
"ttv": "Tap to view",
|
||||
"dismissAll": "Dismiss all timers",
|
||||
"dismiss": "Dismiss",
|
||||
"texp": "%s timers expired",
|
||||
"wDBy": "%1$s was delayed by %2$s",
|
||||
"prstTU": "Preset time updated",
|
||||
"ccwt": "Cook confidently with timers!",
|
||||
"gtD": "Go to date",
|
||||
"random": "Random",
|
||||
"ystr": "Yesterday",
|
||||
"tmrw": "Tomorrow",
|
||||
"tdy": "Today",
|
||||
"cpy": "copy",
|
||||
"calVM": "Calendar view mode",
|
||||
"oAP": "%1$s ongoing, %2$s paused",
|
||||
"d": "Day",
|
||||
"wk": "Week",
|
||||
"mnth": "Month",
|
||||
"nvr": "Never",
|
||||
"otaw": "Older than a week",
|
||||
"otam": "Older than a month",
|
||||
"otay": "Older than a year",
|
||||
"admp": "Auto-delete meal plans",
|
||||
"plsCrt": "Use the + button to create one",
|
||||
"ehwmp": "Eat healthy with meal plans!",
|
||||
"selMT": "Select meal type",
|
||||
"rstBtn": "RESET",
|
||||
"add": "Add",
|
||||
"esgbInfo": "Disable this option if you have any navigation issues",
|
||||
"esgb": "Edge swipe to go back",
|
||||
"ksavrInfo": "Prevents the screen from turning off while viewing a recipe",
|
||||
"ksavr": "Keep screen awake while viewing recipe",
|
||||
"sectRm": "Section removed",
|
||||
"addSectBtn": "ADD SECTION",
|
||||
"sect": "Section %s"
|
||||
}
|
||||
|
|
|
@ -1,3 +1,20 @@
|
|||
{
|
||||
"sec": "s"
|
||||
"sec": "s",
|
||||
"aStpBtn": "AGREGAR PASO",
|
||||
"appRst": "Se requiere reiniciar la app",
|
||||
"apply": "APLICAR",
|
||||
"appInfo": "EnRecipes es un libro de cocina digital, privado y de código abierto, que te permite crear, administrar y compartir tus recetas",
|
||||
"Appetizers": "Aperitivos",
|
||||
"appCrd": "Compartido vía EnRecipes. Conseguilo en F-Droid, IzzyOnDroid o en la Play Store.",
|
||||
"aNoBtn": "AGREGAR NOTA",
|
||||
"aNBtn": "AGREGAR NUEVA",
|
||||
"American": "Americana",
|
||||
"allCats": "Todas las categorías",
|
||||
"aIngBtn": "AGREGAR INGREDIENTE",
|
||||
"aFBu": "Agregá recetas para hacer un backup",
|
||||
"addCmbBtn": "AGREGAR COMBINACIÓN",
|
||||
"aD": "¡Todo listo!",
|
||||
"aBtn": "AGREGAR",
|
||||
"About": "Acerca de",
|
||||
"aap": "Adjuntá una foto"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes es un libro de cocinas de código abierto, amigo de tu privacidad, que te deja crear, manejar y compartir tus recetas",
|
||||
"apply": "APLICAR",
|
||||
"appRst": "Se requiere reiniciar la aplicación",
|
||||
"April": "Abril",
|
||||
"aStpBtn": "AÑADIR PASO",
|
||||
"August": "Agosto",
|
||||
"Barbecue": "Barbacoa",
|
||||
"Beverages": "Bebidas",
|
||||
"Black": "Negro",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Oscuro",
|
||||
"db": "Base de datos",
|
||||
"dBtn": "ELIMINAR",
|
||||
"December": "Diciembre",
|
||||
"delRecInfo": "Estás a punto de eliminar definitivamente la receta %s",
|
||||
"delRecsInfo": "Estás a punto de eliminar permanentemente %s",
|
||||
"Desserts": "Postres",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Exportación en curso",
|
||||
"expSuc": "Exportación satisfactoria",
|
||||
"favourites": "Favoritos",
|
||||
"February": "Febrero",
|
||||
"Filipino": "Filipina",
|
||||
"Filtered recipes": "Recetas filtradas",
|
||||
"fl oz": "oz liq",
|
||||
"fltr": "Filtro",
|
||||
"Fluid Ounce": "Onza líquida",
|
||||
"French": "Francesa",
|
||||
"FRI": "VIE",
|
||||
"fsList": "Aquí se enumeran tus recetas favoritas",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -111,12 +106,9 @@
|
|||
"it": "Artículo",
|
||||
"Italian": "Italiano",
|
||||
"Jamaican": "Jamaiquino",
|
||||
"January": "Enero",
|
||||
"Japanese": "Japonés",
|
||||
"Jewish": "Judía",
|
||||
"joinTG": "Únete al grupo de Telegram",
|
||||
"July": "Julio",
|
||||
"June": "Junio",
|
||||
"kEdit": "SEGUIR EDITANDO",
|
||||
"Kenyan": "Keniata",
|
||||
"kg": "kg",
|
||||
|
@ -136,8 +128,6 @@
|
|||
"lunch": "Almuerzo",
|
||||
"mAgo": "hace %s meses",
|
||||
"Main dishes": "Platos principales",
|
||||
"March": "Marzo",
|
||||
"May": "Mayo",
|
||||
"Meat": "Carnes",
|
||||
"medium": "mediano",
|
||||
"Mexican": "Mejicana",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "Mínimo",
|
||||
"ml": "ml",
|
||||
"Moderate": "Moderada",
|
||||
"MON": "LUN",
|
||||
"newCui": "Nueva cocina",
|
||||
"Newest first": "Más nuevas primero",
|
||||
"newRec": "Nueva receta",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "No hay recetas que coincidan con tu búsqueda",
|
||||
"noRecsInL": "Ninguna de las recetas aquí coincide con su búsqueda",
|
||||
"nos": "Notas",
|
||||
"November": "Noviembre",
|
||||
"nwCat": "Nueva categoría",
|
||||
"nwYiU": "Nueva unidad de medida",
|
||||
"October": "Octubre",
|
||||
"OK": "OK",
|
||||
"Oldest first": "Más antiguas primero",
|
||||
"opts": "Opciones",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "REINICIAR",
|
||||
"Russian": "Rusa",
|
||||
"Salads": "Ensaladas",
|
||||
"SAT": "SAB",
|
||||
"Sauces": "Salsas",
|
||||
"Scottish": "Escocesa",
|
||||
"Seafood": "Comida del mar",
|
||||
"selRec": "Selecciona una receta",
|
||||
"September": "Septiembre",
|
||||
"ser": "Buscar",
|
||||
"Serving": "Servicio",
|
||||
"SET": "ESTABLECER",
|
||||
|
@ -250,7 +235,6 @@
|
|||
"stick": "rama",
|
||||
"stp": "Paso",
|
||||
"strAdd": "¡Empieza a añadir tus recetas!",
|
||||
"SUN": "DOM",
|
||||
"sVw": "Agita para ver una receta aleatoria",
|
||||
"sVwInfo": "Te ayuda a elegir que cocinar cuando no podés decidirte",
|
||||
"Swedish": "Sueca",
|
||||
|
@ -261,7 +245,6 @@
|
|||
"Teaspoon": "Cucharadita",
|
||||
"Thai": "Thai",
|
||||
"Theme": "Tema",
|
||||
"THU": "JUE",
|
||||
"title": "Título",
|
||||
"tLInfo": "Las recetas que el usuario quería probar más tarde están listadas aquí",
|
||||
"today": "hoy",
|
||||
|
@ -272,7 +255,6 @@
|
|||
"ts": "Etiquetas",
|
||||
"tsInfo": "separa con espacios",
|
||||
"tsp": "cdt",
|
||||
"TUE": "MAR",
|
||||
"Turkish": "Turca",
|
||||
"Undefined": "Indefinido",
|
||||
"unit": "unidad",
|
||||
|
@ -283,7 +265,6 @@
|
|||
"Vegetarian": "Vegetariano",
|
||||
"Vietnamese": "Vietnamita",
|
||||
"wAgo": "hace %s semanas",
|
||||
"WED": "MIE",
|
||||
"yesterday": "ayer",
|
||||
"yieldQ": "Cantidad de rendimiento",
|
||||
"yieldU": "Unidad de medida",
|
||||
|
@ -301,12 +282,41 @@
|
|||
"minutes": "minutos",
|
||||
"minute": "minuto",
|
||||
"stop": "Detener",
|
||||
"delay": "Retraso",
|
||||
"delay": "Retrasar",
|
||||
"prstBtn": "PRECIPIOS",
|
||||
"tmrPrsts": "Preselecciones del temporizador",
|
||||
"fwr": "para qué receta?",
|
||||
"aTPrst": "Añadido a los preajustes",
|
||||
"tmrSnd": "Sonido del temporizador",
|
||||
"tmrvbrt": "Vibrador del temporizador",
|
||||
"dlyDur": "Duración del retraso"
|
||||
"dlyDur": "Duración del retraso",
|
||||
"notifSetg": "Ajustes de notificación",
|
||||
"tmrRm": "Temporizador eliminado",
|
||||
"delPrst": "Está a punto de eliminar %s de los preajustes",
|
||||
"prsts": "Preselecciones",
|
||||
"cpy": "copia",
|
||||
"d": "Día",
|
||||
"wk": "Semana",
|
||||
"mnth": "Mes",
|
||||
"ystr": "Ayer",
|
||||
"tmrw": "Mañana",
|
||||
"tdy": "Hoy",
|
||||
"calVM": "Modo de vista del calendario",
|
||||
"oAP": "%1$s en curso, %2$s en pausa",
|
||||
"ttv": "Toca para ver",
|
||||
"gtD": "Ir a la fecha",
|
||||
"random": "Aleatorio",
|
||||
"ehwmp": "¡Coma sano con los planes de comidas!",
|
||||
"selMT": "Seleccione el tipo de comida",
|
||||
"dismissAll": "Descartar todos los temporizadores",
|
||||
"dismiss": "Descartar",
|
||||
"texp": "%s temporizadores expirados",
|
||||
"prstTU": "Tiempo preestablecido actualizado",
|
||||
"rstBtn": "RESTABLECER",
|
||||
"add": "Añadir",
|
||||
"nvr": "Nunca",
|
||||
"otaw": "Más de una semana",
|
||||
"otam": "Más de un mes",
|
||||
"otay": "Más de un año",
|
||||
"plsCrt": "Usa el botón + para crear una",
|
||||
"ccwt": "¡Cocine con confianza con los temporizadores!"
|
||||
}
|
||||
|
|
303
app/i18n/fi.json
|
@ -1,303 +0,0 @@
|
|||
{
|
||||
"aap": "Liitä valokuva",
|
||||
"About": "Tietoja",
|
||||
"aBtn": "LISÄÄ",
|
||||
"aD": "Valmista!",
|
||||
"addCmbBtn": "LISÄÄ YHDISTELMÄ",
|
||||
"aFBu": "Lisää resepti varmuuskopioinnin suorittamiseen",
|
||||
"aIngBtn": "LISÄÄ AINESOSA",
|
||||
"allCats": "Kaikki luokat",
|
||||
"allCuis": "Kaikki keittiöt",
|
||||
"allTs": "Kaikki tunnisteet",
|
||||
"American": "amerikkalainen",
|
||||
"aNBtn": "LISÄÄ UUSI",
|
||||
"aNoBtn": "LISÄÄ HUOMAUTUS",
|
||||
"app.name": "",
|
||||
"appCrd": "Jaettu EnRecipesin kautta. Lataa se F-Droidista, IzzyOnDroidista tai Play Storesta.",
|
||||
"Appetizers": "Alkupalat",
|
||||
"appInfo": "EnRecipes on avoimen lähdekoodin, yksityisyyden suojaa kunnioittava digitaalinen keittokirja, jonka avulla voit luoda, hallita ja jakaa reseptejäsi",
|
||||
"apply": "KÄYTÄ",
|
||||
"appRst": "Sovelluksen uudelleenkäynnistys vaaditaan",
|
||||
"April": "huhtikuu",
|
||||
"aStpBtn": "",
|
||||
"August": "elokuu",
|
||||
"Barbecue": "Grilli",
|
||||
"Beverages": "Juomat",
|
||||
"Black": "Musta",
|
||||
"Brazilian": "brasilialainen",
|
||||
"Breads": "Leivät",
|
||||
"breakfast": "Aamiainen",
|
||||
"British": "brittiläinen",
|
||||
"buEmp": "Varmuuskopiotiedosto on tyhjä",
|
||||
"buFol": "Varmuuskopioiden hakemisto",
|
||||
"buInc": "Virheellinen tai vioittunut varmuuskopiotiedosto",
|
||||
"buInfo": "Luo ZIP-tiedoston, joka sisältää kaikki tiedot, jotka voidaan tuoda takaisin",
|
||||
"buMod": "Varmuuskopiotiedostoa muutettiin muualla",
|
||||
"cat": "Luokka",
|
||||
"cBtn": "PERUUTA",
|
||||
"Challenging": "Haastava",
|
||||
"Chinese": "kiinalainen",
|
||||
"clove": "kynsi",
|
||||
"cm": "cm",
|
||||
"cmbs": "Yhdistelmät",
|
||||
"conBtn": "JATKA",
|
||||
"conf": "Vahvista",
|
||||
"cookT": "Kypsennysaika",
|
||||
"cPic": "Rajaa kuva",
|
||||
"Created": "Luotu",
|
||||
"cui": "Keittiö",
|
||||
"cup": "cup",
|
||||
"Cup": "Kuppi",
|
||||
"dAgo": "%s päivää sitten",
|
||||
"Danish": "tanskalainen",
|
||||
"Dark": "Tumma",
|
||||
"db": "Tietokanta",
|
||||
"dBtn": "POISTA",
|
||||
"December": "joulukuu",
|
||||
"delRecInfo": "Olet poistamassa reseptiä %s pysyvästi",
|
||||
"delRecsInfo": "Olet poistamassa %s pysyvästi",
|
||||
"Desserts": "Jälkiruoat",
|
||||
"detailed": "Yksityiskohtainen",
|
||||
"Difficulty level": "Vaikeustaso",
|
||||
"dinner": "Illallinen",
|
||||
"disBtn": "HYLKÄÄ",
|
||||
"disc": "Tässä reseptissä on tallentamattomia muutoksia. Mitä haluaisit tehdä?",
|
||||
"donate": "Lahjoita",
|
||||
"dozen": "tusina",
|
||||
"drop": "",
|
||||
"dsp": "",
|
||||
"Easy": "Helppo",
|
||||
"editRec": "Muokkaa resepti",
|
||||
"Egyptian": "egyptiläinen",
|
||||
"English": "englantilainen",
|
||||
"EnRecipes": "",
|
||||
"expBu": "Vie koko varmuuskopio",
|
||||
"expip": "Vienti käynnissä",
|
||||
"expSuc": "",
|
||||
"favourites": "",
|
||||
"February": "helmikuu",
|
||||
"Filipino": "",
|
||||
"Filtered recipes": "",
|
||||
"fl oz": "",
|
||||
"fltr": "",
|
||||
"Fluid Ounce": "",
|
||||
"French": "",
|
||||
"FRI": "",
|
||||
"fsList": "",
|
||||
"g": "",
|
||||
"gal": "",
|
||||
"Gallon": "",
|
||||
"German": "",
|
||||
"gh": "",
|
||||
"Gram": "",
|
||||
"Greek": "",
|
||||
"grid": "",
|
||||
"grocery": "",
|
||||
"guide": "",
|
||||
"Healthy": "",
|
||||
"hr": "",
|
||||
"impBu": "",
|
||||
"impFail": "",
|
||||
"impInfo": "",
|
||||
"impip": "",
|
||||
"impSuc": "",
|
||||
"in": "",
|
||||
"Indian": "",
|
||||
"ings": "",
|
||||
"inss": "",
|
||||
"intf": "",
|
||||
"invFile": "",
|
||||
"Irish": "",
|
||||
"it": "",
|
||||
"Italian": "",
|
||||
"Jamaican": "",
|
||||
"January": "",
|
||||
"Japanese": "",
|
||||
"Jewish": "",
|
||||
"joinTG": "",
|
||||
"July": "",
|
||||
"June": "",
|
||||
"kEdit": "",
|
||||
"Kenyan": "",
|
||||
"kg": "",
|
||||
"Kilogram": "",
|
||||
"Korean": "",
|
||||
"l": "",
|
||||
"lang": "",
|
||||
"large": "",
|
||||
"Last updated": "",
|
||||
"lb": "",
|
||||
"leaf": "",
|
||||
"Light": "",
|
||||
"listVM": "",
|
||||
"Litre": "",
|
||||
"Loaf": "",
|
||||
"ltAgo": "",
|
||||
"lunch": "",
|
||||
"mAgo": "",
|
||||
"Main dishes": "",
|
||||
"March": "",
|
||||
"May": "",
|
||||
"Meat": "",
|
||||
"medium": "",
|
||||
"Mexican": "",
|
||||
"mg": "",
|
||||
"Millilitre": "",
|
||||
"min": "",
|
||||
"minimal": "",
|
||||
"ml": "",
|
||||
"Moderate": "",
|
||||
"MON": "",
|
||||
"newCui": "",
|
||||
"Newest first": "",
|
||||
"newRec": "",
|
||||
"newUnit": "",
|
||||
"Nigerian": "",
|
||||
"nLangInfo": "",
|
||||
"nNBtn": "",
|
||||
"no": "",
|
||||
"noAccSensor": "",
|
||||
"noFavs": "",
|
||||
"Noodles": "",
|
||||
"noRecs": "Hakua vastaavia reseptejä ei ole",
|
||||
"noRecsInL": "",
|
||||
"nos": "",
|
||||
"November": "marraskuu",
|
||||
"nwCat": "Uusi luokka",
|
||||
"nwYiU": "",
|
||||
"October": "lokakuu",
|
||||
"OK": "OK",
|
||||
"Oldest first": "",
|
||||
"opts": "Valinnat",
|
||||
"Ounce": "",
|
||||
"oz": "",
|
||||
"Pasta": "",
|
||||
"Patty": "",
|
||||
"photogrid": "",
|
||||
"pht": "Reseptivalokuva",
|
||||
"piece": "pala",
|
||||
"Piece": "Pala",
|
||||
"pinch": "",
|
||||
"planner": "Ateriasuunnittelija",
|
||||
"plsAdd": "Lisää resepti pluspainikkeella",
|
||||
"Portuguese": "portugalilainen",
|
||||
"Poultry": "",
|
||||
"Pound": "",
|
||||
"prepT": "Valmisteluaika",
|
||||
"priv": "Tietosuojakäytäntö",
|
||||
"pt": "",
|
||||
"qt": "",
|
||||
"Quickest first": "",
|
||||
"Rating": "",
|
||||
"rBtn": "POISTA",
|
||||
"rec": "Resepti",
|
||||
"recE": "On jo olemassa:",
|
||||
"recF": "löydettyä reseptiä",
|
||||
"recI": "",
|
||||
"recListEmp": "",
|
||||
"recPic": "Reseptivalokuva",
|
||||
"recRm": "Resepti poistettu",
|
||||
"recs": "reseptiä",
|
||||
"recTitle": "Minun terveellinen reseptini",
|
||||
"recU": "Päivitetty:",
|
||||
"req": "",
|
||||
"resNF": "",
|
||||
"rest": "Nollaa",
|
||||
"restCatL": "",
|
||||
"restCuiL": "",
|
||||
"restDone": "",
|
||||
"restInfo": "",
|
||||
"restUL": "",
|
||||
"restYUL": "",
|
||||
"Rice": "Riisi",
|
||||
"rmCatInfo": "Olet poistamassa %s luokkaluettelosta",
|
||||
"rmCmb": "Yhdistelmä poistettu",
|
||||
"rmCuiInfo": "",
|
||||
"rmIng": "Ainesosa poistettu",
|
||||
"rmIns": "Ohje poistettu",
|
||||
"rmN": "Huomautus poistettu",
|
||||
"rmUInfo": "",
|
||||
"rmYUInfo": "",
|
||||
"Roll": "",
|
||||
"rp": "Poista valokuva",
|
||||
"rst": "UUDELLEENKÄYNNISTÄ",
|
||||
"Russian": "venäläinen",
|
||||
"Salads": "Salaatit",
|
||||
"SAT": "la",
|
||||
"Sauces": "Kastikkeet",
|
||||
"Scottish": "skotlantilainen",
|
||||
"Seafood": "",
|
||||
"selRec": "",
|
||||
"September": "",
|
||||
"ser": "Etsi",
|
||||
"Serving": "",
|
||||
"SET": "ASETA",
|
||||
"Settings": "Asetukset",
|
||||
"shr": "Jaa",
|
||||
"Side dishes": "",
|
||||
"simple": "",
|
||||
"Slowest first": "",
|
||||
"sltd": "",
|
||||
"small": "",
|
||||
"snacks": "",
|
||||
"Soups": "Keitot",
|
||||
"Spanish": "espanjalainen",
|
||||
"Sri Lankan": "srilankalainen",
|
||||
"srpu": "Jaa reseptikuva käyttämällä…",
|
||||
"srt": "Järjestä",
|
||||
"sru": "Jaa resepti käyttämällä…",
|
||||
"stars": "",
|
||||
"stick": "",
|
||||
"stp": "",
|
||||
"strAdd": "",
|
||||
"SUN": "su",
|
||||
"sVw": "Ravista nähdäksesi satunnainen resepti",
|
||||
"sVwInfo": "Auttaa sinua valitsemaan, mitä valmistaa, kun et osaa päättää.",
|
||||
"Swedish": "ruotsalainen",
|
||||
"swm": "Aloita viikko maanantaina",
|
||||
"sysDef": "Järjestelmän oletus",
|
||||
"Tablespoon": "",
|
||||
"tbsp": "",
|
||||
"Teaspoon": "",
|
||||
"Thai": "thaimaalainen",
|
||||
"Theme": "Teema",
|
||||
"THU": "to",
|
||||
"title": "Otsikko",
|
||||
"tLInfo": "Reseptit, joita haluat kokeilla myöhemmin, on lueteltu täällä",
|
||||
"today": "tänään",
|
||||
"triedInfo": "Kokeilit tätä reseptiä %s",
|
||||
"trnsl": "Käännä",
|
||||
"trylater": "",
|
||||
"trySer": "ETSI KAIKISTA RESEPTEISTÄ?",
|
||||
"ts": "Tunnisteet",
|
||||
"tsInfo": "",
|
||||
"tsp": "",
|
||||
"TUE": "ti",
|
||||
"Turkish": "",
|
||||
"Undefined": "Määrittelemätön",
|
||||
"unit": "",
|
||||
"Unit": "",
|
||||
"unsaved": "",
|
||||
"untRec": "",
|
||||
"Vegan": "Vegaani",
|
||||
"Vegetarian": "Kasvissyöjä",
|
||||
"Vietnamese": "vietnamilainen",
|
||||
"wAgo": "%s viikkoa sitten",
|
||||
"WED": "ke",
|
||||
"yesterday": "eilen",
|
||||
"yieldQ": "",
|
||||
"yieldU": "",
|
||||
"yld": "",
|
||||
"buto": "",
|
||||
"sysDefB": "Järjestelmän oletusarvo + Musta",
|
||||
"tmr": "Ajastin %s",
|
||||
"stop": "Pysäytä",
|
||||
"ntmr": "Uusi ajastin",
|
||||
"timer": "Keittoajastin",
|
||||
"tmrSnd": "Ajastinääni",
|
||||
"aTPrst": "Lisätty esiasetuksiin",
|
||||
"fwr": "mitä reseptiä varten?",
|
||||
"tmrPrsts": "Ajastimen esiasetukset",
|
||||
"prstBtn": "ESIASETUKSET",
|
||||
"sec": "s"
|
||||
}
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes est un livre de cuisine numérique à code source ouvert et respectueux de la vie privée qui vous permet de créer, gérer et partager vos recettes",
|
||||
"apply": "APPLIQUER",
|
||||
"appRst": "Redémarrage de l’appli nécessaire",
|
||||
"April": "avril",
|
||||
"aStpBtn": "AJOUTER UNE ÉTAPE",
|
||||
"August": "aout",
|
||||
"Barbecue": "Barbecue",
|
||||
"Beverages": "Boissons",
|
||||
"Black": "Noir",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Sombre",
|
||||
"db": "Base de données",
|
||||
"dBtn": "SUPPRIMER",
|
||||
"December": "décembre",
|
||||
"delRecInfo": "Vous êtes sur le point de supprimer définitivement la recette %s",
|
||||
"delRecsInfo": "Vous êtes sur le point de supprimer définitivement %s",
|
||||
"Desserts": "Desserts",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Exportation en cours",
|
||||
"expSuc": "Exportation réussie",
|
||||
"favourites": "Favoris",
|
||||
"February": "février",
|
||||
"Filipino": "philippine",
|
||||
"Filtered recipes": "Recettes filtrées",
|
||||
"fl oz": "oz liq",
|
||||
"fltr": "Filtre",
|
||||
"Fluid Ounce": "Once liquide",
|
||||
"French": "française",
|
||||
"FRI": "ven",
|
||||
"fsList": "Vos recettes favorites sont listées ici",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -111,12 +106,9 @@
|
|||
"it": "Élément",
|
||||
"Italian": "italienne",
|
||||
"Jamaican": "jamaïcaine",
|
||||
"January": "janvier",
|
||||
"Japanese": "japonaise",
|
||||
"Jewish": "juive",
|
||||
"joinTG": "Rejoignez le groupe Telegram",
|
||||
"July": "juillet",
|
||||
"June": "juin",
|
||||
"kEdit": "CONTINUER",
|
||||
"Kenyan": "kényane",
|
||||
"kg": "kg",
|
||||
|
@ -134,10 +126,8 @@
|
|||
"Loaf": "Miche",
|
||||
"ltAgo": "il y a longtemps",
|
||||
"lunch": "Diner",
|
||||
"mAgo": "Il y a %s mois",
|
||||
"mAgo": "il y a %s mois",
|
||||
"Main dishes": "Plats principaux",
|
||||
"March": "mars",
|
||||
"May": "mai",
|
||||
"Meat": "Viande",
|
||||
"medium": "moyen",
|
||||
"Mexican": "mexicaine",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "Minimale",
|
||||
"ml": "ml",
|
||||
"Moderate": "Modéré",
|
||||
"MON": "lun",
|
||||
"newCui": "Nouvelle cuisine",
|
||||
"Newest first": "La plus récente d’abord",
|
||||
"newRec": "Nouvelle recette",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "Aucune recette ne correspond à votre recette",
|
||||
"noRecsInL": "Aucune des recettes ici ne correspond à votre recherche",
|
||||
"nos": "Notes",
|
||||
"November": "novembre",
|
||||
"nwCat": "Nouvelle catégorie",
|
||||
"nwYiU": "Nouvelle unité de rendement",
|
||||
"October": "octobre",
|
||||
"OK": "OK",
|
||||
"Oldest first": "La plus ancienne d’abord",
|
||||
"opts": "Options",
|
||||
|
@ -179,7 +166,7 @@
|
|||
"Piece": "Morceau",
|
||||
"pinch": "pincée",
|
||||
"planner": "Planificateur de repas",
|
||||
"plsAdd": "Utilisez le bouton plus pour en ajouter une",
|
||||
"plsAdd": "Utilisez le bouton + pour en ajouter une",
|
||||
"Portuguese": "portugaise",
|
||||
"Poultry": "Volaille",
|
||||
"Pound": "Livre",
|
||||
|
@ -200,7 +187,7 @@
|
|||
"recs": "recettes",
|
||||
"recTitle": "Ma recette saine",
|
||||
"recU": "mise à jour :",
|
||||
"req": "%s requis(e)",
|
||||
"req": "%s nécessaire",
|
||||
"resNF": "Recette introuvable",
|
||||
"rest": "Réinitialiser",
|
||||
"restCatL": "Réinitialiser la liste des catégories",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "REDÉMARRER",
|
||||
"Russian": "russe",
|
||||
"Salads": "Salades",
|
||||
"SAT": "sam",
|
||||
"Sauces": "Sauces",
|
||||
"Scottish": "écossaise",
|
||||
"Seafood": "Fruits de mer",
|
||||
"selRec": "Sélectionner une recette",
|
||||
"September": "septembre",
|
||||
"ser": "Chercher",
|
||||
"Serving": "Portion",
|
||||
"SET": "DÉFINIR",
|
||||
|
@ -250,7 +235,6 @@
|
|||
"stick": "barre",
|
||||
"stp": "Étape",
|
||||
"strAdd": "Commencez à ajouter vos recettes !",
|
||||
"SUN": "dim",
|
||||
"sVw": "Secouez pour voir une recette au hasard",
|
||||
"sVwInfo": "Vous aide à choisir quoi cuisiner quand vous ne pouvez pas vous décider",
|
||||
"Swedish": "suédoise",
|
||||
|
@ -261,18 +245,16 @@
|
|||
"Teaspoon": "Cuillère à café",
|
||||
"Thai": "thaïlandaise",
|
||||
"Theme": "Thème",
|
||||
"THU": "jeu",
|
||||
"title": "Titre",
|
||||
"tLInfo": "Les recettes que vous voulez essayer plus tard sont listées ici",
|
||||
"today": "aujourd’hui",
|
||||
"triedInfo": "Vous avez essayé cette recette %s",
|
||||
"triedInfo": "Vous avez essayé cette recette %s",
|
||||
"trnsl": "Traduire",
|
||||
"trylater": "Essayer plus tard",
|
||||
"trylater": "À essayer plus tard",
|
||||
"trySer": "RECHERCHE DANS TOUTES LES RECETTES ?",
|
||||
"ts": "Étiquettes",
|
||||
"tsInfo": "séparez par des espaces",
|
||||
"tsp": "c.à.c",
|
||||
"TUE": "mar",
|
||||
"Turkish": "turque",
|
||||
"Undefined": "Indéfini",
|
||||
"unit": "unité",
|
||||
|
@ -283,7 +265,6 @@
|
|||
"Vegetarian": "Végétarien",
|
||||
"Vietnamese": "vietnamienne",
|
||||
"wAgo": "il y a %s semaines",
|
||||
"WED": "mer",
|
||||
"yesterday": "hier",
|
||||
"yieldQ": "Quantité de rendement",
|
||||
"yieldU": "Unité de rendement",
|
||||
|
@ -294,7 +275,6 @@
|
|||
"tmrSnd": "Son de la minuterie",
|
||||
"aTPrst": "Ajouté aux préréglages",
|
||||
"fwr": "pour quelle recette ?",
|
||||
"tmrPrsts": "Préréglages de la minuterie",
|
||||
"prstBtn": "PRÉRÉGLAGES",
|
||||
"tmr": "Minuterie %s",
|
||||
"stop": "Arrêter",
|
||||
|
@ -308,5 +288,41 @@
|
|||
"minutes": "minutes",
|
||||
"minute": "minute",
|
||||
"dlyDur": "Durée du retard",
|
||||
"delay": "Retard"
|
||||
"delay": "Retarder",
|
||||
"notifSetg": "Paramètres de notification",
|
||||
"tmrRm": "Minuterie retirée",
|
||||
"delPrst": "Vous êtes sur le point de supprimer %s des préréglages",
|
||||
"prsts": "Préréglages",
|
||||
"ttv": "Appuyez pour voir",
|
||||
"dismissAll": "Rejeter toutes les minuteries",
|
||||
"dismiss": "Rejeter",
|
||||
"texp": "%s minuteries ont expiré",
|
||||
"wDBy": "%1$s a été retardée de %2$s",
|
||||
"prstTU": "Temps du préréglage mis à jour",
|
||||
"ccwt": "Cuisinez avec confiance avec des minuteries !",
|
||||
"gtD": "Aller à la date",
|
||||
"random": "Aléatoire",
|
||||
"ystr": "Hier",
|
||||
"tmrw": "Demain",
|
||||
"tdy": "Aujourd’hui",
|
||||
"cpy": "copie",
|
||||
"d": "Jour",
|
||||
"wk": "Semaine",
|
||||
"mnth": "Mois",
|
||||
"calVM": "Mode d’affichage du calendrier",
|
||||
"oAP": "%1$s en cours, %2$s en pause",
|
||||
"otaw": "Après une semaine",
|
||||
"otam": "Après un mois",
|
||||
"otay": "Après un an",
|
||||
"admp": "Supprimer automatiquement les planifications de repas",
|
||||
"nvr": "Jamais",
|
||||
"plsCrt": "Utilisez le bouton + pour en créer une",
|
||||
"ehwmp": "Mangez sainement grâce aux planifications de repas !",
|
||||
"selMT": "Sélectionnez le type de repas",
|
||||
"rstBtn": "RÉINITIALISER",
|
||||
"add": "Ajouter",
|
||||
"esgbInfo": "Désactivez cette option si vous avez des problèmes de navigation",
|
||||
"esgb": "Balayer le bord pour revenir en arrière",
|
||||
"ksavrInfo": "Empêche l’écran de s’éteindre durant la visualisation d’une recette",
|
||||
"ksavr": "Garder l’écran allumé durant l’affichage d’une recette"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes est un livre de cuisine numérique à code source ouvert et respectueux de la vie privée qui vous permet de créer, gérer et partager vos recettes",
|
||||
"apply": "APPLIQUER",
|
||||
"appRst": "Redémarrage de l’appli nécessaire",
|
||||
"April": "avril",
|
||||
"aStpBtn": "AJOUTER UNE ÉTAPE",
|
||||
"August": "août",
|
||||
"Barbecue": "Barbecue",
|
||||
"Beverages": "Breuvages",
|
||||
"Black": "Noir",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Sombre",
|
||||
"db": "Base de données",
|
||||
"dBtn": "SUPPRIMER",
|
||||
"December": "décembre",
|
||||
"delRecInfo": "Vous êtes sur le point de supprimer définitivement la recette %s",
|
||||
"delRecsInfo": "Vous êtes sur le point de supprimer définitivement %s",
|
||||
"Desserts": "Desserts",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Exportation en cours",
|
||||
"expSuc": "Exportation réussie",
|
||||
"favourites": "Favoris",
|
||||
"February": "février",
|
||||
"Filipino": "philippine",
|
||||
"Filtered recipes": "Recettes filtrées",
|
||||
"fl oz": "oz liq",
|
||||
"fltr": "Filtre",
|
||||
"Fluid Ounce": "Once liquide",
|
||||
"French": "française",
|
||||
"FRI": "ven",
|
||||
"fsList": "Vos recettes favorites sont listées ici",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -101,7 +96,7 @@
|
|||
"impInfo": "Prend en charge les sauvegardes complètes exportées par cette application",
|
||||
"impip": "Importation en cours",
|
||||
"impSuc": "Importation réussie",
|
||||
"in": "in",
|
||||
"in": "po",
|
||||
"Indian": "indienne",
|
||||
"ings": "Ingrédients",
|
||||
"inss": "Instructions",
|
||||
|
@ -111,12 +106,9 @@
|
|||
"it": "Élément",
|
||||
"Italian": "italienne",
|
||||
"Jamaican": "jamaïcaine",
|
||||
"January": "janvier",
|
||||
"Japanese": "japonaise",
|
||||
"Jewish": "juive",
|
||||
"joinTG": "Rejoignez le groupe Telegram",
|
||||
"July": "juillet",
|
||||
"June": "juin",
|
||||
"kEdit": "CONTINUER",
|
||||
"Kenyan": "kényane",
|
||||
"kg": "kg",
|
||||
|
@ -134,10 +126,8 @@
|
|||
"Loaf": "Miche",
|
||||
"ltAgo": "il y a longtemps",
|
||||
"lunch": "Dîner",
|
||||
"mAgo": "Il y a %s mois",
|
||||
"mAgo": "il y a %s mois",
|
||||
"Main dishes": "Plats principaux",
|
||||
"March": "mars",
|
||||
"May": "mai",
|
||||
"Meat": "Viande",
|
||||
"medium": "moyen",
|
||||
"Mexican": "mexicaine",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "Minimale",
|
||||
"ml": "ml",
|
||||
"Moderate": "Modéré",
|
||||
"MON": "lun",
|
||||
"newCui": "Nouvelle cuisine",
|
||||
"Newest first": "La plus récente d’abord",
|
||||
"newRec": "Nouvelle recette",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "Aucune recette ne correspond à votre recette",
|
||||
"noRecsInL": "Aucune des recettes ici ne correspond à votre recherche",
|
||||
"nos": "Notes",
|
||||
"November": "novembre",
|
||||
"nwCat": "Nouvelle catégorie",
|
||||
"nwYiU": "Nouvelle unité de rendement",
|
||||
"October": "octobre",
|
||||
"OK": "OK",
|
||||
"Oldest first": "La plus ancienne d’abord",
|
||||
"opts": "Options",
|
||||
|
@ -179,7 +166,7 @@
|
|||
"Piece": "Morceau",
|
||||
"pinch": "pincée",
|
||||
"planner": "Planificateur de repas",
|
||||
"plsAdd": "Utilisez le bouton plus pour en ajouter une",
|
||||
"plsAdd": "Utilisez le bouton + pour en ajouter une",
|
||||
"Portuguese": "portugaise",
|
||||
"Poultry": "Volaille",
|
||||
"Pound": "Livre",
|
||||
|
@ -200,7 +187,7 @@
|
|||
"recs": "recettes",
|
||||
"recTitle": "Ma recette saine",
|
||||
"recU": "mise à jour :",
|
||||
"req": "%s requis(e)",
|
||||
"req": "%s nécessaire",
|
||||
"resNF": "Recette introuvable",
|
||||
"rest": "Réinitialiser",
|
||||
"restCatL": "Réinitialiser la liste des catégories",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "REDÉMARRER",
|
||||
"Russian": "russe",
|
||||
"Salads": "Salades",
|
||||
"SAT": "sam",
|
||||
"Sauces": "Sauces",
|
||||
"Scottish": "écossaise",
|
||||
"Seafood": "Fruits de mer",
|
||||
"selRec": "Sélectionner une recette",
|
||||
"September": "septembre",
|
||||
"ser": "Chercher",
|
||||
"Serving": "Portion",
|
||||
"SET": "DÉFINIR",
|
||||
|
@ -250,7 +235,6 @@
|
|||
"stick": "barre",
|
||||
"stp": "Étape",
|
||||
"strAdd": "Commencez à ajouter vos recettes!",
|
||||
"SUN": "dim",
|
||||
"sVw": "Secouez pour voir une recette au hasard",
|
||||
"sVwInfo": "Vous aide à choisir quoi cuisiner quand vous ne pouvez pas vous décider",
|
||||
"Swedish": "suédoise",
|
||||
|
@ -261,18 +245,16 @@
|
|||
"Teaspoon": "Cuillère à thé",
|
||||
"Thai": "thaïlandaise",
|
||||
"Theme": "Thème",
|
||||
"THU": "jeu",
|
||||
"title": "Titre",
|
||||
"tLInfo": "Les recettes que vous voulez essayer plus tard sont listées ici",
|
||||
"today": "aujourd’hui",
|
||||
"triedInfo": "Vous avez essayé cette recette %s",
|
||||
"trnsl": "Traduire",
|
||||
"trylater": "Essayer plus tard",
|
||||
"trylater": "À essayer plus tard",
|
||||
"trySer": "RECHERCHE DANS TOUTES LES RECETTES?",
|
||||
"ts": "Étiquettes",
|
||||
"tsInfo": "séparez par des espaces",
|
||||
"tsp": "c.à.t",
|
||||
"TUE": "mar",
|
||||
"Turkish": "turque",
|
||||
"Undefined": "Indéfini",
|
||||
"unit": "unité",
|
||||
|
@ -283,7 +265,6 @@
|
|||
"Vegetarian": "Végétarien",
|
||||
"Vietnamese": "vietnamienne",
|
||||
"wAgo": "il y a %s semaines",
|
||||
"WED": "mer",
|
||||
"yesterday": "hier",
|
||||
"yieldQ": "Quantité de rendement",
|
||||
"yieldU": "Unité de rendement",
|
||||
|
@ -294,7 +275,6 @@
|
|||
"tmrSnd": "Son de la minuterie",
|
||||
"aTPrst": "Ajouté aux préréglages",
|
||||
"fwr": "pour quelle recette?",
|
||||
"tmrPrsts": "Préréglages de la minuterie",
|
||||
"prstBtn": "PRÉRÉGLAGES",
|
||||
"tmr": "Minuterie %s",
|
||||
"stop": "Arrêter",
|
||||
|
@ -308,5 +288,41 @@
|
|||
"minutes": "minutes",
|
||||
"minute": "minute",
|
||||
"dlyDur": "Durée du retard",
|
||||
"delay": "Retard"
|
||||
"delay": "Retarder",
|
||||
"notifSetg": "Paramètres de notification",
|
||||
"tmrRm": "Minuterie retirée",
|
||||
"delPrst": "Vous êtes sur le point de supprimer %s des préréglages",
|
||||
"prsts": "Préréglages",
|
||||
"ttv": "Appuyez pour voir",
|
||||
"dismissAll": "Rejeter toutes les minuteries",
|
||||
"dismiss": "Rejeter",
|
||||
"texp": "%s minuteries ont expiré",
|
||||
"wDBy": "%1$s a été retardée de %2$s",
|
||||
"prstTU": "Temps du préréglage mis à jour",
|
||||
"ccwt": "Cuisinez avec confiance avec des minuteries!",
|
||||
"gtD": "Aller à la date",
|
||||
"random": "Aléatoire",
|
||||
"ystr": "Hier",
|
||||
"tmrw": "Demain",
|
||||
"tdy": "Aujourd’hui",
|
||||
"cpy": "copie",
|
||||
"d": "Jour",
|
||||
"wk": "Semaine",
|
||||
"mnth": "Mois",
|
||||
"calVM": "Mode d’affichage du calendrier",
|
||||
"oAP": "%1$s en cours, %2$s en pause",
|
||||
"otaw": "Après une semaine",
|
||||
"otam": "Après un mois",
|
||||
"otay": "Après un an",
|
||||
"admp": "Supprimer automatiquement les planifications de repas",
|
||||
"nvr": "Jamais",
|
||||
"plsCrt": "Utilisez le bouton + pour en créer une",
|
||||
"ehwmp": "Mangez sainement grâce aux planifications de repas!",
|
||||
"selMT": "Sélectionnez le type de repas",
|
||||
"rstBtn": "RÉINITIALISER",
|
||||
"add": "Ajouter",
|
||||
"esgbInfo": "Désactivez cette option si vous avez des problèmes de navigation",
|
||||
"esgb": "Balayer le bord pour revenir en arrière",
|
||||
"ksavrInfo": "Empêche l’écran de s’éteindre durant la visualisation d’une recette",
|
||||
"ksavr": "Garder l’écran allumé durant l’affichage d’une recette"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes est un livre de cuisine numérique à code source ouvert et respectueux de la vie privée qui vous permet de créer, gérer et partager vos recettes",
|
||||
"apply": "APPLIQUER",
|
||||
"appRst": "Redémarrage de l’appli nécessaire",
|
||||
"April": "avril",
|
||||
"aStpBtn": "AJOUTER UNE ÉTAPE",
|
||||
"August": "août",
|
||||
"Barbecue": "Barbecue",
|
||||
"Beverages": "Boissons",
|
||||
"Black": "Noir",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Sombre",
|
||||
"db": "Base de données",
|
||||
"dBtn": "SUPPRIMER",
|
||||
"December": "décembre",
|
||||
"delRecInfo": "Vous êtes sur le point de supprimer définitivement la recette %s",
|
||||
"delRecsInfo": "Vous êtes sur le point de supprimer définitivement %s",
|
||||
"Desserts": "Desserts",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Exportation en cours",
|
||||
"expSuc": "Exportation réussie",
|
||||
"favourites": "Favoris",
|
||||
"February": "février",
|
||||
"Filipino": "philippine",
|
||||
"Filtered recipes": "Recettes filtrées",
|
||||
"fl oz": "oz liq",
|
||||
"fltr": "Filtre",
|
||||
"Fluid Ounce": "Once liquide",
|
||||
"French": "française",
|
||||
"FRI": "ven",
|
||||
"fsList": "Vos recettes favorites sont listées ici",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -111,12 +106,9 @@
|
|||
"it": "Élément",
|
||||
"Italian": "italienne",
|
||||
"Jamaican": "jamaïcaine",
|
||||
"January": "janvier",
|
||||
"Japanese": "japonaise",
|
||||
"Jewish": "juive",
|
||||
"joinTG": "Rejoignez le groupe Telegram",
|
||||
"July": "juillet",
|
||||
"June": "juin",
|
||||
"kEdit": "CONTINUER",
|
||||
"Kenyan": "kényane",
|
||||
"kg": "kg",
|
||||
|
@ -134,10 +126,8 @@
|
|||
"Loaf": "Miche",
|
||||
"ltAgo": "il y a longtemps",
|
||||
"lunch": "Dîner",
|
||||
"mAgo": "Il y a %s mois",
|
||||
"mAgo": "il y a %s mois",
|
||||
"Main dishes": "Plats principaux",
|
||||
"March": "mars",
|
||||
"May": "mai",
|
||||
"Meat": "Viande",
|
||||
"medium": "moyen",
|
||||
"Mexican": "mexicaine",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "Minimale",
|
||||
"ml": "ml",
|
||||
"Moderate": "Modéré",
|
||||
"MON": "lun",
|
||||
"newCui": "Nouvelle cuisine",
|
||||
"Newest first": "La plus récente d’abord",
|
||||
"newRec": "Nouvelle recette",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "Aucune recette ne correspond à votre recette",
|
||||
"noRecsInL": "Aucune des recettes ici ne correspond à votre recherche",
|
||||
"nos": "Notes",
|
||||
"November": "novembre",
|
||||
"nwCat": "Nouvelle catégorie",
|
||||
"nwYiU": "Nouvelle unité de rendement",
|
||||
"October": "octobre",
|
||||
"OK": "OK",
|
||||
"Oldest first": "La plus ancienne d’abord",
|
||||
"opts": "Options",
|
||||
|
@ -179,7 +166,7 @@
|
|||
"Piece": "Morceau",
|
||||
"pinch": "pincée",
|
||||
"planner": "Planificateur de repas",
|
||||
"plsAdd": "Utilisez le bouton plus pour en ajouter une",
|
||||
"plsAdd": "Utilisez le bouton + pour en ajouter une",
|
||||
"Portuguese": "portugaise",
|
||||
"Poultry": "Volaille",
|
||||
"Pound": "Livre",
|
||||
|
@ -200,7 +187,7 @@
|
|||
"recs": "recettes",
|
||||
"recTitle": "Ma recette saine",
|
||||
"recU": "mise à jour :",
|
||||
"req": "%s requis(e)",
|
||||
"req": "%s nécessaire",
|
||||
"resNF": "Recette introuvable",
|
||||
"rest": "Réinitialiser",
|
||||
"restCatL": "Réinitialiser la liste des catégories",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "REDÉMARRER",
|
||||
"Russian": "russe",
|
||||
"Salads": "Salades",
|
||||
"SAT": "sam",
|
||||
"Sauces": "Sauces",
|
||||
"Scottish": "écossaise",
|
||||
"Seafood": "Fruits de mer",
|
||||
"selRec": "Sélectionner une recette",
|
||||
"September": "septembre",
|
||||
"ser": "Chercher",
|
||||
"Serving": "Portion",
|
||||
"SET": "DÉFINIR",
|
||||
|
@ -250,7 +235,6 @@
|
|||
"stick": "barre",
|
||||
"stp": "Étape",
|
||||
"strAdd": "Commencez à ajouter vos recettes!",
|
||||
"SUN": "dim",
|
||||
"sVw": "Secouez pour voir une recette au hasard",
|
||||
"sVwInfo": "Vous aide à choisir quoi cuisiner quand vous ne pouvez pas vous décider",
|
||||
"Swedish": "suédoise",
|
||||
|
@ -261,18 +245,16 @@
|
|||
"Teaspoon": "Cuillère à café",
|
||||
"Thai": "thaïlandaise",
|
||||
"Theme": "Thème",
|
||||
"THU": "jeu",
|
||||
"title": "Titre",
|
||||
"tLInfo": "Les recettes que vous voulez essayer plus tard sont listées ici",
|
||||
"today": "aujourd’hui",
|
||||
"triedInfo": "Vous avez essayé cette recette %s",
|
||||
"trnsl": "Traduire",
|
||||
"trylater": "Essayer plus tard",
|
||||
"trylater": "À essayer plus tard",
|
||||
"trySer": "RECHERCHE DANS TOUTES LES RECETTES?",
|
||||
"ts": "Étiquettes",
|
||||
"tsInfo": "séparez par des espaces",
|
||||
"tsp": "c.à.c",
|
||||
"TUE": "mar",
|
||||
"Turkish": "turque",
|
||||
"Undefined": "Indéfini",
|
||||
"unit": "unité",
|
||||
|
@ -283,7 +265,6 @@
|
|||
"Vegetarian": "Végétarien",
|
||||
"Vietnamese": "vietnamienne",
|
||||
"wAgo": "il y a %s semaines",
|
||||
"WED": "mer",
|
||||
"yesterday": "hier",
|
||||
"yieldQ": "Quantité de rendement",
|
||||
"yieldU": "Unité de rendement",
|
||||
|
@ -294,7 +275,6 @@
|
|||
"tmrSnd": "Son de la minuterie",
|
||||
"aTPrst": "Ajouté aux préréglages",
|
||||
"fwr": "pour quelle recette?",
|
||||
"tmrPrsts": "Préréglages de la minuterie",
|
||||
"prstBtn": "PRÉRÉGLAGES",
|
||||
"tmr": "Minuterie %s",
|
||||
"stop": "Arrêter",
|
||||
|
@ -308,5 +288,41 @@
|
|||
"minutes": "minutes",
|
||||
"minute": "minute",
|
||||
"dlyDur": "Durée du retard",
|
||||
"delay": "Retard"
|
||||
"delay": "Retarder",
|
||||
"notifSetg": "Paramètres de notification",
|
||||
"tmrRm": "Minuterie retirée",
|
||||
"delPrst": "Vous êtes sur le point de supprimer %s des préréglages",
|
||||
"prsts": "Préréglages",
|
||||
"ttv": "Appuyez pour voir",
|
||||
"dismissAll": "Rejeter toutes les minuteries",
|
||||
"dismiss": "Rejeter",
|
||||
"texp": "%s minuteries ont expiré",
|
||||
"wDBy": "%1$s a été retardée de %2$s",
|
||||
"prstTU": "Temps du préréglage mis à jour",
|
||||
"ccwt": "Cuisinez avec confiance avec des minuterie!",
|
||||
"gtD": "Aller à la date",
|
||||
"random": "Aléatoire",
|
||||
"ystr": "Hier",
|
||||
"tmrw": "Demain",
|
||||
"tdy": "Aujourd’hui",
|
||||
"cpy": "copie",
|
||||
"d": "Jour",
|
||||
"wk": "Semaine",
|
||||
"mnth": "Mois",
|
||||
"calVM": "Mode d’affichage du calendrier",
|
||||
"oAP": "%1$s en cours, %2$s en pause",
|
||||
"nvr": "Jamais",
|
||||
"otaw": "Après une semaine",
|
||||
"otam": "Après un mois",
|
||||
"otay": "Après un an",
|
||||
"admp": "Supprimer automatiquement les planifications de repas",
|
||||
"plsCrt": "Utilisez le bouton + pour en créer une",
|
||||
"ehwmp": "Mangez sainement grâce aux planifications de repas!",
|
||||
"selMT": "Sélectionnez le type de repas",
|
||||
"rstBtn": "RÉINITIALISER",
|
||||
"add": "Ajouter",
|
||||
"esgbInfo": "Désactivez cette option si vous avez des problèmes de navigation",
|
||||
"esgb": "Balayer le bord pour revenir en arrière",
|
||||
"ksavrInfo": "Empêche l’écran de s’éteindre durant la visualisation d’une recette",
|
||||
"ksavr": "Garder l’écran allumé durant l’affichage d’une recette"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes est un livre de cuisine numérique à code source ouvert et respectueux de la vie privée qui vous permet de créer, gérer et partager vos recettes",
|
||||
"apply": "APPLIQUER",
|
||||
"appRst": "Redémarrage de l’appli nécessaire",
|
||||
"April": "avril",
|
||||
"aStpBtn": "AJOUTER UNE ÉTAPE",
|
||||
"August": "août",
|
||||
"Barbecue": "Barbecue",
|
||||
"Beverages": "Boissons",
|
||||
"Black": "Noir",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Sombre",
|
||||
"db": "Base de données",
|
||||
"dBtn": "SUPPRIMER",
|
||||
"December": "décembre",
|
||||
"delRecInfo": "Vous êtes sur le point de supprimer définitivement la recette %s",
|
||||
"delRecsInfo": "Vous êtes sur le point de supprimer définitivement %s",
|
||||
"Desserts": "Desserts",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Exportation en cours",
|
||||
"expSuc": "Exportation réussie",
|
||||
"favourites": "Favoris",
|
||||
"February": "février",
|
||||
"Filipino": "philippine",
|
||||
"Filtered recipes": "Recettes filtrées",
|
||||
"fl oz": "oz liq",
|
||||
"fltr": "Filtre",
|
||||
"Fluid Ounce": "Once liquide",
|
||||
"French": "Française",
|
||||
"FRI": "ven",
|
||||
"French": "française",
|
||||
"fsList": "Vos recettes favorites sont listées ici",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -108,15 +103,12 @@
|
|||
"intf": "Interface",
|
||||
"invFile": "Fichier invalide",
|
||||
"Irish": "irlandaise",
|
||||
"it": "Élément",
|
||||
"it": "Élément %s",
|
||||
"Italian": "italienne",
|
||||
"Jamaican": "jamaïcaine",
|
||||
"January": "janvier",
|
||||
"Japanese": "japonaise",
|
||||
"Jewish": "juive",
|
||||
"joinTG": "Rejoignez le groupe Telegram",
|
||||
"July": "juillet",
|
||||
"June": "juin",
|
||||
"kEdit": "CONTINUER",
|
||||
"Kenyan": "kényane",
|
||||
"kg": "kg",
|
||||
|
@ -134,10 +126,8 @@
|
|||
"Loaf": "Miche",
|
||||
"ltAgo": "il y a longtemps",
|
||||
"lunch": "Déjeuner",
|
||||
"mAgo": "Il y a %s mois",
|
||||
"mAgo": "il y a %s mois",
|
||||
"Main dishes": "Plats principaux",
|
||||
"March": "mars",
|
||||
"May": "mai",
|
||||
"Meat": "Viande",
|
||||
"medium": "moyen",
|
||||
"Mexican": "mexicaine",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "Minimale",
|
||||
"ml": "ml",
|
||||
"Moderate": "Modéré",
|
||||
"MON": "lun",
|
||||
"newCui": "Nouvelle cuisine",
|
||||
"Newest first": "La plus récente d’abord",
|
||||
"newRec": "Nouvelle recette",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "Aucune recette ne correspond à votre recette",
|
||||
"noRecsInL": "Aucune des recettes ici ne correspond à votre recherche",
|
||||
"nos": "Notes",
|
||||
"November": "novembre",
|
||||
"nwCat": "Nouvelle catégorie",
|
||||
"nwYiU": "Nouvelle unité de portion",
|
||||
"October": "octobre",
|
||||
"OK": "OK",
|
||||
"Oldest first": "La plus ancienne d’abord",
|
||||
"opts": "Options",
|
||||
|
@ -179,7 +166,7 @@
|
|||
"Piece": "Morceau",
|
||||
"pinch": "pincée",
|
||||
"planner": "Planificateur de repas",
|
||||
"plsAdd": "Utilisez le bouton plus pour en ajouter une",
|
||||
"plsAdd": "Utilisez le bouton + pour en ajouter une",
|
||||
"Portuguese": "portugaise",
|
||||
"Poultry": "Volaille",
|
||||
"Pound": "Livre",
|
||||
|
@ -200,7 +187,7 @@
|
|||
"recs": "recettes",
|
||||
"recTitle": "Ma recette saine",
|
||||
"recU": "mise à jour :",
|
||||
"req": "%s requis(e)",
|
||||
"req": "%s nécessaire",
|
||||
"resNF": "Recette introuvable",
|
||||
"rest": "Réinitialiser",
|
||||
"restCatL": "Réinitialiser la liste des catégories",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "REDÉMARRER",
|
||||
"Russian": "russe",
|
||||
"Salads": "Salades",
|
||||
"SAT": "sam",
|
||||
"Sauces": "Sauces",
|
||||
"Scottish": "écossaise",
|
||||
"Seafood": "Fruits de mer",
|
||||
"selRec": "Sélectionner une recette",
|
||||
"September": "septembre",
|
||||
"ser": "Chercher",
|
||||
"Serving": "Portion",
|
||||
"SET": "DÉFINIR",
|
||||
|
@ -248,9 +233,8 @@
|
|||
"sru": "Partager la recette en utilisant…",
|
||||
"stars": "Évaluation étoilée",
|
||||
"stick": "barre",
|
||||
"stp": "Étape",
|
||||
"stp": "Étape %s",
|
||||
"strAdd": "Commencez à ajouter vos recettes !",
|
||||
"SUN": "dim",
|
||||
"sVw": "Secouez pour voir une recette au hasard",
|
||||
"sVwInfo": "Vous aide à choisir quoi cuisiner quand vous ne pouvez pas vous décider",
|
||||
"Swedish": "suédoise",
|
||||
|
@ -261,18 +245,16 @@
|
|||
"Teaspoon": "Cuillère à café",
|
||||
"Thai": "thaïlandaise",
|
||||
"Theme": "Thème",
|
||||
"THU": "jeu",
|
||||
"title": "Titre",
|
||||
"tLInfo": "Les recettes que vous voulez essayer plus tard sont listées ici",
|
||||
"today": "aujourd’hui",
|
||||
"triedInfo": "Vous avez essayé cette recette %s",
|
||||
"trnsl": "Traduire",
|
||||
"trylater": "Essayer plus tard",
|
||||
"trylater": "À essayer plus tard",
|
||||
"trySer": "RECHERCHE DANS TOUTES LES RECETTES ?",
|
||||
"ts": "Étiquettes",
|
||||
"tsInfo": "séparez par des espaces",
|
||||
"tsp": "c.à.c",
|
||||
"TUE": "mar",
|
||||
"Turkish": "turque",
|
||||
"Undefined": "Indéfini",
|
||||
"unit": "unité",
|
||||
|
@ -283,7 +265,6 @@
|
|||
"Vegetarian": "Végétarien",
|
||||
"Vietnamese": "vietnamienne",
|
||||
"wAgo": "il y a %s semaines",
|
||||
"WED": "mer",
|
||||
"yesterday": "hier",
|
||||
"yieldQ": "Quantité de portion",
|
||||
"yieldU": "Unité de portion",
|
||||
|
@ -294,7 +275,6 @@
|
|||
"tmrSnd": "Son de la minuterie",
|
||||
"aTPrst": "Ajouté aux préréglages",
|
||||
"fwr": "pour quelle recette ?",
|
||||
"tmrPrsts": "Préréglages de la minuterie",
|
||||
"prstBtn": "PRÉRÉGLAGES",
|
||||
"tmr": "Minuterie %s",
|
||||
"stop": "Arrêter",
|
||||
|
@ -308,5 +288,44 @@
|
|||
"minutes": "minutes",
|
||||
"minute": "minute",
|
||||
"dlyDur": "Durée du retard",
|
||||
"delay": "Retard"
|
||||
"delay": "Retarder",
|
||||
"notifSetg": "Paramètres de notification",
|
||||
"tmrRm": "Minuterie retirée",
|
||||
"delPrst": "Vous êtes sur le point de supprimer %s des préréglages",
|
||||
"prsts": "Préréglages",
|
||||
"wDBy": "%1$s a été retardée de %2$s",
|
||||
"ttv": "Appuyez pour voir",
|
||||
"dismissAll": "Rejeter toutes les minuteries",
|
||||
"dismiss": "Rejeter",
|
||||
"texp": "%s minuteries ont expiré",
|
||||
"prstTU": "Temps du préréglage mis à jour",
|
||||
"ccwt": "Cuisinez avec confiance avec des minuteries !",
|
||||
"gtD": "Aller à la date",
|
||||
"random": "Aléatoire",
|
||||
"ystr": "Hier",
|
||||
"tmrw": "Demain",
|
||||
"tdy": "Aujourd’hui",
|
||||
"cpy": "copie",
|
||||
"d": "Jour",
|
||||
"wk": "Semaine",
|
||||
"mnth": "Mois",
|
||||
"calVM": "Mode d’affichage du calendrier",
|
||||
"oAP": "%1$s en cours, %2$s en pause",
|
||||
"otaw": "Après une semaine",
|
||||
"otam": "Après un mois",
|
||||
"otay": "Après un an",
|
||||
"admp": "Supprimer automatiquement les planifications de repas",
|
||||
"nvr": "Jamais",
|
||||
"plsCrt": "Utilisez le bouton + pour en créer une",
|
||||
"ehwmp": "Mangez sainement grâce aux planifications de repas !",
|
||||
"selMT": "Sélectionnez le type de repas",
|
||||
"rstBtn": "RÉINITIALISER",
|
||||
"add": "Ajouter",
|
||||
"ksavr": "Garder l’écran allumé durant l’affichage d’une recette",
|
||||
"esgbInfo": "Désactivez cette option si vous avez des problèmes de navigation",
|
||||
"esgb": "Balayer le bord pour revenir en arrière",
|
||||
"ksavrInfo": "Empêche l’écran de s’éteindre durant la visualisation d’une recette",
|
||||
"sectRm": "Section retiré",
|
||||
"addSectBtn": "AJOUTER UNE SECTION",
|
||||
"sect": "Section %s"
|
||||
}
|
||||
|
|
620
app/i18n/hi.json
|
@ -1,293 +1,331 @@
|
|||
{
|
||||
"aap": "एक तस्वीर लगाओ",
|
||||
"About": "तकरीबन",
|
||||
"aBtn": "जोड़ें",
|
||||
"aD": "सब कुछ कर दिया!",
|
||||
"addCmbBtn": "संयोजन जोड़ें",
|
||||
"aFBu": "बैकअप करने के लिए एक नुस्खा जोड़ें",
|
||||
"aIngBtn": "सामग्री जोड़ें",
|
||||
"allCats": "सब वर्ग",
|
||||
"allCuis": "सभी व्यंजनों",
|
||||
"allTs": "सभी टैग",
|
||||
"American": "अमेरिकन",
|
||||
"aNBtn": "नया जोड़ो",
|
||||
"aNoBtn": "नोट जोड़ें",
|
||||
"app.name": "एनरेसिपीज़",
|
||||
"appCrd": "एनरेसिपीज़ के माध्यम से साझा किया गया। इसे F-Droid, IzzyOnDroid या Play Store पर प्राप्त करें।",
|
||||
"Appetizers": "ऐपेटाइज़र",
|
||||
"appInfo": "एनरेसिपीज़ एक खुला स्रोत, गोपनीयता-अनुकूल डिजिटल रसोई की किताब है जो आपको अपने व्यंजनों को बनाने, प्रबंधित करने और साझा करने देता है",
|
||||
"apply": "लागू",
|
||||
"appRst": "एप्लिकेशन पुनरारंभ की आवश्यकता है",
|
||||
"April": "अप्रैल",
|
||||
"aStpBtn": "निर्देश जोड़ें",
|
||||
"August": "अगस्त",
|
||||
"Barbecue": "बारबेक्यू",
|
||||
"Beverages": "पेय",
|
||||
"Black": "काला",
|
||||
"Brazilian": "ब्राजील",
|
||||
"Breads": "ब्रेड",
|
||||
"breakfast": "सुबह का नाश्ता",
|
||||
"British": "अंग्रेजों",
|
||||
"buEmp": "बैकअप फ़ाइल खाली है",
|
||||
"buFol": "बैकअप फ़ोल्डर",
|
||||
"buInc": "विकृत या भ्रष्ट बैकअप फ़ाइल",
|
||||
"buInfo": "आपके सभी डेटा युक्त एक ज़िप फ़ाइल बनाता है जिसे वापस आयात किया जा सकता है",
|
||||
"buMod": "बैकअप फ़ाइल को कहीं और संशोधित किया गया था",
|
||||
"cat": "वर्ग",
|
||||
"cBtn": "रद्द करना",
|
||||
"Challenging": "चुनौतीपूर्ण",
|
||||
"Chinese": "चीनी",
|
||||
"clove": "लौंग",
|
||||
"cm": "सेंटीमीटर",
|
||||
"cmbs": "संयोजनों",
|
||||
"conBtn": "जारी रखें",
|
||||
"conf": "कन्फ़र्म",
|
||||
"cookT": "पकाने का समय",
|
||||
"cPic": "फ़ोटो संपादित करें",
|
||||
"Created": "बनाया था",
|
||||
"cui": "भोजन",
|
||||
"cup": "कप",
|
||||
"Cup": "कप",
|
||||
"dAgo": "%s दिन पहले",
|
||||
"Danish": "दानिश",
|
||||
"Dark": "गहरा",
|
||||
"db": "डेटाबेस",
|
||||
"dBtn": "हटाएँ",
|
||||
"December": "दिसंबर",
|
||||
"delRecInfo": "आप के बारे में स्थायी रूप से नुस्खा %s को नष्ट करने के लिए कर रहे हैं",
|
||||
"delRecsInfo": "आप %s को स्थायी रूप से हटाने वाले हैं",
|
||||
"Desserts": "डेसर्ट",
|
||||
"detailed": "विस्तृत",
|
||||
"Difficulty level": "कठिनाई स्तर",
|
||||
"dinner": "रात का खाना",
|
||||
"disBtn": "रद्द करें",
|
||||
"disc": "इस रेसिपी में अनचाहे बदलाव हैं। आप क्या करना चाहेंगे?",
|
||||
"donate": "दान करना",
|
||||
"dozen": "darjan",
|
||||
"drop": "बूंद",
|
||||
"dsp": "मझोली चम्मच",
|
||||
"Easy": "आसान",
|
||||
"editRec": "नुस्खा संपादित करें",
|
||||
"Egyptian": "मिस्र के",
|
||||
"English": "अंग्रेज़ी",
|
||||
"EnRecipes": "एनरेसिपीज़",
|
||||
"expBu": "पूर्ण बैकअप निर्यात करें",
|
||||
"expip": "निर्यात प्रगति पर है",
|
||||
"expSuc": "निर्यात की सफलता",
|
||||
"favourites": "पसंदीदा",
|
||||
"February": "फ़रवरी",
|
||||
"Filipino": "filipino",
|
||||
"Filtered recipes": "फ़िल्टर किए गए व्यंजनों",
|
||||
"fl oz": "द्रव-औंस",
|
||||
"fltr": "फ़िल्टर",
|
||||
"Fluid Ounce": "द्रव-औंस",
|
||||
"French": "फ्रेंच",
|
||||
"FRI": "शुक्र",
|
||||
"fsList": "आपकी पसंदीदा रेसिपी यहाँ सूचीबद्ध हैं",
|
||||
"g": "ग्राम",
|
||||
"gal": "गैलन",
|
||||
"Gallon": "गैलन",
|
||||
"German": "जर्मन",
|
||||
"gh": "गिटहब पर देखें",
|
||||
"Gram": "ग्राम",
|
||||
"Greek": "यूनानी",
|
||||
"grid": "ग्रिड",
|
||||
"grocery": "किराना सूची",
|
||||
"guide": "उपयोगकर्ता गाइड",
|
||||
"Healthy": "स्वस्थ",
|
||||
"hr": "घंटे",
|
||||
"impBu": "आयात आंकड़ा",
|
||||
"impFail": "आयात विफल रहा",
|
||||
"impInfo": "इस ऐप द्वारा निर्यात किए गए पूर्ण बैकअप का समर्थन करता है",
|
||||
"impip": "आयात जारी है",
|
||||
"impSuc": "आयात सफलता",
|
||||
"in": "इंच",
|
||||
"Indian": "भारतीय",
|
||||
"ings": "सामग्री",
|
||||
"inss": "अनुदेश",
|
||||
"intf": "इंटरफेस",
|
||||
"invFile": "अवैध फाइल",
|
||||
"Irish": "आयरिश",
|
||||
"it": "मद",
|
||||
"Italian": "इतालवी",
|
||||
"Jamaican": "जमैका",
|
||||
"January": "जनवरी",
|
||||
"Japanese": "जापानी",
|
||||
"Jewish": "यहूदी",
|
||||
"joinTG": "टेलीग्राम समूह में शामिल हों",
|
||||
"July": "जुलाई",
|
||||
"June": "जून",
|
||||
"kEdit": "संपादन रखें",
|
||||
"Kenyan": "केन्याई",
|
||||
"kg": "किलोग्राम",
|
||||
"Kilogram": "किलोग्राम",
|
||||
"Korean": "कोरियाई",
|
||||
"l": "लीटर",
|
||||
"lang": "भाषा",
|
||||
"large": "बड़ा",
|
||||
"Last updated": "आखरी अपडेट",
|
||||
"lb": "पौंड",
|
||||
"leaf": "पत्ता",
|
||||
"Light": "हल्का",
|
||||
"listVM": "सूची दृश्य मोड",
|
||||
"Litre": "लीटर",
|
||||
"Loaf": "पाव रोटी",
|
||||
"ltAgo": "बहुत पहले",
|
||||
"lunch": "दोपहर का भोजन",
|
||||
"mAgo": "%s महीने पहले",
|
||||
"Main dishes": "मुख्य व्यंजन",
|
||||
"March": "जुलूस",
|
||||
"May": "मई",
|
||||
"Meat": "मांस",
|
||||
"medium": "मध्यम",
|
||||
"Mexican": "मैक्सिकन",
|
||||
"mg": "मिलीग्राम",
|
||||
"Millilitre": "मिलीलीटर",
|
||||
"min": "मिनट",
|
||||
"minimal": "कम से कम",
|
||||
"ml": "मिली लीटर",
|
||||
"Moderate": "उदारवादी",
|
||||
"MON": "सोम",
|
||||
"newCui": "नए भोजन",
|
||||
"Newest first": "नवीनतम पहले",
|
||||
"newRec": "नई रेसिपी",
|
||||
"newUnit": "नई इकाई",
|
||||
"Nigerian": "नाइजीरियाई",
|
||||
"nLangInfo": "नई भाषा का उपयोग करने के लिए एनरेसिपीज़ को पुनः आरंभ करें",
|
||||
"nNBtn": "अब मत",
|
||||
"no": "टिप्पणी",
|
||||
"noAccSensor": "एक्सेलेरोमीटर सेंसर या तो अक्षम है या काम नहीं कर रहा है",
|
||||
"noFavs": "अभी तक कोई पसंदीदा नहीं",
|
||||
"Noodles": "नूडल्स",
|
||||
"noRecs": "कोई भी रेसिपी आपकी खोज से मेल नहीं खाती",
|
||||
"noRecsInL": "यहां कोई भी रेसिपी आपकी खोज से मेल नहीं खाती है",
|
||||
"nos": "नोट्स",
|
||||
"November": "नवंबर",
|
||||
"nwCat": "नई श्रेणी",
|
||||
"nwYiU": "नई उपज इकाई",
|
||||
"October": "अक्टूबर",
|
||||
"OK": "ठीक है",
|
||||
"Oldest first": "सबसे पुराना पहले",
|
||||
"opts": "विकल्प",
|
||||
"Ounce": "औंस",
|
||||
"oz": "औंस",
|
||||
"Pasta": "पास्ता",
|
||||
"Patty": "पैटी",
|
||||
"photogrid": "फोटो ग्रिड",
|
||||
"pht": "पकाने की विधि फोटो",
|
||||
"piece": "टुकड़े",
|
||||
"Piece": "टुकड़ा",
|
||||
"pinch": "chutakee",
|
||||
"planner": "भोजन नियोजक",
|
||||
"plsAdd": "एक जोड़ने के लिए प्लस बटन का उपयोग करें",
|
||||
"Portuguese": "पुर्तगाली",
|
||||
"Poultry": "मुर्गी पालन",
|
||||
"Pound": "पौंड",
|
||||
"prepT": "तैयारी का समय",
|
||||
"priv": "गोपनीयता नीति",
|
||||
"pt": "पिंट",
|
||||
"qt": "चौथाई गेलन",
|
||||
"Quickest first": "सबसे पहले",
|
||||
"Rating": "रेटिंग",
|
||||
"rBtn": "हटाना",
|
||||
"rec": "नुस्खा",
|
||||
"recE": "पहले से ही मौजूद:",
|
||||
"recF": "रेसिपी मिली",
|
||||
"recI": "आयातित:",
|
||||
"recListEmp": "यहाँ कुछ नहीं! कुछ व्यंजनों को जोड़ें और फिर से प्रयास करें",
|
||||
"recPic": "पकाने की विधि फोटो",
|
||||
"recRm": "नुस्खा हटा दिया गया",
|
||||
"recs": "व्यंजनों",
|
||||
"recTitle": "मेरी हेल्दी रेसिपी",
|
||||
"recU": "अपडेट किया गया:",
|
||||
"req": "आवश्यक %s",
|
||||
"resNF": "पकाने की विधि नहीं मिली",
|
||||
"rest": "रीसेट",
|
||||
"restCatL": "श्रेणी सूची रीसेट करें",
|
||||
"restCuiL": "व्यंजनों की सूची रीसेट करें",
|
||||
"restDone": "सफल रीसेट करें",
|
||||
"restInfo": "सूची को रीसेट करने से उपयोगकर्ता द्वारा बनाई गई प्रविष्टियां हट जाएंगी और डिफ़ॉल्ट प्रविष्टियों को पुनर्स्थापित किया जाएगा। मौजूदा व्यंजनों को प्रभावित नहीं किया जाएगा।",
|
||||
"restUL": "इकाई सूची रीसेट करें",
|
||||
"restYUL": "उपज इकाई सूची रीसेट करें",
|
||||
"Rice": "चावल",
|
||||
"rmCatInfo": "आप श्रेणी सूची से %s को हटाने के बारे में हैं",
|
||||
"rmCmb": "संयोजन हटाया",
|
||||
"rmCuiInfo": "आप के बारे में भोजन की सूची से %s को दूर करने के लिए कर रहे है",
|
||||
"rmIng": "संघटक हटाया गया",
|
||||
"rmIns": "निर्देश हटाया गया",
|
||||
"rmN": "नोट निकाला गया",
|
||||
"rmUInfo": "आप के बारे में इकाई सूची से %s को दूर करने के लिए कर रहे है",
|
||||
"rmYUInfo": "आप उपज इकाई सूची से %s को हटाने के बारे में हैं",
|
||||
"Roll": "रोल",
|
||||
"rp": "फोटो निकालें",
|
||||
"rst": "पुनरारंभ",
|
||||
"Russian": "रूसी",
|
||||
"Salads": "सलाद",
|
||||
"SAT": "शनि",
|
||||
"Sauces": "सॉस",
|
||||
"Scottish": "स्कॉटिश",
|
||||
"Seafood": "समुद्री भोजन",
|
||||
"selRec": "नुस्खा चुनें",
|
||||
"September": "सितंबर",
|
||||
"ser": "खोज",
|
||||
"Serving": "सर्विंग",
|
||||
"SET": "सेट",
|
||||
"Settings": "समायोजन",
|
||||
"shr": "शेयर",
|
||||
"Side dishes": "सह भोजन",
|
||||
"simple": "सरल",
|
||||
"Slowest first": "पहले धीमी",
|
||||
"sltd": "चयनित",
|
||||
"small": "छोटा",
|
||||
"snacks": "नाश्ता",
|
||||
"Soups": "सूप",
|
||||
"Spanish": "स्पेनिश",
|
||||
"Sri Lankan": "श्रीलंका",
|
||||
"srpu": "शेयर करें रेसिपी फोटो...",
|
||||
"srt": "तरह",
|
||||
"sru": "शेयर रेसिपी...",
|
||||
"stars": "स्टार रेटिंग",
|
||||
"stick": "लाठी",
|
||||
"stp": "कदम",
|
||||
"strAdd": "अपने व्यंजनों को जोड़ना शुरू करें!",
|
||||
"SUN": "रवि",
|
||||
"sVw": "यादृच्छिक नुस्खा देखने के लिए हिलाएं",
|
||||
"sVwInfo": "जब आप तय नहीं कर सकते तो आपको क्या खाना बनाना है, यह चुनने में मदद करता है",
|
||||
"Swedish": "स्वीडिश",
|
||||
"swm": "सप्ताह की शुरुआत सोमवार से करें",
|
||||
"sysDef": "प्रणालीगत चूक",
|
||||
"Tablespoon": "बड़ा चमचा",
|
||||
"tbsp": "बड़ा चमचा",
|
||||
"Teaspoon": "छोटी चम्मच",
|
||||
"Thai": "थाई",
|
||||
"Theme": "थीम",
|
||||
"THU": "गुरु",
|
||||
"title": "शीर्षक",
|
||||
"tLInfo": "जिन व्यंजनों को आप बाद में आज़माना चाहते हैं, वे यहाँ सूचीबद्ध हैं",
|
||||
"today": "आज",
|
||||
"triedInfo": "आपने यह %s नुस्खा द्वारा आजमाया",
|
||||
"trnsl": "अनुवाद करना",
|
||||
"trylater": "बाद में कोशिश करें",
|
||||
"trySer": "सभी व्यंजनों में खोजे?",
|
||||
"ts": "टैग",
|
||||
"tsInfo": "रिक्त स्थान के साथ अलग",
|
||||
"tsp": "छोटी चम्मच",
|
||||
"TUE": "मंगल",
|
||||
"Turkish": "तुर्की",
|
||||
"Undefined": "अपरिभाषित",
|
||||
"unit": "इकाई",
|
||||
"Unit": "इकाई",
|
||||
"unsaved": "अनकवित परिवर्तन",
|
||||
"untRec": "शीर्षकहीन नुस्खा",
|
||||
"Vegan": "वीगन",
|
||||
"Vegetarian": "शाकाहारी",
|
||||
"Vietnamese": "वियतनामी",
|
||||
"wAgo": "%s हफ्ते पहले",
|
||||
"WED": "बुध",
|
||||
"yesterday": "कल",
|
||||
"yieldQ": "उपज की मात्रा",
|
||||
"yieldU": "उपज इकाई",
|
||||
"yld": "मान जाना",
|
||||
"buto": "%s में बैकअप लिया गया",
|
||||
"sysDefB": "प्रणालीगत चूक + काला"
|
||||
"aap": "एक तस्वीर लगाओ",
|
||||
"About": "तकरीबन",
|
||||
"aBtn": "जोड़ें",
|
||||
"aD": "सब कुछ कर दिया!",
|
||||
"addCmbBtn": "संयोजन जोड़ें",
|
||||
"aFBu": "बैकअप करने के लिए एक नुस्खा जोड़ें",
|
||||
"aIngBtn": "सामग्री जोड़ें",
|
||||
"allCats": "सब वर्ग",
|
||||
"allCuis": "सभी व्यंजनों",
|
||||
"allTs": "सभी टैग",
|
||||
"American": "अमेरिकन",
|
||||
"aNBtn": "नया जोड़ो",
|
||||
"aNoBtn": "नोट जोड़ें",
|
||||
"app.name": "एनरेसिपीज़",
|
||||
"appCrd": "एनरेसिपीज़ के माध्यम से साझा किया गया। इसे F-Droid, IzzyOnDroid या Play Store पर प्राप्त करें।",
|
||||
"Appetizers": "ऐपेटाइज़र",
|
||||
"appInfo": "एनरेसिपीज़ एक खुला स्रोत, गोपनीयता-अनुकूल डिजिटल रसोई की किताब है जो आपको अपने व्यंजनों को बनाने, प्रबंधित करने और साझा करने देता है",
|
||||
"apply": "लागू",
|
||||
"appRst": "एप्लिकेशन पुनरारंभ की आवश्यकता है",
|
||||
"aStpBtn": "निर्देश जोड़ें",
|
||||
"Barbecue": "बारबेक्यू",
|
||||
"Beverages": "पेय",
|
||||
"Black": "काला",
|
||||
"Brazilian": "ब्राजील",
|
||||
"Breads": "ब्रेड",
|
||||
"breakfast": "सुबह का नाश्ता",
|
||||
"British": "अंग्रेजों",
|
||||
"buEmp": "बैकअप फ़ाइल खाली है",
|
||||
"buFol": "बैकअप फ़ोल्डर",
|
||||
"buInc": "विकृत या भ्रष्ट बैकअप फ़ाइल",
|
||||
"buInfo": "आपके सभी डेटा युक्त एक ज़िप फ़ाइल बनाता है जिसे वापस आयात किया जा सकता है",
|
||||
"buMod": "बैकअप फ़ाइल को कहीं और संशोधित किया गया था",
|
||||
"cat": "वर्ग",
|
||||
"cBtn": "रद्द करना",
|
||||
"Challenging": "चुनौतीपूर्ण",
|
||||
"Chinese": "चीनी",
|
||||
"clove": "लौंग",
|
||||
"cm": "सेंटीमीटर",
|
||||
"cmbs": "संयोजनों",
|
||||
"conBtn": "जारी रखें",
|
||||
"conf": "कन्फ़र्म",
|
||||
"cookT": "पकाने का समय",
|
||||
"cPic": "फ़ोटो संपादित करें",
|
||||
"Created": "बनाया था",
|
||||
"cui": "भोजन",
|
||||
"cup": "कप",
|
||||
"Cup": "कप",
|
||||
"dAgo": "%s दिन पहले",
|
||||
"Danish": "दानिश",
|
||||
"Dark": "गहरा",
|
||||
"db": "डेटाबेस",
|
||||
"dBtn": "हटाएँ",
|
||||
"delRecInfo": "आप के बारे में स्थायी रूप से नुस्खा %s को नष्ट करने के लिए कर रहे हैं",
|
||||
"delRecsInfo": "आप %s को स्थायी रूप से हटाने वाले हैं",
|
||||
"Desserts": "डेसर्ट",
|
||||
"detailed": "विस्तृत",
|
||||
"Difficulty level": "कठिनाई स्तर",
|
||||
"dinner": "रात का खाना",
|
||||
"disBtn": "रद्द करें",
|
||||
"disc": "इस रेसिपी में अनचाहे बदलाव हैं। आप क्या करना चाहेंगे?",
|
||||
"donate": "दान करना",
|
||||
"dozen": "darjan",
|
||||
"drop": "बूंद",
|
||||
"dsp": "मझोली चम्मच",
|
||||
"Easy": "आसान",
|
||||
"editRec": "नुस्खा संपादित करें",
|
||||
"Egyptian": "मिस्र के",
|
||||
"English": "अंग्रेज़ी",
|
||||
"EnRecipes": "एनरेसिपीज़",
|
||||
"expBu": "पूर्ण बैकअप निर्यात करें",
|
||||
"expip": "निर्यात प्रगति पर है",
|
||||
"expSuc": "निर्यात की सफलता",
|
||||
"favourites": "पसंदीदा",
|
||||
"Filipino": "filipino",
|
||||
"Filtered recipes": "फ़िल्टर किए गए व्यंजनों",
|
||||
"fl oz": "द्रव-औंस",
|
||||
"fltr": "फ़िल्टर",
|
||||
"Fluid Ounce": "द्रव-औंस",
|
||||
"French": "फ्रेंच",
|
||||
"fsList": "आपकी पसंदीदा रेसिपी यहाँ सूचीबद्ध हैं",
|
||||
"g": "ग्राम",
|
||||
"gal": "गैलन",
|
||||
"Gallon": "गैलन",
|
||||
"German": "जर्मन",
|
||||
"gh": "गिटहब पर देखें",
|
||||
"Gram": "ग्राम",
|
||||
"Greek": "यूनानी",
|
||||
"grid": "ग्रिड",
|
||||
"grocery": "किराना सूची",
|
||||
"guide": "उपयोगकर्ता गाइड",
|
||||
"Healthy": "स्वस्थ",
|
||||
"hr": "घंटे",
|
||||
"impBu": "आयात आंकड़ा",
|
||||
"impFail": "आयात विफल रहा",
|
||||
"impInfo": "इस ऐप द्वारा निर्यात किए गए पूर्ण बैकअप का समर्थन करता है",
|
||||
"impip": "आयात जारी है",
|
||||
"impSuc": "आयात सफलता",
|
||||
"in": "इंच",
|
||||
"Indian": "भारतीय",
|
||||
"ings": "सामग्री",
|
||||
"inss": "अनुदेश",
|
||||
"intf": "इंटरफेस",
|
||||
"invFile": "अवैध फाइल",
|
||||
"Irish": "आयरिश",
|
||||
"it": "मद %s",
|
||||
"Italian": "इतालवी",
|
||||
"Jamaican": "जमैका",
|
||||
"Japanese": "जापानी",
|
||||
"Jewish": "यहूदी",
|
||||
"joinTG": "टेलीग्राम समूह में शामिल हों",
|
||||
"kEdit": "संपादन रखें",
|
||||
"Kenyan": "केन्याई",
|
||||
"kg": "किलोग्राम",
|
||||
"Kilogram": "किलोग्राम",
|
||||
"Korean": "कोरियाई",
|
||||
"l": "लीटर",
|
||||
"lang": "भाषा",
|
||||
"large": "बड़ा",
|
||||
"Last updated": "आखरी अपडेट",
|
||||
"lb": "पौंड",
|
||||
"leaf": "पत्ता",
|
||||
"Light": "हल्का",
|
||||
"listVM": "सूची दृश्य मोड",
|
||||
"Litre": "लीटर",
|
||||
"Loaf": "पाव रोटी",
|
||||
"ltAgo": "बहुत पहले",
|
||||
"lunch": "दोपहर का भोजन",
|
||||
"mAgo": "%s महीने पहले",
|
||||
"Main dishes": "मुख्य व्यंजन",
|
||||
"Meat": "मांस",
|
||||
"medium": "मध्यम",
|
||||
"Mexican": "मैक्सिकन",
|
||||
"mg": "मिलीग्राम",
|
||||
"Millilitre": "मिलीलीटर",
|
||||
"min": "मिनट",
|
||||
"minimal": "कम से कम",
|
||||
"ml": "मिली लीटर",
|
||||
"Moderate": "उदारवादी",
|
||||
"newCui": "नए भोजन",
|
||||
"Newest first": "नवीनतम पहले",
|
||||
"newRec": "नई रेसिपी",
|
||||
"newUnit": "नई इकाई",
|
||||
"Nigerian": "नाइजीरियाई",
|
||||
"nLangInfo": "नई भाषा का उपयोग करने के लिए एनरेसिपीज़ को पुनः आरंभ करें",
|
||||
"nNBtn": "अब मत",
|
||||
"no": "टिप्पणी",
|
||||
"noAccSensor": "एक्सेलेरोमीटर सेंसर या तो अक्षम है या काम नहीं कर रहा है",
|
||||
"noFavs": "अभी तक कोई पसंदीदा नहीं",
|
||||
"Noodles": "नूडल्स",
|
||||
"noRecs": "कोई भी रेसिपी आपकी खोज से मेल नहीं खाती",
|
||||
"noRecsInL": "यहां कोई भी रेसिपी आपकी खोज से मेल नहीं खाती है",
|
||||
"nos": "नोट्स",
|
||||
"nwCat": "नई श्रेणी",
|
||||
"nwYiU": "नई उपज इकाई",
|
||||
"OK": "ठीक है",
|
||||
"Oldest first": "सबसे पुराना पहले",
|
||||
"opts": "विकल्प",
|
||||
"Ounce": "औंस",
|
||||
"oz": "औंस",
|
||||
"Pasta": "पास्ता",
|
||||
"Patty": "पैटी",
|
||||
"photogrid": "फोटो ग्रिड",
|
||||
"pht": "पकाने की विधि फोटो",
|
||||
"piece": "टुकड़े",
|
||||
"Piece": "टुकड़ा",
|
||||
"pinch": "chutakee",
|
||||
"planner": "भोजन नियोजक",
|
||||
"plsAdd": "एक जोड़ने के लिए + बटन का प्रयोग करें",
|
||||
"Portuguese": "पुर्तगाली",
|
||||
"Poultry": "मुर्गी पालन",
|
||||
"Pound": "पौंड",
|
||||
"prepT": "तैयारी का समय",
|
||||
"priv": "गोपनीयता नीति",
|
||||
"pt": "पिंट",
|
||||
"qt": "चौथाई गेलन",
|
||||
"Quickest first": "सबसे पहले",
|
||||
"Rating": "रेटिंग",
|
||||
"rBtn": "हटाना",
|
||||
"rec": "नुस्खा",
|
||||
"recE": "पहले से ही मौजूद:",
|
||||
"recF": "रेसिपी मिली",
|
||||
"recI": "आयातित:",
|
||||
"recListEmp": "यहाँ कुछ नहीं! कुछ व्यंजनों को जोड़ें और फिर से प्रयास करें",
|
||||
"recPic": "पकाने की विधि फोटो",
|
||||
"recRm": "नुस्खा हटा दिया गया",
|
||||
"recs": "व्यंजनों",
|
||||
"recTitle": "मेरी हेल्दी रेसिपी",
|
||||
"recU": "अपडेट किया गया:",
|
||||
"req": "आवश्यक %s",
|
||||
"resNF": "पकाने की विधि नहीं मिली",
|
||||
"rest": "रीसेट",
|
||||
"restCatL": "श्रेणी सूची रीसेट करें",
|
||||
"restCuiL": "व्यंजनों की सूची रीसेट करें",
|
||||
"restDone": "सफल रीसेट करें",
|
||||
"restInfo": "सूची को रीसेट करने से उपयोगकर्ता द्वारा बनाई गई प्रविष्टियां हट जाएंगी और डिफ़ॉल्ट प्रविष्टियों को पुनर्स्थापित किया जाएगा। मौजूदा व्यंजनों को प्रभावित नहीं किया जाएगा।",
|
||||
"restUL": "इकाई सूची रीसेट करें",
|
||||
"restYUL": "उपज इकाई सूची रीसेट करें",
|
||||
"Rice": "चावल",
|
||||
"rmCatInfo": "आप श्रेणी सूची से %s को हटाने के बारे में हैं",
|
||||
"rmCmb": "संयोजन हटाया",
|
||||
"rmCuiInfo": "आप के बारे में भोजन की सूची से %s को दूर करने के लिए कर रहे है",
|
||||
"rmIng": "संघटक हटाया गया",
|
||||
"rmIns": "निर्देश हटाया गया",
|
||||
"rmN": "नोट निकाला गया",
|
||||
"rmUInfo": "आप के बारे में इकाई सूची से %s को दूर करने के लिए कर रहे है",
|
||||
"rmYUInfo": "आप उपज इकाई सूची से %s को हटाने के बारे में हैं",
|
||||
"Roll": "रोल",
|
||||
"rp": "फोटो निकालें",
|
||||
"rst": "पुनरारंभ",
|
||||
"Russian": "रूसी",
|
||||
"Salads": "सलाद",
|
||||
"Sauces": "सॉस",
|
||||
"Scottish": "स्कॉटिश",
|
||||
"Seafood": "समुद्री भोजन",
|
||||
"selRec": "नुस्खा चुनें",
|
||||
"ser": "खोज",
|
||||
"Serving": "सर्विंग",
|
||||
"SET": "सेट",
|
||||
"Settings": "समायोजन",
|
||||
"shr": "शेयर",
|
||||
"Side dishes": "सह भोजन",
|
||||
"simple": "सरल",
|
||||
"Slowest first": "पहले धीमी",
|
||||
"sltd": "चयनित",
|
||||
"small": "छोटा",
|
||||
"snacks": "नाश्ता",
|
||||
"Soups": "सूप",
|
||||
"Spanish": "स्पेनिश",
|
||||
"Sri Lankan": "श्रीलंका",
|
||||
"srpu": "शेयर करें रेसिपी फोटो...",
|
||||
"srt": "तरह",
|
||||
"sru": "शेयर रेसिपी...",
|
||||
"stars": "स्टार रेटिंग",
|
||||
"stick": "लाठी",
|
||||
"stp": "कदम %s",
|
||||
"strAdd": "अपने व्यंजनों को जोड़ना शुरू करें!",
|
||||
"sVw": "यादृच्छिक नुस्खा देखने के लिए हिलाएं",
|
||||
"sVwInfo": "जब आप तय नहीं कर सकते तो आपको क्या खाना बनाना है, यह चुनने में मदद करता है",
|
||||
"Swedish": "स्वीडिश",
|
||||
"swm": "सप्ताह की शुरुआत सोमवार से करें",
|
||||
"sysDef": "प्रणालीगत चूक",
|
||||
"Tablespoon": "बड़ा चमचा",
|
||||
"tbsp": "बड़ा चमचा",
|
||||
"Teaspoon": "छोटी चम्मच",
|
||||
"Thai": "थाई",
|
||||
"Theme": "थीम",
|
||||
"title": "शीर्षक",
|
||||
"tLInfo": "जिन व्यंजनों को आप बाद में आज़माना चाहते हैं, वे यहाँ सूचीबद्ध हैं",
|
||||
"today": "आज",
|
||||
"triedInfo": "आपने यह %s नुस्खा द्वारा आजमाया",
|
||||
"trnsl": "अनुवाद करना",
|
||||
"trylater": "बाद में कोशिश करें",
|
||||
"trySer": "सभी व्यंजनों में खोजे?",
|
||||
"ts": "टैग",
|
||||
"tsInfo": "रिक्त स्थान के साथ अलग",
|
||||
"tsp": "छोटी चम्मच",
|
||||
"Turkish": "तुर्की",
|
||||
"Undefined": "अपरिभाषित",
|
||||
"unit": "इकाई",
|
||||
"Unit": "इकाई",
|
||||
"unsaved": "अनकवित परिवर्तन",
|
||||
"untRec": "शीर्षकहीन नुस्खा",
|
||||
"Vegan": "वीगन",
|
||||
"Vegetarian": "शाकाहारी",
|
||||
"Vietnamese": "वियतनामी",
|
||||
"wAgo": "%s हफ्ते पहले",
|
||||
"yesterday": "कल",
|
||||
"yieldQ": "उपज की मात्रा",
|
||||
"yieldU": "उपज इकाई",
|
||||
"yld": "मान जाना",
|
||||
"buto": "%s में बैकअप लिया गया",
|
||||
"sysDefB": "प्रणालीगत चूक + काला",
|
||||
"fwr": "किस विधि के लिए?",
|
||||
"seconds": "सेकंड",
|
||||
"hours": "घंटे",
|
||||
"hour": "घंटा",
|
||||
"minutes": "मिनटो",
|
||||
"minute": "मिनट",
|
||||
"dlyDur": "विलंब अवधि",
|
||||
"tmrvbrt": "टाइमर वाइब्रेट",
|
||||
"tmrSnd": "टाइमर की आवाज़",
|
||||
"aTPrst": "प्रीसेट में जोड़ा गया",
|
||||
"prstBtn": "प्रीसेट",
|
||||
"tmr": "टाइमर %s",
|
||||
"delay": "देरी",
|
||||
"stop": "रुकें",
|
||||
"strtBtn": "शुरू",
|
||||
"ntmr": "नया टाइमर",
|
||||
"timer": "कुकिंग टाइमर",
|
||||
"sec": "सेकंड",
|
||||
"notifSetg": "अधिसूचना सेटिंग्स",
|
||||
"tmrRm": "टाइमर हटा दिया गया",
|
||||
"prsts": "प्रीसेट",
|
||||
"delPrst": "आप प्रीसेट से %s मिटाने वाले हैं",
|
||||
"ystr": "कल",
|
||||
"tmrw": "कल",
|
||||
"tdy": "आज",
|
||||
"cpy": "कॉपी",
|
||||
"calVM": "कैलेंडर दृश्य मोड",
|
||||
"oAP": "%1$s चल रहा है, %2$s रुका हुआ है",
|
||||
"ttv": "देखने के लिए टैप करें",
|
||||
"dismissAll": "सभी टाइमर्स खारिज करें",
|
||||
"dismiss": "खारिज",
|
||||
"texp": "%s टाइमर समाप्त हो गए",
|
||||
"wDBy": "%1$s वा %2$s की देरी से",
|
||||
"prstTU": "प्रीसेट समय अपडेट किया गया",
|
||||
"ccwt": "टाइमर्स के साथ आत्मविश्वास से पकाएं!",
|
||||
"gtD": "डेट पर जाएं",
|
||||
"random": "बेतरतीब",
|
||||
"esgbInfo": "यदि आपके पास नेविगेशन समस्याएं हैं तो इसे अक्षम करें",
|
||||
"esgb": "वापस जाने के लिए किनारे से स्वाइप करें",
|
||||
"ksavrInfo": "नुस्खा देखते समय स्क्रीन को बंद होने से रोकता है",
|
||||
"ksavr": "रेसिपी देखते समय स्क्रीन को चालू रखें",
|
||||
"rstBtn": "रीसेट",
|
||||
"add": "जोड़ना",
|
||||
"nvr": "कभी नहीँ",
|
||||
"otaw": "एक सप्ताह से अधिक पुराना",
|
||||
"otam": "एक महीने से अधिक पुराना",
|
||||
"otay": "एक वर्ष से अधिक पुराना",
|
||||
"admp": "भोजन योजनाओं को स्वतः हटाएं",
|
||||
"plsCrt": "एक बनाने के लिए + बटन का प्रयोग करें",
|
||||
"ehwmp": "भोजन योजना के साथ स्वस्थ खाओ!",
|
||||
"selMT": "भोजन का प्रकार चुनें",
|
||||
"d": "दिन",
|
||||
"wk": "सप्ताह",
|
||||
"mnth": "महीना",
|
||||
"sectRm": "धारा हटा दिया गया",
|
||||
"addSectBtn": "धारा जोड़ें",
|
||||
"sect": "भाग %s"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes adalah buku resep digital sumber terbuka, ramah privasi yang memungkinkan anda untuk membuat, mengatur dan berbagi resep",
|
||||
"apply": "MENERAPKAN",
|
||||
"appRst": "Aplikasi perlu dimulai ulang",
|
||||
"April": "April",
|
||||
"aStpBtn": "TAMBAH LANGKAH",
|
||||
"August": "Agustus",
|
||||
"Barbecue": "barbekyu",
|
||||
"Beverages": "Minuman",
|
||||
"Black": "Hitam",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Gelap",
|
||||
"db": "Basisdata",
|
||||
"dBtn": "HAPUS",
|
||||
"December": "Desember",
|
||||
"delRecInfo": "Anda akan menghapus resep %s secara permanen",
|
||||
"delRecsInfo": "Anda akan menghapus %s secara permanen",
|
||||
"Desserts": "Makanan pencuci mulut",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Ekspor sedang berlangsung",
|
||||
"expSuc": "Ekspor berhasil",
|
||||
"favourites": "Favorit",
|
||||
"February": "Februari",
|
||||
"Filipino": "Filipina",
|
||||
"Filtered recipes": "Resep yang difilter",
|
||||
"fl oz": "fl oz",
|
||||
"fltr": "Saring",
|
||||
"Fluid Ounce": "Ons Cairan",
|
||||
"French": "Perancis",
|
||||
"FRI": "JUM",
|
||||
"fsList": "Resep favorit Anda tercantum di sini",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -111,12 +106,9 @@
|
|||
"it": "Item",
|
||||
"Italian": "Italia",
|
||||
"Jamaican": "Jamaika",
|
||||
"January": "Januari",
|
||||
"Japanese": "Jepang",
|
||||
"Jewish": "Yahudi",
|
||||
"joinTG": "Gabung grup Telegram",
|
||||
"July": "Juli",
|
||||
"June": "Juni",
|
||||
"kEdit": "TETAP MENYUNTING",
|
||||
"Kenyan": "Kenya",
|
||||
"kg": "kg",
|
||||
|
@ -136,8 +128,6 @@
|
|||
"lunch": "Makan siang",
|
||||
"mAgo": "%s bulan yang lalu",
|
||||
"Main dishes": "Hidangan utama",
|
||||
"March": "Maret",
|
||||
"May": "Mei",
|
||||
"Meat": "Daging",
|
||||
"medium": "sedang",
|
||||
"Mexican": "Meksiko",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "paling sedikit",
|
||||
"ml": "ml",
|
||||
"Moderate": "Sedang",
|
||||
"MON": "SEN",
|
||||
"newCui": "Hidangan baru",
|
||||
"Newest first": "Yang terbaru",
|
||||
"newRec": "Resep baru",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "Tidak ada resep yang cocok dengan pencarian anda",
|
||||
"noRecsInL": "Tidak ada resep di sini yang cocok dengan pencarian Anda",
|
||||
"nos": "Catatan-catatan",
|
||||
"November": "November",
|
||||
"nwCat": "Kategori baru",
|
||||
"nwYiU": "Satuan hasil baru",
|
||||
"October": "Oktober",
|
||||
"OK": "Baik",
|
||||
"Oldest first": "Yang terlama",
|
||||
"opts": "Pilihan",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "Mulai ulang",
|
||||
"Russian": "Russia",
|
||||
"Salads": "Salad",
|
||||
"SAT": "SAB",
|
||||
"Sauces": "Saus",
|
||||
"Scottish": "Skotlandia",
|
||||
"Seafood": "Hidangan laut",
|
||||
"selRec": "Pilih resep",
|
||||
"September": "September",
|
||||
"ser": "Cari",
|
||||
"Serving": "Penyajian",
|
||||
"SET": "ATUR",
|
||||
|
@ -250,7 +235,6 @@
|
|||
"stick": "batang",
|
||||
"stp": "Langkah",
|
||||
"strAdd": "Mulai tambahkan resep Anda!",
|
||||
"SUN": "MIN",
|
||||
"sVw": "Kocok untuk melihat resep acak",
|
||||
"sVwInfo": "Membantu anda untuk memilih apa yang dimasak ketika anda tidak bisa menentukan",
|
||||
"Swedish": "Swedia",
|
||||
|
@ -261,7 +245,6 @@
|
|||
"Teaspoon": "Sendok teh",
|
||||
"Thai": "Thailand",
|
||||
"Theme": "Tema",
|
||||
"THU": "KAM",
|
||||
"title": "Judul",
|
||||
"tLInfo": "Resep yang ingin Anda coba nanti tercantum di sini",
|
||||
"today": "hari ini",
|
||||
|
@ -272,23 +255,42 @@
|
|||
"ts": "Tag",
|
||||
"tsInfo": "pisahkan dengan spasi",
|
||||
"tsp": "sdt",
|
||||
"TUE": "SEL",
|
||||
"Turkish": "Turki",
|
||||
"Undefined": "Belum terdefinisi",
|
||||
"unit": "Satuan",
|
||||
"Unit": "Satuan",
|
||||
"unsaved": "Perubahan yang belum disimpan",
|
||||
"untRec": "Resep tanpa judul",
|
||||
"Vegan": "Vegan",
|
||||
"Vegetarian": "Vegetarian",
|
||||
"Vegan": "vegan",
|
||||
"Vegetarian": "vegetarian",
|
||||
"Vietnamese": "Vietnam",
|
||||
"wAgo": "%s minggu yang lalu",
|
||||
"WED": "RAB",
|
||||
"yesterday": "kemarin",
|
||||
"yieldQ": "Kuantitas hasil",
|
||||
"yieldU": "Satuan hasil",
|
||||
"yld": "Menghasilkan",
|
||||
"buto": "Didukung ke %s",
|
||||
"sysDefB": "Default sistem + Hitam",
|
||||
"sec": "s"
|
||||
"sec": "s",
|
||||
"strtBtn": "MULAI",
|
||||
"ntmr": "Timer baru",
|
||||
"timer": "Timer Memasak",
|
||||
"seconds": "detik",
|
||||
"hours": "jam",
|
||||
"hour": "jam",
|
||||
"minutes": "menit",
|
||||
"minute": "menit",
|
||||
"dlyDur": "Durasi penundaan",
|
||||
"tmrvbrt": "Timer bergetar",
|
||||
"tmrSnd": "Suara timer",
|
||||
"aTPrst": "Ditambahkan ke preset",
|
||||
"fwr": "untuk resep yang mana?",
|
||||
"prstBtn": "PRESET",
|
||||
"tmr": "Timer %s",
|
||||
"delay": "Menunda",
|
||||
"stop": "Berhenti",
|
||||
"prsts": "Preset",
|
||||
"delPrst": "Anda akan menghapus %s dari presets",
|
||||
"tmrRm": "Timer dihapus",
|
||||
"notifSetg": "Pengaturan notifikasi"
|
||||
}
|
||||
|
|
|
@ -17,10 +17,8 @@
|
|||
"Appetizers": "Antipasti",
|
||||
"appInfo": "EnRecipes è un ricettario digitale a codice aperto e rispettoso della riservatezza che ti consente di creare, gestire e condividere le tue ricette",
|
||||
"apply": "APPLICA",
|
||||
"appRst": "Riavvio dell'app necessario",
|
||||
"April": "aprile",
|
||||
"appRst": "Riavvio dell’app necessario",
|
||||
"aStpBtn": "AGGIUNGI UN PASSO",
|
||||
"August": "agosto",
|
||||
"Barbecue": "Grigliata",
|
||||
"Beverages": "Bevande",
|
||||
"Black": "Nero",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Scuro",
|
||||
"db": "Banca dati",
|
||||
"dBtn": "ELIMINA",
|
||||
"December": "dicembre",
|
||||
"delRecInfo": "Stai per eliminare definitivamente la ricetta %s",
|
||||
"delRecsInfo": "Stai per eliminare definitivamente %s",
|
||||
"Desserts": "Dolci",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Esportazione in corso",
|
||||
"expSuc": "Exportation réussie",
|
||||
"favourites": "Preferiti",
|
||||
"February": "febbraio",
|
||||
"Filipino": "filippina",
|
||||
"Filtered recipes": "Ricette filtrate",
|
||||
"fl oz": "fl oz",
|
||||
"fltr": "Filtro",
|
||||
"Fluid Ounce": "Oncia liquida",
|
||||
"French": "francese",
|
||||
"FRI": "ven",
|
||||
"fsList": "Le tue ricette preferite sono elencate qui",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -111,12 +106,9 @@
|
|||
"it": "Voce",
|
||||
"Italian": "italiana",
|
||||
"Jamaican": "giamaicana",
|
||||
"January": "gennaio",
|
||||
"Japanese": "giapponese",
|
||||
"Jewish": "ebraica",
|
||||
"joinTG": "Unisciti al gruppo Telegram",
|
||||
"July": "luglio",
|
||||
"June": "giugno",
|
||||
"kEdit": "CONTINUA A MODIFICARE",
|
||||
"Kenyan": "keniota",
|
||||
"kg": "kg",
|
||||
|
@ -136,8 +128,6 @@
|
|||
"lunch": "Pranzo",
|
||||
"mAgo": "%s mesi fa",
|
||||
"Main dishes": "Piatti principali",
|
||||
"March": "marzo",
|
||||
"May": "maggio",
|
||||
"Meat": "Carne",
|
||||
"medium": "medio",
|
||||
"Mexican": "messicana",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "Minima",
|
||||
"ml": "ml",
|
||||
"Moderate": "Moderato",
|
||||
"MON": "lun",
|
||||
"newCui": "Nuova cucina",
|
||||
"Newest first": "Prima la più ricente",
|
||||
"newRec": "Nuova ricetta",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "Nessuna ricetta corrisponde alla tua ricerca",
|
||||
"noRecsInL": "Nessuna delle ricette qui corrisponde alla tua ricerca",
|
||||
"nos": "Note",
|
||||
"November": "novembre",
|
||||
"nwCat": "Nuova categoria",
|
||||
"nwYiU": "Nuova unità di resa",
|
||||
"October": "ottobre",
|
||||
"OK": "OK",
|
||||
"Oldest first": "Prima la più vecchia",
|
||||
"opts": "Opzioni",
|
||||
|
@ -179,7 +166,7 @@
|
|||
"Piece": "Pezzo",
|
||||
"pinch": "pizzico",
|
||||
"planner": "Pianificatore di pasti",
|
||||
"plsAdd": "Usa il pulsante più per aggiungerne uno",
|
||||
"plsAdd": "Usa il pulsante + per aggiungerne uno",
|
||||
"Portuguese": "portoghese",
|
||||
"Poultry": "Pollame",
|
||||
"Pound": "Libbra",
|
||||
|
@ -200,35 +187,33 @@
|
|||
"recs": "ricette",
|
||||
"recTitle": "La mia ricetta sana",
|
||||
"recU": "Aggiornate:",
|
||||
"req": "%s richiesto",
|
||||
"req": "%s necessario",
|
||||
"resNF": "Ricetta non trovata",
|
||||
"rest": "Ripristina",
|
||||
"restCatL": "Reimposta l'elenco delle categorie",
|
||||
"restCuiL": "Reimposta l'elenco cucina",
|
||||
"restCatL": "Reimposta l’elenco delle categorie",
|
||||
"restCuiL": "Reimposta l’elenco cucina",
|
||||
"restDone": "Reimpostazione eseguito",
|
||||
"restInfo": "Il ripristino di un elenco eliminerà le voci create dall'utente e ripristinerà le voci predefinite. Le ricette esistenti non saranno interessate.",
|
||||
"restUL": "Reimposta l'elenco delle unità",
|
||||
"restYUL": "Reimposta l'elenco delle unità di resa",
|
||||
"restInfo": "Il ripristino di un elenco eliminerà le voci create dall’utente e ripristinerà le voci predefinite. Le ricette esistenti non saranno interessate.",
|
||||
"restUL": "Reimposta l’elenco delle unità",
|
||||
"restYUL": "Reimposta l’elenco delle unità di resa",
|
||||
"Rice": "Riso",
|
||||
"rmCatInfo": "Stai per rimuovere %s dall'elenco delle categorie",
|
||||
"rmCatInfo": "Stai per rimuovere %s dall’elenco delle categorie",
|
||||
"rmCmb": "Combinazione rimossa",
|
||||
"rmCuiInfo": "Stai per rimuovere %s dall'elenco della cucina",
|
||||
"rmCuiInfo": "Stai per rimuovere %s dall’elenco della cucina",
|
||||
"rmIng": "Ingrediente rimosso",
|
||||
"rmIns": "Istruzione rimossa",
|
||||
"rmN": "Nota rimossa",
|
||||
"rmUInfo": "Stai per rimuovere %s dall'elenco delle unità",
|
||||
"rmYUInfo": "Stai per rimuovere %s dall'elenco delle unità di rendimento",
|
||||
"rmUInfo": "Stai per rimuovere %s dall’elenco delle unità",
|
||||
"rmYUInfo": "Stai per rimuovere %s dall’elenco delle unità di rendimento",
|
||||
"Roll": "Rotolo",
|
||||
"rp": "Rimuovi la foto",
|
||||
"rst": "RIAVVIA",
|
||||
"Russian": "russa",
|
||||
"Salads": "Insalate",
|
||||
"SAT": "sab",
|
||||
"Sauces": "Salse",
|
||||
"Scottish": "scozzese",
|
||||
"Seafood": "Frutti di mare",
|
||||
"selRec": "Seleziona una ricetta",
|
||||
"September": "settembre",
|
||||
"ser": "Cerca",
|
||||
"Serving": "Porzione",
|
||||
"SET": "IMPOSTA",
|
||||
|
@ -250,7 +235,6 @@
|
|||
"stick": "bastone",
|
||||
"stp": "Passo",
|
||||
"strAdd": "Inizia ad aggiungere le tue ricette!",
|
||||
"SUN": "dom",
|
||||
"sVw": "Scuoti per visualizzare una ricetta casuale",
|
||||
"sVwInfo": "Ti aiuta a scegliere cosa cucinare quando non puoi decidere",
|
||||
"Swedish": "svedese",
|
||||
|
@ -261,18 +245,16 @@
|
|||
"Teaspoon": "Cucchiaino",
|
||||
"Thai": "tailandese",
|
||||
"Theme": "Tema",
|
||||
"THU": "gio",
|
||||
"title": "Titolo",
|
||||
"tLInfo": "Le ricette che vuoi provare in seguito sono elencate qui",
|
||||
"today": "oggi",
|
||||
"triedInfo": "Hai provato questa ricetta %s",
|
||||
"trnsl": "Traduci",
|
||||
"trylater": "Prova più tardi",
|
||||
"trylater": "Da provare più tardi",
|
||||
"trySer": "CERCARE IN TUTTE LE RICETTE?",
|
||||
"ts": "Etichette",
|
||||
"tsInfo": "separa con spazi",
|
||||
"tsp": "cucchiaino",
|
||||
"TUE": "mar",
|
||||
"Turkish": "turca",
|
||||
"Undefined": "Indefinito",
|
||||
"unit": "unità",
|
||||
|
@ -283,7 +265,6 @@
|
|||
"Vegetarian": "Vegetariano",
|
||||
"Vietnamese": "vietnamita",
|
||||
"wAgo": "%s settimane fa",
|
||||
"WED": "mer",
|
||||
"yesterday": "ieri",
|
||||
"yieldQ": "Quantità di resa",
|
||||
"yieldU": "Unità di resa",
|
||||
|
@ -291,14 +272,13 @@
|
|||
"buto": "Backup salvato in %s",
|
||||
"sysDefB": "Predefinito del sistema + Nero",
|
||||
"tmr": "Contaminuti %s",
|
||||
"strtBtn": "AVVIO",
|
||||
"strtBtn": "AVVIA",
|
||||
"ntmr": "Nuovo contaminuti",
|
||||
"timer": "Contaminuti di cottura",
|
||||
"tmrvbrt": "Vibrazione contaminuti",
|
||||
"tmrSnd": "Suono del contaminuti",
|
||||
"aTPrst": "Aggiunto alle preimpostazioni",
|
||||
"fwr": "per quale ricetta?",
|
||||
"tmrPrsts": "Preimpostazioni del contaminuti",
|
||||
"prstBtn": "Preimpostazioni",
|
||||
"stop": "Ferma",
|
||||
"sec": "s",
|
||||
|
@ -308,5 +288,41 @@
|
|||
"minutes": "minuti",
|
||||
"minute": "minuto",
|
||||
"dlyDur": "Durata del ritardo",
|
||||
"delay": "Ritardo"
|
||||
"delay": "Ritarda",
|
||||
"notifSetg": "Impostazioni di notifica",
|
||||
"tmrRm": "Contaminuti rimosso",
|
||||
"delPrst": "Stai per eliminare %s dalle preimpostazioni",
|
||||
"prsts": "Preimpostazioni",
|
||||
"ttv": "Tocca per visualizzare",
|
||||
"dismissAll": "Disattiva tutti i contaminuti",
|
||||
"dismiss": "Diattiva",
|
||||
"texp": "%s contaminuti scaduti",
|
||||
"wDBy": "%1$s è stato ritardato di %2$s",
|
||||
"prstTU": "Tempo preimpostato aggiornato",
|
||||
"ccwt": "Cucina con fiducia con i contaminuti!",
|
||||
"gtD": "Vai alla data",
|
||||
"random": "Casuale",
|
||||
"ystr": "Ieri",
|
||||
"tmrw": "Domani",
|
||||
"tdy": "Oggi",
|
||||
"cpy": "copia",
|
||||
"d": "Giorno",
|
||||
"wk": "Settimana",
|
||||
"mnth": "Mese",
|
||||
"calVM": "Modalità di visualizzazione calendario",
|
||||
"oAP": "%1$s in corso, %2$s in pausa",
|
||||
"otaw": "Dopo una settimana",
|
||||
"otam": "Dopo un mese",
|
||||
"otay": "Dopo un anno",
|
||||
"nvr": "Mai",
|
||||
"admp": "Elimina automaticamente i piani pasto",
|
||||
"plsCrt": "Usa il pulsante + per crearne uno",
|
||||
"ehwmp": "Mangia sano con i piani dei pasti!",
|
||||
"selMT": "Seleziona il tipo di pasto",
|
||||
"rstBtn": "RIPRISTINA",
|
||||
"add": "Aggiungi",
|
||||
"esgbInfo": "Disabilita questa opzione se hai problemi di navigazione",
|
||||
"esgb": "Scorri sul bordo per tornare indietro",
|
||||
"ksavrInfo": "Impedisce che lo schermo si spenga durante la visualizzazione di una ricetta",
|
||||
"ksavr": "Mantieni lo schermo attivo durante la visualizzazione di una ricetta"
|
||||
}
|
||||
|
|
|
@ -12,14 +12,13 @@
|
|||
"American": "アメリカ料理",
|
||||
"aNBtn": "新しく追加",
|
||||
"aNoBtn": "メモを追加",
|
||||
"app.name": "EnRecipes",
|
||||
"appCrd": "EnRecipesから共有されました。F-DroidかIzzyOnDroidかPlayストアからダウンロード出来ます。",
|
||||
"Appetizers": "前菜",
|
||||
"appInfo": "EnRecipesはレシピを作成・管理・共有することができる、オープンソースでプライバシーに配慮したデジタル料理本です",
|
||||
"apply": "適用する",
|
||||
"appRst": "アプリの再起動が必要",
|
||||
"April": "4月",
|
||||
"aStpBtn": "手順を追加",
|
||||
"August": "8月",
|
||||
"Barbecue": "キャンプ料理",
|
||||
"Beverages": "飲物",
|
||||
"Black": "黒",
|
||||
|
@ -52,7 +51,6 @@
|
|||
"Dark": "ダーク",
|
||||
"db": "データベース",
|
||||
"dBtn": "削除",
|
||||
"December": "12月",
|
||||
"delRecInfo": "レシピ %s を削除しようとしています",
|
||||
"delRecsInfo": "%s 件のレシピを削除しようとしています",
|
||||
"Desserts": "デザート",
|
||||
|
@ -69,18 +67,17 @@
|
|||
"editRec": "レシピを編集する",
|
||||
"Egyptian": "エジプト料理",
|
||||
"English": "イングランド料理",
|
||||
"EnRecipes": "EnRecipes",
|
||||
"expBu": "バックアップをエクスポート",
|
||||
"expip": "エクスポートを実行中",
|
||||
"expSuc": "エクスポートに成功",
|
||||
"favourites": "お気に入り",
|
||||
"February": "2月",
|
||||
"Filipino": "フィリピン料理",
|
||||
"Filtered recipes": "絞り込み結果",
|
||||
"fl oz": "液量オンス",
|
||||
"fltr": "絞り込み",
|
||||
"Fluid Ounce": "液量オンス",
|
||||
"French": "フランス料理",
|
||||
"FRI": "金",
|
||||
"fsList": "お気に入りのレシピはここに表示されます",
|
||||
"g": "g",
|
||||
"gal": "ガロン",
|
||||
|
@ -107,12 +104,9 @@
|
|||
"Irish": "アイルランド料理",
|
||||
"Italian": "イタリア料理",
|
||||
"Jamaican": "ジャマイカ料理",
|
||||
"January": "1月",
|
||||
"Japanese": "和食",
|
||||
"Jewish": "ユダヤ料理",
|
||||
"joinTG": "Telegramグループに参加",
|
||||
"July": "7月",
|
||||
"June": "6月",
|
||||
"kEdit": "編集を続ける",
|
||||
"Kenyan": "ケニア料理",
|
||||
"kg": "kg",
|
||||
|
@ -130,8 +124,6 @@
|
|||
"lunch": "昼食",
|
||||
"mAgo": "%s か月前",
|
||||
"Main dishes": "主菜",
|
||||
"March": "3月",
|
||||
"May": "5月",
|
||||
"Meat": "肉料理",
|
||||
"Mexican": "メキシコ料理",
|
||||
"mg": "mg",
|
||||
|
@ -140,7 +132,6 @@
|
|||
"minimal": "最小",
|
||||
"ml": "ml",
|
||||
"Moderate": "普通",
|
||||
"MON": "月",
|
||||
"newCui": "新しいジャンル",
|
||||
"Newest first": "新しい順",
|
||||
"newRec": "新しいレシピ",
|
||||
|
@ -154,10 +145,8 @@
|
|||
"noRecs": "検索に一致するレシピがありません",
|
||||
"noRecsInL": "検索に一致するレシピが見つかりませんでした",
|
||||
"nos": "メモ",
|
||||
"November": "11月",
|
||||
"nwCat": "新しいカテゴリー",
|
||||
"nwYiU": "新しい仕上がり単位",
|
||||
"October": "10月",
|
||||
"OK": "OK",
|
||||
"Oldest first": "古いもの順",
|
||||
"opts": "オプション",
|
||||
|
@ -213,12 +202,10 @@
|
|||
"rst": "再起動",
|
||||
"Russian": "ロシア料理",
|
||||
"Salads": "サラダ",
|
||||
"SAT": "土",
|
||||
"Sauces": "ソース",
|
||||
"Scottish": "スコットランド料理",
|
||||
"Seafood": "シーフード",
|
||||
"selRec": "レシピを選択",
|
||||
"September": "9月",
|
||||
"ser": "検索",
|
||||
"Serving": "人前",
|
||||
"SET": "設定",
|
||||
|
@ -238,7 +225,6 @@
|
|||
"stars": "星評価",
|
||||
"stp": "作り方",
|
||||
"strAdd": "レシピを追加しましょう!",
|
||||
"SUN": "日",
|
||||
"sVw": "振ってランダムなレシピを表示",
|
||||
"sVwInfo": "何を作るか決められないときに使います",
|
||||
"Swedish": "スウェーデン料理",
|
||||
|
@ -249,7 +235,6 @@
|
|||
"Teaspoon": "小さじ",
|
||||
"Thai": "タイ料理",
|
||||
"Theme": "テーマ",
|
||||
"THU": "木",
|
||||
"title": "タイトル",
|
||||
"tLInfo": "あとで試したいレシピはここに並びます",
|
||||
"today": "今日",
|
||||
|
@ -260,7 +245,6 @@
|
|||
"ts": "タグ",
|
||||
"tsInfo": "スペースで区切ってください",
|
||||
"tsp": "小さじ",
|
||||
"TUE": "火",
|
||||
"Turkish": "トルコ料理",
|
||||
"unit": "個",
|
||||
"Unit": "単位",
|
||||
|
@ -270,7 +254,6 @@
|
|||
"Vegetarian": "ベジタリアン",
|
||||
"Vietnamese": "ベトナム料理",
|
||||
"wAgo": "%s 週前",
|
||||
"WED": "水",
|
||||
"yesterday": "昨日",
|
||||
"yieldQ": "仕上がり分量",
|
||||
"yieldU": "仕上がり分量の単位",
|
||||
|
@ -287,5 +270,6 @@
|
|||
"it": "材料",
|
||||
"small": "小",
|
||||
"large": "大",
|
||||
"medium": "中"
|
||||
"medium": "中",
|
||||
"sec": "s"
|
||||
}
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
{}
|
620
app/i18n/ml.json
|
@ -1,293 +1,331 @@
|
|||
{
|
||||
"aap": "ഒരു ഫോട്ടോ അറ്റാച്ചുചെയ്യുക",
|
||||
"About": "കുറിച്ച്",
|
||||
"aBtn": "ചേർക്കുക",
|
||||
"aD": "എല്ലാം ചെയ്തു!",
|
||||
"addCmbBtn": "സംയോജനം ചേർക്കുക",
|
||||
"aFBu": "ഒരു ബാക്കപ്പ് നടത്താൻ ഒരു പാചകക്കുറിപ്പ് ചേർക്കുക",
|
||||
"aIngBtn": "ചേരുവ ചേർക്കുക",
|
||||
"allCats": "എല്ലാ വിഭാഗങ്ങളും",
|
||||
"allCuis": "എല്ലാ പാചകരീതികളും",
|
||||
"allTs": "എല്ലാ ടാഗുകളും",
|
||||
"American": "അമേരിക്കൻ",
|
||||
"aNBtn": "പുതിയത് ചേർക്കുക",
|
||||
"aNoBtn": "കുറിപ്പ് ചേര്ക്കുക",
|
||||
"app.name": "ൻന്റെസിപിഎസ്",
|
||||
"appCrd": "എന്റെരെസിപീസ് വഴി പങ്കിട്ടു. എഫ്-ആൻഡ്രോയിഡ്, ഇസിഓൺഡ്രോയിഡ് അല്ലെങ്കിൽ പ്ലേ സ്റ്റോറിൽ ഇത് നേടുക.",
|
||||
"Appetizers": "വിശപ്പ്",
|
||||
"appInfo": "നിങ്ങളുടെ പാചകക്കുറിപ്പുകൾ സൃഷ്ടിക്കാനും നിയന്ത്രിക്കാനും പങ്കിടാനും അനുവദിക്കുന്ന ഒരു ഓപ്പൺ സോഴ്സ്, സ്വകാര്യത കേന്ദ്രീകരിച്ച ഡിജിറ്റൽ പാചകപുസ്തകമാണ് എന്റെരെസിപീസ്",
|
||||
"apply": "പ്രയോഗിക്കുക",
|
||||
"appRst": "അപ്ലിക്കേഷൻ പുനരാരംഭിക്കൽ ആവശ്യമാണ്",
|
||||
"April": "ഏപ്രിൽ",
|
||||
"aStpBtn": "നിർദ്ദേശം ചേർക്കുക",
|
||||
"August": "ഓഗസ്റ്റ്",
|
||||
"Barbecue": "ബാർബിക്യൂ",
|
||||
"Beverages": "പാനീയങ്ങൾ",
|
||||
"Black": "കറുപ്പ്",
|
||||
"Brazilian": "ബ്രസീലിയൻ",
|
||||
"Breads": "ബ്രെഡുകൾ",
|
||||
"breakfast": "പ്രഭാതഭക്ഷണം",
|
||||
"British": "ബ്രിട്ടീഷ്",
|
||||
"buEmp": "ബാക്കപ്പ് ഫയൽ ശൂന്യമാണ്",
|
||||
"buFol": "ബാക്കപ്പ് ഫോൾഡർ",
|
||||
"buInc": "കേടായ അല്ലെങ്കിൽ കേടായ ബാക്കപ്പ് ഫയൽ",
|
||||
"buInfo": "തിരികെ ഇറക്കുമതി ചെയ്യാൻ കഴിയുന്ന നിങ്ങളുടെ എല്ലാ ഡാറ്റയും അടങ്ങിയ ഒരു ZIP ഫയൽ സൃഷ്ടിക്കുന്നു",
|
||||
"buMod": "ബാക്കപ്പ് ഫയൽ മറ്റെവിടെയെങ്കിലും പരിഷ്ക്കരിച്ചു",
|
||||
"cat": "വിഭാഗം",
|
||||
"cBtn": "റദ്ദാക്കുക",
|
||||
"Challenging": "വെല്ലുവിളിനിറഞ്ഞ",
|
||||
"Chinese": "ചൈനീസ്",
|
||||
"clove": "ഗ്രാമ്പൂ",
|
||||
"cm": "സെന്റിമീറ്റർ",
|
||||
"cmbs": "സംയോജനങ്ങൾ",
|
||||
"conBtn": "തുടരുക",
|
||||
"conf": "സ്ഥിരീകരിക്കുക",
|
||||
"cookT": "പാചക സമയം",
|
||||
"cPic": "ഫോട്ടോ എഡിറ്റുചെയ്യുക",
|
||||
"Created": "സൃഷ്ടിച്ചു",
|
||||
"cui": "പാചകരീതി",
|
||||
"cup": "കപ്പ്",
|
||||
"Cup": "കപ്പ്",
|
||||
"dAgo": "%s ദിവസം മുമ്പ്",
|
||||
"Danish": "ഡാനിഷ്",
|
||||
"Dark": "ഇരുണ്ടത്",
|
||||
"db": "ഡാറ്റാബേസ്",
|
||||
"dBtn": "ഇല്ലാതാക്കുക",
|
||||
"December": "ഡിസംബർ",
|
||||
"delRecInfo": "%s പാചകക്കുറിപ്പ് നിങ്ങൾ ശാശ്വതമായി ഇല്ലാതാക്കാൻ പോകുന്നു",
|
||||
"delRecsInfo": "നിങ്ങൾ %s ശാശ്വതമായി ഇല്ലാതാക്കാൻ പോകുന്നു",
|
||||
"Desserts": "മധുരപലഹാരങ്ങൾ",
|
||||
"detailed": "വിശദമായ",
|
||||
"Difficulty level": "വൈഷമ്യ നില",
|
||||
"dinner": "അത്താഴം",
|
||||
"disBtn": "നിരസിക്കുക",
|
||||
"disc": "ഈ പാചകക്കുറിപ്പിൽ സംരക്ഷിക്കാത്ത മാറ്റങ്ങളുണ്ട്. നിങ്ങൾ എന്താണ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നത്?",
|
||||
"donate": "സംഭാവനചെയ്യുക",
|
||||
"dozen": "ഡസൻ",
|
||||
"drop": "തുള്ളി",
|
||||
"dsp": "ഡെസേർട്ട് സ്പൂൺ",
|
||||
"Easy": "എളുപ്പമാണ്",
|
||||
"editRec": "പാചകക്കുറിപ്പ് എഡിറ്റുചെയ്യുക",
|
||||
"Egyptian": "ഈജിപ്ഷ്യൻ",
|
||||
"English": "ഇംഗ്ലീഷ്",
|
||||
"EnRecipes": "ൻന്റെസിപിഎസ്",
|
||||
"expBu": "പൂർണ്ണ ബാക്കപ്പ് എക്സ്പോർട്ടുചെയ്യുക",
|
||||
"expip": "കയറ്റുമതി പുരോഗതിയിലാണ്",
|
||||
"expSuc": "കയറ്റുമതി വിജയം",
|
||||
"favourites": "പ്രിയങ്കരങ്ങൾ",
|
||||
"February": "ഫെബ്രുവരി",
|
||||
"Filipino": "ഫിലിപ്പിനോ",
|
||||
"Filtered recipes": "ഫിൽട്ടർ ചെയ്ത പാചകക്കുറിപ്പുകൾ",
|
||||
"fl oz": "ഫ്ലൂയിഡ് un ൺസ്",
|
||||
"fltr": "ഫിൽട്ടർ ചെയ്യുക",
|
||||
"Fluid Ounce": "ഫ്ലൂയിഡ് un ൺസ്",
|
||||
"French": "ഫ്രഞ്ച്",
|
||||
"FRI": "വെള്ളി",
|
||||
"fsList": "നിങ്ങളുടെ പ്രിയപ്പെട്ട പാചകക്കുറിപ്പുകൾ ഇവിടെ പട്ടികപ്പെടുത്തിയിട്ടുണ്ട്",
|
||||
"g": "ഗ്രാം",
|
||||
"gal": "ഗാലൺ",
|
||||
"Gallon": "ഗാലൺ",
|
||||
"German": "ജർമ്മൻ",
|
||||
"gh": "GitHub- ൽ കാണുക",
|
||||
"Gram": "ഗ്രാം",
|
||||
"Greek": "ഗ്രീക്ക്",
|
||||
"grid": "ഗ്രിഡ്",
|
||||
"grocery": "പലചരക്ക് പട്ടിക",
|
||||
"guide": "ഉപയോക്തൃ ഗൈഡ്",
|
||||
"Healthy": "ആരോഗ്യമുള്ള",
|
||||
"hr": "മണിക്കൂർ",
|
||||
"impBu": "ഡാറ്റ ഇറക്കുമതി ചെയ്യുക",
|
||||
"impFail": "ഇറക്കുമതി പരാജയപ്പെട്ടു",
|
||||
"impInfo": "ഈ അപ്ലിക്കേഷൻ എക്സ്പോർട്ടുചെയ്ത പൂർണ്ണ ബാക്കപ്പുകൾ പിന്തുണയ്ക്കുന്നു",
|
||||
"impip": "ഇറക്കുമതി പുരോഗതിയിലാണ്",
|
||||
"impSuc": "ഇറക്കുമതി വിജയം",
|
||||
"in": "ഇഞ്ച്",
|
||||
"Indian": "ഇന്ത്യൻ",
|
||||
"ings": "ചേരുവകൾ",
|
||||
"inss": "നിർദ്ദേശങ്ങൾ",
|
||||
"intf": "ഇന്റർഫേസ്",
|
||||
"invFile": "അസാധുവായ ഫയൽ",
|
||||
"Irish": "ഐറിഷ്",
|
||||
"it": "ഇനം",
|
||||
"Italian": "ഇറ്റാലിയൻ",
|
||||
"Jamaican": "ജമൈക്കൻ",
|
||||
"January": "ജനുവരി",
|
||||
"Japanese": "ജാപ്പനീസ്",
|
||||
"Jewish": "ജൂതൻ",
|
||||
"joinTG": "ടെലിഗ്രാം ഗ്രൂപ്പിൽ ചേരുക",
|
||||
"July": "ജൂലൈ",
|
||||
"June": "ജൂൺ",
|
||||
"kEdit": "എഡിറ്റിംഗ് തുടരുക",
|
||||
"Kenyan": "കെനിയൻ",
|
||||
"kg": "കി. ഗ്രാം",
|
||||
"Kilogram": "കിലോഗ്രാം",
|
||||
"Korean": "കൊറിയൻ",
|
||||
"l": "ലിറ്റർ",
|
||||
"lang": "ഭാഷ",
|
||||
"large": "വലുത്",
|
||||
"Last updated": "അവസാനമായി പുതുക്കിയത്",
|
||||
"lb": "പൗണ്ട്",
|
||||
"leaf": "ഇല",
|
||||
"Light": "പ്രകാശം",
|
||||
"listVM": "പട്ടിക കാഴ്ച മോഡ്",
|
||||
"Litre": "ലിറ്റർ",
|
||||
"Loaf": "അപ്പം",
|
||||
"ltAgo": "വളരെക്കാലം മുമ്പ്",
|
||||
"lunch": "ഉച്ചഭക്ഷണം",
|
||||
"mAgo": "%s മാസം മുമ്പ്",
|
||||
"Main dishes": "പ്രധാന വിഭവങ്ങൾ",
|
||||
"March": "മാർച്ച്",
|
||||
"May": "മെയ്",
|
||||
"Meat": "മാംസം",
|
||||
"medium": "ഇടത്തരം",
|
||||
"Mexican": "മെക്സിക്കൻ",
|
||||
"mg": "മില്ലിഗ്രാം",
|
||||
"Millilitre": "മില്ലിലിറ്റർ",
|
||||
"min": "മിനിറ്റ്",
|
||||
"minimal": "കുറഞ്ഞത്",
|
||||
"ml": "മില്ലി",
|
||||
"Moderate": "മിതത്വം",
|
||||
"MON": "തിങ്കൾ",
|
||||
"newCui": "പുതിയ പാചകരീതി",
|
||||
"Newest first": "ആദ്യത്തെ പുതിയത്",
|
||||
"newRec": "പുതിയ പാചകക്കുറിപ്പ്",
|
||||
"newUnit": "പുതിയ യൂണിറ്റ്",
|
||||
"Nigerian": "നൈജീരിയൻ",
|
||||
"nLangInfo": "പുതിയ ഭാഷ ഉപയോഗിക്കുന്നതിന് എന്റെരെസിപീസ് പുനരാരംഭിക്കുക",
|
||||
"nNBtn": "ഇപ്പോൾ വേണ്ട",
|
||||
"no": "കുറിപ്പ്",
|
||||
"noAccSensor": "ആക്സിലറോമീറ്റർ സെൻസർ പ്രവർത്തനരഹിതമാക്കി അല്ലെങ്കിൽ പ്രവർത്തിക്കുന്നില്ല",
|
||||
"noFavs": "ഇതുവരെ പ്രിയപ്പെട്ട പാചകക്കുറിപ്പുകളൊന്നുമില്ല",
|
||||
"Noodles": "നൂഡിൽസ്",
|
||||
"noRecs": "പാചകക്കുറിപ്പുകളൊന്നും നിങ്ങളുടെ തിരയലുമായി പൊരുത്തപ്പെടുന്നില്ല",
|
||||
"noRecsInL": "ഇവിടെയുള്ള പാചകങ്ങളൊന്നും നിങ്ങളുടെ തിരയലുമായി പൊരുത്തപ്പെടുന്നില്ല",
|
||||
"nos": "കുറിപ്പുകൾ",
|
||||
"November": "നവംബർ",
|
||||
"nwCat": "പുതിയ വിഭാഗം",
|
||||
"nwYiU": "പുതിയ വിളവ് യൂണിറ്റ്",
|
||||
"October": "ഒക്ടോബർ",
|
||||
"OK": "ശരി",
|
||||
"Oldest first": "ആദ്യം പഴയത്",
|
||||
"opts": "ഓപ്ഷനുകൾ",
|
||||
"Ounce": "Un ൺസ്",
|
||||
"oz": "oun ൺസ്",
|
||||
"Pasta": "പാസ്ത",
|
||||
"Patty": "പാറ്റി",
|
||||
"photogrid": "ഫോട്ടോ ഗ്രിഡ്",
|
||||
"pht": "പാചകക്കുറിപ്പ് ഫോട്ടോ",
|
||||
"piece": "കഷണം",
|
||||
"Piece": "പീസ്",
|
||||
"pinch": "നുള്ള്",
|
||||
"planner": "ഭക്ഷണ പ്ലാനർ",
|
||||
"plsAdd": "ഒരെണ്ണം ചേർക്കാൻ പ്ലസ് ബട്ടൺ ഉപയോഗിക്കുക",
|
||||
"Portuguese": "പോർച്ചുഗീസ്",
|
||||
"Poultry": "കോഴി",
|
||||
"Pound": "പൗണ്ട്",
|
||||
"prepT": "തയ്യാറാക്കൽ സമയം",
|
||||
"priv": "സ്വകാര്യതാ നയം",
|
||||
"pt": "പിന്റ്",
|
||||
"qt": "ക്വാർട്ട്",
|
||||
"Quickest first": "ആദ്യ വേഗത്തിലുള്ളത്",
|
||||
"Rating": "റേറ്റിംഗ്",
|
||||
"rBtn": "നീക്കംചെയ്യുക",
|
||||
"rec": "പാചകക്കുറിപ്പ്",
|
||||
"recE": "നിലവിലുള്ളത്:",
|
||||
"recF": "പാചകക്കുറിപ്പുകൾ കണ്ടെത്തി",
|
||||
"recI": "ഇറക്കുമതി ചെയ്തത്:",
|
||||
"recListEmp": "ഇവിടെ ഒന്നുമില്ല! കുറച്ച് പാചകക്കുറിപ്പുകൾ ചേർത്ത് വീണ്ടും ശ്രമിക്കുക",
|
||||
"recPic": "പാചകക്കുറിപ്പ് ഫോട്ടോ",
|
||||
"recRm": "പാചകക്കുറിപ്പ് നീക്കംചെയ്തു",
|
||||
"recs": "പാചകക്കുറിപ്പുകൾ",
|
||||
"recTitle": "എന്റെ ആരോഗ്യകരമായ പാചകക്കുറിപ്പ്",
|
||||
"recU": "അപ്ഡേറ്റുചെയ്തത്:",
|
||||
"req": "ആവശ്യമായ %s",
|
||||
"resNF": "പാചകക്കുറിപ്പ് കണ്ടെത്തിയില്ല",
|
||||
"rest": "പുനഃക്രമീകരിക്കുക",
|
||||
"restCatL": "വിഭാഗ ലിസ്റ്റ് പുന .സജ്ജമാക്കുക",
|
||||
"restCuiL": "പാചകരീതി പട്ടിക പുന .സജ്ജമാക്കുക",
|
||||
"restDone": "പുന .സജ്ജീകരണം പൂർത്തിയായി",
|
||||
"restInfo": "ഒരു ലിസ്റ്റ് പുന .സജ്ജമാക്കുന്നത് ഉപയോക്താവ് സൃഷ്ടിച്ച എൻട്രികൾ ഇല്ലാതാക്കുകയും സ്ഥിരസ്ഥിതി എൻട്രികൾ പുന restore സ്ഥാപിക്കുകയും ചെയ്യും. നിലവിലുള്ള പാചകത്തെ ബാധിക്കില്ല.",
|
||||
"restUL": "യൂണിറ്റ് ലിസ്റ്റ് പുന .സജ്ജമാക്കുക",
|
||||
"restYUL": "വിളവ് യൂണിറ്റ് ലിസ്റ്റ് പുന .സജ്ജമാക്കുക",
|
||||
"Rice": "അരി",
|
||||
"rmCatInfo": "നിങ്ങൾ കാറ്റഗറി ലിസ്റ്റിൽ നിന്ന് %s നീക്കംചെയ്യാൻ പോകുന്നു",
|
||||
"rmCmb": "കോമ്പിനേഷൻ നീക്കംചെയ്തു",
|
||||
"rmCuiInfo": "നിങ്ങൾ പാചക പട്ടികയിൽ നിന്ന് %s നീക്കംചെയ്യാൻ പോകുന്നു",
|
||||
"rmIng": "ചേരുവ നീക്കംചെയ്തു",
|
||||
"rmIns": "നിർദ്ദേശം നീക്കംചെയ്തു",
|
||||
"rmN": "കുറിപ്പ് നീക്കംചെയ്തു",
|
||||
"rmUInfo": "നിങ്ങൾ %s യെ യൂണിറ്റ് പട്ടികയിൽ നിന്ന് നീക്കംചെയ്യാൻ പോവുകയാണ്",
|
||||
"rmYUInfo": "വിളവ് യൂണിറ്റ് പട്ടികയിൽ നിന്ന് നിങ്ങൾ %s നീക്കംചെയ്യാൻ പോകുന്നു",
|
||||
"Roll": "റോൾ",
|
||||
"rp": "ഫോട്ടോ നീക്കംചെയ്യുക",
|
||||
"rst": "പുനരാരംഭിക്കുക",
|
||||
"Russian": "റഷ്യൻ",
|
||||
"Salads": "സലാഡുകൾ",
|
||||
"SAT": "ശനി",
|
||||
"Sauces": "സോസുകൾ",
|
||||
"Scottish": "സ്കോട്ടിഷ്",
|
||||
"Seafood": "കടൽ ഭക്ഷണം",
|
||||
"selRec": "പാചകക്കുറിപ്പ് തിരഞ്ഞെടുക്കുക",
|
||||
"September": "സെപ്റ്റംബർ",
|
||||
"ser": "തിരയുക",
|
||||
"Serving": "സേവിക്കുന്നു",
|
||||
"SET": "സെറ്റ്",
|
||||
"Settings": "ക്രമീകരണങ്ങൾ",
|
||||
"shr": "പങ്കിടുക",
|
||||
"Side dishes": "സൈഡ് വിഭവങ്ങൾ",
|
||||
"simple": "ലളിതം",
|
||||
"Slowest first": "ആദ്യ വേഗത",
|
||||
"sltd": "തിരഞ്ഞെടുത്തു",
|
||||
"small": "ചെറുത്",
|
||||
"snacks": "ലഘുഭക്ഷണങ്ങൾ",
|
||||
"Soups": "സൂപ്പ്",
|
||||
"Spanish": "സ്പാനിഷ്",
|
||||
"Sri Lankan": "ശ്രീലങ്കൻ",
|
||||
"srpu": "പാചകക്കുറിപ്പ് ഫോട്ടോ പങ്കിടുക...",
|
||||
"srt": "അടുക്കുക",
|
||||
"sru": "പാചകക്കുറിപ്പ് പങ്കിടുക...",
|
||||
"stars": "നക്ഷത്ര റേറ്റിംഗ്",
|
||||
"stick": "വടി",
|
||||
"stp": "ഘട്ടം",
|
||||
"strAdd": "നിങ്ങളുടെ പാചകക്കുറിപ്പുകൾ ചേർക്കാൻ ആരംഭിക്കുക!",
|
||||
"SUN": "ഞായ",
|
||||
"sVw": "ക്രമരഹിതമായ പാചകക്കുറിപ്പ് കാണാൻ കുലുക്കുക",
|
||||
"sVwInfo": "നിങ്ങൾക്ക് തീരുമാനിക്കാൻ കഴിയാത്തപ്പോൾ എന്താണ് പാചകം ചെയ്യേണ്ടതെന്ന് തിരഞ്ഞെടുക്കാൻ നിങ്ങളെ സഹായിക്കുന്നു",
|
||||
"Swedish": "സ്വീഡിഷ്",
|
||||
"swm": "ആഴ്ചയിലെ ആദ്യ ദിവസം തിങ്കളാഴ്ച",
|
||||
"sysDef": "സിസ്റ്റം സ്ഥിരസ്ഥിതി",
|
||||
"Tablespoon": "ടേബിൾസ്പൂൺ",
|
||||
"tbsp": "ടേബിൾസ്പൂൺ",
|
||||
"Teaspoon": "ടീസ്പൂൺ",
|
||||
"Thai": "തായ്",
|
||||
"Theme": "തീം",
|
||||
"THU": "വ്യാഴം",
|
||||
"title": "ശീർഷകം",
|
||||
"tLInfo": "നിങ്ങൾ പിന്നീട് ശ്രമിക്കാൻ ആഗ്രഹിക്കുന്ന പാചകക്കുറിപ്പുകൾ ഇവിടെ പട്ടികപ്പെടുത്തിയിട്ടുണ്ട്",
|
||||
"today": "ഇന്ന്",
|
||||
"triedInfo": "നിങ്ങൾ %s ഈ പാചകക്കുറിപ്പ് പരീക്ഷിച്ചു",
|
||||
"trnsl": "വിവർത്തനം ചെയ്യുക",
|
||||
"trylater": "പിന്നീട് ശ്രമിക്കുക",
|
||||
"trySer": "എല്ലാ പാചകക്കുറിപ്പുകളിലും തിരയണോ?",
|
||||
"ts": "ടാഗുകൾ",
|
||||
"tsInfo": "സ്പെയ്സുകൾ ഉപയോഗിച്ച് വേർതിരിക്കുക",
|
||||
"tsp": "ടീസ്പൂൺ",
|
||||
"TUE": "ചൊവ്വ",
|
||||
"Turkish": "ടർക്കിഷ്",
|
||||
"Undefined": "നിർവചിച്ചിട്ടില്ല",
|
||||
"unit": "യൂണിറ്റ്",
|
||||
"Unit": "യൂണിറ്റ്",
|
||||
"unsaved": "സംരക്ഷിക്കാത്ത മാറ്റങ്ങൾ",
|
||||
"untRec": "ശീർഷകമില്ലാത്ത പാചകക്കുറിപ്പ്",
|
||||
"Vegan": "വെഗാൻ",
|
||||
"Vegetarian": "വെജിറ്റേറിയൻ",
|
||||
"Vietnamese": "വിയറ്റ്നാമീസ്",
|
||||
"wAgo": "%s ആഴ്ച മുമ്പ്",
|
||||
"WED": "ബുധൻ",
|
||||
"yesterday": "ഇന്നലെ",
|
||||
"yieldQ": "വിളവ് അളവ്",
|
||||
"yieldU": "വിളവ് യൂണിറ്റ്",
|
||||
"yld": "വരുമാനം",
|
||||
"buto": "%s ലേക്ക് ബാക്കപ്പ് ചെയ്തു",
|
||||
"sysDefB": "സിസ്റ്റം സ്ഥിരസ്ഥിതി + കറുപ്പ്"
|
||||
"aap": "ഒരു ഫോട്ടോ അറ്റാച്ചുചെയ്യുക",
|
||||
"About": "കുറിച്ച്",
|
||||
"aBtn": "ചേർക്കുക",
|
||||
"aD": "എല്ലാം ചെയ്തു!",
|
||||
"addCmbBtn": "സംയോജനം ചേർക്കുക",
|
||||
"aFBu": "ഒരു ബാക്കപ്പ് നടത്താൻ ഒരു പാചകക്കുറിപ്പ് ചേർക്കുക",
|
||||
"aIngBtn": "ചേരുവ ചേർക്കുക",
|
||||
"allCats": "എല്ലാ വിഭാഗങ്ങളും",
|
||||
"allCuis": "എല്ലാ പാചകരീതികളും",
|
||||
"allTs": "എല്ലാ ടാഗുകളും",
|
||||
"American": "അമേരിക്കൻ",
|
||||
"aNBtn": "പുതിയത് ചേർക്കുക",
|
||||
"aNoBtn": "കുറിപ്പ് ചേര്ക്കുക",
|
||||
"app.name": "ൻന്റെസിപിഎസ്",
|
||||
"appCrd": "എന്റെരെസിപീസ് വഴി പങ്കിട്ടു. എഫ്-ആൻഡ്രോയിഡ്, ഇസിഓൺഡ്രോയിഡ് അല്ലെങ്കിൽ പ്ലേ സ്റ്റോറിൽ ഇത് നേടുക.",
|
||||
"Appetizers": "വിശപ്പ്",
|
||||
"appInfo": "നിങ്ങളുടെ പാചകക്കുറിപ്പുകൾ സൃഷ്ടിക്കാനും നിയന്ത്രിക്കാനും പങ്കിടാനും അനുവദിക്കുന്ന ഒരു ഓപ്പൺ സോഴ്സ്, സ്വകാര്യത കേന്ദ്രീകരിച്ച ഡിജിറ്റൽ പാചകപുസ്തകമാണ് എന്റെരെസിപീസ്",
|
||||
"apply": "പ്രയോഗിക്കുക",
|
||||
"appRst": "അപ്ലിക്കേഷൻ പുനരാരംഭിക്കൽ ആവശ്യമാണ്",
|
||||
"aStpBtn": "നിർദ്ദേശം ചേർക്കുക",
|
||||
"Barbecue": "ബാർബിക്യൂ",
|
||||
"Beverages": "പാനീയങ്ങൾ",
|
||||
"Black": "കറുപ്പ്",
|
||||
"Brazilian": "ബ്രസീലിയൻ",
|
||||
"Breads": "ബ്രെഡുകൾ",
|
||||
"breakfast": "പ്രഭാതഭക്ഷണം",
|
||||
"British": "ബ്രിട്ടീഷ്",
|
||||
"buEmp": "ബാക്കപ്പ് ഫയൽ ശൂന്യമാണ്",
|
||||
"buFol": "ബാക്കപ്പ് ഫോൾഡർ",
|
||||
"buInc": "കേടായ അല്ലെങ്കിൽ കേടായ ബാക്കപ്പ് ഫയൽ",
|
||||
"buInfo": "തിരികെ ഇറക്കുമതി ചെയ്യാൻ കഴിയുന്ന നിങ്ങളുടെ എല്ലാ ഡാറ്റയും അടങ്ങിയ ഒരു ZIP ഫയൽ സൃഷ്ടിക്കുന്നു",
|
||||
"buMod": "ബാക്കപ്പ് ഫയൽ മറ്റെവിടെയെങ്കിലും പരിഷ്ക്കരിച്ചു",
|
||||
"cat": "വിഭാഗം",
|
||||
"cBtn": "റദ്ദാക്കുക",
|
||||
"Challenging": "വെല്ലുവിളിനിറഞ്ഞ",
|
||||
"Chinese": "ചൈനീസ്",
|
||||
"clove": "ഗ്രാമ്പൂ",
|
||||
"cm": "സെന്റിമീറ്റർ",
|
||||
"cmbs": "സംയോജനങ്ങൾ",
|
||||
"conBtn": "തുടരുക",
|
||||
"conf": "സ്ഥിരീകരിക്കുക",
|
||||
"cookT": "പാചക സമയം",
|
||||
"cPic": "ഫോട്ടോ എഡിറ്റുചെയ്യുക",
|
||||
"Created": "സൃഷ്ടിച്ചു",
|
||||
"cui": "പാചകരീതി",
|
||||
"cup": "കപ്പ്",
|
||||
"Cup": "കപ്പ്",
|
||||
"dAgo": "%s ദിവസം മുമ്പ്",
|
||||
"Danish": "ഡാനിഷ്",
|
||||
"Dark": "ഇരുണ്ടത്",
|
||||
"db": "ഡാറ്റാബേസ്",
|
||||
"dBtn": "ഇല്ലാതാക്കുക",
|
||||
"delRecInfo": "%s പാചകക്കുറിപ്പ് നിങ്ങൾ ശാശ്വതമായി ഇല്ലാതാക്കാൻ പോകുന്നു",
|
||||
"delRecsInfo": "നിങ്ങൾ %s ശാശ്വതമായി ഇല്ലാതാക്കാൻ പോകുന്നു",
|
||||
"Desserts": "മധുരപലഹാരങ്ങൾ",
|
||||
"detailed": "വിശദമായ",
|
||||
"Difficulty level": "വൈഷമ്യ നില",
|
||||
"dinner": "അത്താഴം",
|
||||
"disBtn": "നിരസിക്കുക",
|
||||
"disc": "ഈ പാചകക്കുറിപ്പിൽ സംരക്ഷിക്കാത്ത മാറ്റങ്ങളുണ്ട്. നിങ്ങൾ എന്താണ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നത്?",
|
||||
"donate": "സംഭാവനചെയ്യുക",
|
||||
"dozen": "ഡസൻ",
|
||||
"drop": "തുള്ളി",
|
||||
"dsp": "ഡെസേർട്ട് സ്പൂൺ",
|
||||
"Easy": "എളുപ്പമാണ്",
|
||||
"editRec": "പാചകക്കുറിപ്പ് എഡിറ്റുചെയ്യുക",
|
||||
"Egyptian": "ഈജിപ്ഷ്യൻ",
|
||||
"English": "ഇംഗ്ലീഷ്",
|
||||
"EnRecipes": "ൻന്റെസിപിഎസ്",
|
||||
"expBu": "പൂർണ്ണ ബാക്കപ്പ് എക്സ്പോർട്ടുചെയ്യുക",
|
||||
"expip": "കയറ്റുമതി പുരോഗതിയിലാണ്",
|
||||
"expSuc": "കയറ്റുമതി വിജയം",
|
||||
"favourites": "പ്രിയങ്കരങ്ങൾ",
|
||||
"Filipino": "ഫിലിപ്പിനോ",
|
||||
"Filtered recipes": "ഫിൽട്ടർ ചെയ്ത പാചകക്കുറിപ്പുകൾ",
|
||||
"fl oz": "ഫ്ലൂയിഡ് un ൺസ്",
|
||||
"fltr": "ഫിൽട്ടർ ചെയ്യുക",
|
||||
"Fluid Ounce": "ഫ്ലൂയിഡ് un ൺസ്",
|
||||
"French": "ഫ്രഞ്ച്",
|
||||
"fsList": "നിങ്ങളുടെ പ്രിയപ്പെട്ട പാചകക്കുറിപ്പുകൾ ഇവിടെ പട്ടികപ്പെടുത്തിയിട്ടുണ്ട്",
|
||||
"g": "ഗ്രാം",
|
||||
"gal": "ഗാലൺ",
|
||||
"Gallon": "ഗാലൺ",
|
||||
"German": "ജർമ്മൻ",
|
||||
"gh": "GitHub- ൽ കാണുക",
|
||||
"Gram": "ഗ്രാം",
|
||||
"Greek": "ഗ്രീക്ക്",
|
||||
"grid": "ഗ്രിഡ്",
|
||||
"grocery": "പലചരക്ക് പട്ടിക",
|
||||
"guide": "ഉപയോക്തൃ ഗൈഡ്",
|
||||
"Healthy": "ആരോഗ്യമുള്ള",
|
||||
"hr": "മണിക്കൂർ",
|
||||
"impBu": "ഡാറ്റ ഇറക്കുമതി ചെയ്യുക",
|
||||
"impFail": "ഇറക്കുമതി പരാജയപ്പെട്ടു",
|
||||
"impInfo": "ഈ അപ്ലിക്കേഷൻ എക്സ്പോർട്ടുചെയ്ത പൂർണ്ണ ബാക്കപ്പുകൾ പിന്തുണയ്ക്കുന്നു",
|
||||
"impip": "ഇറക്കുമതി പുരോഗതിയിലാണ്",
|
||||
"impSuc": "ഇറക്കുമതി വിജയം",
|
||||
"in": "ഇഞ്ച്",
|
||||
"Indian": "ഇന്ത്യൻ",
|
||||
"ings": "ചേരുവകൾ",
|
||||
"inss": "നിർദ്ദേശങ്ങൾ",
|
||||
"intf": "ഇന്റർഫേസ്",
|
||||
"invFile": "അസാധുവായ ഫയൽ",
|
||||
"Irish": "ഐറിഷ്",
|
||||
"it": "ഇനം %s",
|
||||
"Italian": "ഇറ്റാലിയൻ",
|
||||
"Jamaican": "ജമൈക്കൻ",
|
||||
"Japanese": "ജാപ്പനീസ്",
|
||||
"Jewish": "ജൂതൻ",
|
||||
"joinTG": "ടെലിഗ്രാം ഗ്രൂപ്പിൽ ചേരുക",
|
||||
"kEdit": "എഡിറ്റിംഗ് തുടരുക",
|
||||
"Kenyan": "കെനിയൻ",
|
||||
"kg": "കി. ഗ്രാം",
|
||||
"Kilogram": "കിലോഗ്രാം",
|
||||
"Korean": "കൊറിയൻ",
|
||||
"l": "ലിറ്റർ",
|
||||
"lang": "ഭാഷ",
|
||||
"large": "വലുത്",
|
||||
"Last updated": "അവസാനമായി പുതുക്കിയത്",
|
||||
"lb": "പൗണ്ട്",
|
||||
"leaf": "ഇല",
|
||||
"Light": "പ്രകാശം",
|
||||
"listVM": "പട്ടിക കാഴ്ച മോഡ്",
|
||||
"Litre": "ലിറ്റർ",
|
||||
"Loaf": "അപ്പം",
|
||||
"ltAgo": "വളരെക്കാലം മുമ്പ്",
|
||||
"lunch": "ഉച്ചഭക്ഷണം",
|
||||
"mAgo": "%s മാസം മുമ്പ്",
|
||||
"Main dishes": "പ്രധാന വിഭവങ്ങൾ",
|
||||
"Meat": "മാംസം",
|
||||
"medium": "ഇടത്തരം",
|
||||
"Mexican": "മെക്സിക്കൻ",
|
||||
"mg": "മില്ലിഗ്രാം",
|
||||
"Millilitre": "മില്ലിലിറ്റർ",
|
||||
"min": "മിനിറ്റ്",
|
||||
"minimal": "കുറഞ്ഞത്",
|
||||
"ml": "മില്ലി",
|
||||
"Moderate": "മിതത്വം",
|
||||
"newCui": "പുതിയ പാചകരീതി",
|
||||
"Newest first": "ആദ്യത്തെ പുതിയത്",
|
||||
"newRec": "പുതിയ പാചകക്കുറിപ്പ്",
|
||||
"newUnit": "പുതിയ യൂണിറ്റ്",
|
||||
"Nigerian": "നൈജീരിയൻ",
|
||||
"nLangInfo": "പുതിയ ഭാഷ ഉപയോഗിക്കുന്നതിന് എന്റെരെസിപീസ് പുനരാരംഭിക്കുക",
|
||||
"nNBtn": "ഇപ്പോൾ വേണ്ട",
|
||||
"no": "കുറിപ്പ്",
|
||||
"noAccSensor": "ആക്സിലറോമീറ്റർ സെൻസർ പ്രവർത്തനരഹിതമാക്കി അല്ലെങ്കിൽ പ്രവർത്തിക്കുന്നില്ല",
|
||||
"noFavs": "ഇതുവരെ പ്രിയപ്പെട്ട പാചകക്കുറിപ്പുകളൊന്നുമില്ല",
|
||||
"Noodles": "നൂഡിൽസ്",
|
||||
"noRecs": "പാചകക്കുറിപ്പുകളൊന്നും നിങ്ങളുടെ തിരയലുമായി പൊരുത്തപ്പെടുന്നില്ല",
|
||||
"noRecsInL": "ഇവിടെയുള്ള പാചകങ്ങളൊന്നും നിങ്ങളുടെ തിരയലുമായി പൊരുത്തപ്പെടുന്നില്ല",
|
||||
"nos": "കുറിപ്പുകൾ",
|
||||
"nwCat": "പുതിയ വിഭാഗം",
|
||||
"nwYiU": "പുതിയ വിളവ് യൂണിറ്റ്",
|
||||
"OK": "ശരി",
|
||||
"Oldest first": "ആദ്യം പഴയത്",
|
||||
"opts": "ഓപ്ഷനുകൾ",
|
||||
"Ounce": "Un ൺസ്",
|
||||
"oz": "oun ൺസ്",
|
||||
"Pasta": "പാസ്ത",
|
||||
"Patty": "പാറ്റി",
|
||||
"photogrid": "ഫോട്ടോ ഗ്രിഡ്",
|
||||
"pht": "പാചകക്കുറിപ്പ് ഫോട്ടോ",
|
||||
"piece": "കഷണം",
|
||||
"Piece": "പീസ്",
|
||||
"pinch": "നുള്ള്",
|
||||
"planner": "ഭക്ഷണ പ്ലാനർ",
|
||||
"plsAdd": "ഒരെണ്ണം ചേർക്കാൻ + ബട്ടൺ ഉപയോഗിക്കുക",
|
||||
"Portuguese": "പോർച്ചുഗീസ്",
|
||||
"Poultry": "കോഴി",
|
||||
"Pound": "പൗണ്ട്",
|
||||
"prepT": "തയ്യാറാക്കൽ സമയം",
|
||||
"priv": "സ്വകാര്യതാ നയം",
|
||||
"pt": "പിന്റ്",
|
||||
"qt": "ക്വാർട്ട്",
|
||||
"Quickest first": "ആദ്യ വേഗത്തിലുള്ളത്",
|
||||
"Rating": "റേറ്റിംഗ്",
|
||||
"rBtn": "നീക്കംചെയ്യുക",
|
||||
"rec": "പാചകക്കുറിപ്പ്",
|
||||
"recE": "നിലവിലുള്ളത്:",
|
||||
"recF": "പാചകക്കുറിപ്പുകൾ കണ്ടെത്തി",
|
||||
"recI": "ഇറക്കുമതി ചെയ്തത്:",
|
||||
"recListEmp": "ഇവിടെ ഒന്നുമില്ല! കുറച്ച് പാചകക്കുറിപ്പുകൾ ചേർത്ത് വീണ്ടും ശ്രമിക്കുക",
|
||||
"recPic": "പാചകക്കുറിപ്പ് ഫോട്ടോ",
|
||||
"recRm": "പാചകക്കുറിപ്പ് നീക്കംചെയ്തു",
|
||||
"recs": "പാചകക്കുറിപ്പുകൾ",
|
||||
"recTitle": "എന്റെ ആരോഗ്യകരമായ പാചകക്കുറിപ്പ്",
|
||||
"recU": "അപ്ഡേറ്റുചെയ്തത്:",
|
||||
"req": "ആവശ്യമായ %s",
|
||||
"resNF": "പാചകക്കുറിപ്പ് കണ്ടെത്തിയില്ല",
|
||||
"rest": "പുനഃക്രമീകരിക്കുക",
|
||||
"restCatL": "വിഭാഗ ലിസ്റ്റ് പുന .സജ്ജമാക്കുക",
|
||||
"restCuiL": "പാചകരീതി പട്ടിക പുന .സജ്ജമാക്കുക",
|
||||
"restDone": "പുന .സജ്ജീകരണം പൂർത്തിയായി",
|
||||
"restInfo": "ഒരു ലിസ്റ്റ് പുന .സജ്ജമാക്കുന്നത് ഉപയോക്താവ് സൃഷ്ടിച്ച എൻട്രികൾ ഇല്ലാതാക്കുകയും സ്ഥിരസ്ഥിതി എൻട്രികൾ പുന restore സ്ഥാപിക്കുകയും ചെയ്യും. നിലവിലുള്ള പാചകത്തെ ബാധിക്കില്ല.",
|
||||
"restUL": "യൂണിറ്റ് ലിസ്റ്റ് പുന .സജ്ജമാക്കുക",
|
||||
"restYUL": "വിളവ് യൂണിറ്റ് ലിസ്റ്റ് പുന .സജ്ജമാക്കുക",
|
||||
"Rice": "അരി",
|
||||
"rmCatInfo": "നിങ്ങൾ കാറ്റഗറി ലിസ്റ്റിൽ നിന്ന് %s നീക്കംചെയ്യാൻ പോകുന്നു",
|
||||
"rmCmb": "കോമ്പിനേഷൻ നീക്കംചെയ്തു",
|
||||
"rmCuiInfo": "നിങ്ങൾ പാചക പട്ടികയിൽ നിന്ന് %s നീക്കംചെയ്യാൻ പോകുന്നു",
|
||||
"rmIng": "ചേരുവ നീക്കംചെയ്തു",
|
||||
"rmIns": "നിർദ്ദേശം നീക്കംചെയ്തു",
|
||||
"rmN": "കുറിപ്പ് നീക്കംചെയ്തു",
|
||||
"rmUInfo": "നിങ്ങൾ %s യെ യൂണിറ്റ് പട്ടികയിൽ നിന്ന് നീക്കംചെയ്യാൻ പോവുകയാണ്",
|
||||
"rmYUInfo": "വിളവ് യൂണിറ്റ് പട്ടികയിൽ നിന്ന് നിങ്ങൾ %s നീക്കംചെയ്യാൻ പോകുന്നു",
|
||||
"Roll": "റോൾ",
|
||||
"rp": "ഫോട്ടോ നീക്കംചെയ്യുക",
|
||||
"rst": "പുനരാരംഭിക്കുക",
|
||||
"Russian": "റഷ്യൻ",
|
||||
"Salads": "സലാഡുകൾ",
|
||||
"Sauces": "സോസുകൾ",
|
||||
"Scottish": "സ്കോട്ടിഷ്",
|
||||
"Seafood": "കടൽ ഭക്ഷണം",
|
||||
"selRec": "പാചകക്കുറിപ്പ് തിരഞ്ഞെടുക്കുക",
|
||||
"ser": "തിരയുക",
|
||||
"Serving": "സേവിക്കുന്നു",
|
||||
"SET": "സെറ്റ്",
|
||||
"Settings": "ക്രമീകരണങ്ങൾ",
|
||||
"shr": "പങ്കിടുക",
|
||||
"Side dishes": "സൈഡ് വിഭവങ്ങൾ",
|
||||
"simple": "ലളിതം",
|
||||
"Slowest first": "ആദ്യ വേഗത",
|
||||
"sltd": "തിരഞ്ഞെടുത്തു",
|
||||
"small": "ചെറുത്",
|
||||
"snacks": "ലഘുഭക്ഷണങ്ങൾ",
|
||||
"Soups": "സൂപ്പ്",
|
||||
"Spanish": "സ്പാനിഷ്",
|
||||
"Sri Lankan": "ശ്രീലങ്കൻ",
|
||||
"srpu": "പാചകക്കുറിപ്പ് ഫോട്ടോ പങ്കിടുക...",
|
||||
"srt": "അടുക്കുക",
|
||||
"sru": "പാചകക്കുറിപ്പ് പങ്കിടുക...",
|
||||
"stars": "നക്ഷത്ര റേറ്റിംഗ്",
|
||||
"stick": "വടി",
|
||||
"stp": "ഘട്ടം %s",
|
||||
"strAdd": "നിങ്ങളുടെ പാചകക്കുറിപ്പുകൾ ചേർക്കാൻ ആരംഭിക്കുക!",
|
||||
"sVw": "ക്രമരഹിതമായ പാചകക്കുറിപ്പ് കാണാൻ കുലുക്കുക",
|
||||
"sVwInfo": "നിങ്ങൾക്ക് തീരുമാനിക്കാൻ കഴിയാത്തപ്പോൾ എന്താണ് പാചകം ചെയ്യേണ്ടതെന്ന് തിരഞ്ഞെടുക്കാൻ നിങ്ങളെ സഹായിക്കുന്നു",
|
||||
"Swedish": "സ്വീഡിഷ്",
|
||||
"swm": "ആഴ്ചയിലെ ആദ്യ ദിവസം തിങ്കളാഴ്ച",
|
||||
"sysDef": "സിസ്റ്റം സ്ഥിരസ്ഥിതി",
|
||||
"Tablespoon": "ടേബിൾസ്പൂൺ",
|
||||
"tbsp": "ടേബിൾസ്പൂൺ",
|
||||
"Teaspoon": "ടീസ്പൂൺ",
|
||||
"Thai": "തായ്",
|
||||
"Theme": "തീം",
|
||||
"title": "ശീർഷകം",
|
||||
"tLInfo": "നിങ്ങൾ പിന്നീട് ശ്രമിക്കാൻ ആഗ്രഹിക്കുന്ന പാചകക്കുറിപ്പുകൾ ഇവിടെ പട്ടികപ്പെടുത്തിയിട്ടുണ്ട്",
|
||||
"today": "ഇന്ന്",
|
||||
"triedInfo": "നിങ്ങൾ %s ഈ പാചകക്കുറിപ്പ് പരീക്ഷിച്ചു",
|
||||
"trnsl": "വിവർത്തനം ചെയ്യുക",
|
||||
"trylater": "പിന്നീട് ശ്രമിക്കുക",
|
||||
"trySer": "എല്ലാ പാചകക്കുറിപ്പുകളിലും തിരയണോ?",
|
||||
"ts": "ടാഗുകൾ",
|
||||
"tsInfo": "സ്പെയ്സുകൾ ഉപയോഗിച്ച് വേർതിരിക്കുക",
|
||||
"tsp": "ടീസ്പൂൺ",
|
||||
"Turkish": "ടർക്കിഷ്",
|
||||
"Undefined": "നിർവചിച്ചിട്ടില്ല",
|
||||
"unit": "യൂണിറ്റ്",
|
||||
"Unit": "യൂണിറ്റ്",
|
||||
"unsaved": "സംരക്ഷിക്കാത്ത മാറ്റങ്ങൾ",
|
||||
"untRec": "ശീർഷകമില്ലാത്ത പാചകക്കുറിപ്പ്",
|
||||
"Vegan": "വെഗാൻ",
|
||||
"Vegetarian": "വെജിറ്റേറിയൻ",
|
||||
"Vietnamese": "വിയറ്റ്നാമീസ്",
|
||||
"wAgo": "%s ആഴ്ച മുമ്പ്",
|
||||
"yesterday": "ഇന്നലെ",
|
||||
"yieldQ": "വിളവ് അളവ്",
|
||||
"yieldU": "വിളവ് യൂണിറ്റ്",
|
||||
"yld": "വരുമാനം",
|
||||
"buto": "%s ലേക്ക് ബാക്കപ്പ് ചെയ്തു",
|
||||
"sysDefB": "സിസ്റ്റം സ്ഥിരസ്ഥിതി + കറുപ്പ്",
|
||||
"esgbInfo": "നിങ്ങൾക്ക് എന്തെങ്കിലും നാവിഗേഷൻ പ്രശ്നങ്ങളുണ്ടെങ്കിൽ ഈ ഓപ്ഷൻ അപ്രാപ്തമാക്കുക",
|
||||
"esgb": "തിരിച്ചുപോകാൻ എഡ്ജ് സ്വൈപ്പ്",
|
||||
"ksavrInfo": "ഒരു പാചകക്കുറിപ്പ് കാണുമ്പോൾ സ്ക്രീൻ ഓഫാകുന്നത് തടയുന്നു",
|
||||
"ksavr": "പാചകക്കുറിപ്പ് കാണുമ്പോൾ സ്ക്രീൻ ഓണാക്കുക",
|
||||
"rstBtn": "പുനഃക്രമീകരിക്കുക",
|
||||
"add": "ചേർക്കുക",
|
||||
"nvr": "ഒരിക്കലും",
|
||||
"otaw": "ഒരാഴ്ചയേക്കാൾ പഴയത്",
|
||||
"otam": "ഒരു മാസത്തേക്കാൾ പഴയത്",
|
||||
"otay": "ഒരു വർഷത്തേക്കാൾ പഴയത്",
|
||||
"admp": "യാന്ത്രിക-ഇല്ലാതാക്കുക ഭക്ഷണ പദ്ധതികൾ",
|
||||
"plsCrt": "ഒരെണ്ണം സൃഷ്ടിക്കാൻ + ബട്ടൺ ഉപയോഗിക്കുക",
|
||||
"ehwmp": "ഭക്ഷണ പദ്ധതികളോടെ ആരോഗ്യത്തോടെ ഭക്ഷണം കഴിക്കുക!",
|
||||
"selMT": "ഭക്ഷണ തരം തിരഞ്ഞെടുക്കുക",
|
||||
"ystr": "തലേനാള്",
|
||||
"tmrw": "അടുത്തദിവസം",
|
||||
"tdy": "ഇന്നേദിവസം",
|
||||
"cpy": "പകർപ്പ്",
|
||||
"d": "ദിവസം",
|
||||
"wk": "ആഴ്ച",
|
||||
"mnth": "മാസം",
|
||||
"calVM": "കലണ്ടർ വ്യൂ മോഡ്",
|
||||
"oAP": "%1$s നിലവിലുള്ളത്, %2$s താൽക്കാലികമായി നിർത്തി",
|
||||
"ttv": "കാണാൻ ടാപ്പുചെയ്യുക",
|
||||
"dismissAll": "എല്ലാ ടൈമറുകളും നിരസിക്കുക",
|
||||
"dismiss": "പുറംതള്ളുക",
|
||||
"texp": "%s ടൈമറുകൾ കാലഹരണപ്പെട്ടു",
|
||||
"wDBy": "%1$s %2$s വൈകി",
|
||||
"prstTU": "പ്രീസെറ്റ് സമയം അപ്ഡേറ്റുചെയ്തു",
|
||||
"ccwt": "ടൈമറുകളുമായി ആത്മവിശ്വാസത്തോടെ വേവിക്കുക!",
|
||||
"gtD": "തീയതിയിലേക്ക് പോകുക",
|
||||
"random": "വികലമായ",
|
||||
"notifSetg": "അറിയിപ്പ് ക്രമീകരണങ്ങൾ",
|
||||
"tmrRm": "ടൈമർ നീക്കംചെയ്തു",
|
||||
"seconds": "സെക്കൻഡ്",
|
||||
"hours": "മണിക്കൂറുകൾ",
|
||||
"hour": "മണിക്കൂര്",
|
||||
"minutes": "മിനിറ്റ്",
|
||||
"minute": "മിനിറ്റ്",
|
||||
"dlyDur": "കാലതാമസം",
|
||||
"tmrvbrt": "ടൈമർ വൈബ്രേറ്റ്",
|
||||
"tmrSnd": "ടൈമർ ശബ്ദം",
|
||||
"aTPrst": "പ്രീസെറ്റുകളിലേക്ക് ചേർത്തു",
|
||||
"fwr": "ഏത് പാചകത്തിന്?",
|
||||
"delPrst": "നിങ്ങൾ പ്രീസെറ്റുകളിൽ നിന്ന് %s ഇല്ലാതാക്കാൻ പോകുന്നു",
|
||||
"prsts": "പ്രെസ്റ്റുകൾ",
|
||||
"prstBtn": "പ്രെസ്റ്റുകൾ",
|
||||
"tmr": "ടൈമർ %s",
|
||||
"delay": "താമസിക്കുക",
|
||||
"stop": "നിർത്തുക",
|
||||
"strtBtn": "ആരംഭിക്കുക",
|
||||
"ntmr": "പുതിയ ടൈമർ",
|
||||
"timer": "പാചക ടൈമർ",
|
||||
"sec": "സെക്കൻഡ്",
|
||||
"addSectBtn": "വിഭാഗം ചേർക്കുക",
|
||||
"sectRm": "വിഭാഗം നീക്കംചെയ്തു",
|
||||
"sect": "ഭാഗം %s"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes er et fritt kokeboksprogram som respekterer ditt personvern der du kan lage, håndtere og dele dine oppskrifter",
|
||||
"apply": "Bruk",
|
||||
"appRst": "Programomstart kreves",
|
||||
"April": "April",
|
||||
"aStpBtn": "Legg til steg",
|
||||
"August": "August",
|
||||
"Barbecue": "Grill",
|
||||
"Beverages": "Drikke",
|
||||
"Black": "Svart",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Mørk",
|
||||
"db": "Database",
|
||||
"dBtn": "Slett",
|
||||
"December": "Desember",
|
||||
"delRecInfo": "Du er i ferd med å slette oppskriften %s for godt",
|
||||
"delRecsInfo": "Du er i ferd med å slette %s for godt",
|
||||
"Desserts": "Desserter",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Eksport pågår",
|
||||
"expSuc": "Eksportert",
|
||||
"favourites": "Favoritter",
|
||||
"February": "Februar",
|
||||
"Filipino": "Filipinsk",
|
||||
"Filtered recipes": "Filtrerte oppskrifter",
|
||||
"fl oz": "flytende unse",
|
||||
"fltr": "Filter",
|
||||
"Fluid Ounce": "Flytende unse",
|
||||
"French": "Fransk",
|
||||
"FRI": "Fre",
|
||||
"fsList": "Dine favorittoppskrifter listes opp her",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -111,12 +106,9 @@
|
|||
"it": "Element",
|
||||
"Italian": "Italiensk",
|
||||
"Jamaican": "Jamaikansk",
|
||||
"January": "Januar",
|
||||
"Japanese": "Japansk",
|
||||
"Jewish": "Jødisk",
|
||||
"joinTG": "Ta del i Telegram-gruppen",
|
||||
"July": "July",
|
||||
"June": "June",
|
||||
"kEdit": "Fortsett å redigere",
|
||||
"Kenyan": "Kenyansk",
|
||||
"kg": "kg",
|
||||
|
@ -136,8 +128,6 @@
|
|||
"lunch": "Lunsj",
|
||||
"mAgo": "for %s måneder siden",
|
||||
"Main dishes": "Hovedretter",
|
||||
"March": "March",
|
||||
"May": "May",
|
||||
"Meat": "Kjøtt",
|
||||
"medium": "middels",
|
||||
"Mexican": "Meksikansk",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "minimalistisk",
|
||||
"ml": "ml",
|
||||
"Moderate": "Moderat",
|
||||
"MON": "Man",
|
||||
"newCui": "Nytt kjøkken",
|
||||
"Newest first": "Nyeste først",
|
||||
"newRec": "Ny oppskrift",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "Ingen oppskrifter samsvarte med søket ditt",
|
||||
"noRecsInL": "Ingen av oppskriftene her samsvarer med søket",
|
||||
"nos": "Notiser",
|
||||
"November": "November",
|
||||
"nwCat": "Ny kategori",
|
||||
"nwYiU": "Ny nyttemengdeenhet",
|
||||
"October": "Oktober",
|
||||
"OK": "OK",
|
||||
"Oldest first": "Eldste først",
|
||||
"opts": "Innstillinger",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "Omstart",
|
||||
"Russian": "Russisk",
|
||||
"Salads": "Salater",
|
||||
"SAT": "Sat",
|
||||
"Sauces": "Sauser",
|
||||
"Scottish": "Skotsk",
|
||||
"Seafood": "Sjømat",
|
||||
"selRec": "Velg oppskrift",
|
||||
"September": "September",
|
||||
"ser": "Søk",
|
||||
"Serving": "Posjon",
|
||||
"SET": "Sett",
|
||||
|
@ -250,7 +235,6 @@
|
|||
"stick": "stang",
|
||||
"stp": "Steg",
|
||||
"strAdd": "Begynn å legge til oppskriftene dine!",
|
||||
"SUN": "Søn",
|
||||
"sVw": "Rist for å vise tilfeldig oppskrift",
|
||||
"sVwInfo": "Hjelper deg å velge hva du skal lage når du ikke kan bestemme deg",
|
||||
"Swedish": "Svensk",
|
||||
|
@ -261,7 +245,6 @@
|
|||
"Teaspoon": "Teskje",
|
||||
"Thai": "Thailandsk",
|
||||
"Theme": "Drakt",
|
||||
"THU": "Tor",
|
||||
"title": "Tittel",
|
||||
"tLInfo": "Oppskrifter du ønsker å prøve senere listes opp her",
|
||||
"today": "i dag",
|
||||
|
@ -272,7 +255,6 @@
|
|||
"ts": "Etiketter",
|
||||
"tsInfo": "inndel med mellomrom",
|
||||
"tsp": "ts",
|
||||
"TUE": "Tir",
|
||||
"Turkish": "Tyrkisk",
|
||||
"Undefined": "Udefinert",
|
||||
"unit": "enhet",
|
||||
|
@ -283,12 +265,24 @@
|
|||
"Vegetarian": "Vegetar",
|
||||
"Vietnamese": "Vietnamesisk",
|
||||
"wAgo": "for %s uker siden",
|
||||
"WED": "Ons",
|
||||
"yesterday": "i går",
|
||||
"yieldQ": "Nyttemengde",
|
||||
"yieldU": "Enhet for nyttemengde",
|
||||
"yld": "Nyttemengde",
|
||||
"buto": "Støttet opp til %s",
|
||||
"sysDefB": "Systemforvalg + Svart",
|
||||
"sec": "s"
|
||||
"sec": "s",
|
||||
"ntmr": "Nytt tidsur",
|
||||
"gtD": "Gå til dato",
|
||||
"random": "Tilfeldig",
|
||||
"notifSetg": "Merknadsinnstillinger",
|
||||
"tmrRm": "Tidsur fjernet",
|
||||
"seconds": "sekunder",
|
||||
"hours": "timer",
|
||||
"hour": "time",
|
||||
"minutes": "minutter",
|
||||
"minute": "minutt",
|
||||
"delay": "Utsett",
|
||||
"stop": "Stopp",
|
||||
"strtBtn": "Start"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes in een open source, privacybewust digitaal kookboek waarmee je recepten kunt aanmaken, beheren en delen",
|
||||
"apply": "TOEPASSEN",
|
||||
"appRst": "Herstart vereist",
|
||||
"April": "april",
|
||||
"aStpBtn": "STAP TOEVOEGEN",
|
||||
"August": "augustus",
|
||||
"Barbecue": "Barbecue",
|
||||
"Beverages": "Drankjes",
|
||||
"Black": "Zwart",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Donker",
|
||||
"db": "Databank",
|
||||
"dBtn": "VERWIJDEREN",
|
||||
"December": "december",
|
||||
"delRecInfo": "Je staat op het punt om %s te verwijderen",
|
||||
"delRecsInfo": "Je staat op het punt om %s permanent te verwijderen",
|
||||
"Desserts": "Nagerechten",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Bezig met exporteren",
|
||||
"expSuc": "Exporteren voltooid",
|
||||
"favourites": "Favorieten",
|
||||
"February": "februari",
|
||||
"Filipino": "Filipijns",
|
||||
"Filtered recipes": "Gefilterde recepten",
|
||||
"fl oz": "fl oz",
|
||||
"fltr": "Filteren",
|
||||
"Fluid Ounce": "Vloeibaar ons",
|
||||
"French": "Frans",
|
||||
"FRI": "VRIJ",
|
||||
"fsList": "Hier vind je je favoriete recepten terug",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
|
@ -108,15 +103,12 @@
|
|||
"intf": "Uiterlijk",
|
||||
"invFile": "Ongeldig bestand",
|
||||
"Irish": "Iers",
|
||||
"it": "Item",
|
||||
"it": "Item %s",
|
||||
"Italian": "Italiaans",
|
||||
"Jamaican": "Jamaicaans",
|
||||
"January": "januari",
|
||||
"Japanese": "Japans",
|
||||
"Jewish": "Joods",
|
||||
"joinTG": "Word lid van de Telegram-groep",
|
||||
"July": "juli",
|
||||
"June": "juni",
|
||||
"kEdit": "DOORGAAN MET BEWERKEN",
|
||||
"Kenyan": "Keniaans",
|
||||
"kg": "kg",
|
||||
|
@ -136,8 +128,6 @@
|
|||
"lunch": "Lunch",
|
||||
"mAgo": "%s maanden geleden",
|
||||
"Main dishes": "Hoofdgerechten",
|
||||
"March": "maart",
|
||||
"May": "mei",
|
||||
"Meat": "Vlees",
|
||||
"medium": "middelgroot",
|
||||
"Mexican": "Mexicaans",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "Minimaal",
|
||||
"ml": "ml",
|
||||
"Moderate": "Gemiddeld",
|
||||
"MON": "MA",
|
||||
"newCui": "Nieuwe keuken",
|
||||
"Newest first": "Nieuwste bovenaan",
|
||||
"newRec": "Nieuw recept",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "Er zijn geen overeenkomende zoekresultaten",
|
||||
"noRecsInL": "Geen van deze recepten komt overeen met je zoekopdracht",
|
||||
"nos": "Aantekeningen",
|
||||
"November": "november",
|
||||
"nwCat": "Nieuwe categorie",
|
||||
"nwYiU": "Nieuwe eenheid",
|
||||
"October": "oktober",
|
||||
"OK": "Oké",
|
||||
"Oldest first": "Oudste bovenaan",
|
||||
"opts": "Opties",
|
||||
|
@ -200,7 +187,7 @@
|
|||
"recs": "recepten",
|
||||
"recTitle": "Mijn gezonde recept",
|
||||
"recU": "Bijgewerkt:",
|
||||
"req": "Vereiste %s",
|
||||
"req": "%s vereist",
|
||||
"resNF": "Recept niet gevonden",
|
||||
"rest": "Standaardwaarden",
|
||||
"restCatL": "Categorieënlijst herstellen",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "HERSTARTEN",
|
||||
"Russian": "Russisch",
|
||||
"Salads": "Salades",
|
||||
"SAT": "ZA",
|
||||
"Sauces": "Sausen",
|
||||
"Scottish": "Schots",
|
||||
"Seafood": "Zeevruchten",
|
||||
"selRec": "Recept kiezen",
|
||||
"September": "september",
|
||||
"ser": "Zoeken",
|
||||
"Serving": "Portie",
|
||||
"SET": "INSTELLEN",
|
||||
|
@ -248,9 +233,8 @@
|
|||
"sru": "Recept delen via…",
|
||||
"stars": "Waardering",
|
||||
"stick": "stokje",
|
||||
"stp": "Stap",
|
||||
"stp": "Stap %s",
|
||||
"strAdd": "Voeg je recepten toe!",
|
||||
"SUN": "ZO",
|
||||
"sVw": "Schudden om willekeurig recept te tonen",
|
||||
"sVwInfo": "Handig voor als je even niet weet wat je wilt maken",
|
||||
"Swedish": "Zweeds",
|
||||
|
@ -261,7 +245,6 @@
|
|||
"Teaspoon": "Theelepel",
|
||||
"Thai": "Thais",
|
||||
"Theme": "Thema",
|
||||
"THU": "DO",
|
||||
"title": "Naam",
|
||||
"tLInfo": "Hier vind je de recepten terug die je later wilt uitproberen",
|
||||
"today": "vandaag",
|
||||
|
@ -272,7 +255,6 @@
|
|||
"ts": "Labels",
|
||||
"tsInfo": "kommagescheiden",
|
||||
"tsp": "tl",
|
||||
"TUE": "DI",
|
||||
"Turkish": "Turks",
|
||||
"Undefined": "Onbekend",
|
||||
"unit": "eenheid",
|
||||
|
@ -283,7 +265,6 @@
|
|||
"Vegetarian": "Vegetarisch",
|
||||
"Vietnamese": "Vietnamees",
|
||||
"wAgo": "%s weken geleden",
|
||||
"WED": "WOE",
|
||||
"yesterday": "gisteren",
|
||||
"yieldQ": "Hoeveelheid",
|
||||
"yieldU": "Eenheid",
|
||||
|
@ -298,7 +279,6 @@
|
|||
"tmrSnd": "Kookwekkergeluid",
|
||||
"aTPrst": "Toegevoegd aan voorinstellingen",
|
||||
"fwr": "bij welk recept?",
|
||||
"tmrPrsts": "Kookwekker: voorinstellingen",
|
||||
"prstBtn": "VOORINSTELLINGEN",
|
||||
"stop": "Stoppen",
|
||||
"tmrvbrt": "Kookwekker laten trillen",
|
||||
|
@ -308,5 +288,44 @@
|
|||
"minutes": "minuten",
|
||||
"minute": "minuut",
|
||||
"dlyDur": "Vertragingsduur",
|
||||
"delay": "Vertraging"
|
||||
"delay": "Vertraging",
|
||||
"notifSetg": "Meldingsinstellingen",
|
||||
"tmrRm": "De kookwekker is verwijderd",
|
||||
"delPrst": "Je staat op het punt om %s te verwijderen uit de voorinstellingen",
|
||||
"prsts": "Voorinstellingen",
|
||||
"ttv": "Druk om te bekijken",
|
||||
"dismissAll": "Alle kookwekkers verwerpen",
|
||||
"dismiss": "Verwerpen",
|
||||
"texp": "%s kookwekkers zijn afgegaan",
|
||||
"wDBy": "%1$s is %2$s vertraagd",
|
||||
"prstTU": "De tijd is bijgewerkt",
|
||||
"ccwt": "Kook vol vertrouwen d.m.v. kookwekkers!",
|
||||
"gtD": "Ga naar datum",
|
||||
"random": "Willekeurig",
|
||||
"ystr": "Gisteren",
|
||||
"tmrw": "Morgen",
|
||||
"tdy": "Vandaag",
|
||||
"cpy": "kopie",
|
||||
"d": "Dag",
|
||||
"wk": "Week",
|
||||
"mnth": "Maand",
|
||||
"calVM": "Weergavemodus van kalender",
|
||||
"oAP": "%1$s lopende; %2$s onderbroken",
|
||||
"nvr": "Nooit",
|
||||
"otaw": "Ouder dan een week",
|
||||
"otam": "Ouder dan een maand",
|
||||
"otay": "Ouder dan een jaar",
|
||||
"admp": "Schema's automatisch verwijderen",
|
||||
"plsCrt": "Druk op de plusknop om een schema toe te voegen",
|
||||
"ehwmp": "Eet gezond met maaltijdschema's!",
|
||||
"selMT": "Kies het soort maaltijd",
|
||||
"rstBtn": "STANDAARDWAARDEN",
|
||||
"add": "Toevoegen",
|
||||
"esgbInfo": "Schakel deze optie uit als je problemen ervaart tijdens het navigeren",
|
||||
"esgb": "Vegen vanaf schermrand om terug te gaan",
|
||||
"ksavrInfo": "Voorkomt dat het scherm wordt uitgeschakeld tijdens het bekijken van een recept",
|
||||
"ksavr": "Scherm niet uitschakelen tijdens bekijken van recept",
|
||||
"addSectBtn": "SECTIE TOEVOEGEN",
|
||||
"sect": "Sectie %s",
|
||||
"sectRm": "De sectie is verwijderd"
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"addCmbBtn": "ADICIONE COMBINAÇÃO",
|
||||
"aFBu": "Adicione um receita para realizar um backup",
|
||||
"aIngBtn": "ADICIONE INGREDIENTE",
|
||||
"aNBtn": "adicionar novo",
|
||||
"aNBtn": "ADICIONAR NOVO",
|
||||
"aNoBtn": "ADICIONAR NOTA",
|
||||
"app.name": "EnRecipes",
|
||||
"Appetizers": "Aperitivos",
|
||||
|
@ -18,29 +18,29 @@
|
|||
"cat": "Categoria",
|
||||
"cBtn": "CANCELAR",
|
||||
"clove": "dente de alho",
|
||||
"cm": "Centimetro",
|
||||
"cmbs": "Combinação",
|
||||
"conBtn": "continuar",
|
||||
"cm": "cm",
|
||||
"cmbs": "Combinações",
|
||||
"conBtn": "CONTINUAR",
|
||||
"conf": "Confirmar",
|
||||
"cookT": "Tempo de cozimento",
|
||||
"Created": "Criar",
|
||||
"Created": "Criada",
|
||||
"cup": "copo",
|
||||
"Cup": "Copo",
|
||||
"Dark": "Escuro",
|
||||
"db": "Base de dados",
|
||||
"dBtn": "Deletar",
|
||||
"db": "Banco de dados",
|
||||
"dBtn": "APAGAR",
|
||||
"Desserts": "Sobremesas",
|
||||
"dozen": "dúzia",
|
||||
"drop": "solta",
|
||||
"drop": "gota",
|
||||
"dsp": "cds",
|
||||
"editRec": "Editar receita",
|
||||
"EnRecipes": "EnRecipes",
|
||||
"expBu": "Exportar backup completo",
|
||||
"favourites": "Favoritos",
|
||||
"fl oz": "onça fluída",
|
||||
"Fluid Ounce": "Onça Fluída (Oz.)",
|
||||
"fl oz": "fl oz",
|
||||
"Fluid Ounce": "Onça fluída (Oz.)",
|
||||
"fsList": "Suas receitas favoritas estão listadas aqui",
|
||||
"g": "grama",
|
||||
"g": "g",
|
||||
"gal": "gal",
|
||||
"Gallon": "Galão",
|
||||
"Gram": "Grama",
|
||||
|
@ -49,13 +49,13 @@
|
|||
"hr": "h",
|
||||
"impBu": "Importar dados",
|
||||
"impInfo": "Suporta backups completos exportados por este aplicativo",
|
||||
"in": "Entrar",
|
||||
"in": "in",
|
||||
"ings": "Ingredientes",
|
||||
"inss": "Instruções",
|
||||
"intf": "Interface",
|
||||
"it": "Item",
|
||||
"joinTG": "Junte-se ao grupo Telegram",
|
||||
"kg": "Kilo",
|
||||
"kg": "kg",
|
||||
"Kilogram": "Quilograma",
|
||||
"l": "litro",
|
||||
"lang": "Idioma",
|
||||
|
@ -69,7 +69,7 @@
|
|||
"Main dishes": "Pratos principais",
|
||||
"Meat": "Carnes",
|
||||
"medium": "médio",
|
||||
"mg": "Miligrama",
|
||||
"mg": "mg",
|
||||
"Millilitre": "Mililitro",
|
||||
"min": "min",
|
||||
"ml": "ml",
|
||||
|
@ -79,19 +79,18 @@
|
|||
"no": "Nota",
|
||||
"noFavs": "Ainda não há favoritos",
|
||||
"Noodles": "Macarrão fita",
|
||||
"noRecs": "Nenhuma receita corresponde à sua pesquisa",
|
||||
"noRecs": "Nenhuma receita corresponde à sua busca",
|
||||
"nos": "Notas",
|
||||
"November": "Novembro",
|
||||
"Ounce": "Onça",
|
||||
"oz": "onça",
|
||||
"Pasta": "Macarrão",
|
||||
"Patty": "Empada",
|
||||
"pht": "Foto da receita",
|
||||
"piece": "peça",
|
||||
"Piece": "Pedaço",
|
||||
"Piece": "Peça",
|
||||
"pinch": "pitada",
|
||||
"planner": "Planejador de refeições",
|
||||
"plsAdd": "Use o botão de adição para adicionar um",
|
||||
"plsAdd": "Use o botão de adição para adicionar uma",
|
||||
"Poultry": "Carne de aves",
|
||||
"Pound": "Libra",
|
||||
"prepT": "Tempo de preparação",
|
||||
|
@ -100,12 +99,12 @@
|
|||
"rBtn": "REMOVER",
|
||||
"rec": "Receita",
|
||||
"recListEmp": "Nada aqui! Adicione algumas receitas e tente novamente",
|
||||
"recTitle": "Minha Receita Saudável",
|
||||
"recTitle": "Minha receita saudável",
|
||||
"Rice": "Arroz",
|
||||
"rmCatInfo": "Você está prestes a remover a categoria",
|
||||
"rmCuiInfo": "Você está prestes a remover a cozinha",
|
||||
"rmUInfo": "Você está prestes a remover a unidade",
|
||||
"rmYUInfo": "Você está prestes a remover a unidade de porção",
|
||||
"rmCatInfo": "Você está prestes a remover %s da lista de categorias",
|
||||
"rmCuiInfo": "Você está prestes a remover %s da lista de cozinha",
|
||||
"rmUInfo": "Você está prestes a remover %s da lista de unidades",
|
||||
"rmYUInfo": "Você está prestes a remover %s das unidades de porção",
|
||||
"Roll": "Lista",
|
||||
"rst": "REINICIAR",
|
||||
"Salads": "Saladas",
|
||||
|
@ -114,11 +113,11 @@
|
|||
"selRec": "Selecione a receita",
|
||||
"ser": "Procurar",
|
||||
"Serving": "Porção",
|
||||
"SET": "definir",
|
||||
"SET": "DEFINIR",
|
||||
"Settings": "Ajustes",
|
||||
"shr": "compartilhar",
|
||||
"shr": "Compartilhar",
|
||||
"Side dishes": "Acompanhamentos",
|
||||
"sltd": "Selecionar",
|
||||
"sltd": "selecionada",
|
||||
"small": "pequeno",
|
||||
"Soups": "Sopas",
|
||||
"srt": "Ordenar",
|
||||
|
@ -135,48 +134,36 @@
|
|||
"trylater": "Experimentar depois",
|
||||
"tsp": "cc",
|
||||
"Undefined": "Indefinido",
|
||||
"unit": "Unidade",
|
||||
"Vegan": "Vegano",
|
||||
"Vegetarian": "Vegetariano",
|
||||
"unit": "unidade",
|
||||
"Vegan": "Vegana",
|
||||
"Vegetarian": "Vegetariana",
|
||||
"yieldQ": "Quantidade de porção",
|
||||
"yieldU": "Unidade de porção",
|
||||
"MON": "SEG",
|
||||
"FRI": "SEX",
|
||||
"WED": "VIA",
|
||||
"req": "Necessárias %s",
|
||||
"SAT": "SÁB",
|
||||
"SUN": "DOM",
|
||||
"THU": "QUI",
|
||||
"TUE": "TER",
|
||||
"July": "Julho",
|
||||
"June": "Junho",
|
||||
"kEdit": "EDITOR DE KEEP",
|
||||
"Kenyan": "Queniano",
|
||||
"Korean": "Coreano",
|
||||
"kEdit": "CONTINUAR EDITANDO",
|
||||
"Kenyan": "Queniana",
|
||||
"Korean": "Coreana",
|
||||
"Last updated": "Última atualização",
|
||||
"ltAgo": "há muito tempo",
|
||||
"lunch": "Almoço",
|
||||
"March": "Março",
|
||||
"May": "Maio",
|
||||
"Mexican": "Mexicano",
|
||||
"Mexican": "Mexicana",
|
||||
"minimal": "Mínimo",
|
||||
"Moderate": "Moderado",
|
||||
"newCui": "Nova cozinha",
|
||||
"Newest first": "O mais novo primeiro",
|
||||
"Newest first": "A mais nova primeiro",
|
||||
"newUnit": "Nova unidade",
|
||||
"Nigerian": "Nigeriano",
|
||||
"Nigerian": "Nigeriana",
|
||||
"noAccSensor": "O sensor do acelerômetro está desativado ou não está funcionando",
|
||||
"noRecsInL": "Nenhuma das receitas aqui corresponde à sua busca",
|
||||
"nwCat": "Nova categoria",
|
||||
"nwYiU": "Nova unidade de porção",
|
||||
"October": "Outubro",
|
||||
"OK": "OK",
|
||||
"Oldest first": "Os mais antigos",
|
||||
"Oldest first": "As mais antigas primeiro",
|
||||
"opts": "Opções",
|
||||
"photogrid": "Grade de fotos",
|
||||
"Portuguese": "Português",
|
||||
"Portuguese": "Portuguesa",
|
||||
"priv": "Política de privacidade",
|
||||
"Quickest first": "Primeiro o mais rápido",
|
||||
"Quickest first": "Primeiro a mais rápida",
|
||||
"Rating": "Classificação",
|
||||
"recE": "Já existe:",
|
||||
"swm": "Início da semana na segunda",
|
||||
|
@ -186,70 +173,66 @@
|
|||
"trySer": "PROCURAR EM TODAS AS RECEITAS?",
|
||||
"ts": "Etiquetas",
|
||||
"tsInfo": "separar com espaços",
|
||||
"Turkish": "Turco",
|
||||
"Turkish": "Turca",
|
||||
"Unit": "Unidade",
|
||||
"unsaved": "Mudanças não salvas",
|
||||
"untRec": "Receita sem título",
|
||||
"Vietnamese": "Vietnamita",
|
||||
"yesterday": "ontem",
|
||||
"buto": "Com apoio até %s",
|
||||
"Swedish": "Sueco",
|
||||
"buto": "Backup em %s",
|
||||
"Swedish": "Sueca",
|
||||
"sVwInfo": "Ajuda a escolher o que cozinhar quando você não pode decidir",
|
||||
"sVw": "Sacudir para ver a receita aleatória",
|
||||
"stars": "Classificação em estrelas",
|
||||
"sru": "Compartilhar receita usando...",
|
||||
"srpu": "Compartilhar foto da receita usando...",
|
||||
"Sri Lankan": "Sri Lanka",
|
||||
"Spanish": "Espanhol",
|
||||
"Sri Lankan": "Cingalesa",
|
||||
"Spanish": "Espanhola",
|
||||
"snacks": "Lanches",
|
||||
"Slowest first": "Mais lento primeiro",
|
||||
"Slowest first": "Mais lenta primeiro",
|
||||
"simple": "Simples",
|
||||
"September": "Setembro",
|
||||
"Scottish": "Escocês",
|
||||
"Russian": "Russo",
|
||||
"Scottish": "Escocesa",
|
||||
"Russian": "Russa",
|
||||
"rp": "Retirar foto",
|
||||
"rmN": "Nota removida",
|
||||
"rmIns": "Instrução retirada",
|
||||
"rmIns": "Instrução removida",
|
||||
"rmIng": "Ingrediente removido",
|
||||
"rmCmb": "Combinação removida",
|
||||
"restYUL": "Redefinir a lista de unidades de porção",
|
||||
"restUL": "Reiniciar a lista de unidades",
|
||||
"restUL": "Redefinir a lista de unidades",
|
||||
"restInfo": "A redefinição de uma lista eliminará as entradas criadas pelo usuário e restaurará as entradas padrão. As receitas existentes não serão afetadas.",
|
||||
"restDone": "Reposição feita",
|
||||
"restCuiL": "Reiniciar a lista de cozinha",
|
||||
"restCuiL": "Redefinir a lista de cozinha",
|
||||
"restCatL": "Redefinir lista de categorias",
|
||||
"rest": "Redefinir",
|
||||
"resNF": "Receita não encontrada",
|
||||
"recU": "Atualizado:",
|
||||
"recs": "receitas",
|
||||
"recRm": "Receita retirada",
|
||||
"recRm": "Receita removida",
|
||||
"recF": "receitas encontradas",
|
||||
"recI": "Importado:",
|
||||
"recPic": "Foto da receita",
|
||||
"aap": "Anexe uma foto",
|
||||
"allCats": "Todas as categorias",
|
||||
"allCuis": "Todas as culinárias",
|
||||
"allTs": "Todas as Tags",
|
||||
"American": "Americano",
|
||||
"allTs": "Todas as etiquetas",
|
||||
"American": "Americana",
|
||||
"appCrd": "Compartilhado via EnRecipes. Obtenha-o no F-Droid, IzzyOnDroid ou na Play Store.",
|
||||
"appInfo": "EnRecipes é um livro de receitas digital de código aberto, que lhe permite criar, gerenciar e compartilhar suas receitas",
|
||||
"apply": "APLIQUE",
|
||||
"April": "Abril",
|
||||
"August": "Agosto",
|
||||
"Black": "Preto",
|
||||
"Brazilian": "Brasileiro",
|
||||
"Brazilian": "Brasileira",
|
||||
"breakfast": "Café da manhã",
|
||||
"British": "Britânico",
|
||||
"British": "Britânica",
|
||||
"buEmp": "O arquivo de backup está vazio",
|
||||
"buFol": "Pasta de backup",
|
||||
"buInc": "Arquivo de backup malformado ou corrupto",
|
||||
"buMod": "O arquivo de backup foi modificado em outro lugar",
|
||||
"Challenging": "Desafiando",
|
||||
"Chinese": "Chinês",
|
||||
"cPic": "Foto do corte",
|
||||
"Challenging": "Difícil",
|
||||
"Chinese": "Chinesa",
|
||||
"cPic": "Recorte da foto",
|
||||
"cui": "Cozinha",
|
||||
"Danish": "Dinamarquês",
|
||||
"December": "Dezembro",
|
||||
"Danish": "Dinamarquesa",
|
||||
"delRecInfo": "Você está prestes a apagar permanentemente a receita %s",
|
||||
"delRecsInfo": "Você está prestes a apagar permanentemente %s",
|
||||
"detailed": "Detalhado",
|
||||
|
@ -259,32 +242,30 @@
|
|||
"disc": "Esta receita tem mudanças não salvas. O que você gostaria de fazer?",
|
||||
"donate": "Doe",
|
||||
"Easy": "Fácil",
|
||||
"Egyptian": "Egípcio",
|
||||
"English": "Inglês",
|
||||
"Egyptian": "Egípcia",
|
||||
"English": "Inglesa",
|
||||
"expip": "Exportação em curso",
|
||||
"expSuc": "Sucesso na exportação",
|
||||
"February": "Fevereiro",
|
||||
"Filtered recipes": "Receitas filtradas",
|
||||
"fltr": "Filtro",
|
||||
"French": "Francês",
|
||||
"German": "Alemão",
|
||||
"gh": "Vista em GitHub",
|
||||
"Greek": "Grego",
|
||||
"French": "Francesa",
|
||||
"German": "Alemã",
|
||||
"gh": "Veja em GitHub",
|
||||
"Greek": "Grega",
|
||||
"grid": "Grade",
|
||||
"guide": "Guia do usuário",
|
||||
"impFail": "A importação falhou",
|
||||
"impip": "Importação em curso",
|
||||
"impSuc": "Importação com êxito",
|
||||
"Indian": "Índio",
|
||||
"Indian": "Indiana",
|
||||
"invFile": "Arquivo inválido",
|
||||
"Irish": "Irlandês",
|
||||
"Italian": "Italiano",
|
||||
"Jamaican": "Jamaicano",
|
||||
"January": "Janeiro",
|
||||
"Japanese": "Japonês",
|
||||
"Jewish": "Judeu",
|
||||
"Irish": "Irlandesa",
|
||||
"Italian": "Italiana",
|
||||
"Jamaican": "Jamaicana",
|
||||
"Japanese": "Japonesa",
|
||||
"Jewish": "Judaica",
|
||||
"yld": "Porção",
|
||||
"sysDefB": "Padrão do sistema + Preto",
|
||||
"sysDefB": "Padrão do sistema + preto",
|
||||
"wAgo": "%s semanas atrás",
|
||||
"Thai": "Tailandesa",
|
||||
"mAgo": "%s meses atrás",
|
||||
|
@ -292,21 +273,53 @@
|
|||
"dAgo": "%s dias atrás",
|
||||
"tmr": "Temporizador %s",
|
||||
"strtBtn": "INICIAR",
|
||||
"ntmr": "Novo timer",
|
||||
"timer": "Temporizador de Culinária",
|
||||
"prstBtn": "PERSPECTIVAS",
|
||||
"ntmr": "Novo temporizador",
|
||||
"timer": "Temporizador de culinária",
|
||||
"prstBtn": "PREDEFINIÇÕES",
|
||||
"sec": "s",
|
||||
"stop": "Parada",
|
||||
"delay": "Atraso",
|
||||
"tmrPrsts": "Predefinições temporizadas",
|
||||
"fwr": "para qual receita?",
|
||||
"aTPrst": "Adicionado às predefinições",
|
||||
"tmrSnd": "Som temporizador",
|
||||
"tmrvbrt": "Temporizador vibrar",
|
||||
"tmrSnd": "Som do temporizador",
|
||||
"tmrvbrt": "Vibração do temporizador",
|
||||
"dlyDur": "Duração do atraso",
|
||||
"minute": "minuto",
|
||||
"minutes": "atas",
|
||||
"minutes": "minutos",
|
||||
"hour": "hora",
|
||||
"hours": "horas",
|
||||
"seconds": "segundos"
|
||||
"seconds": "segundos",
|
||||
"prsts": "Predefinições",
|
||||
"delPrst": "Você está prestes a apagar %s das predefinições",
|
||||
"tmrRm": "Temporizador removido",
|
||||
"notifSetg": "Configurações de notificação",
|
||||
"admp": "Apagar automaticamente planos de refeições",
|
||||
"wDBy": "%1$s foi atrasada por %2$s",
|
||||
"otaw": "Mais antigas que 1 semana",
|
||||
"otam": "Mais antigas que 1 mês",
|
||||
"otay": "Mais antigas que 1 ano",
|
||||
"plsCrt": "Use o botão mais para criar uma",
|
||||
"ehwmp": "Coma saudavelmente com planejamento de refeições!",
|
||||
"selMT": "Selecione tipo de refeição",
|
||||
"ystr": "Ontem",
|
||||
"tmrw": "Amanhã",
|
||||
"tdy": "Hoje",
|
||||
"cpy": "cópia",
|
||||
"d": "Dia",
|
||||
"wk": "Semana",
|
||||
"mnth": "Mês",
|
||||
"calVM": "Modo de vista de calendário",
|
||||
"oAP": "%1$s decorrendo, %2$s pausado",
|
||||
"ttv": "Pressionar para ver",
|
||||
"dismissAll": "Rejeitar todos os temporizadores",
|
||||
"dismiss": "Rejeitar",
|
||||
"texp": "%s temporizadores expiraram",
|
||||
"prstTU": "Tempo predefinido atualiado",
|
||||
"ccwt": "Cozinhe co confiança com temporizadores!",
|
||||
"random": "Aleatória",
|
||||
"nvr": "Nunca",
|
||||
"gtD": "Ir à data",
|
||||
"rstBtn": "REINICIAR",
|
||||
"add": "Adicionar",
|
||||
"ksavr": "Manter tela ligada ao ver receitas"
|
||||
}
|
||||
|
|
116
app/i18n/pt.json
|
@ -14,7 +14,7 @@
|
|||
"Chinese": "Chinesa",
|
||||
"clove": "bulbo",
|
||||
"cm": "cm",
|
||||
"Created": "Criado",
|
||||
"Created": "Criada",
|
||||
"cup": "copo",
|
||||
"Cup": "Copo",
|
||||
"Danish": "Dinamarquesa",
|
||||
|
@ -23,7 +23,7 @@
|
|||
"Difficulty level": "Nível de dificuldade",
|
||||
"dinner": "Jantar",
|
||||
"dozen": "dúzia",
|
||||
"drop": "solta",
|
||||
"drop": "gota",
|
||||
"dsp": "colher de sobremesa",
|
||||
"Easy": "Fácil",
|
||||
"Egyptian": "Egípcia",
|
||||
|
@ -87,7 +87,7 @@
|
|||
"planner": "Plano de refeições",
|
||||
"Portuguese": "Portuguesa",
|
||||
"Poultry": "Aves",
|
||||
"Pound": "Pound",
|
||||
"Pound": "Libra",
|
||||
"pt": "pt",
|
||||
"qt": "qt",
|
||||
"Quickest first": "Mais rápidas primeiro",
|
||||
|
@ -100,8 +100,8 @@
|
|||
"Scottish": "Escocesa",
|
||||
"Seafood": "Marisco",
|
||||
"Serving": "Porção",
|
||||
"SET": "DEFINIR",
|
||||
"Settings": "Definições",
|
||||
"SET": "APLICAR",
|
||||
"Settings": "Configurações",
|
||||
"Side dishes": "Acompanhamentos",
|
||||
"Slowest first": "Mais lentas primeiro",
|
||||
"small": "pequeno",
|
||||
|
@ -124,8 +124,8 @@
|
|||
"Undefined": "Indefinido",
|
||||
"unit": "unidade",
|
||||
"Unit": "Unidade",
|
||||
"Vegan": "Vegano",
|
||||
"Vegetarian": "Vegetariano",
|
||||
"Vegan": "Vegana",
|
||||
"Vegetarian": "Vegetariana",
|
||||
"Vietnamese": "Vietnamita",
|
||||
"yesterday": "ontem",
|
||||
"noAccSensor": "O sensor do acelerómetro ou está desativado ou não está a funcionar",
|
||||
|
@ -133,12 +133,12 @@
|
|||
"rmCuiInfo": "Está prestes a retirar %s da lista de cozinha",
|
||||
"rmUInfo": "Está prestes a remover %s da lista de unidades",
|
||||
"rmYUInfo": "Está prestes a remover %s da lista de unidades de porções",
|
||||
"sVw": "Sacudir para ver a receita aleatória",
|
||||
"sVw": "Agitar para ver uma receita aleatória",
|
||||
"sVwInfo": "Ajuda-o a escolher o que deve cozinhar quando não consegue decidir",
|
||||
"swm": "Começa na segunda-feira",
|
||||
"sysDef": "Padrão do sistema",
|
||||
"title": "Título",
|
||||
"tLInfo": "As receitas que quer experimentar mais tarde estão listadas aqui",
|
||||
"tLInfo": "As receitas que quer experimentar mais tarde estão mostradas aqui",
|
||||
"triedInfo": "Experimentou esta receita %s",
|
||||
"trnsl": "Traduzir",
|
||||
"ts": "Etiquetas",
|
||||
|
@ -148,36 +148,32 @@
|
|||
"wAgo": "%s semanas atrás",
|
||||
"photogrid": "Grelha de fotos",
|
||||
"opts": "Opções",
|
||||
"October": "Outubro",
|
||||
"nwYiU": "Nova unidade de porção",
|
||||
"nwCat": "Nova categoria",
|
||||
"November": "Novembro",
|
||||
"nos": "Notas",
|
||||
"noRecsInL": "Nenhuma das receitas aqui apresentadas corresponde à sua pesquisa",
|
||||
"fltr": "Filtro",
|
||||
"Filtered recipes": "Receitas filtradas",
|
||||
"February": "Fevereiro",
|
||||
"expSuc": "Exportado com sucesso",
|
||||
"expip": "Exportação em curso",
|
||||
"expBu": "Exportar apoio total",
|
||||
"expBu": "Exportar cópia de segurança completa",
|
||||
"editRec": "Editar receita",
|
||||
"donate": "Doação",
|
||||
"disc": "Esta receita tem alterações não guardadas. O que gostaria de fazer?",
|
||||
"disc": "Esta receita tem alterações por guardar. O que quer fazer?",
|
||||
"detailed": "Detalhado",
|
||||
"delRecsInfo": "Está prestes a eliminar permanentemente %s",
|
||||
"delRecInfo": "Está prestes a eliminar permanentemente a receita %s",
|
||||
"December": "Dezembro",
|
||||
"db": "Base de dados",
|
||||
"dAgo": "%s dias atrás",
|
||||
"cui": "Cozinha",
|
||||
"cPic": "Foto do corte",
|
||||
"cPic": "Recortar fotografia",
|
||||
"cookT": "Tempo de cozedura",
|
||||
"conf": "Confirme",
|
||||
"cmbs": "Combinações",
|
||||
"cat": "Categoria",
|
||||
"buMod": "O ficheiro de cópia de segurança foi modificado noutro local",
|
||||
"buMod": "O ficheiro da cópia de segurança foi alterado noutro local",
|
||||
"buInfo": "Gera um ficheiro ZIP contendo todos os seus dados que podem ser importados de volta",
|
||||
"buInc": "Ficheiro da cópia de segurança está mal formado ou corrupto",
|
||||
"buInc": "O ficheiro da cópia de segurança está mal formado ou corrupto",
|
||||
"buFol": "Pasta da cópia de segurança",
|
||||
"buEmp": "O ficheiro da cópia de segurança está vazio",
|
||||
"Black": "Preto",
|
||||
|
@ -186,30 +182,23 @@
|
|||
"buto": "Cópia de segurança guardada em %s",
|
||||
"restDone": "Reposição feita",
|
||||
"restCuiL": "Repor a lista de cozinha",
|
||||
"restCatL": "Reiniciar lista de categorias",
|
||||
"rest": "Reiniciar",
|
||||
"restCatL": "Repor lista de categorias",
|
||||
"rest": "Repor",
|
||||
"resNF": "Receita não encontrada",
|
||||
"req": "Necessárias %s",
|
||||
"req": "Necessário %s",
|
||||
"recU": "Atualizado:",
|
||||
"recTitle": "A minha receita saudável",
|
||||
"recs": "receitas",
|
||||
"recRm": "Receita retirada",
|
||||
"recPic": "Fotografia de receita",
|
||||
"recRm": "Receita removida",
|
||||
"recPic": "Fotografia da receita",
|
||||
"recListEmp": "Nada aqui! Adicione algumas receitas e tente novamente",
|
||||
"recI": "Importado:",
|
||||
"recI": "Importadas:",
|
||||
"recF": "receitas encontradas",
|
||||
"recE": "Já existem:",
|
||||
"rec": "Receita",
|
||||
"THU": "QUI",
|
||||
"WED": "QUA",
|
||||
"TUE": "TER",
|
||||
"SUN": "DOM",
|
||||
"SAT": "SÁB",
|
||||
"MON": "SEG",
|
||||
"FRI": "SEX",
|
||||
"sysDefB": "Padrão do sistema + Preto",
|
||||
"sysDefB": "Padrão do sistema + preto",
|
||||
"trySer": "PROCURAR EM TODAS AS RECEITAS?",
|
||||
"stp": "Etapa",
|
||||
"stp": "Etapa %s",
|
||||
"stars": "Classificação por estrelas",
|
||||
"sru": "Partilhar receita usando...",
|
||||
"srt": "Ordenar",
|
||||
|
@ -218,7 +207,6 @@
|
|||
"simple": "Simples",
|
||||
"shr": "Partilhar",
|
||||
"ser": "Pesquisar",
|
||||
"September": "Setembro",
|
||||
"selRec": "Selecione a receita",
|
||||
"rst": "REINICIAR",
|
||||
"rp": "Remover fotografia",
|
||||
|
@ -229,11 +217,11 @@
|
|||
"yld": "Porção",
|
||||
"restYUL": "Repor lista de unidades de porções",
|
||||
"restUL": "Repor lista de unidades",
|
||||
"restInfo": "A redefinição de uma lista eliminará as entradas criadas pelo utilizador e restaurará as entradas predefinidas. As receitas existentes não serão afetadas.",
|
||||
"restInfo": "A reposição de uma lista eliminará as entradas criadas pelo utilizador e restaurará as entradas predefinidas. As receitas existentes não serão afetadas.",
|
||||
"rBtn": "REMOVER",
|
||||
"priv": "Política de privacidade",
|
||||
"prepT": "Tempo de preparação",
|
||||
"plsAdd": "Use o botão mais para adicionar uma",
|
||||
"plsAdd": "Use o botão + para adicionar uma",
|
||||
"pht": "Fotografia da receita",
|
||||
"noRecs": "Nenhuma receita corresponde à pesquisa",
|
||||
"noFavs": "Ainda não tem favoritos",
|
||||
|
@ -244,18 +232,13 @@
|
|||
"newRec": "Nova receita",
|
||||
"newCui": "Nova cozinha",
|
||||
"minimal": "Mínimo",
|
||||
"May": "Maio",
|
||||
"March": "Março",
|
||||
"mAgo": "%s meses atrás",
|
||||
"ltAgo": "há muito tempo",
|
||||
"listVM": "Modo de vista em lista",
|
||||
"lang": "Idioma",
|
||||
"kEdit": "CONTINUAR A EDITAR",
|
||||
"June": "Junho",
|
||||
"July": "Julho",
|
||||
"joinTG": "Junte-se ao grupo no Telegram",
|
||||
"January": "Janeiro",
|
||||
"it": "Item",
|
||||
"it": "Item %s",
|
||||
"invFile": "Ficheiro inválido",
|
||||
"intf": "Interface",
|
||||
"inss": "Instruções",
|
||||
|
@ -273,9 +256,7 @@
|
|||
"dBtn": "ELIMINAR",
|
||||
"conBtn": "CONTINUAR",
|
||||
"cBtn": "CANCELAR",
|
||||
"August": "Agosto",
|
||||
"aStpBtn": "ADICIONAR PASSO",
|
||||
"April": "Abril",
|
||||
"appRst": "É necessário reiniciar a aplicação",
|
||||
"apply": "APLICAR",
|
||||
"appInfo": "EnRecipes é um livro de receitas digital de código aberto, amigo da privacidade, que lhe permite criar, gerir e partilhar as suas receitas",
|
||||
|
@ -303,10 +284,47 @@
|
|||
"hour": "hora",
|
||||
"hours": "horas",
|
||||
"seconds": "segundos",
|
||||
"tmrvbrt": "Vibrador temporizador",
|
||||
"tmrSnd": "Som temporizador",
|
||||
"tmrvbrt": "Vibrador do temporizador",
|
||||
"tmrSnd": "Som do temporizador",
|
||||
"aTPrst": "Adicionado às predefinições",
|
||||
"fwr": "para que receita?",
|
||||
"tmrPrsts": "Predefinições temporizadas",
|
||||
"prstBtn": "PRIMEIROS"
|
||||
"fwr": "para qual receita?",
|
||||
"prstBtn": "PREDEFINIÇÕES",
|
||||
"notifSetg": "Configurações de notificação",
|
||||
"tmrRm": "Temporizador removido",
|
||||
"delPrst": "Está prestes a eliminar %s das predefinições",
|
||||
"prsts": "Predefinições",
|
||||
"ttv": "Tocar para ver",
|
||||
"dismissAll": "Rejeitar todos os temporizadores",
|
||||
"dismiss": "Rejeitar",
|
||||
"texp": "%s temporizadores expiraram",
|
||||
"wDBy": "%1$s foi adiado por %2$s",
|
||||
"prstTU": "Tempo predefinido atualizado",
|
||||
"ccwt": "Cozinhe com segurança com temporizadores!",
|
||||
"gtD": "Ir à data",
|
||||
"random": "Aleatória",
|
||||
"nvr": "Nunca",
|
||||
"otaw": "Mais antigas que 1 semana",
|
||||
"otam": "Mais antigas que 1 mês",
|
||||
"otay": "Mais antigas que 1 ano",
|
||||
"admp": "Eliminar automaticamente planos de refeições",
|
||||
"plsCrt": "Use o botão + para criar uma",
|
||||
"ehwmp": "Coma saudavelmente com planificações de refeições!",
|
||||
"selMT": "Selecionar tipo de refeição",
|
||||
"ystr": "Ontem",
|
||||
"tmrw": "Amanhã",
|
||||
"tdy": "Hoje",
|
||||
"cpy": "cópia",
|
||||
"d": "Dia",
|
||||
"wk": "Semana",
|
||||
"mnth": "Mês",
|
||||
"calVM": "Modo de vista tipo calendário",
|
||||
"oAP": "%1$s a decorrer, %2$s em pausa",
|
||||
"rstBtn": "REINICIAR",
|
||||
"add": "Adicionar",
|
||||
"esgb": "Deslizar para a borda para voltar",
|
||||
"esgbInfo": "Desative esta opção se tiver problemas ao navegar",
|
||||
"ksavrInfo": "Impede que o ecrã desligue ao ver uma receita",
|
||||
"ksavr": "Manter ecrã ligado ao ver receitas",
|
||||
"addSectBtn": "ADICIONAR SECÇÃO",
|
||||
"sect": "Secção %s"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "EnRecipes - это цифровая кулинарная книга с открытым исходным кодом, обеспечивающая конфиденциальность, которая позволяет вам создавать, управлять и делиться своими рецептами",
|
||||
"apply": "ПРИМЕНЯТЬ",
|
||||
"appRst": "Требуется перезапуск приложения",
|
||||
"April": "Апрель",
|
||||
"aStpBtn": "ДОБАВИТЬ ШАГ",
|
||||
"August": "Август",
|
||||
"Barbecue": "Барбекю",
|
||||
"Beverages": "Напитки",
|
||||
"Black": "Чернить",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "Темная",
|
||||
"db": "База данных",
|
||||
"dBtn": "УДАЛИТЬ",
|
||||
"December": "Декабрь",
|
||||
"delRecInfo": "Вы собираетесь полностью удалить рецепт %s",
|
||||
"delRecsInfo": "Вы собираетесь безвозвратно удалить %s",
|
||||
"Desserts": "Десерты",
|
||||
|
@ -75,14 +72,12 @@
|
|||
"expip": "Выполняется экспорт",
|
||||
"expSuc": "Успех экспорта",
|
||||
"favourites": "Избранное",
|
||||
"February": "Февраль",
|
||||
"Filipino": "Филиппинская",
|
||||
"Filtered recipes": "Отфильтрованные рецепты",
|
||||
"fl oz": "жидкая унция",
|
||||
"fltr": "Фильтр",
|
||||
"Fluid Ounce": "Жидкая унция",
|
||||
"French": "Французская",
|
||||
"FRI": "ПТ",
|
||||
"fsList": "Здесь будут перечислены рецепты, которые вы отметили как любимые",
|
||||
"g": "г",
|
||||
"gal": "галлон",
|
||||
|
@ -111,12 +106,9 @@
|
|||
"it": "Ингредиент",
|
||||
"Italian": "Итальянская",
|
||||
"Jamaican": "Ямайская",
|
||||
"January": "Январь",
|
||||
"Japanese": "Японская",
|
||||
"Jewish": "Еврейская",
|
||||
"joinTG": "Присоединяйтесь к группе в Telegram",
|
||||
"July": "Июль",
|
||||
"June": "Июнь",
|
||||
"kEdit": "ПРОДОЛЖИТЬ РЕДАКТИРОВАНИЕ",
|
||||
"Kenyan": "Кенийская",
|
||||
"kg": "кг",
|
||||
|
@ -136,8 +128,6 @@
|
|||
"lunch": "Обед",
|
||||
"mAgo": "%s месяцев назад",
|
||||
"Main dishes": "Основные блюда",
|
||||
"March": "Март",
|
||||
"May": "Май",
|
||||
"Meat": "Мясо",
|
||||
"medium": "средний",
|
||||
"Mexican": "Мексиканская",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "Минимальный",
|
||||
"ml": "мл",
|
||||
"Moderate": "Средний",
|
||||
"MON": "ПН",
|
||||
"newCui": "Новая кухня",
|
||||
"Newest first": "Сначала новое",
|
||||
"newRec": "Новый рецепт",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "По вашему запросу ничего не найдено",
|
||||
"noRecsInL": "Ни один из рецептов здесь не соответствует вашему запросу",
|
||||
"nos": "Заметки",
|
||||
"November": "Ноябрь",
|
||||
"nwCat": "Новая категория",
|
||||
"nwYiU": "Новая единица измерения подачи",
|
||||
"October": "Октябрь",
|
||||
"OK": "ОК",
|
||||
"Oldest first": "Сначала старые",
|
||||
"opts": "Параметры",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "ПЕРЕЗАПУСТИТЬ",
|
||||
"Russian": "Русская",
|
||||
"Salads": "Салаты",
|
||||
"SAT": "СБ",
|
||||
"Sauces": "Соусы",
|
||||
"Scottish": "Шотландская",
|
||||
"Seafood": "Морепродукты",
|
||||
"selRec": "Выберите рецепт",
|
||||
"September": "Сентябрь",
|
||||
"ser": "Поиск",
|
||||
"Serving": "Порция",
|
||||
"SET": "УСТАНОВИТЬ",
|
||||
|
@ -250,7 +235,6 @@
|
|||
"stick": "палочка",
|
||||
"stp": "Шаг",
|
||||
"strAdd": "Начните добавлять свои рецепты!",
|
||||
"SUN": "ВС",
|
||||
"sVw": "Встряхнуть, чтобы показать случайный рецепт",
|
||||
"sVwInfo": "Помогает выбрать, что приготовить, когда вы не можете решить",
|
||||
"Swedish": "Шведская",
|
||||
|
@ -261,7 +245,6 @@
|
|||
"Teaspoon": "Чайная ложка",
|
||||
"Thai": "Тайская",
|
||||
"Theme": "Тема",
|
||||
"THU": "ЧТ",
|
||||
"title": "Заголовок",
|
||||
"tLInfo": "Здесь будут перечислены рецепты, которые вы хотите попробовать позже",
|
||||
"today": "сегодня",
|
||||
|
@ -272,7 +255,6 @@
|
|||
"ts": "Теги",
|
||||
"tsInfo": "разделяйте пробелами",
|
||||
"tsp": "ч.л..",
|
||||
"TUE": "ВТ",
|
||||
"Turkish": "Турецкая",
|
||||
"Undefined": "Не указано",
|
||||
"unit": "единица измерения",
|
||||
|
@ -283,7 +265,6 @@
|
|||
"Vegetarian": "Вегетарианский",
|
||||
"Vietnamese": "Вьетнамская",
|
||||
"wAgo": "%s недель назад",
|
||||
"WED": "СР",
|
||||
"yesterday": "вчера",
|
||||
"yieldQ": "Подавать в количестве",
|
||||
"yieldU": "Подавать в",
|
||||
|
@ -298,7 +279,6 @@
|
|||
"stop": "Стоп",
|
||||
"delay": "Задержка",
|
||||
"prstBtn": "ПРЕЗЕТЫ",
|
||||
"tmrPrsts": "Предустановки таймера",
|
||||
"fwr": "для какого рецепта?",
|
||||
"aTPrst": "Добавлено в предустановки",
|
||||
"tmrSnd": "Звук таймера",
|
||||
|
@ -308,5 +288,9 @@
|
|||
"minutes": "минут",
|
||||
"hour": "час",
|
||||
"hours": "часы",
|
||||
"seconds": "секунды"
|
||||
"seconds": "секунды",
|
||||
"prsts": "Пресеты",
|
||||
"delPrst": "Вы собираетесь удалить %s из предустановок",
|
||||
"tmrRm": "Таймер удален",
|
||||
"notifSetg": "Настройки уведомлений"
|
||||
}
|
||||
|
|
|
@ -18,9 +18,7 @@
|
|||
"appInfo": "என்ரெசிபீஸ் என்பது ஒரு திறந்த மூல, தனியுரிமைக்கு ஏற்ற டிஜிட்டல் சமையல் புத்தகம், இது உங்கள் சமையல் குறிப்புகளை உருவாக்க, நிர்வகிக்க மற்றும் பகிர உதவுகிறது",
|
||||
"apply": "இடு",
|
||||
"appRst": "பயன்பாட்டு மறுதொடக்கம் தேவை",
|
||||
"April": "ஏப்ரல்",
|
||||
"aStpBtn": "செய்முறையைச் சேர்",
|
||||
"August": "ஆகஸ்ட்",
|
||||
"Barbecue": "பார்பெக்யூ",
|
||||
"Beverages": "பானங்கள்",
|
||||
"Black": "கருப்பு",
|
||||
|
@ -53,7 +51,6 @@
|
|||
"Dark": "இருள்",
|
||||
"db": "தரவுத்தளம்",
|
||||
"dBtn": "நீக்கு",
|
||||
"December": "டிசம்பர்",
|
||||
"delRecInfo": "நீங்கள் %s சமையல் குறிப்பை நிரந்தரமாக நீக்க உள்ளீர்கள்",
|
||||
"delRecsInfo": "நீங்கள் %s நிரந்தரமாக நீக்க உள்ளீர்கள்",
|
||||
"Desserts": "இனிப்புகள்",
|
||||
|
@ -75,20 +72,18 @@
|
|||
"expip": "ஏற்றுமதி செயலில் உள்ளது",
|
||||
"expSuc": "வெற்றிகரமாக ஏற்றுமதி செய்யப்பட்டது",
|
||||
"favourites": "பிடித்தவை",
|
||||
"February": "பிப்ரவரி",
|
||||
"Filipino": "பிலிப்பைன்ஸ்",
|
||||
"Filtered recipes": "வடிகட்டப்பட்ட சமையல் குறிப்புகள்",
|
||||
"fl oz": "திரவ அவுன்ஸ",
|
||||
"fltr": "வடிகட்டு",
|
||||
"Fluid Ounce": "திரவ அவுன்ஸ்",
|
||||
"French": "பிரஞ்சு",
|
||||
"FRI": "வெ",
|
||||
"fsList": "உங்களுக்கு பிடித்த சமையல் குறிப்புகள் இங்கே பட்டியலிடப்படும்",
|
||||
"g": "கிராம்",
|
||||
"gal": "கேலன்",
|
||||
"Gallon": "கேலன்",
|
||||
"German": "ஜெர்மன்",
|
||||
"gh": "கிட்ஹப்பில் காண்க",
|
||||
"gh": "GitHub இல் காண்க",
|
||||
"Gram": "கிராம்",
|
||||
"Greek": "கிரேக்க",
|
||||
"grid": "கட்டம்",
|
||||
|
@ -108,15 +103,12 @@
|
|||
"intf": "இடைமுகம்",
|
||||
"invFile": "தவறான கோப்பு",
|
||||
"Irish": "ஐரிஷ்",
|
||||
"it": "பொருள்",
|
||||
"it": "பொருள் %s",
|
||||
"Italian": "இத்தாலிய",
|
||||
"Jamaican": "ஜமைக்கா",
|
||||
"January": "ஜனவரி",
|
||||
"Japanese": "ஜப்பானிய",
|
||||
"Jewish": "யூத",
|
||||
"joinTG": "டெலிகிராம் குழுவில் சேர்க",
|
||||
"July": "ஜூலை",
|
||||
"June": "ஜூன்",
|
||||
"kEdit": "தொடர்ந்து திருத்து",
|
||||
"Kenyan": "கென்ய",
|
||||
"kg": "கிலோகிராம்",
|
||||
|
@ -136,8 +128,6 @@
|
|||
"lunch": "மதிய உணவு",
|
||||
"mAgo": "%s மாதங்களுக்கு முன்பு",
|
||||
"Main dishes": "முக்கிய உணவுகள்",
|
||||
"March": "மார்ச்",
|
||||
"May": "மே",
|
||||
"Meat": "இறைச்சி",
|
||||
"medium": "நடுத்தர",
|
||||
"Mexican": "மெக்சிகன்",
|
||||
|
@ -147,7 +137,6 @@
|
|||
"minimal": "குறைந்தபட்சம்",
|
||||
"ml": "மில்லிலிட்டர்",
|
||||
"Moderate": "மிதமானது",
|
||||
"MON": "தி",
|
||||
"newCui": "புதிய உணவு வகை",
|
||||
"Newest first": "புதியது முதலில்",
|
||||
"newRec": "புதிய சமையல் குறிப்பு",
|
||||
|
@ -162,10 +151,8 @@
|
|||
"noRecs": "உங்கள் தேடலுடன் எந்த சமையல் குறிப்புகளும் பொருந்தவில்லை",
|
||||
"noRecsInL": "இங்குள்ள சமையல் குறிப்புகள் எதுவும் உங்கள் தேடலுடன் பொருந்தவில்லை",
|
||||
"nos": "குறிப்புகள்",
|
||||
"November": "நவம்பர்",
|
||||
"nwCat": "புதிய பகுப்பு",
|
||||
"nwYiU": "புதிய மகசூல் அலகு",
|
||||
"October": "அக்டோபர்",
|
||||
"OK": "சரி",
|
||||
"Oldest first": "பழையன முதலில்",
|
||||
"opts": "விருப்பங்கள்",
|
||||
|
@ -179,7 +166,7 @@
|
|||
"Piece": "துண்டு",
|
||||
"pinch": "கிள்ளு",
|
||||
"planner": "உணவுத் திட்டம்",
|
||||
"plsAdd": "ஒன்றைச் சேர்க்க பிளஸ் பொத்தானைப் பயன்படுத்தவும்",
|
||||
"plsAdd": "ஒன்றைச் சேர்க்க + பொத்தானைப் பயன்படுத்தவும்",
|
||||
"Portuguese": "போர்த்துகீசியம்",
|
||||
"Poultry": "கோழி",
|
||||
"Pound": "பவுண்டு",
|
||||
|
@ -223,12 +210,10 @@
|
|||
"rst": "மறுதொடக்கம்",
|
||||
"Russian": "ரஷ்ய",
|
||||
"Salads": "சாலடுகள்",
|
||||
"SAT": "ச",
|
||||
"Sauces": "சாஸ்கள்",
|
||||
"Scottish": "ஸ்காட்டிஷ்",
|
||||
"Seafood": "கடல் உணவு",
|
||||
"selRec": "சமையல் குறிப்பைத் தேர்ந்தெடுக்கவும்",
|
||||
"September": "செப்டம்பர்",
|
||||
"ser": "தேடு",
|
||||
"Serving": "கூறு",
|
||||
"SET": "அமை",
|
||||
|
@ -248,9 +233,8 @@
|
|||
"sru": "சமையல் குறிப்பை பகிரவும்...",
|
||||
"stars": "நட்சத்திர மதிப்பீடு",
|
||||
"stick": "குச்சி",
|
||||
"stp": "செய்முறை",
|
||||
"stp": "செய்முறை %s",
|
||||
"strAdd": "உங்கள் சமையல் குறிப்புகளைச் சேர்க்கத் தொடங்குங்கள்!",
|
||||
"SUN": "ஞா",
|
||||
"sVw": "சாதனத்தை அசைத்து சீரற்ற சமையல் குறிப்பை காண்க",
|
||||
"sVwInfo": "நீங்கள் தீர்மானிக்க முடியாதபோது என்ன சமைக்கலாம் என்பதைத் தேர்வுசெய்ய உதவும்",
|
||||
"Swedish": "ஸ்வீடிஷ்",
|
||||
|
@ -261,7 +245,6 @@
|
|||
"Teaspoon": "டீஸ்பூன்",
|
||||
"Thai": "தாய்",
|
||||
"Theme": "தீம்",
|
||||
"THU": "வி",
|
||||
"title": "தலைப்பு",
|
||||
"tLInfo": "நீங்கள் பின்னர் முயற்சிக்க விரும்பும் சமையல் குறிப்புகள் இங்கே பட்டியலிடப்படும்",
|
||||
"today": "இன்று",
|
||||
|
@ -272,7 +255,6 @@
|
|||
"ts": "குறிச்சொற்கள்",
|
||||
"tsInfo": "இடைவெளிகளுடன் பிரிக்கவும்",
|
||||
"tsp": "டீஸ்பூன்",
|
||||
"TUE": "செ",
|
||||
"Turkish": "துருக்கிய",
|
||||
"Undefined": "வரையறுக்கப்படாதவை",
|
||||
"unit": "அலகு",
|
||||
|
@ -283,11 +265,67 @@
|
|||
"Vegetarian": "சைவம்",
|
||||
"Vietnamese": "வியட்நாமிய",
|
||||
"wAgo": "%s வாரங்களுக்கு முன்பு",
|
||||
"WED": "பு",
|
||||
"yesterday": "நேற்று",
|
||||
"yieldQ": "மகசூல் அளவு",
|
||||
"yieldU": "மகசூல் அலகு",
|
||||
"yld": "மகசூல்",
|
||||
"buto": "%s இல் காப்புப் பிரதி எடுக்கப்பட்டது",
|
||||
"sysDefB": "அமைப்பு இயல்புநிலை + கருப்பு"
|
||||
"sysDefB": "அமைப்பு இயல்புநிலை + கருப்பு",
|
||||
"notifSetg": "அறிவிப்பு அமைப்புகள்",
|
||||
"tmrRm": "டைமர் நீக்கப்பட்டது",
|
||||
"seconds": "வினாடிகள்",
|
||||
"hours": "மணி",
|
||||
"hour": "மணி",
|
||||
"minutes": "நிமிடங்கள்",
|
||||
"minute": "நிமிடம்",
|
||||
"dlyDur": "தாமத காலம்",
|
||||
"tmrvbrt": "டைமர் அதிர்வு",
|
||||
"tmrSnd": "டைமர் ஒலி",
|
||||
"aTPrst": "முன்னமைவுகளில் சேர்க்கப்பட்டது",
|
||||
"fwr": "எந்த சமையல் குறிப்புக்காக?",
|
||||
"delPrst": "நீங்கள் முன்னமைவுகளிலிருந்து %s ஐ நீக்க உள்ளீர்கள்",
|
||||
"prsts": "முன்னமைவுகள்",
|
||||
"prstBtn": "முன்னமைவுகள்",
|
||||
"tmr": "டைமர் %s",
|
||||
"delay": "தாமதப்படுத்து",
|
||||
"stop": "நிறுத்து",
|
||||
"strtBtn": "துடங்கு",
|
||||
"ntmr": "புதிய டைமர்",
|
||||
"timer": "சமையல் டைமர்",
|
||||
"sec": "வினாடி",
|
||||
"gtD": "தேதிக்குச் செல்",
|
||||
"random": "ஒழுங்குமுறையின்றி",
|
||||
"prstTU": "முன்னமைவின் நேரம் புதுப்பிக்கப்பட்டது",
|
||||
"ccwt": "டைமர்களுடன் நம்பிக்கையுடன் சமையுங்கள்!",
|
||||
"ttv": "பார்க்க தட்டவும்",
|
||||
"dismissAll": "அனைத்து டைமர்களையும் அகற்று",
|
||||
"dismiss": "அகற்று",
|
||||
"texp": "%s டைமர்கள் முடிந்துவிட்டன",
|
||||
"wDBy": "%1$s %2$s தாமதமாக்கப்பட்டது",
|
||||
"ystr": "நேற்று",
|
||||
"tmrw": "நாளை",
|
||||
"tdy": "இன்று",
|
||||
"cpy": "நகல்",
|
||||
"calVM": "கேலெண்டர் காட்சி முறை",
|
||||
"oAP": "%1$s செயலில் உள்ளது,%2$s இடைநிறுத்தப்பட்டது",
|
||||
"d": "நாள்",
|
||||
"wk": "வாரம்",
|
||||
"mnth": "மாதம்",
|
||||
"nvr": "ஒருபோதும்",
|
||||
"otaw": "ஒரு வாரத்திற்கும் மேலானது",
|
||||
"otam": "ஒரு மாதத்திற்கும் மேலானது",
|
||||
"otay": "ஒரு வருடத்திற்கும் மேலானது",
|
||||
"admp": "உணவு திட்டங்களை தானாக நீக்கு",
|
||||
"plsCrt": "ஒன்றை உருவாக்க + பொத்தானைப் பயன்படுத்தவும்",
|
||||
"ehwmp": "உணவு திட்டங்களுடன் ஆரோக்கியமாக சாப்பிடுங்கள்!",
|
||||
"selMT": "உணவு வகையைத் தேர்ந்தெடுக்கவும்",
|
||||
"esgbInfo": "வழிசெலுத்தலில் சிக்கல்கள் இருந்தால் இந்த விருப்பத்தை முடக்குக",
|
||||
"esgb": "விளிம்பிலிருந்து ஸ்வைப் செய்து பின் செல்",
|
||||
"ksavrInfo": "சமையல் குறிப்பு பார்க்கும் போது திரையை உறக்கநிலைக்குச் செல்லாது தடுக்கும்",
|
||||
"ksavr": "சமையல் குறிப்பு பார்க்கும் போது திரையை விழித்திரு",
|
||||
"rstBtn": "மீட்டமை",
|
||||
"add": "சேர்",
|
||||
"sectRm": "பிரிவு நீக்கப்பட்டது",
|
||||
"addSectBtn": "பிரிவைச் சேர்",
|
||||
"sect": "பிரிவு %s"
|
||||
}
|
||||
|
|
620
app/i18n/te.json
|
@ -1,293 +1,331 @@
|
|||
{
|
||||
"aap": "ఫోటోను అటాచ్ చేయండి",
|
||||
"About": "గురించి",
|
||||
"aBtn": "చేర్చు",
|
||||
"aD": "అన్నీ పూర్తయ్యాయి!",
|
||||
"addCmbBtn": "కలయికను జోడించండి",
|
||||
"aFBu": "బ్యాకప్ చేయడం కొరకు ఒక రెసిపీని జోడించండి",
|
||||
"aIngBtn": "పదార్ధాన్ని జోడించండి",
|
||||
"allCats": "అన్ని వర్గాలు",
|
||||
"allCuis": "అన్ని వంటకాలు",
|
||||
"allTs": "అన్ని టాగ్లు",
|
||||
"American": "అమెరికన్",
|
||||
"aNBtn": "కొత్తది జత పరచండి",
|
||||
"aNoBtn": "గమనిక చేర్చు",
|
||||
"app.name": "ఎన్రెసిపీస్",
|
||||
"appCrd": "నారెసిపీస్ ద్వారా భాగస్వామ్యం చేయబడింది. F-Droid, IzzyOnDroid లేదా Play Store లో పొందండి.",
|
||||
"Appetizers": "ఆకలి పుట్టించేవి",
|
||||
"appInfo": "నారెసిపీస్ అనేది ఓపెన్ సోర్స్, గోప్యతా-స్నేహపూర్వక డిజిటల్ కుక్బుక్, ఇది మీ వంటకాలను సృష్టించడానికి, నిర్వహించడానికి మరియు భాగస్వామ్యం చేయడానికి మిమ్మల్ని అనుమతిస్తుంది",
|
||||
"apply": "వర్తించు",
|
||||
"appRst": "అప్లికేషన్ పున art ప్రారంభం అవసరం",
|
||||
"April": "ఏప్రిల్",
|
||||
"aStpBtn": "దశను జోడించండి",
|
||||
"August": "ఆగస్టు",
|
||||
"Barbecue": "బార్బెక్యూ",
|
||||
"Beverages": "పానీయాలు",
|
||||
"Black": "నలుపు",
|
||||
"Brazilian": "బ్రెజిలియన్",
|
||||
"Breads": "రొట్టెలు",
|
||||
"breakfast": "అల్పాహారం",
|
||||
"British": "బ్రిటిష్",
|
||||
"buEmp": "బ్యాకప్ ఫైల్ ఖాళీగా ఉంది",
|
||||
"buFol": "బ్యాకప్ ఫోల్డర్",
|
||||
"buInc": "చెడ్డ లేదా పాడైన బ్యాకప్ ఫైల్",
|
||||
"buInfo": "తిరిగి దిగుమతి చేయగల మీ మొత్తం డేటాను కలిగి ఉన్న జిప్ ఫైల్ను సృష్టిస్తుంది",
|
||||
"buMod": "బ్యాకప్ ఫైల్ మరెక్కడా సవరించబడింది",
|
||||
"cat": "వర్గం",
|
||||
"cBtn": "రద్దు చేయండి",
|
||||
"Challenging": "సవాలు",
|
||||
"Chinese": "చైనీస్",
|
||||
"clove": "లవంగం",
|
||||
"cm": "సెంటీమీటర్",
|
||||
"cmbs": "కలయికలు",
|
||||
"conBtn": "కొనసాగించు",
|
||||
"conf": "నిర్ధారించండి",
|
||||
"cookT": "వంట సమయం",
|
||||
"cPic": "ఫోటోను సవరించండి",
|
||||
"Created": "సృష్టించబడింది",
|
||||
"cui": "వంటకాలు",
|
||||
"cup": "కప్పు",
|
||||
"Cup": "కప్పు",
|
||||
"dAgo": "%s రోజుల క్రితం",
|
||||
"Danish": "డానిష్",
|
||||
"Dark": "ముదురు",
|
||||
"db": "డేటాబేస్",
|
||||
"dBtn": "ఎంచుకోబడింది",
|
||||
"December": "డిసెంబర్",
|
||||
"delRecInfo": "మీరు %s రెసిపీని శాశ్వతంగా తొలగించబోతున్నారు",
|
||||
"delRecsInfo": "మీరు %s ని శాశ్వతంగా తొలగించబోతున్నారు",
|
||||
"Desserts": "డెజర్ట్స్",
|
||||
"detailed": "వివరణాత్మక",
|
||||
"Difficulty level": "కఠినత స్థాయి",
|
||||
"dinner": "విందు",
|
||||
"disBtn": "పారవేయండి",
|
||||
"disc": "ఈ రెసిపీలో సేవ్ చేయని మార్పులు ఉన్నాయి. మీరు ఏమి చేయడానికి ఇష్టపడతారు?",
|
||||
"donate": "దానం చేయండి",
|
||||
"dozen": "డజను",
|
||||
"drop": "చుక్క",
|
||||
"dsp": "డెజర్ట్ చెంచా",
|
||||
"Easy": "సులభం",
|
||||
"editRec": "రెసిపీని సవరించండి",
|
||||
"Egyptian": "ఈజిప్షియన్",
|
||||
"English": "ఇంగ్లీష్",
|
||||
"EnRecipes": "ఎన్రెసిపీస్",
|
||||
"expBu": "పూర్తి బ్యాకప్ను ఎగుమతి చేయండి",
|
||||
"expip": "ఎగుమతి పురోగతిలో ఉంది",
|
||||
"expSuc": "ఎగుమతి విజయం",
|
||||
"favourites": "ఇష్టమైనవి",
|
||||
"February": "ఫిబ్రవరి",
|
||||
"Filipino": "ఫిలిపినో",
|
||||
"Filtered recipes": "ఫిల్టర్ చేసిన వంటకాలు",
|
||||
"fl oz": "ద్రవం oun న్స్",
|
||||
"fltr": "ఫిల్టర్",
|
||||
"Fluid Ounce": "ద్రవం oun న్స్",
|
||||
"French": "ఫ్రెంచ్",
|
||||
"FRI": "శుక్ర",
|
||||
"fsList": "ఇష్టమైన వంటకాలు ఇంకా ఏమీ లేవు",
|
||||
"g": "గ్రాము",
|
||||
"gal": "గాలన్",
|
||||
"Gallon": "గాలన్",
|
||||
"German": "జర్మన్",
|
||||
"gh": "GitHub లో చూడండి",
|
||||
"Gram": "గ్రాము",
|
||||
"Greek": "గ్రీకు",
|
||||
"grid": "గ్రిడ్",
|
||||
"grocery": "సరుకుల చిట్టా",
|
||||
"guide": "వినియోగదారుని మార్గనిర్దేషిక",
|
||||
"Healthy": "ఆరోగ్యకరమైనది",
|
||||
"hr": "గంట",
|
||||
"impBu": "డేటాను దిగుమతి చేయండి",
|
||||
"impFail": "దిగుమతి విఫలమైంది",
|
||||
"impInfo": "ఈ అనువర్తనం ఎగుమతి చేసిన పూర్తి బ్యాకప్లకు మద్దతు ఇస్తుంది",
|
||||
"impip": "దిగుమతి పురోగతిలో ఉంది",
|
||||
"impSuc": "దిగుమతి విజయం",
|
||||
"in": "అంగుళం",
|
||||
"Indian": "భారతీయ",
|
||||
"ings": "పదార్థాలు",
|
||||
"inss": "సూచనలు",
|
||||
"intf": "ఇంటర్ఫేస్",
|
||||
"invFile": "చెల్లుబాటులోలేని ఫైలు",
|
||||
"Irish": "ఐరిష్",
|
||||
"it": "అంశం",
|
||||
"Italian": "ఇటాలియన్",
|
||||
"Jamaican": "జమైకా",
|
||||
"January": "జనవరి",
|
||||
"Japanese": "జపనీస్",
|
||||
"Jewish": "యూదుల",
|
||||
"joinTG": "టెలిగ్రామ్ సమూహంలో చేరండి",
|
||||
"July": "జూలై",
|
||||
"June": "జూన్",
|
||||
"kEdit": "సవరణ కొనసాగించండి",
|
||||
"Kenyan": "కెన్యా",
|
||||
"kg": "కిలోగ్రాము",
|
||||
"Kilogram": "కిలోగ్రాము",
|
||||
"Korean": "కొరియన్",
|
||||
"l": "లీటర్",
|
||||
"lang": "భాష",
|
||||
"large": "పెద్ద",
|
||||
"Last updated": "చివరిగా నవీకరించబడింది",
|
||||
"lb": "పౌండ్",
|
||||
"leaf": "ఆకు",
|
||||
"Light": "లేత",
|
||||
"listVM": "జాబితా వీక్షణ మోడ్",
|
||||
"Litre": "లీటర్",
|
||||
"Loaf": "రొట్టె",
|
||||
"ltAgo": "చాలా కాలం క్రితం",
|
||||
"lunch": "భోజనం",
|
||||
"mAgo": "%s నెలల క్రితం",
|
||||
"Main dishes": "ప్రధాన వంటకాలు",
|
||||
"March": "మార్చి",
|
||||
"May": "మే",
|
||||
"Meat": "మాంసం",
|
||||
"medium": "మీడియం",
|
||||
"Mexican": "మెక్సికన్",
|
||||
"mg": "మిల్లీగ్రామ్",
|
||||
"Millilitre": "మిల్లీలీటర్",
|
||||
"min": "నిమిషం",
|
||||
"minimal": "కనిష్ట",
|
||||
"ml": "మిల్లీలీటర్",
|
||||
"Moderate": "మోస్తరు",
|
||||
"MON": "సోమ",
|
||||
"newCui": "కొత్త వంటకాలు",
|
||||
"Newest first": "క్రొత్తది మొదటిది",
|
||||
"newRec": "కొత్త వంటకం",
|
||||
"newUnit": "కొత్త యూనిట్",
|
||||
"Nigerian": "నైజీరియన్",
|
||||
"nLangInfo": "కొత్త భాషను ఉపయోగించడం కొరకు ఎన్రెసిపీస్ పునఃప్రారంభించండి",
|
||||
"nNBtn": "ఇప్పుడు కాదు",
|
||||
"no": "గమనిక",
|
||||
"noAccSensor": "యాక్సిలెరోమీటర్ సెన్సార్ నిలిపివేయబడింది లేదా పనిచేయడం లేదు",
|
||||
"noFavs": "ఇంకా ఇష్టమైనవి లేవు",
|
||||
"Noodles": "నూడుల్స్",
|
||||
"noRecs": "మీ శోధనకు వంటకాలు ఏవీ సరిపోలడం లేదు",
|
||||
"noRecsInL": "ఇక్కడ ఉన్న వంటకాలు ఏవీ మీ శోధనతో సరిపోలడం లేదు",
|
||||
"nos": "గమనికలు",
|
||||
"November": "నవంబర్",
|
||||
"nwCat": "కొత్త వర్గం",
|
||||
"nwYiU": "కొత్త దిగుబడి యూనిట్",
|
||||
"October": "అక్టోబర్",
|
||||
"OK": "అలాగే",
|
||||
"Oldest first": "పురాతన మొదటి",
|
||||
"opts": "ఎంపికలు",
|
||||
"Ounce": "oun న్స్",
|
||||
"oz": "oun న్స్",
|
||||
"Pasta": "పాస్తా",
|
||||
"Patty": "పాటీ",
|
||||
"photogrid": "ఫోటో గ్రిడ్",
|
||||
"pht": "రెసిపీ ఫోటో",
|
||||
"piece": "ముక్క",
|
||||
"Piece": "ముక్క",
|
||||
"pinch": "చిటికెడు",
|
||||
"planner": "భోజన ప్రణాళిక",
|
||||
"plsAdd": "ఒకదాన్ని జోడించడానికి ప్లస్ బటన్ను ఉపయోగించండి",
|
||||
"Portuguese": "పోర్చుగీస్",
|
||||
"Poultry": "పౌల్ట్రీ",
|
||||
"Pound": "పౌండ్",
|
||||
"prepT": "తయారీ సమయం",
|
||||
"priv": "గోప్యతా విధానం",
|
||||
"pt": "pt",
|
||||
"qt": "క్వార్ట్",
|
||||
"Quickest first": "శీఘ్రమైనవి ప్రధమ",
|
||||
"Rating": "రేటింగ్",
|
||||
"rBtn": "తొలగించండి",
|
||||
"rec": "రెసిపీ",
|
||||
"recE": "ఇప్పటికే ఉన్నవి:",
|
||||
"recF": "వంటకాలు కనుగొనబడ్డాయి",
|
||||
"recI": "దిగుమతి చేసుకున్నవి:",
|
||||
"recListEmp": "ఇక్కడ ఏమి లేదు! కొన్ని వంటకాలను జోడించి, మళ్లీ ప్రయత్నించండి",
|
||||
"recPic": "రెసిపీ ఫోటో",
|
||||
"recRm": "రెసిపీ తొలగించబడింది",
|
||||
"recs": "వంటకాలు",
|
||||
"recTitle": "నా ఆరోగ్యకరమైన వంటకం",
|
||||
"recU": "నవీకరించబడింది:",
|
||||
"req": "అవసరమైన %",
|
||||
"resNF": "రెసిపీ కనుగొనబడలేదు",
|
||||
"rest": "రీసెట్ చేయండి",
|
||||
"restCatL": "వర్గం జాబితాను రీసెట్ చేయండి",
|
||||
"restCuiL": "వంటల జాబితాను రీసెట్ చేయండి",
|
||||
"restDone": "రీసెట్ పూర్తయింది",
|
||||
"restInfo": "జాబితాను రీసెట్ చేస్తే వినియోగదారు సృష్టించిన ఎంట్రీలను తొలగిస్తుంది మరియు డిఫాల్ట్ ఎంట్రీలను పునరుద్ధరిస్తుంది. ఇప్పటికే ఉన్న వంటకాలు ప్రభావితం కావు.",
|
||||
"restUL": "యూనిట్ జాబితాను రీసెట్ చేయండి",
|
||||
"restYUL": "దిగుబడి యూనిట్ జాబితాను రీసెట్ చేయండి",
|
||||
"Rice": "అన్నం",
|
||||
"rmCatInfo": "మీరు వర్గం జాబితా నుండి %s ను తొలగించబోతున్నారు",
|
||||
"rmCmb": "కాంబినేషన్ తొలగించబడింది",
|
||||
"rmCuiInfo": "మీరు వంటల జాబితా నుండి %s ను తొలగించబోతున్నారు",
|
||||
"rmIng": "పదార్ధం తొలగించబడింది",
|
||||
"rmIns": "ఆదేశాలు తొలగించబడ్డాయి",
|
||||
"rmN": "గమనిక తొలగించబడింది",
|
||||
"rmUInfo": "మీరు యూనిట్ జాబితా నుండి %s ను తొలగించబోతున్నారు",
|
||||
"rmYUInfo": "మీరు దిగుబడి యూనిట్ జాబితా నుండి %s ను తొలగించబోతున్నారు",
|
||||
"Roll": "రోల్",
|
||||
"rp": "ఫోటోను తొలగించండి",
|
||||
"rst": "పునఃప్రారంభించు",
|
||||
"Russian": "రష్యన్",
|
||||
"Salads": "సలాడ్లు",
|
||||
"SAT": "శని",
|
||||
"Sauces": "సాస్",
|
||||
"Scottish": "స్కాటిష్",
|
||||
"Seafood": "సముద్రపు ఆహారం",
|
||||
"selRec": "రెసిపీని ఎంచుకోండి",
|
||||
"September": "సెప్టెంబర్",
|
||||
"ser": "శోధించు",
|
||||
"Serving": "అందిస్తోంది",
|
||||
"SET": "సెట్",
|
||||
"Settings": "సెట్టింగులు",
|
||||
"shr": "పంచుకో",
|
||||
"Side dishes": "సైడ్ డిషెస్",
|
||||
"simple": "సాధారణ",
|
||||
"Slowest first": "నెమ్మదిగా ఉన్నవి మొదట",
|
||||
"sltd": "ఎంచుకోబడింది",
|
||||
"small": "చిన్న",
|
||||
"snacks": "స్నాక్స్",
|
||||
"Soups": "సూప్లు",
|
||||
"Spanish": "స్పానిష్",
|
||||
"Sri Lankan": "శ్రీలంక",
|
||||
"srpu": "రెసిపీ ఫోటోను భాగస్వామ్యం చేయండి ...",
|
||||
"srt": "క్రమబద్ధీకరించు",
|
||||
"sru": "రెసిపీని భాగస్వామ్యం చేయండి ...",
|
||||
"stars": "స్టార్ రేటింగ్",
|
||||
"stick": "కర్ర",
|
||||
"stp": "దశ",
|
||||
"strAdd": "మీ వంటకాలను జోడించడం ప్రారంభించండి!",
|
||||
"SUN": "ఆది",
|
||||
"sVw": "యాదృచ్ఛిక రెసిపీని చూడటానికి షేక్ చేయండి",
|
||||
"sVwInfo": "మీరు నిర్ణయించలేనప్పుడు ఏమి ఉడికించాలో ఎంచుకోవడానికి మీకు సహాయపడుతుంది",
|
||||
"Swedish": "స్వీడిష్",
|
||||
"swm": "సోమవారం వారం ప్రారంభించండి",
|
||||
"sysDef": "సిస్టమ్ డిఫాల్ట్",
|
||||
"Tablespoon": "టేబుల్ స్పూన్",
|
||||
"tbsp": "టేబుల్ స్పూన్",
|
||||
"Teaspoon": "టీస్పూన్",
|
||||
"Thai": "థాయ్",
|
||||
"Theme": "థీమ్",
|
||||
"THU": "గురు",
|
||||
"title": "శీర్షిక",
|
||||
"tLInfo": "మీరు తరువాత ప్రయత్నించాలనుకునే వంటకాలు ఇక్కడ ఇవ్వబడ్డాయి",
|
||||
"today": "ఈ రోజు",
|
||||
"triedInfo": "మీరు %s ఈ రెసిపీని ప్రయత్నించారు",
|
||||
"trnsl": "అనువదించండి",
|
||||
"trylater": "తరువాత ప్రయత్నం చెయ్",
|
||||
"trySer": "అన్ని వంటకాలలో వెతకాలా?",
|
||||
"ts": "టాగ్లు",
|
||||
"tsInfo": "ఖాళీలతో వేరు",
|
||||
"tsp": "స్పూన్",
|
||||
"TUE": "మంగళ",
|
||||
"Turkish": "టర్కిష్",
|
||||
"Undefined": "వివరించబడలేదు",
|
||||
"unit": "యూనిట్",
|
||||
"Unit": "యూనిట్",
|
||||
"unsaved": "సేవ్ చేయని మార్పులు",
|
||||
"untRec": "పేరులేని రెసిపీ",
|
||||
"Vegan": "వేగన్",
|
||||
"Vegetarian": "శాఖాహారం",
|
||||
"Vietnamese": "వియత్నామీస్",
|
||||
"wAgo": "%s వారాల క్రితం",
|
||||
"WED": "బుధ",
|
||||
"yesterday": "నిన్న",
|
||||
"yieldQ": "దిగుబడి పరిమాణం",
|
||||
"yieldU": "దిగుబడి యూనిట్",
|
||||
"yld": "దిగుబడి",
|
||||
"buto": "%s కు బ్యాకప్ చేయబడింది",
|
||||
"sysDefB": "సిస్టమ్ డిఫాల్ట్ + నలుపు"
|
||||
"aap": "ఫోటోను అటాచ్ చేయండి",
|
||||
"About": "గురించి",
|
||||
"aBtn": "చేర్చు",
|
||||
"aD": "అన్నీ పూర్తయ్యాయి!",
|
||||
"addCmbBtn": "కలయికను జోడించండి",
|
||||
"aFBu": "బ్యాకప్ చేయడం కొరకు ఒక రెసిపీని జోడించండి",
|
||||
"aIngBtn": "పదార్ధాన్ని జోడించండి",
|
||||
"allCats": "అన్ని వర్గాలు",
|
||||
"allCuis": "అన్ని వంటకాలు",
|
||||
"allTs": "అన్ని టాగ్లు",
|
||||
"American": "అమెరికన్",
|
||||
"aNBtn": "కొత్తది జత పరచండి",
|
||||
"aNoBtn": "గమనిక చేర్చు",
|
||||
"app.name": "ఎన్రెసిపీస్",
|
||||
"appCrd": "నారెసిపీస్ ద్వారా భాగస్వామ్యం చేయబడింది. F-Droid, IzzyOnDroid లేదా Play Store లో పొందండి.",
|
||||
"Appetizers": "ఆకలి పుట్టించేవి",
|
||||
"appInfo": "నారెసిపీస్ అనేది ఓపెన్ సోర్స్, గోప్యతా-స్నేహపూర్వక డిజిటల్ కుక్బుక్, ఇది మీ వంటకాలను సృష్టించడానికి, నిర్వహించడానికి మరియు భాగస్వామ్యం చేయడానికి మిమ్మల్ని అనుమతిస్తుంది",
|
||||
"apply": "వర్తించు",
|
||||
"appRst": "అప్లికేషన్ పున art ప్రారంభం అవసరం",
|
||||
"aStpBtn": "దశను జోడించండి",
|
||||
"Barbecue": "బార్బెక్యూ",
|
||||
"Beverages": "పానీయాలు",
|
||||
"Black": "నలుపు",
|
||||
"Brazilian": "బ్రెజిలియన్",
|
||||
"Breads": "రొట్టెలు",
|
||||
"breakfast": "అల్పాహారం",
|
||||
"British": "బ్రిటిష్",
|
||||
"buEmp": "బ్యాకప్ ఫైల్ ఖాళీగా ఉంది",
|
||||
"buFol": "బ్యాకప్ ఫోల్డర్",
|
||||
"buInc": "చెడ్డ లేదా పాడైన బ్యాకప్ ఫైల్",
|
||||
"buInfo": "తిరిగి దిగుమతి చేయగల మీ మొత్తం డేటాను కలిగి ఉన్న జిప్ ఫైల్ను సృష్టిస్తుంది",
|
||||
"buMod": "బ్యాకప్ ఫైల్ మరెక్కడా సవరించబడింది",
|
||||
"cat": "వర్గం",
|
||||
"cBtn": "రద్దు చేయండి",
|
||||
"Challenging": "సవాలు",
|
||||
"Chinese": "చైనీస్",
|
||||
"clove": "లవంగం",
|
||||
"cm": "సెంటీమీటర్",
|
||||
"cmbs": "కలయికలు",
|
||||
"conBtn": "కొనసాగించు",
|
||||
"conf": "నిర్ధారించండి",
|
||||
"cookT": "వంట సమయం",
|
||||
"cPic": "ఫోటోను సవరించండి",
|
||||
"Created": "సృష్టించబడింది",
|
||||
"cui": "వంటకాలు",
|
||||
"cup": "కప్పు",
|
||||
"Cup": "కప్పు",
|
||||
"dAgo": "%s రోజుల క్రితం",
|
||||
"Danish": "డానిష్",
|
||||
"Dark": "ముదురు",
|
||||
"db": "డేటాబేస్",
|
||||
"dBtn": "ఎంచుకోబడింది",
|
||||
"delRecInfo": "మీరు %s రెసిపీని శాశ్వతంగా తొలగించబోతున్నారు",
|
||||
"delRecsInfo": "మీరు %s ని శాశ్వతంగా తొలగించబోతున్నారు",
|
||||
"Desserts": "డెజర్ట్స్",
|
||||
"detailed": "వివరణాత్మక",
|
||||
"Difficulty level": "కఠినత స్థాయి",
|
||||
"dinner": "విందు",
|
||||
"disBtn": "పారవేయండి",
|
||||
"disc": "ఈ రెసిపీలో సేవ్ చేయని మార్పులు ఉన్నాయి. మీరు ఏమి చేయడానికి ఇష్టపడతారు?",
|
||||
"donate": "దానం చేయండి",
|
||||
"dozen": "డజను",
|
||||
"drop": "చుక్క",
|
||||
"dsp": "డెజర్ట్ చెంచా",
|
||||
"Easy": "సులభం",
|
||||
"editRec": "రెసిపీని సవరించండి",
|
||||
"Egyptian": "ఈజిప్షియన్",
|
||||
"English": "ఇంగ్లీష్",
|
||||
"EnRecipes": "ఎన్రెసిపీస్",
|
||||
"expBu": "పూర్తి బ్యాకప్ను ఎగుమతి చేయండి",
|
||||
"expip": "ఎగుమతి పురోగతిలో ఉంది",
|
||||
"expSuc": "ఎగుమతి విజయం",
|
||||
"favourites": "ఇష్టమైనవి",
|
||||
"Filipino": "ఫిలిపినో",
|
||||
"Filtered recipes": "ఫిల్టర్ చేసిన వంటకాలు",
|
||||
"fl oz": "ద్రవం oun న్స్",
|
||||
"fltr": "ఫిల్టర్",
|
||||
"Fluid Ounce": "ద్రవం oun న్స్",
|
||||
"French": "ఫ్రెంచ్",
|
||||
"fsList": "ఇష్టమైన వంటకాలు ఇంకా ఏమీ లేవు",
|
||||
"g": "గ్రాము",
|
||||
"gal": "గాలన్",
|
||||
"Gallon": "గాలన్",
|
||||
"German": "జర్మన్",
|
||||
"gh": "GitHub లో చూడండి",
|
||||
"Gram": "గ్రాము",
|
||||
"Greek": "గ్రీకు",
|
||||
"grid": "గ్రిడ్",
|
||||
"grocery": "సరుకుల చిట్టా",
|
||||
"guide": "వినియోగదారుని మార్గనిర్దేషిక",
|
||||
"Healthy": "ఆరోగ్యకరమైనది",
|
||||
"hr": "గంట",
|
||||
"impBu": "డేటాను దిగుమతి చేయండి",
|
||||
"impFail": "దిగుమతి విఫలమైంది",
|
||||
"impInfo": "ఈ అనువర్తనం ఎగుమతి చేసిన పూర్తి బ్యాకప్లకు మద్దతు ఇస్తుంది",
|
||||
"impip": "దిగుమతి పురోగతిలో ఉంది",
|
||||
"impSuc": "దిగుమతి విజయం",
|
||||
"in": "అంగుళం",
|
||||
"Indian": "భారతీయ",
|
||||
"ings": "పదార్థాలు",
|
||||
"inss": "సూచనలు",
|
||||
"intf": "ఇంటర్ఫేస్",
|
||||
"invFile": "చెల్లుబాటులోలేని ఫైలు",
|
||||
"Irish": "ఐరిష్",
|
||||
"it": "అంశం %s",
|
||||
"Italian": "ఇటాలియన్",
|
||||
"Jamaican": "జమైకా",
|
||||
"Japanese": "జపనీస్",
|
||||
"Jewish": "యూదుల",
|
||||
"joinTG": "టెలిగ్రామ్ సమూహంలో చేరండి",
|
||||
"kEdit": "సవరణ కొనసాగించండి",
|
||||
"Kenyan": "కెన్యా",
|
||||
"kg": "కిలోగ్రాము",
|
||||
"Kilogram": "కిలోగ్రాము",
|
||||
"Korean": "కొరియన్",
|
||||
"l": "లీటర్",
|
||||
"lang": "భాష",
|
||||
"large": "పెద్ద",
|
||||
"Last updated": "చివరిగా నవీకరించబడింది",
|
||||
"lb": "పౌండ్",
|
||||
"leaf": "ఆకు",
|
||||
"Light": "లేత",
|
||||
"listVM": "జాబితా వీక్షణ మోడ్",
|
||||
"Litre": "లీటర్",
|
||||
"Loaf": "రొట్టె",
|
||||
"ltAgo": "చాలా కాలం క్రితం",
|
||||
"lunch": "భోజనం",
|
||||
"mAgo": "%s నెలల క్రితం",
|
||||
"Main dishes": "ప్రధాన వంటకాలు",
|
||||
"Meat": "మాంసం",
|
||||
"medium": "మీడియం",
|
||||
"Mexican": "మెక్సికన్",
|
||||
"mg": "మిల్లీగ్రామ్",
|
||||
"Millilitre": "మిల్లీలీటర్",
|
||||
"min": "నిమిషం",
|
||||
"minimal": "కనిష్ట",
|
||||
"ml": "మిల్లీలీటర్",
|
||||
"Moderate": "మోస్తరు",
|
||||
"newCui": "కొత్త వంటకాలు",
|
||||
"Newest first": "క్రొత్తది మొదటిది",
|
||||
"newRec": "కొత్త వంటకం",
|
||||
"newUnit": "కొత్త యూనిట్",
|
||||
"Nigerian": "నైజీరియన్",
|
||||
"nLangInfo": "కొత్త భాషను ఉపయోగించడం కొరకు ఎన్రెసిపీస్ పునఃప్రారంభించండి",
|
||||
"nNBtn": "ఇప్పుడు కాదు",
|
||||
"no": "గమనిక",
|
||||
"noAccSensor": "యాక్సిలెరోమీటర్ సెన్సార్ నిలిపివేయబడింది లేదా పనిచేయడం లేదు",
|
||||
"noFavs": "ఇంకా ఇష్టమైనవి లేవు",
|
||||
"Noodles": "నూడుల్స్",
|
||||
"noRecs": "మీ శోధనకు వంటకాలు ఏవీ సరిపోలడం లేదు",
|
||||
"noRecsInL": "ఇక్కడ ఉన్న వంటకాలు ఏవీ మీ శోధనతో సరిపోలడం లేదు",
|
||||
"nos": "గమనికలు",
|
||||
"nwCat": "కొత్త వర్గం",
|
||||
"nwYiU": "కొత్త దిగుబడి యూనిట్",
|
||||
"OK": "అలాగే",
|
||||
"Oldest first": "పురాతన మొదటి",
|
||||
"opts": "ఎంపికలు",
|
||||
"Ounce": "oun న్స్",
|
||||
"oz": "oun న్స్",
|
||||
"Pasta": "పాస్తా",
|
||||
"Patty": "పాటీ",
|
||||
"photogrid": "ఫోటో గ్రిడ్",
|
||||
"pht": "రెసిపీ ఫోటో",
|
||||
"piece": "ముక్క",
|
||||
"Piece": "ముక్క",
|
||||
"pinch": "చిటికెడు",
|
||||
"planner": "భోజన ప్రణాళిక",
|
||||
"plsAdd": "ఒకదాన్ని జోడించడానికి + బటన్ను ఉపయోగించండి",
|
||||
"Portuguese": "పోర్చుగీస్",
|
||||
"Poultry": "పౌల్ట్రీ",
|
||||
"Pound": "పౌండ్",
|
||||
"prepT": "తయారీ సమయం",
|
||||
"priv": "గోప్యతా విధానం",
|
||||
"pt": "pt",
|
||||
"qt": "క్వార్ట్",
|
||||
"Quickest first": "శీఘ్రమైనవి ప్రధమ",
|
||||
"Rating": "రేటింగ్",
|
||||
"rBtn": "తొలగించండి",
|
||||
"rec": "రెసిపీ",
|
||||
"recE": "ఇప్పటికే ఉన్నవి:",
|
||||
"recF": "వంటకాలు కనుగొనబడ్డాయి",
|
||||
"recI": "దిగుమతి చేసుకున్నవి:",
|
||||
"recListEmp": "ఇక్కడ ఏమి లేదు! కొన్ని వంటకాలను జోడించి, మళ్లీ ప్రయత్నించండి",
|
||||
"recPic": "రెసిపీ ఫోటో",
|
||||
"recRm": "రెసిపీ తొలగించబడింది",
|
||||
"recs": "వంటకాలు",
|
||||
"recTitle": "నా ఆరోగ్యకరమైన వంటకం",
|
||||
"recU": "నవీకరించబడింది:",
|
||||
"req": "అవసరమైన %s",
|
||||
"resNF": "రెసిపీ కనుగొనబడలేదు",
|
||||
"rest": "రీసెట్ చేయండి",
|
||||
"restCatL": "వర్గం జాబితాను రీసెట్ చేయండి",
|
||||
"restCuiL": "వంటల జాబితాను రీసెట్ చేయండి",
|
||||
"restDone": "రీసెట్ పూర్తయింది",
|
||||
"restInfo": "జాబితాను రీసెట్ చేస్తే వినియోగదారు సృష్టించిన ఎంట్రీలను తొలగిస్తుంది మరియు డిఫాల్ట్ ఎంట్రీలను పునరుద్ధరిస్తుంది. ఇప్పటికే ఉన్న వంటకాలు ప్రభావితం కావు.",
|
||||
"restUL": "యూనిట్ జాబితాను రీసెట్ చేయండి",
|
||||
"restYUL": "దిగుబడి యూనిట్ జాబితాను రీసెట్ చేయండి",
|
||||
"Rice": "అన్నం",
|
||||
"rmCatInfo": "మీరు వర్గం జాబితా నుండి %s ను తొలగించబోతున్నారు",
|
||||
"rmCmb": "కాంబినేషన్ తొలగించబడింది",
|
||||
"rmCuiInfo": "మీరు వంటల జాబితా నుండి %s ను తొలగించబోతున్నారు",
|
||||
"rmIng": "పదార్ధం తొలగించబడింది",
|
||||
"rmIns": "ఆదేశాలు తొలగించబడ్డాయి",
|
||||
"rmN": "గమనిక తొలగించబడింది",
|
||||
"rmUInfo": "మీరు యూనిట్ జాబితా నుండి %s ను తొలగించబోతున్నారు",
|
||||
"rmYUInfo": "మీరు దిగుబడి యూనిట్ జాబితా నుండి %s ను తొలగించబోతున్నారు",
|
||||
"Roll": "రోల్",
|
||||
"rp": "ఫోటోను తొలగించండి",
|
||||
"rst": "పునఃప్రారంభించు",
|
||||
"Russian": "రష్యన్",
|
||||
"Salads": "సలాడ్లు",
|
||||
"Sauces": "సాస్",
|
||||
"Scottish": "స్కాటిష్",
|
||||
"Seafood": "సముద్రపు ఆహారం",
|
||||
"selRec": "రెసిపీని ఎంచుకోండి",
|
||||
"ser": "శోధించు",
|
||||
"Serving": "అందిస్తోంది",
|
||||
"SET": "సెట్",
|
||||
"Settings": "సెట్టింగులు",
|
||||
"shr": "పంచుకో",
|
||||
"Side dishes": "సైడ్ డిషెస్",
|
||||
"simple": "సాధారణ",
|
||||
"Slowest first": "నెమ్మదిగా ఉన్నవి మొదట",
|
||||
"sltd": "ఎంచుకోబడింది",
|
||||
"small": "చిన్న",
|
||||
"snacks": "స్నాక్స్",
|
||||
"Soups": "సూప్లు",
|
||||
"Spanish": "స్పానిష్",
|
||||
"Sri Lankan": "శ్రీలంక",
|
||||
"srpu": "రెసిపీ ఫోటోను భాగస్వామ్యం చేయండి ...",
|
||||
"srt": "క్రమబద్ధీకరించు",
|
||||
"sru": "రెసిపీని భాగస్వామ్యం చేయండి ...",
|
||||
"stars": "స్టార్ రేటింగ్",
|
||||
"stick": "కర్ర",
|
||||
"stp": "దశ %s",
|
||||
"strAdd": "మీ వంటకాలను జోడించడం ప్రారంభించండి!",
|
||||
"sVw": "యాదృచ్ఛిక రెసిపీని చూడటానికి షేక్ చేయండి",
|
||||
"sVwInfo": "మీరు నిర్ణయించలేనప్పుడు ఏమి ఉడికించాలో ఎంచుకోవడానికి మీకు సహాయపడుతుంది",
|
||||
"Swedish": "స్వీడిష్",
|
||||
"swm": "సోమవారం వారం ప్రారంభించండి",
|
||||
"sysDef": "సిస్టమ్ డిఫాల్ట్",
|
||||
"Tablespoon": "టేబుల్ స్పూన్",
|
||||
"tbsp": "టేబుల్ స్పూన్",
|
||||
"Teaspoon": "టీస్పూన్",
|
||||
"Thai": "థాయ్",
|
||||
"Theme": "థీమ్",
|
||||
"title": "శీర్షిక",
|
||||
"tLInfo": "మీరు తరువాత ప్రయత్నించాలనుకునే వంటకాలు ఇక్కడ ఇవ్వబడ్డాయి",
|
||||
"today": "ఈ రోజు",
|
||||
"triedInfo": "మీరు %s ఈ రెసిపీని ప్రయత్నించారు",
|
||||
"trnsl": "అనువదించండి",
|
||||
"trylater": "తరువాత ప్రయత్నం చెయ్",
|
||||
"trySer": "అన్ని వంటకాలలో వెతకాలా?",
|
||||
"ts": "టాగ్లు",
|
||||
"tsInfo": "ఖాళీలతో వేరు",
|
||||
"tsp": "స్పూన్",
|
||||
"Turkish": "టర్కిష్",
|
||||
"Undefined": "వివరించబడలేదు",
|
||||
"unit": "యూనిట్",
|
||||
"Unit": "యూనిట్",
|
||||
"unsaved": "సేవ్ చేయని మార్పులు",
|
||||
"untRec": "పేరులేని రెసిపీ",
|
||||
"Vegan": "వేగన్",
|
||||
"Vegetarian": "శాఖాహారం",
|
||||
"Vietnamese": "వియత్నామీస్",
|
||||
"wAgo": "%s వారాల క్రితం",
|
||||
"yesterday": "నిన్న",
|
||||
"yieldQ": "దిగుబడి పరిమాణం",
|
||||
"yieldU": "దిగుబడి యూనిట్",
|
||||
"yld": "దిగుబడి",
|
||||
"buto": "%s కు బ్యాకప్ చేయబడింది",
|
||||
"sysDefB": "సిస్టమ్ డిఫాల్ట్ + నలుపు",
|
||||
"notifSetg": "నోటిఫికేషన్ సెట్టింగులు",
|
||||
"tmrRm": "టైమర్ తొలగించబడింది",
|
||||
"seconds": "సెకన్లు",
|
||||
"hours": "గంటలు",
|
||||
"hour": "గంట",
|
||||
"minutes": "నిమిషాలు",
|
||||
"minute": "నిమిషం",
|
||||
"dlyDur": "ఆలస్యం వ్యవధి",
|
||||
"tmrvbrt": "టైమర్ వైబ్రేట్",
|
||||
"tmrSnd": "టైమర్ ధ్వని",
|
||||
"aTPrst": "ప్రీసెట్లు జోడించబడ్డాయి",
|
||||
"fwr": "ఏ రెసిపీ కోసం?",
|
||||
"delPrst": "మీరు ప్రీసెట్లు నుండి %s ను తొలగించబోతున్నారు",
|
||||
"prsts": "ప్రీసెట్లు",
|
||||
"prstBtn": "ప్రీసెట్లు",
|
||||
"tmr": "టైమర్ %s",
|
||||
"delay": "ఆలస్యం",
|
||||
"stop": "ఆపు",
|
||||
"strtBtn": "ప్రారం",
|
||||
"ntmr": "క్రొత్త టైమర్",
|
||||
"timer": "వంట టైమర్",
|
||||
"sec": "సెక",
|
||||
"ystr": "నిన్న",
|
||||
"tmrw": "రేపు",
|
||||
"tdy": "నేడు",
|
||||
"cpy": "కాపీ",
|
||||
"calVM": "క్యాలెండర్ వీక్షణ మోడ్",
|
||||
"oAP": "%1$s పురోగతిలో ఉంది, %2$s పాజ్ చేయబడ్డాయి",
|
||||
"ttv": "వీక్షించడానికి నొక్కండి",
|
||||
"dismissAll": "అన్ని టైమర్లను తొలగించండి",
|
||||
"dismiss": "రద్దుచేసే",
|
||||
"texp": "%s టైమర్ల గడువు ముగిసింది",
|
||||
"wDBy": "%1$s %2$s ఆలస్యం అయింది",
|
||||
"prstTU": "ప్రీసెట్ సమయం నవీకరించబడింది",
|
||||
"ccwt": "టైమర్లతో నమ్మకంగా ఉడికించాలి!",
|
||||
"gtD": "తేదీకి వెళ్ళండి",
|
||||
"random": "యాదృచ్ఛికం",
|
||||
"esgbInfo": "మీకు నావిగేషన్ సమస్యలు ఉంటే ఈ ఎంపికను నిలిపివేయండి",
|
||||
"esgb": "తిరిగి వెళ్ళడానికి అంచుని స్వైప్ చేయండి",
|
||||
"ksavrInfo": "రెసిపీని చూసేటప్పుడు స్క్రీన్ ఆపివేయకుండా నిరోధిస్తుంది",
|
||||
"ksavr": "రెసిపీని చూసేటప్పుడు స్క్రీన్ను మేల్కొని ఉండండి",
|
||||
"rstBtn": "రీసెట్ చేయండి",
|
||||
"add": "జోడించు",
|
||||
"nvr": "ఎప్పుడూ",
|
||||
"otaw": "వారం కన్నా పాతది",
|
||||
"otam": "ఒక నెల కన్నా పాతది",
|
||||
"otay": "ఒక సంవత్సరం కన్నా పాతది",
|
||||
"admp": "భోజన పథకాలను స్వయంచాలకంగా తొలగించండి",
|
||||
"plsCrt": "ఒకదాన్ని సృష్టించడానికి + బటన్ను ఉపయోగించండి",
|
||||
"ehwmp": "భోజన పథకాలతో ఆరోగ్యంగా తినండి!",
|
||||
"selMT": "భోజన రకాన్ని ఎంచుకోండి",
|
||||
"d": "రోజు",
|
||||
"wk": "వారం",
|
||||
"mnth": "నెల",
|
||||
"sectRm": "విభాగం తొలగించబడింది",
|
||||
"addSectBtn": "విభాగం జోడించండి",
|
||||
"sect": "విభాగం %s"
|
||||
}
|
||||
|
|
151
app/main.ts
|
@ -1,28 +1,149 @@
|
|||
import {
|
||||
localize,
|
||||
androidLaunchEventLocalizationHandler,
|
||||
} from '@nativescript/localize'
|
||||
import { on, launchEvent } from '@nativescript/core/application'
|
||||
on(launchEvent, (args) => {
|
||||
if (args.android) {
|
||||
androidLaunchEventLocalizationHandler()
|
||||
}
|
||||
})
|
||||
import Vue from 'nativescript-vue'
|
||||
import EnRecipes from './components/EnRecipes.vue'
|
||||
import store from './store'
|
||||
import {
|
||||
Application,
|
||||
AndroidApplication,
|
||||
Utils,
|
||||
Frame,
|
||||
} from '@nativescript/core'
|
||||
import {
|
||||
setNumber,
|
||||
getNumber,
|
||||
getString,
|
||||
} from '@nativescript/core/application-settings'
|
||||
import { localize } from '@nativescript/localize'
|
||||
import EnRecipes from './components/EnRecipes.vue'
|
||||
import EditRecipe from './components/EditRecipe.vue'
|
||||
import MealPlanner from './components/MealPlanner.vue'
|
||||
import CookingTimer from './components/CookingTimer.vue'
|
||||
// import GroceryList from './components/GroceryList.vue'
|
||||
|
||||
import * as utils from '~/shared/utils'
|
||||
|
||||
export const EvtBus = new Vue()
|
||||
|
||||
let renderView: any = EnRecipes
|
||||
|
||||
import CollectionView from '@nativescript-community/ui-collectionview/vue'
|
||||
Vue.use(CollectionView)
|
||||
|
||||
import { lvMixin } from './shared/mixins.js'
|
||||
Vue.mixin(lvMixin)
|
||||
import { RGridLayout, RStackLayout, RLabel } from './rtl-ui'
|
||||
Vue.registerElement('RGridLayout', () => RGridLayout)
|
||||
Vue.registerElement('RStackLayout', () => RStackLayout)
|
||||
Vue.registerElement('RLabel', () => RLabel)
|
||||
|
||||
Vue.config.silent = false
|
||||
import { myMixin } from './shared/mixins'
|
||||
Vue.mixin(myMixin)
|
||||
|
||||
Vue.filter('L', localize)
|
||||
|
||||
const initFrame = () => {
|
||||
const s = store
|
||||
// MainInit
|
||||
s.commit('setT', getString('theme', 'sysDef'))
|
||||
s.commit('initRs')
|
||||
s.commit('initMPs')
|
||||
s.commit('initLIs')
|
||||
s.commit('initTPs')
|
||||
if (!Object.keys(s.state.timerS).length) {
|
||||
let hasTimerSound = getString('timerS', null)
|
||||
s.commit(
|
||||
'setTS',
|
||||
hasTimerSound ? JSON.parse(hasTimerSound) : utils.getTones().defaultTone
|
||||
)
|
||||
}
|
||||
// InitFrame
|
||||
const window = Application.android.startActivity.getWindow()
|
||||
const decorView = window.getDecorView()
|
||||
utils.setBarColors(window, decorView, s.state.theme)
|
||||
Frame.topmost().className = s.state.theme
|
||||
}
|
||||
const showOverLockscreen = () => {
|
||||
let ctx = Utils.ad.getApplicationContext()
|
||||
const pm = ctx.getSystemService(android.content.Context.POWER_SERVICE)
|
||||
let isScreenOff = !pm.isInteractive()
|
||||
if (isScreenOff) {
|
||||
const window = Application.android.startActivity.getWindow()
|
||||
const windowMgr = android.view.WindowManager
|
||||
const flags =
|
||||
windowMgr.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
|
||||
windowMgr.LayoutParams.FLAG_TURN_SCREEN_ON |
|
||||
windowMgr.LayoutParams.FLAG_KEEP_SCREEN_ON
|
||||
window.addFlags(flags)
|
||||
}
|
||||
}
|
||||
const intentListener = ({ intent, android }: any) => {
|
||||
let action = ((intent || android).getStringExtra('action') ||
|
||||
(android && android.getAction())) as string
|
||||
if (action) {
|
||||
switch (action) {
|
||||
case 'new_recipe':
|
||||
renderView = EditRecipe
|
||||
break
|
||||
case 'planner':
|
||||
renderView = MealPlanner
|
||||
break
|
||||
case 'timer':
|
||||
renderView = CookingTimer
|
||||
switch (getNumber('isTimer', 0)) {
|
||||
case 0:
|
||||
// Closing all modals if available before navigation
|
||||
if (Frame.topmost()) {
|
||||
let modals = Frame.topmost()._getRootModalViews()
|
||||
for (let i = modals.length - 1; i >= 0; i--) {
|
||||
Frame.topmost()
|
||||
._getRootModalViews()
|
||||
[i].closeModal()
|
||||
}
|
||||
}
|
||||
Vue.navigateTo(CookingTimer as any, {
|
||||
animated: false,
|
||||
})
|
||||
setNumber('isTimer', 1)
|
||||
break
|
||||
case 2:
|
||||
Vue.navigateBack()
|
||||
break
|
||||
}
|
||||
break
|
||||
// case 'grocery':
|
||||
// renderView = GroceryList
|
||||
// break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Application.on(Application.launchEvent, (args) => {
|
||||
utils.updateLocale()
|
||||
store.commit('setRTL')
|
||||
intentListener(args)
|
||||
Application.android.on(
|
||||
AndroidApplication.activityNewIntentEvent,
|
||||
intentListener
|
||||
)
|
||||
Frame.on(Frame.loadedEvent, initFrame)
|
||||
})
|
||||
|
||||
Application.on(Application.resumeEvent, () => {
|
||||
showOverLockscreen()
|
||||
if (utils.sysLocale() !== getString('sysLocale', utils.sysLocale())) {
|
||||
Frame.reloadPage()
|
||||
utils.updateLocale()
|
||||
store.commit('setRTL')
|
||||
}
|
||||
})
|
||||
|
||||
Application.on(Application.exitEvent, () => {
|
||||
renderView = EnRecipes
|
||||
Application.android.off(
|
||||
AndroidApplication.activityNewIntentEvent,
|
||||
intentListener
|
||||
)
|
||||
})
|
||||
|
||||
Vue.config.silent = false
|
||||
|
||||
new Vue({
|
||||
store,
|
||||
render: (h) => h(EnRecipes),
|
||||
render: (h) => h('Frame', [h(renderView)]),
|
||||
}).$start()
|
||||
|
|
|
@ -15,29 +15,18 @@
|
|||
|
||||
android {
|
||||
defaultConfig {
|
||||
versionCode 8
|
||||
versionName '1.3.3'
|
||||
applicationId 'com.vishnuraghav.enrecipes'
|
||||
versionCode 2
|
||||
versionName '2.0.1'
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 30
|
||||
compileSdkVersion 30
|
||||
generatedDensities = []
|
||||
ndk {
|
||||
abiFilters.clear()
|
||||
abiFilters.addAll(['arm64-v8a', 'armeabi-v7a', 'x86'])
|
||||
}
|
||||
// ndk {
|
||||
// abiFilters.clear()
|
||||
// abiFilters.addAll(['arm64-v8a'])
|
||||
// }
|
||||
}
|
||||
aaptOptions {
|
||||
additionalParameters "--no-version-vectors"
|
||||
}
|
||||
// buildTypes {
|
||||
// release {
|
||||
// minifyEnabled true
|
||||
// shrinkResources false
|
||||
// debuggable false
|
||||
// jniDebuggable false
|
||||
// renderscriptDebuggable false
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
|
|
|
@ -1,32 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="__PACKAGE__" android:versionCode="10000" android:versionName="1.0">
|
||||
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" tools:targetApi="28" />
|
||||
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" tools:targetApi="29" />
|
||||
<uses-permission android:name="android.permission.CAMERA" tools:node="remove" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" tools:node="remove" />
|
||||
<uses-permission android:name="android.permission.INTERNET" tools:node="remove" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" tools:node="remove" />
|
||||
<application android:extractNativeLibs="true"
|
||||
android:name="com.tns.NativeScriptApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:hardwareAccelerated="true" android:largeHeap="true" android:theme="@style/AppTheme">
|
||||
<activity android:name="com.tns.NativeScriptActivity" android:label="@string/title_activity_kimera" android:screenOrientation="userPortrait" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout|locale|uiMode" android:theme="@style/LaunchScreenTheme" android:windowSoftInputMode="adjustResize">
|
||||
<application android:extractNativeLibs="true" android:name="com.tns.NativeScriptApplication" android:allowBackup="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:supportsRtl="true" android:hardwareAccelerated="true" android:largeHeap="true" android:theme="@style/AppTheme">
|
||||
<activity android:name="com.tns.NativeScriptActivity" android:label="@string/title_activity_kimera" android:launchMode="singleTop" android:screenOrientation="userPortrait" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout|locale|uiMode" android:theme="@style/LaunchScreenTheme" android:windowSoftInputMode="adjustResize">
|
||||
<meta-data android:name="SET_THEME_ON_LAUNCH" android:resource="@style/AppTheme" />
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
<meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" />
|
||||
</activity>
|
||||
<activity android:name="com.tns.ErrorReportActivity" />
|
||||
<provider
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:exported="false"
|
||||
android:authorities="${applicationId}.provider"
|
||||
android:grantUriPermissions="true">
|
||||
<meta-data
|
||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/provider"/>
|
||||
<service android:name="com.tns.ForegroundService" android:enabled="true" android:exported="false" />
|
||||
<provider android:name="androidx.core.content.FileProvider" android:exported="false" android:authorities="${applicationId}.provider" android:grantUriPermissions="true">
|
||||
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider" />
|
||||
</provider>
|
||||
</application>
|
||||
</manifest>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<foreground android:drawable="@drawable/app_icon_fg" />
|
||||
<background android:drawable="@color/white" />
|
||||
</adaptive-icon>
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<foreground android:drawable="@drawable/sc_add_fg" />
|
||||
<background android:drawable="@color/orange" />
|
||||
</adaptive-icon>
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<foreground android:drawable="@drawable/sc_grocery_fg" />
|
||||
<background android:drawable="@color/orange" />
|
||||
</adaptive-icon>
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<foreground android:drawable="@drawable/sc_planner_fg" />
|
||||
<background android:drawable="@color/orange" />
|
||||
</adaptive-icon>
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<foreground android:drawable="@drawable/sc_timer_fg" />
|
||||
<background android:drawable="@color/orange" />
|
||||
</adaptive-icon>
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.3 KiB |
BIN
app/resources/Android/src/main/res/drawable-hdpi/notify.webp
Normal file
After Width: | Height: | Size: 938 B |
BIN
app/resources/Android/src/main/res/drawable-hdpi/sc_add.webp
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
app/resources/Android/src/main/res/drawable-hdpi/sc_grocery.webp
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
app/resources/Android/src/main/res/drawable-hdpi/sc_planner.webp
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
app/resources/Android/src/main/res/drawable-hdpi/sc_timer.webp
Normal file
After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 754 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.1 KiB |
BIN
app/resources/Android/src/main/res/drawable-mdpi/notify.webp
Normal file
After Width: | Height: | Size: 852 B |
BIN
app/resources/Android/src/main/res/drawable-mdpi/sc_add.webp
Normal file
After Width: | Height: | Size: 1 KiB |
BIN
app/resources/Android/src/main/res/drawable-mdpi/sc_grocery.webp
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
app/resources/Android/src/main/res/drawable-mdpi/sc_planner.webp
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
app/resources/Android/src/main/res/drawable-mdpi/sc_timer.webp
Normal file
After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.5 KiB |
BIN
app/resources/Android/src/main/res/drawable-xhdpi/notify.webp
Normal file
After Width: | Height: | Size: 1,016 B |
BIN
app/resources/Android/src/main/res/drawable-xhdpi/sc_add.webp
Normal file
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.5 KiB |
BIN
app/resources/Android/src/main/res/drawable-xhdpi/sc_timer.webp
Normal file
After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |