Compare commits

..

27 Commits
1.2.1 ... 1.2.4

Author SHA1 Message Date
vabene1111
9863303a5e Merge remote-tracking branch 'origin/develop' into develop 2022-05-06 20:32:14 +02:00
vabene1111
0caccc3da8 updated it and ru languages 2022-05-06 20:31:57 +02:00
vabene1111
b75427b86d Added translation using Weblate (Danish) 2022-05-06 18:30:41 +00:00
vabene1111
054c4ec61a Added translation using Weblate (Danish) 2022-05-06 18:30:05 +00:00
vabene1111
8da21f9914 added specific build files for raspi (armv7) 2022-05-06 20:28:20 +02:00
vabene1111
99ba512862 Merge branch 'beta' into develop 2022-05-06 20:24:27 +02:00
vabene1111
eab59fcbd8 Update docker-publish-latest-raspi.yml 2022-05-06 16:08:13 +02:00
vabene1111
484da2200e added some debug to auto add shopping signal 2022-05-06 15:34:28 +02:00
vabene1111
330bb6d954 testing extra raspi build 2022-05-06 15:07:54 +02:00
axeron2036
d4b6c8da04 Translated using Weblate (Russian)
Currently translated at 80.3% (331 of 412 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ru/
2022-05-06 06:32:14 +00:00
Tomasz Klimczak
a5ef438cfe Translated using Weblate (Polish)
Currently translated at 100.0% (412 of 412 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2022-05-04 19:32:09 +00:00
vabene1111
de196c716b build test openssl 2022-05-04 20:33:27 +02:00
vabene1111
cb248a1f19 beta build test libressl 2022-05-04 20:33:10 +02:00
vabene1111
df2f1b2b7c testing armv7 build solutuin
taken from https://github.com/healthchecks/healthchecks/issues/568#issuecomment-942047344
2022-05-04 17:18:25 +02:00
vabene1111
36e26d8009 Merge branch 'master' into beta 2022-05-04 17:18:08 +02:00
vabene1111
a5973de02b Merge branch 'develop' 2022-05-04 17:11:35 +02:00
vabene1111
68f272bc25 fixed adding supermarket category to supermarket frontend desync 2022-05-04 15:20:40 +02:00
vabene1111
b66a5c1ee9 Merge branch 'develop' 2022-05-04 15:01:14 +02:00
vabene1111
bfc42638a4 fixed supermarket category ordering 2022-05-04 15:00:39 +02:00
vabene1111
a8c9689b43 fixed ability to disabled auto sync 2022-05-04 14:47:53 +02:00
vabene1111
26ff3f56ea Merge branch 'develop' into beta 2022-05-03 16:58:44 +02:00
vabene1111
a49993e399 testing new cryptography version 2022-05-03 16:58:39 +02:00
Tomasz Klimczak
9f42226224 Translated using Weblate (Polish)
Currently translated at 100.0% (395 of 395 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2022-05-02 22:32:09 +00:00
vabene1111
8f4c00df0b use old property as other sometimes fails 2022-05-02 15:52:15 +02:00
vabene1111
6cebec86c5 Merge branch 'master' into develop 2022-05-02 15:25:47 +02:00
vabene1111
483bc8f1b7 Merge branch 'develop' into beta 2022-04-29 21:58:13 +02:00
vabene1111
ba493e3e19 Merge branch 'develop' into beta 2022-04-25 09:40:04 +02:00
17 changed files with 3429 additions and 53 deletions

View File

@@ -0,0 +1,48 @@
name: publish beta image docker
on:
push:
branches:
- 'beta'
jobs:
build:
if: github.repository_owner == 'TandoorRecipes'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
# Update Version number
- name: Update version file
uses: DamianReeves/write-file-action@v1.0
with:
path: recipes/version.py
contents: |
VERSION_NUMBER = 'beta'
BUILD_REF = '${{ github.sha }}'
write-mode: overwrite
# Build Vue frontend
- uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
working-directory: ./vue
run: yarn install
- name: Build dependencies
working-directory: ./vue
run: yarn build
# Build container
- name: Build and publish image
uses: ilteoood/docker_buildx@master
with:
publish: true
imageName: vabene1111/recipes
tag: beta-raspi
dockerFile: Dockerfile-raspi
platform: linux/arm/v7
dockerUser: ${{ secrets.DOCKER_USERNAME }}
dockerPassword: ${{ secrets.DOCKER_PASSWORD }}
# Send discord notification
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_BETA_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.2
with:
args: '🚀 The BETA Image has been updated! 🥳'

View File

@@ -35,6 +35,7 @@ jobs:
publish: true
imageName: vabene1111/recipes
tag: beta
platform: linux/amd64,linux/arm64
dockerUser: ${{ secrets.DOCKER_USERNAME }}
dockerPassword: ${{ secrets.DOCKER_PASSWORD }}
# Send discord notification

View File

@@ -0,0 +1,45 @@
name: publish latest raspi image docker
on:
push:
tags:
- '*'
jobs:
build:
if: github.repository_owner == 'TandoorRecipes'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Get version number
id: get_version
run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}-raspi
# Update Version number
- name: Update version file
uses: DamianReeves/write-file-action@v1.0
with:
path: recipes/version.py
contents: |
VERSION_NUMBER = '${{ steps.get_version.outputs.VERSION }}-raspi'
BUILD_REF = '${{ github.sha }}'
write-mode: overwrite
# Build Vue frontend
- uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
working-directory: ./vue
run: yarn install
- name: Build dependencies
working-directory: ./vue
run: yarn build
# Build container
- name: Build and publish image
uses: ilteoood/docker_buildx@master
with:
publish: true
imageName: vabene1111/recipes
dockerFile: Dockerfile-raspi
platform: linux/arm/v7
tag: latest-raspi
dockerUser: ${{ secrets.DOCKER_USERNAME }}
dockerPassword: ${{ secrets.DOCKER_PASSWORD }}

View File

@@ -0,0 +1,54 @@
name: publish tagged raspi release docker
on:
release:
types: [published]
jobs:
build:
if: github.repository_owner == 'TandoorRecipes'
runs-on: ubuntu-latest
name: Build image job
steps:
- name: Checkout master
uses: actions/checkout@master
- name: Get version number
id: get_version
run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
# Update Version number
- name: Update version file
uses: DamianReeves/write-file-action@v1.0
with:
path: recipes/version.py
contents: |
VERSION_NUMBER = '${{ steps.get_version.outputs.VERSION }}'
BUILD_REF = '${{ github.sha }}'
write-mode: overwrite
# Build Vue frontend
- uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
working-directory: ./vue
run: yarn install
- name: Build dependencies
working-directory: ./vue
run: yarn build
# Build container
- name: Build and publish image
uses: ilteoood/docker_buildx@master
with:
publish: true
imageName: vabene1111/recipes
dockerFile: Dockerfile-raspi
platform: linux/arm/v7
tag: ${{ steps.get_version.outputs.VERSION }}-raspi
dockerUser: ${{ secrets.DOCKER_USERNAME }}
dockerPassword: ${{ secrets.DOCKER_PASSWORD }}
# Send discord notification
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_RELEASE_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.2
with:
args: '🚀 Version {{ EVENT_PAYLOAD.release.tag_name }} of tandoor has been released 🥳 Check it out https://github.com/vabene1111/recipes/releases/tag/{{ EVENT_PAYLOAD.release.tag_name }}'

View File

@@ -15,7 +15,7 @@ WORKDIR /opt/recipes
COPY requirements.txt ./
RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev libressl-dev libffi-dev cargo openssl-dev openldap-dev python3-dev && \
RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev openssl-dev libffi-dev cargo openldap-dev python3-dev && \
echo -n "INPUT ( libldap.so )" > /usr/lib/libldap_r.so && \
python -m venv venv && \
/opt/recipes/venv/bin/python -m pip install --upgrade pip && \

36
Dockerfile-raspi Normal file
View File

@@ -0,0 +1,36 @@
# builds of cryptography for raspberry pi (or better arm v7) fail for some
FROM python:3.9-alpine3.15
#Install all dependencies.
RUN apk add --no-cache postgresql-libs postgresql-client gettext zlib libjpeg libwebp libxml2-dev libxslt-dev py-cryptography openldap
#Print all logs without buffering it.
ENV PYTHONUNBUFFERED 1
#This port will be used by gunicorn.
EXPOSE 8080
#Create app dir and install requirements.
RUN mkdir /opt/recipes
WORKDIR /opt/recipes
COPY requirements.txt ./
RUN \
if [ `apk --print-arch` = "armv7" ]; then \
printf "[global]\nextra-index-url=https://www.piwheels.org/simple\n" > /etc/pip.conf ; \
fi
RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev openssl-dev libffi-dev cargo openldap-dev python3-dev && \
echo -n "INPUT ( libldap.so )" > /usr/lib/libldap_r.so && \
python -m venv venv && \
/opt/recipes/venv/bin/python -m pip install --upgrade pip && \
venv/bin/pip install wheel==0.37.1 && \
venv/bin/pip install setuptools_rust==1.1.2 && \
venv/bin/pip install -r requirements.txt --no-cache-dir &&\
apk --purge del .build-deps
#Copy project and execute it.
COPY . ./
RUN chmod +x boot.sh
ENTRYPOINT ["/opt/recipes/boot.sh"]

View File

@@ -114,7 +114,7 @@ def get_from_scraper(scrape, request):
except Exception:
pass
if source_url := scrape.canonical_url():
if source_url := scrape.url:
recipe_json['source_url'] = source_url
try:
keywords.append(source_url.replace('http://', '').replace('https://', '').split('/')[0])

File diff suppressed because it is too large Load Diff

View File

@@ -104,21 +104,32 @@ def update_food_inheritance(sender, instance=None, created=False, **kwargs):
@receiver(post_save, sender=MealPlan)
def auto_add_shopping(sender, instance=None, created=False, weak=False, **kwargs):
print("MEAL_AUTO_ADD Signal trying to auto add to shopping")
if not instance:
return
user = instance.get_owner()
with scope(space=instance.space):
slr_exists = instance.shoppinglistrecipe_set.exists()
if not created and slr_exists:
for x in instance.shoppinglistrecipe_set.all():
# assuming that permissions checks for the MealPlan have happened upstream
if instance.servings != x.servings:
SLR = RecipeShoppingEditor(id=x.id, user=user, space=instance.space)
SLR.edit_servings(servings=instance.servings)
elif not user.userpreference.mealplan_autoadd_shopping or not instance.recipe:
print("MEAL_AUTO_ADD Instance is none")
return
if created:
SLR = RecipeShoppingEditor(user=user, space=instance.space)
SLR.create(mealplan=instance, servings=instance.servings)
try:
space = instance.get_space()
user = instance.get_owner()
with scope(space=space):
slr_exists = instance.shoppinglistrecipe_set.exists()
if not created and slr_exists:
for x in instance.shoppinglistrecipe_set.all():
# assuming that permissions checks for the MealPlan have happened upstream
if instance.servings != x.servings:
SLR = RecipeShoppingEditor(id=x.id, user=user, space=instance.space)
SLR.edit_servings(servings=instance.servings)
elif not user.userpreference.mealplan_autoadd_shopping or not instance.recipe:
print("MEAL_AUTO_ADD No recipe or no setting")
return
if created:
SLR = RecipeShoppingEditor(user=user, space=space)
SLR.create(mealplan=instance, servings=instance.servings)
print("MEAL_AUTO_ADD Created SLR")
except AttributeError:
pass

View File

@@ -1,5 +1,5 @@
Django==3.2.13
cryptography==36.0.2
cryptography==37.0.1
django-annoying==0.10.6
django-autocomplete-light==3.9.4
django-cleanup==6.0.0

View File

@@ -291,7 +291,10 @@
aria-hidden="true"></i
></span>
</h5>
<span class="text-muted" v-if="supermarket.description !== ''">{{ supermarket.description }}</span>
<span class="text-muted"
v-if="supermarket.description !== ''">{{
supermarket.description
}}</span>
</b-col>
</b-row>
</b-card-header>
@@ -1026,20 +1029,23 @@ export default {
"settings.shopping_auto_sync": function (newVal, oldVal) {
clearInterval(this.autosync_id)
this.autosync_id = undefined
if (!newVal) {
window.removeEventListener("online", this.updateOnlineStatus)
window.removeEventListener("offline", this.updateOnlineStatus)
return
} else if (oldVal === 0 && newVal > 0) {
window.addEventListener("online", this.updateOnlineStatus)
window.addEventListener("offline", this.updateOnlineStatus)
}
this.autosync_id = setInterval(() => {
if (this.online && !this.auto_sync_running) {
this.auto_sync_running = true
this.getShoppingList(true)
if (this.settings.shopping_auto_sync > 0) {
if (!newVal) {
window.removeEventListener("online", this.updateOnlineStatus)
window.removeEventListener("offline", this.updateOnlineStatus)
return
} else if (oldVal === 0 && newVal > 0) {
window.addEventListener("online", this.updateOnlineStatus)
window.addEventListener("offline", this.updateOnlineStatus)
}
}, this.settings.shopping_auto_sync * 1000)
this.autosync_id = setInterval(() => {
if (this.online && !this.auto_sync_running) {
this.auto_sync_running = true
this.getShoppingList(true)
}
}, this.settings.shopping_auto_sync * 1000)
}
},
"settings.default_delay": function (newVal, oldVal) {
this.delay = Number(newVal)
@@ -1446,6 +1452,7 @@ export default {
if (supermarket.editing) {
this.$set(this.supermarkets[index], "editing", false)
this.$set(this.supermarkets[index], "category_to_supermarket", this.editing_supermarket_categories)
this.editing_supermarket_categories = []
let apiClient = new ApiApiFactory()
@@ -1618,8 +1625,7 @@ export default {
this.editing_supermarket_categories.forEach((element, index) => {
let apiClient = new ApiApiFactory()
promises.push(apiClient.partialUpdateSupermarketCategoryRelation(element.relation_id, {order: element.order}))
promises.push(apiClient.partialUpdateSupermarketCategoryRelation(element.relation_id, {order: index}))
})
return Promise.all(promises).then(() => {

414
vue/src/locales/da.json Normal file
View File

@@ -0,0 +1,414 @@
{
"warning_feature_beta": "",
"err_fetching_resource": "",
"err_creating_resource": "",
"err_updating_resource": "",
"err_deleting_resource": "",
"err_deleting_protected_resource": "",
"err_moving_resource": "",
"err_merging_resource": "",
"success_fetching_resource": "",
"success_creating_resource": "",
"success_updating_resource": "",
"success_deleting_resource": "",
"success_moving_resource": "",
"success_merging_resource": "",
"file_upload_disabled": "",
"step_time_minutes": "",
"confirm_delete": "",
"import_running": "",
"all_fields_optional": "",
"convert_internal": "",
"show_only_internal": "",
"show_split_screen": "",
"Log_Recipe_Cooking": "",
"External_Recipe_Image": "",
"Add_to_Shopping": "",
"Add_to_Plan": "",
"Step_start_time": "",
"Sort_by_new": "",
"Table_of_Contents": "",
"Recipes_per_page": "",
"Show_as_header": "",
"Hide_as_header": "",
"Add_nutrition_recipe": "",
"Remove_nutrition_recipe": "",
"Copy_template_reference": "",
"Save_and_View": "",
"Manage_Books": "",
"Meal_Plan": "",
"Select_Book": "",
"Select_File": "",
"Recipe_Image": "",
"Import_finished": "",
"View_Recipes": "",
"Log_Cooking": "",
"New_Recipe": "",
"Url_Import": "",
"Reset_Search": "",
"Recently_Viewed": "",
"Load_More": "",
"New_Keyword": "",
"Delete_Keyword": "",
"Edit_Keyword": "",
"Edit_Recipe": "",
"Move_Keyword": "",
"Merge_Keyword": "",
"Hide_Keywords": "",
"Hide_Recipes": "",
"Move_Up": "",
"Move_Down": "",
"Step_Name": "",
"Step_Type": "",
"Make_Header": "",
"Make_Ingredient": "",
"Enable_Amount": "",
"Disable_Amount": "",
"Ingredient Editor": "",
"Add_Step": "",
"Keywords": "",
"Books": "",
"Proteins": "",
"Fats": "",
"Carbohydrates": "",
"Calories": "",
"Energy": "",
"Nutrition": "",
"Date": "",
"Share": "",
"Automation": "",
"Parameter": "",
"Export": "",
"Copy": "",
"Rating": "",
"Close": "",
"Cancel": "",
"Link": "",
"Add": "",
"New": "",
"Note": "",
"Success": "",
"Failure": "",
"Protected": "",
"Ingredients": "",
"Supermarket": "",
"Categories": "",
"Category": "",
"Selected": "",
"min": "",
"Servings": "",
"Waiting": "",
"Preparation": "",
"External": "",
"Size": "",
"Files": "",
"File": "",
"Edit": "",
"Image": "",
"Delete": "",
"Open": "",
"Ok": "",
"Save": "",
"Step": "",
"Search": "",
"Import": "",
"Print": "",
"Settings": "",
"or": "",
"and": "",
"Information": "",
"Download": "",
"Create": "",
"Search Settings": "",
"View": "",
"Recipes": "",
"Move": "",
"Merge": "",
"Parent": "",
"delete_confirmation": "",
"move_confirmation": "",
"merge_confirmation": "",
"create_rule": "",
"move_selection": "",
"merge_selection": "",
"Root": "",
"Ignore_Shopping": "",
"Shopping_Category": "",
"Shopping_Categories": "",
"Edit_Food": "",
"Move_Food": "",
"New_Food": "",
"Hide_Food": "",
"Food_Alias": "",
"Unit_Alias": "",
"Keyword_Alias": "",
"Delete_Food": "",
"No_ID": "",
"Meal_Plan_Days": "",
"merge_title": "",
"move_title": "",
"Food": "",
"Recipe_Book": "",
"del_confirmation_tree": "",
"delete_title": "",
"create_title": "",
"edit_title": "",
"Name": "",
"Type": "",
"Description": "",
"Recipe": "",
"tree_root": "",
"Icon": "",
"Unit": "",
"No_Results": "",
"New_Unit": "",
"Create_New_Shopping Category": "",
"Create_New_Food": "",
"Create_New_Keyword": "",
"Create_New_Unit": "",
"Create_New_Meal_Type": "",
"and_up": "",
"and_down": "",
"Instructions": "",
"Unrated": "",
"Automate": "",
"Empty": "",
"Key_Ctrl": "",
"Key_Shift": "",
"Time": "",
"Text": "",
"Shopping_list": "",
"Added_by": "",
"Added_on": "",
"AddToShopping": "",
"IngredientInShopping": "",
"NotInShopping": "",
"OnHand": "",
"FoodOnHand": "",
"FoodNotOnHand": "",
"Undefined": "",
"Create_Meal_Plan_Entry": "",
"Edit_Meal_Plan_Entry": "",
"Title": "",
"Week": "",
"Month": "",
"Year": "",
"Planner": "",
"Planner_Settings": "",
"Period": "",
"Plan_Period_To_Show": "",
"Periods": "",
"Plan_Show_How_Many_Periods": "",
"Starting_Day": "",
"Meal_Types": "",
"Meal_Type": "",
"Clone": "",
"Drag_Here_To_Delete": "",
"Meal_Type_Required": "",
"Title_or_Recipe_Required": "",
"Color": "",
"New_Meal_Type": "",
"AddFoodToShopping": "",
"RemoveFoodFromShopping": "",
"DeleteShoppingConfirm": "",
"IgnoredFood": "",
"Add_Servings_to_Shopping": "",
"Week_Numbers": "",
"Show_Week_Numbers": "",
"Export_As_ICal": "",
"Export_To_ICal": "",
"Cannot_Add_Notes_To_Shopping": "",
"Added_To_Shopping_List": "",
"Shopping_List_Empty": "",
"Next_Period": "",
"Previous_Period": "",
"Current_Period": "",
"Next_Day": "",
"Previous_Day": "",
"Inherit": "",
"InheritFields": "",
"FoodInherit": "",
"ShowUncategorizedFood": "",
"GroupBy": "",
"SupermarketCategoriesOnly": "",
"MoveCategory": "",
"CountMore": "",
"IgnoreThis": "",
"DelayFor": "",
"Warning": "",
"NoCategory": "",
"InheritWarning": "",
"ShowDelayed": "",
"Completed": "",
"OfflineAlert": "",
"shopping_share": "",
"shopping_auto_sync": "",
"one_url_per_line": "",
"mealplan_autoadd_shopping": "",
"mealplan_autoexclude_onhand": "",
"mealplan_autoinclude_related": "",
"default_delay": "",
"shopping_share_desc": "",
"shopping_auto_sync_desc": "",
"mealplan_autoadd_shopping_desc": "",
"mealplan_autoexclude_onhand_desc": "",
"mealplan_autoinclude_related_desc": "",
"default_delay_desc": "",
"filter_to_supermarket": "",
"Coming_Soon": "",
"Auto_Planner": "",
"New_Cookbook": "",
"Hide_Keyword": "",
"Clear": "",
"err_move_self": "",
"nothing": "",
"err_merge_self": "",
"show_sql": "",
"filter_to_supermarket_desc": "",
"CategoryName": "",
"SupermarketName": "",
"CategoryInstruction": "",
"shopping_recent_days_desc": "",
"shopping_recent_days": "",
"download_pdf": "",
"download_csv": "",
"csv_delim_help": "",
"csv_delim_label": "",
"SuccessClipboard": "",
"copy_to_clipboard": "",
"csv_prefix_help": "",
"csv_prefix_label": "",
"copy_markdown_table": "",
"in_shopping": "",
"DelayUntil": "",
"Pin": "",
"mark_complete": "",
"QuickEntry": "",
"shopping_add_onhand_desc": "",
"shopping_add_onhand": "",
"related_recipes": "",
"today_recipes": "",
"sql_debug": "",
"remember_search": "",
"remember_hours": "",
"tree_select": "",
"OnHand_help": "",
"ignore_shopping_help": "",
"shopping_category_help": "",
"food_recipe_help": "",
"Foods": "",
"enable_expert": "",
"expert_mode": "",
"simple_mode": "",
"advanced": "",
"fields": "",
"show_keywords": "",
"show_foods": "",
"show_books": "",
"show_rating": "",
"show_units": "",
"show_filters": "",
"not": "",
"save_filter": "",
"filter_name": "",
"left_handed": "",
"left_handed_help": "",
"Custom Filter": "",
"shared_with": "",
"sort_by": "",
"asc": "",
"desc": "",
"date_viewed": "",
"last_cooked": "",
"times_cooked": "",
"date_created": "",
"show_sortby": "",
"search_rank": "",
"make_now": "",
"recipe_filter": "",
"book_filter_help": "",
"review_shopping": "",
"view_recipe": "",
"copy_to_new": "",
"recipe_name": "",
"paste_ingredients_placeholder": "",
"paste_ingredients": "",
"ingredient_list": "",
"explain": "",
"filter": "",
"Website": "",
"App": "",
"Bookmarklet": "",
"click_image_import": "",
"no_more_images_found": "",
"import_duplicates": "",
"paste_json": "",
"Click_To_Edit": "",
"search_no_recipes": "",
"search_import_help_text": "",
"search_create_help_text": "",
"warning_duplicate_filter": "",
"reset_children": "",
"reset_children_help": "",
"substitute_help": "",
"substitute_siblings_help": "",
"substitute_children_help": "",
"substitute_siblings": "",
"substitute_children": "",
"SubstituteOnHand": "",
"ChildInheritFields": "",
"ChildInheritFields_help": "",
"InheritFields_help": "",
"last_viewed": "",
"created_on": "",
"updatedon": "",
"Imported_From": "",
"advanced_search_settings": "",
"nothing_planned_today": "",
"no_pinned_recipes": "",
"Planned": "",
"Pinned": "",
"Imported": "",
"Quick actions": "",
"Ratings": "",
"Internal": "",
"Units": "",
"Random Recipes": "",
"parameter_count": "",
"select_keyword": "",
"add_keyword": "",
"select_file": "",
"select_recipe": "",
"select_unit": "",
"select_food": "",
"remove_selection": "",
"empty_list": "",
"Select": "",
"Supermarkets": "",
"User": "",
"Keyword": "",
"Advanced": "",
"Page": "",
"Single": "",
"Multiple": "",
"Reset": "",
"Options": "",
"Create Food": "",
"create_food_desc": "",
"additional_options": "",
"Importer_Help": "",
"Documentation": "",
"Select_App_To_Import": "",
"Import_Supported": "",
"Export_Supported": "",
"Import_Not_Yet_Supported": "",
"Export_Not_Yet_Supported": "",
"Import_Result_Info": "",
"Recipes_In_Import": "",
"Toggle": "",
"Import_Error": "",
"Warning_Delete_Supermarket_Category": "",
"New_Supermarket": "",
"New_Supermarket_Category": "",
"Are_You_Sure": ""
}

View File

@@ -383,5 +383,34 @@
"additional_options": "Opcje dodatkowe",
"err_deleting_protected_resource": "Obiekt, który próbujesz usunąć, jest nadal używany i nie można go usunąć.",
"Protected": "Chroniony",
"Ingredient Editor": "Edytor składników"
"Ingredient Editor": "Edytor składników",
"one_url_per_line": "Jeden URL na linię",
"Website": "Strona internetowa",
"App": "Aplikacja",
"Bookmarklet": "Skryptozakładka",
"click_image_import": "Kliknij obraz, który chcesz zaimportować do tego przepisu",
"no_more_images_found": "Nie znaleziono dodatkowych zdjęć na stronie internetowej.",
"import_duplicates": "Aby zapobiec duplikatom przepisy tej samej nazwie, co istniejące, są ignorowane. Zaznacz to pole, aby zaimportować wszystko.",
"paste_json": "Wklej tutaj źródło json lub html, aby załadować przepis.",
"Click_To_Edit": "Kliknij aby edytować",
"Imported_From": "Zaimportowane z",
"Options": "Opcje",
"Imported": "Importowany",
"Single": "Pojedynczy",
"Multiple": "Wiele",
"Documentation": "Dokumentacja",
"Import_Supported": "Importowanie wspierane",
"Export_Supported": "Eksportowanie wspierane",
"Import_Not_Yet_Supported": "Importowanie jeszcze nie wspierane",
"Export_Not_Yet_Supported": "Eksportowanie jeszcze nie wspierane",
"Import_Result_Info": "{imported} z {total} przepisów zostało zaimportowanych",
"Recipes_In_Import": "Przepisy w pliku importu",
"Toggle": "Przełącznik",
"Import_Error": "Podczas importowania wystąpił błąd. Rozwiń Szczegóły na dole strony, aby go wyświetlić.",
"Warning_Delete_Supermarket_Category": "Usunięcie kategorii supermarketu spowoduje również usunięcie wszystkich relacji z żywnością. Jesteś pewny?",
"New_Supermarket": "Stwórz nowy supermarket",
"New_Supermarket_Category": "Utwórz nową kategorię supermarketów",
"Are_You_Sure": "Jesteś pewny?",
"Importer_Help": "Więcej informacji i pomoc na temat tego importera:",
"Select_App_To_Import": "Wybierz aplikację, z której chcesz zaimportować"
}

View File

@@ -27,7 +27,7 @@
"Show_as_header": "Показывать как заголовок",
"Hide_as_header": "Скрыть заголовок",
"Copy_template_reference": "Скопировать ссылку на шаблон",
"Save_and_View": "Сохронить и показать",
"Save_and_View": "Сохранить и показать",
"Manage_Books": "Управление книгами",
"Meal_Plan": "Планирование блюд",
"Select_Book": "Выбрать книгу",
@@ -188,18 +188,18 @@
"Title_or_Recipe_Required": "Требуется выбор названия или рецепта",
"Color": "Цвет",
"New_Meal_Type": "Новый тип питания",
"Week_Numbers": "",
"Show_Week_Numbers": "",
"Export_As_ICal": "",
"Week_Numbers": "Номер недели",
"Show_Week_Numbers": "Показать номера недель?",
"Export_As_ICal": "Экспорт текущего периода в iCal формат",
"Export_To_ICal": "",
"Cannot_Add_Notes_To_Shopping": "",
"Added_To_Shopping_List": "",
"Shopping_List_Empty": "",
"Next_Period": "",
"Previous_Period": "",
"Current_Period": "",
"Next_Day": "",
"Previous_Day": "",
"Added_To_Shopping_List": "Добавлено в список покупок",
"Shopping_List_Empty": "В настоящее время ваш список покупок пуст, вы можете добавить пункты через контекстное меню записи плана питания (щелкните правой кнопкой мыши на карточке или щелкните левой кнопкой мыши на значке меню)",
"Next_Period": "Следующий период",
"Previous_Period": "Предыдущий период",
"Current_Period": "Текущий период",
"Next_Day": "Следующий день",
"Previous_Day": "Предыдущий день",
"Add_nutrition_recipe": "Добавьте питательные вещества в рецепт",
"and_down": "Вниз",
"Added_by": "Добавлено",
@@ -217,6 +217,121 @@
"Search Settings": "Искать настройки",
"err_merging_resource": "Произошла ошибка при перемещении ресурса!",
"Remove_nutrition_recipe": "Уберите питательные вещества из рецепта",
"err_moving_resource": "Ошибка при перемещении ресурса!",
"NotInShopping": "{food} отсутствует в вашем списке покупок."
"err_moving_resource": "Произошла ошибка при перемещении ресурса!",
"NotInShopping": "{food} отсутствует в вашем списке покупок.",
"RemoveFoodFromShopping": "Удалить {food} из вашего списка покупок",
"ShowDelayed": "Показать отложенные элементы",
"Completed": "Завершено",
"save_filter": "Сохранить фильтр",
"sort_by": "Сортировать по",
"shared_with": "Совместно с",
"Custom Filter": "Пользовательский фильтр",
"filter_name": "Имя фильтра",
"created_on": "Создано на",
"last_viewed": "Последний просмотренный",
"select_keyword": "Выбрать ключевое слово",
"parameter_count": "Параметр {count}",
"Units": "Единицы",
"left_handed": "Режим для левшей",
"User": "Пользователь",
"Page": "Страница",
"Advanced": "Расширенный",
"Auto_Planner": "Автопланировщик",
"Hide_Keyword": "Скрыть ключевые слова",
"Clear": "Очистить",
"search_rank": "Поисковый рейтинг",
"show_rating": "Показать рейтинг",
"show_books": "Показать книги",
"show_foods": "Показать продукты",
"Documentation": "Документация",
"Reset": "Сбросить",
"Imported": "Импортировано",
"no_pinned_recipes": "У Вас нет закреплённых рецептов!",
"advanced_search_settings": "Расширенные настройки поиска",
"updatedon": "Обновлено",
"copy_to_new": "Скопировать в новый рецепт",
"recipe_filter": "Фильтр рецептов",
"New_Supermarket": "Создание нового супермаркета",
"Import_Error": "Во время импорта произошла ошибка. Для просмотра разверните \"Подробности\" в нижней части страницы.",
"OfflineAlert": "Вы находитесь вне сети, список покупок может не синхронизироваться.",
"Coming_Soon": "Скоро",
"Ingredient Editor": "Редактор ингредиентов",
"New_Cookbook": "Новая кулинарная книга",
"Are_You_Sure": "Вы уверены?",
"Protected": "Защищено",
"Warning_Delete_Supermarket_Category": "Удаление категории супермаркета также приведет к удалению всех связей с продуктами. Вы уверены?",
"Multiple": "Несколько",
"add_keyword": "Добавить ключевое слово",
"Random Recipes": "Случайные рецепты",
"nothing_planned_today": "Вы ничего не запланировали на сегодня!",
"book_filter_help": "Включать рецепты из фильтра рецептов в дополнение к назначенным вручную.",
"make_now": "Сделать сейчас",
"date_created": "Дата создана",
"left_handed_help": "Оптимизирует пользовательский интерфейс для использования левой рукой.",
"show_keywords": "Показать ключевые слова",
"DeleteShoppingConfirm": "Вы уверены, что хотите удалить все {food} из вашего списка покупок?",
"Inherit": "Наследовать",
"InheritFields": "Наследование значений полей",
"FoodInherit": "Наследуемые поля продуктов питания",
"ShowUncategorizedFood": "Показать неопределенное",
"SupermarketCategoriesOnly": "Только категории супермаркетов",
"CountMore": "...+{count} больше",
"Warning": "Предупреждение",
"mealplan_autoexclude_onhand": "Исключить продукты питания, имеющиеся в наличии",
"NoCategory": "Категория не выбрана.",
"shopping_share": "Поделиться списком покупок",
"shopping_auto_sync": "Автосинхронизация",
"mealplan_autoadd_shopping": "Автоматическое добавление плана питания",
"food_recipe_help": "Если вы разместите здесь ссылку на рецепт, то он будет включен в любой другой рецепт, в котором используется это блюдо",
"expert_mode": "Экспертный режим",
"enable_expert": "Включить экспертный режим",
"review_shopping": "Просмотрите записи о покупках перед сохранением",
"empty_list": "Список пуст",
"default_delay_desc": "Число часов по умолчанию для отсрочки записи в списке покупок.",
"one_url_per_line": "Один URL в строке",
"mealplan_autoinclude_related": "Добавить сопутствующие рецепты",
"default_delay": "Часы задержки по умолчанию",
"shopping_share_desc": "Пользователи будут видеть все товары, которые вы добавляете в список покупок. Они должны добавить вас, чтобы увидеть предметы в своем списке.",
"shopping_auto_sync_desc": "Установка значения 0 отключает автоматическую синхронизацию. При просмотре списка покупок список обновляется каждые несколько секунд, чтобы синхронизировать изменения, которые мог внести кто-то другой. Полезно, когда покупки совершают несколько человек, но при этом используются мобильные данные.",
"mealplan_autoadd_shopping_desc": "Автоматическое добавление ингредиентов плана питания в список покупок.",
"mealplan_autoexclude_onhand_desc": "При добавлении плана питания в список покупок (вручную или автоматически) исключайте ингредиенты, которые в данный момент есть под рукой.",
"mealplan_autoinclude_related_desc": "При добавлении плана питания в список покупок (вручную или автоматически) включайте все связанные с ним рецепты.",
"filter_to_supermarket": "Фильтр для супермаркета",
"err_move_self": "Невозможно переместить элемент на себя",
"nothing": "Нечего делать",
"err_merge_self": "Невозможно объединить элемент с самим собой",
"show_sql": "Показать SQL",
"show_filters": "Показать фильтры",
"show_units": "Показать единицы",
"fields": "Поля",
"advanced": "Расширенный",
"simple_mode": "Простой режим",
"ingredient_list": "Список ингредиентов",
"paste_ingredients": "Добавить ингредиенты",
"paste_ingredients_placeholder": "Вставьте сюда список ингредиентов...",
"recipe_name": "Название рецепта",
"view_recipe": "Посмотреть рецепт",
"times_cooked": "Время готовки",
"last_cooked": "Последнее приготовленое",
"date_viewed": "Последний просмотренный",
"Internal": "Внутренний",
"Imported_From": "Импортировано из",
"Keyword": "Ключевое слово",
"Supermarkets": "Супермаркеты",
"Select": "Выбрать",
"remove_selection": "Отменить выбор",
"select_food": "Выберите продукты питания",
"select_unit": "Выберите единицу",
"select_recipe": "Выбрать рецепт",
"select_file": "Выбрать файл",
"Ratings": "Рейтинги",
"Quick actions": "Быстрые действия",
"Pinned": "Прикрепленный",
"Planned": "Запланировано",
"Options": "Опции",
"additional_options": "Дополнительные опции",
"create_food_desc": "Создайте блюдо и свяжите его с этим рецептом.",
"err_deleting_protected_resource": "Объект, который вы пытаетесь удалить, все еще используется и не может быть удален.",
"tree_select": "Выбор дерева для использования",
"remember_search": "Запомнить поиск"
}

View File

@@ -12697,11 +12697,6 @@ vue-infinite-loading@^2.4.5:
resolved "https://registry.yarnpkg.com/vue-infinite-loading/-/vue-infinite-loading-2.4.5.tgz#cc20fd40af7f20188006443c99b60470cf1de1b3"
integrity sha512-xhq95Mxun060bRnsOoLE2Be6BR7jYwuC89kDe18+GmCLVrRA/dU0jrGb12Xu6NjmKs+iTW0AA6saSEmEW4cR7g==
vue-jstree@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/vue-jstree/-/vue-jstree-2.1.6.tgz#44827ad72953ed77da6590ce4e8f37f7787f8653"
integrity sha512-vtUmhLbfE2JvcnYNRXauJPkNJSRO/f9BTsbxV+ESXP/mMQPVUIYI4EkSHKSEOxVDHTU7SfLp/AxplmaAl6ctcg==
"vue-loader-v16@npm:vue-loader@^16.1.0":
version "16.8.3"
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-16.8.3.tgz#d43e675def5ba9345d6c7f05914c13d861997087"