mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2025-12-25 03:13:13 -05:00
Compare commits
233 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dc320f2e6d | ||
|
|
acbca83553 | ||
|
|
cb26c5dfc8 | ||
|
|
b5c4174700 | ||
|
|
3e37d11c6a | ||
|
|
36e83a9d01 | ||
|
|
efcd759869 | ||
|
|
7c81396ec5 | ||
|
|
9b50665375 | ||
|
|
83795581e6 | ||
|
|
af51524109 | ||
|
|
738aa12243 | ||
|
|
f25de4b4ce | ||
|
|
698aa5a753 | ||
|
|
6444680e06 | ||
|
|
c604369e86 | ||
|
|
79abb8bf8f | ||
|
|
fd4236672e | ||
|
|
00148a2993 | ||
|
|
359fcb24cf | ||
|
|
f5d7919f72 | ||
|
|
86c4278553 | ||
|
|
2a5c0bb740 | ||
|
|
432dfa9e86 | ||
|
|
f61a8371f4 | ||
|
|
0bcdf5e0a3 | ||
|
|
169f799a23 | ||
|
|
942d1130a1 | ||
|
|
64cc20aed2 | ||
|
|
3a6731ec8d | ||
|
|
e6f11a17b9 | ||
|
|
cc1cd610e7 | ||
|
|
6a3b5ee844 | ||
|
|
49b119571e | ||
|
|
e024e3deb0 | ||
|
|
7ccedb559d | ||
|
|
103daf000d | ||
|
|
70df456307 | ||
|
|
375174ee41 | ||
|
|
f19beba014 | ||
|
|
865756e4b2 | ||
|
|
41f834db08 | ||
|
|
2c94753a5a | ||
|
|
0e05c77fa7 | ||
|
|
793c152b26 | ||
|
|
9df75f551c | ||
|
|
da49280ef2 | ||
|
|
e6087d5129 | ||
|
|
4f9bff20c8 | ||
|
|
683f1ac10a | ||
|
|
e844d2995a | ||
|
|
c0af3d19cd | ||
|
|
78d20e8340 | ||
|
|
6a90caee04 | ||
|
|
98c95a94bc | ||
|
|
d4dc4a30b8 | ||
|
|
70d2dc089c | ||
|
|
8698ad3054 | ||
|
|
6188f175ae | ||
|
|
189fab2401 | ||
|
|
a3adba1941 | ||
|
|
cea41af1b8 | ||
|
|
a325070f7f | ||
|
|
d782c54c2c | ||
|
|
58917fbc4d | ||
|
|
8b0547aeb9 | ||
|
|
9efc101161 | ||
|
|
691e8a940b | ||
|
|
bee7623eaf | ||
|
|
430697879f | ||
|
|
749974654a | ||
|
|
f31a661aaf | ||
|
|
70ea3acb05 | ||
|
|
81547563c6 | ||
|
|
c107f2f497 | ||
|
|
5fea2131cd | ||
|
|
d671df30a3 | ||
|
|
100b75a5d2 | ||
|
|
7dba36d210 | ||
|
|
0dea5c9877 | ||
|
|
1777dfe821 | ||
|
|
2b6edfb96d | ||
|
|
faa3c99965 | ||
|
|
1cc5a0a094 | ||
|
|
cbafbd44a4 | ||
|
|
f16a804758 | ||
|
|
c30e1bb43a | ||
|
|
31051086ba | ||
|
|
67d3c852dd | ||
|
|
4ea9b10fc4 | ||
|
|
e609f4e0e0 | ||
|
|
b9ee2611a3 | ||
|
|
8de3c41958 | ||
|
|
2a350a9bbe | ||
|
|
89c4c09481 | ||
|
|
a97b023504 | ||
|
|
4aa7152ab4 | ||
|
|
80ff8ddb12 | ||
|
|
45aeeaa069 | ||
|
|
0c24db72c6 | ||
|
|
95c4d72b74 | ||
|
|
1330c0e7a3 | ||
|
|
9af22bcf9f | ||
|
|
d24214c463 | ||
|
|
e8101dd433 | ||
|
|
94bd343eed | ||
|
|
f409633ade | ||
|
|
e927418535 | ||
|
|
be9f9d68db | ||
|
|
3a002cce9e | ||
|
|
416ddf3d34 | ||
|
|
8b0a19c6a2 | ||
|
|
757fa1b768 | ||
|
|
736d829bd0 | ||
|
|
6829d5351d | ||
|
|
805eb87754 | ||
|
|
e910ec4a51 | ||
|
|
4c0ace1d84 | ||
|
|
cae26e7fe0 | ||
|
|
8d070349a6 | ||
|
|
166697d791 | ||
|
|
90d93b733d | ||
|
|
272d2e94a1 | ||
|
|
f84a401714 | ||
|
|
f6b19d40b1 | ||
|
|
969b7ba492 | ||
|
|
c9edec6308 | ||
|
|
9f0ff1348c | ||
|
|
c85d62fc66 | ||
|
|
dae51a8d3e | ||
|
|
d522534a12 | ||
|
|
a38308a24a | ||
|
|
b981960221 | ||
|
|
7d1461a752 | ||
|
|
24a589fe41 | ||
|
|
b1d28a46c3 | ||
|
|
6b376fbfbb | ||
|
|
c532b1f94f | ||
|
|
26ab7f5580 | ||
|
|
72c638ca6f | ||
|
|
5478b7d550 | ||
|
|
e6eacc48d6 | ||
|
|
0259e000e3 | ||
|
|
eb0a95f594 | ||
|
|
41ee8cf66f | ||
|
|
8c8834e6aa | ||
|
|
145abfa344 | ||
|
|
f60e61e331 | ||
|
|
fd534aba95 | ||
|
|
f23c99f5ea | ||
|
|
1a14cc9513 | ||
|
|
e98131ce7a | ||
|
|
7cff47efab | ||
|
|
1dcc3e06d4 | ||
|
|
9125921038 | ||
|
|
eea2a2c252 | ||
|
|
9554c69a39 | ||
|
|
506ab0f0c7 | ||
|
|
3e26ca5c68 | ||
|
|
3fa8a9f27e | ||
|
|
0cdff07e4b | ||
|
|
8a142c3b11 | ||
|
|
20ca7151d1 | ||
|
|
15abe9f24b | ||
|
|
754b7c3376 | ||
|
|
00b02248d3 | ||
|
|
fda302ebb6 | ||
|
|
70cd675aa1 | ||
|
|
960db5aaab | ||
|
|
8daf43d6e8 | ||
|
|
114ca55b26 | ||
|
|
59f5219c0b | ||
|
|
bc465c7b2f | ||
|
|
bf1b2db415 | ||
|
|
9085756fca | ||
|
|
db43bd1962 | ||
|
|
3c13c06ce1 | ||
|
|
beb1823a57 | ||
|
|
b6fa74c601 | ||
|
|
596b6c6f98 | ||
|
|
1bfe5bb6a0 | ||
|
|
f6f6754669 | ||
|
|
752a25b1f8 | ||
|
|
8e8e4bb8bb | ||
|
|
06dc02d6b2 | ||
|
|
540daf2a38 | ||
|
|
9e671d93cb | ||
|
|
269be4e31a | ||
|
|
5969edc0b8 | ||
|
|
42176f42ed | ||
|
|
8c8bb159ea | ||
|
|
b9cf29a0ec | ||
|
|
5db9f33723 | ||
|
|
1ba09cc119 | ||
|
|
02bbe3fa13 | ||
|
|
0c77ca91c1 | ||
|
|
fbadf14b58 | ||
|
|
2558fe6c2b | ||
|
|
10fca9b5ae | ||
|
|
01f338e58b | ||
|
|
5e998796ab | ||
|
|
40231f45f6 | ||
|
|
b19b51c275 | ||
|
|
854877e685 | ||
|
|
028a8ddbda | ||
|
|
abb81209af | ||
|
|
578201c519 | ||
|
|
a5a23b366e | ||
|
|
ac57837f53 | ||
|
|
5cdc8302bb | ||
|
|
b095718545 | ||
|
|
0b53285b89 | ||
|
|
d1ea4360ca | ||
|
|
257372db5a | ||
|
|
855f20f2da | ||
|
|
4f73e57ab2 | ||
|
|
1b529bba10 | ||
|
|
072cd00e59 | ||
|
|
4b03c1a8dd | ||
|
|
f614413fb1 | ||
|
|
74153d79b8 | ||
|
|
edf06944e0 | ||
|
|
a02582e9f8 | ||
|
|
c4ff29beda | ||
|
|
cc839a1ae9 | ||
|
|
fb821ba0ef | ||
|
|
b9e806b818 | ||
|
|
20e0c948c4 | ||
|
|
a626bda1ab | ||
|
|
21f1700d6d | ||
|
|
57d7bda803 | ||
|
|
a088697812 | ||
|
|
2a15d19551 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -84,3 +84,5 @@ vue3/.vite
|
||||
# Configs
|
||||
vetur.config.js
|
||||
venv/
|
||||
.idea/easy-i18n.xml
|
||||
cookbook/static/vue3
|
||||
@@ -35,6 +35,13 @@ RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-de
|
||||
#Copy project and execute it.
|
||||
COPY . ./
|
||||
|
||||
# commented for now https://github.com/TandoorRecipes/recipes/issues/3478
|
||||
#HEALTHCHECK --interval=30s \
|
||||
# --timeout=5s \
|
||||
# --start-period=10s \
|
||||
# --retries=3 \
|
||||
# CMD [ "/usr/bin/wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:8080/openapi" ]
|
||||
|
||||
# collect information from git repositories
|
||||
RUN /opt/recipes/venv/bin/python version.py
|
||||
# delete git repositories to reduce image size
|
||||
|
||||
@@ -71,7 +71,7 @@ Because of that there are several ways you can support us
|
||||
- **Let us host for you** We are offering a [hosted version](https://app.tandoor.dev) where all profits support us and the development of tandoor (currently only available in germany).
|
||||
|
||||
## Contributing
|
||||
Contributions are welcome but please read [this](https://docs.tandoor.dev/contribute/#contributing-code) **BEFORE** contributing anything!
|
||||
Contributions are welcome but please read [this](https://docs.tandoor.dev/contribute/guidelines/) **BEFORE** contributing anything!
|
||||
|
||||
## Your Feedback
|
||||
|
||||
|
||||
14
boot.sh
14
boot.sh
@@ -29,6 +29,18 @@ if [ -z "${SECRET_KEY}" ]; then
|
||||
display_warning "The environment variable 'SECRET_KEY' (or 'SECRET_KEY_FILE' that points to an existing file) is not set but REQUIRED for running Tandoor!"
|
||||
fi
|
||||
|
||||
if [ -f "${AUTH_LDAP_BIND_PASSWORD_FILE}" ]; then
|
||||
export AUTH_LDAP_BIND_PASSWORD=$(cat "$AUTH_LDAP_BIND_PASSWORD_FILE")
|
||||
fi
|
||||
|
||||
if [ -f "${EMAIL_HOST_PASSWORD_FILE}" ]; then
|
||||
export EMAIL_HOST_PASSWORD=$(cat "$EMAIL_HOST_PASSWORD_FILE")
|
||||
fi
|
||||
|
||||
if [ -f "${SOCIALACCOUNT_PROVIDERS_FILE}" ]; then
|
||||
export SOCIALACCOUNT_PROVIDERS=$(cat "$SOCIALACCOUNT_PROVIDERS_FILE")
|
||||
fi
|
||||
|
||||
|
||||
echo "Waiting for database to be ready..."
|
||||
|
||||
@@ -83,4 +95,4 @@ if [ "$ipv6_disable" -eq 0 ]; then
|
||||
exec gunicorn -b "[::]:$TANDOOR_PORT" --workers $GUNICORN_WORKERS --threads $GUNICORN_THREADS --access-logfile - --error-logfile - --log-level $GUNICORN_LOG_LEVEL recipes.wsgi
|
||||
else
|
||||
exec gunicorn -b ":$TANDOOR_PORT" --workers $GUNICORN_WORKERS --threads $GUNICORN_THREADS --access-logfile - --error-logfile - --log-level $GUNICORN_LOG_LEVEL recipes.wsgi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -16,15 +16,11 @@ class CookbookConfig(AppConfig):
|
||||
import cookbook.signals # noqa
|
||||
|
||||
if not settings.DISABLE_EXTERNAL_CONNECTORS:
|
||||
try:
|
||||
from cookbook.connectors.connector_manager import ConnectorManager # Needs to be here to prevent loading race condition of oauth2 modules in models.py
|
||||
handler = ConnectorManager()
|
||||
post_save.connect(handler, dispatch_uid="connector_manager")
|
||||
post_delete.connect(handler, dispatch_uid="connector_manager")
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
print('Failed to initialize connectors')
|
||||
pass
|
||||
from cookbook.connectors.connector_manager import ConnectorManager # Needs to be here to prevent loading race condition of oauth2 modules in models.py
|
||||
handler = ConnectorManager()
|
||||
post_save.connect(handler, dispatch_uid="post_save-connector_manager")
|
||||
post_delete.connect(handler, dispatch_uid="post_delete-connector_manager")
|
||||
|
||||
# if not settings.DISABLE_TREE_FIX_STARTUP:
|
||||
# # when starting up run fix_tree to:
|
||||
# # a) make sure that nodes are sorted when switching between sort modes
|
||||
@@ -45,4 +41,4 @@ class CookbookConfig(AppConfig):
|
||||
# except Exception:
|
||||
# if DEBUG:
|
||||
# traceback.print_exc()
|
||||
# pass # dont break startup just because fix could not run, need to investigate cases when this happens
|
||||
# pass # dont break startup just because fix could not run, need to investigate cases when this happens
|
||||
@@ -5,6 +5,7 @@ import threading
|
||||
from asyncio import Task
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
from logging import Logger
|
||||
from types import UnionType
|
||||
from typing import List, Any, Dict, Optional, Type
|
||||
|
||||
@@ -30,6 +31,15 @@ class Work:
|
||||
actionType: ActionType
|
||||
|
||||
|
||||
class Singleton(type):
|
||||
_instances = {}
|
||||
|
||||
def __call__(cls, *args, **kwargs):
|
||||
if cls not in cls._instances:
|
||||
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
|
||||
return cls._instances[cls]
|
||||
|
||||
|
||||
# The way ConnectionManager works is as follows:
|
||||
# 1. On init, it starts a worker & creates a queue for 'Work'
|
||||
# 2. Then any time its called, it verifies the type of action (create/update/delete) and if the item is of interest, pushes the Work (non-blocking) to the queue.
|
||||
@@ -38,11 +48,14 @@ class Work:
|
||||
# 3.2 If work is of type REGISTERED_CLASSES, it asynchronously fires of all connectors and wait for them to finish (runtime should depend on the 'slowest' connector)
|
||||
# 4. Work is marked as consumed, and next entry of the queue is consumed.
|
||||
# Each 'Work' is processed in sequential by the worker, so the throughput is about [workers * the slowest connector]
|
||||
class ConnectorManager:
|
||||
# The Singleton class is used for ConnectorManager to have a self-reference and so Python does not garbage collect it
|
||||
class ConnectorManager(metaclass=Singleton):
|
||||
_logger: Logger
|
||||
_queue: queue.Queue
|
||||
_listening_to_classes = REGISTERED_CLASSES | ConnectorConfig
|
||||
|
||||
def __init__(self):
|
||||
self._logger = logging.getLogger("recipes.connector")
|
||||
self._queue = queue.Queue(maxsize=settings.EXTERNAL_CONNECTORS_QUEUE_SIZE)
|
||||
self._worker = threading.Thread(target=self.worker, args=(0, self._queue,), daemon=True)
|
||||
self._worker.start()
|
||||
@@ -65,7 +78,7 @@ class ConnectorManager:
|
||||
try:
|
||||
self._queue.put_nowait(Work(instance, action_type))
|
||||
except queue.Full:
|
||||
logging.info(f"queue was full, so skipping {action_type} of type {type(instance)}")
|
||||
self._logger.info(f"queue was full, so skipping {action_type} of type {type(instance)}")
|
||||
return
|
||||
|
||||
def stop(self):
|
||||
@@ -74,10 +87,12 @@ class ConnectorManager:
|
||||
|
||||
@staticmethod
|
||||
def worker(worker_id: int, worker_queue: queue.Queue):
|
||||
logger = logging.getLogger("recipes.connector.worker")
|
||||
|
||||
loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(loop)
|
||||
|
||||
logging.info(f"started ConnectionManager worker {worker_id}")
|
||||
logger.info(f"started ConnectionManager worker {worker_id}")
|
||||
|
||||
# When multiple workers are used, please make sure the cache is shared across all threads, otherwise it might lead to un-expected behavior.
|
||||
_connectors_cache: Dict[int, List[Connector]] = dict()
|
||||
@@ -91,6 +106,8 @@ class ConnectorManager:
|
||||
if item is None:
|
||||
break
|
||||
|
||||
logger.debug(f"received {item.instance=} with {item.actionType=}")
|
||||
|
||||
# If a Connector was changed/updated, refresh connector from the database for said space
|
||||
refresh_connector_cache = isinstance(item.instance, ConnectorConfig)
|
||||
|
||||
@@ -111,7 +128,7 @@ class ConnectorManager:
|
||||
try:
|
||||
connector: Optional[Connector] = ConnectorManager.get_connected_for_config(config)
|
||||
except BaseException:
|
||||
logging.exception(f"failed to initialize {config.name}")
|
||||
logger.exception(f"failed to initialize {config.name}")
|
||||
continue
|
||||
|
||||
if connector is not None:
|
||||
@@ -123,10 +140,12 @@ class ConnectorManager:
|
||||
worker_queue.task_done()
|
||||
continue
|
||||
|
||||
logger.debug(f"running {len(connectors)} connectors for {item.instance=} with {item.actionType=}")
|
||||
|
||||
loop.run_until_complete(run_connectors(connectors, space, item.instance, item.actionType))
|
||||
worker_queue.task_done()
|
||||
|
||||
logging.info(f"terminating ConnectionManager worker {worker_id}")
|
||||
logger.info(f"terminating ConnectionManager worker {worker_id}")
|
||||
|
||||
asyncio.set_event_loop(None)
|
||||
loop.close()
|
||||
|
||||
@@ -3,7 +3,7 @@ from logging import Logger
|
||||
from typing import Dict, Tuple
|
||||
from urllib.parse import urljoin
|
||||
|
||||
from aiohttp import ClientError, request
|
||||
from aiohttp import request, ClientResponseError
|
||||
|
||||
from cookbook.connectors.connector import Connector
|
||||
from cookbook.models import ShoppingListEntry, ConnectorConfig, Space
|
||||
@@ -13,14 +13,17 @@ class HomeAssistant(Connector):
|
||||
_config: ConnectorConfig
|
||||
_logger: Logger
|
||||
|
||||
_required_foreign_keys = ("food", "unit", "created_by")
|
||||
|
||||
def __init__(self, config: ConnectorConfig):
|
||||
if not config.token or not config.url or not config.todo_entity:
|
||||
raise ValueError("config for HomeAssistantConnector in incomplete")
|
||||
|
||||
self._logger = logging.getLogger(f"recipes.connector.homeassistant.{config.name}")
|
||||
|
||||
if config.url[-1] != "/":
|
||||
config.url += "/"
|
||||
self._config = config
|
||||
self._logger = logging.getLogger("connector.HomeAssistant")
|
||||
|
||||
async def homeassistant_api_call(self, method: str, path: str, data: Dict) -> str:
|
||||
headers = {
|
||||
@@ -37,18 +40,20 @@ class HomeAssistant(Connector):
|
||||
|
||||
item, description = _format_shopping_list_entry(shopping_list_entry)
|
||||
|
||||
logging.debug(f"adding {item=} to {self._config.name}")
|
||||
self._logger.debug(f"adding {item=} with {description=} to {self._config.todo_entity}")
|
||||
|
||||
data = {
|
||||
"entity_id": self._config.todo_entity,
|
||||
"item": item,
|
||||
"description": description,
|
||||
}
|
||||
|
||||
if self._config.supports_description_field:
|
||||
data["description"] = description
|
||||
|
||||
try:
|
||||
await self.homeassistant_api_call("POST", "services/todo/add_item", data)
|
||||
except ClientError as err:
|
||||
self._logger.warning(f"[HomeAssistant {self._config.name}] Received an exception from the api: {err=}, {type(err)=}")
|
||||
except ClientResponseError as err:
|
||||
self._logger.warning(f"received an exception from the api: {err.request_info.url=}, {err.request_info.method=}, {err.status=}, {err.message=}, {type(err)=}")
|
||||
|
||||
async def on_shopping_list_entry_updated(self, space: Space, shopping_list_entry: ShoppingListEntry) -> None:
|
||||
if not self._config.on_shopping_list_entry_updated_enabled:
|
||||
@@ -59,14 +64,14 @@ class HomeAssistant(Connector):
|
||||
if not self._config.on_shopping_list_entry_deleted_enabled:
|
||||
return
|
||||
|
||||
if not hasattr(shopping_list_entry._state.fields_cache, "food"):
|
||||
if not all(k in shopping_list_entry._state.fields_cache for k in self._required_foreign_keys):
|
||||
# Sometimes the food foreign key is not loaded, and we cant load it from an async process
|
||||
self._logger.debug("required property was not present in ShoppingListEntry")
|
||||
return
|
||||
|
||||
item, _ = _format_shopping_list_entry(shopping_list_entry)
|
||||
|
||||
logging.debug(f"removing {item=} from {self._config.name}")
|
||||
self._logger.debug(f"removing {item=} from {self._config.todo_entity}")
|
||||
|
||||
data = {
|
||||
"entity_id": self._config.todo_entity,
|
||||
@@ -75,9 +80,9 @@ class HomeAssistant(Connector):
|
||||
|
||||
try:
|
||||
await self.homeassistant_api_call("POST", "services/todo/remove_item", data)
|
||||
except ClientError as err:
|
||||
except ClientResponseError as err:
|
||||
# This error will always trigger if the item is not present/found
|
||||
self._logger.debug(f"[HomeAssistant {self._config.name}] Received an exception from the api: {err=}, {type(err)=}")
|
||||
self._logger.debug(f"received an exception from the api: {err.request_info.url=}, {err.request_info.method=}, {err.status=}, {err.message=}, {type(err)=}")
|
||||
|
||||
async def close(self) -> None:
|
||||
pass
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
from allauth.account.forms import ResetPasswordForm, SignupForm
|
||||
from allauth.socialaccount.forms import SignupForm as SocialSignupForm
|
||||
from django import forms
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ValidationError
|
||||
@@ -14,15 +16,13 @@ from .models import Comment, InviteLink, Keyword, Recipe, SearchPreference, Spac
|
||||
|
||||
|
||||
class SelectWidget(widgets.Select):
|
||||
|
||||
class Media:
|
||||
js = ('custom/js/form_select.js', )
|
||||
js = ('custom/js/form_select.js',)
|
||||
|
||||
|
||||
class MultiSelectWidget(widgets.SelectMultiple):
|
||||
|
||||
class Media:
|
||||
js = ('custom/js/form_multiselect.js', )
|
||||
js = ('custom/js/form_multiselect.js',)
|
||||
|
||||
|
||||
# Yes there are some stupid browsers that still dont support this but
|
||||
@@ -89,12 +89,13 @@ class ImportExportBase(forms.Form):
|
||||
COOKMATE = 'COOKMATE'
|
||||
REZEPTSUITEDE = 'REZEPTSUITEDE'
|
||||
PDF = 'PDF'
|
||||
GOURMET = 'GOURMET'
|
||||
|
||||
type = forms.ChoiceField(choices=((DEFAULT, _('Default')), (PAPRIKA, 'Paprika'), (NEXTCLOUD, 'Nextcloud Cookbook'), (MEALIE, 'Mealie'), (CHOWDOWN, 'Chowdown'),
|
||||
(SAFFRON, 'Saffron'), (CHEFTAP, 'ChefTap'), (PEPPERPLATE, 'Pepperplate'), (RECETTETEK, 'RecetteTek'), (RECIPESAGE, 'Recipe Sage'),
|
||||
(DOMESTICA, 'Domestica'), (MEALMASTER, 'MealMaster'), (REZKONV, 'RezKonv'), (OPENEATS, 'Openeats'), (RECIPEKEEPER, 'Recipe Keeper'),
|
||||
(PLANTOEAT, 'Plantoeat'), (COOKBOOKAPP, 'CookBookApp'), (COPYMETHAT, 'CopyMeThat'), (PDF, 'PDF'), (MELARECIPES, 'Melarecipes'),
|
||||
(COOKMATE, 'Cookmate'), (REZEPTSUITEDE, 'Recipesuite.de')))
|
||||
(COOKMATE, 'Cookmate'), (REZEPTSUITEDE, 'Recipesuite.de'), (GOURMET, 'Gourmet')))
|
||||
|
||||
|
||||
class MultipleFileInput(forms.ClearableFileInput):
|
||||
@@ -138,7 +139,7 @@ class CommentForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
model = Comment
|
||||
fields = ('text', )
|
||||
fields = ('text',)
|
||||
|
||||
labels = {'text': _('Add your comment: '), }
|
||||
widgets = {'text': forms.Textarea(attrs={'rows': 2, 'cols': 15}), }
|
||||
@@ -160,7 +161,6 @@ class StorageForm(forms.ModelForm):
|
||||
help_texts = {'url': _('Leave empty for dropbox and enter only base url for nextcloud (<code>/remote.php/webdav/</code> is added automatically)'), }
|
||||
|
||||
|
||||
|
||||
class ConnectorConfigForm(forms.ModelForm):
|
||||
enabled = forms.BooleanField(
|
||||
help_text="Is the connector enabled",
|
||||
@@ -182,6 +182,12 @@ class ConnectorConfigForm(forms.ModelForm):
|
||||
required=False,
|
||||
)
|
||||
|
||||
supports_description_field = forms.BooleanField(
|
||||
help_text="Does the connector todo entity support the description field",
|
||||
initial=True,
|
||||
required=False,
|
||||
)
|
||||
|
||||
update_token = forms.CharField(
|
||||
widget=forms.TextInput(attrs={'autocomplete': 'update-token', 'type': 'password'}),
|
||||
required=False,
|
||||
@@ -198,7 +204,7 @@ class ConnectorConfigForm(forms.ModelForm):
|
||||
|
||||
fields = (
|
||||
'name', 'type', 'enabled', 'on_shopping_list_entry_created_enabled', 'on_shopping_list_entry_updated_enabled',
|
||||
'on_shopping_list_entry_deleted_enabled', 'url', 'todo_entity',
|
||||
'on_shopping_list_entry_deleted_enabled', 'supports_description_field', 'url', 'todo_entity',
|
||||
)
|
||||
|
||||
help_texts = {
|
||||
@@ -308,6 +314,18 @@ class AllAuthSignupForm(SignupForm):
|
||||
pass
|
||||
|
||||
|
||||
class AllAuthSocialSignupForm(SocialSignupForm):
|
||||
terms = forms.BooleanField(label=_('Accept Terms and Privacy'))
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
if settings.PRIVACY_URL == '' and settings.TERMS_URL == '':
|
||||
self.fields.pop('terms')
|
||||
|
||||
def signup(self, request, user):
|
||||
pass
|
||||
|
||||
|
||||
class CustomPasswordResetForm(ResetPasswordForm):
|
||||
captcha = hCaptchaField()
|
||||
|
||||
@@ -338,12 +356,13 @@ class SearchPreferenceForm(forms.ModelForm):
|
||||
|
||||
help_texts = {
|
||||
'search': _('Select type method of search. Click <a href="/docs/search/">here</a> for full description of choices.'), 'lookup':
|
||||
_('Use fuzzy matching on units, keywords and ingredients when editing and importing recipes.'), 'unaccent':
|
||||
_('Fields to search ignoring accents. Selecting this option can improve or degrade search quality depending on language'), 'icontains':
|
||||
_("Fields to search for partial matches. (e.g. searching for 'Pie' will return 'pie' and 'piece' and 'soapie')"), 'istartswith':
|
||||
_("Fields to search for beginning of word matches. (e.g. searching for 'sa' will return 'salad' and 'sandwich')"), 'trigram':
|
||||
_("Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) Note: this option will conflict with 'web' and 'raw' methods of search."), 'fulltext':
|
||||
_("Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods only function with fulltext fields."),
|
||||
_('Use fuzzy matching on units, keywords and ingredients when editing and importing recipes.'), 'unaccent':
|
||||
_('Fields to search ignoring accents. Selecting this option can improve or degrade search quality depending on language'), 'icontains':
|
||||
_("Fields to search for partial matches. (e.g. searching for 'Pie' will return 'pie' and 'piece' and 'soapie')"), 'istartswith':
|
||||
_("Fields to search for beginning of word matches. (e.g. searching for 'sa' will return 'salad' and 'sandwich')"), 'trigram':
|
||||
_("Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) Note: this option will conflict with 'web' and 'raw' methods of search."),
|
||||
'fulltext':
|
||||
_("Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods only function with fulltext fields."),
|
||||
}
|
||||
|
||||
labels = {
|
||||
@@ -353,5 +372,5 @@ class SearchPreferenceForm(forms.ModelForm):
|
||||
|
||||
widgets = {
|
||||
'search': SelectWidget, 'unaccent': MultiSelectWidget, 'icontains': MultiSelectWidget, 'istartswith': MultiSelectWidget, 'trigram': MultiSelectWidget, 'fulltext':
|
||||
MultiSelectWidget,
|
||||
MultiSelectWidget,
|
||||
}
|
||||
|
||||
@@ -1,4 +1,12 @@
|
||||
import socket
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.validators import URLValidator
|
||||
from django.db.models import Func
|
||||
from ipaddress import ip_address
|
||||
|
||||
from recipes import settings
|
||||
|
||||
|
||||
class Round(Func):
|
||||
@@ -11,3 +19,30 @@ def str2bool(v):
|
||||
return v
|
||||
else:
|
||||
return v.lower() in ("yes", "true", "1")
|
||||
|
||||
|
||||
"""
|
||||
validates an url that is supposed to be imported
|
||||
checks that the protocol used is http(s) and that no local address is accessed
|
||||
@:param url to test
|
||||
@:return true if url is valid, false otherwise
|
||||
"""
|
||||
|
||||
|
||||
def validate_import_url(url):
|
||||
try:
|
||||
validator = URLValidator(schemes=['http', 'https'])
|
||||
validator(url)
|
||||
except ValidationError:
|
||||
# if schema is not http or https, consider url invalid
|
||||
return False
|
||||
|
||||
# resolve IP address of url
|
||||
try:
|
||||
url_ip_address = ip_address(str(socket.gethostbyname(urlparse(url).hostname)))
|
||||
except (ValueError, AttributeError, TypeError, Exception) as e:
|
||||
# if ip cannot be parsed, consider url invalid
|
||||
return False
|
||||
|
||||
# validate that IP is neither private nor any other special address
|
||||
return not any([url_ip_address.is_private, url_ip_address.is_reserved, url_ip_address.is_loopback, url_ip_address.is_multicast, url_ip_address.is_link_local, ])
|
||||
|
||||
@@ -35,6 +35,20 @@ def get_filetype(name):
|
||||
return '.jpeg'
|
||||
|
||||
|
||||
def is_file_type_allowed(filename, image_only=False):
|
||||
is_file_allowed = False
|
||||
allowed_file_types = ['.pdf','.docx', '.xlsx']
|
||||
allowed_image_types = ['.png', '.jpg', '.jpeg', '.gif']
|
||||
check_list = allowed_image_types
|
||||
if not image_only:
|
||||
check_list += allowed_file_types
|
||||
|
||||
for file_type in check_list:
|
||||
if filename.endswith(file_type):
|
||||
is_file_allowed = True
|
||||
|
||||
return is_file_allowed
|
||||
|
||||
# TODO this whole file needs proper documentation, refactoring, and testing
|
||||
# TODO also add env variable to define which images sizes should be compressed
|
||||
# filetype argument can not be optional, otherwise this function will treat all images as if they were a jpeg
|
||||
|
||||
@@ -6,7 +6,7 @@ from django.utils.dateparse import parse_duration
|
||||
from django.utils.translation import gettext as _
|
||||
from isodate import parse_duration as iso_parse_duration
|
||||
from isodate.isoerror import ISO8601Error
|
||||
from pytube import YouTube
|
||||
from pytubefix import YouTube
|
||||
from recipe_scrapers._utils import get_host_name, get_minutes
|
||||
|
||||
from cookbook.helper.automation_helper import AutomationEngine
|
||||
@@ -28,7 +28,9 @@ def get_from_scraper(scrape, request):
|
||||
source_url = scrape.url
|
||||
except Exception:
|
||||
pass
|
||||
if source_url:
|
||||
if source_url == "https://urlnotfound.none" or not source_url:
|
||||
recipe_json['source_url'] = ''
|
||||
else:
|
||||
recipe_json['source_url'] = source_url
|
||||
try:
|
||||
keywords.append(source_url.replace('http://', '').replace('https://', '').split('/')[0])
|
||||
@@ -272,9 +274,8 @@ def get_from_youtube_scraper(url, request):
|
||||
default_recipe_json['image'] = video.thumbnail_url
|
||||
if video.description:
|
||||
default_recipe_json['steps'][0]['instruction'] = automation_engine.apply_regex_replace_automation(video.description, Automation.INSTRUCTION_REPLACE)
|
||||
|
||||
except Exception:
|
||||
pass
|
||||
traceback.print_exc()
|
||||
|
||||
return default_recipe_json
|
||||
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
import json
|
||||
from recipe_scrapers._abstract import AbstractScraper
|
||||
|
||||
|
||||
class CooksIllustrated(AbstractScraper):
|
||||
@classmethod
|
||||
def host(cls, site='cooksillustrated'):
|
||||
return {
|
||||
'cooksillustrated': f"{site}.com",
|
||||
'americastestkitchen': f"{site}.com",
|
||||
'cookscountry': f"{site}.com",
|
||||
}.get(site)
|
||||
|
||||
def title(self):
|
||||
return self.schema.title()
|
||||
|
||||
def image(self):
|
||||
return self.schema.image()
|
||||
|
||||
def total_time(self):
|
||||
if not self.recipe:
|
||||
self.get_recipe()
|
||||
return self.recipe['recipeTimeNote']
|
||||
|
||||
def yields(self):
|
||||
if not self.recipe:
|
||||
self.get_recipe()
|
||||
return self.recipe['yields']
|
||||
|
||||
def ingredients(self):
|
||||
if not self.recipe:
|
||||
self.get_recipe()
|
||||
ingredients = []
|
||||
for group in self.recipe['ingredientGroups']:
|
||||
ingredients += group['fields']['recipeIngredientItems']
|
||||
return [
|
||||
"{} {} {}{}".format(
|
||||
i['fields']['qty'] or '',
|
||||
i['fields']['measurement'] or '',
|
||||
i['fields']['ingredient']['fields']['title'] or '',
|
||||
i['fields']['postText'] or ''
|
||||
)
|
||||
for i in ingredients
|
||||
]
|
||||
|
||||
def instructions(self):
|
||||
if not self.recipe:
|
||||
self.get_recipe()
|
||||
if self.recipe.get('headnote', False):
|
||||
i = ['Note: ' + self.recipe.get('headnote', '')]
|
||||
else:
|
||||
i = []
|
||||
return "\n".join(
|
||||
i
|
||||
+ [self.recipe.get('whyThisWorks', '')]
|
||||
+ [
|
||||
instruction['fields']['content']
|
||||
for instruction in self.recipe['instructions']
|
||||
]
|
||||
)
|
||||
|
||||
def nutrients(self):
|
||||
raise NotImplementedError("This should be implemented.")
|
||||
|
||||
def get_recipe(self):
|
||||
j = json.loads(self.soup.find(type='application/json').string)
|
||||
name = list(j['props']['initialState']['content']['documents'])[0]
|
||||
self.recipe = j['props']['initialState']['content']['documents'][name]
|
||||
@@ -1,43 +0,0 @@
|
||||
from json import JSONDecodeError
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
from recipe_scrapers import SCRAPERS, get_host_name
|
||||
from recipe_scrapers._factory import SchemaScraperFactory
|
||||
from recipe_scrapers._schemaorg import SchemaOrg
|
||||
|
||||
from .cooksillustrated import CooksIllustrated
|
||||
|
||||
CUSTOM_SCRAPERS = {
|
||||
CooksIllustrated.host(site="cooksillustrated"): CooksIllustrated,
|
||||
CooksIllustrated.host(site="americastestkitchen"): CooksIllustrated,
|
||||
CooksIllustrated.host(site="cookscountry"): CooksIllustrated,
|
||||
}
|
||||
SCRAPERS.update(CUSTOM_SCRAPERS)
|
||||
|
||||
|
||||
def text_scraper(text, url=None):
|
||||
domain = None
|
||||
if url:
|
||||
domain = get_host_name(url)
|
||||
if domain in SCRAPERS:
|
||||
scraper_class = SCRAPERS[domain]
|
||||
else:
|
||||
scraper_class = SchemaScraperFactory.SchemaScraper
|
||||
|
||||
class TextScraper(scraper_class):
|
||||
def __init__(
|
||||
self,
|
||||
html=None,
|
||||
url=None,
|
||||
):
|
||||
self.supported_only = False
|
||||
self.meta_http_equiv = False
|
||||
self.soup = BeautifulSoup(html, "html.parser")
|
||||
self.url = url
|
||||
self.recipe = None
|
||||
try:
|
||||
self.schema = SchemaOrg(html)
|
||||
except (JSONDecodeError, AttributeError):
|
||||
pass
|
||||
|
||||
return TextScraper(url=url, html=text)
|
||||
@@ -3,6 +3,8 @@ from gettext import gettext as _
|
||||
import bleach
|
||||
import markdown as md
|
||||
from jinja2 import Template, TemplateSyntaxError, UndefinedError
|
||||
from jinja2.exceptions import SecurityError
|
||||
from jinja2.sandbox import SandboxedEnvironment
|
||||
from markdown.extensions.tables import TableExtension
|
||||
|
||||
from cookbook.helper.mdx_attributes import MarkdownFormatExtension
|
||||
@@ -89,11 +91,13 @@ def render_instructions(step): # TODO deduplicate markdown cleanup code
|
||||
return f"<scalable-number v-bind:number='{bleach.clean(str(number))}' v-bind:factor='ingredient_factor'></scalable-number>"
|
||||
|
||||
try:
|
||||
template = Template(instructions)
|
||||
instructions = template.render(ingredients=ingredients, scale=scale)
|
||||
env = SandboxedEnvironment()
|
||||
instructions = env.from_string(instructions).render(ingredients=ingredients, scale=scale)
|
||||
except TemplateSyntaxError:
|
||||
return _('Could not parse template code.') + ' Error: Template Syntax broken'
|
||||
except UndefinedError:
|
||||
return _('Could not parse template code.') + ' Error: Undefined Error'
|
||||
except SecurityError:
|
||||
return _('Could not parse template code.') + ' Error: Security Error'
|
||||
|
||||
return instructions
|
||||
|
||||
@@ -20,6 +20,7 @@ CONVERSION_TABLE = {
|
||||
'gallon': 0.264172,
|
||||
'tbsp': 67.628,
|
||||
'tsp': 202.884,
|
||||
'us_cup': 4.22675,
|
||||
'imperial_fluid_ounce': 35.1951,
|
||||
'imperial_pint': 1.75975,
|
||||
'imperial_quart': 0.879877,
|
||||
|
||||
@@ -2,12 +2,12 @@ import re
|
||||
from io import BytesIO
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.recipe_url_import import (get_from_scraper, get_images_from_soup,
|
||||
iso_duration_to_minutes)
|
||||
from cookbook.helper.scrapers.scrapers import text_scraper
|
||||
from recipe_scrapers import scrape_html
|
||||
from cookbook.integration.integration import Integration
|
||||
from cookbook.models import Ingredient, Recipe, Step
|
||||
|
||||
@@ -20,7 +20,7 @@ class CookBookApp(Integration):
|
||||
def get_recipe_from_file(self, file):
|
||||
recipe_html = file.getvalue().decode("utf-8")
|
||||
|
||||
scrape = text_scraper(text=recipe_html)
|
||||
scrape = scrape_html(html=recipe_html, org_url="https://cookbookapp.import", supported_only=False)
|
||||
recipe_json = get_from_scraper(scrape, self.request)
|
||||
images = list(dict.fromkeys(get_images_from_soup(scrape.soup, None)))
|
||||
|
||||
@@ -63,7 +63,7 @@ class CookBookApp(Integration):
|
||||
if len(images) > 0:
|
||||
try:
|
||||
url = images[0]
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
response = requests.get(url)
|
||||
self.import_recipe_image(recipe, BytesIO(response.content))
|
||||
except Exception as e:
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from io import BytesIO
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time
|
||||
from cookbook.integration.integration import Integration
|
||||
@@ -69,7 +69,7 @@ class Cookmate(Integration):
|
||||
if recipe_xml.find('imageurl') is not None:
|
||||
try:
|
||||
url = recipe_xml.find('imageurl').text.strip()
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
response = requests.get(url)
|
||||
self.import_recipe_image(recipe, BytesIO(response.content))
|
||||
except Exception as e:
|
||||
|
||||
211
cookbook/integration/gourmet.py
Normal file
211
cookbook/integration/gourmet.py
Normal file
@@ -0,0 +1,211 @@
|
||||
import base64
|
||||
from io import BytesIO
|
||||
from lxml import etree
|
||||
import requests
|
||||
from pathlib import Path
|
||||
|
||||
from bs4 import BeautifulSoup, Tag
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time, iso_duration_to_minutes
|
||||
from cookbook.integration.integration import Integration
|
||||
from cookbook.models import Ingredient, Recipe, Step, Keyword
|
||||
from recipe_scrapers import scrape_html
|
||||
|
||||
|
||||
class Gourmet(Integration):
|
||||
|
||||
def split_recipe_file(self, file):
|
||||
encoding = 'utf-8'
|
||||
byte_string = file.read()
|
||||
text_obj = byte_string.decode(encoding, errors="ignore")
|
||||
soup = BeautifulSoup(text_obj, "html.parser")
|
||||
return soup.find_all("div", {"class": "recipe"})
|
||||
|
||||
def get_ingredients_recursive(self, step, ingredients, ingredient_parser):
|
||||
if isinstance(ingredients, Tag):
|
||||
for ingredient in ingredients.children:
|
||||
if not isinstance(ingredient, Tag):
|
||||
continue
|
||||
|
||||
if ingredient.name in ["li"]:
|
||||
step_name = "".join(ingredient.findAll(text=True, recursive=False)).strip().rstrip(":")
|
||||
|
||||
step.ingredients.add(Ingredient.objects.create(
|
||||
is_header=True,
|
||||
note=step_name[:256],
|
||||
original_text=step_name,
|
||||
space=self.request.space,
|
||||
))
|
||||
next_ingrediets = ingredient.find("ul", {"class": "ing"})
|
||||
self.get_ingredients_recursive(step, next_ingrediets, ingredient_parser)
|
||||
|
||||
else:
|
||||
try:
|
||||
amount, unit, food, note = ingredient_parser.parse(ingredient.text.strip())
|
||||
f = ingredient_parser.get_food(food)
|
||||
u = ingredient_parser.get_unit(unit)
|
||||
step.ingredients.add(
|
||||
Ingredient.objects.create(
|
||||
food=f,
|
||||
unit=u,
|
||||
amount=amount,
|
||||
note=note,
|
||||
original_text=ingredient.text.strip(),
|
||||
space=self.request.space,
|
||||
)
|
||||
)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
def get_recipe_from_file(self, file):
|
||||
# 'file' comes is as a beautifulsoup object
|
||||
|
||||
source_url = None
|
||||
for item in file.find_all('a'):
|
||||
if item.has_attr('href'):
|
||||
source_url = item.get("href")
|
||||
break
|
||||
|
||||
name = file.find("p", {"class": "title"}).find("span", {"itemprop": "name"}).text.strip()
|
||||
|
||||
recipe = Recipe.objects.create(
|
||||
name=name[:128],
|
||||
source_url=source_url,
|
||||
created_by=self.request.user,
|
||||
internal=True,
|
||||
space=self.request.space,
|
||||
)
|
||||
|
||||
for category in file.find_all("span", {"itemprop": "recipeCategory"}):
|
||||
keyword, created = Keyword.objects.get_or_create(name=category.text, space=self.request.space)
|
||||
recipe.keywords.add(keyword)
|
||||
|
||||
try:
|
||||
recipe.servings = parse_servings(file.find("span", {"itemprop": "recipeYield"}).text.strip())
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
try:
|
||||
prep_time = file.find("span", {"itemprop": "prepTime"}).text.strip().split()
|
||||
prep_time[0] = prep_time[0].replace(',', '.')
|
||||
if prep_time[1].lower() in ['stunde', 'stunden', 'hour', 'hours']:
|
||||
prep_time_min = int(float(prep_time[0]) * 60)
|
||||
elif prep_time[1].lower() in ['tag', 'tage', 'day', 'days']:
|
||||
prep_time_min = int(float(prep_time[0]) * 60 * 24)
|
||||
else:
|
||||
prep_time_min = int(prep_time[0])
|
||||
recipe.waiting_time = prep_time_min
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
try:
|
||||
cook_time = file.find("span", {"itemprop": "cookTime"}).text.strip().split()
|
||||
cook_time[0] = cook_time[0].replace(',', '.')
|
||||
if cook_time[1].lower() in ['stunde', 'stunden', 'hour', 'hours']:
|
||||
cook_time_min = int(float(cook_time[0]) * 60)
|
||||
elif cook_time[1].lower() in ['tag', 'tage', 'day', 'days']:
|
||||
cook_time_min = int(float(cook_time[0]) * 60 * 24)
|
||||
else:
|
||||
cook_time_min = int(cook_time[0])
|
||||
|
||||
recipe.working_time = cook_time_min
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
for cuisine in file.find_all('span', {'itemprop': 'recipeCuisine'}):
|
||||
cuisine_name = cuisine.text
|
||||
keyword = Keyword.objects.get_or_create(space=self.request.space, name=cuisine_name)
|
||||
if len(keyword):
|
||||
recipe.keywords.add(keyword[0])
|
||||
|
||||
for category in file.find_all('span', {'itemprop': 'recipeCategory'}):
|
||||
category_name = category.text
|
||||
keyword = Keyword.objects.get_or_create(space=self.request.space, name=category_name)
|
||||
if len(keyword):
|
||||
recipe.keywords.add(keyword[0])
|
||||
|
||||
step = Step.objects.create(
|
||||
instruction='',
|
||||
space=self.request.space,
|
||||
show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
|
||||
)
|
||||
|
||||
ingredient_parser = IngredientParser(self.request, True)
|
||||
|
||||
ingredients = file.find("ul", {"class": "ing"})
|
||||
self.get_ingredients_recursive(step, ingredients, ingredient_parser)
|
||||
|
||||
instructions = file.find("div", {"class": "instructions"})
|
||||
if isinstance(instructions, Tag):
|
||||
for instruction in instructions.children:
|
||||
if not isinstance(instruction, Tag) or instruction.text == "":
|
||||
continue
|
||||
if instruction.name == "h3":
|
||||
if step.instruction:
|
||||
step.save()
|
||||
recipe.steps.add(step)
|
||||
step = Step.objects.create(
|
||||
instruction='',
|
||||
space=self.request.space,
|
||||
)
|
||||
|
||||
step.name = instruction.text.strip()[:128]
|
||||
else:
|
||||
if instruction.name == "div":
|
||||
for instruction_step in instruction.children:
|
||||
for br in instruction_step.find_all("br"):
|
||||
br.replace_with("\n")
|
||||
step.instruction += instruction_step.text.strip() + ' \n\n'
|
||||
|
||||
notes = file.find("div", {"class": "modifications"})
|
||||
if notes:
|
||||
for n in notes.children:
|
||||
if n.text == "":
|
||||
continue
|
||||
if n.name == "h3":
|
||||
step.instruction += f'*{n.text.strip()}:* \n\n'
|
||||
else:
|
||||
for br in n.find_all("br"):
|
||||
br.replace_with("\n")
|
||||
|
||||
step.instruction += '*' + n.text.strip() + '* \n\n'
|
||||
|
||||
description = ''
|
||||
try:
|
||||
description = file.find("div", {"id": "description"}).text.strip()
|
||||
except AttributeError:
|
||||
pass
|
||||
if len(description) <= 512:
|
||||
recipe.description = description
|
||||
else:
|
||||
recipe.description = description[:480] + ' ... (full description below)'
|
||||
step.instruction += '*Description:* \n\n*' + description + '* \n\n'
|
||||
|
||||
step.save()
|
||||
recipe.steps.add(step)
|
||||
|
||||
# import the Primary recipe image that is stored in the Zip
|
||||
try:
|
||||
image_path = file.find("img").get("src")
|
||||
image_filename = image_path.split("\\")[1]
|
||||
|
||||
for f in self.import_zip.filelist:
|
||||
zip_file_name = Path(f.filename).name
|
||||
if image_filename == zip_file_name:
|
||||
image_file = self.import_zip.read(f)
|
||||
image_bytes = BytesIO(image_file)
|
||||
self.import_recipe_image(recipe, image_bytes, filetype='.jpeg')
|
||||
break
|
||||
except Exception as e:
|
||||
print(recipe.name, ': failed to import image ', str(e))
|
||||
|
||||
recipe.save()
|
||||
return recipe
|
||||
|
||||
def get_files_from_recipes(self, recipes, el, cookie):
|
||||
raise NotImplementedError('Method not implemented in storage integration')
|
||||
|
||||
def get_file_from_recipe(self, recipe):
|
||||
raise NotImplementedError('Method not implemented in storage integration')
|
||||
@@ -153,6 +153,19 @@ class Integration:
|
||||
il.total_recipes = len(new_file_list)
|
||||
file_list = new_file_list
|
||||
|
||||
if isinstance(self, cookbook.integration.gourmet.Gourmet):
|
||||
self.import_zip = import_zip
|
||||
new_file_list = []
|
||||
for file in file_list:
|
||||
if file.file_size == 0:
|
||||
next
|
||||
if file.filename.startswith("index.htm"):
|
||||
next
|
||||
if file.filename.endswith(".htm"):
|
||||
new_file_list += self.split_recipe_file(BytesIO(import_zip.read(file.filename)))
|
||||
il.total_recipes = len(new_file_list)
|
||||
file_list = new_file_list
|
||||
|
||||
for z in file_list:
|
||||
try:
|
||||
if not hasattr(z, 'filename') or isinstance(z, Tag):
|
||||
|
||||
@@ -72,14 +72,14 @@ class Mealie(Integration):
|
||||
)
|
||||
recipe.steps.add(step)
|
||||
|
||||
if 'recipe_yield' in recipe_json:
|
||||
if 'recipe_yield' in recipe_json and recipe_json['recipe_yield'] is not None:
|
||||
recipe.servings = parse_servings(recipe_json['recipe_yield'])
|
||||
recipe.servings_text = parse_servings_text(recipe_json['recipe_yield'])
|
||||
|
||||
if 'total_time' in recipe_json and recipe_json['total_time'] is not None:
|
||||
recipe.working_time = parse_time(recipe_json['total_time'])
|
||||
|
||||
if 'org_url' in recipe_json:
|
||||
if 'org_url' in recipe_json and recipe_json['org_url'] is not None:
|
||||
recipe.source_url = recipe_json['org_url']
|
||||
|
||||
recipe.save()
|
||||
|
||||
@@ -6,8 +6,8 @@ from gettext import gettext as _
|
||||
from io import BytesIO
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text
|
||||
from cookbook.integration.integration import Integration
|
||||
@@ -84,13 +84,22 @@ class Paprika(Integration):
|
||||
|
||||
recipe.steps.add(step)
|
||||
|
||||
# Paprika exports can have images in either of image_url, or photo_data.
|
||||
# If a user takes an image himself, only photo_data will be set.
|
||||
# If a user imports an image, both will be set. But the photo_data will be a center-cropped square resized version, so the image_url is preferred.
|
||||
|
||||
# Try to download image if possible
|
||||
try:
|
||||
if recipe_json.get("image_url", None):
|
||||
url = recipe_json.get("image_url", None)
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
response = requests.get(url)
|
||||
self.import_recipe_image(recipe, BytesIO(response.content))
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# If no image downloaded, try to extract from photo_data
|
||||
if not recipe.image:
|
||||
if recipe_json.get("photo_data", None):
|
||||
self.import_recipe_image(recipe, BytesIO(base64.b64decode(recipe_json['photo_data'])), filetype='.jpeg')
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from io import BytesIO
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time
|
||||
from cookbook.integration.integration import Integration
|
||||
@@ -75,7 +75,7 @@ class Plantoeat(Integration):
|
||||
|
||||
if image_url:
|
||||
try:
|
||||
if validators.url(image_url, public=True):
|
||||
if validate_import_url(image_url):
|
||||
response = requests.get(image_url)
|
||||
self.import_recipe_image(recipe, BytesIO(response.content))
|
||||
except Exception as e:
|
||||
|
||||
@@ -5,9 +5,10 @@ from io import BytesIO
|
||||
from zipfile import ZipFile
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.image_processing import get_filetype
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.integration.integration import Integration
|
||||
@@ -125,7 +126,7 @@ class RecetteTek(Integration):
|
||||
else:
|
||||
if file['originalPicture'] != '':
|
||||
url = file['originalPicture']
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
response = requests.get(url)
|
||||
if imghdr.what(BytesIO(response.content)) is not None:
|
||||
self.import_recipe_image(recipe, BytesIO(response.content), filetype=get_filetype(file['originalPicture']))
|
||||
|
||||
@@ -2,8 +2,8 @@ import json
|
||||
from io import BytesIO
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time
|
||||
from cookbook.integration.integration import Integration
|
||||
@@ -56,7 +56,7 @@ class RecipeSage(Integration):
|
||||
if len(file['image']) > 0:
|
||||
try:
|
||||
url = file['image'][0]
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
response = requests.get(url)
|
||||
self.import_recipe_image(recipe, BytesIO(response.content))
|
||||
except Exception as e:
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-11-28 11:03+0000\n"
|
||||
"Last-Translator: Mahmoud Aljouhari <mapgohary@gmail.com>\n"
|
||||
"Language-Team: Arabic <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
@@ -1946,286 +1946,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-04-12 11:55+0000\n"
|
||||
"Last-Translator: noxonad <noxonad@proton.me>\n"
|
||||
"Language-Team: Bulgarian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -2236,81 +2236,81 @@ msgstr "Покажи дневник"
|
||||
msgid "URL Import"
|
||||
msgstr "Импортиране на URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Параметърът updated_at е форматиран неправилно"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Не съществува {self.basename} с идентификатор {pk}"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Не може да се слее със същия обект!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Не съществува {self.basename} с идентификатор {target}"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Не може да се слее с дъщерен обект!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} беше обединен успешно с {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr "Възникна грешка при опит за сливане на {source.name} с {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} беше преместен успешно в основния."
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Възникна грешка при опит за преместване "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Не може да премести обект към себе си!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Не съществува {self.basename} с идентификатор {parent}"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} беше преместен успешно в родител {parent.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} беше премахнат от списъка за пазаруване."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} беше добавен към списъка за пазаруване."
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
@@ -2318,17 +2318,17 @@ msgstr ""
|
||||
"Идентификатор на рецептата, част от която е стъпка. За параметър за "
|
||||
"многократно повторение."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"Идентификатор на рецептата, част от която е стъпка. За параметър за "
|
||||
"многократно повторение."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "Низът на заявката съответства (размито) спрямо името на обекта."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2336,7 +2336,7 @@ msgstr ""
|
||||
"Низът на заявката съвпада (размито) с името на рецептата. В бъдеще също и "
|
||||
"пълнотекстово търсене."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
@@ -2344,69 +2344,69 @@ msgstr ""
|
||||
"Идентификатор на ключовата дума, която рецептата трябва да има. За параметър "
|
||||
"за многократно повторение. Еквивалентно на keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"Идентификатори на ключови думи, повторете за няколко. Връща рецепти с някоя "
|
||||
"от ключовите думи"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Идентификатори на ключови думи, повторете за няколко. Връща рецепти с всички "
|
||||
"ключови думи."
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"Идентификатори на ключови думи, повторете за няколко. Изключва рецепти с "
|
||||
"някоя от ключовите думи."
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Идентификатори на ключови думи, повторете за няколко. Изключва рецепти с "
|
||||
"всички ключови думи."
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"Идентификация на храната, която рецептата трябва да има. За параметър за "
|
||||
"многократно повторение."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"Идентификатори на храни, повторете за няколко. Връща рецепти с някоя от "
|
||||
"храните"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Идентификатори на храни, повторете за няколко. Връща рецептите с всички "
|
||||
"храни."
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"Идентификатори на храни, повторете за няколко. Изключва рецепти с някоя от "
|
||||
"храните."
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Идентификатори на храни, повторете за няколко. Изключва рецепти с всички "
|
||||
"храни."
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "Идентификатор на единицата, която рецептата трябва да има."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
@@ -2414,50 +2414,50 @@ msgstr ""
|
||||
"Оценка на рецептата трябва да има или по-висока. [0 - 5] Отрицателна "
|
||||
"стойност филтрира оценка по-малка от."
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"Идентификатор на книгата, в която трябва да е рецепта. За параметър за "
|
||||
"многократно повторение."
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
"Идентификационен № на книги, повторете за няколко. Връща рецепти с някоя от "
|
||||
"книгите"
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
"Идентификационен № на книги, повторете за няколко. Връща рецептите с всички "
|
||||
"книги."
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
"Идентификационен № на книги, повторете за няколко. Изключва рецептите с "
|
||||
"някоя от книгите."
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
"Идентификационен № на книги, повторете за няколко. Изключва рецептите от "
|
||||
"всички книги."
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr "Ако трябва да се върнат само вътрешни рецепти. [вярно/<b>невярно</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr "Връща резултатите в произволен ред. [вярно/<b>невярно</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Първо връща нови резултати в резултатите от търсенето. [вярно/<b>невярно</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
@@ -2465,7 +2465,7 @@ msgstr ""
|
||||
"Филтрирайте рецепти, приготвени X пъти или повече. Отрицателните стойности "
|
||||
"връщат приготвени по-малко от X пъти"
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2473,7 +2473,7 @@ msgstr ""
|
||||
"Филтрирайте последно приготвените рецепти на или след ГГГГ-ММ-ДД. "
|
||||
"Предварително – филтрира на или преди дата."
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2481,7 +2481,7 @@ msgstr ""
|
||||
"Филтрирайте рецептите, създадени на или след ГГГГ-ММ-ДД. Предварително – "
|
||||
"филтрира на или преди дата."
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2489,7 +2489,7 @@ msgstr ""
|
||||
"Филтрирайте рецептите, актуализирани на или след ГГГГ-ММ-ДД. Предварително – "
|
||||
"филтрира на или преди дата."
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2497,13 +2497,13 @@ msgstr ""
|
||||
"Филтрирането на рецептите последно разглеждани на или след ГГГГ-ММ-ДД. "
|
||||
"Предварително – филтрира на или преди дата."
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Филтрирайте рецепти, които могат да се приготвят с храна в наличност. [вярно/"
|
||||
"<b>невярно</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
@@ -2511,7 +2511,7 @@ msgstr ""
|
||||
"Връща записа в списъка за пазаруване с първичен ключ на идентификатора. "
|
||||
"Разрешени са множество стойности."
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
@@ -2525,17 +2525,17 @@ msgstr ""
|
||||
"и двете, <b>скорошни</b>]<br> - скорошни включва неотметнати елементи и "
|
||||
"наскоро завършени елементи."
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
"Връща записите в списъка за пазаруване, сортирани по реда на категории "
|
||||
"супермаркети."
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Returns the shopping list entry with a primary key of id. Multiple "
|
||||
@@ -2547,45 +2547,45 @@ msgstr ""
|
||||
"Връща записа в списъка за пазаруване с първичен ключ на идентификатора. "
|
||||
"Разрешени са множество стойности."
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Няма нищо за правене."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "Връзката е отказана."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "Лоша URL схема."
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Не бяха намерени полезни данни."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Импортирането не е реализирано за този доставчик"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Тази функция все още не е налична в хостваната версия на tandoor!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Синхронизирането успешно!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Грешка при синхронизирането с хранилището"
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-03-08 23:19+0000\n"
|
||||
"Last-Translator: Enric Bergadà <enric@bergada.cat>\n"
|
||||
"Language-Team: Catalan <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -2123,95 +2123,95 @@ msgstr "Mostra Logs"
|
||||
msgid "URL Import"
|
||||
msgstr "Importació d’URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "El paràmetre updated_at té un format incorrecte"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "No {self.basename} amb id {pk} existeix"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "No es pot fusionar amb el mateix objecte!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "No {self.basename} amb id {target} existeix"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "No es pot combinar amb l'objecte fill!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} s'ha fusionat amb {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr "Error en intentar combinar {source.name} amb {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} s'ha mogut correctament a l'arrel."
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Error a l'intentar moure "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "No es pot moure un objecte cap a si mateix!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "No existeix {self.basename} amb identificador {parent}"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} s'ha mogut correctament al pare {parent.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} eliminat de la llista de la compra."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "Afegit {obj.name} a la llista de la compra."
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr "ID de recepta forma part d'un pas. Per a múltiples repeteix paràmetre."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr "ID de recepta forma part d'un pas. Per a múltiples repeteix paràmetre."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "La cadena de consulta coincideix (difusa) amb el nom de l'objecte."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2219,7 +2219,7 @@ msgstr ""
|
||||
"Cadena de consulta coincideix (difusa) amb el nom de la recepta. En el futur "
|
||||
"també cerca text complet."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
#, fuzzy
|
||||
#| msgid "ID of keyword a recipe should have. For multiple repeat parameter."
|
||||
msgid ""
|
||||
@@ -2229,193 +2229,193 @@ msgstr ""
|
||||
"ID de la paraula clau que hauria de tenir una recepta. Per a múltiples "
|
||||
"repeteix paràmetre."
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID d'aliments que ha de tenir una recepta. Per a múltiples repeteix "
|
||||
"paràmetres."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "ID d'unitat que hauria de tenir una recepta."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID del llibre hauria d'haver-hi en una recepta. Per al paràmetre de "
|
||||
"repetició múltiple."
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Res a fer."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "Connexió Refusada."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "No s'han trobat dades utilitzables."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Importació no implementada en aquest proveïdor"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
"Aquesta funció encara no està disponible a la versió allotjada de tandoor!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Sincronització correcte"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Error de sincronització amb emmagatzematge"
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-01-09 12:07+0000\n"
|
||||
"Last-Translator: Jan Kubošek <kuboja@outlook.cz>\n"
|
||||
"Language-Team: Czech <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
@@ -2114,282 +2114,282 @@ msgstr "Zobrazit nápovědu"
|
||||
msgid "URL Import"
|
||||
msgstr "Import URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
#, fuzzy
|
||||
#| msgid "Parameter filter_list incorrectly formatted"
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Parametr filter_list v nesprávném formátu"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Nelze sloučit se stejným objektem!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
#, fuzzy
|
||||
#| msgid "Cannot merge with the same object!"
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Nelze sloučit se stejným objektem!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "The requested page could not be found."
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Požadovaná stránka nebyla nalezena."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Import není pro tohoto poskytovatele implementován!"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
#, fuzzy
|
||||
@@ -2397,11 +2397,11 @@ msgstr "Import není pro tohoto poskytovatele implementován!"
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Tato funkce není dostupná v demo verzi!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synchronizace proběhla úspěšně!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Chyba synchronizace s úložištěm"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-04-12 11:55+0000\n"
|
||||
"Last-Translator: noxonad <noxonad@proton.me>\n"
|
||||
"Language-Team: Danish <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
@@ -2224,96 +2224,96 @@ msgstr "Vis log"
|
||||
msgid "URL Import"
|
||||
msgstr "URL import"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Parameter updated_at ikke formateret korrekt"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Ingen {self.basename} med ID {pk} eksisterer"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Kan ikke sammenflette med det samme objekt!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Ingen {self.basename} med ID {target} eksisterer"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Kan ikke sammenflette med et objekt som er et barn!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} blev sammenflettet med {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
"Der opstod en fejl under sammenfletningen af {source.name} med {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} blev flyttet til roden."
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Der skete en fejl under flytningen "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Kan ikke flytte et objekt til sig selv!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Ingen {self.basename} med ID {parent} eksisterer"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} blev flyttet til forælder {parent.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} blev fjernet fra indkøbslisten."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} blev tilføjet til indkøbslisten."
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr "ID på den opskrift som et trin er del af. For flere, gentag parameter."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr "ID på den opskrift som et trin er del af. For flere, gentag parameter."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "Søgningen matchede (fuzzy) mod objektets navn."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2321,7 +2321,7 @@ msgstr ""
|
||||
"Søgningen matchede (fuzzy) mod opskriftens navn. I fremtiden også heltekst "
|
||||
"søgning."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
@@ -2329,64 +2329,64 @@ msgstr ""
|
||||
"ID på nøgeord som opskriften skal have. For flere, gentag parameter. "
|
||||
"Sammenligneligt med keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"Nøgleord ID'er, gentag for flere. Returnerer opskrifter med bare et af "
|
||||
"nøgleorderne"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Nøgleord ID'er, gentag for flere. Returnerer opskrifter med alle "
|
||||
"nøgleorderne."
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"Nøgleord ID'er, gentag for flere. Ekskluderer opskrifter med bare et af "
|
||||
"nøgleorderne."
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Nøgleord ID'er, gentag for flere. Ekskluderer opskrifter med alle "
|
||||
"nøgleorderne."
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr "ID på mad en opskrift skal have. For flere, gentag parameter."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"Mad ID'er, gentag for flere. Returnerer mad med bare et af de angivne mad"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Mad ID'er, gentag for flere. Returnerer opskrifter med alt det angivne mad."
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"Mad ID'er, gentag for flere. Eksluderer opskrifter med bare et af det "
|
||||
"angivne mad."
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Mad ID'er, gentag for flere. Eksluderer opskrifter med alt det angivne mad."
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "ID på enhed en opskrift skal have."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
@@ -2394,42 +2394,42 @@ msgstr ""
|
||||
"Bedømmelse en opskrift mindst skal have. [0 - 5] Negative værdier filtrerer "
|
||||
"opskrifter med mindre end det angivne."
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr "ID på bog en opskrift skal være i. For flere, gentag parameter."
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
"Bog ID'er, gentag for flere. Returnerer opskrifter med bare en af bøgerne"
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr "Bog ID'er, gentag for flere. Returnerer opskrifter med alle bøgerne."
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
"Bog ID'er, gentag for flere. Eksluderer opskrifter med bare en af bøgerne."
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr "Bog ID'er, gentag for flere. Ekskluderer opskrifter med alle bøgerne."
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr "Om kun interne opskrifter skal returneres. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr "Returnerer resultaterne i tilfældig rækkefølge. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Returnerer nye resultater først i søgeresultaterne. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
@@ -2437,7 +2437,7 @@ msgstr ""
|
||||
"Filtrer opskrifter tilberedt X gange eller flere. Negative værdier "
|
||||
"returnerer tilberedt mindre end X gange"
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2445,7 +2445,7 @@ msgstr ""
|
||||
"Filtrer opskrifter sidst tilberedt på eller efter d. YYYY-MM-DD. Hvis datoen "
|
||||
"starter med '-', filtrerer den i stedet på eller før dato."
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2453,7 +2453,7 @@ msgstr ""
|
||||
"Filtrer opskrifter oprettet på eller efter d. YYYY-MM-DD. Hvis datoen "
|
||||
"starter med '-', filtrerer den i stedet på eller før dato."
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2461,7 +2461,7 @@ msgstr ""
|
||||
"Filtrer opskrifter opdateret på eller efter d. YYYY-MM-DD. Hvis datoen "
|
||||
"starter med '-', filtrerer den i stedet på eller før dato."
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2469,19 +2469,19 @@ msgstr ""
|
||||
"Filtrer opskrifter sidst åbnet på eller efter d. YYYY-MM-DD. Hvis datoen "
|
||||
"starter med '-', filtrerer den i stedet på eller før dato."
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Filtrer opskrifter der kan laves med tilgængeligt mad. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
"Returnerer indkøbslistepunktet med primær nøgle på ID. Flere værdier tilladt."
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
@@ -2495,17 +2495,17 @@ msgstr ""
|
||||
"false, both, <b>recent</b>]<br> - 'recent' har både ikke afkrydsede artikler "
|
||||
"og nyligt færdiggjorte artikler."
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
"Returnerer indkøbslistepunkterne sorteret efter "
|
||||
"supermarkedskategorirækkefølge."
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Returns the shopping list entry with a primary key of id. Multiple "
|
||||
@@ -2516,46 +2516,46 @@ msgid ""
|
||||
msgstr ""
|
||||
"Returnerer indkøbslistepunktet med primær nøgle på ID. Flere værdier tilladt."
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Ikke noget at gøre."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "Forbindelse nægtet."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "Ugyldigt link."
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Intet brugbart data kunne findes."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Importering er ikke implementeret for denne udbyder"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
"Denne funktion er endnu ikke tilgængelig i den hostede version af Tandoor!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synkronisering var en succes!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Der skete en fejl under synkroniseringen med lageret"
|
||||
|
||||
|
||||
Binary file not shown.
@@ -14,17 +14,17 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2024-05-11 00:33+0000\n"
|
||||
"Last-Translator: Jakob Priesner <jakob.priesner@outlook.de>\n"
|
||||
"Language-Team: German <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
"backend/de/>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-09-27 13:58+0000\n"
|
||||
"Last-Translator: supaeasy <crafty_renewably854@supaeasy.de>\n"
|
||||
"Language-Team: German <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/de/>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.4.2\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -395,7 +395,7 @@ msgstr "Sektion"
|
||||
|
||||
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
|
||||
msgid "Fixes foods with "
|
||||
msgstr ""
|
||||
msgstr "Behebt Lebensmittel mit "
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:14
|
||||
msgid "Rebuilds full text search index on Recipe"
|
||||
@@ -478,7 +478,7 @@ msgstr "Essensplan"
|
||||
#: .\cookbook\models.py:456 .\cookbook\templates\base.html:122
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "Books"
|
||||
msgstr "Bücher"
|
||||
msgstr "Kochbücher"
|
||||
|
||||
#: .\cookbook\models.py:457 .\cookbook\templates\base.html:118
|
||||
#: .\cookbook\views\views.py:460
|
||||
@@ -542,10 +542,8 @@ msgid "Instruction Replace"
|
||||
msgstr "Anleitung ersetzen"
|
||||
|
||||
#: .\cookbook\models.py:1472
|
||||
#, fuzzy
|
||||
#| msgid "New Unit"
|
||||
msgid "Never Unit"
|
||||
msgstr "Neue Einheit"
|
||||
msgstr "Nie Einheit"
|
||||
|
||||
#: .\cookbook\models.py:1473
|
||||
msgid "Transpose Words"
|
||||
@@ -2143,7 +2141,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\system.html:86
|
||||
msgid "Allowed Hosts"
|
||||
msgstr ""
|
||||
msgstr "Erlaubte Hosts"
|
||||
|
||||
#: .\cookbook\templates\system.html:90
|
||||
msgid ""
|
||||
@@ -2153,6 +2151,11 @@ msgid ""
|
||||
"this.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Die erlaubten Hosts sind so konfiguriert, dass sie jeden Host "
|
||||
"erlauben. Das mag in einigen Fällen in Ordnung sein, sollte aber im "
|
||||
"Regelfall vermieden werden. Bitte lies in der Dokumentation dazu nach.\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:97
|
||||
msgid "Database"
|
||||
@@ -2206,101 +2209,101 @@ msgstr "Anzeigen"
|
||||
msgid "URL Import"
|
||||
msgstr "URL-Import"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Der Parameter updated_at ist falsch formatiert"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Kein {self.basename} mit der ID {pk} existiert"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Zusammenführen mit selben Objekt nicht möglich!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Kein {self.basename} mit der ID {target} existiert"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Zusammenführen mit untergeordnetem Objekt nicht möglich!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} wurde erfolgreich mit {target.name} zusammengeführt"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
"Beim zusammenführen von {source.name} mit {target.name} ist ein Fehler "
|
||||
"aufgetreten"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} wurde erfolgreich zur Wurzel verschoben."
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Fehler aufgetreten beim verschieben von "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Ein Element kann nicht in sich selbst verschoben werden!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Kein {self.basename} mit ID {parent} existiert"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
"{child.name} wurde erfolgreich zum Überelement {parent.name} verschoben"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} wurde von der Einkaufsliste entfernt."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} wurde der Einkaufsliste hinzugefügt."
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
"Filtern Sie Essenspläne ab Datum (einschließlich) im Format JJJJ-MM-TT."
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
"Filtern Sie die Essenspläne nach Datum (einschließlich) im Format JJJJ-MM-TT."
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"Filtern Sie Mahlzeitenpläne nach der MealType ID. Für mehrere "
|
||||
"Wiederholungsparameter."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID des Rezeptes zu dem ein Schritt gehört. Kann mehrfach angegeben werden."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "Abfragezeichenfolge, die mit dem Objektnamen übereinstimmt (ungenau)."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2308,7 +2311,7 @@ msgstr ""
|
||||
"Suchbegriff wird mit dem Rezeptnamen abgeglichen. In Zukunft auch "
|
||||
"Volltextsuche."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
@@ -2316,69 +2319,69 @@ msgstr ""
|
||||
"ID des Stichwortes, das ein Rezept haben muss. Kann mehrfach angegeben "
|
||||
"werden. Äquivalent zu keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"Stichwort IDs. Kann mehrfach angegeben werden. Listet Rezepte zu jedem der "
|
||||
"angegebenen Stichwörter"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Stichwort IDs. Kann mehrfach angegeben werden. Listet Rezepte mit allen "
|
||||
"angegebenen Stichwörtern."
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"Stichwort ID. Kann mehrfach angegeben werden. Schließt Rezepte einem der "
|
||||
"angegebenen Stichwörtern aus."
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Stichwort IDs. Kann mehrfach angegeben werden. Schließt Rezepte mit allen "
|
||||
"angegebenen Stichwörtern aus."
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID einer Zutat, zu der Rezepte gelistet werden sollen. Kann mehrfach "
|
||||
"angegeben werden."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"Zutat ID. Kann mehrfach angegeben werden. Listet Rezepte mindestens einer "
|
||||
"der Zutaten"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Zutat ID. Kann mehrfach angegeben werden. Listet Rezepte mit allen "
|
||||
"angegebenen Zutaten."
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"Zutat ID. Kann mehrfach angegeben werden. Schließt Rezepte aus, die eine der "
|
||||
"angegebenen Zutaten enthalten."
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Zutat ID. Kann mehrfach angegeben werden. Schließt Rezepte aus, die alle "
|
||||
"angegebenen Zutaten enthalten."
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "ID der Einheit, die ein Rezept haben sollte."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
@@ -2386,50 +2389,50 @@ msgstr ""
|
||||
"Mindestbewertung eines Rezeptes (0-5). Negative Werte filtern nach "
|
||||
"Maximalbewertung."
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr "Buch ID, in dem das Rezept ist. Kann mehrfach angegeben werden."
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
"Buch ID. Kann mehrfach angegeben werden. Listet alle Rezepte aus den "
|
||||
"angegebenen Büchern"
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
"Buch ID. Kann mehrfach angegeben werden. Listet die Rezepte, die in allen "
|
||||
"Büchern enthalten sind."
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
"Buch IDs. Kann mehrfach angegeben werden. Schließt Rezepte aus den "
|
||||
"angegebenen Büchern aus."
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
"Buch IDs. Kann mehrfach angegeben werden. Schließt Rezepte aus, die in allen "
|
||||
"angegebenen Büchern enthalten sind."
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr "Nur interne Rezepte sollen gelistet werden. [ja/<b>nein</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Die Suchergebnisse sollen in zufälliger Reihenfolge gelistet werden. [ja/"
|
||||
"<b>nein</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Die neuesten Suchergebnisse sollen zuerst angezeigt werden. [ja/<b>nein</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
@@ -2437,7 +2440,7 @@ msgstr ""
|
||||
"Rezepte listen, die mindestens x-mal gekocht wurden. Eine negative Zahl "
|
||||
"listet Rezepte, die weniger als x-mal gekocht wurden"
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2446,7 +2449,7 @@ msgstr ""
|
||||
"wurden. Mit vorangestelltem - , werden Rezepte am oder vor dem Datum "
|
||||
"gelistet."
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2454,7 +2457,7 @@ msgstr ""
|
||||
"Rezepte listen, die am angegebenen Datum oder später erstellt wurden. Wenn - "
|
||||
"vorangestellt wird, wird am oder vor dem Datum gelistet."
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2462,7 +2465,7 @@ msgstr ""
|
||||
"Rezepte listen, die am angegebenen Datum oder später aktualisiert wurden. "
|
||||
"Wenn - vorangestellt wird, wird am oder vor dem Datum gelistet."
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2470,13 +2473,13 @@ msgstr ""
|
||||
"Rezepte listen, die am angegebenen Datum oder später zuletzt angesehen "
|
||||
"wurden. Wenn - vorangestellt wird, wird am oder vor dem Datum gelistet."
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Rezepte listen, die mit vorhandenen Zutaten gekocht werden können. [ja/"
|
||||
"<b>nein</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
@@ -2484,7 +2487,7 @@ msgstr ""
|
||||
"Zeigt denjenigen Eintrag auf der Einkaufliste mit der angegebenen ID. Kann "
|
||||
"mehrfach angegeben werden."
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
@@ -2494,66 +2497,62 @@ msgstr ""
|
||||
"<b>kürzlich</b>]<br> - kürzlich enthält nicht abgehakte "
|
||||
"Einträge und kürzlich abgeschlossene Einträge."
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
"Listet die Einträge der Einkaufsliste sortiert nach Supermarktkategorie."
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr "Filter für Einträge mit dem angegebenen Rezept"
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Returns the shopping list entry with a primary key of id. Multiple "
|
||||
#| "values allowed."
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
"Zeigt denjenigen Eintrag auf der Einkaufliste mit der angegebenen ID. Kann "
|
||||
"mehrfach angegeben werden."
|
||||
"Zeigt Automationen, die dem Automationstyp entsprechen. Kann mehrfach "
|
||||
"angegeben werden."
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Nichts zu tun."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr "Ungültige URL"
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "Verbindung fehlgeschlagen."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "Ungültiges URL Schema."
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Es konnten keine passenden Daten gefunden werden."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr "Datei überschreitet das Speicherplatzlimit"
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Importieren ist für diesen Anbieter noch nicht implementiert"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Diese Funktion ist in dieser Version von Tandoor noch nicht verfügbar!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synchronisation erfolgreich!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Fehler beim Synchronisieren"
|
||||
|
||||
@@ -2582,10 +2581,8 @@ msgstr ""
|
||||
"Monitor verwendet wird."
|
||||
|
||||
#: .\cookbook\views\delete.py:135
|
||||
#, fuzzy
|
||||
#| msgid "Storage Backend"
|
||||
msgid "Connectors Config Backend"
|
||||
msgstr "Speicherquelle"
|
||||
msgstr "Backendkonfiguration für Konnektoren"
|
||||
|
||||
#: .\cookbook\views\delete.py:157
|
||||
msgid "Invite Link"
|
||||
@@ -2644,10 +2641,8 @@ msgid "Shopping List"
|
||||
msgstr "Einkaufsliste"
|
||||
|
||||
#: .\cookbook\views\lists.py:77 .\cookbook\views\new.py:98
|
||||
#, fuzzy
|
||||
#| msgid "Storage Backend"
|
||||
msgid "Connector Config Backend"
|
||||
msgstr "Speicherquelle"
|
||||
msgstr "Backendkonfiguration für Konnektoren"
|
||||
|
||||
#: .\cookbook\views\lists.py:91
|
||||
msgid "Invite Links"
|
||||
@@ -2743,7 +2738,7 @@ msgstr "Sie verwenden PostgreSQL %(v1)s. PostgreSQL %(v2)s wird empfohlen"
|
||||
|
||||
#: .\cookbook\views\views.py:313
|
||||
msgid "Unable to determine PostgreSQL version."
|
||||
msgstr ""
|
||||
msgstr "PostgreSQL version konnte nicht erkannt werden."
|
||||
|
||||
#: .\cookbook\views\views.py:317
|
||||
msgid ""
|
||||
@@ -2755,18 +2750,14 @@ msgstr ""
|
||||
"PostgreSQL-Datenbanken funktionieren."
|
||||
|
||||
#: .\cookbook\views\views.py:360
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The setup page can only be used to create the first user! If you have "
|
||||
#| "forgotten your superuser credentials please consult the django "
|
||||
#| "documentation on how to reset passwords."
|
||||
msgid ""
|
||||
"The setup page can only be used to create the first "
|
||||
"user! If you have forgotten your superuser credentials "
|
||||
"please consult the django documentation on how to reset passwords."
|
||||
msgstr ""
|
||||
"Die Setup-Seite kann nur für den ersten Nutzer verwendet werden. Zum "
|
||||
"Zurücksetzen von Passwörtern bitte der Django-Dokumentation folgen."
|
||||
"Die Setup-Seite kann nur für den ersten Nutzer verwendet "
|
||||
"werden. Falls du die Superuser Logindaten vergessen "
|
||||
"hast, folge bitte der Django-Dokumentation um Passwörter zurückzusetzen."
|
||||
|
||||
#: .\cookbook\views\views.py:369
|
||||
msgid "Passwords dont match!"
|
||||
|
||||
@@ -7,17 +7,17 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2023-08-21 09:19+0000\n"
|
||||
"Last-Translator: Theodoros Grammenos <teogramm@outlook.com>\n"
|
||||
"Language-Team: Greek <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
"backend/el/>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-09-23 21:58+0000\n"
|
||||
"Last-Translator: Emmker <emmker@gmail.com>\n"
|
||||
"Language-Team: Greek <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/el/>\n"
|
||||
"Language: el\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -33,7 +33,7 @@ msgstr "Όνομα"
|
||||
|
||||
#: .\cookbook\forms.py:62 .\cookbook\forms.py:246 .\cookbook\views\lists.py:103
|
||||
msgid "Keywords"
|
||||
msgstr "Λέξεις κλειδιά"
|
||||
msgstr "Λέξεις Κλειδιά"
|
||||
|
||||
#: .\cookbook\forms.py:62
|
||||
msgid "Preparation time in minutes"
|
||||
@@ -98,7 +98,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\forms.py:205
|
||||
msgid "http://homeassistant.local:8123/api for example"
|
||||
msgstr ""
|
||||
msgstr "http://homeassistant.local:8123/api για παράδειγμα"
|
||||
|
||||
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
|
||||
msgid "Storage"
|
||||
@@ -2030,286 +2030,286 @@ msgstr "Προβολή αρχείων καταγραφής"
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -1934,286 +1934,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-03-27 19:02+0000\n"
|
||||
"Last-Translator: Axel Breiterman <axelbreiterman@gmail.com>\n"
|
||||
"Language-Team: Spanish <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -2153,282 +2153,282 @@ msgstr "Mostrar Enlaces"
|
||||
msgid "URL Import"
|
||||
msgstr "Importar URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
#, fuzzy
|
||||
#| msgid "Parameter filter_list incorrectly formatted"
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Parámetro filter_list formateado incorrectamente"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "¡No se puede unir con el mismo objeto!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
#, fuzzy
|
||||
#| msgid "Cannot merge with the same object!"
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "¡No se puede unir con el mismo objeto!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "The requested page could not be found."
|
||||
msgid "No usable data could be found."
|
||||
msgstr "La página solicitada no pudo ser encontrada."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "La importación no está implementada para este proveedor"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
#, fuzzy
|
||||
@@ -2436,11 +2436,11 @@ msgstr "La importación no está implementada para este proveedor"
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "¡Esta funcionalidad no está disponible en la versión demo!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "¡Sincronización exitosa!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Error de sincronización con el almacenamiento"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-03-10 06:12+0000\n"
|
||||
"Last-Translator: Kn <kn@users.noreply.translate.tandoor.dev>\n"
|
||||
"Language-Team: Finnish <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -1939,286 +1939,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-05-28 00:57+0000\n"
|
||||
"Last-Translator: tarek EL SOL <tarek.elsol@gmail.com>\n"
|
||||
"Language-Team: French <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
@@ -2258,83 +2258,83 @@ msgstr "Afficher le journal"
|
||||
msgid "URL Import"
|
||||
msgstr "Import URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Le paramètre « update_at » n'est pas correctement formaté"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Il n’existe aucun(e) {self.basename} avec l’identifiant {pk}"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Impossible de fusionner un objet avec lui-même !"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Il n’existe aucun(e) {self.basename} avec l’id {target}"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Impossible de fusionner avec l’objet enfant !"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} a été fusionné avec succès avec {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
"Une erreur est survenue lors de la tentative de fusion de {source.name} avec "
|
||||
"{target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} a été déplacé avec succès vers la racine."
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Une erreur est survenue en essayant de déplacer "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Impossible de déplacer un objet vers lui-même !"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Il n’existe aucun(e) {self.basename} avec l’id {parent}"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} a été déplacé avec succès vers le parent {parent.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} a été supprimé(e) de la liste de courses."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} a été ajouté(e) à la liste de courses."
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
@@ -2342,18 +2342,18 @@ msgstr ""
|
||||
"Identifiant de la recette dont fait partie une étape. Pour plusieurs "
|
||||
"paramètres de répétition."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"Identifiant de la recette dont fait partie une étape. Pour plusieurs "
|
||||
"paramètres de répétition."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
"Correspondance (floue) entre la chaîne de requête et le nom de l'objet."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2361,7 +2361,7 @@ msgstr ""
|
||||
"La chaîne d'interrogation correspond (de manière floue) au nom de la "
|
||||
"recette. À l'avenir, la recherche en texte intégral sera également possible."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
@@ -2369,69 +2369,69 @@ msgstr ""
|
||||
"ID du mot-clé qu'une recette doit avoir. Pour les paramètres à répétition "
|
||||
"multiple. Equivalent à keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"ID des mots-clés, répéter pour plusieurs. Retourner les recettes avec "
|
||||
"n'importe quel mot-clé"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"ID des mots-clés, répéter pour plusieurs. Retourner les recettes contenant "
|
||||
"tous les mots-clés."
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"ID des mots-clés, répéter pour plusieurs. Exclure les recettes contenant "
|
||||
"l'un des mots-clés."
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"ID des mots-clés, répéter pour plusieurs. Exclure les recettes contenant "
|
||||
"l'un des mots-clés."
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID de l'aliment qu'une recette doit contenir. Pour les paramètres de "
|
||||
"répétition multiples."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"ID des aliments, répéter pour plusieurs. Retourner les recettes contenant "
|
||||
"l'un des aliments"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"ID des aliments, répéter pour plusieurs. Retourner les recettes avec tous "
|
||||
"les aliments."
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"ID des aliments, répéter pour plusieurs. Exclure les recettes contenant l'un "
|
||||
"des aliments."
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"ID des aliments, répéter pour plusieurs. Exclure les recettes contenant tous "
|
||||
"les aliments."
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "ID de l'unité qu'une recette doit avoir."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
@@ -2439,128 +2439,128 @@ msgstr ""
|
||||
"Note qu'une recette devrait avoir ou être supérieure. [0 - 5] Une valeur "
|
||||
"négative filtre une note inférieure à."
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Rien à faire."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr "Url non valide"
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "Connexion refusée."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "Mauvais schéma d’URL."
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Aucune information utilisable n'a été trouvée."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "L’importation n’est pas implémentée pour ce fournisseur"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
@@ -2568,11 +2568,11 @@ msgstr ""
|
||||
"Cette fonctionnalité n’est pas encore disponible dans la version hébergée de "
|
||||
"Tandoor !"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synchronisation réussie !"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Erreur lors de la synchronisation avec le stockage"
|
||||
|
||||
|
||||
Binary file not shown.
@@ -7,28 +7,28 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2023-11-15 08:20+0000\n"
|
||||
"Last-Translator: avi meyer <avmeyer@gmail.com>\n"
|
||||
"Language-Team: Hebrew <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
"backend/he/>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-09-08 12:58+0000\n"
|
||||
"Last-Translator: Tomer Alcavi <alcavi1991@gmail.com>\n"
|
||||
"Language-Team: Hebrew <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/he/>\n"
|
||||
"Language: he\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
|
||||
"n % 10 == 0) ? 2 : 3));\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
"Both fields are optional. If none are given the username will be displayed "
|
||||
"instead"
|
||||
msgstr ""
|
||||
msgstr "שני השדות אופציונלים. אם שני השדות ריקים, שם המשתמש יוצג במקום."
|
||||
|
||||
#: .\cookbook\forms.py:62 .\cookbook\forms.py:246
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
msgstr "שם"
|
||||
|
||||
#: .\cookbook\forms.py:62 .\cookbook\forms.py:246 .\cookbook\views\lists.py:103
|
||||
msgid "Keywords"
|
||||
@@ -36,23 +36,23 @@ msgstr "מילות מפתח"
|
||||
|
||||
#: .\cookbook\forms.py:62
|
||||
msgid "Preparation time in minutes"
|
||||
msgstr ""
|
||||
msgstr "זמן הכנה בדקות"
|
||||
|
||||
#: .\cookbook\forms.py:62
|
||||
msgid "Waiting time (cooking/baking) in minutes"
|
||||
msgstr ""
|
||||
msgstr "זמן המתנה (בישול/אפייה) בדקות"
|
||||
|
||||
#: .\cookbook\forms.py:63 .\cookbook\forms.py:222 .\cookbook\forms.py:246
|
||||
msgid "Path"
|
||||
msgstr ""
|
||||
msgstr "נתיב"
|
||||
|
||||
#: .\cookbook\forms.py:63
|
||||
msgid "Storage UID"
|
||||
msgstr ""
|
||||
msgstr "אחסון UID"
|
||||
|
||||
#: .\cookbook\forms.py:93
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
msgstr "ברירת מחדל"
|
||||
|
||||
#: .\cookbook\forms.py:121
|
||||
msgid ""
|
||||
@@ -62,21 +62,23 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\forms.py:143
|
||||
msgid "Add your comment: "
|
||||
msgstr ""
|
||||
msgstr "הוסף את ההערה שלך::- "
|
||||
|
||||
#: .\cookbook\forms.py:151
|
||||
msgid "Leave empty for dropbox and enter app password for nextcloud."
|
||||
msgstr ""
|
||||
msgstr "השאר ריק עבור Dropbox והכנס סיסמא עבור NextCloud."
|
||||
|
||||
#: .\cookbook\forms.py:154
|
||||
msgid "Leave empty for nextcloud and enter api token for dropbox."
|
||||
msgstr ""
|
||||
msgstr "השאר ריק עבור NextCloud והכנס טוקן API עבור Dropbox."
|
||||
|
||||
#: .\cookbook\forms.py:160
|
||||
msgid ""
|
||||
"Leave empty for dropbox and enter only base url for nextcloud (<code>/remote."
|
||||
"php/webdav/</code> is added automatically)"
|
||||
msgstr ""
|
||||
"השאר ריק עבור dropbox וכנס רק URL בסיסי עבור nextcloud (<code>/remote.php/"
|
||||
"webdav/</code> נוסף אוטומטי)"
|
||||
|
||||
#: .\cookbook\forms.py:188
|
||||
msgid ""
|
||||
@@ -86,49 +88,49 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\forms.py:193
|
||||
msgid "Something like http://homeassistant.local:8123/api"
|
||||
msgstr ""
|
||||
msgstr "משהו דומה לhttp://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:205
|
||||
msgid "http://homeassistant.local:8123/api for example"
|
||||
msgstr ""
|
||||
msgstr "לדוגמא http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
|
||||
msgid "Storage"
|
||||
msgstr ""
|
||||
msgstr "אחסון"
|
||||
|
||||
#: .\cookbook\forms.py:222
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
msgstr "פעיל"
|
||||
|
||||
#: .\cookbook\forms.py:226
|
||||
msgid "Search String"
|
||||
msgstr ""
|
||||
msgstr "מחרוזת חיפוש"
|
||||
|
||||
#: .\cookbook\forms.py:246
|
||||
msgid "File ID"
|
||||
msgstr ""
|
||||
msgstr "ID של הקובץ"
|
||||
|
||||
#: .\cookbook\forms.py:262
|
||||
msgid "Maximum number of users for this space reached."
|
||||
msgstr ""
|
||||
msgstr "המספר המקסימלי של משתמשים עבור מרחב זה נוצל."
|
||||
|
||||
#: .\cookbook\forms.py:268
|
||||
msgid "Email address already taken!"
|
||||
msgstr ""
|
||||
msgstr "כתובת האימייל כבר בשימוש!"
|
||||
|
||||
#: .\cookbook\forms.py:275
|
||||
msgid ""
|
||||
"An email address is not required but if present the invite link will be sent "
|
||||
"to the user."
|
||||
msgstr ""
|
||||
msgstr "כתובת אימייל לא נדרשת אבל אם קיימת, קישור השיתוף ישלח למשתמש."
|
||||
|
||||
#: .\cookbook\forms.py:287
|
||||
msgid "Name already taken."
|
||||
msgstr ""
|
||||
msgstr "שם כבר בשימוש."
|
||||
|
||||
#: .\cookbook\forms.py:298
|
||||
msgid "Accept Terms and Privacy"
|
||||
msgstr ""
|
||||
msgstr "הסכם לתנאים ולפרטיות"
|
||||
|
||||
#: .\cookbook\forms.py:332
|
||||
msgid ""
|
||||
@@ -147,6 +149,7 @@ msgid ""
|
||||
"Use fuzzy matching on units, keywords and ingredients when editing and "
|
||||
"importing recipes."
|
||||
msgstr ""
|
||||
"השתמש בהתאמה גמישה ליחידות, מילות מפתח ורכיבים בעת עריכה וייבוא מתכונים."
|
||||
|
||||
#: .\cookbook\forms.py:342
|
||||
msgid ""
|
||||
@@ -235,7 +238,7 @@ msgstr ""
|
||||
#: .\cookbook\helper\permission_helper.py:237
|
||||
#: .\cookbook\helper\permission_helper.py:252
|
||||
msgid "You cannot interact with this object as it is not owned by you!"
|
||||
msgstr ""
|
||||
msgstr "אינך יכול/ה לפעול על אובייקט זה כיוון שהוא לא בבעלותך!"
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:402
|
||||
msgid "You have reached the maximum number of recipes for your space."
|
||||
@@ -439,7 +442,7 @@ msgstr ""
|
||||
#: .\cookbook\models.py:457 .\cookbook\templates\base.html:118
|
||||
#: .\cookbook\views\views.py:460
|
||||
msgid "Shopping"
|
||||
msgstr ""
|
||||
msgstr "קניות"
|
||||
|
||||
#: .\cookbook\models.py:752
|
||||
msgid " is part of a recipe step and cannot be deleted"
|
||||
@@ -524,7 +527,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\models.py:1504
|
||||
msgid "Food"
|
||||
msgstr ""
|
||||
msgstr "אוכל"
|
||||
|
||||
#: .\cookbook\models.py:1505 .\cookbook\templates\base.html:149
|
||||
msgid "Keyword"
|
||||
@@ -544,7 +547,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\serializer.py:1270
|
||||
msgid "Hello"
|
||||
msgstr ""
|
||||
msgstr "שלום"
|
||||
|
||||
#: .\cookbook\serializer.py:1270
|
||||
msgid "You have been invited by "
|
||||
@@ -565,12 +568,12 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\serializer.py:1278
|
||||
msgid "The invitation is valid until "
|
||||
msgstr ""
|
||||
msgstr "ההזמנה תקפה עד "
|
||||
|
||||
#: .\cookbook\serializer.py:1280
|
||||
msgid ""
|
||||
"Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub "
|
||||
msgstr ""
|
||||
msgstr "Tandoor Recipes הוא מנהל מתכונים בקוד פתוח. ניתן למצוא אותנו ב-GitHub. "
|
||||
|
||||
#: .\cookbook\serializer.py:1283
|
||||
msgid "Tandoor Recipes Invite"
|
||||
@@ -608,11 +611,11 @@ msgstr ""
|
||||
#: .\cookbook\templates\generic\delete_template.html:15
|
||||
#: .\cookbook\templates\generic\edit_template.html:28
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
msgstr "מחיקה"
|
||||
|
||||
#: .\cookbook\templates\404.html:5
|
||||
msgid "404 Error"
|
||||
msgstr ""
|
||||
msgstr "שגיאה 404"
|
||||
|
||||
#: .\cookbook\templates\404.html:18
|
||||
msgid "The page you are looking for could not be found."
|
||||
@@ -624,12 +627,12 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\404.html:35
|
||||
msgid "Report a Bug"
|
||||
msgstr ""
|
||||
msgstr "דווח על באג"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:6
|
||||
#: .\cookbook\templates\account\email.html:17
|
||||
msgid "E-mail Addresses"
|
||||
msgstr ""
|
||||
msgstr "כתובות אימייל"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:12
|
||||
#: .\cookbook\templates\account\password_change.html:11
|
||||
@@ -639,11 +642,11 @@ msgstr ""
|
||||
#: .\cookbook\templates\socialaccount\connections.html:10
|
||||
#: .\cookbook\templates\user_settings.html:8
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
msgstr "הגדרות"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:13
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
msgstr "מייל"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:19
|
||||
msgid "The following e-mail addresses are associated with your account:"
|
||||
@@ -651,33 +654,33 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\account\email.html:36
|
||||
msgid "Verified"
|
||||
msgstr ""
|
||||
msgstr "מאומת"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:38
|
||||
msgid "Unverified"
|
||||
msgstr ""
|
||||
msgstr "לא מאומת"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:40
|
||||
msgid "Primary"
|
||||
msgstr ""
|
||||
msgstr "ראשי"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:47
|
||||
msgid "Make Primary"
|
||||
msgstr ""
|
||||
msgstr "הגדר כראשי"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:49
|
||||
msgid "Re-send Verification"
|
||||
msgstr ""
|
||||
msgstr "שלח אימות מחדש"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:50
|
||||
#: .\cookbook\templates\generic\delete_template.html:57
|
||||
#: .\cookbook\templates\socialaccount\connections.html:44
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
msgstr "הסרה"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:58
|
||||
msgid "Warning:"
|
||||
msgstr ""
|
||||
msgstr "אזהרה:"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:58
|
||||
msgid ""
|
||||
@@ -687,11 +690,11 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\account\email.html:64
|
||||
msgid "Add E-mail Address"
|
||||
msgstr ""
|
||||
msgstr "הוספת כתובת מייל"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:69
|
||||
msgid "Add E-mail"
|
||||
msgstr ""
|
||||
msgstr "הוספת מייל"
|
||||
|
||||
#: .\cookbook\templates\account\email.html:79
|
||||
msgid "Do you really want to remove the selected e-mail address?"
|
||||
@@ -700,7 +703,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\email_confirm.html:6
|
||||
#: .\cookbook\templates\account\email_confirm.html:10
|
||||
msgid "Confirm E-mail Address"
|
||||
msgstr ""
|
||||
msgstr "אשר כתובת מייל"
|
||||
|
||||
#: .\cookbook\templates\account\email_confirm.html:16
|
||||
#, python-format
|
||||
@@ -714,7 +717,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\email_confirm.html:22
|
||||
#: .\cookbook\templates\generic\delete_template.html:72
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
msgstr "אשר"
|
||||
|
||||
#: .\cookbook\templates\account\email_confirm.html:29
|
||||
#, python-format
|
||||
@@ -727,7 +730,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\login.html:8 .\cookbook\templates\base.html:388
|
||||
#: .\cookbook\templates\openid\login.html:8
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
msgstr "התחבר"
|
||||
|
||||
#: .\cookbook\templates\account\login.html:15
|
||||
#: .\cookbook\templates\account\login.html:31
|
||||
@@ -739,7 +742,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\openid\login.html:26
|
||||
#: .\cookbook\templates\socialaccount\authentication_error.html:15
|
||||
msgid "Sign In"
|
||||
msgstr ""
|
||||
msgstr "התחבר"
|
||||
|
||||
#: .\cookbook\templates\account\login.html:34
|
||||
#: .\cookbook\templates\account\password_reset.html:41
|
||||
@@ -747,7 +750,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\socialaccount\signup.html:8
|
||||
#: .\cookbook\templates\socialaccount\signup.html:57
|
||||
msgid "Sign Up"
|
||||
msgstr ""
|
||||
msgstr "הירשם"
|
||||
|
||||
#: .\cookbook\templates\account\login.html:38
|
||||
msgid "Lost your password?"
|
||||
@@ -756,7 +759,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\login.html:39
|
||||
#: .\cookbook\templates\account\password_reset.html:29
|
||||
msgid "Reset My Password"
|
||||
msgstr ""
|
||||
msgstr "איפוס סיסמא"
|
||||
|
||||
#: .\cookbook\templates\account\login.html:50
|
||||
msgid "Social Login"
|
||||
@@ -770,7 +773,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\logout.html:9
|
||||
#: .\cookbook\templates\account\logout.html:18
|
||||
msgid "Sign Out"
|
||||
msgstr ""
|
||||
msgstr "התנתק"
|
||||
|
||||
#: .\cookbook\templates\account\logout.html:11
|
||||
msgid "Are you sure you want to sign out?"
|
||||
@@ -789,7 +792,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\password_change.html:12
|
||||
#: .\cookbook\templates\account\password_set.html:12
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
msgstr "סיסמא"
|
||||
|
||||
#: .\cookbook\templates\account\password_change.html:22
|
||||
msgid "Forgot Password?"
|
||||
@@ -844,52 +847,52 @@ msgstr ""
|
||||
#: .\cookbook\templates\account\password_set.html:16
|
||||
#: .\cookbook\templates\account\password_set.html:21
|
||||
msgid "Set Password"
|
||||
msgstr ""
|
||||
msgstr "קבע סיסמא"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:6
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
msgstr "הירשם"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:12
|
||||
msgid "Create an Account"
|
||||
msgstr ""
|
||||
msgstr "צור משתמש"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:42
|
||||
#: .\cookbook\templates\socialaccount\signup.html:33
|
||||
msgid "I accept the follwoing"
|
||||
msgstr ""
|
||||
msgstr "אני מקבל את התנאים הבאים"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:45
|
||||
#: .\cookbook\templates\socialaccount\signup.html:36
|
||||
msgid "Terms and Conditions"
|
||||
msgstr ""
|
||||
msgstr "תנאים והגבלות"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:48
|
||||
#: .\cookbook\templates\socialaccount\signup.html:39
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
msgstr "ו"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:52
|
||||
#: .\cookbook\templates\socialaccount\signup.html:43
|
||||
msgid "Privacy Policy"
|
||||
msgstr ""
|
||||
msgstr "מדיניות פרטיות"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:65
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
msgstr "צור משתמש"
|
||||
|
||||
#: .\cookbook\templates\account\signup.html:69
|
||||
msgid "Already have an account?"
|
||||
msgstr ""
|
||||
msgstr "יש לך חשבון?"
|
||||
|
||||
#: .\cookbook\templates\account\signup_closed.html:5
|
||||
#: .\cookbook\templates\account\signup_closed.html:11
|
||||
msgid "Sign Up Closed"
|
||||
msgstr ""
|
||||
msgstr "ההרשמה סגורה"
|
||||
|
||||
#: .\cookbook\templates\account\signup_closed.html:13
|
||||
msgid "We are sorry, but the sign up is currently closed."
|
||||
msgstr ""
|
||||
msgstr "אנו מצטערים, אך ההרשמה כרגע סגורה."
|
||||
|
||||
#: .\cookbook\templates\api_info.html:5 .\cookbook\templates\base.html:378
|
||||
#: .\cookbook\templates\rest_framework\api.html:11
|
||||
@@ -898,11 +901,11 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:110 .\cookbook\templates\index.html:87
|
||||
msgid "Recipes"
|
||||
msgstr ""
|
||||
msgstr "מתכונים"
|
||||
|
||||
#: .\cookbook\templates\base.html:161 .\cookbook\views\lists.py:120
|
||||
msgid "Foods"
|
||||
msgstr ""
|
||||
msgstr "מאכלים"
|
||||
|
||||
#: .\cookbook\templates\base.html:173 .\cookbook\views\lists.py:137
|
||||
msgid "Units"
|
||||
@@ -918,11 +921,11 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:211 .\cookbook\views\lists.py:186
|
||||
msgid "Automations"
|
||||
msgstr ""
|
||||
msgstr "אוטומציות"
|
||||
|
||||
#: .\cookbook\templates\base.html:225 .\cookbook\views\lists.py:222
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
msgstr "קבצים"
|
||||
|
||||
#: .\cookbook\templates\base.html:237
|
||||
msgid "Batch Edit"
|
||||
@@ -943,7 +946,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\export_response.html:7
|
||||
#: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20
|
||||
msgid "Export"
|
||||
msgstr ""
|
||||
msgstr "יצא"
|
||||
|
||||
#: .\cookbook\templates\base.html:287
|
||||
msgid "Properties"
|
||||
@@ -968,7 +971,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:336 .\cookbook\templates\space_manage.html:15
|
||||
msgid "Space Settings"
|
||||
msgstr ""
|
||||
msgstr "הגדרות מרחב"
|
||||
|
||||
#: .\cookbook\templates\base.html:340
|
||||
msgid "External Connectors"
|
||||
@@ -976,21 +979,21 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:345 .\cookbook\templates\system.html:13
|
||||
msgid "System"
|
||||
msgstr ""
|
||||
msgstr "מערכת"
|
||||
|
||||
#: .\cookbook\templates\base.html:347
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
msgstr "מנהל"
|
||||
|
||||
#: .\cookbook\templates\base.html:351
|
||||
#: .\cookbook\templates\space_overview.html:25
|
||||
msgid "Your Spaces"
|
||||
msgstr ""
|
||||
msgstr "המרחבים שלך"
|
||||
|
||||
#: .\cookbook\templates\base.html:362
|
||||
#: .\cookbook\templates\space_overview.html:6
|
||||
msgid "Overview"
|
||||
msgstr ""
|
||||
msgstr "סקירה כללית"
|
||||
|
||||
#: .\cookbook\templates\base.html:372
|
||||
msgid "Markdown Guide"
|
||||
@@ -1010,7 +1013,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:383
|
||||
msgid "Log out"
|
||||
msgstr ""
|
||||
msgstr "התנתק"
|
||||
|
||||
#: .\cookbook\templates\base.html:406
|
||||
msgid "You are using the free version of Tandor"
|
||||
@@ -1068,7 +1071,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\batch\monitor.html:29
|
||||
msgid "Show Recipes"
|
||||
msgstr ""
|
||||
msgstr "הראה מתכונים"
|
||||
|
||||
#: .\cookbook\templates\batch\monitor.html:30
|
||||
msgid "Show Log"
|
||||
@@ -1109,7 +1112,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\generic\delete_template.html:22
|
||||
msgid "This cannot be undone!"
|
||||
msgstr ""
|
||||
msgstr "לא ניתן לבטל פעולה זו!"
|
||||
|
||||
#: .\cookbook\templates\generic\delete_template.html:27
|
||||
msgid "Protected"
|
||||
@@ -1126,7 +1129,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\generic\edit_template.html:6
|
||||
#: .\cookbook\templates\generic\edit_template.html:14
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "ערוך"
|
||||
|
||||
#: .\cookbook\templates\generic\edit_template.html:32
|
||||
msgid "View"
|
||||
@@ -1160,7 +1163,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\generic\table_template.html:98
|
||||
msgid "next"
|
||||
msgstr ""
|
||||
msgstr "הבא"
|
||||
|
||||
#: .\cookbook\templates\history.html:20
|
||||
msgid "View Log"
|
||||
@@ -1173,7 +1176,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\import_response.html:7 .\cookbook\views\delete.py:90
|
||||
#: .\cookbook\views\edit.py:174
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
msgstr "יבא"
|
||||
|
||||
#: .\cookbook\templates\include\storage_backend_warning.html:4
|
||||
msgid "Security Warning"
|
||||
@@ -1354,7 +1357,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\no_groups_info.html:5
|
||||
#: .\cookbook\templates\no_groups_info.html:12
|
||||
msgid "No Permissions"
|
||||
msgstr ""
|
||||
msgstr "אין הרשאות"
|
||||
|
||||
#: .\cookbook\templates\no_groups_info.html:17
|
||||
msgid "You do not have any groups and therefor cannot use this application."
|
||||
@@ -1363,12 +1366,12 @@ msgstr ""
|
||||
#: .\cookbook\templates\no_groups_info.html:18
|
||||
#: .\cookbook\templates\no_perm_info.html:15
|
||||
msgid "Please contact your administrator."
|
||||
msgstr ""
|
||||
msgstr "אנא פנה למנהל המערכת."
|
||||
|
||||
#: .\cookbook\templates\no_perm_info.html:5
|
||||
#: .\cookbook\templates\no_perm_info.html:12
|
||||
msgid "No Permission"
|
||||
msgstr ""
|
||||
msgstr "אין הרשאות"
|
||||
|
||||
#: .\cookbook\templates\no_perm_info.html:15
|
||||
msgid ""
|
||||
@@ -1378,11 +1381,11 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\offline.html:6
|
||||
msgid "Offline"
|
||||
msgstr ""
|
||||
msgstr "לא מקוון"
|
||||
|
||||
#: .\cookbook\templates\offline.html:19
|
||||
msgid "You are currently offline!"
|
||||
msgstr ""
|
||||
msgstr "אתה כרגע במצב לא מקוון!"
|
||||
|
||||
#: .\cookbook\templates\offline.html:20
|
||||
msgid ""
|
||||
@@ -1393,7 +1396,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\openid\login.html:27
|
||||
#: .\cookbook\templates\socialaccount\authentication_error.html:27
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
msgstr "אחורה"
|
||||
|
||||
#: .\cookbook\templates\property_editor.html:7
|
||||
msgid "Property Editor"
|
||||
@@ -1420,7 +1423,7 @@ msgstr ""
|
||||
#: .\cookbook\templates\search_info.html:9
|
||||
#: .\cookbook\templates\settings.html:24
|
||||
msgid "Search Settings"
|
||||
msgstr ""
|
||||
msgstr "הגדרות חיפוש"
|
||||
|
||||
#: .\cookbook\templates\search_info.html:10
|
||||
msgid ""
|
||||
@@ -1436,7 +1439,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\search_info.html:19
|
||||
msgid "Search Methods"
|
||||
msgstr ""
|
||||
msgstr "שיטות חיפוש"
|
||||
|
||||
#: .\cookbook\templates\search_info.html:23
|
||||
msgid ""
|
||||
@@ -1519,7 +1522,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\search_info.html:69
|
||||
msgid "Search Fields"
|
||||
msgstr ""
|
||||
msgstr "שדות חיפוש"
|
||||
|
||||
#: .\cookbook\templates\search_info.html:73
|
||||
msgid ""
|
||||
@@ -1938,286 +1941,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
2503
cookbook/locale/hr/LC_MESSAGES/django.po
Normal file
2503
cookbook/locale/hr/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-12-05 09:15+0000\n"
|
||||
"Last-Translator: Ferenc <ugyes@freemail.hu>\n"
|
||||
"Language-Team: Hungarian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -2268,81 +2268,81 @@ msgstr "Napló megjelenítése"
|
||||
msgid "URL Import"
|
||||
msgstr "URL importálása"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Az updated_at paraméter helytelenül van formázva"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Nem létezik {self.basename} azonosítóval {pk}"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Nem egyesíthető ugyanazzal az objektummal!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Nem létezik {self.basename} azonosítóval {target}"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Nem lehet egyesíteni a gyermekobjektummal!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} sikeresen egyesült a {target.name} -vel"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr "Hiba történt a {source.name} és a {target.name} egyesítése során"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} sikeresen átkerült a gyökérbe."
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Hiba történt az áthelyezés közben "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Nem lehet egy objektumot önmagába mozgatni!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Nem létezik {self.basename} azonosítóval {parent}"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} sikeresen átkerült a {parent.name} szülőhöz"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} lekerült a bevásárlólistáról."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} hozzá lett adva a bevásárlólistához."
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
@@ -2350,17 +2350,17 @@ msgstr ""
|
||||
"A recept azonosítója, amelynek egy lépés része. Többszörös ismétlés esetén "
|
||||
"paraméter."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"A recept azonosítója, amelynek egy lépés része. Többszörös ismétlés esetén "
|
||||
"paraméter."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "A lekérdezés karakterlánca az objektum nevével összevetve (fuzzy)."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2368,7 +2368,7 @@ msgstr ""
|
||||
"A lekérdezési karakterláncot a recept nevével összevetve (fuzzy). A jövőben "
|
||||
"teljes szöveges keresés is."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
@@ -2376,69 +2376,69 @@ msgstr ""
|
||||
"A recept kulcsszavának azonosítója. Többszörös ismétlődő paraméter esetén. "
|
||||
"Egyenértékű a keywords_or kulcsszavakkal"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"Kulcsszó azonosítók. Többször is megadható. A megadott kulcsszavak "
|
||||
"mindegyikéhez tartozó receptek listázza"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Kulcsszó azonosítók. Többször is megadható. Az összes megadott kulcsszót "
|
||||
"tartalmazó receptek listázása."
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"Kulcsszó azonosító. Többször is megadható. Kizárja a recepteket a megadott "
|
||||
"kulcsszavak egyikéből."
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Kulcsszó azonosítók. Többször is megadható. Kizárja az összes megadott "
|
||||
"kulcsszóval rendelkező receptet."
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"Annak az összetevőnek az azonosítója, amelynek receptjeit fel kell sorolni. "
|
||||
"Többször is megadható."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"Összetevő azonosító. Többször is megadható. Legalább egy összetevő "
|
||||
"receptjeinek listája"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Összetevő azonosító. Többször is megadható. Az összes megadott összetevőt "
|
||||
"tartalmazó receptek listája."
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"Összetevő azonosító. Többször is megadható. Kizárja azokat a recepteket, "
|
||||
"amelyek a megadott összetevők bármelyikét tartalmazzák."
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Összetevő azonosító. Többször is megadható. Kizárja az összes megadott "
|
||||
"összetevőt tartalmazó recepteket."
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "A recepthez tartozó mértékegység azonosítója."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
@@ -2446,51 +2446,51 @@ msgstr ""
|
||||
"Egy recept minimális értékelése (0-5). A negatív értékek a maximális "
|
||||
"értékelés szerint szűrnek."
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"A könyv azonosítója, amelyben a recept található. Többször is megadható."
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
"A könyv azonosítója. Többször is megadható. A megadott könyvek összes "
|
||||
"receptjének listája"
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
"A könyv azonosítója. Többször is megadható. Az összes könyvben szereplő "
|
||||
"recept listája."
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
"A könyv azonosítói. Többször is megadható. Kizárja a megadott könyvek "
|
||||
"receptjeit."
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
"A könyv azonosítói. Többször is megadható. Kizárja az összes megadott "
|
||||
"könyvben szereplő receptet."
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr "Ha csak a belső recepteket kell visszaadni. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Az eredményeket véletlenszerű sorrendben adja vissza. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Az új találatokat adja vissza először a keresési eredmények között. [true/"
|
||||
"<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
@@ -2498,7 +2498,7 @@ msgstr ""
|
||||
"X-szer vagy többször főzött receptek szűrése. A negatív értékek X "
|
||||
"alkalomnál kevesebbet főzött recepteket jelenítik meg"
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2507,7 +2507,7 @@ msgstr ""
|
||||
"vagy később főztek meg utoljára. A - jelölve az adott dátumon vagy azt "
|
||||
"megelőzően elkészítettek kerülnek be a receptek listájába."
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2516,7 +2516,7 @@ msgstr ""
|
||||
"vagy később hoztak létre. A - jelölve az adott dátumon vagy azt megelőzően "
|
||||
"hozták létre."
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2525,7 +2525,7 @@ msgstr ""
|
||||
"vagy később frissültek. A - jelölve az adott dátumon vagy azt megelőzően "
|
||||
"frissültek."
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2534,13 +2534,13 @@ msgstr ""
|
||||
"vagy később néztek meg utoljára. A - jelölve az adott dátumon vagy azt "
|
||||
"megelőzően néztek meg utoljára."
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Felsorolja azokat a recepteket, amelyeket a rendelkezésre álló összetevőkből "
|
||||
"el lehet készíteni. [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
@@ -2548,7 +2548,7 @@ msgstr ""
|
||||
"Visszaadja az id elsődleges kulccsal rendelkező bevásárlólista-bejegyzést. "
|
||||
"Több érték megengedett."
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
@@ -2562,17 +2562,17 @@ msgstr ""
|
||||
"mindkettő, <b>legutóbbi</b>]<br> – a legutóbbi a nem bejelölt és a nemrég "
|
||||
"befejezett elemeket tartalmazza."
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
"Visszaadja a bevásárlólista bejegyzéseit szupermarket kategóriák szerinti "
|
||||
"sorrendben."
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Returns the shopping list entry with a primary key of id. Multiple "
|
||||
@@ -2584,45 +2584,45 @@ msgstr ""
|
||||
"Visszaadja az id elsődleges kulccsal rendelkező bevásárlólista-bejegyzést. "
|
||||
"Több érték megengedett."
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Semmi feladat."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr "Érvénytelen URL"
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "Kapcsolat megtagadva."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "Rossz URL séma."
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Nem sikerült használható adatokat találni."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Az importálás nincs implementálva ennél a szolgáltatónál"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Ez a funkció még nem érhető el a tandoor hosztolt verziójában!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Szinkronizálás sikeres!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Hiba szinkronizálás közben a tárolóval"
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-01-08 17:55+0000\n"
|
||||
"Last-Translator: Joachim Weber <joachim.weber@gmx.de>\n"
|
||||
"Language-Team: Armenian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -2121,282 +2121,282 @@ msgstr "Ցուցադրել օգնություն"
|
||||
msgid "URL Import"
|
||||
msgstr "URL ներմուծում"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
#, fuzzy
|
||||
#| msgid "Parameter filter_list incorrectly formatted"
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "filter_list պարամետրը սխալ է ձևավորված"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Հնարավոր չէ միավորել նույն օբյեկտի հետ:"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
#, fuzzy
|
||||
#| msgid "Cannot merge with the same object!"
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Հնարավոր չէ միավորել նույն օբյեկտի հետ:"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "The requested page could not be found."
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Պահանջվող էջը չի գտնվել:"
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Ներմուծումն այս պրովայդերի համար իրականացված չէ"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
#, fuzzy
|
||||
@@ -2404,11 +2404,11 @@ msgstr "Ներմուծումն այս պրովայդերի համար իրակա
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Այս հատկությունը հասանելի չէ փորձնական տարբերակում։"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Սինքրոնիզացիան հաջողված է:"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Պահոցի հետ սինքրոնիզացիայի սխալ"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2022-10-12 08:33+0000\n"
|
||||
"Last-Translator: wella <wella.design@gmail.com>\n"
|
||||
"Language-Team: Indonesian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -1962,286 +1962,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-08-19 21:36+0000\n"
|
||||
"Last-Translator: NeoID <neoid@animenord.com>\n"
|
||||
"Language-Team: Norwegian Bokmål <http://translate.tandoor.dev/projects/"
|
||||
@@ -2053,286 +2053,286 @@ msgstr "Vis hjelp"
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -12,17 +12,17 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2024-02-10 12:20+0000\n"
|
||||
"Last-Translator: Jonan B <jonanb@pm.me>\n"
|
||||
"Language-Team: Dutch <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
"backend/nl/>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-09-03 19:58+0000\n"
|
||||
"Last-Translator: \"S. v.d. Gevel\" <stefan18_gw@hotmail.com>\n"
|
||||
"Language-Team: Dutch <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/nl/>\n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -65,8 +65,8 @@ msgid ""
|
||||
"To prevent duplicates recipes with the same name as existing ones are "
|
||||
"ignored. Check this box to import everything."
|
||||
msgstr ""
|
||||
"Om dubbelingen te voorkomen worden recepten met dezelfde naam als een "
|
||||
"bestaand recept genegeerd. Vink aan om alles te importeren."
|
||||
"Standaard worden dubbele recepten, op basis van de naam, genegeerd. Vink "
|
||||
"deze optie aan om toch alles te importeren."
|
||||
|
||||
#: .\cookbook\forms.py:143
|
||||
msgid "Add your comment: "
|
||||
@@ -93,14 +93,17 @@ msgid ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Long Lived Access Token</a> for your HomeAssistant instance"
|
||||
msgstr ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Toegangtokens met lange levensduur</a> voor jouw HomeAssistant "
|
||||
"installatie"
|
||||
|
||||
#: .\cookbook\forms.py:193
|
||||
msgid "Something like http://homeassistant.local:8123/api"
|
||||
msgstr ""
|
||||
msgstr "Bijvoorbeeld http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:205
|
||||
msgid "http://homeassistant.local:8123/api for example"
|
||||
msgstr ""
|
||||
msgstr "http://homeassistant.local:8123/api bijvoorbeeld"
|
||||
|
||||
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
|
||||
msgid "Storage"
|
||||
@@ -303,7 +306,7 @@ msgstr "gisten"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:316
|
||||
msgid "sous-vide"
|
||||
msgstr "sous-vide"
|
||||
msgstr "sous-vide (vacuümgaren)"
|
||||
|
||||
#: .\cookbook\helper\shopping_helper.py:150
|
||||
msgid "You must supply a servings size"
|
||||
@@ -390,7 +393,7 @@ msgstr "Sectie"
|
||||
|
||||
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
|
||||
msgid "Fixes foods with "
|
||||
msgstr ""
|
||||
msgstr "Repareer voedingsmiddelen met "
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:14
|
||||
msgid "Rebuilds full text search index on Recipe"
|
||||
@@ -427,16 +430,14 @@ msgid "Other"
|
||||
msgstr "Overige"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
#, fuzzy
|
||||
#| msgid "Fats"
|
||||
msgid "Fat"
|
||||
msgstr "Vetten"
|
||||
msgstr "Vet"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
|
||||
msgid "g"
|
||||
msgstr ""
|
||||
msgstr "g"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
msgid "Carbohydrates"
|
||||
@@ -452,7 +453,7 @@ msgstr "Calorieën"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:20
|
||||
msgid "kcal"
|
||||
msgstr ""
|
||||
msgstr "kcal"
|
||||
|
||||
#: .\cookbook\models.py:325
|
||||
msgid ""
|
||||
@@ -475,7 +476,7 @@ msgstr "Maaltijdplan"
|
||||
#: .\cookbook\models.py:456 .\cookbook\templates\base.html:122
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "Books"
|
||||
msgstr "Boeken"
|
||||
msgstr "Kookboeken"
|
||||
|
||||
#: .\cookbook\models.py:457 .\cookbook\templates\base.html:118
|
||||
#: .\cookbook\views\views.py:460
|
||||
@@ -491,18 +492,16 @@ msgid "Nutrition"
|
||||
msgstr "Voedingswaarde"
|
||||
|
||||
#: .\cookbook\models.py:918
|
||||
#, fuzzy
|
||||
#| msgid "Merge"
|
||||
msgid "Allergen"
|
||||
msgstr "Samenvoegen"
|
||||
msgstr "Allergeen"
|
||||
|
||||
#: .\cookbook\models.py:919
|
||||
msgid "Price"
|
||||
msgstr ""
|
||||
msgstr "Prijs"
|
||||
|
||||
#: .\cookbook\models.py:919
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
msgstr "Doel"
|
||||
|
||||
#: .\cookbook\models.py:1408 .\cookbook\templates\search_info.html:28
|
||||
msgid "Simple"
|
||||
@@ -541,30 +540,24 @@ msgid "Instruction Replace"
|
||||
msgstr "Vervang instructies"
|
||||
|
||||
#: .\cookbook\models.py:1472
|
||||
#, fuzzy
|
||||
#| msgid "New Unit"
|
||||
msgid "Never Unit"
|
||||
msgstr "Nieuwe eenheid"
|
||||
msgstr "Nooit eenheid"
|
||||
|
||||
#: .\cookbook\models.py:1473
|
||||
msgid "Transpose Words"
|
||||
msgstr ""
|
||||
msgstr "Omzetten Woorden"
|
||||
|
||||
#: .\cookbook\models.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "Food Alias"
|
||||
msgid "Food Replace"
|
||||
msgstr "Ingrediënt alias"
|
||||
msgstr "Voedingsmiddelen vervangen"
|
||||
|
||||
#: .\cookbook\models.py:1475
|
||||
#, fuzzy
|
||||
#| msgid "Description Replace"
|
||||
msgid "Unit Replace"
|
||||
msgstr "Verrvang beschrijving"
|
||||
msgstr "Eenheid Vervangen"
|
||||
|
||||
#: .\cookbook\models.py:1476
|
||||
msgid "Name Replace"
|
||||
msgstr ""
|
||||
msgstr "Naam Vervangen"
|
||||
|
||||
#: .\cookbook\models.py:1503 .\cookbook\views\delete.py:40
|
||||
#: .\cookbook\views\edit.py:210 .\cookbook\views\new.py:39
|
||||
@@ -577,7 +570,7 @@ msgstr "Ingrediënt"
|
||||
|
||||
#: .\cookbook\models.py:1505 .\cookbook\templates\base.html:149
|
||||
msgid "Keyword"
|
||||
msgstr "Etiket"
|
||||
msgstr "Trefwoord"
|
||||
|
||||
#: .\cookbook\serializer.py:222
|
||||
msgid "File uploads are not enabled for this Space."
|
||||
@@ -637,8 +630,8 @@ msgid ""
|
||||
"List of ingredient IDs from the recipe to add, if not provided all "
|
||||
"ingredients will be added."
|
||||
msgstr ""
|
||||
"Lijst van ingrediënten ID's van het toe te voegen recept, als deze niet "
|
||||
"opgegeven worden worden alle ingrediënten toegevoegd."
|
||||
"Lijst van ingrediënt ID's van het toe te voegen recept, als deze niet worden "
|
||||
"opgegeven worden alle ingrediënten toegevoegd."
|
||||
|
||||
#: .\cookbook\serializer.py:1430
|
||||
msgid ""
|
||||
@@ -907,7 +900,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\account\password_reset_from_key.html:33
|
||||
msgid "change password"
|
||||
msgstr "Wijzig wachtwoord"
|
||||
msgstr "wijzig wachtwoord"
|
||||
|
||||
#: .\cookbook\templates\account\password_reset_from_key.html:36
|
||||
#: .\cookbook\templates\account\password_reset_from_key_done.html:19
|
||||
@@ -1021,13 +1014,11 @@ msgstr "Exporteren"
|
||||
|
||||
#: .\cookbook\templates\base.html:287
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
msgstr "Eigenschappen"
|
||||
|
||||
#: .\cookbook\templates\base.html:301 .\cookbook\views\lists.py:255
|
||||
#, fuzzy
|
||||
#| msgid "Account Connections"
|
||||
msgid "Unit Conversions"
|
||||
msgstr "Account verbindingen"
|
||||
msgstr "Eenheid omzetten"
|
||||
|
||||
#: .\cookbook\templates\base.html:318 .\cookbook\templates\index.html:47
|
||||
msgid "Import Recipe"
|
||||
@@ -1047,10 +1038,8 @@ msgid "Space Settings"
|
||||
msgstr "Ruimte Instellingen"
|
||||
|
||||
#: .\cookbook\templates\base.html:340
|
||||
#, fuzzy
|
||||
#| msgid "External Recipes"
|
||||
msgid "External Connectors"
|
||||
msgstr "Externe recepten"
|
||||
msgstr "Externe Connectors"
|
||||
|
||||
#: .\cookbook\templates\base.html:345 .\cookbook\templates\system.html:13
|
||||
msgid "System"
|
||||
@@ -1439,11 +1428,11 @@ msgstr "Tabellen"
|
||||
#: .\cookbook\templates\markdown_info.html:153
|
||||
msgid ""
|
||||
"Markdown tables are hard to create by hand. It is recommended to use a table "
|
||||
"editor like <a href=\"https://www.tablesgenerator.com/markdown_tables\" rel="
|
||||
"\"noreferrer noopener\" target=\"_blank\">this one.</a>"
|
||||
"editor like <a href=\"https://www.tablesgenerator.com/markdown_tables\" "
|
||||
"rel=\"noreferrer noopener\" target=\"_blank\">this one.</a>"
|
||||
msgstr ""
|
||||
"Het is lastig om met de hand Markdown tabellen te maken. Het wordt "
|
||||
"aangeraden om een tabel editor zoals <a href=\"https://www.tablesgenerator."
|
||||
"aangeraden om een tabel 'editor' zoals <a href=\"https://www.tablesgenerator."
|
||||
"com/markdown_tables\" rel=\"noreferrer noopener\" target=\"_blank\">deze</a> "
|
||||
"te gebruiken."
|
||||
|
||||
@@ -1513,10 +1502,8 @@ msgid "Back"
|
||||
msgstr "Terug"
|
||||
|
||||
#: .\cookbook\templates\property_editor.html:7
|
||||
#, fuzzy
|
||||
#| msgid "Ingredient Editor"
|
||||
msgid "Property Editor"
|
||||
msgstr "Ingrediënten editor"
|
||||
msgstr "Eigenschappen Editor"
|
||||
|
||||
#: .\cookbook\templates\recipe_view.html:36
|
||||
msgid "Comments"
|
||||
@@ -1856,7 +1843,7 @@ msgstr "Perfect voor grote databases"
|
||||
|
||||
#: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5
|
||||
msgid "Cookbook Setup"
|
||||
msgstr "Kookboek Setup"
|
||||
msgstr "Kookboek configuratie"
|
||||
|
||||
#: .\cookbook\templates\setup.html:14
|
||||
msgid "Setup"
|
||||
@@ -1973,10 +1960,8 @@ msgid "Sign in using"
|
||||
msgstr "Log in met"
|
||||
|
||||
#: .\cookbook\templates\space_manage.html:7
|
||||
#, fuzzy
|
||||
#| msgid "Space Membership"
|
||||
msgid "Space Management"
|
||||
msgstr "Space Lidmaatschap"
|
||||
msgstr "Ruimte Management"
|
||||
|
||||
#: .\cookbook\templates\space_manage.html:26
|
||||
msgid "Space:"
|
||||
@@ -2072,6 +2057,10 @@ msgid ""
|
||||
"script to generate version information (done automatically in docker).\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Je moet <code>version.py</code> uitvoeren in je update script om "
|
||||
"versie informatie te genereren (gebeurt automatisch in docker).\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:46
|
||||
msgid "Media Serving"
|
||||
@@ -2158,7 +2147,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\system.html:86
|
||||
msgid "Allowed Hosts"
|
||||
msgstr ""
|
||||
msgstr "Hosts met toestemming"
|
||||
|
||||
#: .\cookbook\templates\system.html:90
|
||||
msgid ""
|
||||
@@ -2168,6 +2157,11 @@ msgid ""
|
||||
"this.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Jouw 'hosts met toestemming' zijn geconfigureerd om alle hosts "
|
||||
"toestemming te geven. Dit is in niet altijd fout maar zou eigenlijk "
|
||||
"voorkomen moeten worden. Raadpleeg de documentatie hiervoor.\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:97
|
||||
msgid "Database"
|
||||
@@ -2178,10 +2172,8 @@ msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: .\cookbook\templates\system.html:110 .\cookbook\templates\system.html:127
|
||||
#, fuzzy
|
||||
#| msgid "Use fractions"
|
||||
msgid "Migrations"
|
||||
msgstr "Gebruik fracties"
|
||||
msgstr "Migraties"
|
||||
|
||||
#: .\cookbook\templates\system.html:116
|
||||
msgid ""
|
||||
@@ -2194,93 +2186,103 @@ msgid ""
|
||||
"issue.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Migraties mogen nooit mislukken!\n"
|
||||
" Mislukte migraties zullen er waarschijnlijk voor zorgen dat "
|
||||
"grote delen van de app niet correct werken.\n"
|
||||
" Als een migratie mislukt, zorg er dan voor dat de applicatie de "
|
||||
"nieuwste versie is, blijft het probleem bestaan, plaats dan het "
|
||||
"migratielogboek en het onderstaande overzicht in een GitHub-issue.\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:182
|
||||
msgid "False"
|
||||
msgstr ""
|
||||
msgstr "Niet waar"
|
||||
|
||||
#: .\cookbook\templates\system.html:182
|
||||
msgid "True"
|
||||
msgstr ""
|
||||
msgstr "Waar"
|
||||
|
||||
#: .\cookbook\templates\system.html:207
|
||||
msgid "Hide"
|
||||
msgstr ""
|
||||
msgstr "Verberg"
|
||||
|
||||
#: .\cookbook\templates\system.html:210
|
||||
#, fuzzy
|
||||
#| msgid "Show Log"
|
||||
msgid "Show"
|
||||
msgstr "Toon Log"
|
||||
msgstr "Toon"
|
||||
|
||||
#: .\cookbook\templates\url_import.html:8
|
||||
msgid "URL Import"
|
||||
msgstr "Importeer URL"
|
||||
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Parameter updatet_at is onjuist geformateerd"
|
||||
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Er bestaat geen {self.basename} met id {pk}"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238 .\cookbook\views\api.py:239
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Kan niet met hetzelfde object samenvoegen!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245 .\cookbook\views\api.py:246
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Er bestaat geen {self.basename} met id {target}"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250 .\cookbook\views\api.py:251
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Kan niet met kindobject samenvoegen!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288 .\cookbook\views\api.py:289
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} is succesvol samengevoegd met {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293 .\cookbook\views\api.py:294
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
"Er is een error opgetreden bij het samenvoegen van {source.name} met {target."
|
||||
"name}"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349 .\cookbook\views\api.py:350
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} is succesvol verplaatst naar het hoogste niveau."
|
||||
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "Er is een error opgetreden bij het verplaatsen "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355 .\cookbook\views\api.py:356
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Kan object niet verplaatsen naar zichzelf!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361 .\cookbook\views\api.py:362
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Er bestaat geen {self.basename} met id {parent}"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367 .\cookbook\views\api.py:368
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} is succesvol verplaatst naar {parent.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589 .\cookbook\views\api.py:590
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} is verwijderd van het boodschappenlijstje."
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050 .\cookbook\views\api.py:595
|
||||
#: .\cookbook\views\api.py:1038 .\cookbook\views\api.py:1051
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} is toegevoegd aan het boodschappenlijstje."
|
||||
@@ -2288,30 +2290,29 @@ msgstr "{obj.name} is toegevoegd aan het boodschappenlijstje."
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
"Filter maaltijdplannen vanaf datum (inclusief) in het formaat JJJJ-MM-DD."
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
"Filter maaltijdplannen tot nu toe (inclusief) in het formaat JJJJ-MM-DD."
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID van het recept waar de stap onderdeel van is. Herhaal parameter voor "
|
||||
"meerdere."
|
||||
"Filter maaltijdplannen met MealType ID. Herhaal parameter voor meerdere."
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872 .\cookbook\views\api.py:873
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID van het recept waar de stap onderdeel van is. Herhaal parameter voor "
|
||||
"meerdere."
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873 .\cookbook\views\api.py:874
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "Zoekterm komt overeen (fuzzy) met object naam."
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909 .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
@@ -2319,7 +2320,7 @@ msgstr ""
|
||||
"Zoekterm komt overeen (fuzzy) met recept naam. In de toekomst wordt zoeken "
|
||||
"op volledige tekst ondersteund."
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910 .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
@@ -2327,109 +2328,115 @@ msgstr ""
|
||||
"ID van etiket dat een recept moet hebben. Herhaal parameter voor meerdere. "
|
||||
"Gelijkwaardig aan keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911 .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
"Etiket ID, herhaal voor meerdere. Geeft recepten met elk geselecteerd etiket "
|
||||
"weer"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912 .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Etiket ID, herhaal voor meerdere. Geeft recepten met alle geselecteerde "
|
||||
"etiketten weer."
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913 .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
"Etiket ID, herhaal voor meerdere. Sluit recepten met één van de etiketten "
|
||||
"uit."
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914 .\cookbook\views\api.py:915
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
"Etiket ID, herhaal voor meerdere. Sluit recepten met alle etiketten uit."
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915 .\cookbook\views\api.py:916
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID van ingrediënt dat een recept moet hebben. Herhaal parameter voor "
|
||||
"meerdere."
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916 .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
"Ingrediënt ID, herhaal voor meerdere. Geeft recepten met elk ingrediënt weer"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917 .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Ingrediënt ID, herhaal voor meerdere. Geef recepten met alle ingrediënten "
|
||||
"weer."
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918 .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
"Ingrediënt ID, herhaal voor meerdere. sluit recepten met één van de "
|
||||
"ingrediënten uit."
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919 .\cookbook\views\api.py:920
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
"Ingrediënt ID, herhaal voor meerdere. Sluit recepten met alle ingrediënten "
|
||||
"uit."
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920 .\cookbook\views\api.py:921
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "ID van eenheid dat een recept moet hebben."
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921 .\cookbook\views\api.py:922
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr "Een waardering van een recept gaat van 0 tot 5."
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922 .\cookbook\views\api.py:923
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
"ID van boek dat een recept moet hebben. Herhaal parameter voor meerdere."
|
||||
"ID van een kookboek dat een recept moet bevatten. Herhaal parameter voor "
|
||||
"meerdere."
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923 .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr "Boek ID, herhaal voor meerdere. Geeft recepten uit alle boeken weer"
|
||||
msgstr ""
|
||||
"Kookboek ID, herhaal voor meerdere. Geeft recepten uit de geselecteerde "
|
||||
"kookboeken weer"
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924 .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr "Boek IDs, herhaal voor meerdere. Geeft recepten weer uit alle boeken."
|
||||
msgstr ""
|
||||
"Kookboek IDs, herhaal voor meerdere. Geeft recepten weer uit alle kookboeken."
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925 .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
"Boek IDs, herhaal voor meerdere. Sluit recepten uit elk van de boeken uit."
|
||||
"Kookboek IDs, herhaal voor meerdere. Sluit recepten uit elk van de "
|
||||
"geselecteerde kookboeken uit."
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926 .\cookbook\views\api.py:927
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr "Boek IDs, herhaal voor meerdere. Sluit recepten uit alle boeken uit."
|
||||
msgstr ""
|
||||
"Kookboek IDs, herhaal voor meerdere. Sluit recepten uit alle boeken uit."
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927 .\cookbook\views\api.py:928
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Wanneer alleen interne recepten gevonden moeten worden. [waar/<b>onwaar</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928 .\cookbook\views\api.py:929
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Geeft de resultaten in willekeurige volgorde weer. [waar/<b>onwaar</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929 .\cookbook\views\api.py:930
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr "Geeft nieuwe resultaten eerst weer. [waar/<b>onwaar</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930 .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
@@ -2437,7 +2444,7 @@ msgstr ""
|
||||
"Filter recepten X maal of meer bereid. Negatieve waarden geven minder dan X "
|
||||
"keer bereide recepten weer"
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931 .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2445,7 +2452,7 @@ msgstr ""
|
||||
"Filter recepten op laatst bereid op of na JJJJ-MM-DD. Voorafgaand - filters "
|
||||
"op of voor datum."
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932 .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2453,7 +2460,7 @@ msgstr ""
|
||||
"Filter recepten aangemaakt op of na JJJJ-MM-DD. Voorafgaand - filters op of "
|
||||
"voor datum."
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933 .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
@@ -2461,7 +2468,7 @@ msgstr ""
|
||||
"Filter recepten op geüpdatet op of na JJJJ-MM-DD. Voorafgaand - filters op "
|
||||
"of voor datum."
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934 .\cookbook\views\api.py:935
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
@@ -2469,13 +2476,13 @@ msgstr ""
|
||||
"Filter recepten op laatst bekeken op of na JJJJ-MM-DD. Voorafgaand - filters "
|
||||
"op of voor datum."
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935 .\cookbook\views\api.py:936
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
"Filter recepten die bereid kunnen worden met ingrediënten die op voorraad "
|
||||
"zijn. [waar/<b>onwaar</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122 .\cookbook\views\api.py:1123
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
@@ -2484,78 +2491,71 @@ msgstr ""
|
||||
"Meerdere waarden toegestaan."
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
#| "b>]<br> - recent includes unchecked items and recently completed items."
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
"Filter boodschappenlijstjes op aangevinkt. [waar,onwaar,beide,<b>recent</"
|
||||
"Filter boodschappenlijstjes op aangevinkt. [waar, onwaar, beide,<b>recent</"
|
||||
"b>]<br> - recent bevat niet aangevinkte en recent voltooide items."
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128 .\cookbook\views\api.py:1129
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
"Geeft items op boodschappenlijstjes gesorteerd per supermarktcategorie weer."
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
msgstr "Filter op vermeldingen met het gegeven recept"
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Returns the shopping list entry with a primary key of id. Multiple "
|
||||
#| "values allowed."
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
"Geeft het boodschappenlijstje item met een primaire sleutel van id. "
|
||||
"Vraag de automatiseringen die overeenkomen met het automatiseringstype op. "
|
||||
"Meerdere waarden toegestaan."
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415 .\cookbook\views\api.py:1416
|
||||
msgid "Nothing to do."
|
||||
msgstr "Niks te doen."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445 .\cookbook\views\api.py:1443
|
||||
msgid "Invalid Url"
|
||||
msgstr "Ongeldige URL"
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449 .\cookbook\views\api.py:1447
|
||||
msgid "Connection Refused."
|
||||
msgstr "Verbinding geweigerd."
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451 .\cookbook\views\api.py:1449
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "Verkeerd URL schema."
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474 .\cookbook\views\api.py:1472
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Er is geen bruikbare data gevonden."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
msgstr "Bestand is boven de ruimte limiet"
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1564
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Importeren is voor deze provider niet geïmplementeerd"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
#: .\cookbook\views\new.py:82 .\cookbook\views\api.py:1648
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Deze optie is nog niet beschikbaar in de gehoste versie van Tandoor!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671 .\cookbook\views\api.py:1669
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synchronisatie succesvol!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674 .\cookbook\views\api.py:1672
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Er is een fout opgetreden bij het synchroniseren met Opslag"
|
||||
|
||||
@@ -2583,10 +2583,8 @@ msgstr ""
|
||||
"tenminste een Bewaker."
|
||||
|
||||
#: .\cookbook\views\delete.py:135
|
||||
#, fuzzy
|
||||
#| msgid "Storage Backend"
|
||||
msgid "Connectors Config Backend"
|
||||
msgstr "Opslag backend"
|
||||
msgstr "Connectors Configuratie backend"
|
||||
|
||||
#: .\cookbook\views\delete.py:157
|
||||
msgid "Invite Link"
|
||||
@@ -2609,14 +2607,12 @@ msgid "There was an error updating this storage backend!"
|
||||
msgstr "Er is een fout opgetreden bij het updaten van deze opslag backend!"
|
||||
|
||||
#: .\cookbook\views\edit.py:134
|
||||
#, fuzzy
|
||||
#| msgid "Changes saved!"
|
||||
msgid "Config saved!"
|
||||
msgstr "Wijzigingen opgeslagen!"
|
||||
msgstr "Configuratie opgeslagen!"
|
||||
|
||||
#: .\cookbook\views\edit.py:142
|
||||
msgid "ConnectorConfig"
|
||||
msgstr ""
|
||||
msgstr "ConnectorConfiguratie"
|
||||
|
||||
#: .\cookbook\views\edit.py:198
|
||||
msgid "Changes saved!"
|
||||
@@ -2647,10 +2643,8 @@ msgid "Shopping List"
|
||||
msgstr "Boodschappenlijst"
|
||||
|
||||
#: .\cookbook\views\lists.py:77 .\cookbook\views\new.py:98
|
||||
#, fuzzy
|
||||
#| msgid "Storage Backend"
|
||||
msgid "Connector Config Backend"
|
||||
msgstr "Opslag backend"
|
||||
msgstr "Connector Configuratie Backend"
|
||||
|
||||
#: .\cookbook\views\lists.py:91
|
||||
msgid "Invite Links"
|
||||
@@ -2674,13 +2668,11 @@ msgstr "Stappen"
|
||||
|
||||
#: .\cookbook\views\lists.py:270
|
||||
msgid "Property Types"
|
||||
msgstr ""
|
||||
msgstr "Eigenschap Types"
|
||||
|
||||
#: .\cookbook\views\new.py:86
|
||||
#, fuzzy
|
||||
#| msgid "This feature is not available in the demo version!"
|
||||
msgid "This feature is not enabled by the server admin!"
|
||||
msgstr "Deze optie is niet beschikbaar in de demo versie!"
|
||||
msgstr "Deze optie is niet ingeschakeld door de server administrator!"
|
||||
|
||||
#: .\cookbook\views\new.py:123
|
||||
msgid "Imported new recipe!"
|
||||
@@ -2696,11 +2688,9 @@ msgid "This feature is not available in the demo version!"
|
||||
msgstr "Deze optie is niet beschikbaar in de demo versie!"
|
||||
|
||||
#: .\cookbook\views\views.py:74
|
||||
#, fuzzy
|
||||
#| msgid "You have reached the maximum number of recipes for your space."
|
||||
msgid ""
|
||||
"You have the reached the maximum amount of spaces that can be owned by you."
|
||||
msgstr "Je hebt het maximaal aantal recepten voor jouw ruimte bereikt."
|
||||
msgstr "Je hebt het maximaal aantal Ruimtes die jij kan aanmaken bereikt."
|
||||
|
||||
#: .\cookbook\views\views.py:89
|
||||
msgid ""
|
||||
@@ -2738,49 +2728,37 @@ msgstr "'Fuzzy' zoeken is niet te gebruiken met deze zoekmethode!"
|
||||
#, python-format
|
||||
msgid "PostgreSQL %(v)s is deprecated. Upgrade to a fully supported version!"
|
||||
msgstr ""
|
||||
"PostgreSQL %(v)s is verouderd. Upgrade naar een volledig ondersteunde "
|
||||
"versie!"
|
||||
|
||||
#: .\cookbook\views\views.py:309
|
||||
#, python-format
|
||||
msgid "You are running PostgreSQL %(v1)s. PostgreSQL %(v2)s is recommended"
|
||||
msgstr ""
|
||||
msgstr "Je gebruikt PostgreSQL %(v1)s. PostgreSQL %(v2)s wordt aanbevolen"
|
||||
|
||||
#: .\cookbook\views\views.py:313
|
||||
msgid "Unable to determine PostgreSQL version."
|
||||
msgstr ""
|
||||
msgstr "Kan PostgreSQL-versie niet bepalen."
|
||||
|
||||
#: .\cookbook\views\views.py:317
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "\n"
|
||||
#| " This application is not running with a Postgres database "
|
||||
#| "backend. This is ok but not recommended as some\n"
|
||||
#| " features only work with postgres databases.\n"
|
||||
#| " "
|
||||
msgid ""
|
||||
"This application is not running with a Postgres database backend. This is ok "
|
||||
"but not recommended as some features only work with postgres databases."
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Deze applicatie draait niet met een Postgres database als "
|
||||
"backend. Dit is ok maar wordt niet aanbevolen omdat sommige functies \n"
|
||||
" alleen werken met Postgres databases.\n"
|
||||
" "
|
||||
"Deze applicatie draait niet met een Postgres database als backend. Dit is ok "
|
||||
"maar wordt niet aanbevolen omdat sommige functies alleen werken met Postgres "
|
||||
"databases."
|
||||
|
||||
#: .\cookbook\views\views.py:360
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The setup page can only be used to create the first user! If you have "
|
||||
#| "forgotten your superuser credentials please consult the django "
|
||||
#| "documentation on how to reset passwords."
|
||||
msgid ""
|
||||
"The setup page can only be used to create the first "
|
||||
"user! If you have forgotten your superuser credentials "
|
||||
"please consult the django documentation on how to reset passwords."
|
||||
msgstr ""
|
||||
"De setup pagina kan alleen gebruikt worden om de eerste gebruiker aan te "
|
||||
"maken! Indien je de superuser inloggegevens bent vergeten zal je de django "
|
||||
"documentatie raad moeten plegen voor een methode om je wachtwoord te "
|
||||
"resetten."
|
||||
"maken! Indien je de superuser inloggegevens bent "
|
||||
"vergeten zal je de django documentatie moeten raadplegen voor een methode om "
|
||||
"je wachtwoord te resetten."
|
||||
|
||||
#: .\cookbook\views\views.py:369
|
||||
msgid "Passwords dont match!"
|
||||
@@ -2820,7 +2798,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\views\views.py:451
|
||||
msgid "Manage recipes, shopping list, meal plans and more."
|
||||
msgstr ""
|
||||
msgstr "Beheer recepten, boodschappen lijstjes, maaltijdplannen en meer."
|
||||
|
||||
#: .\cookbook\views\views.py:458
|
||||
msgid "Plan"
|
||||
@@ -2828,17 +2806,15 @@ msgstr "Plan"
|
||||
|
||||
#: .\cookbook\views\views.py:458
|
||||
msgid "View your meal Plan"
|
||||
msgstr ""
|
||||
msgstr "Bekijk jouw maaltijdplan"
|
||||
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "View your cookbooks"
|
||||
msgstr ""
|
||||
msgstr "Bekijk jouw kookboeken"
|
||||
|
||||
#: .\cookbook\views\views.py:460
|
||||
#, fuzzy
|
||||
#| msgid "New Shopping List"
|
||||
msgid "View your shopping lists"
|
||||
msgstr "Nieuwe boodschappenlijst"
|
||||
msgstr "Bekijk jouw boodschappenlijst"
|
||||
|
||||
#~ msgid "Default unit"
|
||||
#~ msgstr "Standaard eenheid"
|
||||
@@ -2946,8 +2922,8 @@ msgstr "Nieuwe boodschappenlijst"
|
||||
#~ "You can use markdown to format this field. See the <a href=\"/docs/"
|
||||
#~ "markdown/\">docs here</a>"
|
||||
#~ msgstr ""
|
||||
#~ "Je kunt markdown gebruiken om dit veld te op te maken. Bekijk de <a href="
|
||||
#~ "\"/docs/markdown/\">documentatie hier</a>"
|
||||
#~ "Je kunt markdown gebruiken om dit veld te op te maken. Bekijk de <a "
|
||||
#~ "href=\"/docs/markdown/\">documentatie hier</a>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Users will see all items you add to your shopping list. They must add "
|
||||
|
||||
@@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-03-19 23:47+0000\n"
|
||||
"Last-Translator: Tomasz Klimczak <klemensble@gmail.com>\n"
|
||||
"Language-Team: Polish <http://translate.tandoor.dev/projects/tandoor/recipes-"
|
||||
@@ -2108,290 +2108,290 @@ msgstr "Wyświetl pomoc"
|
||||
msgid "URL Import"
|
||||
msgstr "Importuj z URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
#, fuzzy
|
||||
#| msgid "Parameter filter_list incorrectly formatted"
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Nieprawidłowo sformatowany parametr filter_list"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Nie można scalić tego samego obiektu!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
#, fuzzy
|
||||
#| msgid "Cannot merge with the same object!"
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Nie można scalić tego samego obiektu!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Nie znaleziono żadnych przydatnych danych."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr "Plik przekracza limit miejsca"
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Importowanie dla tego usługodawcy nie zostało zaimplementowane"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Ta funkcja nie jest jeszcze dostępna w hostowanej wersji tandoor!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synchronizacja powiodła się!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Błąd synchronizacji z magazynem"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-10-07 18:02+0000\n"
|
||||
"Last-Translator: Guilherme Roda <glealroda@gmail.com>\n"
|
||||
"Language-Team: Portuguese <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -1989,286 +1989,286 @@ msgstr "Mostrar Log"
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-10-09 01:54+0000\n"
|
||||
"Last-Translator: Guilherme Roda <glealroda@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) <http://translate.tandoor.dev/projects/"
|
||||
@@ -1994,286 +1994,286 @@ msgstr "Mostrar Log"
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Nada para fazer."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Sincronização realizada com sucesso!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -1934,286 +1934,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2023-04-27 08:55+0000\n"
|
||||
"Last-Translator: noxonad <noxonad@proton.me>\n"
|
||||
"Language-Team: Romanian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -2296,290 +2296,290 @@ msgstr "Afișare jurnal"
|
||||
msgid "URL Import"
|
||||
msgstr "Importare URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Parametrul updated_at formatat incorect"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "Nu există {self.basename} cu id {pk}"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Nu se poate uni cu același obiect!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "Nu există {self.basename} cu id {target}"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Nu se poate uni cu obiect copil!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} a fost unit cu succes cu {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
"A apărut o eroare la încercarea de a uni {source.name} cu {target.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} a fost mutat cu succes la rădăcină."
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "A apărut o eroare la încercarea de a muta "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "Nu se poate muta un obiect la sine!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "Nu există {self.basename} cu id {parent}"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} a fost mutat cu succes la părintele {parent.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "Nimic de făcut."
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "No useable data could be found."
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Nu au putut fi găsite date utilizabile."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Importul nu este implementat pentru acest furnizor"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
"Această funcție nu este încă disponibilă în versiunea găzduită a tandoor!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Sincronizare de succes!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Eroare la sincronizarea cu stocarea"
|
||||
|
||||
|
||||
@@ -7,18 +7,18 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2023-05-01 07:55+0000\n"
|
||||
"Last-Translator: axeron2036 <admin@axeron2036.ru>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-11-12 17:58+0000\n"
|
||||
"Last-Translator: Владислав <vlad@kelonmyosa.ru>\n"
|
||||
"Language-Team: Russian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/ru/>\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -454,17 +454,17 @@ msgstr ""
|
||||
#: .\cookbook\models.py:455 .\cookbook\templates\base.html:114
|
||||
#: .\cookbook\templates\meal_plan.html:7
|
||||
msgid "Meal-Plan"
|
||||
msgstr ""
|
||||
msgstr "План питания"
|
||||
|
||||
#: .\cookbook\models.py:456 .\cookbook\templates\base.html:122
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "Books"
|
||||
msgstr "Книги"
|
||||
msgstr "Книги рецептов"
|
||||
|
||||
#: .\cookbook\models.py:457 .\cookbook\templates\base.html:118
|
||||
#: .\cookbook\views\views.py:460
|
||||
msgid "Shopping"
|
||||
msgstr ""
|
||||
msgstr "Покупки"
|
||||
|
||||
#: .\cookbook\models.py:752
|
||||
msgid " is part of a recipe step and cannot be deleted"
|
||||
@@ -929,7 +929,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\base.html:110 .\cookbook\templates\index.html:87
|
||||
msgid "Recipes"
|
||||
msgstr ""
|
||||
msgstr "Рецепты"
|
||||
|
||||
#: .\cookbook\templates\base.html:161 .\cookbook\views\lists.py:120
|
||||
msgid "Foods"
|
||||
@@ -1969,286 +1969,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,9 +7,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2024-03-11 13:02+0000\n"
|
||||
"Last-Translator: Kn <kn@users.noreply.translate.tandoor.dev>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-09-17 11:58+0000\n"
|
||||
"Last-Translator: Bebbe K <kajolekk91@gmail.com>\n"
|
||||
"Language-Team: Swedish <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/sv/>\n"
|
||||
"Language: sv\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.4.2\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -151,48 +151,61 @@ msgid ""
|
||||
"Select type method of search. Click <a href=\"/docs/search/\">here</a> for "
|
||||
"full description of choices."
|
||||
msgstr ""
|
||||
"Välj typ av sökmetod. Klicka <a href=\"/docs/search/\">här</a> för "
|
||||
"fullständig beskrivning av alternativen."
|
||||
|
||||
#: .\cookbook\forms.py:341
|
||||
msgid ""
|
||||
"Use fuzzy matching on units, keywords and ingredients when editing and "
|
||||
"importing recipes."
|
||||
msgstr ""
|
||||
"Använd \"fuzzy\" matchning på enheter, nyckelord och ingredienser när du "
|
||||
"redigerar och importerar recept."
|
||||
|
||||
#: .\cookbook\forms.py:342
|
||||
msgid ""
|
||||
"Fields to search ignoring accents. Selecting this option can improve or "
|
||||
"degrade search quality depending on language"
|
||||
msgstr ""
|
||||
"Fält att söka medan man ignorerar accenter. Val av detta alternativ kan "
|
||||
"förbättra eller försämra sökkvaliteten beroende på språk"
|
||||
|
||||
#: .\cookbook\forms.py:343
|
||||
msgid ""
|
||||
"Fields to search for partial matches. (e.g. searching for 'Pie' will return "
|
||||
"'pie' and 'piece' and 'soapie')"
|
||||
msgstr ""
|
||||
"Fält att söka efter delvisa matchningar. (t.ex. att söka efter 'Pie' kommer "
|
||||
"att returnera 'pie' och 'piece' och 'soapie')"
|
||||
|
||||
#: .\cookbook\forms.py:344
|
||||
msgid ""
|
||||
"Fields to search for beginning of word matches. (e.g. searching for 'sa' "
|
||||
"will return 'salad' and 'sandwich')"
|
||||
msgstr ""
|
||||
"Fält att söka för matchningar i början av ord. (t.ex. att söka efter 'sa' "
|
||||
"kommer att returnera 'salad' och 'sandwich')"
|
||||
|
||||
#: .\cookbook\forms.py:345
|
||||
msgid ""
|
||||
"Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) "
|
||||
"Note: this option will conflict with 'web' and 'raw' methods of search."
|
||||
msgstr ""
|
||||
"Fält för 'fuzzy'-sökning. (t.ex. att söka efter 'recpie' kommer att hitta "
|
||||
"'recipe'.Observera: detta alternativet kommer att komma i konflikt med "
|
||||
"sökmetoderna 'web' och 'raw'.)"
|
||||
|
||||
#: .\cookbook\forms.py:346
|
||||
msgid ""
|
||||
"Fields to full text search. Note: 'web', 'phrase', and 'raw' search methods "
|
||||
"only function with fulltext fields."
|
||||
msgstr ""
|
||||
"Fält för fulltextsökning. Observera: Sökmetoderna 'web', 'phrase' och 'raw' "
|
||||
"fungerar endast med fulltextfält."
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
#, fuzzy
|
||||
#| msgid "Search"
|
||||
msgid "Search Method"
|
||||
msgstr "Sök"
|
||||
msgstr "Sök Metod"
|
||||
|
||||
#: .\cookbook\forms.py:350
|
||||
msgid "Fuzzy Lookups"
|
||||
@@ -211,22 +224,20 @@ msgid "Starts With"
|
||||
msgstr "Börjar med"
|
||||
|
||||
#: .\cookbook\forms.py:351
|
||||
#, fuzzy
|
||||
#| msgid "Search"
|
||||
msgid "Fuzzy Search"
|
||||
msgstr "Sök"
|
||||
msgstr "Fuzzy Sök"
|
||||
|
||||
#: .\cookbook\forms.py:351
|
||||
#, fuzzy
|
||||
#| msgid "Text"
|
||||
msgid "Full Text"
|
||||
msgstr "Text"
|
||||
msgstr "Hel Text"
|
||||
|
||||
#: .\cookbook\helper\AllAuthCustomAdapter.py:41
|
||||
msgid ""
|
||||
"In order to prevent spam, the requested email was not send. Please wait a "
|
||||
"few minutes and try again."
|
||||
msgstr ""
|
||||
"För att förhindra spam, så skickades inte den begärda e-posten. Vänta några "
|
||||
"minuter och försök igen."
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:164
|
||||
#: .\cookbook\helper\permission_helper.py:187 .\cookbook\views\views.py:117
|
||||
@@ -255,19 +266,19 @@ msgstr "Du kan inte interagera med detta objekt för att det ägs inte av dig!"
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:402
|
||||
msgid "You have reached the maximum number of recipes for your space."
|
||||
msgstr ""
|
||||
msgstr "Du har nått det maximala antalet recept för din utrymme."
|
||||
|
||||
#: .\cookbook\helper\permission_helper.py:414
|
||||
msgid "You have more users than allowed in your space."
|
||||
msgstr ""
|
||||
msgstr "Du har mer användare än tillåtet för ditt utrymme."
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:310
|
||||
msgid "reverse rotation"
|
||||
msgstr ""
|
||||
msgstr "återvänd rotering"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:311
|
||||
msgid "careful rotation"
|
||||
msgstr ""
|
||||
msgstr "försiktig rotering"
|
||||
|
||||
#: .\cookbook\helper\recipe_url_import.py:312
|
||||
msgid "knead"
|
||||
@@ -291,7 +302,7 @@ msgstr "sous-vide"
|
||||
|
||||
#: .\cookbook\helper\shopping_helper.py:150
|
||||
msgid "You must supply a servings size"
|
||||
msgstr ""
|
||||
msgstr "Du måste ange en portionstorlek"
|
||||
|
||||
#: .\cookbook\helper\template_helper.py:95
|
||||
#: .\cookbook\helper\template_helper.py:97
|
||||
@@ -305,7 +316,7 @@ msgstr "Favorit"
|
||||
|
||||
#: .\cookbook\integration\copymethat.py:50
|
||||
msgid "I made this"
|
||||
msgstr ""
|
||||
msgstr "Jag gjorde den här"
|
||||
|
||||
#: .\cookbook\integration\integration.py:209
|
||||
msgid ""
|
||||
@@ -319,6 +330,8 @@ msgid ""
|
||||
"An unexpected error occurred during the import. Please make sure you have "
|
||||
"uploaded a valid file."
|
||||
msgstr ""
|
||||
"Ett oväntat fel uppstod under importeringen. Se till att du har laddat upp "
|
||||
"en giltig fil."
|
||||
|
||||
#: .\cookbook\integration\integration.py:217
|
||||
msgid "The following recipes were ignored because they already existed:"
|
||||
@@ -330,10 +343,8 @@ msgid "Imported %s recipes."
|
||||
msgstr "Importerade %s recept."
|
||||
|
||||
#: .\cookbook\integration\openeats.py:28
|
||||
#, fuzzy
|
||||
#| msgid "Recipe Home"
|
||||
msgid "Recipe source:"
|
||||
msgstr "Recept Hem"
|
||||
msgstr "Recept källa:"
|
||||
|
||||
#: .\cookbook\integration\paprika.py:49
|
||||
msgid "Notes"
|
||||
@@ -374,23 +385,25 @@ msgstr "Sektion"
|
||||
|
||||
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
|
||||
msgid "Fixes foods with "
|
||||
msgstr ""
|
||||
msgstr "Korrigerar livsmedel med "
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:14
|
||||
msgid "Rebuilds full text search index on Recipe"
|
||||
msgstr ""
|
||||
msgstr "Återuppbygger fulltextsökningens index för Recept"
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:18
|
||||
msgid "Only Postgresql databases use full text search, no index to rebuild"
|
||||
msgstr ""
|
||||
"Endast Postgresql-databaser använder fulltextsökning, inget index att "
|
||||
"återuppbygga med"
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:29
|
||||
msgid "Recipe index rebuild complete."
|
||||
msgstr ""
|
||||
msgstr "Recept index återbyggning färdig."
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:31
|
||||
msgid "Recipe index rebuild failed."
|
||||
msgstr ""
|
||||
msgstr "Recept index återbyggning misslyckades."
|
||||
|
||||
#: .\cookbook\migrations\0047_auto_20200602_1133.py:14
|
||||
msgid "Breakfast"
|
||||
@@ -439,6 +452,8 @@ msgid ""
|
||||
"Maximum file storage for space in MB. 0 for unlimited, -1 to disable file "
|
||||
"upload."
|
||||
msgstr ""
|
||||
"Maximal lagringsutrymme för utrymme i MB. 0 för obegränsad, -1 för att "
|
||||
"inaktivera filuppladdning."
|
||||
|
||||
#: .\cookbook\models.py:454 .\cookbook\templates\search.html:7
|
||||
#: .\cookbook\templates\settings.html:18
|
||||
@@ -462,7 +477,7 @@ msgstr "Handla"
|
||||
|
||||
#: .\cookbook\models.py:752
|
||||
msgid " is part of a recipe step and cannot be deleted"
|
||||
msgstr ""
|
||||
msgstr " är en del av ett receptsteg och kan inte tas bort"
|
||||
|
||||
#: .\cookbook\models.py:918
|
||||
msgid "Nutrition"
|
||||
@@ -501,34 +516,24 @@ msgid "Food Alias"
|
||||
msgstr "Alternativt namn för mat"
|
||||
|
||||
#: .\cookbook\models.py:1468
|
||||
#, fuzzy
|
||||
#| msgid "Units"
|
||||
msgid "Unit Alias"
|
||||
msgstr "Enheter"
|
||||
msgstr "Enhetsalias"
|
||||
|
||||
#: .\cookbook\models.py:1469
|
||||
#, fuzzy
|
||||
#| msgid "Keywords"
|
||||
msgid "Keyword Alias"
|
||||
msgstr "Nyckelord"
|
||||
msgstr "Nyckelordsalias"
|
||||
|
||||
#: .\cookbook\models.py:1470
|
||||
#, fuzzy
|
||||
#| msgid "Description"
|
||||
msgid "Description Replace"
|
||||
msgstr "Beskrivning"
|
||||
msgstr "Beskrivning Ersätt"
|
||||
|
||||
#: .\cookbook\models.py:1471
|
||||
#, fuzzy
|
||||
#| msgid "Instructions"
|
||||
msgid "Instruction Replace"
|
||||
msgstr "Instruktioner"
|
||||
msgstr "Instruktioner Ersätt"
|
||||
|
||||
#: .\cookbook\models.py:1472
|
||||
#, fuzzy
|
||||
#| msgid "New Unit"
|
||||
msgid "Never Unit"
|
||||
msgstr "Ny enhet"
|
||||
msgstr "Aldrig Enhet"
|
||||
|
||||
#: .\cookbook\models.py:1473
|
||||
msgid "Transpose Words"
|
||||
@@ -539,10 +544,8 @@ msgid "Food Replace"
|
||||
msgstr "Ersätt mat"
|
||||
|
||||
#: .\cookbook\models.py:1475
|
||||
#, fuzzy
|
||||
#| msgid "Edit Recipe"
|
||||
msgid "Unit Replace"
|
||||
msgstr "Redigera recept"
|
||||
msgstr "Ersätt Enhet"
|
||||
|
||||
#: .\cookbook\models.py:1476
|
||||
msgid "Name Replace"
|
||||
@@ -2105,280 +2108,280 @@ msgstr "Visa hjälp"
|
||||
msgid "URL Import"
|
||||
msgstr "URL-import"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "Parameter updated_at felaktigt formaterad"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "Kan inte slås samman med samma objekt!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
#, fuzzy
|
||||
#| msgid "Cannot merge with the same object!"
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "Kan inte slås samman med samma objekt!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "The requested page could not be found."
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Sidan kunde inte hittas."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "Importering är inte implementerad för denna leverantör"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
#, fuzzy
|
||||
@@ -2386,11 +2389,11 @@ msgstr "Importering är inte implementerad för denna leverantör"
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "Denna funktion är inte tillgänglig i demoversionen!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Synkroniseringen lyckades!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "Fel vid synkronisering med lagring"
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-07-03 16:38+0000\n"
|
||||
"Last-Translator: Taylan TATLI <uyelik-tandoor@tatli.me>\n"
|
||||
"Language-Team: Turkish <http://translate.tandoor.dev/projects/tandoor/"
|
||||
@@ -1955,286 +1955,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,18 +7,18 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2023-04-12 11:55+0000\n"
|
||||
"Last-Translator: noxonad <noxonad@proton.me>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2025-01-16 18:58+0000\n"
|
||||
"Last-Translator: Anton Shevtsov <ashevtsovs@gmail.com>\n"
|
||||
"Language-Team: Ukrainian <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/uk/>\n"
|
||||
"Language: uk\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.8.4\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -32,51 +32,55 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\forms.py:62 .\cookbook\forms.py:246 .\cookbook\views\lists.py:103
|
||||
msgid "Keywords"
|
||||
msgstr ""
|
||||
msgstr "Ключові слова"
|
||||
|
||||
#: .\cookbook\forms.py:62
|
||||
msgid "Preparation time in minutes"
|
||||
msgstr ""
|
||||
msgstr "Час приготування у хвилинах"
|
||||
|
||||
#: .\cookbook\forms.py:62
|
||||
msgid "Waiting time (cooking/baking) in minutes"
|
||||
msgstr ""
|
||||
msgstr "Час очікування (варіння/випічка) у хвилинах"
|
||||
|
||||
#: .\cookbook\forms.py:63 .\cookbook\forms.py:222 .\cookbook\forms.py:246
|
||||
msgid "Path"
|
||||
msgstr ""
|
||||
msgstr "Шлях"
|
||||
|
||||
#: .\cookbook\forms.py:63
|
||||
msgid "Storage UID"
|
||||
msgstr ""
|
||||
msgstr "UID сховища"
|
||||
|
||||
#: .\cookbook\forms.py:93
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
msgstr "За замовчуванням"
|
||||
|
||||
#: .\cookbook\forms.py:121
|
||||
msgid ""
|
||||
"To prevent duplicates recipes with the same name as existing ones are "
|
||||
"ignored. Check this box to import everything."
|
||||
msgstr ""
|
||||
"Щоб запобігти дублюванням, рецепти з назвами, що вже існують, "
|
||||
"ігноруватимуться. Установіть цей прапорець, щоб імпортувати все."
|
||||
|
||||
#: .\cookbook\forms.py:143
|
||||
msgid "Add your comment: "
|
||||
msgstr ""
|
||||
msgstr "Додайте ваш коментар: "
|
||||
|
||||
#: .\cookbook\forms.py:151
|
||||
msgid "Leave empty for dropbox and enter app password for nextcloud."
|
||||
msgstr ""
|
||||
msgstr "Залиште порожнім для dropbox і введіть api ключі для nextcloud."
|
||||
|
||||
#: .\cookbook\forms.py:154
|
||||
msgid "Leave empty for nextcloud and enter api token for dropbox."
|
||||
msgstr ""
|
||||
msgstr "Залиште порожнім для nextcloud і введіть api ключі для dropbox."
|
||||
|
||||
#: .\cookbook\forms.py:160
|
||||
msgid ""
|
||||
"Leave empty for dropbox and enter only base url for nextcloud (<code>/remote."
|
||||
"php/webdav/</code> is added automatically)"
|
||||
msgstr ""
|
||||
"Залиште порожнім для dropbox і введіть лише базовий url для nextcloud "
|
||||
"(<code>/remote.php/webdav/</code> буде додано автоматично)"
|
||||
|
||||
#: .\cookbook\forms.py:188
|
||||
msgid ""
|
||||
@@ -937,13 +941,13 @@ msgstr ""
|
||||
#: .\cookbook\templates\ingredient_editor.html:7
|
||||
#: .\cookbook\templates\ingredient_editor.html:13
|
||||
msgid "Ingredient Editor"
|
||||
msgstr ""
|
||||
msgstr "Редактор Інгредієнтів"
|
||||
|
||||
#: .\cookbook\templates\base.html:275
|
||||
#: .\cookbook\templates\export_response.html:7
|
||||
#: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20
|
||||
msgid "Export"
|
||||
msgstr ""
|
||||
msgstr "Експорт"
|
||||
|
||||
#: .\cookbook\templates\base.html:287
|
||||
msgid "Properties"
|
||||
@@ -1936,286 +1940,286 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2020-06-02 19:28+0000\n"
|
||||
"Last-Translator: Hieu, 2021\n"
|
||||
"Language-Team: Vietnamese (https://www.transifex.com/django-recipes/"
|
||||
@@ -2025,288 +2025,288 @@ msgstr ""
|
||||
msgid "URL Import"
|
||||
msgstr "Nhập URL"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "The requested page could not be found."
|
||||
msgid "No usable data could be found."
|
||||
msgstr "Không thể tìm thấy trang được yêu cầu."
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "Đồng bộ thành công!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,9 +7,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"PO-Revision-Date: 2024-02-15 03:19+0000\n"
|
||||
"Last-Translator: dalan <xzdlj@outlook.com>\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: 2024-11-04 10:29+0000\n"
|
||||
"Last-Translator: Johnny Ip <ip.iohnny@gmail.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <http://translate.tandoor.dev/projects/"
|
||||
"tandoor/recipes-backend/zh_Hans/>\n"
|
||||
"Language: zh_CN\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.15\n"
|
||||
"X-Generator: Weblate 5.6.2\n"
|
||||
|
||||
#: .\cookbook\forms.py:45
|
||||
msgid ""
|
||||
@@ -86,14 +86,16 @@ msgid ""
|
||||
"<a href=\"https://www.home-assistant.io/docs/authentication/#your-account-"
|
||||
"profile\">Long Lived Access Token</a> for your HomeAssistant instance"
|
||||
msgstr ""
|
||||
"您的HomeAssistant示例的<a href=\"https://www.home-assistant.io/docs/"
|
||||
"authentication/#your-account-profile\">长期访问令牌</a>"
|
||||
|
||||
#: .\cookbook\forms.py:193
|
||||
msgid "Something like http://homeassistant.local:8123/api"
|
||||
msgstr ""
|
||||
msgstr "形如 http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:205
|
||||
msgid "http://homeassistant.local:8123/api for example"
|
||||
msgstr ""
|
||||
msgstr "例如 http://homeassistant.local:8123/api"
|
||||
|
||||
#: .\cookbook\forms.py:222 .\cookbook\views\edit.py:117
|
||||
msgid "Storage"
|
||||
@@ -356,7 +358,7 @@ msgstr "准备时间"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:29 .\cookbook\templates\index.html:7
|
||||
msgid "Cookbook"
|
||||
msgstr "菜谱"
|
||||
msgstr "烹饪手册"
|
||||
|
||||
#: .\cookbook\integration\saffron.py:31
|
||||
msgid "Section"
|
||||
@@ -364,7 +366,7 @@ msgstr "部分"
|
||||
|
||||
#: .\cookbook\management\commands\fix_duplicate_properties.py:15
|
||||
msgid "Fixes foods with "
|
||||
msgstr ""
|
||||
msgstr "修复食谱中的重复字段 "
|
||||
|
||||
#: .\cookbook\management\commands\rebuildindex.py:14
|
||||
msgid "Rebuilds full text search index on Recipe"
|
||||
@@ -400,29 +402,29 @@ msgstr "其他"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
msgid "Fat"
|
||||
msgstr ""
|
||||
msgstr "脂肪"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:17
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
|
||||
msgid "g"
|
||||
msgstr ""
|
||||
msgstr "克"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:18
|
||||
msgid "Carbohydrates"
|
||||
msgstr ""
|
||||
msgstr "碳水化合物"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:19
|
||||
msgid "Proteins"
|
||||
msgstr ""
|
||||
msgstr "蛋白质"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:20
|
||||
msgid "Calories"
|
||||
msgstr ""
|
||||
msgstr "卡路里"
|
||||
|
||||
#: .\cookbook\migrations\0190_auto_20230525_1506.py:20
|
||||
msgid "kcal"
|
||||
msgstr ""
|
||||
msgstr "千卡"
|
||||
|
||||
#: .\cookbook\models.py:325
|
||||
msgid ""
|
||||
@@ -443,7 +445,7 @@ msgstr "膳食计划"
|
||||
#: .\cookbook\models.py:456 .\cookbook\templates\base.html:122
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "Books"
|
||||
msgstr "书籍"
|
||||
msgstr "烹饪手册"
|
||||
|
||||
#: .\cookbook\models.py:457 .\cookbook\templates\base.html:118
|
||||
#: .\cookbook\views\views.py:460
|
||||
@@ -455,24 +457,20 @@ msgid " is part of a recipe step and cannot be deleted"
|
||||
msgstr " 是菜谱步骤的一部分,不能删除"
|
||||
|
||||
#: .\cookbook\models.py:918
|
||||
#, fuzzy
|
||||
#| msgid "Automations"
|
||||
msgid "Nutrition"
|
||||
msgstr "自动化"
|
||||
msgstr "营养"
|
||||
|
||||
#: .\cookbook\models.py:918
|
||||
#, fuzzy
|
||||
#| msgid "Merge"
|
||||
msgid "Allergen"
|
||||
msgstr "合并"
|
||||
msgstr "过敏原"
|
||||
|
||||
#: .\cookbook\models.py:919
|
||||
msgid "Price"
|
||||
msgstr ""
|
||||
msgstr "价格"
|
||||
|
||||
#: .\cookbook\models.py:919
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
msgstr "目标"
|
||||
|
||||
#: .\cookbook\models.py:1408 .\cookbook\templates\search_info.html:28
|
||||
msgid "Simple"
|
||||
@@ -511,30 +509,24 @@ msgid "Instruction Replace"
|
||||
msgstr "指示"
|
||||
|
||||
#: .\cookbook\models.py:1472
|
||||
#, fuzzy
|
||||
#| msgid "New Unit"
|
||||
msgid "Never Unit"
|
||||
msgstr "新单位"
|
||||
msgstr "禁用单位识别"
|
||||
|
||||
#: .\cookbook\models.py:1473
|
||||
msgid "Transpose Words"
|
||||
msgstr ""
|
||||
msgstr "字符串转置"
|
||||
|
||||
#: .\cookbook\models.py:1474
|
||||
#, fuzzy
|
||||
#| msgid "Food Alias"
|
||||
msgid "Food Replace"
|
||||
msgstr "食物别名"
|
||||
msgstr "食物替换"
|
||||
|
||||
#: .\cookbook\models.py:1475
|
||||
#, fuzzy
|
||||
#| msgid "Description Replace"
|
||||
msgid "Unit Replace"
|
||||
msgstr "描述"
|
||||
msgstr "单位替换"
|
||||
|
||||
#: .\cookbook\models.py:1476
|
||||
msgid "Name Replace"
|
||||
msgstr ""
|
||||
msgstr "名称替换"
|
||||
|
||||
#: .\cookbook\models.py:1503 .\cookbook\views\delete.py:40
|
||||
#: .\cookbook\views\edit.py:210 .\cookbook\views\new.py:39
|
||||
@@ -571,7 +563,7 @@ msgstr "您已被邀请至 "
|
||||
|
||||
#: .\cookbook\serializer.py:1272
|
||||
msgid " to join their Tandoor Recipes space "
|
||||
msgstr " 加入他们的泥炉食谱空间 "
|
||||
msgstr " 加入他们的 Tandoor 食谱空间 "
|
||||
|
||||
#: .\cookbook\serializer.py:1274
|
||||
msgid "Click the following link to activate your account: "
|
||||
@@ -589,11 +581,11 @@ msgstr "邀请有效期至 "
|
||||
#: .\cookbook\serializer.py:1280
|
||||
msgid ""
|
||||
"Tandoor Recipes is an Open Source recipe manager. Check it out on GitHub "
|
||||
msgstr "泥炉食谱是一个开源食谱管理器。 在 GitHub 上查看 "
|
||||
msgstr "Tandoor 是一个开源食谱管理器。 在 GitHub 上查看 "
|
||||
|
||||
#: .\cookbook\serializer.py:1283
|
||||
msgid "Tandoor Recipes Invite"
|
||||
msgstr "泥炉食谱邀请"
|
||||
msgstr "Tandoor 食谱邀请"
|
||||
|
||||
#: .\cookbook\serializer.py:1426
|
||||
msgid "Existing shopping list to update"
|
||||
@@ -979,13 +971,11 @@ msgstr "导出"
|
||||
|
||||
#: .\cookbook\templates\base.html:287
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
msgstr "属性"
|
||||
|
||||
#: .\cookbook\templates\base.html:301 .\cookbook\views\lists.py:255
|
||||
#, fuzzy
|
||||
#| msgid "Account Connections"
|
||||
msgid "Unit Conversions"
|
||||
msgstr "帐号连接"
|
||||
msgstr "单位转换"
|
||||
|
||||
#: .\cookbook\templates\base.html:318 .\cookbook\templates\index.html:47
|
||||
msgid "Import Recipe"
|
||||
@@ -1005,10 +995,8 @@ msgid "Space Settings"
|
||||
msgstr "空间设置"
|
||||
|
||||
#: .\cookbook\templates\base.html:340
|
||||
#, fuzzy
|
||||
#| msgid "External Recipes"
|
||||
msgid "External Connectors"
|
||||
msgstr "外部菜谱"
|
||||
msgstr "外部连接器"
|
||||
|
||||
#: .\cookbook\templates\base.html:345 .\cookbook\templates\system.html:13
|
||||
msgid "System"
|
||||
@@ -1038,7 +1026,7 @@ msgstr "GitHub"
|
||||
|
||||
#: .\cookbook\templates\base.html:376
|
||||
msgid "Translate Tandoor"
|
||||
msgstr "翻译泥炉"
|
||||
msgstr "翻译 Tandoor"
|
||||
|
||||
#: .\cookbook\templates\base.html:380
|
||||
msgid "API Browser"
|
||||
@@ -1050,7 +1038,7 @@ msgstr "退出"
|
||||
|
||||
#: .\cookbook\templates\base.html:406
|
||||
msgid "You are using the free version of Tandor"
|
||||
msgstr "你正在使用免费版的泥炉"
|
||||
msgstr "你正在使用免费版的 Tandoor"
|
||||
|
||||
#: .\cookbook\templates\base.html:407
|
||||
msgid "Upgrade Now"
|
||||
@@ -1123,7 +1111,7 @@ msgstr "这可能需要几分钟,取决于同步的菜谱数量,请等待。
|
||||
|
||||
#: .\cookbook\templates\books.html:7
|
||||
msgid "Recipe Books"
|
||||
msgstr "菜谱书"
|
||||
msgstr "烹饪手册"
|
||||
|
||||
#: .\cookbook\templates\export.html:7 .\cookbook\templates\test2.html:6
|
||||
msgid "Export Recipes"
|
||||
@@ -1453,10 +1441,8 @@ msgid "Back"
|
||||
msgstr "返回"
|
||||
|
||||
#: .\cookbook\templates\property_editor.html:7
|
||||
#, fuzzy
|
||||
#| msgid "Ingredient Editor"
|
||||
msgid "Property Editor"
|
||||
msgstr "食材编辑器"
|
||||
msgstr "属性编辑器"
|
||||
|
||||
#: .\cookbook\templates\recipe_view.html:36
|
||||
msgid "Comments"
|
||||
@@ -1770,7 +1756,7 @@ msgstr "非常适合大型数据库"
|
||||
|
||||
#: .\cookbook\templates\setup.html:6 .\cookbook\templates\system.html:5
|
||||
msgid "Cookbook Setup"
|
||||
msgstr "安装菜谱"
|
||||
msgstr "安装菜谱应用"
|
||||
|
||||
#: .\cookbook\templates\setup.html:14
|
||||
msgid "Setup"
|
||||
@@ -1879,10 +1865,8 @@ msgid "Sign in using"
|
||||
msgstr "登录使用"
|
||||
|
||||
#: .\cookbook\templates\space_manage.html:7
|
||||
#, fuzzy
|
||||
#| msgid "Space Membership"
|
||||
msgid "Space Management"
|
||||
msgstr "成员"
|
||||
msgstr "空间管理"
|
||||
|
||||
#: .\cookbook\templates\space_manage.html:26
|
||||
msgid "Space:"
|
||||
@@ -1974,6 +1958,10 @@ msgid ""
|
||||
"script to generate version information (done automatically in docker).\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" 您需要在您的更新脚本中执行 <code>version.py</code> "
|
||||
"生成版本信息(Docker实例中会自动执行)。\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:46
|
||||
msgid "Media Serving"
|
||||
@@ -2000,9 +1988,11 @@ msgid ""
|
||||
" your installation.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<b>不推荐</b> 使用 gunicorn/python 提供媒体文件。\n"
|
||||
" 请按照 <a href=\"https://github.com/vabene1111/recipes/releases/"
|
||||
"tag/0.8.1\">这里</a> 描述的步骤操作更新安装。\n"
|
||||
"<b>不推荐</b> 使用 gunicorn/python 提供媒体文件!\n"
|
||||
" 请按照\n"
|
||||
" <a href=\"https://github.com/vabene1111/recipes/releases/tag/0.8."
|
||||
"1\">这里</a> 描述的步骤\n"
|
||||
" 操作更新安装。\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:55 .\cookbook\templates\system.html:70
|
||||
@@ -2057,7 +2047,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\system.html:86
|
||||
msgid "Allowed Hosts"
|
||||
msgstr ""
|
||||
msgstr "域名白名单"
|
||||
|
||||
#: .\cookbook\templates\system.html:90
|
||||
msgid ""
|
||||
@@ -2067,6 +2057,10 @@ msgid ""
|
||||
"this.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" 您未配置域名白名单,本实例可以通过任意域名访问,某些特殊情况下可"
|
||||
"能有用,但请尽量避免这样配置,请参考文档配置 ALLOWED_HOSTS 。\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:97
|
||||
msgid "Database"
|
||||
@@ -2077,10 +2071,8 @@ msgid "Info"
|
||||
msgstr "信息"
|
||||
|
||||
#: .\cookbook\templates\system.html:110 .\cookbook\templates\system.html:127
|
||||
#, fuzzy
|
||||
#| msgid "Use fractions"
|
||||
msgid "Migrations"
|
||||
msgstr "使用分数"
|
||||
msgstr "数据库结构变更"
|
||||
|
||||
#: .\cookbook\templates\system.html:116
|
||||
msgid ""
|
||||
@@ -2093,323 +2085,317 @@ msgid ""
|
||||
"issue.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" 正常情况下数据库迁移不应产生任何报错!\n"
|
||||
" 数据库迁移失败很可能导致本应用的功能出错或完全不可用。\n"
|
||||
" 如果您在最新版本上数据库迁移依然产生错误,"
|
||||
"请将数据库迁移日志和页面下方的信息反馈至 Github Issue 中。\n"
|
||||
" "
|
||||
|
||||
#: .\cookbook\templates\system.html:182
|
||||
msgid "False"
|
||||
msgstr ""
|
||||
msgstr "否"
|
||||
|
||||
#: .\cookbook\templates\system.html:182
|
||||
msgid "True"
|
||||
msgstr ""
|
||||
msgstr "是"
|
||||
|
||||
#: .\cookbook\templates\system.html:207
|
||||
msgid "Hide"
|
||||
msgstr ""
|
||||
msgstr "隐藏"
|
||||
|
||||
#: .\cookbook\templates\system.html:210
|
||||
#, fuzzy
|
||||
#| msgid "Show Log"
|
||||
msgid "Show"
|
||||
msgstr "显示记录"
|
||||
msgstr "显示"
|
||||
|
||||
#: .\cookbook\templates\url_import.html:8
|
||||
msgid "URL Import"
|
||||
msgstr "链接导入"
|
||||
|
||||
#: .\cookbook\views\api.py:121 .\cookbook\views\api.py:214
|
||||
#: .\cookbook\views\api.py:120 .\cookbook\views\api.py:213
|
||||
msgid "Parameter updated_at incorrectly formatted"
|
||||
msgstr "参数 updated_at 格式不正确"
|
||||
|
||||
#: .\cookbook\views\api.py:235 .\cookbook\views\api.py:341
|
||||
#: .\cookbook\views\api.py:234 .\cookbook\views\api.py:340
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {pk} exists"
|
||||
msgstr "不存在ID是 {pk} 的 {self.basename}"
|
||||
|
||||
#: .\cookbook\views\api.py:239
|
||||
#: .\cookbook\views\api.py:238
|
||||
msgid "Cannot merge with the same object!"
|
||||
msgstr "无法与同一对象合并!"
|
||||
|
||||
#: .\cookbook\views\api.py:246
|
||||
#: .\cookbook\views\api.py:245
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {target} exists"
|
||||
msgstr "不存在 ID 为 {target} 的 {self.basename}"
|
||||
|
||||
#: .\cookbook\views\api.py:251
|
||||
#: .\cookbook\views\api.py:250
|
||||
msgid "Cannot merge with child object!"
|
||||
msgstr "无法与子对象合并!"
|
||||
|
||||
#: .\cookbook\views\api.py:289
|
||||
#: .\cookbook\views\api.py:288
|
||||
#, python-brace-format
|
||||
msgid "{source.name} was merged successfully with {target.name}"
|
||||
msgstr "{source.name} 已成功与 {target.name} 合并"
|
||||
|
||||
#: .\cookbook\views\api.py:294
|
||||
#: .\cookbook\views\api.py:293
|
||||
#, python-brace-format
|
||||
msgid "An error occurred attempting to merge {source.name} with {target.name}"
|
||||
msgstr "视图合并 {source.name} 和 {target.name} 时出错"
|
||||
|
||||
#: .\cookbook\views\api.py:350
|
||||
#: .\cookbook\views\api.py:349
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to the root."
|
||||
msgstr "{child.name} 已成功移动到根目录。"
|
||||
|
||||
#: .\cookbook\views\api.py:353 .\cookbook\views\api.py:371
|
||||
#: .\cookbook\views\api.py:352 .\cookbook\views\api.py:370
|
||||
msgid "An error occurred attempting to move "
|
||||
msgstr "尝试移动时出错 "
|
||||
|
||||
#: .\cookbook\views\api.py:356
|
||||
#: .\cookbook\views\api.py:355
|
||||
msgid "Cannot move an object to itself!"
|
||||
msgstr "无法将对象移动到自身!"
|
||||
|
||||
#: .\cookbook\views\api.py:362
|
||||
#: .\cookbook\views\api.py:361
|
||||
#, python-brace-format
|
||||
msgid "No {self.basename} with id {parent} exists"
|
||||
msgstr "不存在 ID 为 {parent} 的 {self.basename}"
|
||||
|
||||
#: .\cookbook\views\api.py:368
|
||||
#: .\cookbook\views\api.py:367
|
||||
#, python-brace-format
|
||||
msgid "{child.name} was moved successfully to parent {parent.name}"
|
||||
msgstr "{child.name} 成功移动到父节点 {parent.name}"
|
||||
|
||||
#: .\cookbook\views\api.py:590
|
||||
#: .\cookbook\views\api.py:589
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was removed from the shopping list."
|
||||
msgstr "{obj.name} 已从购物清单中删除。"
|
||||
|
||||
#: .\cookbook\views\api.py:595 .\cookbook\views\api.py:1038
|
||||
#: .\cookbook\views\api.py:1051
|
||||
#: .\cookbook\views\api.py:594 .\cookbook\views\api.py:1037
|
||||
#: .\cookbook\views\api.py:1050
|
||||
#, python-brace-format
|
||||
msgid "{obj.name} was added to the shopping list."
|
||||
msgstr "{obj.name} 已添加到购物清单中。"
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
#: .\cookbook\views\api.py:742
|
||||
msgid "Filter meal plans from date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
msgstr "指定开始日期以过滤膳食计划(包含选择的日期),日期格式为 YYYY-MM-DD。"
|
||||
|
||||
#: .\cookbook\views\api.py:743
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr "指定结束日期以过滤膳食计划(包含选择的日期),日期格式为 YYYY-MM-DD。"
|
||||
|
||||
#: .\cookbook\views\api.py:744
|
||||
msgid "Filter meal plans to date (inclusive) in the format of YYYY-MM-DD."
|
||||
msgstr ""
|
||||
|
||||
#: .\cookbook\views\api.py:745
|
||||
#, fuzzy
|
||||
#| msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgid "Filter meal plans with MealType ID. For multiple repeat parameter."
|
||||
msgstr "食谱中的步骤ID。 对于多个重复参数。"
|
||||
msgstr "指定 MealType ID 以过滤膳食计划,重复此参数以选择多个对象。"
|
||||
|
||||
#: .\cookbook\views\api.py:873
|
||||
#: .\cookbook\views\api.py:872
|
||||
msgid "ID of recipe a step is part of. For multiple repeat parameter."
|
||||
msgstr "食谱中的步骤ID。 对于多个重复参数。"
|
||||
|
||||
#: .\cookbook\views\api.py:874
|
||||
#: .\cookbook\views\api.py:873
|
||||
msgid "Query string matched (fuzzy) against object name."
|
||||
msgstr "请求参数与对象名称匹配(模糊)。"
|
||||
|
||||
#: .\cookbook\views\api.py:910
|
||||
#: .\cookbook\views\api.py:909
|
||||
msgid ""
|
||||
"Query string matched (fuzzy) against recipe name. In the future also "
|
||||
"fulltext search."
|
||||
msgstr "请求参数与食谱名称匹配(模糊)。 未来会添加全文搜索。"
|
||||
|
||||
#: .\cookbook\views\api.py:911
|
||||
#: .\cookbook\views\api.py:910
|
||||
msgid ""
|
||||
"ID of keyword a recipe should have. For multiple repeat parameter. "
|
||||
"Equivalent to keywords_or"
|
||||
msgstr "菜谱应包含的关键字 ID。 对于多个重复参数。 相当于keywords_or"
|
||||
|
||||
#: .\cookbook\views\api.py:912
|
||||
#: .\cookbook\views\api.py:911
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with any of the keywords"
|
||||
msgstr "允许多个关键字 ID。 返回带有任一关键字的食谱"
|
||||
|
||||
#: .\cookbook\views\api.py:913
|
||||
#: .\cookbook\views\api.py:912
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Return recipes with all of the keywords."
|
||||
msgstr "允许多个关键字 ID。 返回带有所有关键字的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:914
|
||||
#: .\cookbook\views\api.py:913
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords."
|
||||
msgstr "允许多个关键字 ID。 排除带有任一关键字的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:915
|
||||
#: .\cookbook\views\api.py:914
|
||||
msgid ""
|
||||
"Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords."
|
||||
msgstr "允许多个关键字 ID。 排除带有所有关键字的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:916
|
||||
#: .\cookbook\views\api.py:915
|
||||
msgid "ID of food a recipe should have. For multiple repeat parameter."
|
||||
msgstr "食谱中食物带有ID。并可添加多个食物。"
|
||||
|
||||
#: .\cookbook\views\api.py:917
|
||||
#: .\cookbook\views\api.py:916
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with any of the foods"
|
||||
msgstr "食谱中食物带有ID。并可添加多个食物"
|
||||
|
||||
#: .\cookbook\views\api.py:918
|
||||
#: .\cookbook\views\api.py:917
|
||||
msgid "Food IDs, repeat for multiple. Return recipes with all of the foods."
|
||||
msgstr "食谱中食物带有ID。返回包含任何食物的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:919
|
||||
#: .\cookbook\views\api.py:918
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods."
|
||||
msgstr "食谱中食物带有ID。排除包含任一食物的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:920
|
||||
#: .\cookbook\views\api.py:919
|
||||
msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods."
|
||||
msgstr "食谱中食物带有ID。排除包含所有食物的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:921
|
||||
#: .\cookbook\views\api.py:920
|
||||
msgid "ID of unit a recipe should have."
|
||||
msgstr "食谱应具有单一ID。"
|
||||
|
||||
#: .\cookbook\views\api.py:922
|
||||
#: .\cookbook\views\api.py:921
|
||||
msgid ""
|
||||
"Rating a recipe should have or greater. [0 - 5] Negative value filters "
|
||||
"rating less than."
|
||||
msgstr "配方的评分范围从 0 到 5。"
|
||||
|
||||
#: .\cookbook\views\api.py:923
|
||||
#: .\cookbook\views\api.py:922
|
||||
msgid "ID of book a recipe should be in. For multiple repeat parameter."
|
||||
msgstr "烹饪书应该在食谱中具有ID。并且可以添加多本。"
|
||||
|
||||
#: .\cookbook\views\api.py:924
|
||||
#: .\cookbook\views\api.py:923
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with any of the books"
|
||||
msgstr "书的ID允许多个。返回包含任一书籍的食谱"
|
||||
|
||||
#: .\cookbook\views\api.py:925
|
||||
#: .\cookbook\views\api.py:924
|
||||
msgid "Book IDs, repeat for multiple. Return recipes with all of the books."
|
||||
msgstr "书的ID允许多个。返回包含所有书籍的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:926
|
||||
#: .\cookbook\views\api.py:925
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with any of the books."
|
||||
msgstr "书的ID允许多个。排除包含任一书籍的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:927
|
||||
#: .\cookbook\views\api.py:926
|
||||
msgid "Book IDs, repeat for multiple. Exclude recipes with all of the books."
|
||||
msgstr "书的ID允许多个。排除包含所有书籍的食谱。"
|
||||
|
||||
#: .\cookbook\views\api.py:928
|
||||
#: .\cookbook\views\api.py:927
|
||||
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
|
||||
msgstr "只返回内部食谱。 [true/<b>false</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:929
|
||||
#: .\cookbook\views\api.py:928
|
||||
msgid "Returns the results in randomized order. [true/<b>false</b>]"
|
||||
msgstr "按随机排序返回结果。 [true/<b> false </b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:930
|
||||
#: .\cookbook\views\api.py:929
|
||||
msgid "Returns new results first in search results. [true/<b>false</b>]"
|
||||
msgstr "在搜索结果中首先返回新结果。 [是/<b>否</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:931
|
||||
#: .\cookbook\views\api.py:930
|
||||
msgid ""
|
||||
"Filter recipes cooked X times or more. Negative values returns cooked less "
|
||||
"than X times"
|
||||
msgstr "筛选烹饪 X 次或更多次的食谱。 负值返回烹饪少于 X 次"
|
||||
|
||||
#: .\cookbook\views\api.py:932
|
||||
#: .\cookbook\views\api.py:931
|
||||
msgid ""
|
||||
"Filter recipes last cooked on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
"筛选最后烹饪在 YYYY-MM-DD 当天或之后的食谱。 前置 - 在日期或日期之前筛选。"
|
||||
|
||||
#: .\cookbook\views\api.py:933
|
||||
#: .\cookbook\views\api.py:932
|
||||
msgid ""
|
||||
"Filter recipes created on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr "筛选在 YYYY-MM-DD 或之后创建的食谱。 前置 - 在日期或日期之前过滤。"
|
||||
|
||||
#: .\cookbook\views\api.py:934
|
||||
#: .\cookbook\views\api.py:933
|
||||
msgid ""
|
||||
"Filter recipes updated on or after YYYY-MM-DD. Prepending - filters on or "
|
||||
"before date."
|
||||
msgstr "筛选在 YYYY-MM-DD 或之后更新的食谱。 前置 - 在日期或日期之前筛选。"
|
||||
|
||||
#: .\cookbook\views\api.py:935
|
||||
#: .\cookbook\views\api.py:934
|
||||
msgid ""
|
||||
"Filter recipes lasts viewed on or after YYYY-MM-DD. Prepending - filters on "
|
||||
"or before date."
|
||||
msgstr ""
|
||||
"筛选最后查看时间是在 YYYY-MM-DD 或之后的食谱。 前置 - 在日期或日期之前筛选。"
|
||||
|
||||
#: .\cookbook\views\api.py:936
|
||||
#: .\cookbook\views\api.py:935
|
||||
msgid "Filter recipes that can be made with OnHand food. [true/<b>false</b>]"
|
||||
msgstr "筛选可以直接用手制作的食谱。 [真/<b>假</b>]"
|
||||
|
||||
#: .\cookbook\views\api.py:1123
|
||||
#: .\cookbook\views\api.py:1122
|
||||
msgid ""
|
||||
"Returns the shopping list entry with a primary key of id. Multiple values "
|
||||
"allowed."
|
||||
msgstr "返回主键为 id 的购物清单条目。 允许多个值。"
|
||||
|
||||
#: .\cookbook\views\api.py:1126
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
#| "b>]<br> - recent includes unchecked items and recently completed items."
|
||||
#: .\cookbook\views\api.py:1125
|
||||
msgid ""
|
||||
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
|
||||
"b>]<br> - recent includes unchecked items and recently "
|
||||
"completed items."
|
||||
msgstr ""
|
||||
"在选中时筛选购物清单列表。 [真, 假, 两者都有, <b>最近</b>]<br> - 最近包括未"
|
||||
"选中的项目和最近完成的项目。"
|
||||
"勾选并筛选购物清单列表。 [真, 假, 两者都有, <b>最近</b>]"
|
||||
"<br> - 最近包括未选中的项目和最近完成的项目。"
|
||||
|
||||
#: .\cookbook\views\api.py:1129
|
||||
#: .\cookbook\views\api.py:1128
|
||||
msgid "Returns the shopping list entries sorted by supermarket category order."
|
||||
msgstr "返回按超市分类排序的购物清单列表。"
|
||||
|
||||
#: .\cookbook\views\api.py:1211
|
||||
#: .\cookbook\views\api.py:1210
|
||||
msgid "Filter for entries with the given recipe"
|
||||
msgstr ""
|
||||
msgstr "筛选包含所选食谱的对象"
|
||||
|
||||
#: .\cookbook\views\api.py:1293
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Returns the shopping list entry with a primary key of id. Multiple "
|
||||
#| "values allowed."
|
||||
#: .\cookbook\views\api.py:1292
|
||||
msgid ""
|
||||
"Return the Automations matching the automation type. Multiple values "
|
||||
"allowed."
|
||||
msgstr "返回主键为 id 的购物清单条目。 允许多个值。"
|
||||
msgstr "返回与自动化类型相匹配的自动化条目。 允许多个值。"
|
||||
|
||||
#: .\cookbook\views\api.py:1416
|
||||
#: .\cookbook\views\api.py:1415
|
||||
msgid "Nothing to do."
|
||||
msgstr "无事可做。"
|
||||
|
||||
#: .\cookbook\views\api.py:1443
|
||||
#: .\cookbook\views\api.py:1445
|
||||
msgid "Invalid Url"
|
||||
msgstr "无效网址"
|
||||
|
||||
#: .\cookbook\views\api.py:1447
|
||||
#: .\cookbook\views\api.py:1449
|
||||
msgid "Connection Refused."
|
||||
msgstr "连接被拒绝。"
|
||||
|
||||
#: .\cookbook\views\api.py:1449
|
||||
#: .\cookbook\views\api.py:1451
|
||||
msgid "Bad URL Schema."
|
||||
msgstr "错误的 URL Schema。"
|
||||
|
||||
#: .\cookbook\views\api.py:1472
|
||||
#: .\cookbook\views\api.py:1474
|
||||
msgid "No usable data could be found."
|
||||
msgstr "找不到可用的数据。"
|
||||
|
||||
#: .\cookbook\views\api.py:1547
|
||||
#: .\cookbook\views\api.py:1549
|
||||
msgid "File is above space limit"
|
||||
msgstr ""
|
||||
msgstr "文件大小超出空间限值"
|
||||
|
||||
#: .\cookbook\views\api.py:1564 .\cookbook\views\import_export.py:114
|
||||
#: .\cookbook\views\api.py:1566 .\cookbook\views\import_export.py:114
|
||||
msgid "Importing is not implemented for this provider"
|
||||
msgstr "此提供程序未实现导入"
|
||||
|
||||
#: .\cookbook\views\api.py:1648 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\api.py:1650 .\cookbook\views\data.py:30
|
||||
#: .\cookbook\views\edit.py:88 .\cookbook\views\new.py:63
|
||||
#: .\cookbook\views\new.py:82
|
||||
msgid "This feature is not yet available in the hosted version of tandoor!"
|
||||
msgstr "此功能在泥炉的托管版本中尚不可用!"
|
||||
msgstr "此功能在 Tandoor 的托管版本中尚不可用!"
|
||||
|
||||
#: .\cookbook\views\api.py:1669
|
||||
#: .\cookbook\views\api.py:1671
|
||||
msgid "Sync successful!"
|
||||
msgstr "同步成功!"
|
||||
|
||||
#: .\cookbook\views\api.py:1672
|
||||
#: .\cookbook\views\api.py:1674
|
||||
msgid "Error synchronizing with Storage"
|
||||
msgstr "与存储同步时出错"
|
||||
|
||||
@@ -2434,10 +2420,8 @@ msgid ""
|
||||
msgstr "无法删除此存储后端,因为它至少在一台显示器中使用。"
|
||||
|
||||
#: .\cookbook\views\delete.py:135
|
||||
#, fuzzy
|
||||
#| msgid "Storage Backend"
|
||||
msgid "Connectors Config Backend"
|
||||
msgstr "存储后端"
|
||||
msgstr "连接器后端配置"
|
||||
|
||||
#: .\cookbook\views\delete.py:157
|
||||
msgid "Invite Link"
|
||||
@@ -2460,14 +2444,12 @@ msgid "There was an error updating this storage backend!"
|
||||
msgstr "更新此存储后端时出错!"
|
||||
|
||||
#: .\cookbook\views\edit.py:134
|
||||
#, fuzzy
|
||||
#| msgid "Changes saved!"
|
||||
msgid "Config saved!"
|
||||
msgstr "更改已保存!"
|
||||
msgstr "配置已保存!"
|
||||
|
||||
#: .\cookbook\views\edit.py:142
|
||||
msgid "ConnectorConfig"
|
||||
msgstr ""
|
||||
msgstr "连接器配置"
|
||||
|
||||
#: .\cookbook\views\edit.py:198
|
||||
msgid "Changes saved!"
|
||||
@@ -2496,10 +2478,8 @@ msgid "Shopping List"
|
||||
msgstr "采购单"
|
||||
|
||||
#: .\cookbook\views\lists.py:77 .\cookbook\views\new.py:98
|
||||
#, fuzzy
|
||||
#| msgid "Storage Backend"
|
||||
msgid "Connector Config Backend"
|
||||
msgstr "存储后端"
|
||||
msgstr "连接器后端配置"
|
||||
|
||||
#: .\cookbook\views\lists.py:91
|
||||
msgid "Invite Links"
|
||||
@@ -2523,13 +2503,11 @@ msgstr "步骤"
|
||||
|
||||
#: .\cookbook\views\lists.py:270
|
||||
msgid "Property Types"
|
||||
msgstr ""
|
||||
msgstr "属性类型"
|
||||
|
||||
#: .\cookbook\views\new.py:86
|
||||
#, fuzzy
|
||||
#| msgid "This feature is not available in the demo version!"
|
||||
msgid "This feature is not enabled by the server admin!"
|
||||
msgstr "此功能在演示版本中不可用!"
|
||||
msgstr "此功能被服务器管理员禁用!"
|
||||
|
||||
#: .\cookbook\views\new.py:123
|
||||
msgid "Imported new recipe!"
|
||||
@@ -2545,11 +2523,9 @@ msgid "This feature is not available in the demo version!"
|
||||
msgstr "此功能在演示版本中不可用!"
|
||||
|
||||
#: .\cookbook\views\views.py:74
|
||||
#, fuzzy
|
||||
#| msgid "You have reached the maximum number of recipes for your space."
|
||||
msgid ""
|
||||
"You have the reached the maximum amount of spaces that can be owned by you."
|
||||
msgstr "你已经达到了空间的菜谱的最大数量。"
|
||||
msgstr "你拥有的空间数量已经达到上限。"
|
||||
|
||||
#: .\cookbook\views\views.py:89
|
||||
msgid ""
|
||||
@@ -2582,48 +2558,32 @@ msgstr "模糊搜索与此搜索方法不兼容!"
|
||||
#: .\cookbook\views\views.py:306
|
||||
#, python-format
|
||||
msgid "PostgreSQL %(v)s is deprecated. Upgrade to a fully supported version!"
|
||||
msgstr ""
|
||||
msgstr "PostgreSQL %(v)s 版本过时。请升级到支持的版本!"
|
||||
|
||||
#: .\cookbook\views\views.py:309
|
||||
#, python-format
|
||||
msgid "You are running PostgreSQL %(v1)s. PostgreSQL %(v2)s is recommended"
|
||||
msgstr ""
|
||||
msgstr "您运行的 PostgreSQL 版本是 %(v1)s。推荐版本为 PostgreSQL %(v2)s"
|
||||
|
||||
#: .\cookbook\views\views.py:313
|
||||
msgid "Unable to determine PostgreSQL version."
|
||||
msgstr ""
|
||||
msgstr "无法确认 PostgreSQL 版本。"
|
||||
|
||||
#: .\cookbook\views\views.py:317
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "\n"
|
||||
#| " This application is not running with a Postgres database "
|
||||
#| "backend. This is ok but not recommended as some\n"
|
||||
#| " features only work with postgres databases.\n"
|
||||
#| " "
|
||||
msgid ""
|
||||
"This application is not running with a Postgres database backend. This is ok "
|
||||
"but not recommended as some features only work with postgres databases."
|
||||
msgstr ""
|
||||
"\n"
|
||||
" 此应用程序未使用 PostgreSQL 数据库在后端运行。 这并没有关系,但这"
|
||||
"是不推荐的,\n"
|
||||
" 因为有些功能仅适用于 PostgreSQL 数据库。\n"
|
||||
" "
|
||||
msgstr "此应用未使用 PostgreSQL 数据库作为后端。 这是可运行的配置,但不推荐,"
|
||||
"因为部分功能仅在 PostgreSQL 数据库下可用。"
|
||||
|
||||
#: .\cookbook\views\views.py:360
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The setup page can only be used to create the first user! If you have "
|
||||
#| "forgotten your superuser credentials please consult the django "
|
||||
#| "documentation on how to reset passwords."
|
||||
msgid ""
|
||||
"The setup page can only be used to create the first "
|
||||
"user! If you have forgotten your superuser credentials "
|
||||
"please consult the django documentation on how to reset passwords."
|
||||
msgstr ""
|
||||
"设置页面只能用于创建第一个用户!如果您忘记了超级用户凭据,请参阅 Django 文"
|
||||
"档,了解如何重置密码。"
|
||||
"设置页面只能用于创建第一个用户! "
|
||||
"如果您忘记了超级用户凭据,请参阅 Django 文档,了解如何重置密码。"
|
||||
|
||||
#: .\cookbook\views\views.py:369
|
||||
msgid "Passwords dont match!"
|
||||
@@ -2659,27 +2619,23 @@ msgstr "菜谱共享链接已被禁用!有关更多信息,请与页面管理
|
||||
|
||||
#: .\cookbook\views\views.py:451
|
||||
msgid "Manage recipes, shopping list, meal plans and more."
|
||||
msgstr ""
|
||||
msgstr "管理菜谱、购物清单、膳食计划等。"
|
||||
|
||||
#: .\cookbook\views\views.py:458
|
||||
#, fuzzy
|
||||
#| msgid "Meal-Plan"
|
||||
msgid "Plan"
|
||||
msgstr "膳食计划"
|
||||
msgstr "计划"
|
||||
|
||||
#: .\cookbook\views\views.py:458
|
||||
msgid "View your meal Plan"
|
||||
msgstr ""
|
||||
msgstr "查看您的膳食计划"
|
||||
|
||||
#: .\cookbook\views\views.py:459
|
||||
msgid "View your cookbooks"
|
||||
msgstr ""
|
||||
msgstr "查看你的烹饪手册"
|
||||
|
||||
#: .\cookbook\views\views.py:460
|
||||
#, fuzzy
|
||||
#| msgid "New Shopping List"
|
||||
msgid "View your shopping lists"
|
||||
msgstr "新购物清单"
|
||||
msgstr "查看你的购物清单"
|
||||
|
||||
#~ msgid "Default unit"
|
||||
#~ msgstr "默认单位"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.15 on 2024-09-15 10:30
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cookbook', '0218_alter_mealplan_from_date_alter_mealplan_to_date'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='connectorconfig',
|
||||
name='supports_description_field',
|
||||
field=models.BooleanField(default=True, help_text='Does the todo entity support the description field'),
|
||||
),
|
||||
]
|
||||
@@ -406,6 +406,7 @@ class ConnectorConfig(models.Model, PermissionModelMixin):
|
||||
on_shopping_list_entry_created_enabled = models.BooleanField(default=False)
|
||||
on_shopping_list_entry_updated_enabled = models.BooleanField(default=False)
|
||||
on_shopping_list_entry_deleted_enabled = models.BooleanField(default=False)
|
||||
supports_description_field = models.BooleanField(default=True, help_text="Does the todo entity support the description field")
|
||||
|
||||
url = models.URLField(blank=True, null=True)
|
||||
token = models.CharField(max_length=512, blank=True, null=True)
|
||||
|
||||
@@ -4,8 +4,8 @@ import os
|
||||
from datetime import datetime
|
||||
|
||||
import requests
|
||||
import validators
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.models import Recipe, RecipeImport, SyncLog
|
||||
from cookbook.provider.provider import Provider
|
||||
|
||||
@@ -107,7 +107,7 @@ class Dropbox(Provider):
|
||||
recipe.save()
|
||||
|
||||
url = recipe.link.replace('www.dropbox.', 'dl.dropboxusercontent.')
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
response = requests.get(url)
|
||||
|
||||
return io.BytesIO(response.content)
|
||||
|
||||
@@ -12,21 +12,25 @@ class Local(Provider):
|
||||
|
||||
@staticmethod
|
||||
def import_all(monitor):
|
||||
if '/etc/' in monitor.path or '/root/' in monitor.path or '/mediafiles/' in monitor.path or '/usr/' in monitor.path:
|
||||
return False
|
||||
|
||||
files = [f for f in listdir(monitor.path) if isfile(join(monitor.path, f))]
|
||||
|
||||
import_count = 0
|
||||
for file in files:
|
||||
path = monitor.path + '/' + file
|
||||
if not Recipe.objects.filter(file_path__iexact=path, space=monitor.space).exists() and not RecipeImport.objects.filter(file_path=path, space=monitor.space).exists():
|
||||
name = os.path.splitext(file)[0]
|
||||
new_recipe = RecipeImport(
|
||||
name=name,
|
||||
file_path=path,
|
||||
storage=monitor.storage,
|
||||
space=monitor.space,
|
||||
)
|
||||
new_recipe.save()
|
||||
import_count += 1
|
||||
if file.endswith('.pdf') or file.endswith('.png') or file.endswith('.jpg') or file.endswith('.jpeg') or file.endswith('.gif'):
|
||||
path = monitor.path + '/' + file
|
||||
if not Recipe.objects.filter(file_path__iexact=path, space=monitor.space).exists() and not RecipeImport.objects.filter(file_path=path, space=monitor.space).exists():
|
||||
name = os.path.splitext(file)[0]
|
||||
new_recipe = RecipeImport(
|
||||
name=name,
|
||||
file_path=path,
|
||||
storage=monitor.storage,
|
||||
space=monitor.space,
|
||||
)
|
||||
new_recipe.save()
|
||||
import_count += 1
|
||||
|
||||
log_entry = SyncLog(
|
||||
status='SUCCESS',
|
||||
|
||||
@@ -4,8 +4,9 @@ import tempfile
|
||||
from datetime import datetime
|
||||
|
||||
import requests
|
||||
import validators
|
||||
import webdav3.client as wc
|
||||
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
from cookbook.models import Recipe, RecipeImport, SyncLog
|
||||
from cookbook.provider.provider import Provider
|
||||
from requests.auth import HTTPBasicAuth
|
||||
@@ -93,7 +94,7 @@ class Nextcloud(Provider):
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
r = requests.get(
|
||||
url,
|
||||
headers=headers,
|
||||
|
||||
@@ -22,6 +22,7 @@ from rest_framework.fields import IntegerField
|
||||
|
||||
from cookbook.helper.CustomStorageClass import CachedS3Boto3Storage
|
||||
from cookbook.helper.HelperFunctions import str2bool
|
||||
from cookbook.helper.image_processing import is_file_type_allowed
|
||||
from cookbook.helper.permission_helper import above_space_limit
|
||||
from cookbook.helper.property_helper import FoodPropertyHelper
|
||||
from cookbook.helper.shopping_helper import RecipeShoppingEditor
|
||||
@@ -233,12 +234,17 @@ class UserFileSerializer(serializers.ModelSerializer):
|
||||
raise ValidationError(_('You have reached your file upload limit.'))
|
||||
|
||||
def create(self, validated_data):
|
||||
if not is_file_type_allowed(validated_data['file'].name):
|
||||
return None
|
||||
|
||||
self.check_file_limit(validated_data)
|
||||
validated_data['created_by'] = self.context['request'].user
|
||||
validated_data['space'] = self.context['request'].space
|
||||
return super().create(validated_data)
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
if not is_file_type_allowed(validated_data['file'].name):
|
||||
return None
|
||||
self.check_file_limit(validated_data)
|
||||
return super().update(instance, validated_data)
|
||||
|
||||
@@ -427,7 +433,7 @@ class ConnectorConfigConfigSerializer(SpacedModelSerializer):
|
||||
fields = (
|
||||
'id', 'name', 'url', 'token', 'todo_entity', 'enabled',
|
||||
'on_shopping_list_entry_created_enabled', 'on_shopping_list_entry_updated_enabled',
|
||||
'on_shopping_list_entry_deleted_enabled', 'created_by'
|
||||
'on_shopping_list_entry_deleted_enabled', 'supports_description_field', 'created_by'
|
||||
)
|
||||
|
||||
read_only_fields = ('created_by',)
|
||||
@@ -958,6 +964,16 @@ class RecipeImageSerializer(WritableNestedModelSerializer):
|
||||
image = serializers.ImageField(required=False, allow_null=True)
|
||||
image_url = serializers.CharField(max_length=4096, required=False, allow_null=True)
|
||||
|
||||
def create(self, validated_data):
|
||||
if not is_file_type_allowed(validated_data['image'].name, image_only=True):
|
||||
return None
|
||||
return super().create( validated_data)
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
if not is_file_type_allowed(validated_data['image'].name, image_only=True):
|
||||
return None
|
||||
return super().update(instance, validated_data)
|
||||
|
||||
class Meta:
|
||||
model = Recipe
|
||||
fields = ['image', 'image_url', ]
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{% extends "base.html" %}
|
||||
{% load crispy_forms_filters %}
|
||||
{% load crispy_forms_filters %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}{% trans 'Register' %}{% endblock %}
|
||||
|
||||
@@ -403,7 +403,7 @@
|
||||
|
||||
{% if HOSTED and request.space.max_recipes == 10 %}
|
||||
<div class="bg-warning" style=" width: 100%; text-align: center!important; color: #ffffff; padding: 8px">
|
||||
{% trans 'You are using the free version of Tandor' %} <a class="btn-success btn-sm"
|
||||
{% trans 'You are using the free version of Tandoor' %} <a class="btn-success btn-sm"
|
||||
href="https://tandoor.dev/manage">{% trans 'Upgrade Now' %}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
{% if redirect_field_value %}
|
||||
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}"/>
|
||||
{% endif %}
|
||||
|
||||
<div class="form-group">
|
||||
{{ form.username |as_crispy_field }}
|
||||
</div>
|
||||
@@ -30,7 +29,7 @@
|
||||
<div class="form-group">
|
||||
{{ form.terms |as_crispy_field }}
|
||||
<small>
|
||||
{% trans 'I accept the follwoing' %}
|
||||
{% trans 'I accept the following' %}
|
||||
{% if TERMS_URL != '' %}
|
||||
<a href="{{ TERMS_URL }}" target="_blank"
|
||||
rel="noreferrer nofollow">{% trans 'Terms and Conditions' %}</a>
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
|
||||
<h1>{% trans 'System' %}</h1>
|
||||
{% blocktrans %}
|
||||
Django Recipes is an open source free software application. It can be found on
|
||||
<a href="https://github.com/vabene1111/recipes">GitHub</a>.
|
||||
Changelogs can be found <a href="https://github.com/vabene1111/recipes/releases">here</a>.
|
||||
Tandoor Recipes is an open source free software application. It can be found on
|
||||
<a href="https://github.com/TandoorRecipes/recipes">GitHub</a>.
|
||||
Changelogs can be found <a href="https://github.com/TandoorRecipes/recipes/releases">here</a>.
|
||||
{% endblocktrans %}
|
||||
|
||||
<h3 class="mt-5">{% trans 'System Information' %}</h3>
|
||||
@@ -82,9 +82,9 @@
|
||||
{% else %}
|
||||
{% trans 'Everything is fine!' %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
<h4 class="mt-3">{% trans 'Allowed Hosts' %} <span
|
||||
class="badge badge-{% if '*' in allowed_hosts %}warning{% else %}success{% endif %}">{% if '*' in allowed_hosts %}
|
||||
class="badge badge-{% if '*' in allowed_hosts %}warning{% else %}success{% endif %}">{% if '*' in allowed_hosts %}
|
||||
{% trans 'Warning' %}{% else %}{% trans 'Ok' %}{% endif %}</span></h4>
|
||||
{% if debug %}
|
||||
{% blocktrans %}
|
||||
@@ -175,7 +175,34 @@
|
||||
{#{% for orphan in orphans %}{{ orphan }}#}
|
||||
{#{% endfor %}#}
|
||||
{# </textarea>#}
|
||||
{% if api_space_stats %}
|
||||
<h4 class="mt-3">API Stats</h4>
|
||||
<h6 >Space Stats</h6>
|
||||
<table class="table table-bordered table-striped">
|
||||
{% for r in api_space_stats %}
|
||||
<tr>
|
||||
{% for c in r %}
|
||||
<td>
|
||||
{{ c }}
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
<h6 >Endpoint Stats</h6>
|
||||
<table class="table table-bordered table-striped">
|
||||
{% for r in api_stats %}
|
||||
<tr>
|
||||
{% for c in r %}
|
||||
<td>
|
||||
{{ c }}
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
<h4 class="mt-3">Debug</h4>
|
||||
<textarea class="form-control" rows="20">
|
||||
Gunicorn Media: {{ gunicorn_media }}
|
||||
|
||||
319
cookbook/tests/api/docs/reports/tests/assets/style.css
Normal file
319
cookbook/tests/api/docs/reports/tests/assets/style.css
Normal file
@@ -0,0 +1,319 @@
|
||||
body {
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
font-size: 12px;
|
||||
/* do not increase min-width as some may use split screens */
|
||||
min-width: 800px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 24px;
|
||||
color: black;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 16px;
|
||||
color: black;
|
||||
}
|
||||
|
||||
p {
|
||||
color: black;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/******************************
|
||||
* SUMMARY INFORMATION
|
||||
******************************/
|
||||
#environment td {
|
||||
padding: 5px;
|
||||
border: 1px solid #e6e6e6;
|
||||
vertical-align: top;
|
||||
}
|
||||
#environment tr:nth-child(odd) {
|
||||
background-color: #f6f6f6;
|
||||
}
|
||||
#environment ul {
|
||||
margin: 0;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
/******************************
|
||||
* TEST RESULT COLORS
|
||||
******************************/
|
||||
span.passed,
|
||||
.passed .col-result {
|
||||
color: green;
|
||||
}
|
||||
|
||||
span.skipped,
|
||||
span.xfailed,
|
||||
span.rerun,
|
||||
.skipped .col-result,
|
||||
.xfailed .col-result,
|
||||
.rerun .col-result {
|
||||
color: orange;
|
||||
}
|
||||
|
||||
span.error,
|
||||
span.failed,
|
||||
span.xpassed,
|
||||
.error .col-result,
|
||||
.failed .col-result,
|
||||
.xpassed .col-result {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.col-links__extra {
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
/******************************
|
||||
* RESULTS TABLE
|
||||
*
|
||||
* 1. Table Layout
|
||||
* 2. Extra
|
||||
* 3. Sorting items
|
||||
*
|
||||
******************************/
|
||||
/*------------------
|
||||
* 1. Table Layout
|
||||
*------------------*/
|
||||
#results-table {
|
||||
border: 1px solid #e6e6e6;
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
width: 100%;
|
||||
}
|
||||
#results-table th,
|
||||
#results-table td {
|
||||
padding: 5px;
|
||||
border: 1px solid #e6e6e6;
|
||||
text-align: left;
|
||||
}
|
||||
#results-table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/*------------------
|
||||
* 2. Extra
|
||||
*------------------*/
|
||||
.logwrapper {
|
||||
max-height: 230px;
|
||||
overflow-y: scroll;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
.logwrapper.expanded {
|
||||
max-height: none;
|
||||
}
|
||||
.logwrapper.expanded .logexpander:after {
|
||||
content: "collapse [-]";
|
||||
}
|
||||
.logwrapper .logexpander {
|
||||
z-index: 1;
|
||||
position: sticky;
|
||||
top: 10px;
|
||||
width: max-content;
|
||||
border: 1px solid;
|
||||
border-radius: 3px;
|
||||
padding: 5px 7px;
|
||||
margin: 10px 0 10px calc(100% - 80px);
|
||||
cursor: pointer;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
.logwrapper .logexpander:after {
|
||||
content: "expand [+]";
|
||||
}
|
||||
.logwrapper .logexpander:hover {
|
||||
color: #000;
|
||||
border-color: #000;
|
||||
}
|
||||
.logwrapper .log {
|
||||
min-height: 40px;
|
||||
position: relative;
|
||||
top: -50px;
|
||||
height: calc(100% + 50px);
|
||||
border: 1px solid #e6e6e6;
|
||||
color: black;
|
||||
display: block;
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
padding: 5px;
|
||||
padding-right: 80px;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
div.media {
|
||||
border: 1px solid #e6e6e6;
|
||||
float: right;
|
||||
height: 240px;
|
||||
margin: 0 5px;
|
||||
overflow: hidden;
|
||||
width: 320px;
|
||||
}
|
||||
|
||||
.media-container {
|
||||
display: grid;
|
||||
grid-template-columns: 25px auto 25px;
|
||||
align-items: center;
|
||||
flex: 1 1;
|
||||
overflow: hidden;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.media-container--fullscreen {
|
||||
grid-template-columns: 0px auto 0px;
|
||||
}
|
||||
|
||||
.media-container__nav--right,
|
||||
.media-container__nav--left {
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.media-container__viewport {
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
height: inherit;
|
||||
}
|
||||
.media-container__viewport img,
|
||||
.media-container__viewport video {
|
||||
object-fit: cover;
|
||||
width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.media__name,
|
||||
.media__counter {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-around;
|
||||
flex: 0 0 25px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.collapsible td:not(.col-links) {
|
||||
cursor: pointer;
|
||||
}
|
||||
.collapsible td:not(.col-links):hover::after {
|
||||
color: #bbb;
|
||||
font-style: italic;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.col-result {
|
||||
width: 130px;
|
||||
}
|
||||
.col-result:hover::after {
|
||||
content: " (hide details)";
|
||||
}
|
||||
|
||||
.col-result.collapsed:hover::after {
|
||||
content: " (show details)";
|
||||
}
|
||||
|
||||
#environment-header h2:hover::after {
|
||||
content: " (hide details)";
|
||||
color: #bbb;
|
||||
font-style: italic;
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
#environment-header.collapsed h2:hover::after {
|
||||
content: " (show details)";
|
||||
color: #bbb;
|
||||
font-style: italic;
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
/*------------------
|
||||
* 3. Sorting items
|
||||
*------------------*/
|
||||
.sortable {
|
||||
cursor: pointer;
|
||||
}
|
||||
.sortable.desc:after {
|
||||
content: " ";
|
||||
position: relative;
|
||||
left: 5px;
|
||||
bottom: -12.5px;
|
||||
border: 10px solid #4caf50;
|
||||
border-bottom: 0;
|
||||
border-left-color: transparent;
|
||||
border-right-color: transparent;
|
||||
}
|
||||
.sortable.asc:after {
|
||||
content: " ";
|
||||
position: relative;
|
||||
left: 5px;
|
||||
bottom: 12.5px;
|
||||
border: 10px solid #4caf50;
|
||||
border-top: 0;
|
||||
border-left-color: transparent;
|
||||
border-right-color: transparent;
|
||||
}
|
||||
|
||||
.hidden, .summary__reload__button.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.summary__data {
|
||||
flex: 0 0 550px;
|
||||
}
|
||||
.summary__reload {
|
||||
flex: 1 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.summary__reload__button {
|
||||
flex: 0 0 300px;
|
||||
display: flex;
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
background-color: #4caf50;
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.summary__reload__button:hover {
|
||||
background-color: #46a049;
|
||||
}
|
||||
.summary__spacer {
|
||||
flex: 0 0 550px;
|
||||
}
|
||||
|
||||
.controls {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.filters,
|
||||
.collapse {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.filters button,
|
||||
.collapse button {
|
||||
color: #999;
|
||||
border: none;
|
||||
background: none;
|
||||
cursor: pointer;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.filters button:hover,
|
||||
.collapse button:hover {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.filter__label {
|
||||
margin-right: 10px;
|
||||
}
|
||||
1
cookbook/tests/api/docs/reports/tests/pytest.xml
Normal file
1
cookbook/tests/api/docs/reports/tests/pytest.xml
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><testsuites><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="5" time="35.973" timestamp="2024-08-18T14:19:20.591136" hostname="vabene-pc"><testcase classname="cookbook.tests.api.test_api_space" name="test_list_permission[arg0]" time="27.231" /><testcase classname="cookbook.tests.api.test_api_space" name="test_list_permission[arg1]" time="27.784" /><testcase classname="cookbook.tests.api.test_api_space" name="test_list_permission[arg3]" time="28.126" /><testcase classname="cookbook.tests.api.test_api_space" name="test_list_permission[arg4]" time="28.153" /><testcase classname="cookbook.tests.api.test_api_space" name="test_list_permission[arg2]" time="28.177" /></testsuite></testsuites>
|
||||
770
cookbook/tests/api/docs/reports/tests/tests.html
Normal file
770
cookbook/tests/api/docs/reports/tests/tests.html
Normal file
File diff suppressed because one or more lines are too long
@@ -99,11 +99,23 @@ def test_add(arg, request, a1_s2, obj_1):
|
||||
assert r.status_code == arg[1]
|
||||
if r.status_code == 201:
|
||||
assert response['name'] == 'test'
|
||||
assert response['supports_description_field'] == True
|
||||
r = c.get(reverse(DETAIL_URL, args={response['id']}))
|
||||
assert r.status_code == 200
|
||||
r = a1_s2.get(reverse(DETAIL_URL, args={response['id']}))
|
||||
assert r.status_code == 404
|
||||
|
||||
def test_add_with_supports_description_field_false(a1_s2):
|
||||
r = a1_s2.post(
|
||||
reverse(LIST_URL),
|
||||
{'name': 'test', 'url': 'http://localhost:8123/api', 'token': '1234', 'enabled': 'true', 'supports_description_field': 'false'},
|
||||
content_type='application/json'
|
||||
)
|
||||
response = json.loads(r.content)
|
||||
print(r.content)
|
||||
assert r.status_code == 201
|
||||
assert response['name'] == 'test'
|
||||
assert response['supports_description_field'] == False
|
||||
|
||||
def test_delete(a1_s1, a1_s2, obj_1):
|
||||
r = a1_s2.delete(
|
||||
|
||||
@@ -81,7 +81,7 @@ def obj_tree_1(request, space_1):
|
||||
|
||||
@pytest.mark.parametrize("arg", [
|
||||
['a_u', 403],
|
||||
['g1_s1', 403],
|
||||
['g1_s1', 200],
|
||||
['u1_s1', 200],
|
||||
['a1_s1', 200],
|
||||
])
|
||||
|
||||
@@ -51,7 +51,7 @@ def test_list_space(obj_1, obj_2, u1_s1, u1_s2, space_2):
|
||||
['g1_s2', 403],
|
||||
['u1_s2', 404],
|
||||
['a1_s2', 404],
|
||||
])
|
||||
], ids=str)
|
||||
def test_update(arg, request, obj_1):
|
||||
c = request.getfixturevalue(arg[0])
|
||||
r = c.patch(
|
||||
|
||||
@@ -73,7 +73,7 @@ def recipe_1_1_s1(u1_s1, obj_1_1, space_1):
|
||||
|
||||
@pytest.mark.parametrize("arg", [
|
||||
['a_u', 403],
|
||||
['g1_s1', 403],
|
||||
['g1_s1', 200],
|
||||
['u1_s1', 200],
|
||||
['a1_s1', 200],
|
||||
])
|
||||
|
||||
@@ -11,7 +11,7 @@ DETAIL_URL = 'api:space-detail'
|
||||
|
||||
@pytest.mark.parametrize("arg", [
|
||||
['a_u', 403, 0],
|
||||
['g1_s1', 403, 0],
|
||||
['g1_s1', 200, 1],
|
||||
['u1_s1', 200, 1],
|
||||
['a1_s1', 200, 1],
|
||||
['a2_s1', 200, 1],
|
||||
|
||||
@@ -31,7 +31,7 @@ def test_edit_storage(storage_obj, a1_s1, a1_s2):
|
||||
}
|
||||
)
|
||||
storage_obj.refresh_from_db()
|
||||
assert r.status_code == 200
|
||||
assert r.status_code == 302
|
||||
r_messages = [m for m in get_messages(r.wsgi_request)]
|
||||
assert not any(m.level > messages.SUCCESS for m in r_messages)
|
||||
|
||||
@@ -54,7 +54,7 @@ def test_edit_storage(storage_obj, a1_s1, a1_s2):
|
||||
['a_u', 302],
|
||||
['g1_s1', 302],
|
||||
['u1_s1', 302],
|
||||
['a1_s1', 200],
|
||||
['a1_s1', 302],
|
||||
['g1_s2', 302],
|
||||
['u1_s2', 302],
|
||||
['a1_s2', 404],
|
||||
|
||||
319
cookbook/tests/other/docs/reports/tests/assets/style.css
Normal file
319
cookbook/tests/other/docs/reports/tests/assets/style.css
Normal file
@@ -0,0 +1,319 @@
|
||||
body {
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
font-size: 12px;
|
||||
/* do not increase min-width as some may use split screens */
|
||||
min-width: 800px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 24px;
|
||||
color: black;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 16px;
|
||||
color: black;
|
||||
}
|
||||
|
||||
p {
|
||||
color: black;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/******************************
|
||||
* SUMMARY INFORMATION
|
||||
******************************/
|
||||
#environment td {
|
||||
padding: 5px;
|
||||
border: 1px solid #e6e6e6;
|
||||
vertical-align: top;
|
||||
}
|
||||
#environment tr:nth-child(odd) {
|
||||
background-color: #f6f6f6;
|
||||
}
|
||||
#environment ul {
|
||||
margin: 0;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
/******************************
|
||||
* TEST RESULT COLORS
|
||||
******************************/
|
||||
span.passed,
|
||||
.passed .col-result {
|
||||
color: green;
|
||||
}
|
||||
|
||||
span.skipped,
|
||||
span.xfailed,
|
||||
span.rerun,
|
||||
.skipped .col-result,
|
||||
.xfailed .col-result,
|
||||
.rerun .col-result {
|
||||
color: orange;
|
||||
}
|
||||
|
||||
span.error,
|
||||
span.failed,
|
||||
span.xpassed,
|
||||
.error .col-result,
|
||||
.failed .col-result,
|
||||
.xpassed .col-result {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.col-links__extra {
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
/******************************
|
||||
* RESULTS TABLE
|
||||
*
|
||||
* 1. Table Layout
|
||||
* 2. Extra
|
||||
* 3. Sorting items
|
||||
*
|
||||
******************************/
|
||||
/*------------------
|
||||
* 1. Table Layout
|
||||
*------------------*/
|
||||
#results-table {
|
||||
border: 1px solid #e6e6e6;
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
width: 100%;
|
||||
}
|
||||
#results-table th,
|
||||
#results-table td {
|
||||
padding: 5px;
|
||||
border: 1px solid #e6e6e6;
|
||||
text-align: left;
|
||||
}
|
||||
#results-table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/*------------------
|
||||
* 2. Extra
|
||||
*------------------*/
|
||||
.logwrapper {
|
||||
max-height: 230px;
|
||||
overflow-y: scroll;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
.logwrapper.expanded {
|
||||
max-height: none;
|
||||
}
|
||||
.logwrapper.expanded .logexpander:after {
|
||||
content: "collapse [-]";
|
||||
}
|
||||
.logwrapper .logexpander {
|
||||
z-index: 1;
|
||||
position: sticky;
|
||||
top: 10px;
|
||||
width: max-content;
|
||||
border: 1px solid;
|
||||
border-radius: 3px;
|
||||
padding: 5px 7px;
|
||||
margin: 10px 0 10px calc(100% - 80px);
|
||||
cursor: pointer;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
.logwrapper .logexpander:after {
|
||||
content: "expand [+]";
|
||||
}
|
||||
.logwrapper .logexpander:hover {
|
||||
color: #000;
|
||||
border-color: #000;
|
||||
}
|
||||
.logwrapper .log {
|
||||
min-height: 40px;
|
||||
position: relative;
|
||||
top: -50px;
|
||||
height: calc(100% + 50px);
|
||||
border: 1px solid #e6e6e6;
|
||||
color: black;
|
||||
display: block;
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
padding: 5px;
|
||||
padding-right: 80px;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
div.media {
|
||||
border: 1px solid #e6e6e6;
|
||||
float: right;
|
||||
height: 240px;
|
||||
margin: 0 5px;
|
||||
overflow: hidden;
|
||||
width: 320px;
|
||||
}
|
||||
|
||||
.media-container {
|
||||
display: grid;
|
||||
grid-template-columns: 25px auto 25px;
|
||||
align-items: center;
|
||||
flex: 1 1;
|
||||
overflow: hidden;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.media-container--fullscreen {
|
||||
grid-template-columns: 0px auto 0px;
|
||||
}
|
||||
|
||||
.media-container__nav--right,
|
||||
.media-container__nav--left {
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.media-container__viewport {
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
height: inherit;
|
||||
}
|
||||
.media-container__viewport img,
|
||||
.media-container__viewport video {
|
||||
object-fit: cover;
|
||||
width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.media__name,
|
||||
.media__counter {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-around;
|
||||
flex: 0 0 25px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.collapsible td:not(.col-links) {
|
||||
cursor: pointer;
|
||||
}
|
||||
.collapsible td:not(.col-links):hover::after {
|
||||
color: #bbb;
|
||||
font-style: italic;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.col-result {
|
||||
width: 130px;
|
||||
}
|
||||
.col-result:hover::after {
|
||||
content: " (hide details)";
|
||||
}
|
||||
|
||||
.col-result.collapsed:hover::after {
|
||||
content: " (show details)";
|
||||
}
|
||||
|
||||
#environment-header h2:hover::after {
|
||||
content: " (hide details)";
|
||||
color: #bbb;
|
||||
font-style: italic;
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
#environment-header.collapsed h2:hover::after {
|
||||
content: " (show details)";
|
||||
color: #bbb;
|
||||
font-style: italic;
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
/*------------------
|
||||
* 3. Sorting items
|
||||
*------------------*/
|
||||
.sortable {
|
||||
cursor: pointer;
|
||||
}
|
||||
.sortable.desc:after {
|
||||
content: " ";
|
||||
position: relative;
|
||||
left: 5px;
|
||||
bottom: -12.5px;
|
||||
border: 10px solid #4caf50;
|
||||
border-bottom: 0;
|
||||
border-left-color: transparent;
|
||||
border-right-color: transparent;
|
||||
}
|
||||
.sortable.asc:after {
|
||||
content: " ";
|
||||
position: relative;
|
||||
left: 5px;
|
||||
bottom: 12.5px;
|
||||
border: 10px solid #4caf50;
|
||||
border-top: 0;
|
||||
border-left-color: transparent;
|
||||
border-right-color: transparent;
|
||||
}
|
||||
|
||||
.hidden, .summary__reload__button.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.summary__data {
|
||||
flex: 0 0 550px;
|
||||
}
|
||||
.summary__reload {
|
||||
flex: 1 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.summary__reload__button {
|
||||
flex: 0 0 300px;
|
||||
display: flex;
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
background-color: #4caf50;
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.summary__reload__button:hover {
|
||||
background-color: #46a049;
|
||||
}
|
||||
.summary__spacer {
|
||||
flex: 0 0 550px;
|
||||
}
|
||||
|
||||
.controls {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.filters,
|
||||
.collapse {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.filters button,
|
||||
.collapse button {
|
||||
color: #999;
|
||||
border: none;
|
||||
background: none;
|
||||
cursor: pointer;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.filters button:hover,
|
||||
.collapse button:hover {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.filter__label {
|
||||
margin-right: 10px;
|
||||
}
|
||||
1
cookbook/tests/other/docs/reports/tests/pytest.xml
Normal file
1
cookbook/tests/other/docs/reports/tests/pytest.xml
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><testsuites><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="1" time="30.686" timestamp="2024-08-20T11:34:55.376500" hostname="DESKTOP-RM10LP5"><testcase classname="cookbook.tests.other.test_helpers" name="test_url_validator" time="21.551" /></testsuite></testsuites>
|
||||
770
cookbook/tests/other/docs/reports/tests/tests.html
Normal file
770
cookbook/tests/other/docs/reports/tests/tests.html
Normal file
@@ -0,0 +1,770 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title id="head-title">tests.html</title>
|
||||
<link href="assets\style.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
<h1 id="title">tests.html</h1>
|
||||
<p>Report generated on 20-Aug-2024 at 11:35:26 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a>
|
||||
v4.1.1</p>
|
||||
<div id="environment-header">
|
||||
<h2>Environment</h2>
|
||||
</div>
|
||||
<table id="environment"></table>
|
||||
<!-- TEMPLATES -->
|
||||
<template id="template_environment_row">
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="template_results-table__body--empty">
|
||||
<tbody class="results-table-row">
|
||||
<tr id="not-found-message">
|
||||
<td colspan="4">No results found. Check the filters.</th>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="template_results-table__tbody">
|
||||
<tbody class="results-table-row">
|
||||
<tr class="collapsible">
|
||||
</tr>
|
||||
<tr class="extras-row">
|
||||
<td class="extra" colspan="4">
|
||||
<div class="extraHTML"></div>
|
||||
<div class="media">
|
||||
<div class="media-container">
|
||||
<div class="media-container__nav--left"><</div>
|
||||
<div class="media-container__viewport">
|
||||
<img src="" />
|
||||
<video controls>
|
||||
<source src="" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
<div class="media-container__nav--right">></div>
|
||||
</div>
|
||||
<div class="media__name"></div>
|
||||
<div class="media__counter"></div>
|
||||
</div>
|
||||
<div class="logwrapper">
|
||||
<div class="logexpander"></div>
|
||||
<div class="log"></div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</template>
|
||||
<!-- END TEMPLATES -->
|
||||
<div class="summary">
|
||||
<div class="summary__data">
|
||||
<h2>Summary</h2>
|
||||
<div class="additional-summary prefix">
|
||||
</div>
|
||||
<p class="run-count">1 test took 00:00:22.</p>
|
||||
<p class="filter">(Un)check the boxes to filter the results.</p>
|
||||
<div class="summary__reload">
|
||||
<div class="summary__reload__button hidden" onclick="location.reload()">
|
||||
<div>There are still tests running. <br />Reload this page to get the latest results!</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="summary__spacer"></div>
|
||||
<div class="controls">
|
||||
<div class="filters">
|
||||
<input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="failed" disabled/>
|
||||
<span class="failed">0 Failed,</span>
|
||||
<input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="passed" />
|
||||
<span class="passed">1 Passed,</span>
|
||||
<input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="skipped" disabled/>
|
||||
<span class="skipped">0 Skipped,</span>
|
||||
<input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="xfailed" disabled/>
|
||||
<span class="xfailed">0 Expected failures,</span>
|
||||
<input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="xpassed" disabled/>
|
||||
<span class="xpassed">0 Unexpected passes,</span>
|
||||
<input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="error" disabled/>
|
||||
<span class="error">0 Errors,</span>
|
||||
<input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="rerun" disabled/>
|
||||
<span class="rerun">0 Reruns</span>
|
||||
</div>
|
||||
<div class="collapse">
|
||||
<button id="show_all_details">Show all details</button> / <button id="hide_all_details">Hide all details</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="additional-summary summary">
|
||||
</div>
|
||||
<div class="additional-summary postfix">
|
||||
</div>
|
||||
</div>
|
||||
<table id="results-table">
|
||||
<thead id="results-table-head">
|
||||
<tr>
|
||||
<th class="sortable" data-column-type="result">Result</th>
|
||||
<th class="sortable" data-column-type="testId">Test</th>
|
||||
<th class="sortable" data-column-type="duration">Duration</th>
|
||||
<th>Links</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</body>
|
||||
<footer>
|
||||
<div id="data-container" data-jsonblob="{"environment": {"Python": "3.12.5", "Platform": "Windows-10-10.0.19045-SP0", "Packages": {"pytest": "8.0.0", "pluggy": "1.4.0"}, "Plugins": {"Faker": "23.2.1", "asyncio": "0.23.5", "cov": "5.0.0", "django": "4.8.0", "factoryboy": "2.6.0", "html": "4.1.1", "metadata": "3.1.1", "xdist": "3.6.1"}}, "tests": {"cookbook/tests/other/test_helpers.py::test_url_validator": [{"extras": [], "result": "Passed", "testId": "cookbook/tests/other/test_helpers.py::test_url_validator", "duration": "00:00:22", "resultsTableRow": ["<td class=\"col-result\">Passed</td>", "<td class=\"col-testId\">cookbook/tests/other/test_helpers.py::test_url_validator</td>", "<td class=\"col-duration\">00:00:22</td>", "<td class=\"col-links\"></td>"], "log": "[gw0] win32 -- Python 3.12.5 C:\\Users\\Benedikt.Sienz\\Documents\\Development\\Django\\recipes\\venv\\Scripts\\python.exe\n\n---------------------------- Captured stdout setup -----------------------------\nTransforming nutrition information, this might take a while on large databases\n"}]}, "renderCollapsed": ["passed"], "initialSort": "result", "title": "tests.html"}"></div>
|
||||
<script>
|
||||
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
|
||||
const { getCollapsedCategory, setCollapsedIds } = require('./storage.js')
|
||||
|
||||
class DataManager {
|
||||
setManager(data) {
|
||||
const collapsedCategories = [...getCollapsedCategory(data.renderCollapsed)]
|
||||
const collapsedIds = []
|
||||
const tests = Object.values(data.tests).flat().map((test, index) => {
|
||||
const collapsed = collapsedCategories.includes(test.result.toLowerCase())
|
||||
const id = `test_${index}`
|
||||
if (collapsed) {
|
||||
collapsedIds.push(id)
|
||||
}
|
||||
return {
|
||||
...test,
|
||||
id,
|
||||
collapsed,
|
||||
}
|
||||
})
|
||||
const dataBlob = { ...data, tests }
|
||||
this.data = { ...dataBlob }
|
||||
this.renderData = { ...dataBlob }
|
||||
setCollapsedIds(collapsedIds)
|
||||
}
|
||||
|
||||
get allData() {
|
||||
return { ...this.data }
|
||||
}
|
||||
|
||||
resetRender() {
|
||||
this.renderData = { ...this.data }
|
||||
}
|
||||
|
||||
setRender(data) {
|
||||
this.renderData.tests = [...data]
|
||||
}
|
||||
|
||||
toggleCollapsedItem(id) {
|
||||
this.renderData.tests = this.renderData.tests.map((test) =>
|
||||
test.id === id ? { ...test, collapsed: !test.collapsed } : test,
|
||||
)
|
||||
}
|
||||
|
||||
set allCollapsed(collapsed) {
|
||||
this.renderData = { ...this.renderData, tests: [...this.renderData.tests.map((test) => (
|
||||
{ ...test, collapsed }
|
||||
))] }
|
||||
}
|
||||
|
||||
get testSubset() {
|
||||
return [...this.renderData.tests]
|
||||
}
|
||||
|
||||
get environment() {
|
||||
return this.renderData.environment
|
||||
}
|
||||
|
||||
get initialSort() {
|
||||
return this.data.initialSort
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
manager: new DataManager(),
|
||||
}
|
||||
|
||||
},{"./storage.js":8}],2:[function(require,module,exports){
|
||||
const mediaViewer = require('./mediaviewer.js')
|
||||
const templateEnvRow = document.getElementById('template_environment_row')
|
||||
const templateResult = document.getElementById('template_results-table__tbody')
|
||||
|
||||
function htmlToElements(html) {
|
||||
const temp = document.createElement('template')
|
||||
temp.innerHTML = html
|
||||
return temp.content.childNodes
|
||||
}
|
||||
|
||||
const find = (selector, elem) => {
|
||||
if (!elem) {
|
||||
elem = document
|
||||
}
|
||||
return elem.querySelector(selector)
|
||||
}
|
||||
|
||||
const findAll = (selector, elem) => {
|
||||
if (!elem) {
|
||||
elem = document
|
||||
}
|
||||
return [...elem.querySelectorAll(selector)]
|
||||
}
|
||||
|
||||
const dom = {
|
||||
getStaticRow: (key, value) => {
|
||||
const envRow = templateEnvRow.content.cloneNode(true)
|
||||
const isObj = typeof value === 'object' && value !== null
|
||||
const values = isObj ? Object.keys(value).map((k) => `${k}: ${value[k]}`) : null
|
||||
|
||||
const valuesElement = htmlToElements(
|
||||
values ? `<ul>${values.map((val) => `<li>${val}</li>`).join('')}<ul>` : `<div>${value}</div>`)[0]
|
||||
const td = findAll('td', envRow)
|
||||
td[0].textContent = key
|
||||
td[1].appendChild(valuesElement)
|
||||
|
||||
return envRow
|
||||
},
|
||||
getResultTBody: ({ testId, id, log, extras, resultsTableRow, tableHtml, result, collapsed }) => {
|
||||
const resultBody = templateResult.content.cloneNode(true)
|
||||
resultBody.querySelector('tbody').classList.add(result.toLowerCase())
|
||||
resultBody.querySelector('tbody').id = testId
|
||||
resultBody.querySelector('.collapsible').dataset.id = id
|
||||
|
||||
resultsTableRow.forEach((html) => {
|
||||
const t = document.createElement('template')
|
||||
t.innerHTML = html
|
||||
resultBody.querySelector('.collapsible').appendChild(t.content)
|
||||
})
|
||||
|
||||
if (log) {
|
||||
// Wrap lines starting with "E" with span.error to color those lines red
|
||||
const wrappedLog = log.replace(/^E.*$/gm, (match) => `<span class="error">${match}</span>`)
|
||||
resultBody.querySelector('.log').innerHTML = wrappedLog
|
||||
} else {
|
||||
resultBody.querySelector('.log').remove()
|
||||
}
|
||||
|
||||
if (collapsed) {
|
||||
resultBody.querySelector('.collapsible > td')?.classList.add('collapsed')
|
||||
resultBody.querySelector('.extras-row').classList.add('hidden')
|
||||
} else {
|
||||
resultBody.querySelector('.collapsible > td')?.classList.remove('collapsed')
|
||||
}
|
||||
|
||||
const media = []
|
||||
extras?.forEach(({ name, format_type, content }) => {
|
||||
if (['image', 'video'].includes(format_type)) {
|
||||
media.push({ path: content, name, format_type })
|
||||
}
|
||||
|
||||
if (format_type === 'html') {
|
||||
resultBody.querySelector('.extraHTML').insertAdjacentHTML('beforeend', `<div>${content}</div>`)
|
||||
}
|
||||
})
|
||||
mediaViewer.setup(resultBody, media)
|
||||
|
||||
// Add custom html from the pytest_html_results_table_html hook
|
||||
tableHtml?.forEach((item) => {
|
||||
resultBody.querySelector('td[class="extra"]').insertAdjacentHTML('beforeend', item)
|
||||
})
|
||||
|
||||
return resultBody
|
||||
},
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
dom,
|
||||
htmlToElements,
|
||||
find,
|
||||
findAll,
|
||||
}
|
||||
|
||||
},{"./mediaviewer.js":6}],3:[function(require,module,exports){
|
||||
const { manager } = require('./datamanager.js')
|
||||
const { doSort } = require('./sort.js')
|
||||
const storageModule = require('./storage.js')
|
||||
|
||||
const getFilteredSubSet = (filter) =>
|
||||
manager.allData.tests.filter(({ result }) => filter.includes(result.toLowerCase()))
|
||||
|
||||
const doInitFilter = () => {
|
||||
const currentFilter = storageModule.getVisible()
|
||||
const filteredSubset = getFilteredSubSet(currentFilter)
|
||||
manager.setRender(filteredSubset)
|
||||
}
|
||||
|
||||
const doFilter = (type, show) => {
|
||||
if (show) {
|
||||
storageModule.showCategory(type)
|
||||
} else {
|
||||
storageModule.hideCategory(type)
|
||||
}
|
||||
|
||||
const currentFilter = storageModule.getVisible()
|
||||
const filteredSubset = getFilteredSubSet(currentFilter)
|
||||
manager.setRender(filteredSubset)
|
||||
|
||||
const sortColumn = storageModule.getSort()
|
||||
doSort(sortColumn, true)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
doFilter,
|
||||
doInitFilter,
|
||||
}
|
||||
|
||||
},{"./datamanager.js":1,"./sort.js":7,"./storage.js":8}],4:[function(require,module,exports){
|
||||
const { redraw, bindEvents, renderStatic } = require('./main.js')
|
||||
const { doInitFilter } = require('./filter.js')
|
||||
const { doInitSort } = require('./sort.js')
|
||||
const { manager } = require('./datamanager.js')
|
||||
const data = JSON.parse(document.getElementById('data-container').dataset.jsonblob)
|
||||
|
||||
function init() {
|
||||
manager.setManager(data)
|
||||
doInitFilter()
|
||||
doInitSort()
|
||||
renderStatic()
|
||||
redraw()
|
||||
bindEvents()
|
||||
}
|
||||
|
||||
init()
|
||||
|
||||
},{"./datamanager.js":1,"./filter.js":3,"./main.js":5,"./sort.js":7}],5:[function(require,module,exports){
|
||||
const { dom, find, findAll } = require('./dom.js')
|
||||
const { manager } = require('./datamanager.js')
|
||||
const { doSort } = require('./sort.js')
|
||||
const { doFilter } = require('./filter.js')
|
||||
const {
|
||||
getVisible,
|
||||
getCollapsedIds,
|
||||
setCollapsedIds,
|
||||
getSort,
|
||||
getSortDirection,
|
||||
possibleFilters,
|
||||
} = require('./storage.js')
|
||||
|
||||
const removeChildren = (node) => {
|
||||
while (node.firstChild) {
|
||||
node.removeChild(node.firstChild)
|
||||
}
|
||||
}
|
||||
|
||||
const renderStatic = () => {
|
||||
const renderEnvironmentTable = () => {
|
||||
const environment = manager.environment
|
||||
const rows = Object.keys(environment).map((key) => dom.getStaticRow(key, environment[key]))
|
||||
const table = document.getElementById('environment')
|
||||
removeChildren(table)
|
||||
rows.forEach((row) => table.appendChild(row))
|
||||
}
|
||||
renderEnvironmentTable()
|
||||
}
|
||||
|
||||
const addItemToggleListener = (elem) => {
|
||||
elem.addEventListener('click', ({ target }) => {
|
||||
const id = target.parentElement.dataset.id
|
||||
manager.toggleCollapsedItem(id)
|
||||
|
||||
const collapsedIds = getCollapsedIds()
|
||||
if (collapsedIds.includes(id)) {
|
||||
const updated = collapsedIds.filter((item) => item !== id)
|
||||
setCollapsedIds(updated)
|
||||
} else {
|
||||
collapsedIds.push(id)
|
||||
setCollapsedIds(collapsedIds)
|
||||
}
|
||||
redraw()
|
||||
})
|
||||
}
|
||||
|
||||
const renderContent = (tests) => {
|
||||
const sortAttr = getSort(manager.initialSort)
|
||||
const sortAsc = JSON.parse(getSortDirection())
|
||||
const rows = tests.map(dom.getResultTBody)
|
||||
const table = document.getElementById('results-table')
|
||||
const tableHeader = document.getElementById('results-table-head')
|
||||
|
||||
const newTable = document.createElement('table')
|
||||
newTable.id = 'results-table'
|
||||
|
||||
// remove all sorting classes and set the relevant
|
||||
findAll('.sortable', tableHeader).forEach((elem) => elem.classList.remove('asc', 'desc'))
|
||||
tableHeader.querySelector(`.sortable[data-column-type="${sortAttr}"]`)?.classList.add(sortAsc ? 'desc' : 'asc')
|
||||
newTable.appendChild(tableHeader)
|
||||
|
||||
if (!rows.length) {
|
||||
const emptyTable = document.getElementById('template_results-table__body--empty').content.cloneNode(true)
|
||||
newTable.appendChild(emptyTable)
|
||||
} else {
|
||||
rows.forEach((row) => {
|
||||
if (!!row) {
|
||||
findAll('.collapsible td:not(.col-links', row).forEach(addItemToggleListener)
|
||||
find('.logexpander', row).addEventListener('click',
|
||||
(evt) => evt.target.parentNode.classList.toggle('expanded'),
|
||||
)
|
||||
newTable.appendChild(row)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
table.replaceWith(newTable)
|
||||
}
|
||||
|
||||
const renderDerived = () => {
|
||||
const currentFilter = getVisible()
|
||||
possibleFilters.forEach((result) => {
|
||||
const input = document.querySelector(`input[data-test-result="${result}"]`)
|
||||
input.checked = currentFilter.includes(result)
|
||||
})
|
||||
}
|
||||
|
||||
const bindEvents = () => {
|
||||
const filterColumn = (evt) => {
|
||||
const { target: element } = evt
|
||||
const { testResult } = element.dataset
|
||||
|
||||
doFilter(testResult, element.checked)
|
||||
const collapsedIds = getCollapsedIds()
|
||||
const updated = manager.renderData.tests.map((test) => {
|
||||
return {
|
||||
...test,
|
||||
collapsed: collapsedIds.includes(test.id),
|
||||
}
|
||||
})
|
||||
manager.setRender(updated)
|
||||
redraw()
|
||||
}
|
||||
|
||||
const header = document.getElementById('environment-header')
|
||||
header.addEventListener('click', () => {
|
||||
const table = document.getElementById('environment')
|
||||
table.classList.toggle('hidden')
|
||||
header.classList.toggle('collapsed')
|
||||
})
|
||||
|
||||
findAll('input[name="filter_checkbox"]').forEach((elem) => {
|
||||
elem.addEventListener('click', filterColumn)
|
||||
})
|
||||
|
||||
findAll('.sortable').forEach((elem) => {
|
||||
elem.addEventListener('click', (evt) => {
|
||||
const { target: element } = evt
|
||||
const { columnType } = element.dataset
|
||||
doSort(columnType)
|
||||
redraw()
|
||||
})
|
||||
})
|
||||
|
||||
document.getElementById('show_all_details').addEventListener('click', () => {
|
||||
manager.allCollapsed = false
|
||||
setCollapsedIds([])
|
||||
redraw()
|
||||
})
|
||||
document.getElementById('hide_all_details').addEventListener('click', () => {
|
||||
manager.allCollapsed = true
|
||||
const allIds = manager.renderData.tests.map((test) => test.id)
|
||||
setCollapsedIds(allIds)
|
||||
redraw()
|
||||
})
|
||||
}
|
||||
|
||||
const redraw = () => {
|
||||
const { testSubset } = manager
|
||||
|
||||
renderContent(testSubset)
|
||||
renderDerived()
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
redraw,
|
||||
bindEvents,
|
||||
renderStatic,
|
||||
}
|
||||
|
||||
},{"./datamanager.js":1,"./dom.js":2,"./filter.js":3,"./sort.js":7,"./storage.js":8}],6:[function(require,module,exports){
|
||||
class MediaViewer {
|
||||
constructor(assets) {
|
||||
this.assets = assets
|
||||
this.index = 0
|
||||
}
|
||||
|
||||
nextActive() {
|
||||
this.index = this.index === this.assets.length - 1 ? 0 : this.index + 1
|
||||
return [this.activeFile, this.index]
|
||||
}
|
||||
|
||||
prevActive() {
|
||||
this.index = this.index === 0 ? this.assets.length - 1 : this.index -1
|
||||
return [this.activeFile, this.index]
|
||||
}
|
||||
|
||||
get currentIndex() {
|
||||
return this.index
|
||||
}
|
||||
|
||||
get activeFile() {
|
||||
return this.assets[this.index]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const setup = (resultBody, assets) => {
|
||||
if (!assets.length) {
|
||||
resultBody.querySelector('.media').classList.add('hidden')
|
||||
return
|
||||
}
|
||||
|
||||
const mediaViewer = new MediaViewer(assets)
|
||||
const container = resultBody.querySelector('.media-container')
|
||||
const leftArrow = resultBody.querySelector('.media-container__nav--left')
|
||||
const rightArrow = resultBody.querySelector('.media-container__nav--right')
|
||||
const mediaName = resultBody.querySelector('.media__name')
|
||||
const counter = resultBody.querySelector('.media__counter')
|
||||
const imageEl = resultBody.querySelector('img')
|
||||
const sourceEl = resultBody.querySelector('source')
|
||||
const videoEl = resultBody.querySelector('video')
|
||||
|
||||
const setImg = (media, index) => {
|
||||
if (media?.format_type === 'image') {
|
||||
imageEl.src = media.path
|
||||
|
||||
imageEl.classList.remove('hidden')
|
||||
videoEl.classList.add('hidden')
|
||||
} else if (media?.format_type === 'video') {
|
||||
sourceEl.src = media.path
|
||||
|
||||
videoEl.classList.remove('hidden')
|
||||
imageEl.classList.add('hidden')
|
||||
}
|
||||
|
||||
mediaName.innerText = media?.name
|
||||
counter.innerText = `${index + 1} / ${assets.length}`
|
||||
}
|
||||
setImg(mediaViewer.activeFile, mediaViewer.currentIndex)
|
||||
|
||||
const moveLeft = () => {
|
||||
const [media, index] = mediaViewer.prevActive()
|
||||
setImg(media, index)
|
||||
}
|
||||
const doRight = () => {
|
||||
const [media, index] = mediaViewer.nextActive()
|
||||
setImg(media, index)
|
||||
}
|
||||
const openImg = () => {
|
||||
window.open(mediaViewer.activeFile.path, '_blank')
|
||||
}
|
||||
if (assets.length === 1) {
|
||||
container.classList.add('media-container--fullscreen')
|
||||
} else {
|
||||
leftArrow.addEventListener('click', moveLeft)
|
||||
rightArrow.addEventListener('click', doRight)
|
||||
}
|
||||
imageEl.addEventListener('click', openImg)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
setup,
|
||||
}
|
||||
|
||||
},{}],7:[function(require,module,exports){
|
||||
const { manager } = require('./datamanager.js')
|
||||
const storageModule = require('./storage.js')
|
||||
|
||||
const genericSort = (list, key, ascending, customOrder) => {
|
||||
let sorted
|
||||
if (customOrder) {
|
||||
sorted = list.sort((a, b) => {
|
||||
const aValue = a.result.toLowerCase()
|
||||
const bValue = b.result.toLowerCase()
|
||||
|
||||
const aIndex = customOrder.findIndex((item) => item.toLowerCase() === aValue)
|
||||
const bIndex = customOrder.findIndex((item) => item.toLowerCase() === bValue)
|
||||
|
||||
// Compare the indices to determine the sort order
|
||||
return aIndex - bIndex
|
||||
})
|
||||
} else {
|
||||
sorted = list.sort((a, b) => a[key] === b[key] ? 0 : a[key] > b[key] ? 1 : -1)
|
||||
}
|
||||
|
||||
if (ascending) {
|
||||
sorted.reverse()
|
||||
}
|
||||
return sorted
|
||||
}
|
||||
|
||||
const durationSort = (list, ascending) => {
|
||||
const parseDuration = (duration) => {
|
||||
if (duration.includes(':')) {
|
||||
// If it's in the format "HH:mm:ss"
|
||||
const [hours, minutes, seconds] = duration.split(':').map(Number)
|
||||
return (hours * 3600 + minutes * 60 + seconds) * 1000
|
||||
} else {
|
||||
// If it's in the format "nnn ms"
|
||||
return parseInt(duration)
|
||||
}
|
||||
}
|
||||
const sorted = list.sort((a, b) => parseDuration(a['duration']) - parseDuration(b['duration']))
|
||||
if (ascending) {
|
||||
sorted.reverse()
|
||||
}
|
||||
return sorted
|
||||
}
|
||||
|
||||
const doInitSort = () => {
|
||||
const type = storageModule.getSort(manager.initialSort)
|
||||
const ascending = storageModule.getSortDirection()
|
||||
const list = manager.testSubset
|
||||
const initialOrder = ['Error', 'Failed', 'Rerun', 'XFailed', 'XPassed', 'Skipped', 'Passed']
|
||||
|
||||
storageModule.setSort(type)
|
||||
storageModule.setSortDirection(ascending)
|
||||
|
||||
if (type?.toLowerCase() === 'original') {
|
||||
manager.setRender(list)
|
||||
} else {
|
||||
let sortedList
|
||||
switch (type) {
|
||||
case 'duration':
|
||||
sortedList = durationSort(list, ascending)
|
||||
break
|
||||
case 'result':
|
||||
sortedList = genericSort(list, type, ascending, initialOrder)
|
||||
break
|
||||
default:
|
||||
sortedList = genericSort(list, type, ascending)
|
||||
break
|
||||
}
|
||||
manager.setRender(sortedList)
|
||||
}
|
||||
}
|
||||
|
||||
const doSort = (type, skipDirection) => {
|
||||
const newSortType = storageModule.getSort(manager.initialSort) !== type
|
||||
const currentAsc = storageModule.getSortDirection()
|
||||
let ascending
|
||||
if (skipDirection) {
|
||||
ascending = currentAsc
|
||||
} else {
|
||||
ascending = newSortType ? false : !currentAsc
|
||||
}
|
||||
storageModule.setSort(type)
|
||||
storageModule.setSortDirection(ascending)
|
||||
|
||||
const list = manager.testSubset
|
||||
const sortedList = type === 'duration' ? durationSort(list, ascending) : genericSort(list, type, ascending)
|
||||
manager.setRender(sortedList)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
doInitSort,
|
||||
doSort,
|
||||
}
|
||||
|
||||
},{"./datamanager.js":1,"./storage.js":8}],8:[function(require,module,exports){
|
||||
const possibleFilters = [
|
||||
'passed',
|
||||
'skipped',
|
||||
'failed',
|
||||
'error',
|
||||
'xfailed',
|
||||
'xpassed',
|
||||
'rerun',
|
||||
]
|
||||
|
||||
const getVisible = () => {
|
||||
const url = new URL(window.location.href)
|
||||
const settings = new URLSearchParams(url.search).get('visible')
|
||||
const lower = (item) => {
|
||||
const lowerItem = item.toLowerCase()
|
||||
if (possibleFilters.includes(lowerItem)) {
|
||||
return lowerItem
|
||||
}
|
||||
return null
|
||||
}
|
||||
return settings === null ?
|
||||
possibleFilters :
|
||||
[...new Set(settings?.split(',').map(lower).filter((item) => item))]
|
||||
}
|
||||
|
||||
const hideCategory = (categoryToHide) => {
|
||||
const url = new URL(window.location.href)
|
||||
const visibleParams = new URLSearchParams(url.search).get('visible')
|
||||
const currentVisible = visibleParams ? visibleParams.split(',') : [...possibleFilters]
|
||||
const settings = [...new Set(currentVisible)].filter((f) => f !== categoryToHide).join(',')
|
||||
|
||||
url.searchParams.set('visible', settings)
|
||||
window.history.pushState({}, null, unescape(url.href))
|
||||
}
|
||||
|
||||
const showCategory = (categoryToShow) => {
|
||||
if (typeof window === 'undefined') {
|
||||
return
|
||||
}
|
||||
const url = new URL(window.location.href)
|
||||
const currentVisible = new URLSearchParams(url.search).get('visible')?.split(',').filter(Boolean) ||
|
||||
[...possibleFilters]
|
||||
const settings = [...new Set([categoryToShow, ...currentVisible])]
|
||||
const noFilter = possibleFilters.length === settings.length || !settings.length
|
||||
|
||||
noFilter ? url.searchParams.delete('visible') : url.searchParams.set('visible', settings.join(','))
|
||||
window.history.pushState({}, null, unescape(url.href))
|
||||
}
|
||||
|
||||
const getSort = (initialSort) => {
|
||||
const url = new URL(window.location.href)
|
||||
let sort = new URLSearchParams(url.search).get('sort')
|
||||
if (!sort) {
|
||||
sort = initialSort || 'result'
|
||||
}
|
||||
return sort
|
||||
}
|
||||
|
||||
const setSort = (type) => {
|
||||
const url = new URL(window.location.href)
|
||||
url.searchParams.set('sort', type)
|
||||
window.history.pushState({}, null, unescape(url.href))
|
||||
}
|
||||
|
||||
const getCollapsedCategory = (renderCollapsed) => {
|
||||
let categories
|
||||
if (typeof window !== 'undefined') {
|
||||
const url = new URL(window.location.href)
|
||||
const collapsedItems = new URLSearchParams(url.search).get('collapsed')
|
||||
switch (true) {
|
||||
case !renderCollapsed && collapsedItems === null:
|
||||
categories = ['passed']
|
||||
break
|
||||
case collapsedItems?.length === 0 || /^["']{2}$/.test(collapsedItems):
|
||||
categories = []
|
||||
break
|
||||
case /^all$/.test(collapsedItems) || collapsedItems === null && /^all$/.test(renderCollapsed):
|
||||
categories = [...possibleFilters]
|
||||
break
|
||||
default:
|
||||
categories = collapsedItems?.split(',').map((item) => item.toLowerCase()) || renderCollapsed
|
||||
break
|
||||
}
|
||||
} else {
|
||||
categories = []
|
||||
}
|
||||
return categories
|
||||
}
|
||||
|
||||
const getSortDirection = () => JSON.parse(sessionStorage.getItem('sortAsc')) || false
|
||||
const setSortDirection = (ascending) => sessionStorage.setItem('sortAsc', ascending)
|
||||
|
||||
const getCollapsedIds = () => JSON.parse(sessionStorage.getItem('collapsedIds')) || []
|
||||
const setCollapsedIds = (list) => sessionStorage.setItem('collapsedIds', JSON.stringify(list))
|
||||
|
||||
module.exports = {
|
||||
getVisible,
|
||||
hideCategory,
|
||||
showCategory,
|
||||
getCollapsedIds,
|
||||
setCollapsedIds,
|
||||
getSort,
|
||||
setSort,
|
||||
getSortDirection,
|
||||
setSortDirection,
|
||||
getCollapsedCategory,
|
||||
possibleFilters,
|
||||
}
|
||||
|
||||
},{}]},{},[4]);
|
||||
</script>
|
||||
</footer>
|
||||
</html>
|
||||
14
cookbook/tests/other/test_helpers.py
Normal file
14
cookbook/tests/other/test_helpers.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from cookbook.helper.HelperFunctions import validate_import_url
|
||||
|
||||
|
||||
def test_url_validator():
|
||||
# neither local nor public urls without protocol are valid
|
||||
assert not validate_import_url('localhost:8080')
|
||||
assert not validate_import_url('www.google.com')
|
||||
|
||||
# public urls with schema and parameters are valid
|
||||
assert validate_import_url('https://www.google.com')
|
||||
assert validate_import_url('https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html#case-2-application-can-send-requests-to-any-external-ip-address-or-domain-name')
|
||||
|
||||
assert not validate_import_url('https://localhost')
|
||||
assert not validate_import_url('http://127.0.0.1')
|
||||
@@ -273,12 +273,12 @@ def test_search_units(found_recipe, recipes, u1_s1, space_1):
|
||||
('fuzzy_lookups', True), ('fuzzy_lookups', False)
|
||||
],
|
||||
[('unaccent', True), ('unaccent', False)]
|
||||
), indirect=['user1'])
|
||||
), indirect=['user1'], ids=str)
|
||||
@pytest.mark.parametrize("found_recipe, param_type", [
|
||||
({'unit': True}, 'unit'),
|
||||
({'keyword': True}, 'keyword'),
|
||||
({'food': True}, 'food'),
|
||||
], indirect=['found_recipe'])
|
||||
], indirect=['found_recipe'], ids=str)
|
||||
def test_fuzzy_lookup(found_recipe, recipes, param_type, user1, space_1):
|
||||
with scope(space=space_1):
|
||||
list_url = f'api:{param_type}-list'
|
||||
@@ -306,14 +306,14 @@ def test_fuzzy_lookup(found_recipe, recipes, param_type, user1, space_1):
|
||||
('istartswith', True), ('istartswith', False),
|
||||
],
|
||||
[('unaccent', True), ('unaccent', False)]
|
||||
), indirect=['user1'])
|
||||
), indirect=['user1'], ids=str)
|
||||
@pytest.mark.parametrize("found_recipe", [
|
||||
({'name': True}),
|
||||
({'description': True}),
|
||||
({'instruction': True}),
|
||||
({'keyword': True}),
|
||||
({'food': True}),
|
||||
], indirect=['found_recipe'])
|
||||
], indirect=['found_recipe'], ids=str)
|
||||
# user array contains: user client, expected count of search, expected count of mispelled search, search string, mispelled search string, user search preferences
|
||||
def test_search_string(found_recipe, recipes, user1, space_1):
|
||||
with scope(space=space_1):
|
||||
|
||||
@@ -19,6 +19,23 @@ DATA_DIR = "cookbook/tests/other/test_data/"
|
||||
# plus the test that previously existed
|
||||
# plus the custom scraper that was created
|
||||
# plus any specific defects discovered along the way
|
||||
RECIPES = [
|
||||
ALLRECIPES,
|
||||
AMERICAS_TEST_KITCHEN,
|
||||
CHEF_KOCH,
|
||||
CHEF_KOCH2, # test for empty ingredient in ingredient_parser
|
||||
COOKPAD,
|
||||
COOKS_COUNTRY,
|
||||
DELISH,
|
||||
FOOD_NETWORK,
|
||||
GIALLOZAFFERANO,
|
||||
JOURNAL_DES_FEMMES,
|
||||
MADAME_DESSERT, # example of json only source
|
||||
MARMITON,
|
||||
TASTE_OF_HOME,
|
||||
THE_SPRUCE_EATS, # example of non-json recipes_scraper
|
||||
TUDOGOSTOSO,
|
||||
]
|
||||
|
||||
|
||||
@pytest.mark.parametrize("arg", [
|
||||
@@ -32,29 +49,7 @@ def test_import_permission(arg, request):
|
||||
assert c.get(reverse(IMPORT_SOURCE_URL)).status_code == arg[1]
|
||||
|
||||
|
||||
@pytest.mark.parametrize("arg", [
|
||||
ALLRECIPES,
|
||||
# test of custom scraper ATK
|
||||
AMERICAS_TEST_KITCHEN,
|
||||
CHEF_KOCH,
|
||||
# test for empty ingredient in ingredient_parser
|
||||
CHEF_KOCH2,
|
||||
COOKPAD,
|
||||
# test of custom scraper ATK
|
||||
COOKS_COUNTRY,
|
||||
DELISH,
|
||||
FOOD_NETWORK,
|
||||
GIALLOZAFFERANO,
|
||||
JOURNAL_DES_FEMMES,
|
||||
# example of recipes_scraper in with wildmode
|
||||
# example of json only source
|
||||
MADAME_DESSERT,
|
||||
MARMITON,
|
||||
TASTE_OF_HOME,
|
||||
# example of non-json recipes_scraper
|
||||
THE_SPRUCE_EATS, # TODO seems to be broken in recipe scrapers
|
||||
TUDOGOSTOSO,
|
||||
])
|
||||
@pytest.mark.parametrize("arg", RECIPES, ids=[x['file'][0] for x in RECIPES])
|
||||
def test_recipe_import(arg, u1_s1):
|
||||
url = arg['url']
|
||||
for f in list(arg['file']): # url and files get popped later
|
||||
|
||||
@@ -12,8 +12,8 @@ from json import JSONDecodeError
|
||||
from urllib.parse import unquote
|
||||
from zipfile import ZipFile
|
||||
|
||||
import redis
|
||||
import requests
|
||||
import validators
|
||||
from PIL import UnidentifiedImageError
|
||||
from annoying.decorators import ajax_request
|
||||
from annoying.functions import get_object_or_None
|
||||
@@ -31,6 +31,7 @@ from django.http import FileResponse, HttpResponse, JsonResponse
|
||||
from django.shortcuts import get_object_or_404, redirect
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
from django.utils.datetime_safe import date
|
||||
from django.utils.translation import gettext as _
|
||||
from django_scopes import scopes_disabled
|
||||
from icalendar import Calendar, Event
|
||||
@@ -53,17 +54,16 @@ from treebeard.exceptions import InvalidMoveToDescendant, InvalidPosition, PathO
|
||||
|
||||
from cookbook.forms import ImportForm
|
||||
from cookbook.helper import recipe_url_import as helper
|
||||
from cookbook.helper.HelperFunctions import str2bool
|
||||
from cookbook.helper.HelperFunctions import str2bool, validate_import_url
|
||||
from cookbook.helper.image_processing import handle_image
|
||||
from cookbook.helper.ingredient_parser import IngredientParser
|
||||
from cookbook.helper.open_data_importer import OpenDataImporter
|
||||
from cookbook.helper.permission_helper import (
|
||||
CustomIsAdmin, CustomIsOwner, CustomIsOwnerReadOnly, CustomIsShared, CustomIsSpaceOwner, CustomIsUser, CustomRecipePermission, CustomTokenHasReadWriteScope,
|
||||
CustomTokenHasScope, CustomUserPermission, IsReadOnlyDRF, above_space_limit, group_required, has_group_permission, is_space_owner, switch_user_active_space,
|
||||
CustomTokenHasScope, CustomUserPermission, IsReadOnlyDRF, above_space_limit, group_required, has_group_permission, is_space_owner, switch_user_active_space, CustomIsGuest,
|
||||
)
|
||||
from cookbook.helper.recipe_search import RecipeSearch
|
||||
from cookbook.helper.recipe_url_import import clean_dict, get_from_youtube_scraper, get_images_from_soup
|
||||
from cookbook.helper.scrapers.scrapers import text_scraper
|
||||
from cookbook.helper.shopping_helper import RecipeShoppingEditor, shopping_helper
|
||||
from cookbook.models import (Automation, BookmarkletImport, CookLog, CustomFilter, ExportLog, Food,
|
||||
FoodInheritField, FoodProperty, ImportLog, Ingredient, InviteLink,
|
||||
@@ -103,6 +103,49 @@ from recipes import settings
|
||||
from recipes.settings import DRF_THROTTLE_RECIPE_URL_IMPORT, FDC_API_KEY
|
||||
|
||||
|
||||
class LoggingMixin(object):
|
||||
"""
|
||||
logs request counts to redis cache total/per user/
|
||||
"""
|
||||
|
||||
def initial(self, request, *args, **kwargs):
|
||||
super(LoggingMixin, self).initial(request, *args, **kwargs)
|
||||
|
||||
if settings.REDIS_HOST:
|
||||
try:
|
||||
d = date.today().isoformat()
|
||||
space = request.space
|
||||
endpoint = request.resolver_match.url_name
|
||||
|
||||
r = redis.StrictRedis(
|
||||
host=settings.REDIS_HOST,
|
||||
port=settings.REDIS_PORT,
|
||||
username=settings.REDIS_USERNAME,
|
||||
password=settings.REDIS_PASSWORD,
|
||||
db=settings.REDIS_DATABASES['STATS'],
|
||||
)
|
||||
|
||||
pipe = r.pipeline()
|
||||
|
||||
# Global and daily tallies for all URLs.
|
||||
pipe.incr('api:request-count')
|
||||
pipe.incr(f'api:request-count:{d}')
|
||||
|
||||
# Use a sorted set to store the user stats, with the score representing
|
||||
# the number of queries the user made total or on a given day.
|
||||
pipe.zincrby(f'api:space-request-count', 1, space.pk)
|
||||
pipe.zincrby(f'api:space-request-count:{d}', 1, space.pk)
|
||||
|
||||
# Use a sorted set to store all the endpoints with score representing
|
||||
# the number of queries the endpoint received total or on a given day.
|
||||
pipe.zincrby(f'api:endpoint-request-count', 1, endpoint)
|
||||
pipe.zincrby(f'api:endpoint-request-count:{d}', 1, endpoint)
|
||||
|
||||
pipe.execute()
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
class StandardFilterMixin(ViewSetMixin):
|
||||
|
||||
def get_queryset(self):
|
||||
@@ -186,9 +229,9 @@ class FuzzyFilterMixin(ViewSetMixin, ExtendedRecipeMixin):
|
||||
if query is not None and query not in ["''", '']:
|
||||
if fuzzy and (settings.DATABASES['default']['ENGINE'] == 'django.db.backends.postgresql'):
|
||||
if self.request.user.is_authenticated and any(
|
||||
[self.model.__name__.lower() in x for x in self.request.user.searchpreference.unaccent.values_list('field', flat=True)]
|
||||
):
|
||||
self.queryset = self.queryset.annotate(trigram=TrigramSimilarity('name__unaccent', query))
|
||||
[self.model.__name__.lower() in x for x in self.request.user.searchpreference.unaccent.values_list('field', flat=True)]
|
||||
):
|
||||
self.queryset = self.queryset.annotate(trigram=TrigramSimilarity('name__unaccent', query))
|
||||
else:
|
||||
self.queryset = self.queryset.annotate(trigram=TrigramSimilarity('name', query))
|
||||
self.queryset = self.queryset.order_by('-trigram')
|
||||
@@ -372,7 +415,7 @@ class TreeMixin(MergeMixin, FuzzyFilterMixin, ExtendedRecipeMixin):
|
||||
return Response(content, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class UserViewSet(viewsets.ModelViewSet):
|
||||
class UserViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
"""
|
||||
list:
|
||||
optional parameters
|
||||
@@ -396,24 +439,24 @@ class UserViewSet(viewsets.ModelViewSet):
|
||||
return queryset
|
||||
|
||||
|
||||
class GroupViewSet(viewsets.ModelViewSet):
|
||||
class GroupViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = Group.objects.all()
|
||||
serializer_class = GroupSerializer
|
||||
permission_classes = [CustomIsAdmin & CustomTokenHasReadWriteScope]
|
||||
http_method_names = ['get', ]
|
||||
|
||||
|
||||
class SpaceViewSet(viewsets.ModelViewSet):
|
||||
class SpaceViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = Space.objects
|
||||
serializer_class = SpaceSerializer
|
||||
permission_classes = [IsReadOnlyDRF & CustomIsUser | CustomIsOwner & CustomIsAdmin & CustomTokenHasReadWriteScope]
|
||||
permission_classes = [IsReadOnlyDRF & CustomIsGuest | CustomIsOwner & CustomIsAdmin & CustomTokenHasReadWriteScope]
|
||||
http_method_names = ['get', 'patch']
|
||||
|
||||
def get_queryset(self):
|
||||
return self.queryset.filter(id=self.request.space.id)
|
||||
|
||||
|
||||
class UserSpaceViewSet(viewsets.ModelViewSet):
|
||||
class UserSpaceViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = UserSpace.objects
|
||||
serializer_class = UserSpaceSerializer
|
||||
permission_classes = [(CustomIsSpaceOwner | CustomIsOwnerReadOnly) & CustomTokenHasReadWriteScope]
|
||||
@@ -436,7 +479,7 @@ class UserSpaceViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(user=self.request.user, space=self.request.space)
|
||||
|
||||
|
||||
class UserPreferenceViewSet(viewsets.ModelViewSet):
|
||||
class UserPreferenceViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = UserPreference.objects
|
||||
serializer_class = UserPreferenceSerializer
|
||||
permission_classes = [CustomIsOwner & CustomTokenHasReadWriteScope]
|
||||
@@ -447,7 +490,7 @@ class UserPreferenceViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(user=self.request.user)
|
||||
|
||||
|
||||
class StorageViewSet(viewsets.ModelViewSet):
|
||||
class StorageViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
# TODO handle delete protect error and adjust test
|
||||
queryset = Storage.objects
|
||||
serializer_class = StorageSerializer
|
||||
@@ -457,7 +500,7 @@ class StorageViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
|
||||
class ConnectorConfigConfigViewSet(viewsets.ModelViewSet):
|
||||
class ConnectorConfigConfigViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = ConnectorConfig.objects
|
||||
serializer_class = ConnectorConfigConfigSerializer
|
||||
permission_classes = [CustomIsAdmin & CustomTokenHasReadWriteScope]
|
||||
@@ -466,7 +509,7 @@ class ConnectorConfigConfigViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
|
||||
class SyncViewSet(viewsets.ModelViewSet):
|
||||
class SyncViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = Sync.objects
|
||||
serializer_class = SyncSerializer
|
||||
permission_classes = [CustomIsAdmin & CustomTokenHasReadWriteScope]
|
||||
@@ -475,7 +518,7 @@ class SyncViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
|
||||
class SyncLogViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
class SyncLogViewSet(LoggingMixin, viewsets.ReadOnlyModelViewSet):
|
||||
queryset = SyncLog.objects
|
||||
serializer_class = SyncLogSerializer
|
||||
permission_classes = [CustomIsAdmin & CustomTokenHasReadWriteScope]
|
||||
@@ -485,7 +528,7 @@ class SyncLogViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
return self.queryset.filter(sync__space=self.request.space)
|
||||
|
||||
|
||||
class SupermarketViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
class SupermarketViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
|
||||
schema = FilterSchema()
|
||||
queryset = Supermarket.objects
|
||||
serializer_class = SupermarketSerializer
|
||||
@@ -496,7 +539,7 @@ class SupermarketViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
return super().get_queryset()
|
||||
|
||||
|
||||
class SupermarketCategoryViewSet(viewsets.ModelViewSet, FuzzyFilterMixin, MergeMixin):
|
||||
class SupermarketCategoryViewSet(LoggingMixin, viewsets.ModelViewSet, FuzzyFilterMixin, MergeMixin):
|
||||
queryset = SupermarketCategory.objects
|
||||
model = SupermarketCategory
|
||||
serializer_class = SupermarketCategorySerializer
|
||||
@@ -507,7 +550,7 @@ class SupermarketCategoryViewSet(viewsets.ModelViewSet, FuzzyFilterMixin, MergeM
|
||||
return super().get_queryset()
|
||||
|
||||
|
||||
class SupermarketCategoryRelationViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
class SupermarketCategoryRelationViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
|
||||
queryset = SupermarketCategoryRelation.objects
|
||||
serializer_class = SupermarketCategoryRelationSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
@@ -518,15 +561,15 @@ class SupermarketCategoryRelationViewSet(viewsets.ModelViewSet, StandardFilterMi
|
||||
return super().get_queryset()
|
||||
|
||||
|
||||
class KeywordViewSet(viewsets.ModelViewSet, TreeMixin):
|
||||
class KeywordViewSet(LoggingMixin, viewsets.ModelViewSet, TreeMixin):
|
||||
queryset = Keyword.objects
|
||||
model = Keyword
|
||||
serializer_class = KeywordSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
permission_classes = [(CustomIsGuest & IsReadOnlyDRF | CustomIsUser) & CustomTokenHasReadWriteScope]
|
||||
pagination_class = DefaultPagination
|
||||
|
||||
|
||||
class UnitViewSet(viewsets.ModelViewSet, MergeMixin, FuzzyFilterMixin):
|
||||
class UnitViewSet(LoggingMixin, viewsets.ModelViewSet, MergeMixin, FuzzyFilterMixin):
|
||||
queryset = Unit.objects
|
||||
model = Unit
|
||||
serializer_class = UnitSerializer
|
||||
@@ -534,7 +577,7 @@ class UnitViewSet(viewsets.ModelViewSet, MergeMixin, FuzzyFilterMixin):
|
||||
pagination_class = DefaultPagination
|
||||
|
||||
|
||||
class FoodInheritFieldViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
class FoodInheritFieldViewSet(LoggingMixin, viewsets.ReadOnlyModelViewSet):
|
||||
queryset = FoodInheritField.objects
|
||||
serializer_class = FoodInheritFieldSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
@@ -545,11 +588,11 @@ class FoodInheritFieldViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
return super().get_queryset()
|
||||
|
||||
|
||||
class FoodViewSet(viewsets.ModelViewSet, TreeMixin):
|
||||
class FoodViewSet(LoggingMixin, viewsets.ModelViewSet, TreeMixin):
|
||||
queryset = Food.objects
|
||||
model = Food
|
||||
serializer_class = FoodSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
permission_classes = [(CustomIsGuest & IsReadOnlyDRF | CustomIsUser) & CustomTokenHasReadWriteScope]
|
||||
pagination_class = DefaultPagination
|
||||
|
||||
def get_queryset(self):
|
||||
@@ -612,8 +655,8 @@ class FoodViewSet(viewsets.ModelViewSet, TreeMixin):
|
||||
return JsonResponse(
|
||||
{
|
||||
'msg':
|
||||
'API Key Rate Limit reached/exceeded, see https://api.data.gov/docs/rate-limits/ for more information. \
|
||||
Configure your key in Tandoor using environment FDC_API_KEY variable.'
|
||||
'API Key Rate Limit reached/exceeded, see https://api.data.gov/docs/rate-limits/ for more information. \
|
||||
Configure your key in Tandoor using environment FDC_API_KEY variable.'
|
||||
},
|
||||
status=429,
|
||||
json_dumps_params={'indent': 4})
|
||||
@@ -682,7 +725,7 @@ class FoodViewSet(viewsets.ModelViewSet, TreeMixin):
|
||||
return Response(content, status=status.HTTP_403_FORBIDDEN)
|
||||
|
||||
|
||||
class RecipeBookViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
class RecipeBookViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
|
||||
queryset = RecipeBook.objects
|
||||
serializer_class = RecipeBookSerializer
|
||||
permission_classes = [(CustomIsOwner | CustomIsShared) & CustomTokenHasReadWriteScope]
|
||||
@@ -700,7 +743,7 @@ class RecipeBookViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
return super().get_queryset()
|
||||
|
||||
|
||||
class RecipeBookEntryViewSet(viewsets.ModelViewSet, viewsets.GenericViewSet):
|
||||
class RecipeBookEntryViewSet(LoggingMixin, viewsets.ModelViewSet, viewsets.GenericViewSet):
|
||||
"""
|
||||
list:
|
||||
optional parameters
|
||||
@@ -726,7 +769,7 @@ class RecipeBookEntryViewSet(viewsets.ModelViewSet, viewsets.GenericViewSet):
|
||||
return queryset
|
||||
|
||||
|
||||
class MealPlanViewSet(viewsets.ModelViewSet):
|
||||
class MealPlanViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
"""
|
||||
list:
|
||||
optional parameters
|
||||
@@ -764,7 +807,7 @@ class MealPlanViewSet(viewsets.ModelViewSet):
|
||||
return queryset
|
||||
|
||||
|
||||
class AutoPlanViewSet(viewsets.ViewSet):
|
||||
class AutoPlanViewSet(LoggingMixin, viewsets.ViewSet):
|
||||
|
||||
def create(self, request):
|
||||
serializer = AutoMealPlanSerializer(data=request.data)
|
||||
@@ -826,7 +869,7 @@ class AutoPlanViewSet(viewsets.ViewSet):
|
||||
return Response(serializer.errors, 400)
|
||||
|
||||
|
||||
class MealTypeViewSet(viewsets.ModelViewSet):
|
||||
class MealTypeViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
"""
|
||||
returns list of meal types created by the
|
||||
requesting user ordered by the order field.
|
||||
@@ -840,7 +883,7 @@ class MealTypeViewSet(viewsets.ModelViewSet):
|
||||
return queryset
|
||||
|
||||
|
||||
class IngredientViewSet(viewsets.ModelViewSet):
|
||||
class IngredientViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = Ingredient.objects
|
||||
serializer_class = IngredientSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
@@ -864,7 +907,7 @@ class IngredientViewSet(viewsets.ModelViewSet):
|
||||
return queryset.select_related('food')
|
||||
|
||||
|
||||
class StepViewSet(viewsets.ModelViewSet):
|
||||
class StepViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = Step.objects
|
||||
serializer_class = StepSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
@@ -899,7 +942,7 @@ class RecipePagination(PageNumberPagination):
|
||||
return Response(OrderedDict([('count', self.page.paginator.count), ('next', self.get_next_link()), ('previous', self.get_previous_link()), ('results', data), ]))
|
||||
|
||||
|
||||
class RecipeViewSet(viewsets.ModelViewSet):
|
||||
class RecipeViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = Recipe.objects
|
||||
serializer_class = RecipeSerializer
|
||||
# TODO split read and write permission for meal plan guest
|
||||
@@ -995,7 +1038,7 @@ class RecipeViewSet(viewsets.ModelViewSet):
|
||||
elif 'image_url' in serializer.validated_data:
|
||||
try:
|
||||
url = serializer.validated_data['image_url']
|
||||
if validators.url(url, public=True):
|
||||
if validate_import_url(url):
|
||||
response = requests.get(url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"})
|
||||
image = File(io.BytesIO(response.content))
|
||||
filetype = mimetypes.guess_extension(response.headers['content-type']) or filetype
|
||||
@@ -1066,7 +1109,7 @@ class RecipeViewSet(viewsets.ModelViewSet):
|
||||
return Response(self.serializer_class(qs, many=True).data)
|
||||
|
||||
|
||||
class UnitConversionViewSet(viewsets.ModelViewSet):
|
||||
class UnitConversionViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = UnitConversion.objects
|
||||
serializer_class = UnitConversionSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
@@ -1083,7 +1126,7 @@ class UnitConversionViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
|
||||
class PropertyTypeViewSet(viewsets.ModelViewSet):
|
||||
class PropertyTypeViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = PropertyType.objects
|
||||
serializer_class = PropertyTypeSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
@@ -1092,7 +1135,7 @@ class PropertyTypeViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
|
||||
class PropertyViewSet(viewsets.ModelViewSet):
|
||||
class PropertyViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = Property.objects
|
||||
serializer_class = PropertySerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
@@ -1101,7 +1144,7 @@ class PropertyViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
|
||||
class ShoppingListRecipeViewSet(viewsets.ModelViewSet):
|
||||
class ShoppingListRecipeViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = ShoppingListRecipe.objects
|
||||
serializer_class = ShoppingListRecipeSerializer
|
||||
permission_classes = [(CustomIsOwner | CustomIsShared) & CustomTokenHasReadWriteScope]
|
||||
@@ -1112,10 +1155,10 @@ class ShoppingListRecipeViewSet(viewsets.ModelViewSet):
|
||||
Q(entries__isnull=True)
|
||||
| Q(entries__created_by=self.request.user)
|
||||
| Q(entries__created_by__in=list(self.request.user.get_shopping_share()))
|
||||
).distinct().all()
|
||||
).distinct().all()
|
||||
|
||||
|
||||
class ShoppingListEntryViewSet(viewsets.ModelViewSet):
|
||||
class ShoppingListEntryViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = ShoppingListEntry.objects
|
||||
serializer_class = ShoppingListEntrySerializer
|
||||
permission_classes = [(CustomIsOwner | CustomIsShared) & CustomTokenHasReadWriteScope]
|
||||
@@ -1125,7 +1168,7 @@ class ShoppingListEntryViewSet(viewsets.ModelViewSet):
|
||||
name='checked',
|
||||
description=_('Filter shopping list entries on checked. [''true'', ''false'', ''both'', ''<b>recent</b>'']<br> \
|
||||
- ''recent'' includes unchecked items and recently completed items.')
|
||||
),
|
||||
),
|
||||
QueryParam(name='supermarket', description=_('Returns the shopping list entries sorted by supermarket category order.'), qtype='integer'),
|
||||
]
|
||||
schema = QueryParamAutoSchema()
|
||||
@@ -1173,7 +1216,7 @@ class ShoppingListEntryViewSet(viewsets.ModelViewSet):
|
||||
print(serializer.validated_data)
|
||||
bulk_entries = ShoppingListEntry.objects.filter(
|
||||
Q(created_by=self.request.user) | Q(created_by__in=list(self.request.user.get_shopping_share()))
|
||||
).filter(space=request.space, id__in=serializer.validated_data['ids'])
|
||||
).filter(space=request.space, id__in=serializer.validated_data['ids'])
|
||||
bulk_entries.update(checked=(checked := serializer.validated_data['checked']), updated_at=timezone.now(), )
|
||||
|
||||
# update the onhand for food if shopping_add_onhand is True
|
||||
@@ -1191,7 +1234,7 @@ class ShoppingListEntryViewSet(viewsets.ModelViewSet):
|
||||
return Response(serializer.errors, 400)
|
||||
|
||||
|
||||
class ViewLogViewSet(viewsets.ModelViewSet):
|
||||
class ViewLogViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = ViewLog.objects
|
||||
serializer_class = ViewLogSerializer
|
||||
permission_classes = [CustomIsOwner & CustomTokenHasReadWriteScope]
|
||||
@@ -1202,7 +1245,7 @@ class ViewLogViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(created_by=self.request.user).filter(space=self.request.space)
|
||||
|
||||
|
||||
class CookLogViewSet(viewsets.ModelViewSet):
|
||||
class CookLogViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = CookLog.objects
|
||||
serializer_class = CookLogSerializer
|
||||
permission_classes = [CustomIsOwner & CustomTokenHasReadWriteScope]
|
||||
@@ -1217,7 +1260,7 @@ class CookLogViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
|
||||
class ImportLogViewSet(viewsets.ModelViewSet):
|
||||
class ImportLogViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = ImportLog.objects
|
||||
serializer_class = ImportLogSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
@@ -1227,7 +1270,7 @@ class ImportLogViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
|
||||
class ExportLogViewSet(viewsets.ModelViewSet):
|
||||
class ExportLogViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = ExportLog.objects
|
||||
serializer_class = ExportLogSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
@@ -1237,7 +1280,7 @@ class ExportLogViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
|
||||
class BookmarkletImportViewSet(viewsets.ModelViewSet):
|
||||
class BookmarkletImportViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = BookmarkletImport.objects
|
||||
serializer_class = BookmarkletImportSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasScope]
|
||||
@@ -1252,7 +1295,7 @@ class BookmarkletImportViewSet(viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space).all()
|
||||
|
||||
|
||||
class UserFileViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
class UserFileViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
|
||||
schema = FilterSchema()
|
||||
queryset = UserFile.objects
|
||||
serializer_class = UserFileSerializer
|
||||
@@ -1264,7 +1307,7 @@ class UserFileViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
return super().get_queryset()
|
||||
|
||||
|
||||
class AutomationViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
class AutomationViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
|
||||
"""
|
||||
list:
|
||||
optional parameters
|
||||
@@ -1315,7 +1358,7 @@ class AutomationViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
return super().get_queryset()
|
||||
|
||||
|
||||
class InviteLinkViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
class InviteLinkViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
|
||||
queryset = InviteLink.objects
|
||||
serializer_class = InviteLinkSerializer
|
||||
permission_classes = [CustomIsSpaceOwner & CustomIsAdmin & CustomTokenHasReadWriteScope]
|
||||
@@ -1333,7 +1376,7 @@ class InviteLinkViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
return None
|
||||
|
||||
|
||||
class CustomFilterViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
class CustomFilterViewSet(LoggingMixin, viewsets.ModelViewSet, StandardFilterMixin):
|
||||
queryset = CustomFilter.objects
|
||||
serializer_class = CustomFilterSerializer
|
||||
permission_classes = [CustomIsOwner & CustomTokenHasReadWriteScope]
|
||||
@@ -1344,7 +1387,7 @@ class CustomFilterViewSet(viewsets.ModelViewSet, StandardFilterMixin):
|
||||
return super().get_queryset()
|
||||
|
||||
|
||||
class AccessTokenViewSet(viewsets.ModelViewSet):
|
||||
class AccessTokenViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = AccessToken.objects
|
||||
serializer_class = AccessTokenSerializer
|
||||
permission_classes = [CustomIsOwner & CustomTokenHasReadWriteScope]
|
||||
@@ -1412,13 +1455,21 @@ class RecipeUrlImportView(APIView):
|
||||
|
||||
url = serializer.validated_data.get('url', None)
|
||||
data = unquote(serializer.validated_data.get('data', None))
|
||||
|
||||
duplicate = False
|
||||
if url:
|
||||
# Check for existing recipes with provided url
|
||||
existing_recipe = Recipe.objects.filter(source_url=url).first()
|
||||
if existing_recipe:
|
||||
duplicate = True
|
||||
|
||||
if not url and not data:
|
||||
return Response({'error': True, 'msg': _('Nothing to do.')}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
elif url and not data:
|
||||
if re.match('^(https?://)?(www\\.youtube\\.com|youtu\\.be)/.+$', url):
|
||||
if validators.url(url, public=True):
|
||||
return Response({'recipe_json': get_from_youtube_scraper(url, request), 'recipe_images': [], }, status=status.HTTP_200_OK)
|
||||
if validate_import_url(url):
|
||||
return Response({'recipe_json': get_from_youtube_scraper(url, request), 'recipe_images': [], 'duplicate': duplicate}, status=status.HTTP_200_OK)
|
||||
if re.match('^(.)*/view/recipe/[0-9]+/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', url):
|
||||
recipe_json = requests.get(
|
||||
url.replace('/view/recipe/', '/api/recipe/').replace(re.split('/view/recipe/[0-9]+', url)[1], '') + '?share='
|
||||
@@ -1427,17 +1478,20 @@ class RecipeUrlImportView(APIView):
|
||||
serialized_recipe = RecipeExportSerializer(data=recipe_json, context={'request': request})
|
||||
if serialized_recipe.is_valid():
|
||||
recipe = serialized_recipe.save()
|
||||
if validators.url(recipe_json['image'], public=True):
|
||||
if validate_import_url(recipe_json['image']):
|
||||
recipe.image = File(handle_image(request,
|
||||
File(io.BytesIO(requests.get(recipe_json['image']).content), name='image'),
|
||||
filetype=pathlib.Path(recipe_json['image']).suffix),
|
||||
name=f'{uuid.uuid4()}_{recipe.pk}{pathlib.Path(recipe_json["image"]).suffix}')
|
||||
recipe.save()
|
||||
return Response({'link': request.build_absolute_uri(reverse('view_recipe', args={recipe.pk}))}, status=status.HTTP_201_CREATED)
|
||||
return Response({'link': request.build_absolute_uri(reverse('view_recipe', args={recipe.pk})), 'duplicate': duplicate}, status=status.HTTP_201_CREATED)
|
||||
else:
|
||||
try:
|
||||
if validators.url(url, public=True):
|
||||
html = requests.get(url).content
|
||||
if validate_import_url(url):
|
||||
html = requests.get(
|
||||
url,
|
||||
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"}
|
||||
).content
|
||||
scrape = scrape_html(org_url=url, html=html, supported_only=False)
|
||||
else:
|
||||
return Response({'error': True, 'msg': _('Invalid Url')}, status=status.HTTP_400_BAD_REQUEST)
|
||||
@@ -1457,16 +1511,17 @@ class RecipeUrlImportView(APIView):
|
||||
data = "<script type='application/ld+json'>" + json.dumps(data_json) + "</script>"
|
||||
except JSONDecodeError:
|
||||
pass
|
||||
scrape = text_scraper(text=data, url=url)
|
||||
if not url and (found_url := scrape.schema.data.get('url', None)):
|
||||
scrape = text_scraper(text=data, url=found_url)
|
||||
scrape = scrape_html(html=data, org_url='https://urlnotfound.none', supported_only=False)
|
||||
if not url and (found_url := scrape.schema.data.get('url', 'https://urlnotfound.none')):
|
||||
scrape = scrape_html(html=data, org_url=found_url, supported_only=False)
|
||||
|
||||
if scrape:
|
||||
return Response({
|
||||
'recipe_json': helper.get_from_scraper(scrape, request),
|
||||
'recipe_images': list(dict.fromkeys(get_images_from_soup(scrape.soup, url))),
|
||||
'duplicate': duplicate
|
||||
},
|
||||
status=status.HTTP_200_OK)
|
||||
status=status.HTTP_200_OK)
|
||||
|
||||
else:
|
||||
return Response({'error': True, 'msg': _('No usable data could be found.')}, status=status.HTTP_400_BAD_REQUEST)
|
||||
@@ -1677,7 +1732,7 @@ def sync_all(request):
|
||||
# @schema(AutoSchema()) #TODO add proper schema
|
||||
@permission_classes([CustomIsUser & CustomTokenHasReadWriteScope])
|
||||
def share_link(request, pk):
|
||||
if request.space.allow_sharing and has_group_permission(request.user, ('user', )):
|
||||
if request.space.allow_sharing and has_group_permission(request.user, ('user',)):
|
||||
recipe = get_object_or_404(Recipe, pk=pk, space=request.space)
|
||||
link = ShareLink.objects.create(recipe=recipe, created_by=request.user, space=request.space)
|
||||
return JsonResponse({'pk': pk, 'share': link.uuid, 'link': request.build_absolute_uri(reverse('view_recipe', args=[pk, link.uuid]))})
|
||||
|
||||
@@ -80,7 +80,7 @@ class SyncUpdate(GroupRequiredMixin, UpdateView, SpaceFormMixing):
|
||||
def edit_storage(request, pk):
|
||||
instance: Storage = get_object_or_404(Storage, pk=pk, space=request.space)
|
||||
|
||||
if not (instance.created_by == request.user or request.user.is_superuser):
|
||||
if not request.user.is_superuser:
|
||||
messages.add_message(request, messages.ERROR, _('You cannot edit this storage!'))
|
||||
return HttpResponseRedirect(reverse('list_storage'))
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ from cookbook.integration.recipesage import RecipeSage
|
||||
from cookbook.integration.rezeptsuitede import Rezeptsuitede
|
||||
from cookbook.integration.rezkonv import RezKonv
|
||||
from cookbook.integration.saffron import Saffron
|
||||
from cookbook.integration.gourmet import Gourmet
|
||||
from cookbook.models import ExportLog, Recipe
|
||||
from recipes import settings
|
||||
|
||||
@@ -80,6 +81,8 @@ def get_integration(request, export_type):
|
||||
return Cookmate(request, export_type)
|
||||
if export_type == ImportExportBase.REZEPTSUITEDE:
|
||||
return Rezeptsuitede(request, export_type)
|
||||
if export_type == ImportExportBase.GOURMET:
|
||||
return Gourmet(request, export_type)
|
||||
|
||||
|
||||
@group_required('user')
|
||||
|
||||
@@ -58,10 +58,16 @@ class StorageCreate(GroupRequiredMixin, CreateView):
|
||||
obj = form.save(commit=False)
|
||||
obj.created_by = self.request.user
|
||||
obj.space = self.request.space
|
||||
obj.save()
|
||||
|
||||
if self.request.space.demo or settings.HOSTED:
|
||||
messages.add_message(self.request, messages.ERROR, _('This feature is not yet available in the hosted version of tandoor!'))
|
||||
return redirect('index')
|
||||
|
||||
if not self.request.user.is_superuser:
|
||||
messages.add_message(self.request, messages.ERROR, _('This feature is only available for the instance administrator (superuser)'))
|
||||
return redirect('index')
|
||||
|
||||
obj.save()
|
||||
return HttpResponseRedirect(reverse('edit_storage', kwargs={'pk': obj.pk}))
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import os
|
||||
import re
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timedelta
|
||||
from io import StringIO
|
||||
from uuid import UUID
|
||||
|
||||
import redis
|
||||
from django.apps import apps
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
@@ -17,6 +18,7 @@ from django.http import HttpResponseRedirect, JsonResponse
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.urls import reverse, reverse_lazy
|
||||
from django.utils import timezone
|
||||
from django.utils.datetime_safe import date
|
||||
from django.utils.translation import gettext as _
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
@@ -38,7 +40,8 @@ def index(request):
|
||||
return HttpResponseRedirect(reverse_lazy('view_search'))
|
||||
|
||||
try:
|
||||
page_map = {UserPreference.SEARCH: reverse_lazy('view_search'), UserPreference.PLAN: reverse_lazy('view_plan'), UserPreference.BOOKS: reverse_lazy('view_books'), UserPreference.SHOPPING: reverse_lazy('view_shopping'),}
|
||||
page_map = {UserPreference.SEARCH: reverse_lazy('view_search'), UserPreference.PLAN: reverse_lazy('view_plan'), UserPreference.BOOKS: reverse_lazy('view_books'),
|
||||
UserPreference.SHOPPING: reverse_lazy('view_shopping'), }
|
||||
|
||||
return HttpResponseRedirect(page_map.get(request.user.userpreference.default_page))
|
||||
except UserPreference.DoesNotExist:
|
||||
@@ -160,7 +163,6 @@ def recipe_view(request, pk, share=None):
|
||||
return render(request, 'recipe_view.html', {'recipe': recipe, 'comments': comments, 'comment_form': comment_form, 'share': share, 'servings': servings})
|
||||
|
||||
|
||||
|
||||
@group_required('user')
|
||||
def books(request):
|
||||
return render(request, 'books.html', {})
|
||||
@@ -344,11 +346,51 @@ def system(request):
|
||||
for key in migration_info.keys():
|
||||
migration_info[key]['total'] = len(migration_info[key]['unapplied_migrations']) + len(migration_info[key]['applied_migrations'])
|
||||
|
||||
api_stats = None
|
||||
api_space_stats = None
|
||||
# API endpoint logging
|
||||
if settings.REDIS_HOST:
|
||||
r = redis.StrictRedis(
|
||||
host=settings.REDIS_HOST,
|
||||
port=settings.REDIS_PORT,
|
||||
password='',
|
||||
username='',
|
||||
db=settings.REDIS_DATABASES['STATS'],
|
||||
)
|
||||
|
||||
api_stats = [['Endpoint', 'Total']]
|
||||
api_space_stats = [['User', 'Total']]
|
||||
total_stats = ['All', int(r.get('api:request-count'))]
|
||||
|
||||
for i in range(0, 6):
|
||||
d = (date.today() - timedelta(days=i)).isoformat()
|
||||
api_stats[0].append(d)
|
||||
api_space_stats[0].append(d)
|
||||
total_stats.append(int(r.get(f'api:request-count:{d}')) if r.get(f'api:request-count:{d}') else 0)
|
||||
|
||||
api_stats.append(total_stats)
|
||||
|
||||
for x in r.zrange('api:endpoint-request-count', 0, -1, withscores=True, desc=True):
|
||||
endpoint = x[0].decode('utf-8')
|
||||
endpoint_stats = [endpoint, x[1]]
|
||||
for i in range(0, 6):
|
||||
d = (date.today() - timedelta(days=i)).isoformat()
|
||||
endpoint_stats.append(r.zscore(f'api:endpoint-request-count:{d}', endpoint))
|
||||
api_stats.append(endpoint_stats)
|
||||
|
||||
for x in r.zrange('api:space-request-count', 0, 20, withscores=True, desc=True):
|
||||
s = x[0].decode('utf-8')
|
||||
space_stats = [Space.objects.get(pk=s).name, x[1]]
|
||||
for i in range(0, 6):
|
||||
d = (date.today() - timedelta(days=i)).isoformat()
|
||||
space_stats.append(r.zscore(f'api:space-request-count:{d}', s))
|
||||
api_space_stats.append(space_stats)
|
||||
|
||||
return render(
|
||||
request, 'system.html', {
|
||||
'gunicorn_media': settings.GUNICORN_MEDIA, 'debug': settings.DEBUG, 'postgres': postgres, 'postgres_version': postgres_ver, 'postgres_status': database_status,
|
||||
'postgres_message': database_message, 'version_info': VERSION_INFO, 'plugins': PLUGINS, 'secret_key': secret_key, 'orphans': orphans, 'migration_info': migration_info,
|
||||
'missing_migration': missing_migration, 'allowed_hosts': settings.ALLOWED_HOSTS,
|
||||
'missing_migration': missing_migration, 'allowed_hosts': settings.ALLOWED_HOSTS, 'api_stats': api_stats, 'api_space_stats': api_space_stats
|
||||
})
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
Besides the normal django username and password authentication this application supports multiple
|
||||
Besides the normal django username and password authentication this application supports multiple
|
||||
methods of central account management and authentication.
|
||||
|
||||
## Allauth
|
||||
[Django Allauth](https://django-allauth.readthedocs.io/en/latest/index.html) is an awesome project that
|
||||
[Django Allauth](https://django-allauth.readthedocs.io/en/latest/index.html) is an awesome project that
|
||||
allows you to use a [huge number](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) of different
|
||||
authentication providers.
|
||||
|
||||
@@ -11,8 +11,8 @@ They basically explain everything in their documentation, but the following is a
|
||||
!!! warning "Public Providers"
|
||||
If you choose Google, Github or any other publicly available service as your authentication provider anyone
|
||||
with an account on that site can create an account on your installation.
|
||||
A new account does not have any permission but it is still **not recommended** to give public access to
|
||||
your installation.
|
||||
A new account does not have any permission but it is still **not recommended** to give public access to
|
||||
your installation.
|
||||
|
||||
Choose a provider from the [list](https://docs.allauth.org/en/latest/socialaccount/providers/index.html) and install it using the environment variable `SOCIAL_PROVIDERS` as shown
|
||||
in the example below.
|
||||
@@ -28,15 +28,15 @@ SOCIAL_PROVIDERS=allauth.socialaccount.providers.openid_connect,allauth.socialac
|
||||
|
||||
### Configuration, via environment
|
||||
|
||||
Depending on your authentication provider you **might need** to configure it.
|
||||
This needs to be done through the settings system. To make the system flexible (allow multiple providers) and to
|
||||
Depending on your authentication provider you **might need** to configure it.
|
||||
This needs to be done through the settings system. To make the system flexible (allow multiple providers) and to
|
||||
not require another file to be mounted into the container the configuration ins done through a single
|
||||
environment variable. The downside of this approach is that the configuration needs to be put into a single line
|
||||
as environment files loaded by docker compose don't support multiple lines for a single variable.
|
||||
|
||||
The line data needs to either be in json or as Python dictionary syntax.
|
||||
|
||||
Take the example configuration from the allauth docs, fill in your settings and then inline the whole object
|
||||
Take the example configuration from the allauth docs, fill in your settings and then inline the whole object
|
||||
(you can use a service like [www.freeformatter.com](https://www.freeformatter.com/json-formatter.html) for formatting).
|
||||
Assign it to the additional `SOCIALACCOUNT_PROVIDERS` variable.
|
||||
|
||||
@@ -46,6 +46,13 @@ The example below is for a generic OIDC provider with PKCE enabled. Most values
|
||||
SOCIALACCOUNT_PROVIDERS = "{ 'openid_connect': { 'OAUTH_PKCE_ENABLED': True, 'APPS': [ { 'provider_id': 'oidc', 'name': 'My-IDM', 'client_id': 'my_client_id', 'secret': 'my_client_secret', 'settings': { 'server_url': 'https://idm.example.com/oidc/recipes' } } ] } }"
|
||||
```
|
||||
|
||||
Because this JSON contains sensitive data (client id and secret), you may instead choose to save the JSON in a file
|
||||
and set the environment variable `SOCIALACCOUNT_PROVIDERS_FILE` to the path of the file containing the JSON.
|
||||
|
||||
```
|
||||
SOCIALACCOUNT_PROVIDERS_FILE=/run/secrets/socialaccount_providers.txt
|
||||
```
|
||||
|
||||
!!! success "Improvements ?"
|
||||
There are most likely ways to achieve the same goal but with a cleaner or simpler system.
|
||||
If you know such a way feel free to let me know.
|
||||
@@ -81,7 +88,7 @@ SOCIALACCOUNT_PROVIDERS='{"openid_connect":{"APPS":[{"provider_id":"keycloak","n
|
||||
You are now able to sign in using Keycloak after a restart of the service.
|
||||
|
||||
### Linking accounts
|
||||
To link an account to an already existing normal user go to the settings page of the user and link it.
|
||||
To link an account to an already existing normal user go to the settings page of the user and link it.
|
||||
Here you can also unlink your account if you no longer want to use a social login method.
|
||||
|
||||
## LDAP
|
||||
@@ -111,7 +118,7 @@ AUTH_LDAP_TLS_CACERTFILE=/etc/ssl/certs/own-ca.pem
|
||||
If you just set `REMOTE_USER_AUTH=1` without any additional configuration, _anybody_ can authenticate with _any_ username!
|
||||
|
||||
!!! Info "Community Contributed Tutorial"
|
||||
This tutorial was provided by a community member. We are not able to provide any support! Please only use, if you know what you are doing!
|
||||
This tutorial was provided by a community member. We are not able to provide any support! Please only use, if you know what you are doing!
|
||||
|
||||
In order use external authentication (i.e. using a proxy auth like Authelia, Authentik, etc.) you will need to:
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
This application features a very versatile import and export feature in order
|
||||
This application features a very versatile import and export feature in order
|
||||
to offer the best experience possible and allow you to freely choose where your data goes.
|
||||
|
||||
!!! WARNING "WIP"
|
||||
@@ -12,7 +12,7 @@ Feel like there is an important integration missing? Just take a look at the [in
|
||||
if your favorite one is missing.
|
||||
|
||||
!!! info "Export"
|
||||
I strongly believe in everyone's right to use their data as they please and therefore want to give you
|
||||
I strongly believe in everyone's right to use their data as they please and therefore want to give you
|
||||
the best possible flexibility with your recipes.
|
||||
That said for most of the people getting this application running with their recipes is the biggest priority.
|
||||
Because of this importing as many formats as possible is prioritized over exporting.
|
||||
@@ -21,50 +21,55 @@ if your favorite one is missing.
|
||||
Overview of the capabilities of the different integrations.
|
||||
|
||||
| Integration | Import | Export | Images |
|
||||
|--------------------| ------ | -- | ------ |
|
||||
| Default | ✔️ | ✔️ | ✔️ |
|
||||
| Nextcloud | ✔️ | ⌚ | ✔️ |
|
||||
| Mealie | ✔️ | ⌚ | ✔️ |
|
||||
| Chowdown | ✔️ | ⌚ | ✔️ |
|
||||
| Safron | ✔️ | ✔️ | ❌ |
|
||||
| Paprika | ✔️ | ⌚ | ✔️ |
|
||||
| ChefTap | ✔️ | ❌ | ❌ |
|
||||
| Pepperplate | ✔️ | ⌚ | ❌ |
|
||||
| RecipeSage | ✔️ | ✔️ | ✔️ |
|
||||
| Rezeptsuite.de | ✔️ | ❌ | ✔️ |
|
||||
| Domestica | ✔️ | ⌚ | ✔️ |
|
||||
| MealMaster | ✔️ | ❌ | ❌ |
|
||||
| RezKonv | ✔️ | ❌ | ❌ |
|
||||
| OpenEats | ✔️ | ❌ | ⌚ |
|
||||
| Plantoeat | ✔️ | ❌ | ✔ |
|
||||
| CookBookApp | ✔️ | ⌚ | ✔️ |
|
||||
| CopyMeThat | ✔️ | ❌ | ✔️ |
|
||||
| Melarecipes | ✔️ | ⌚ | ✔️ |
|
||||
| Cookmate | ✔️ | ⌚ | ✔️ |
|
||||
| PDF (experimental) | ⌚️ | ✔️ | ✔️ |
|
||||
| ------------------ | ------ | ------ | ------ |
|
||||
| Default | ✔️ | ✔️ | ✔️ |
|
||||
| Nextcloud | ✔️ | ⌚ | ✔️ |
|
||||
| Mealie | ✔️ | ⌚ | ✔️ |
|
||||
| Chowdown | ✔️ | ⌚ | ✔️ |
|
||||
| Safron | ✔️ | ✔️ | ❌ |
|
||||
| Paprika | ✔️ | ⌚ | ✔️ |
|
||||
| ChefTap | ✔️ | ❌ | ❌ |
|
||||
| Pepperplate | ✔️ | ⌚ | ❌ |
|
||||
| RecipeSage | ✔️ | ✔️ | ✔️ |
|
||||
| Rezeptsuite.de | ✔️ | ❌ | ✔️ |
|
||||
| Domestica | ✔️ | ⌚ | ✔️ |
|
||||
| MealMaster | ✔️ | ❌ | ❌ |
|
||||
| RezKonv | ✔️ | ❌ | ❌ |
|
||||
| OpenEats | ✔️ | ❌ | ⌚ |
|
||||
| Plantoeat | ✔️ | ❌ | ✔ |
|
||||
| CookBookApp | ✔️ | ⌚ | ✔️ |
|
||||
| CopyMeThat | ✔️ | ❌ | ✔️ |
|
||||
| Melarecipes | ✔️ | ⌚ | ✔️ |
|
||||
| Cookmate | ✔️ | ⌚ | ✔️ |
|
||||
| PDF (experimental) | ⌚️ | ✔️ | ✔️ |
|
||||
| Gourmet | ✔️ | ❌ | ✔️ |
|
||||
|
||||
✔️ = implemented, ❌ = not implemented and not possible/planned, ⌚ = not yet implemented
|
||||
|
||||
## Default
|
||||
|
||||
The default integration is the built in (and preferred) way to import and export recipes.
|
||||
It is maintained with new fields added and contains all data to transfer your recipes from one installation to another.
|
||||
|
||||
It is also one of the few recipe formats that is actually structured in a way that allows for
|
||||
easy machine readability if you want to use the data for any other purpose.
|
||||
It is also one of the few recipe formats that is actually structured in a way that allows for
|
||||
easy machine readability if you want to use the data for any other purpose.
|
||||
|
||||
## RecipeSage
|
||||
Go to Settings > Export Recipe Data and select `EXPORT AS JSON-LD (BEST)`. Then simply upload the exported file
|
||||
|
||||
Go to Settings > Export Recipe Data and select `EXPORT AS JSON-LD (BEST)`. Then simply upload the exported file
|
||||
to Tandoor.
|
||||
|
||||
The RecipeSage integration also allows exporting. To migrate from Tandoor to RecipeSage simply export with Recipe Sage
|
||||
The RecipeSage integration also allows exporting. To migrate from Tandoor to RecipeSage simply export with Recipe Sage
|
||||
selected and import the json file in RecipeSage. Images are currently not supported for exporting.
|
||||
|
||||
## Domestica
|
||||
Go to Import/Export and select `Export Recipes`. Then simply upload the exported file
|
||||
|
||||
Go to Import/Export and select `Export Recipes`. Then simply upload the exported file
|
||||
to Tandoor.
|
||||
|
||||
## Nextcloud
|
||||
Importing recipes from Nextcloud cookbook is very easy and since Nextcloud Cookbook provides nice, standardized and
|
||||
|
||||
Importing recipes from Nextcloud cookbook is very easy and since Nextcloud Cookbook provides nice, standardized and
|
||||
structured information most of your recipe is going to be intact.
|
||||
|
||||
Follow these steps to import your recipes
|
||||
@@ -77,10 +82,9 @@ Follow these steps to import your recipes
|
||||
You will get a `Recipes.zip` file. Simply upload the file and choose the Nextcloud Cookbook type.
|
||||
|
||||
!!! WARNING "Folder Structure"
|
||||
Importing only works if the folder structure is correct. If you do not use the standard path or create the
|
||||
zip file in any other way make sure the structure is as follows
|
||||
```
|
||||
Recipes.zip/
|
||||
Importing only works if the folder structure is correct. If you do not use the standard path or create the
|
||||
zip file in any other way make sure the structure is as follows
|
||||
` Recipes.zip/
|
||||
└── Recipes/
|
||||
├── Recipe1/
|
||||
│ ├── recipe.json
|
||||
@@ -88,27 +92,29 @@ You will get a `Recipes.zip` file. Simply upload the file and choose the Nextclo
|
||||
└── Recipe2/
|
||||
├── recipe.json
|
||||
└── full.jpg
|
||||
```
|
||||
`
|
||||
|
||||
## Mealie
|
||||
Mealie provides structured data similar to nextcloud.
|
||||
|
||||
To migrate your recipes
|
||||
Mealie provides structured data similar to nextcloud.
|
||||
|
||||
To migrate your recipes
|
||||
|
||||
1. Go to your Mealie settings and create a new Backup.
|
||||
2. Download the backup by clicking on it and pressing download (this wasn't working for me, so I had to manually pull it from the server).
|
||||
3. Upload the entire `.zip` file to the importer page and import everything.
|
||||
|
||||
## Chowdown
|
||||
Chowdown stores all your recipes in plain text markdown files in a directory called `_recipes`.
|
||||
|
||||
Chowdown stores all your recipes in plain text markdown files in a directory called `_recipes`.
|
||||
Images are saved in a directory called `images`.
|
||||
|
||||
In order to import your Chowdown recipes simply create a `.zip` file from those two folders and import them.
|
||||
In order to import your Chowdown recipes simply create a `.zip` file from those two folders and import them.
|
||||
The folder structure should look as follows
|
||||
|
||||
!!! info "_recipes"
|
||||
For some reason chowdown uses `_` before the `recipes` folder. To avoid confusion the import supports both
|
||||
`_recipes` and `recipes`
|
||||
For some reason chowdown uses `_`before the`recipes`folder. To avoid confusion the import supports both
|
||||
`\_recipes`and`recipes`
|
||||
|
||||
```
|
||||
Recipes.zip/
|
||||
@@ -123,31 +129,35 @@ Recipes.zip/
|
||||
```
|
||||
|
||||
## Safron
|
||||
|
||||
Go to your safron settings page and export your recipes.
|
||||
Then simply upload the entire `.zip` file to the importer.
|
||||
|
||||
!!! warning "Images"
|
||||
Safron exports do not contain any images. They will be lost during import.
|
||||
Safron exports do not contain any images. They will be lost during import.
|
||||
|
||||
## Paprika
|
||||
|
||||
A Paprika export contains a folder with a html representation of your recipes and a `.paprikarecipes` file.
|
||||
|
||||
The `.paprikarecipes` file is basically just a zip with gzipped contents. Simply upload the whole file and import
|
||||
all your recipes.
|
||||
The `.paprikarecipes` file is basically just a zip with gzipped contents. Simply upload the whole file and import
|
||||
all your recipes.
|
||||
|
||||
## Pepperplate
|
||||
|
||||
Pepperplate provides a `.zip` file containing all of your recipes as `.txt` files. These files are well-structured and allow
|
||||
the import of all data without losing anything.
|
||||
|
||||
Simply export the recipes from Pepperplate and upload the zip to Tandoor. Images are not included in the export and
|
||||
Simply export the recipes from Pepperplate and upload the zip to Tandoor. Images are not included in the export and
|
||||
thus cannot be imported.
|
||||
|
||||
## ChefTap
|
||||
|
||||
ChefTaps allows you to export your recipes from the app (I think). The export is a zip file containing a folder called
|
||||
`cheftap_export` which in turn contains `.txt` files with your recipes.
|
||||
|
||||
This format is basically completely unstructured and every export looks different. This makes importing it very hard
|
||||
and leads to suboptimal results. Images are also not supported as they are not included in the export (at least
|
||||
and leads to suboptimal results. Images are also not supported as they are not included in the export (at least
|
||||
the tests I had).
|
||||
|
||||
Usually the import should recognize all ingredients and put everything else into the instructions. If your import fails
|
||||
@@ -156,31 +166,36 @@ or is worse than this feel free to provide me with more example data and I can t
|
||||
As ChefTap cannot import these files anyway there won't be an exporter implemented in Tandoor.
|
||||
|
||||
## MealMaster
|
||||
Meal master can be imported by uploading one or more meal master files.
|
||||
The files should either be `.txt`, `.MMF` or `.MM` files.
|
||||
|
||||
Meal master can be imported by uploading one or more meal master files.
|
||||
The files should either be `.txt`, `.MMF` or `.MM` files.
|
||||
|
||||
The MealMaster spec allows for many variations. Currently, only the one column format for ingredients is supported.
|
||||
Second line notes to ingredients are currently also not imported as a note but simply put into the instructions.
|
||||
If you have MealMaster recipes that cannot be imported feel free to raise an issue.
|
||||
|
||||
## RezKonv
|
||||
The RezKonv format is primarily used in the german recipe manager RezKonv Suite.
|
||||
|
||||
The RezKonv format is primarily used in the german recipe manager RezKonv Suite.
|
||||
To migrate from RezKonv Suite to Tandoor select `Export > Gesamtes Kochbuch exportieren` (the last option in the export menu).
|
||||
The generated file can simply be imported into Tandoor.
|
||||
|
||||
As I only had limited sample data feel free to open an issue if your RezKonv export cannot be imported.
|
||||
|
||||
## Recipekeeper
|
||||
Recipe keeper allows you to export a zip file containing recipes and images using its apps.
|
||||
|
||||
Recipe keeper allows you to export a zip file containing recipes and images using its apps.
|
||||
This zip file can simply be imported into Tandoor.
|
||||
|
||||
## OpenEats
|
||||
|
||||
OpenEats does not provide any way to export the data using the interface. Luckily it is relatively easy to export it from the command line.
|
||||
You need to run the command `python manage.py dumpdata recipe ingredient` inside of the application api container.
|
||||
If you followed the default installation method you can use the following command `docker-compose -f docker-prod.yml run --rm --entrypoint 'sh' api ./manage.py dumpdata recipe ingredient`.
|
||||
This command might also work `docker exec -it openeats_api_1 ./manage.py dumpdata recipe ingredient rating recipe_groups > recipe_ingredients.json`
|
||||
|
||||
Store the outputted json string in a `.json` file and simply import it using the importer. The file should look something like this
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
@@ -231,30 +246,44 @@ CookBookApp can export .zip files containing .html files. Upload the entire ZIP
|
||||
CopyMeThat can export .zip files containing an `.html` file as well as a folder containing all the images. Upload the entire ZIP to Tandoor to import all included recipes.
|
||||
|
||||
## Cookmate
|
||||
|
||||
Cookmate allows you to export a `.mcb` file which you can simply upload to tandoor and import all your recipes.
|
||||
|
||||
## RecetteTek
|
||||
RecetteTek exports are `.rtk` files which can simply be uploaded to tandoor to import all your recipes.
|
||||
|
||||
RecetteTek exports are `.rtk` files which can simply be uploaded to tandoor to import all your recipes.
|
||||
|
||||
## Rezeptsuite.de
|
||||
|
||||
Rezeptsuite.de exports are `.xml` files which can simply be uploaded to tandoor to import all your recipes.
|
||||
|
||||
It appears that Reptsuite, depending on the client, might export a `.zip` file containing a `.cml` file.
|
||||
If this happens just unzip the zip file and change `.cml` to `.xml` to import your recipes.
|
||||
If this happens just unzip the zip file and change `.cml` to `.xml` to import your recipes.
|
||||
|
||||
## Melarecipes
|
||||
|
||||
Melarecipes provides multiple export formats but only the `MelaRecipes` format can export the complete collection.
|
||||
Perform this export and open the `.melarecipes` file using your favorite archive opening program (e.g 7zip).
|
||||
Perform this export and open the `.melarecipes` file using your favorite archive opening program (e.g 7zip).
|
||||
Repeat this if the file contains another `.melarecipes` file until you get a list of one or many `.melarecipe` files.
|
||||
Upload all `.melarecipe` files you want to import to tandoor and start the import.
|
||||
|
||||
## PDF
|
||||
|
||||
The PDF Exporter is an experimental feature that uses the puppeteer browser renderer to render each recipe and export it to PDF.
|
||||
For that to work it downloads a chromium binary of about 140 MB to your server and then renders the PDF files using that.
|
||||
The PDF Exporter is an experimental feature that uses the puppeteer browser renderer to render each recipe and export it to PDF.
|
||||
For that to work it downloads a chromium binary of about 140 MB to your server and then renders the PDF files using that.
|
||||
|
||||
Since that is something some server administrators might not want there the PDF exporter is disabled by default and can be enabled with `ENABLE_PDF_EXPORT=1` in `.env`.
|
||||
|
||||
See [this issue](https://github.com/TandoorRecipes/recipes/pull/1211) for more discussion on this and
|
||||
See [this issue](https://github.com/TandoorRecipes/recipes/pull/1211) for more discussion on this and
|
||||
[this issue](https://github.com/TandoorRecipes/recipes/issues/781) for the future plans to support server side rendering.
|
||||
|
||||
## Gourmet
|
||||
|
||||
An importer for files from [Gourmet](https://github.com/thinkle/gourmet/). As the `.grmt` files appears to lack the unit for ingredients
|
||||
a file with `.zip` file with `.htm` and `.jpg`is expected.
|
||||
|
||||
To generate the file export to 'html' in Gourmet and zip the folder generated.
|
||||
|
||||
The import of menues is not supported
|
||||
|
||||
Export is not supported due to problems with `.grmt` format.
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
These instructions are inspired from a standard django/gunicorn/postgresql instructions ([for example](https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04))
|
||||
|
||||
!!! warning
|
||||
Be sure to use python 3.9 at least and pip related to python 3.9 at least. Depending on your distribution calling `python` or `pip` will use python2 instead of python 3.9. As of writing this documentation 3.10 is available as well.
|
||||
Make sure your machine got at least 2048 MB memory, otherwise the yarn build will fail with `FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory`.
|
||||
Make sure to use at least Python 3.10 (although 3.12 is preferred) or higher, and ensure that `pip` is associated with Python 3. Depending on your system configuration, using `python` or `pip` might default to Python 2. Make sure your machine has at least 2048 MB of memory; otherwise, the `yarn build` process may fail with the error: `FATAL ERROR: Reached heap limit - Allocation failed: JavaScript heap out of memory`.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
|
||||
@@ -354,7 +354,7 @@ SOCIAL_PROVIDERS = allauth.socialaccount.providers.github, allauth.socialaccount
|
||||
Allow authentication via the REMOTE-USER header (can be used for e.g. authelia).
|
||||
|
||||
!!! danger
|
||||
Leave off if you don't know what you are doing! Enabling this without proper configuration will enable anybody
|
||||
Leave off if you don't know what you are doing! Enabling this without proper configuration will enable anybody
|
||||
to login with any username!
|
||||
|
||||
```
|
||||
@@ -377,6 +377,14 @@ AUTH_LDAP_TLS_CACERTFILE=
|
||||
AUTH_LDAP_START_TLS=
|
||||
```
|
||||
|
||||
Instead of passing the LDAP password directly through the environment variable `AUTH_LDAP_BIND_PASSWORD`,
|
||||
you can set the password in a file and set the environment variable `AUTH_LDAP_BIND_PASSWORD_FILE`
|
||||
to the path of the file containing the ldap secret.
|
||||
|
||||
```
|
||||
AUTH_LDAP_BIND_PASSWORD_FILE=/run/secrets/ldap_password.txt
|
||||
```
|
||||
|
||||
### External Services
|
||||
|
||||
#### Email
|
||||
@@ -396,6 +404,14 @@ EMAIL_USE_SSL=0
|
||||
DEFAULT_FROM_EMAIL=
|
||||
```
|
||||
|
||||
Instead of passing the email password directly through the environment variable `EMAIL_HOST_PASSWORD`,
|
||||
you can set the password in a file and set the environment variable `EMAIL_HOST_PASSWORD_FILE`
|
||||
to the path of the file containing the ldap secret.
|
||||
|
||||
```
|
||||
EMAIL_HOST_PASSWORD_FILE=/run/secrets/email_password.txt
|
||||
```
|
||||
|
||||
Optional settings (only copy the ones you need)
|
||||
|
||||
```
|
||||
@@ -500,6 +516,18 @@ Set to `1` to enable additional query output on the search page.
|
||||
SQL_DEBUG=0
|
||||
```
|
||||
|
||||
#### Application Log Level
|
||||
|
||||
> default `WARNING` - options: [see Django Docs](https://docs.djangoproject.com/en/5.0/topics/logging/#loggers)
|
||||
|
||||
Increase or decrease the logging done by application.
|
||||
Please set to `DEBUG` when making a bug report.
|
||||
|
||||
```
|
||||
LOG_LEVEL="DEBUG"
|
||||
```
|
||||
|
||||
|
||||
#### Gunicorn Log Level
|
||||
|
||||
> default `info` - options: [see Gunicorn Docs](https://docs.gunicorn.org/en/stable/settings.html#loglevel)
|
||||
@@ -549,7 +577,7 @@ STICKY_NAV_PREF_DEFAULT=1
|
||||
|
||||
> default `100` - options: `0-X`
|
||||
|
||||
The default for the number of spaces a user can own. By setting to 0 space creation for users will be disabled.
|
||||
The default for the number of spaces a user can own. By setting to 0 space creation for users will be disabled.
|
||||
Superusers can always bypass this limit.
|
||||
|
||||
```
|
||||
@@ -574,7 +602,7 @@ TZ=Europe/Berlin
|
||||
#### Default Theme
|
||||
> default `0` - options `1-X` (space ID)
|
||||
|
||||
Tandoors appearance can be changed on a user and space level but unauthenticated users always see the tandoor default style.
|
||||
Tandoors appearance can be changed on a user and space level but unauthenticated users always see the tandoor default style.
|
||||
With this setting you can specify the ID of a space of which the appearance settings should be applied if a user is not logged in.
|
||||
|
||||
```
|
||||
@@ -621,7 +649,7 @@ DRF_THROTTLE_RECIPE_URL_IMPORT=60/hour
|
||||
|
||||
#### Default Space Limits
|
||||
You might want to limit how many resources a user might create. The following settings apply automatically to newly
|
||||
created spaces. These defaults can be changed in the admin view after a space has been created.
|
||||
created spaces. These defaults can be changed in the admin view after a space has been created.
|
||||
|
||||
If unset, all settings default to unlimited/enabled
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ server {
|
||||
# serve media files
|
||||
location /media/ {
|
||||
alias /media/;
|
||||
add_header Content-Disposition 'attachment; filename="$args"';
|
||||
}
|
||||
# pass requests for dynamic content to gunicorn
|
||||
location / {
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -37,90 +37,102 @@ msgstr ""
|
||||
msgid "You do not have the required module to view this page!"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe Keyword"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Meal Plan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Shopping"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Book"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:461
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "start"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "center"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:462
|
||||
#: .\recipes\settings.py:479
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:463
|
||||
#: .\recipes\settings.py:480
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:464
|
||||
#: .\recipes\settings.py:481
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:465
|
||||
#: .\recipes\settings.py:482
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:466
|
||||
#: .\recipes\settings.py:483
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:467
|
||||
#: .\recipes\settings.py:484
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:468
|
||||
#: .\recipes\settings.py:485
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:469
|
||||
#: .\recipes\settings.py:486
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:470
|
||||
#: .\recipes\settings.py:487
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:471
|
||||
#: .\recipes\settings.py:488
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:472
|
||||
#: .\recipes\settings.py:489
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:473
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:474
|
||||
#: .\recipes\settings.py:491
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:475
|
||||
#: .\recipes\settings.py:492
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:476
|
||||
#: .\recipes\settings.py:493
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:477
|
||||
#: .\recipes\settings.py:494
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -36,90 +36,102 @@ msgstr ""
|
||||
msgid "You do not have the required module to view this page!"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe Keyword"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Meal Plan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Shopping"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Book"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:461
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "start"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "center"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:462
|
||||
#: .\recipes\settings.py:479
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:463
|
||||
#: .\recipes\settings.py:480
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:464
|
||||
#: .\recipes\settings.py:481
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:465
|
||||
#: .\recipes\settings.py:482
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:466
|
||||
#: .\recipes\settings.py:483
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:467
|
||||
#: .\recipes\settings.py:484
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:468
|
||||
#: .\recipes\settings.py:485
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:469
|
||||
#: .\recipes\settings.py:486
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:470
|
||||
#: .\recipes\settings.py:487
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:471
|
||||
#: .\recipes\settings.py:488
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:472
|
||||
#: .\recipes\settings.py:489
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:473
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:474
|
||||
#: .\recipes\settings.py:491
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:475
|
||||
#: .\recipes\settings.py:492
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:476
|
||||
#: .\recipes\settings.py:493
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:477
|
||||
#: .\recipes\settings.py:494
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -36,90 +36,102 @@ msgstr ""
|
||||
msgid "You do not have the required module to view this page!"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe Keyword"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Meal Plan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Shopping"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Book"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:461
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "start"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "center"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:462
|
||||
#: .\recipes\settings.py:479
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:463
|
||||
#: .\recipes\settings.py:480
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:464
|
||||
#: .\recipes\settings.py:481
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:465
|
||||
#: .\recipes\settings.py:482
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:466
|
||||
#: .\recipes\settings.py:483
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:467
|
||||
#: .\recipes\settings.py:484
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:468
|
||||
#: .\recipes\settings.py:485
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:469
|
||||
#: .\recipes\settings.py:486
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:470
|
||||
#: .\recipes\settings.py:487
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:471
|
||||
#: .\recipes\settings.py:488
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:472
|
||||
#: .\recipes\settings.py:489
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:473
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:474
|
||||
#: .\recipes\settings.py:491
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:475
|
||||
#: .\recipes\settings.py:492
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:476
|
||||
#: .\recipes\settings.py:493
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:477
|
||||
#: .\recipes\settings.py:494
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -37,90 +37,102 @@ msgstr ""
|
||||
msgid "You do not have the required module to view this page!"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe Keyword"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Meal Plan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Shopping"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Book"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:461
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "start"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "center"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:462
|
||||
#: .\recipes\settings.py:479
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:463
|
||||
#: .\recipes\settings.py:480
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:464
|
||||
#: .\recipes\settings.py:481
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:465
|
||||
#: .\recipes\settings.py:482
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:466
|
||||
#: .\recipes\settings.py:483
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:467
|
||||
#: .\recipes\settings.py:484
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:468
|
||||
#: .\recipes\settings.py:485
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:469
|
||||
#: .\recipes\settings.py:486
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:470
|
||||
#: .\recipes\settings.py:487
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:471
|
||||
#: .\recipes\settings.py:488
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:472
|
||||
#: .\recipes\settings.py:489
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:473
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:474
|
||||
#: .\recipes\settings.py:491
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:475
|
||||
#: .\recipes\settings.py:492
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:476
|
||||
#: .\recipes\settings.py:493
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:477
|
||||
#: .\recipes\settings.py:494
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -36,90 +36,102 @@ msgstr ""
|
||||
msgid "You do not have the required module to view this page!"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe Keyword"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Meal Plan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Shopping"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Book"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:461
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "start"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "center"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:462
|
||||
#: .\recipes\settings.py:479
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:463
|
||||
#: .\recipes\settings.py:480
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:464
|
||||
#: .\recipes\settings.py:481
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:465
|
||||
#: .\recipes\settings.py:482
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:466
|
||||
#: .\recipes\settings.py:483
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:467
|
||||
#: .\recipes\settings.py:484
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:468
|
||||
#: .\recipes\settings.py:485
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:469
|
||||
#: .\recipes\settings.py:486
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:470
|
||||
#: .\recipes\settings.py:487
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:471
|
||||
#: .\recipes\settings.py:488
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:472
|
||||
#: .\recipes\settings.py:489
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:473
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:474
|
||||
#: .\recipes\settings.py:491
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:475
|
||||
#: .\recipes\settings.py:492
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:476
|
||||
#: .\recipes\settings.py:493
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:477
|
||||
#: .\recipes\settings.py:494
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-07-08 17:43+0200\n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -36,92 +36,104 @@ msgstr ""
|
||||
msgid "You do not have the required module to view this page!"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe Keyword"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Meal Plan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Shopping"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:35
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Book"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:461
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "start"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "center"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:462
|
||||
#: .\recipes\settings.py:479
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:463
|
||||
#: .\recipes\settings.py:480
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:464
|
||||
#: .\recipes\settings.py:481
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:465
|
||||
#: .\recipes\settings.py:482
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:466
|
||||
#: .\recipes\settings.py:483
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:467
|
||||
#: .\recipes\settings.py:484
|
||||
msgid "English"
|
||||
msgstr "Englisch"
|
||||
|
||||
#: .\recipes\settings.py:468
|
||||
#: .\recipes\settings.py:485
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:469
|
||||
#: .\recipes\settings.py:486
|
||||
msgid "German"
|
||||
msgstr "Deutsch"
|
||||
|
||||
#: .\recipes\settings.py:470
|
||||
#: .\recipes\settings.py:487
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:471
|
||||
#: .\recipes\settings.py:488
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:472
|
||||
#: .\recipes\settings.py:489
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:473
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:474
|
||||
#: .\recipes\settings.py:491
|
||||
#, fuzzy
|
||||
#| msgid "English"
|
||||
msgid "Polish"
|
||||
msgstr "Englisch"
|
||||
|
||||
#: .\recipes\settings.py:475
|
||||
#: .\recipes\settings.py:492
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:476
|
||||
#: .\recipes\settings.py:493
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:477
|
||||
#: .\recipes\settings.py:494
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user