Merge branch 'develop' into feature/importer_to_vue
# Conflicts: # vue/package.json
This commit is contained in:
2
boot.sh
2
boot.sh
@ -34,7 +34,7 @@ if [ "${DB_ENGINE}" != 'django.db.backends.sqlite3' ]; then
|
||||
display_warning "The environment variable 'POSTGRES_PASSWORD' is not set but REQUIRED for running Tandoor!"
|
||||
fi
|
||||
|
||||
while pg_isready --host=${POSTGRES_HOST} --port=${POSTGRES_PORT} -q; status=$?; attempt=$((attempt+1)); [ $status -ne 0 ] && [ $attempt -le $max_attempts ]; do
|
||||
while pg_isready --host=${POSTGRES_HOST} --port=${POSTGRES_PORT} --user=${POSTGRES_USER} -q; status=$?; attempt=$((attempt+1)); [ $status -ne 0 ] && [ $attempt -le $max_attempts ]; do
|
||||
sleep 5
|
||||
done
|
||||
fi
|
||||
|
@ -237,7 +237,7 @@ admin.site.register(Ingredient, IngredientAdmin)
|
||||
|
||||
class CommentAdmin(admin.ModelAdmin):
|
||||
list_display = ('recipe', 'name', 'created_at')
|
||||
search_fields = ('text', 'user__username')
|
||||
search_fields = ('text', 'created_by__username')
|
||||
date_hierarchy = 'created_at'
|
||||
|
||||
@staticmethod
|
||||
|
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-04 12:31+0100\n"
|
||||
"PO-Revision-Date: 2021-11-06 14:06+0000\n"
|
||||
"Last-Translator: Nicklas Yli-Länttä <admin@timanttikuutio.eu>\n"
|
||||
"PO-Revision-Date: 2022-03-18 16:31+0000\n"
|
||||
"Last-Translator: Stefan Werner <werner@iki.fi>\n"
|
||||
"Language-Team: Finnish <http://translate.tandoor.dev/projects/tandoor/"
|
||||
"recipes-backend/fi/>\n"
|
||||
"Language: fi\n"
|
||||
@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.8\n"
|
||||
"X-Generator: Weblate 4.10.1\n"
|
||||
|
||||
#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:125
|
||||
#: .\cookbook\templates\forms\ingredients.html:34
|
||||
@ -31,10 +31,12 @@ msgid ""
|
||||
"Color of the top navigation bar. Not all colors work with all themes, just "
|
||||
"try them out!"
|
||||
msgstr ""
|
||||
"Ylänavigointipalkin väri. Ei kaikki värit toimi kaikkien teemojen kanssa; "
|
||||
"kokeile!"
|
||||
|
||||
#: .\cookbook\forms.py:55
|
||||
msgid "Default Unit to be used when inserting a new ingredient into a recipe."
|
||||
msgstr ""
|
||||
msgstr "Oletusmittayksikkö uuden aineksen lisäämisessä."
|
||||
|
||||
#: .\cookbook\forms.py:57
|
||||
msgid ""
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-04-11 15:09+0200\n"
|
||||
"PO-Revision-Date: 2021-04-12 20:22+0000\n"
|
||||
"Last-Translator: Olle Mineur <olle.mineur@gmail.com>\n"
|
||||
"PO-Revision-Date: 2022-03-29 20:36+0000\n"
|
||||
"Last-Translator: Marcus Alsterfjord <marcus@marcussite.se>\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 4.5.3\n"
|
||||
"X-Generator: Weblate 4.10.1\n"
|
||||
|
||||
#: .\cookbook\filters.py:23 .\cookbook\templates\base.html:91
|
||||
#: .\cookbook\templates\forms\edit_internal_recipe.html:219
|
||||
@ -192,13 +192,12 @@ msgstr "Du kan ange förvalda användare att dela recept med i inställningar."
|
||||
|
||||
#: .\cookbook\forms.py:368
|
||||
#: .\cookbook\templates\forms\edit_internal_recipe.html:377
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"You can use markdown to format this field. See the <a href=\"/docs/markdown/"
|
||||
"\">docs here</a>"
|
||||
msgstr ""
|
||||
"Du kan använda markdown för att formatera detta fält. Se <a href=\"/docs/"
|
||||
"markdown/\">dokumentation här</a> för mer information"
|
||||
"markdown/\">dokumentation här</a> för mer information."
|
||||
|
||||
#: .\cookbook\forms.py:393
|
||||
msgid "A username is not required, if left blank the new user can choose one."
|
||||
@ -247,7 +246,7 @@ msgstr "Importerade ifrån"
|
||||
#: .\cookbook\helper\template_helper.py:60
|
||||
#: .\cookbook\helper\template_helper.py:62
|
||||
msgid "Could not parse template code."
|
||||
msgstr ""
|
||||
msgstr "Det gick inte att läsa mallkoden."
|
||||
|
||||
#: .\cookbook\integration\integration.py:102
|
||||
#: .\cookbook\templates\import.html:14 .\cookbook\templates\import.html:20
|
||||
@ -565,10 +564,12 @@ msgid ""
|
||||
"On this Page you can manage all storage folder locations that should be "
|
||||
"monitored and synced."
|
||||
msgstr ""
|
||||
"På den här sidan kan du hantera alla lagringsmappar som ska övervakas och "
|
||||
"synkroniseras."
|
||||
|
||||
#: .\cookbook\templates\batch\monitor.html:16
|
||||
msgid "The path must be in the following format"
|
||||
msgstr ""
|
||||
msgstr "Sökvägen måste ha följande format"
|
||||
|
||||
#: .\cookbook\templates\batch\monitor.html:27
|
||||
msgid "Sync Now!"
|
||||
@ -819,7 +820,6 @@ msgid "Delete Recipe"
|
||||
msgstr "Ta bort recept"
|
||||
|
||||
#: .\cookbook\templates\forms\edit_internal_recipe.html:441
|
||||
#, fuzzy
|
||||
msgid "Steps"
|
||||
msgstr "Steg"
|
||||
|
||||
@ -999,7 +999,7 @@ msgstr "Recept"
|
||||
|
||||
#: .\cookbook\templates\index.html:94
|
||||
msgid "Log in to view recipes"
|
||||
msgstr ""
|
||||
msgstr "Logga in för att se recept"
|
||||
|
||||
#: .\cookbook\templates\markdown_info.html:5
|
||||
#: .\cookbook\templates\markdown_info.html:13
|
||||
@ -1024,11 +1024,11 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\markdown_info.html:25
|
||||
msgid "Headers"
|
||||
msgstr ""
|
||||
msgstr "Rubriker"
|
||||
|
||||
#: .\cookbook\templates\markdown_info.html:54
|
||||
msgid "Formatting"
|
||||
msgstr ""
|
||||
msgstr "Formatering"
|
||||
|
||||
#: .\cookbook\templates\markdown_info.html:56
|
||||
#: .\cookbook\templates\markdown_info.html:72
|
||||
@ -1043,21 +1043,21 @@ msgstr ""
|
||||
#: .\cookbook\templates\markdown_info.html:59
|
||||
#: .\cookbook\templates\markdown_info.html:74
|
||||
msgid "This text is bold"
|
||||
msgstr ""
|
||||
msgstr "Denna text är fetstil"
|
||||
|
||||
#: .\cookbook\templates\markdown_info.html:60
|
||||
#: .\cookbook\templates\markdown_info.html:75
|
||||
msgid "This text is italic"
|
||||
msgstr ""
|
||||
msgstr "Denna text är kursiv"
|
||||
|
||||
#: .\cookbook\templates\markdown_info.html:61
|
||||
#: .\cookbook\templates\markdown_info.html:77
|
||||
msgid "Blockquotes are also possible"
|
||||
msgstr ""
|
||||
msgstr "Blockcitat är också möjligt"
|
||||
|
||||
#: .\cookbook\templates\markdown_info.html:84
|
||||
msgid "Lists"
|
||||
msgstr ""
|
||||
msgstr "Listor"
|
||||
|
||||
#: .\cookbook\templates\markdown_info.html:85
|
||||
msgid ""
|
||||
@ -1110,7 +1110,7 @@ msgstr ""
|
||||
|
||||
#: .\cookbook\templates\markdown_info.html:152
|
||||
msgid "Tables"
|
||||
msgstr ""
|
||||
msgstr "Tabeller"
|
||||
|
||||
#: .\cookbook\templates\markdown_info.html:153
|
||||
msgid ""
|
||||
|
@ -10,6 +10,7 @@ from drf_writable_nested import UniqueFieldsMixin, WritableNestedModelSerializer
|
||||
from rest_framework import serializers
|
||||
from rest_framework.exceptions import NotFound, ValidationError
|
||||
|
||||
from cookbook.helper.CustomStorageClass import CachedS3Boto3Storage
|
||||
from cookbook.helper.HelperFunctions import str2bool
|
||||
from cookbook.helper.shopping_helper import RecipeShoppingEditor
|
||||
from cookbook.models import (Automation, BookmarkletImport, Comment, CookLog, CustomFilter,
|
||||
@ -20,7 +21,7 @@ from cookbook.models import (Automation, BookmarkletImport, Comment, CookLog, Cu
|
||||
SupermarketCategory, SupermarketCategoryRelation, Sync, SyncLog, Unit,
|
||||
UserFile, UserPreference, ViewLog)
|
||||
from cookbook.templatetags.custom_tags import markdown
|
||||
from recipes.settings import MEDIA_URL
|
||||
from recipes.settings import MEDIA_URL, AWS_ENABLED
|
||||
|
||||
|
||||
class ExtendedRecipeMixin(serializers.ModelSerializer):
|
||||
@ -54,7 +55,12 @@ class ExtendedRecipeMixin(serializers.ModelSerializer):
|
||||
|
||||
def get_image(self, obj):
|
||||
if obj.recipe_image:
|
||||
return MEDIA_URL + obj.recipe_image
|
||||
if AWS_ENABLED:
|
||||
storage = CachedS3Boto3Storage()
|
||||
path = storage.url(obj.recipe_image)
|
||||
else:
|
||||
path = MEDIA_URL + obj.recipe_image
|
||||
return path
|
||||
|
||||
|
||||
class CustomDecimalField(serializers.Field):
|
||||
@ -364,16 +370,23 @@ class SupermarketSerializer(UniqueFieldsMixin, SpacedModelSerializer):
|
||||
fields = ('id', 'name', 'description', 'category_to_supermarket')
|
||||
|
||||
|
||||
class RecipeSimpleSerializer(serializers.ModelSerializer):
|
||||
class RecipeSimpleSerializer(WritableNestedModelSerializer):
|
||||
url = serializers.SerializerMethodField('get_url')
|
||||
|
||||
def get_url(self, obj):
|
||||
return reverse('view_recipe', args=[obj.id])
|
||||
|
||||
def create(self, validated_data):
|
||||
# don't allow writing to Recipe via this API
|
||||
return Recipe.objects.get(**validated_data)
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
# don't allow writing to Recipe via this API
|
||||
return Recipe.objects.get(**validated_data)
|
||||
|
||||
class Meta:
|
||||
model = Recipe
|
||||
fields = ('id', 'name', 'url')
|
||||
read_only_fields = ['id', 'name', 'url']
|
||||
|
||||
|
||||
class FoodSimpleSerializer(serializers.ModelSerializer):
|
||||
@ -427,6 +440,8 @@ class FoodSerializer(UniqueFieldsMixin, WritableNestedModelSerializer, ExtendedR
|
||||
name=sc_name,
|
||||
space=space, defaults=sm_category)
|
||||
onhand = validated_data.pop('food_onhand', None)
|
||||
if recipe := validated_data.get('recipe', None):
|
||||
validated_data['recipe'] = Recipe.objects.get(**recipe)
|
||||
|
||||
# assuming if on hand for user also onhand for shopping_share users
|
||||
if not onhand is None:
|
||||
|
@ -109,7 +109,7 @@ in combination with [jrcs's letsencrypt companion](https://hub.docker.com/r/jrcs
|
||||
|
||||
Please refer to the appropriate documentation on how to setup the reverse proxy and networks.
|
||||
|
||||
!!!!!!warning "Adjust client_max_body_size"
|
||||
!!! warning "Adjust client_max_body_size"
|
||||
By using jwilder's Nginx-proxy, uploads will be restricted to 1 MB file size. This can be resolved by adjusting the ```client_max_body_size``` variable in the jwilder nginx configuration.
|
||||
|
||||
Remember to add the appropriate environment variables to the `.env` file:
|
||||
|
@ -390,6 +390,8 @@ JS_REVERSE_SCRIPT_PREFIX = os.getenv('JS_REVERSE_SCRIPT_PREFIX', SCRIPT_NAME)
|
||||
STATIC_URL = os.getenv('STATIC_URL', '/static/')
|
||||
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
|
||||
|
||||
AWS_ENABLED = True if os.getenv('S3_ACCESS_KEY', False) else False
|
||||
|
||||
if os.getenv('S3_ACCESS_KEY', ''):
|
||||
DEFAULT_FILE_STORAGE = 'cookbook.helper.CustomStorageClass.CachedS3Boto3Storage'
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
Django==3.2.12
|
||||
cryptography==36.0.1
|
||||
cryptography==36.0.2
|
||||
django-annoying==0.10.6
|
||||
django-autocomplete-light==3.8.2
|
||||
django-autocomplete-light==3.9.4
|
||||
django-cleanup==6.0.0
|
||||
django-crispy-forms==1.14.0
|
||||
django-filter==21.1
|
||||
@ -11,32 +11,32 @@ drf-writable-nested==0.6.3
|
||||
bleach==4.1.0
|
||||
bleach-allowlist==1.0.3
|
||||
gunicorn==20.1.0
|
||||
lxml==4.7.1
|
||||
lxml==4.8.0
|
||||
Markdown==3.3.6
|
||||
Pillow==9.0.1
|
||||
psycopg2-binary==2.9.3
|
||||
python-dotenv==0.19.2
|
||||
python-dotenv==0.20.0
|
||||
requests==2.27.1
|
||||
six==1.16.0
|
||||
webdavclient3==3.14.6
|
||||
whitenoise==5.3.0
|
||||
whitenoise==6.0.0
|
||||
icalendar==4.0.9
|
||||
pyyaml==6.0
|
||||
uritemplate==4.1.1
|
||||
beautifulsoup4==4.10.0
|
||||
microdata==0.8.0
|
||||
Jinja2==3.0.3
|
||||
Jinja2==3.1.1
|
||||
django-webpack-loader==1.4.1
|
||||
django-js-reverse==0.9.1
|
||||
django-allauth==0.47.0
|
||||
recipe-scrapers==13.19.0
|
||||
django-allauth==0.50.0
|
||||
recipe-scrapers==13.25.0
|
||||
django-scopes==1.2.0
|
||||
pytest==6.2.5
|
||||
pytest==7.1.1
|
||||
pytest-django==4.5.2
|
||||
django-treebeard==4.5.1
|
||||
django-cors-headers==3.11.0
|
||||
django-storages==1.12.3
|
||||
boto3==1.20.47
|
||||
boto3==1.21.31
|
||||
django-prometheus==2.2.0
|
||||
django-hCaptcha==0.2.0
|
||||
python-ldap==3.4.0
|
||||
|
170
vue/package.json
170
vue/package.json
@ -1,89 +1,89 @@
|
||||
{
|
||||
"name": "vue",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint"
|
||||
"name": "vue",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/eslint-parser": "^7.16.0",
|
||||
"@kangc/v-md-editor": "^1.7.7",
|
||||
"@kevinfaguiar/vue-twemoji-picker": "^5.7.4",
|
||||
"@popperjs/core": "^2.11.2",
|
||||
"@riophae/vue-treeselect": "^0.4.0",
|
||||
"@vue/cli": "^5.0.4",
|
||||
"axios": "^0.26.1",
|
||||
"bootstrap-vue": "^2.21.2",
|
||||
"core-js": "^3.20.3",
|
||||
"html2pdf.js": "^0.10.1",
|
||||
"lodash": "^4.17.21",
|
||||
"moment": "^2.29.1",
|
||||
"prismjs": "^1.27.0",
|
||||
"vue": "^2.6.14",
|
||||
"vue-class-component": "^7.2.3",
|
||||
"vue-click-outside": "^1.1.0",
|
||||
"vue-clickaway": "^2.2.2",
|
||||
"vue-cookies": "^1.7.4",
|
||||
"vue-i18n": "^8.26.8",
|
||||
"vue-infinite-loading": "^2.4.5",
|
||||
"vue-multiselect": "^2.1.6",
|
||||
"vue-property-decorator": "^9.1.2",
|
||||
"vue-simple-calendar": "^5.0.1",
|
||||
"vue-template-compiler": "^2.6.14",
|
||||
"vue2-touch-events": "^3.2.2",
|
||||
"vuedraggable": "^2.24.3",
|
||||
"vuex": "^3.6.0",
|
||||
"workbox-webpack-plugin": "^6.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@kazupon/vue-i18n-loader": "^0.5.0",
|
||||
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
||||
"@typescript-eslint/parser": "^4.32.0",
|
||||
"@vue/cli-plugin-babel": "~4.5.13",
|
||||
"@vue/cli-plugin-eslint": "~5.0.4",
|
||||
"@vue/cli-plugin-pwa": "~4.5.13",
|
||||
"@vue/cli-plugin-typescript": "^4.5.15",
|
||||
"@vue/cli-service": "~4.5.15",
|
||||
"@vue/compiler-sfc": "^3.2.29",
|
||||
"@vue/eslint-config-typescript": "^10.0.0",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"eslint": "^7.28.0",
|
||||
"eslint-plugin-vue": "^8.0.3",
|
||||
"typescript": "~4.5.5",
|
||||
"vue-cli-plugin-i18n": "^2.1.1",
|
||||
"webpack-bundle-tracker": "1.4.0",
|
||||
"workbox-expiration": "^6.3.0",
|
||||
"workbox-navigation-preload": "^6.0.2",
|
||||
"workbox-precaching": "^6.3.0",
|
||||
"workbox-routing": "^6.5.0",
|
||||
"workbox-strategies": "^6.2.4"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"root": true,
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/eslint-parser": "^7.16.0",
|
||||
"@kangc/v-md-editor": "^1.7.7",
|
||||
"@kevinfaguiar/vue-twemoji-picker": "^5.7.4",
|
||||
"@popperjs/core": "^2.10.1",
|
||||
"@riophae/vue-treeselect": "^0.4.0",
|
||||
"axios": "^0.24.0",
|
||||
"bootstrap-vue": "^2.21.2",
|
||||
"core-js": "^3.20.3",
|
||||
"html2pdf.js": "^0.10.1",
|
||||
"lodash": "^4.17.21",
|
||||
"moment": "^2.29.1",
|
||||
"prismjs": "^1.27.0",
|
||||
"vue": "^2.6.14",
|
||||
"vue-class-component": "^7.2.3",
|
||||
"vue-click-outside": "^1.1.0",
|
||||
"vue-clickaway": "^2.2.2",
|
||||
"vue-cookies": "^1.7.4",
|
||||
"vue-i18n": "^8.26.8",
|
||||
"vue-infinite-loading": "^2.4.5",
|
||||
"vue-jstree": "^2.1.6",
|
||||
"vue-multiselect": "^2.1.6",
|
||||
"vue-property-decorator": "^9.1.2",
|
||||
"vue-simple-calendar": "^5.0.1",
|
||||
"vue-template-compiler": "^2.6.14",
|
||||
"vue2-touch-events": "^3.2.2",
|
||||
"vuedraggable": "^2.24.3",
|
||||
"vuex": "^3.6.0",
|
||||
"workbox-webpack-plugin": "^6.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@kazupon/vue-i18n-loader": "^0.5.0",
|
||||
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
||||
"@typescript-eslint/parser": "^4.32.0",
|
||||
"@vue/cli-plugin-babel": "~4.5.13",
|
||||
"@vue/cli-plugin-eslint": "~4.5.15",
|
||||
"@vue/cli-plugin-pwa": "~4.5.13",
|
||||
"@vue/cli-plugin-typescript": "^4.5.15",
|
||||
"@vue/cli-service": "~4.5.15",
|
||||
"@vue/compiler-sfc": "^3.2.29",
|
||||
"@vue/eslint-config-typescript": "^10.0.0",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"eslint": "^7.28.0",
|
||||
"eslint-plugin-vue": "^8.0.3",
|
||||
"typescript": "~4.5.5",
|
||||
"vue-cli-plugin-i18n": "^2.1.1",
|
||||
"webpack-bundle-tracker": "1.4.0",
|
||||
"workbox-expiration": "^6.3.0",
|
||||
"workbox-navigation-preload": "^6.0.2",
|
||||
"workbox-precaching": "^6.3.0",
|
||||
"workbox-routing": "^6.3.0",
|
||||
"workbox-strategies": "^6.2.4"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"root": true,
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"extends": [
|
||||
"plugin:vue/vue3-essential",
|
||||
"eslint:recommended",
|
||||
"@vue/typescript"
|
||||
],
|
||||
"parserOptions": {
|
||||
"parser": "@typescript-eslint/parser"
|
||||
},
|
||||
"rules": {
|
||||
"no-unused-vars": "off"
|
||||
}
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions",
|
||||
"not dead"
|
||||
"extends": [
|
||||
"plugin:vue/vue3-essential",
|
||||
"eslint:recommended",
|
||||
"@vue/typescript"
|
||||
],
|
||||
"resolutions": {
|
||||
"@vue/cli-plugin-pwa/workbox-webpack-plugin": "^5.1.3",
|
||||
"coa": "2.0.2"
|
||||
"parserOptions": {
|
||||
"parser": "@typescript-eslint/parser"
|
||||
},
|
||||
"rules": {
|
||||
"no-unused-vars": "off"
|
||||
}
|
||||
}
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions",
|
||||
"not dead"
|
||||
],
|
||||
"resolutions": {
|
||||
"@vue/cli-plugin-pwa/workbox-webpack-plugin": "^5.1.3",
|
||||
"coa": "2.0.2"
|
||||
}
|
||||
}
|
@ -79,7 +79,7 @@
|
||||
:loading="keywords_loading"
|
||||
@search-change="searchKeywords"
|
||||
>
|
||||
<template v-slot:noOptions>{{ $t("empty_list") }}</template>
|
||||
<template v-slot:noOptions>{{ $t("empty_list") }}</template>
|
||||
</multiselect>
|
||||
</div>
|
||||
</div>
|
||||
@ -140,6 +140,24 @@
|
||||
</div>
|
||||
</b-collapse>
|
||||
</div>
|
||||
<b-card-header header-tag="header" class="p-1" role="tab">
|
||||
<b-button squared block v-b-toggle.additional_collapse class="text-left" variant="outline-primary">{{ $t("additional_options") }}</b-button>
|
||||
</b-card-header>
|
||||
<b-collapse id="additional_collapse" class="mt-2" v-model="additional_visible">
|
||||
<b-form-group>
|
||||
<b-input-group-append>
|
||||
<b-input-group-text squared> {{ $t("Create Food") }}</b-input-group-text>
|
||||
<b-input-group-text squared>
|
||||
<b-form-checkbox v-model="recipe.create_food"></b-form-checkbox>
|
||||
</b-input-group-text>
|
||||
<b-input-group-text squared v-if="recipe.create_food"> {{ $t("Name") }}</b-input-group-text>
|
||||
<b-form-input squared v-if="recipe.create_food" v-model="recipe.food_name" id="food_name"></b-form-input>
|
||||
</b-input-group-append>
|
||||
<em class="small text-muted">
|
||||
{{ $t("create_food_desc") }}
|
||||
</em>
|
||||
</b-form-group>
|
||||
</b-collapse>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -260,7 +278,7 @@
|
||||
style="flex-grow: 1; flex-shrink: 1; flex-basis: 0"
|
||||
@search-change="searchFiles"
|
||||
>
|
||||
<template v-slot:noOptions>{{ $t("empty_list") }}</template>
|
||||
<template v-slot:noOptions>{{ $t("empty_list") }}</template>
|
||||
</multiselect>
|
||||
<b-input-group-append>
|
||||
<b-button
|
||||
@ -300,7 +318,7 @@
|
||||
:loading="recipes_loading"
|
||||
@search-change="searchRecipes"
|
||||
>
|
||||
<template v-slot:noOptions>{{ $t("empty_list") }}</template>
|
||||
<template v-slot:noOptions>{{ $t("empty_list") }}</template>
|
||||
</multiselect>
|
||||
</div>
|
||||
</div>
|
||||
@ -364,7 +382,7 @@
|
||||
:loading="units_loading"
|
||||
@search-change="searchUnits"
|
||||
>
|
||||
<template v-slot:noOptions>{{ $t("empty_list") }}</template>
|
||||
<template v-slot:noOptions>{{ $t("empty_list") }}</template>
|
||||
</multiselect>
|
||||
</div>
|
||||
<div class="col-lg-4 col-md-6 small-padding" v-if="!ingredient.is_header">
|
||||
@ -394,7 +412,7 @@
|
||||
:loading="foods_loading"
|
||||
@search-change="searchFoods"
|
||||
>
|
||||
<template v-slot:noOptions>{{ $t("empty_list") }}</template>
|
||||
<template v-slot:noOptions>{{ $t("empty_list") }}</template>
|
||||
</multiselect>
|
||||
</div>
|
||||
<div class="small-padding" v-bind:class="{ 'col-lg-4 col-md-6': !ingredient.is_header, 'col-lg-12 col-md-12': ingredient.is_header }">
|
||||
@ -619,6 +637,8 @@ export default {
|
||||
paste_step: undefined,
|
||||
show_file_create: false,
|
||||
step_for_file_create: undefined,
|
||||
additional_visible: false,
|
||||
create_food: undefined,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@ -650,6 +670,12 @@ export default {
|
||||
this.recipe_changed = this.recipe_changed !== undefined
|
||||
},
|
||||
},
|
||||
"recipe.name": function () {
|
||||
this.recipe.food_name = this.recipe.name.toLowerCase()
|
||||
},
|
||||
"recipe.create_food": function () {
|
||||
this.create_food = this.recipe.create_food
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
keyboardListener: function (e) {
|
||||
@ -736,6 +762,9 @@ export default {
|
||||
.then((response) => {
|
||||
StandardToasts.makeStandardToast(StandardToasts.SUCCESS_UPDATE)
|
||||
this.recipe_changed = false
|
||||
if (this.create_food) {
|
||||
apiFactory.createFood({ name: this.recipe.food_name, recipe: { id: this.recipe.id, name: this.recipe.name } })
|
||||
}
|
||||
if (view_after) {
|
||||
location.href = resolveDjangoUrl("view_recipe", this.recipe_id)
|
||||
}
|
||||
|
@ -123,9 +123,9 @@
|
||||
<div class="collapse" :id="'section-' + sectionID(x, i)" visible role="tabpanel" :class="{ show: x == 'false' }">
|
||||
<!-- passing an array of values to the table grouped by Food -->
|
||||
<transition-group name="slide-fade">
|
||||
<div class="mx-4" v-for="(entries, x) in Object.entries(s)" :key="x">
|
||||
<div class="ml-4 mr-0" v-for="(entries, x) in Object.entries(s)" :key="x">
|
||||
<transition name="slide-fade" mode="out-in">
|
||||
<ShoppingLineItem
|
||||
<shopping-line-item
|
||||
:entries="entries[1]"
|
||||
:groupby="group_by"
|
||||
:settings="settings"
|
||||
|
@ -1,13 +1,13 @@
|
||||
<template>
|
||||
<div id="shopping_line_item">
|
||||
<b-row align-h="start">
|
||||
<b-col cols="3" md="2" class="justify-content-start align-items-center d-flex d-md-none pr-0" v-if="settings.left_handed">
|
||||
<b-col cols="2" md="2" class="justify-content-start align-items-center d-flex d-md-none pr-0" v-if="settings.left_handed">
|
||||
<input type="checkbox" class="form-control form-control-sm checkbox-control-mobile" :checked="formatChecked" @change="updateChecked" :key="entries[0].id" />
|
||||
<b-button size="sm" @click="showDetails = !showDetails" class="d-inline-block d-md-none p-0" variant="link">
|
||||
<div class="text-nowrap"><i class="fa fa-chevron-right rotate" :class="showDetails ? 'rotated' : ''"></i></div>
|
||||
</b-button>
|
||||
</b-col>
|
||||
<b-col cols="1" md="1" class="align-items-center d-flex">
|
||||
<b-col cols="1" class="align-items-center d-flex">
|
||||
<div class="dropdown b-dropdown position-static inline-block" data-html2canvas-ignore="true" @click.stop="$emit('open-context-menu', $event, entries)">
|
||||
<button
|
||||
aria-haspopup="true"
|
||||
@ -23,7 +23,7 @@
|
||||
<b-col cols="1" class="px-1 justify-content-center align-items-center d-none d-md-flex">
|
||||
<input type="checkbox" class="form-control form-control-sm checkbox-control" :checked="formatChecked" @change="updateChecked" :key="entries[0].id" />
|
||||
</b-col>
|
||||
<b-col cols="8" md="9">
|
||||
<b-col cols="8" >
|
||||
<b-row class="d-flex h-100">
|
||||
<b-col cols="6" md="3" class="d-flex align-items-center" v-if="Object.entries(formatAmount).length == 1">
|
||||
<strong class="mr-1">{{ Object.entries(formatAmount)[0][1] }}</strong> {{ Object.entries(formatAmount)[0][0] }}
|
||||
@ -47,7 +47,7 @@
|
||||
</b-col>
|
||||
</b-row>
|
||||
</b-col>
|
||||
<b-col cols="3" md="2" class="justify-content-start align-items-center d-flex d-md-none" v-if="!settings.left_handed">
|
||||
<b-col cols="2" class="justify-content-start align-items-center d-flex d-md-none pl-0 pr-0" v-if="!settings.left_handed">
|
||||
<b-button size="sm" @click="showDetails = !showDetails" class="d-inline-block d-md-none p-0" variant="link">
|
||||
<div class="text-nowrap"><i class="fa fa-chevron-right rotate" :class="showDetails ? 'rotated' : ''"></i></div>
|
||||
</b-button>
|
||||
|
@ -381,5 +381,8 @@
|
||||
"Keyword": "Keyword",
|
||||
"Advanced": "Advanced",
|
||||
"Page": "Page",
|
||||
"Reset": "Reset"
|
||||
"Reset": "Reset",
|
||||
"Create Food": "Create Food",
|
||||
"create_food_desc": "Create a food and link it to this recipe.",
|
||||
"additional_options": "Additional Options"
|
||||
}
|
||||
|
@ -109,7 +109,7 @@
|
||||
"Settings": "Asetukset",
|
||||
"or": "tai",
|
||||
"and": "ja",
|
||||
"Information": "Informaatio",
|
||||
"Information": "Tiedot",
|
||||
"Download": "Lataa",
|
||||
"Create": "Luo",
|
||||
"Advanced Search Settings": "Tarkennetun Haun Asetukset",
|
||||
@ -122,21 +122,21 @@
|
||||
"move_confirmation": "Siirrä <i>{child}</i> yläluokkaan <i>{parent}</i>",
|
||||
"merge_confirmation": "Korvaa <i>{source}</i> esiintymiset <i>{target}:lla</i>",
|
||||
"create_rule": "ja luo automaatio",
|
||||
"move_selection": "Valitse yläluokka {type} johon {suorce} siirretään.",
|
||||
"move_selection": "Valitse yläluokka {type} johon {source} siirretään.",
|
||||
"merge_selection": "Korvaa kaikki {source} esiintymiset valitulla {type}:llä.",
|
||||
"Root": "Root",
|
||||
"Ignore_Shopping": "Ohita Ostokset",
|
||||
"Shopping_Category": "Ostosluokka",
|
||||
"Edit_Food": "Muokkaa Ruokaa",
|
||||
"Move_Food": "Siirrä Ruoka",
|
||||
"New_Food": "Uusi Ruoka",
|
||||
"Hide_Food": "Piilota Ruoka",
|
||||
"Food_Alias": "Ruoan Nimimerkki",
|
||||
"Unit_Alias": "Yksikkö alias",
|
||||
"Keyword_Alias": "Avainsana alias",
|
||||
"Delete_Food": "Poista Ruoka",
|
||||
"Edit_Food": "Muokkaa ruokaa",
|
||||
"Move_Food": "Siirrä ruoka",
|
||||
"New_Food": "Uusi ruoka",
|
||||
"Hide_Food": "Piilota ruoka",
|
||||
"Food_Alias": "Ruoan nimimerkki",
|
||||
"Unit_Alias": "Yksikköalias",
|
||||
"Keyword_Alias": "Avainsana-alias",
|
||||
"Delete_Food": "Poista ruoka",
|
||||
"No_ID": "Poistaminen epäonnistui, ID:tä ei löytynyt.",
|
||||
"Meal_Plan_Days": "Tulevat Ruokasuunnitelmat",
|
||||
"Meal_Plan_Days": "Tulevat ruokasuunnitelmat",
|
||||
"merge_title": "Yhdistä {type}",
|
||||
"move_title": "Siirrä {type}",
|
||||
"Food": "Ruoka",
|
||||
@ -206,5 +206,11 @@
|
||||
"Auto_Planner": "Automaattinen Suunnittelija",
|
||||
"New_Cookbook": "Uusi keittokirja",
|
||||
"Hide_Keyword": "Piilota avainsana",
|
||||
"Clear": "Pyyhi"
|
||||
"Clear": "Pyyhi",
|
||||
"err_moving_resource": "Resurssin siirtämisessä tapahtui virhe!",
|
||||
"err_merging_resource": "Resurssin yhdistämisessä tapahtui virhe!",
|
||||
"success_moving_resource": "Resurssin siirto onnistui!",
|
||||
"success_merging_resource": "Resurssin yhdistäminen onnistui!",
|
||||
"Search Settings": "Hakuasetukset",
|
||||
"Shopping_Categories": "Ostoskategoriat"
|
||||
}
|
||||
|
@ -285,5 +285,49 @@
|
||||
"Create_Meal_Plan_Entry": "Créer une entrée de menu",
|
||||
"RemoveFoodFromShopping": "Retirer l’ingrédient {food} de votre liste de courses",
|
||||
"left_handed": "Mode gaucher",
|
||||
"left_handed_help": "Optimise l’interface utilisateur pour une utilisation avec la main gauche."
|
||||
"left_handed_help": "Optimise l’interface utilisateur pour une utilisation avec la main gauche.",
|
||||
"Custom Filter": "Filtre personnalisé",
|
||||
"shared_with": "Partagé avec",
|
||||
"sort_by": "Trié par",
|
||||
"desc": "Ordre décroissant",
|
||||
"date_created": "Créé le",
|
||||
"make_now": "Cuisiner maintenant",
|
||||
"copy_to_new": "Copier dans une nouvelle recette",
|
||||
"recipe_name": "Nom de la recette",
|
||||
"paste_ingredients_placeholder": "Copier la liste d'ingrédients ici...",
|
||||
"paste_ingredients": "Copier les ingrédients",
|
||||
"ingredient_list": "Liste des ingrédients",
|
||||
"search_no_recipes": "Aucune recettes trouvées !",
|
||||
"substitute_siblings_help": "Tous les ingrédients qui partagent un parent avec cette ingrédient sont considérés comme des substituts.",
|
||||
"OnHand_help": "L'ingrédient est dans l'inventaire et ne sera pas automatiquement ajouté à la liste de courses. Le status actuel est partagé avec les utilisateurs de la liste.",
|
||||
"ignore_shopping_help": "Ne jamais ajouter l'ingrédient à la liste de courses (ex: eau)",
|
||||
"food_recipe_help": "Ajouter un lien vers la recette ici incluera cette recette dans n'importe qu'elle autre recette qui utilise cet ingrédient",
|
||||
"shopping_category_help": "Les supermarchés peuvent être triés et filtrés par catégorie d'ingrédients selon la disposition des rayons.",
|
||||
"Units": "Unités",
|
||||
"view_recipe": "Voir la recette",
|
||||
"review_shopping": "Vérifier les éléments de la liste avant de sauvegarder",
|
||||
"Select": "Sélectionner",
|
||||
"Supermarkets": "Supermarchés",
|
||||
"User": "Utilisateur",
|
||||
"Keyword": "Mot-clé",
|
||||
"Foods": "Ingrédients",
|
||||
"enable_expert": "Activer le mode expert",
|
||||
"show_rating": "Afficher les notes",
|
||||
"asc": "Ordre croissant",
|
||||
"book_filter_help": "Inclure les recettes filtrés en plus de celles ajoutées manuellement.",
|
||||
"search_import_help_text": "Importer une recette depuis un site ou application externe.",
|
||||
"search_create_help_text": "Créer une nouvelle recette directement dans Tandoor.",
|
||||
"substitute_help": "Les substituts sont pris en compte lors d'une recherche de recettes pouvant être cuisinées avec les ingrédients disponibles.",
|
||||
"remember_search": "Enregistrer la recherche",
|
||||
"expert_mode": "Mode expert",
|
||||
"simple_mode": "Mode simplifié",
|
||||
"advanced": "Avancé",
|
||||
"fields": "Champs",
|
||||
"show_keywords": "Afficher les mots-clés",
|
||||
"show_foods": "Afficher les ingrédients",
|
||||
"show_books": "Afficher les livres",
|
||||
"show_units": "Afficher les unités",
|
||||
"show_filters": "Afficher les filtres",
|
||||
"save_filter": "Sauvegarder le filtre",
|
||||
"filter_name": "Filtrer par nom"
|
||||
}
|
||||
|
@ -349,8 +349,8 @@
|
||||
"ChildInheritFields_help": "",
|
||||
"InheritFields_help": "",
|
||||
"last_viewed": "",
|
||||
"created_on": "",
|
||||
"updatedon": "",
|
||||
"created_on": "Criado em",
|
||||
"updatedon": "Atualizado em",
|
||||
"advanced_search_settings": "",
|
||||
"nothing_planned_today": "",
|
||||
"no_pinned_recipes": "",
|
||||
@ -358,7 +358,7 @@
|
||||
"Pinned": "",
|
||||
"Quick actions": "",
|
||||
"Ratings": "",
|
||||
"Internal": "",
|
||||
"Internal": "Interno",
|
||||
"Units": "",
|
||||
"Random Recipes": "",
|
||||
"parameter_count": "",
|
||||
@ -372,7 +372,7 @@
|
||||
"empty_list": "",
|
||||
"Select": "",
|
||||
"Supermarkets": "",
|
||||
"User": "",
|
||||
"User": "Utilizador",
|
||||
"Keyword": "",
|
||||
"Advanced": "",
|
||||
"Page": "",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"import_running": "Import pågår, var god vänta!",
|
||||
"import_running": "Importering pågår, var god vänta!",
|
||||
"all_fields_optional": "Alla rutor är valfria och kan lämnas tomma.",
|
||||
"convert_internal": "Konvertera till internt recept",
|
||||
"Log_Recipe_Cooking": "Logga tillagningen av receptet",
|
||||
"External_Recipe_Image": "Externt receptbild",
|
||||
"External_Recipe_Image": "Extern receptbild",
|
||||
"Add_to_Book": "Lägg till i kokbok",
|
||||
"Add_to_Shopping": "Lägg till i handelslista",
|
||||
"Add_to_Shopping": "Lägg till i inköpslista",
|
||||
"Add_to_Plan": "Lägg till i matsedel",
|
||||
"Step_start_time": "Steg starttid",
|
||||
"Select_Book": "Välj kokbok",
|
||||
@ -17,7 +17,7 @@
|
||||
"Fats": "Fett",
|
||||
"Carbohydrates": "Kolhydrater",
|
||||
"Calories": "Kalorier",
|
||||
"Energy": "",
|
||||
"Energy": "Energi",
|
||||
"Nutrition": "Näringsinnehåll",
|
||||
"Date": "Datum",
|
||||
"Share": "Dela",
|
||||
@ -37,5 +37,185 @@
|
||||
"Search": "Sök",
|
||||
"Import": "Importera",
|
||||
"Print": "Skriv ut",
|
||||
"Information": "Information"
|
||||
"Information": "Information",
|
||||
"Link": "Länk",
|
||||
"Copy": "Kopiera",
|
||||
"Key_Ctrl": "Ctrl",
|
||||
"Sort_by_new": "Sortera efter ny",
|
||||
"Recipes_per_page": "Recept per sida",
|
||||
"Table_of_Contents": "Innehållsförteckning",
|
||||
"Books": "Böcker",
|
||||
"New_Recipe": "Nytt recept",
|
||||
"Recently_Viewed": "Nyligen visade",
|
||||
"create_rule": "och skapa automation",
|
||||
"Root": "Rot",
|
||||
"External": "Extern",
|
||||
"Settings": "Inställningar",
|
||||
"New": "Ny",
|
||||
"Meal_Plan": "Måltidsplanering",
|
||||
"Categories": "Kategorier",
|
||||
"Category": "Kategori",
|
||||
"Selected": "Vald",
|
||||
"Supermarket": "Mataffär",
|
||||
"Files": "Filer",
|
||||
"Size": "Storlek",
|
||||
"err_creating_resource": "Det uppstod ett fel när en resurs skulle skapas!",
|
||||
"err_updating_resource": "Det uppstod ett fel när en resurs skulle uppdateras!",
|
||||
"err_fetching_resource": "Det uppstod ett fel när en resurs skulle hämtas!",
|
||||
"success_fetching_resource": "En resurs har hämtats!",
|
||||
"err_deleting_resource": "Det uppstod ett fel när en resurs skulle tas bort!",
|
||||
"success_updating_resource": "En resurs har uppdaterats!",
|
||||
"Remove_nutrition_recipe": "Ta bort näring från receptet",
|
||||
"Add_nutrition_recipe": "Lägg till näring till receptet",
|
||||
"New_Keyword": "Nytt nyckelord",
|
||||
"Automation": "Automatisering",
|
||||
"Parameter": "Parameter",
|
||||
"Download": "Ladda ned",
|
||||
"and": "och",
|
||||
"Ok": "Öppna",
|
||||
"Create": "Skapa",
|
||||
"Ignore_Shopping": "Ignorera handling",
|
||||
"or": "eller",
|
||||
"Create_New_Keyword": "Lägg till nytt nyckelord",
|
||||
"No_Results": "Inget resultat",
|
||||
"New_Unit": "Ny enhet",
|
||||
"create_title": "Ny {type}",
|
||||
"Drag_Here_To_Delete": "Dra hit för att radera",
|
||||
"Meal_Type_Required": "Måltidstyp är obligatorisk",
|
||||
"Clone": "Klona",
|
||||
"Reset_Search": "Rensa sök",
|
||||
"Title_or_Recipe_Required": "Val av titel eller recept krävs",
|
||||
"success_creating_resource": "En resurs har skapats!",
|
||||
"Time": "Tid",
|
||||
"Text": "Text",
|
||||
"Empty": "Tom",
|
||||
"and_up": "& ned",
|
||||
"Cancel": "Avbryt",
|
||||
"Failure": "Misslyckas",
|
||||
"File": "Fil",
|
||||
"Delete": "Radera",
|
||||
"edit_title": "Redigera {type}",
|
||||
"Description": "Beskrivning",
|
||||
"Recipe": "Recept",
|
||||
"Icon": "Ikon",
|
||||
"Unit": "Enhet",
|
||||
"Name": "Namn",
|
||||
"Type": "Typ",
|
||||
"No_ID": "ID hittades inte, kan inte radera.",
|
||||
"Create_New_Unit": "Lägg till enhet",
|
||||
"Export_As_ICal": "Exportera nuvarande period till iCal format",
|
||||
"Auto_Planner": "Autoplanera",
|
||||
"Show_as_header": "Visa som rubrik",
|
||||
"Hide_as_header": "Göm som rubrik",
|
||||
"Copy_template_reference": "Kopiera mallreferens",
|
||||
"Save_and_View": "Spara & visa",
|
||||
"step_time_minutes": "Stegets tid i minuter",
|
||||
"Url_Import": "Länk import",
|
||||
"Delete_Keyword": "Ta bort nyckelord",
|
||||
"Edit_Keyword": "Redigera nyckelord",
|
||||
"confirm_delete": "Är du säker på att du vill radera detta {object}?",
|
||||
"Move_Keyword": "Flytta nyckelord",
|
||||
"Edit_Recipe": "Redigera recept",
|
||||
"Merge_Keyword": "Slå samman nyckelord",
|
||||
"Hide_Keywords": "Dölj nyckelord",
|
||||
"Hide_Recipes": "Dölj recept",
|
||||
"Move_Up": "Flytta upp",
|
||||
"Move_Down": "Flytta ned",
|
||||
"Step_Name": "Stegets namn",
|
||||
"Step_Type": "Stegets typ",
|
||||
"Make_Ingredient": "Skapa ingrediens",
|
||||
"Enable_Amount": "Aktivera belopp",
|
||||
"Disable_Amount": "Inaktivera belopp",
|
||||
"move_title": "Flytta {type}",
|
||||
"merge_title": "Slå samman {type}",
|
||||
"Food": "Mat",
|
||||
"Key_Shift": "Shift",
|
||||
"Instructions": "Instruktioner",
|
||||
"and_down": "& up",
|
||||
"Added_by": "Tillagd av",
|
||||
"Title": "Titel",
|
||||
"Week": "Vecka",
|
||||
"Month": "Månad",
|
||||
"Year": "År",
|
||||
"Period": "Period",
|
||||
"Undefined": "Odefinierad",
|
||||
"Periods": "Perioder",
|
||||
"Plan_Period_To_Show": "Visa veckor, månader eller år",
|
||||
"Color": "Färg",
|
||||
"Plan_Show_How_Many_Periods": "Hur många perioder ska visas",
|
||||
"Starting_Day": "Startdag i veckan",
|
||||
"Meal_Types": "Måltidstyper",
|
||||
"Meal_Type": "Måltidstyp",
|
||||
"New_Meal_Type": "Ny måltidstyp",
|
||||
"AddFoodToShopping": "Lägg till {food} på din inköpslista",
|
||||
"RemoveFoodFromShopping": "Ta bort {mat} från din inköpslista",
|
||||
"DeleteShoppingConfirm": "Är du säker på att du vill ta bort all {food} från inköpslistan?",
|
||||
"Week_Numbers": "Veckonummer",
|
||||
"Show_Week_Numbers": "Visa veckonummer?",
|
||||
"Export_To_ICal": "Exportera .ics",
|
||||
"Next_Day": "Nästa dag",
|
||||
"Previous_Day": "Föregående dag",
|
||||
"GroupBy": "Gruppera enligt",
|
||||
"Next_Period": "Nästa period",
|
||||
"Previous_Period": "Föregående period",
|
||||
"Current_Period": "Nuvarande period",
|
||||
"Inherit": "Ärva",
|
||||
"InheritFields": "Ärv fältvärden",
|
||||
"NoCategory": "Ingen kategori vald.",
|
||||
"show_split_screen": "Delad vy",
|
||||
"Warning": "Varning",
|
||||
"Reset": "Återställa",
|
||||
"select_unit": "Välj enhet",
|
||||
"select_food": "Välj mat",
|
||||
"remove_selection": "Avmarkera",
|
||||
"Select": "Välj",
|
||||
"Supermarkets": "Mataffärer",
|
||||
"User": "Användare",
|
||||
"Keyword": "Nyckelord",
|
||||
"Advanced": "Avancerat",
|
||||
"Page": "Sida",
|
||||
"select_keyword": "Välj nyckelord",
|
||||
"add_keyword": "Lägg till nyckelord",
|
||||
"select_file": "Välj fil",
|
||||
"select_recipe": "Välj recept",
|
||||
"Units": "Enheter",
|
||||
"last_viewed": "Senast visad",
|
||||
"empty_list": "Listan är tom.",
|
||||
"Load_More": "Ladda mer",
|
||||
"Make_Header": "Skapa rubrik",
|
||||
"err_moving_resource": "Det uppstod ett fel när en resurs skulle flyttas!",
|
||||
"err_merging_resource": "Det uppstod ett fel när en resurs skulle slås ihop!",
|
||||
"success_moving_resource": "En resurs har flyttats!",
|
||||
"success_merging_resource": "En resurs har slagits samman!",
|
||||
"Select_File": "Välj fil",
|
||||
"Add_Step": "Lägg till steg",
|
||||
"Note": "Anteckning",
|
||||
"Success": "Lyckas",
|
||||
"Image": "Bild",
|
||||
"View": "Visa",
|
||||
"Recipes": "Recept",
|
||||
"Merge": "Slå samman",
|
||||
"delete_confirmation": "Är du säker på att du vill radera {source}?",
|
||||
"delete_title": "Radera {type}",
|
||||
"Keyword_Alias": "Nyckelord alias",
|
||||
"Recipe_Book": "Receptbok",
|
||||
"Search Settings": "Sökinställningar",
|
||||
"warning_feature_beta": "Den här funktionen är för närvarande i ett BETA-läge (testning). Vänligen förvänta dig buggar och eventuellt brytande ändringar i framtiden (möjligen att förlora funktionsrelaterad data) när du använder den här funktionen.",
|
||||
"success_deleting_resource": "En resurs har raderats!",
|
||||
"file_upload_disabled": "Filuppladdning är inte aktiverat för ditt utrymme.",
|
||||
"show_only_internal": "Visa endast interna recept",
|
||||
"Manage_Books": "Hantera böcker",
|
||||
"Keywords": "Nyckelord",
|
||||
"Move": "Flytta",
|
||||
"Parent": "Förälder",
|
||||
"merge_selection": "Ersätt alla förekomster av {source} med den valda {type}.",
|
||||
"Shopping_Category": "Shopping kategori",
|
||||
"move_selection": "Välj en förälder {type} att flytta {source} till.",
|
||||
"Create_New_Shopping Category": "Skapa ny shoppingkategori",
|
||||
"Create_New_Meal_Type": "Lägg till ny måltidstyp",
|
||||
"tree_root": "Roten av trädet",
|
||||
"Meal_Plan_Days": "Framtida måltidsplaner",
|
||||
"Automate": "Automatisera",
|
||||
"Shopping_Categories": "Shopping kategorier",
|
||||
"Unit_Alias": "Enhetsalias"
|
||||
}
|
||||
|
5154
vue/yarn.lock
5154
vue/yarn.lock
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user