mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-01-06 05:18:32 -05:00
Compare commits
253 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b54cdf6425 | ||
|
|
02da2114f9 | ||
|
|
a67533a778 | ||
|
|
59ad834c12 | ||
|
|
315d5b370e | ||
|
|
130813ffe4 | ||
|
|
65ddb7c9e2 | ||
|
|
dbe29e15ae | ||
|
|
980b3c634b | ||
|
|
457d8c93ce | ||
|
|
23aad6358c | ||
|
|
7c896361f2 | ||
|
|
5b7f5738e3 | ||
|
|
5bfcb80c98 | ||
|
|
b1278b45e2 | ||
|
|
e7ae76ea48 | ||
|
|
e84e5e2910 | ||
|
|
5e6f5bc175 | ||
|
|
d577978f2f | ||
|
|
e30728e8e9 | ||
|
|
29368d9cc4 | ||
|
|
4776da7aea | ||
|
|
87518b1fbd | ||
|
|
d7deb5a3f8 | ||
|
|
445ec18bb4 | ||
|
|
3ecc289e1a | ||
|
|
805e1c2d7d | ||
|
|
58286013c9 | ||
|
|
1afdc400a8 | ||
|
|
f6d526741b | ||
|
|
c9b21f862e | ||
|
|
4ae7f6eca4 | ||
|
|
c9fdf862a3 | ||
|
|
cf97c2247c | ||
|
|
9c95c56f0a | ||
|
|
9f3aca5a3f | ||
|
|
dd87779476 | ||
|
|
2e7078e90b | ||
|
|
6b52b61604 | ||
|
|
41e2643755 | ||
|
|
170b4d338d | ||
|
|
ecd506c714 | ||
|
|
e6aadc4902 | ||
|
|
ae74e0d71c | ||
|
|
d6db8c23ce | ||
|
|
dcf7afa441 | ||
|
|
185c93100b | ||
|
|
cf68420976 | ||
|
|
dea3b756f1 | ||
|
|
825b19c634 | ||
|
|
8d59c35bc9 | ||
|
|
06ec8dd4f3 | ||
|
|
fc4ec3261f | ||
|
|
663716ca0f | ||
|
|
6c4ce585d6 | ||
|
|
0acf30db61 | ||
|
|
db9035f92c | ||
|
|
a475afd570 | ||
|
|
57ca357969 | ||
|
|
cac099eeb3 | ||
|
|
c0929634a9 | ||
|
|
52de8afe2d | ||
|
|
2809b87ab0 | ||
|
|
7aab87813c | ||
|
|
4a67fffccd | ||
|
|
12b7625d42 | ||
|
|
275e1dc85c | ||
|
|
3a8e814315 | ||
|
|
07ebd1e613 | ||
|
|
a626330139 | ||
|
|
5ac7645350 | ||
|
|
efc6064605 | ||
|
|
71a6f32665 | ||
|
|
d60c4c179b | ||
|
|
c5c8c59168 | ||
|
|
fca75c5c07 | ||
|
|
012142feec | ||
|
|
d532395d89 | ||
|
|
b25f9f2cdf | ||
|
|
5471e742f0 | ||
|
|
c5849b2a74 | ||
|
|
429b2adf98 | ||
|
|
df366cd82a | ||
|
|
0a4bb583ff | ||
|
|
dfb650c4b1 | ||
|
|
aa4527e5f7 | ||
|
|
ae8ea16dab | ||
|
|
d321c69244 | ||
|
|
478a4e5d73 | ||
|
|
44cd2fef1c | ||
|
|
0abe8b1921 | ||
|
|
4a13714177 | ||
|
|
ac3514f4c6 | ||
|
|
f9b71f4b4c | ||
|
|
7ca50b63f9 | ||
|
|
62adc920a9 | ||
|
|
eeda71e186 | ||
|
|
8e5ea1df5e | ||
|
|
0bf3aed287 | ||
|
|
74d6f58363 | ||
|
|
3d4405cd42 | ||
|
|
98c8694979 | ||
|
|
32812d6a6c | ||
|
|
1f8d7c0b21 | ||
|
|
8b88f6892c | ||
|
|
618c567392 | ||
|
|
fb44451c6f | ||
|
|
9e1edbacb6 | ||
|
|
f45d02299a | ||
|
|
7afd7b2334 | ||
|
|
0a28d36df9 | ||
|
|
2c1185e1d4 | ||
|
|
69bbf9fdcc | ||
|
|
38125fa362 | ||
|
|
5db7a735d7 | ||
|
|
4d2363ea22 | ||
|
|
994940f270 | ||
|
|
3adb324b25 | ||
|
|
fbfc5b31d6 | ||
|
|
2a016ecce9 | ||
|
|
782d4ec180 | ||
|
|
8c52448da2 | ||
|
|
7e194887f5 | ||
|
|
806a1b9392 | ||
|
|
d575a3b222 | ||
|
|
f61fdb8623 | ||
|
|
ea7005e822 | ||
|
|
a7775ea7ef | ||
|
|
ba4eddccd9 | ||
|
|
6fcda5e446 | ||
|
|
34d742963a | ||
|
|
59cd68d54a | ||
|
|
1e4dbe4e95 | ||
|
|
5d89d53a4a | ||
|
|
349ccbad6f | ||
|
|
5d68620382 | ||
|
|
cb06c8a877 | ||
|
|
7d57fdcd96 | ||
|
|
fa60d81e26 | ||
|
|
6c4294dc49 | ||
|
|
0a3542e97c | ||
|
|
83887e3c37 | ||
|
|
5fe29cdd93 | ||
|
|
f618c45767 | ||
|
|
e1a87b32d9 | ||
|
|
9e739c8b35 | ||
|
|
d6fab197e7 | ||
|
|
89a5326d3f | ||
|
|
f0b542c990 | ||
|
|
c1a3516b37 | ||
|
|
db467105b9 | ||
|
|
2b5372f693 | ||
|
|
1a2ff9540f | ||
|
|
28fdc8a9ac | ||
|
|
b0ce1483fe | ||
|
|
ad251b2449 | ||
|
|
0ebc2a746b | ||
|
|
9c6e3ebe5b | ||
|
|
1b404ee6d8 | ||
|
|
72052be92f | ||
|
|
f2e7deb5cb | ||
|
|
b2e0c51ead | ||
|
|
3d73e7498f | ||
|
|
690f595491 | ||
|
|
058d968833 | ||
|
|
da2adaa694 | ||
|
|
fb9be66f97 | ||
|
|
0a446928d7 | ||
|
|
dc01ff36dc | ||
|
|
2d90ae903b | ||
|
|
d324c6ac57 | ||
|
|
aebf229b86 | ||
|
|
3c76a82997 | ||
|
|
30ec65f43c | ||
|
|
2471c7b08e | ||
|
|
4be23ccffb | ||
|
|
99db24cdec | ||
|
|
719a33352a | ||
|
|
fe3bd95c85 | ||
|
|
8db08c21e5 | ||
|
|
a384e6716d | ||
|
|
e35b2e9fbf | ||
|
|
b48c2ab736 | ||
|
|
a12ee536d9 | ||
|
|
97d5439a4f | ||
|
|
c94a1d7c17 | ||
|
|
0ce05c781c | ||
|
|
0e0dfbf014 | ||
|
|
ae03e61bb9 | ||
|
|
f6167b1d81 | ||
|
|
df75cb4034 | ||
|
|
67313f8f03 | ||
|
|
39eab01885 | ||
|
|
9fb63a00fd | ||
|
|
f945cb8d2d | ||
|
|
7a107584c7 | ||
|
|
248459671e | ||
|
|
67e48c2fd1 | ||
|
|
368d25fa01 | ||
|
|
12b1d29413 | ||
|
|
dccc676b24 | ||
|
|
d9c1cf8bec | ||
|
|
0836c303d9 | ||
|
|
a43fd6b7fc | ||
|
|
e7ee189fbb | ||
|
|
b6708613b9 | ||
|
|
3317e061a8 | ||
|
|
0dc8584485 | ||
|
|
673ad6d42b | ||
|
|
1450d6fc4c | ||
|
|
b082242439 | ||
|
|
de69a3ca86 | ||
|
|
96e37b3ee1 | ||
|
|
cb2d8a9a50 | ||
|
|
19c5b7c7ab | ||
|
|
38a4215b35 | ||
|
|
77a05c754e | ||
|
|
2226d7cbf9 | ||
|
|
c1a2c7d485 | ||
|
|
8127f48924 | ||
|
|
a0e7f85c32 | ||
|
|
b45ffd2046 | ||
|
|
ef4f6245d5 | ||
|
|
7bd1c8ef14 | ||
|
|
5d049d5696 | ||
|
|
704d0a8392 | ||
|
|
12547feb4c | ||
|
|
7dbc031725 | ||
|
|
70ce34d6c9 | ||
|
|
dff351a8eb | ||
|
|
abf4b7706f | ||
|
|
813a124250 | ||
|
|
7299c9ec9a | ||
|
|
3a0e4ff119 | ||
|
|
9cc59e81d6 | ||
|
|
a04b6983e7 | ||
|
|
6beea06a41 | ||
|
|
e75b5f2f15 | ||
|
|
c9acc48bd6 | ||
|
|
f4df68a9e2 | ||
|
|
4cee8ea879 | ||
|
|
e7f5a4adff | ||
|
|
0301713214 | ||
|
|
5ef23e0330 | ||
|
|
88529457bf | ||
|
|
890b5d93a7 | ||
|
|
7dafa6c7fe | ||
|
|
8d2d571683 | ||
|
|
19e776a772 | ||
|
|
f77649abc8 | ||
|
|
33870dc845 | ||
|
|
265313919c | ||
|
|
dd5d1b9cba |
13
.github/workflows/nightly.yml
vendored
13
.github/workflows/nightly.yml
vendored
@@ -4,6 +4,12 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- mealie-next
|
||||
paths-ignore:
|
||||
- '*.md'
|
||||
- '.devcontainer/**'
|
||||
# I'm not excluding .github as changes in there might be to workflows etc
|
||||
- '.vscode/**'
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: nightly-${{ github.ref }}
|
||||
@@ -22,7 +28,13 @@ jobs:
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
# The id-token write permission is needed to connect to Depot.dev
|
||||
# as part of the partial-builder.yml action. It needs to be declared
|
||||
# in the parent action, as noted here:
|
||||
# https://github.com/orgs/community/discussions/76409#discussioncomment-8131390
|
||||
id-token: write
|
||||
name: Build Tagged Release
|
||||
if: github.repository == 'mealie-recipes/mealie'
|
||||
uses: ./.github/workflows/partial-builder.yml
|
||||
needs:
|
||||
- frontend-tests
|
||||
@@ -35,6 +47,7 @@ jobs:
|
||||
|
||||
notify-discord:
|
||||
name: Notify Discord
|
||||
if: github.repository == 'mealie-recipes/mealie'
|
||||
needs:
|
||||
- build-release
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
16
.github/workflows/partial-builder.yml
vendored
16
.github/workflows/partial-builder.yml
vendored
@@ -35,19 +35,16 @@ jobs:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Override __init__.py
|
||||
run: |
|
||||
echo "__version__ = \"${{ inputs.tag }}\"" > ./mealie/__init__.py
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v5
|
||||
- uses: depot/setup-action@v1
|
||||
|
||||
- name: Build and push Docker image, via Depot.dev
|
||||
uses: depot/build-push-action@v1
|
||||
with:
|
||||
project: srzjb6mhzm
|
||||
file: ./docker/Dockerfile
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
@@ -58,6 +55,3 @@ jobs:
|
||||
${{ inputs.tags }}
|
||||
build-args: |
|
||||
COMMIT=${{ github.sha }}
|
||||
# https://docs.docker.com/build/ci/github-actions/cache/#github-cache
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
24
.github/workflows/release.yml
vendored
24
.github/workflows/release.yml
vendored
@@ -17,6 +17,11 @@ jobs:
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
# The id-token write permission is needed to connect to Depot.dev
|
||||
# as part of the partial-builder.yml action. It needs to be declared
|
||||
# in the parent action, as noted here:
|
||||
# https://github.com/orgs/community/discussions/76409#discussioncomment-8131390
|
||||
id-token: write
|
||||
name: Build Tagged Release
|
||||
uses: ./.github/workflows/partial-builder.yml
|
||||
needs:
|
||||
@@ -51,6 +56,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Checkout 🛎
|
||||
uses: actions/checkout@v4
|
||||
@@ -60,11 +66,15 @@ jobs:
|
||||
sed -i 's/:v[0-9]*.[0-9]*.[0-9]*/:${{ github.event.release.tag_name }}/' docs/docs/documentation/getting-started/installation/sqlite.md
|
||||
sed -i 's/:v[0-9]*.[0-9]*.[0-9]*/:${{ github.event.release.tag_name }}/' docs/docs/documentation/getting-started/installation/postgres.md
|
||||
|
||||
- name: Commit updates
|
||||
uses: test-room-7/action-update-file@v1
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v6
|
||||
# This doesn't currently work for us because it creates the PR but the workflows don't run.
|
||||
# TODO: Provide a personal access token as a parameter here, that solves that problem.
|
||||
# https://github.com/peter-evans/create-pull-request
|
||||
with:
|
||||
file-path: |
|
||||
docs/docs/documentation/getting-started/installation/sqlite.md
|
||||
docs/docs/documentation/getting-started/installation/postgres.md
|
||||
commit-msg: "Change image tag, for release ${{ github.event.release.tag_name }}"
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
commit-message: "Update image tag, for release ${{ github.event.release.tag_name }}"
|
||||
branch: "docs/newrelease-update-version-${{ github.event.release.tag_name }}"
|
||||
delete-branch: true
|
||||
base: mealie-next
|
||||
title: "docs(auto): Update image tag, for release ${{ github.event.release.tag_name }}"
|
||||
body: "Auto-generated by `.github/workflows/release.yml`, on publish of release ${{ github.event.release.tag_name }}"
|
||||
|
||||
@@ -71,12 +71,9 @@ Distributed under the AGPL License. See `LICENSE` for more information.
|
||||
|
||||
Huge thanks to all the sponsors of this project on [Github Sponsors](https://github.com/sponsors/hay-kot) and Buy Me a Coffee. Without you, this project would surely not be possible.
|
||||
|
||||
Thanks to Linode for providing Hosting for the Demo, Beta, and Documentation sites! Another big thanks to JetBrains for providing their IDEs for development.
|
||||
Thanks to Depot for providing build instances for our Docker image builds.
|
||||
|
||||
<div align='center'>
|
||||
<img height="100" src="docs/docs/assets/img/sponsors-linode.svg" />
|
||||
<img height="100" src="docs/docs/assets/img/sponsors-jetbrains.png" />
|
||||
</div>
|
||||
[](https://depot.dev?utm_source=Mealie)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,9 @@ env:
|
||||
SMTP_HOST: localhost
|
||||
SMTP_PORT: 1025
|
||||
SMTP_FROM_NAME: MealieDev
|
||||
SMTP_FROM_EMAIL: mealie@example.com
|
||||
SMTP_AUTH_STRATEGY: NONE
|
||||
BASE_URL: http://localhost:3000
|
||||
LANG: en-US
|
||||
|
||||
# loads .env file if it exists
|
||||
@@ -108,7 +110,7 @@ tasks:
|
||||
py:lint:
|
||||
desc: runs python linter
|
||||
cmds:
|
||||
- poetry run ruff mealie
|
||||
- poetry run ruff check mealie
|
||||
|
||||
py:check:
|
||||
desc: runs all linters, type checkers, and formatters
|
||||
|
||||
@@ -9,7 +9,7 @@ Create Date: 2023-21-02 22:03:19.837244
|
||||
from uuid import uuid4
|
||||
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.orm.session import Session
|
||||
from sqlalchemy import orm
|
||||
|
||||
import mealie.db.migration_types
|
||||
from alembic import op
|
||||
@@ -23,8 +23,10 @@ branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def populate_shopping_lists_multi_purpose_labels(shopping_lists_multi_purpose_labels_table: sa.Table, session: Session):
|
||||
shopping_lists = session.query(ShoppingList).all()
|
||||
def populate_shopping_lists_multi_purpose_labels(
|
||||
shopping_lists_multi_purpose_labels_table: sa.Table, session: orm.Session
|
||||
):
|
||||
shopping_lists = session.query(ShoppingList).options(orm.load_only(ShoppingList.id, ShoppingList.group_id)).all()
|
||||
|
||||
shopping_lists_labels_data: list[dict] = []
|
||||
for shopping_list in shopping_lists:
|
||||
@@ -60,7 +62,7 @@ def upgrade():
|
||||
)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
session = Session(bind=op.get_bind())
|
||||
session = orm.Session(bind=op.get_bind())
|
||||
populate_shopping_lists_multi_purpose_labels(shopping_lists_multi_purpose_labels_table, session)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
"""added user to shopping list
|
||||
|
||||
Revision ID: 2298bb460ffd
|
||||
Revises: ba1e4a6cfe99
|
||||
Create Date: 2024-02-23 16:15:07.115641
|
||||
|
||||
"""
|
||||
|
||||
from uuid import UUID
|
||||
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
|
||||
import mealie.db.migration_types
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "2298bb460ffd"
|
||||
down_revision = "ba1e4a6cfe99"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def is_postgres():
|
||||
return op.get_context().dialect.name == "postgresql"
|
||||
|
||||
|
||||
def find_user_id_for_group(group_id: UUID):
|
||||
bind = op.get_bind()
|
||||
session = orm.Session(bind=bind)
|
||||
|
||||
if is_postgres():
|
||||
stmt = "SELECT id FROM users WHERE group_id=:group_id AND admin = TRUE LIMIT 1"
|
||||
else:
|
||||
stmt = "SELECT id FROM users WHERE group_id=:group_id AND admin = 1 LIMIT 1"
|
||||
|
||||
with session:
|
||||
try:
|
||||
# try to find an admin user
|
||||
user_id = session.execute(sa.text(stmt).bindparams(group_id=group_id)).scalar_one()
|
||||
except orm.exc.NoResultFound:
|
||||
# fallback to any user
|
||||
user_id = session.execute(
|
||||
sa.text("SELECT id FROM users WHERE group_id=:group_id LIMIT 1").bindparams(group_id=group_id)
|
||||
).scalar_one()
|
||||
return user_id
|
||||
|
||||
|
||||
def populate_shopping_list_users():
|
||||
bind = op.get_bind()
|
||||
session = orm.Session(bind=bind)
|
||||
|
||||
with session:
|
||||
list_ids_and_group_ids = session.execute(sa.text("SELECT id, group_id FROM shopping_lists")).all()
|
||||
for list_id, group_id in list_ids_and_group_ids:
|
||||
user_id = find_user_id_for_group(group_id)
|
||||
session.execute(
|
||||
sa.text(f"UPDATE shopping_lists SET user_id=:user_id WHERE id=:id").bindparams(
|
||||
user_id=user_id, id=list_id
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
with op.batch_alter_table("shopping_lists") as batch_op:
|
||||
# allow nulls during migration
|
||||
batch_op.add_column(sa.Column("user_id", mealie.db.migration_types.GUID(), nullable=True))
|
||||
batch_op.create_index(op.f("ix_shopping_lists_user_id"), ["user_id"], unique=False)
|
||||
batch_op.create_foreign_key("fk_user_shopping_lists", "users", ["user_id"], ["id"])
|
||||
# ### end Alembic commands ###
|
||||
|
||||
populate_shopping_list_users()
|
||||
|
||||
# forbid nulls after migration
|
||||
with op.batch_alter_table("shopping_lists") as batch_op:
|
||||
batch_op.alter_column("user_id", nullable=False)
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_constraint(None, "shopping_lists", type_="foreignkey")
|
||||
op.drop_index(op.f("ix_shopping_lists_user_id"), table_name="shopping_lists")
|
||||
op.drop_column("shopping_lists", "user_id")
|
||||
# ### end Alembic commands ###
|
||||
@@ -3,8 +3,8 @@ from pathlib import Path
|
||||
|
||||
from fastapi import FastAPI
|
||||
from jinja2 import Template
|
||||
from pydantic import BaseModel
|
||||
from utils import PROJECT_DIR, CodeTemplates, HTTPRequest, RouteObject
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
from utils import PROJECT_DIR, CodeTemplates, HTTPRequest, RouteObject, RequestType
|
||||
|
||||
CWD = Path(__file__).parent
|
||||
|
||||
@@ -12,23 +12,25 @@ OUTFILE = PROJECT_DIR / "tests" / "utils" / "api_routes" / "__init__.py"
|
||||
|
||||
|
||||
class PathObject(BaseModel):
|
||||
model_config = ConfigDict(arbitrary_types_allowed=True)
|
||||
route_object: RouteObject
|
||||
http_verbs: list[HTTPRequest]
|
||||
|
||||
class Config:
|
||||
arbitrary_types_allowed = True
|
||||
|
||||
|
||||
def get_path_objects(app: FastAPI):
|
||||
paths = []
|
||||
|
||||
for key, value in app.openapi().items():
|
||||
if key == "paths":
|
||||
for key, value in value.items():
|
||||
for key, value2 in value.items():
|
||||
verbs = []
|
||||
for k, v in value2.items():
|
||||
verbs.append(HTTPRequest(request_type=k, **v))
|
||||
|
||||
paths.append(
|
||||
PathObject(
|
||||
route_object=RouteObject(key),
|
||||
http_verbs=[HTTPRequest(request_type=k, **v) for k, v in value.items()],
|
||||
http_verbs=verbs,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ from pathlib import Path
|
||||
import dotenv
|
||||
import requests
|
||||
from jinja2 import Template
|
||||
from pydantic import Extra
|
||||
from pydantic import ConfigDict
|
||||
from requests import Response
|
||||
from utils import CodeDest, CodeKeys, inject_inline, log
|
||||
|
||||
@@ -56,7 +56,7 @@ LOCALE_DATA: dict[str, LocaleData] = {
|
||||
"zh-TW": LocaleData(name="繁體中文 (Chinese traditional)"),
|
||||
}
|
||||
|
||||
LOCALE_TEMPLATE = """// This Code is auto generated by gen_global_components.py
|
||||
LOCALE_TEMPLATE = """// This Code is auto generated by gen_ts_locales.py
|
||||
export const LOCALES = [{% for locale in locales %}
|
||||
{
|
||||
name: "{{ locale.name }}",
|
||||
@@ -70,6 +70,8 @@ export const LOCALES = [{% for locale in locales %}
|
||||
|
||||
|
||||
class TargetLanguage(MealieModel):
|
||||
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
||||
|
||||
id: str
|
||||
name: str
|
||||
locale: str
|
||||
@@ -78,10 +80,6 @@ class TargetLanguage(MealieModel):
|
||||
twoLettersCode: str
|
||||
progress: float = 0.0
|
||||
|
||||
class Config:
|
||||
extra = Extra.allow
|
||||
allow_population_by_field_name = True
|
||||
|
||||
|
||||
class CrowdinApi:
|
||||
project_name = "Mealie"
|
||||
@@ -152,6 +150,7 @@ PROJECT_DIR = Path(__file__).parent.parent.parent
|
||||
datetime_dir = PROJECT_DIR / "frontend" / "lang" / "dateTimeFormats"
|
||||
locales_dir = PROJECT_DIR / "frontend" / "lang" / "messages"
|
||||
nuxt_config = PROJECT_DIR / "frontend" / "nuxt.config.js"
|
||||
reg_valid = PROJECT_DIR / "mealie" / "schema" / "_mealie" / "validators.py"
|
||||
|
||||
"""
|
||||
This snippet walks the message and dat locales directories and generates the import information
|
||||
@@ -175,6 +174,19 @@ def inject_nuxt_values():
|
||||
inject_inline(nuxt_config, CodeKeys.nuxt_local_dates, all_date_locales)
|
||||
|
||||
|
||||
def inject_registration_validation_values():
|
||||
all_langs = []
|
||||
for match in locales_dir.glob("*.json"):
|
||||
lang_string = f'"{match.stem}",'
|
||||
all_langs.append(lang_string)
|
||||
|
||||
# sort
|
||||
all_langs.sort()
|
||||
|
||||
log.debug(f"injecting locales into user registration validation -> {reg_valid}")
|
||||
inject_inline(reg_valid, CodeKeys.nuxt_local_messages, all_langs)
|
||||
|
||||
|
||||
def generate_locales_ts_file():
|
||||
api = CrowdinApi("")
|
||||
models = api.get_languages()
|
||||
@@ -193,6 +205,7 @@ def main():
|
||||
|
||||
generate_locales_ts_file()
|
||||
inject_nuxt_values()
|
||||
inject_registration_validation_values()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -6,7 +6,7 @@ from utils import log
|
||||
|
||||
# ============================================================
|
||||
|
||||
template = """// This Code is auto generated by gen_global_components.py
|
||||
template = """// This Code is auto generated by gen_ts_types.py
|
||||
{% for name in global %}import {{ name }} from "@/components/global/{{ name }}.vue";
|
||||
{% endfor %}{% for name in layout %}import {{ name }} from "@/components/layout/{{ name }}.vue";
|
||||
{% endfor %}
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
import re
|
||||
from enum import Enum
|
||||
from typing import Optional
|
||||
|
||||
from humps import camelize
|
||||
from pydantic import BaseModel, Extra, Field
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
from slugify import slugify
|
||||
|
||||
|
||||
@@ -34,33 +33,30 @@ class ParameterIn(str, Enum):
|
||||
|
||||
|
||||
class RouterParameter(BaseModel):
|
||||
model_config = ConfigDict(extra="allow")
|
||||
|
||||
required: bool = False
|
||||
name: str
|
||||
location: ParameterIn = Field(..., alias="in")
|
||||
|
||||
class Config:
|
||||
extra = Extra.allow
|
||||
|
||||
|
||||
class RequestBody(BaseModel):
|
||||
required: bool = False
|
||||
model_config = ConfigDict(extra="allow")
|
||||
|
||||
class Config:
|
||||
extra = Extra.allow
|
||||
required: bool = False
|
||||
|
||||
|
||||
class HTTPRequest(BaseModel):
|
||||
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
||||
|
||||
request_type: RequestType
|
||||
description: str = ""
|
||||
summary: str
|
||||
requestBody: Optional[RequestBody]
|
||||
request_body: RequestBody | None = None
|
||||
|
||||
parameters: list[RouterParameter] = []
|
||||
tags: list[str] | None = []
|
||||
|
||||
class Config:
|
||||
extra = Extra.allow
|
||||
|
||||
def list_as_js_object_string(self, parameters, braces=True):
|
||||
if len(parameters) == 0:
|
||||
return ""
|
||||
@@ -71,11 +67,11 @@ class HTTPRequest(BaseModel):
|
||||
return ", ".join(parameters)
|
||||
|
||||
def payload(self):
|
||||
return "payload" if self.requestBody else ""
|
||||
return "payload" if self.request_body else ""
|
||||
|
||||
def function_args(self):
|
||||
all_params = [p.name for p in self.parameters]
|
||||
if self.requestBody:
|
||||
if self.request_body:
|
||||
all_params.append("payload")
|
||||
return self.list_as_js_object_string(all_params)
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ class CodeSlicer:
|
||||
self._next_line += 1
|
||||
|
||||
|
||||
def get_indentation_of_string(line: str, comment_char: str = "//") -> str:
|
||||
def get_indentation_of_string(line: str, comment_char: str = "//|#") -> str:
|
||||
return re.sub(rf"{comment_char}.*", "", line).removesuffix("\n")
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 88 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 230 90" width="2500" height="978"><path d="M93.8 27.8l5.8-1.4v28c0 3.1.9 4.9 2.7 5.5-.9 1.7-2.4 2.6-4.6 2.6-2.6 0-4-1.8-4-5.5V27.8zM108.4 62V41.8h-3.2V37h9.1v25h-5.9zm3-34.6c.9 0 1.7.3 2.4 1s1 1.5 1 2.4c0 .9-.3 1.7-1 2.4s-1.5 1-2.4 1c-.9 0-1.7-.3-2.4-1s-1-1.5-1-2.4c0-.9.3-1.7 1-2.4s1.5-1 2.4-1zM137.1 62V47.6c0-2.1-.4-3.7-1.2-4.6-.8-1-2.1-1.5-4-1.5-.9 0-1.8.2-2.7.7-1 .5-1.7 1.1-2.3 1.8v18h-5.8V37.1h4.2l1.1 2.3c1.6-1.9 3.9-2.8 7-2.8 3 0 5.3.9 7 2.7 1.7 1.8 2.6 4.3 2.6 7.4V62h-5.9zM147.5 49.5c0-3.8 1.1-6.9 3.3-9.3 2.2-2.4 5.1-3.6 8.7-3.6 3.8 0 6.7 1.1 8.8 3.4 2.1 2.3 3.1 5.4 3.1 9.4s-1.1 7.1-3.2 9.5c-2.1 2.3-5 3.5-8.8 3.5-3.8 0-6.7-1.2-8.8-3.5-2-2.4-3.1-5.5-3.1-9.4zm6.1 0c0 5.5 2 8.2 5.9 8.2 1.8 0 3.2-.7 4.3-2.1 1.1-1.4 1.6-3.5 1.6-6.1 0-5.4-2-8.1-5.9-8.1-1.8 0-3.3.7-4.3 2.1-1.1 1.4-1.6 3.4-1.6 6zM192.1 62v-1.5c-.5.5-1.3 1-2.4 1.4-1.1.4-2.3.6-3.6.6-3.5 0-6.2-1.1-8.2-3.3-2-2.2-3-5.3-3-9.2 0-3.9 1.1-7.1 3.4-9.6s5.1-3.7 8.6-3.7c1.9 0 3.6.4 5.2 1.2v-10l5.8-1.4V62h-5.8zm0-19c-1.2-1-2.5-1.5-3.9-1.5-2.3 0-4.1.7-5.4 2.1-1.3 1.4-1.9 3.5-1.9 6.1 0 5.2 2.5 7.8 7.5 7.8.6 0 1.2-.2 2.1-.5.8-.3 1.3-.7 1.6-1V43zM226 51.3h-17.8c.1 2 .8 3.5 2 4.6 1.3 1.1 2.9 1.7 5.1 1.7 2.6 0 4.7-.7 6-2.1l2.3 4.4c-2 1.7-5.1 2.5-9.2 2.5-3.8 0-6.8-1.1-9-3.3-2.2-2.2-3.3-5.3-3.3-9.3 0-3.9 1.2-7.1 3.6-9.5 2.4-2.4 5.3-3.6 8.7-3.6 3.6 0 6.5 1.1 8.7 3.2 2.2 2.2 3.3 4.9 3.3 8.2.1.7-.1 1.7-.4 3.2zm-17.6-4.4h12.2c-.4-3.6-2.4-5.5-6-5.5-3.3.1-5.4 1.9-6.2 5.5z"/><g><path fill="#004712" d="M65.9 47.4l-1 11.5-3.3-2.3.4-5.8v-.1-.1l-.1-.1-.1-.1-7.1-4.7.1-5.1 11.1 6.8zM48.5 59.9L43.4 56v.9c0 .2-.1.4-.2.5L39.4 60l4.2 3.4.1.1v.2l.2 4 4.7 3.9-.1-11.7zm-32.1 5l2.4 11.5 9.9 10.5L27 75.3 16.4 64.9zm9.3 1.7l-2.4-16.1-12-10 3.2 15.6 11.2 10.5zm-3.8-26l-3.3-22.8L4.8 9.2l4.5 21.5 12.6 9.9z"/><path fill="#00B259" d="M75.7 41.2l-1.5 10.9-8.2 6.6 1-11.2 8.7-6.3zM49.6 59.9l.1 11.8 10.5-8.4.7-11.5-11.3 8.1zm-6.8 4.8L28 75.3l1.8 12.2 13.4-10.7-.4-12.1zm-.4-8l-.7-16-17.3 9.9 2.4 16.6 15.6-10.5zm-1.1-25.3l-.9-21.6-20.8 8L23 41l18.3-9.6z"/><path d="M76.9 40c0-.1 0-.1 0 0v-.2s0-.1-.1-.1c0 0-.1 0-.1-.1l-12-6.7c-.2-.1-.4-.1-.5 0L54 39.1h-.1v.6l-.1 5.4-4.1-2.7c-.2-.1-.4-.1-.6 0L43 45.8l-.3-6v-.1-.1-.1-.1-.1h-.1l-6.2-4.1 5.8-3c.2-.1.3-.3.3-.5L41.4 9v-.1s0-.1-.1-.1c0 0 0-.1-.1-.1L25.5 1.1c-.1-.1-.2-.1-.3-.1L3.9 7.6s-.1 0-.1.1c0 0-.1 0-.1.1v.6l4.7 22.9c0 .1.1.2.2.3l6.4 5-4.7 2.2s-.1 0-.1.1c0 0 0 .1-.1.1v.2l3.6 17.2c0 .1.1.2.2.3l4.5 4.2-3 1.8-.1.1s0 .1-.1.1V63.2L18 76.5c0 .1.1.2.1.3l10.9 12h.1s.1 0 .1.1h.5l14.4-11.5c.1-.1.2-.3.2-.4l-.3-7.9 4.8 4s.1 0 .1.1h.5L61 64c.1-.1.2-.2.2-.4l.4-5.8 3.5 2.4h.4s.1 0 .1-.1l9.4-7.5c.1-.1.2-.2.2-.3L76.9 40c0 .1 0 .1 0 0zM66 58.7l1-11.2 8.8-6.3-1.5 10.9-8.3 6.6zm-4.4-2.1l.4-5.8v-.1-.1l-.1-.1-.1-.1-7.1-4.7.1-5.1 11.1 6.9-1 11.5-3.3-2.4zm-1.5 6.7l-10.5 8.4-.1-11.8 11.3-8.1-.7 11.5zM43.3 76.8L29.8 87.5 28 75.3l14.7-10.5.6 12zm-24.6-.4l-2.4-11.5L27 75.3l1.7 11.6-10-10.5zm-.2-58.6l3.3 22.8-12.5-9.9L4.8 9.2l13.7 8.6zm21.9-8l.9 21.6L23 41l-3.4-23.2 20.8-8zm2 46.9L26.8 67.1l-2.4-16.6 17.3-9.9.7 16.1zm-19.1-6.1l2.4 16.1-11.2-10.6-3.2-15.6 12 10.1zm20.5 13.1v-.1-.1l-.1-.1-4.2-3.4 3.8-2.6c.2-.1.2-.3.2-.5V56l5.1 3.9.1 11.8-4.7-3.9-.2-4.1z"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 3.1 KiB |
@@ -5,8 +5,8 @@
|
||||
## We Develop with Github
|
||||
We use github to host code, to track issues and feature requests, as well as accept pull requests.
|
||||
|
||||
## We Use [Github Flow](https://guides.github.com/introduction/flow/index.html), So All Code Changes Happen Through Pull Requests
|
||||
Pull requests are the best way to propose changes to the codebase (we use [Github Flow](https://guides.github.com/introduction/flow/index.html)). We actively welcome your pull requests:
|
||||
## We Use [Github Flow](https://docs.github.com/en/get-started/using-github/github-flow), So All Code Changes Happen Through Pull Requests
|
||||
Pull requests are the best way to propose changes to the codebase (we use [Github Flow](https://docs.github.com/en/get-started/using-github/github-flow)). We actively welcome your pull requests:
|
||||
|
||||
1. Fork the repo and create your branch from `mealie-next`.
|
||||
2. Checkout the Discord, the PRs page, or the Projects page to get an idea of what's already being worked on.
|
||||
@@ -28,8 +28,8 @@ We use GitHub issues to track public bugs. Report a bug by [opening a new issue]
|
||||
|
||||
- A quick summary and/or background
|
||||
- Steps to reproduce
|
||||
- Be specific!
|
||||
- Give sample code if you can. [This stackoverflow question](http://stackoverflow.com/q/12488905/180626) includes sample code that *anyone* with a base R setup can run to reproduce what I was seeing
|
||||
* Be specific!
|
||||
* Give sample code if you can. [This stackoverflow question](http://stackoverflow.com/q/12488905/180626) includes sample code that *anyone* with a base R setup can run to reproduce what I was seeing
|
||||
- What you expected would happen
|
||||
- What actually happens
|
||||
- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)
|
||||
@@ -41,4 +41,4 @@ People *love* thorough bug reports. I'm not even kidding.
|
||||
By contributing, you agree that your contributions will be licensed under its AGPL License.
|
||||
|
||||
## References
|
||||
This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebook/draft-js/blob/a9316a723f9e918afde44dea68b5f9f39b7d9b00/CONTRIBUTING.md)
|
||||
This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebookarchive/draft-js/blob/main/CONTRIBUTING.md)
|
||||
|
||||
@@ -54,8 +54,8 @@ Changing the webworker settings may cause unforeseen memory leak issues with Mea
|
||||
| ---------------- | :-----: | --------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| WEB_GUNICORN | false | Enables Gunicorn to manage Uvicorn web for multiple works |
|
||||
| WORKERS_PER_CORE | 1 | Set the number of workers to the number of CPU cores multiplied by this value (Value \* CPUs). More info [here][workers_per_core] |
|
||||
| MAX_WORKERS | 1 | Set the maximum number of workers to use. Default is not set meaning unlimited. More info [here][max_workers] |
|
||||
| WEB_CONCURRENCY | 1 | Override the automatic definition of number of workers. More info [here][web_concurrency] |
|
||||
| MAX_WORKERS | None | Set the maximum number of workers to use. Default is not set meaning unlimited. More info [here][max_workers] |
|
||||
| WEB_CONCURRENCY | 2 | Override the automatic definition of number of workers. More info [here][web_concurrency] |
|
||||
|
||||
### LDAP
|
||||
|
||||
@@ -95,3 +95,8 @@ Setting the following environmental variables will change the theme of the front
|
||||
| THEME_DARK_INFO | #1976D2 | Dark Theme Config Variable |
|
||||
| THEME_DARK_WARNING | #FF6D00 | Dark Theme Config Variable |
|
||||
| THEME_DARK_ERROR | #EF5350 | Dark Theme Config Variable |
|
||||
|
||||
|
||||
[workers_per_core]: https://github.com/tiangolo/uvicorn-gunicorn-docker/blob/2daa3e3873c837d5781feb4ff6a40a89f791f81b/README.md#workers_per_core
|
||||
[max_workers]: https://github.com/tiangolo/uvicorn-gunicorn-docker/blob/2daa3e3873c837d5781feb4ff6a40a89f791f81b/README.md#max_workers
|
||||
[web_concurrency]: https://github.com/tiangolo/uvicorn-gunicorn-docker/blob/2daa3e3873c837d5781feb4ff6a40a89f791f81b/README.md#web_concurrency
|
||||
|
||||
@@ -9,7 +9,7 @@ PostgreSQL might be considered if you need to support many concurrent users. In
|
||||
version: "3.7"
|
||||
services:
|
||||
mealie:
|
||||
image: ghcr.io/mealie-recipes/mealie:v1.1.0 # (3)
|
||||
image: ghcr.io/mealie-recipes/mealie:v1.3.1 # (3)
|
||||
container_name: mealie
|
||||
ports:
|
||||
- "9925:9000" # (1)
|
||||
|
||||
@@ -13,7 +13,7 @@ SQLite is a popular, open source, self-contained, zero-configuration database th
|
||||
version: "3.7"
|
||||
services:
|
||||
mealie:
|
||||
image: ghcr.io/mealie-recipes/mealie:v1.1.0 # (3)
|
||||
image: ghcr.io/mealie-recipes/mealie:v1.3.1 # (3)
|
||||
container_name: mealie
|
||||
ports:
|
||||
- "9925:9000" # (1)
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -107,7 +107,7 @@ export default defineComponent({
|
||||
})
|
||||
|
||||
async function getShoppingLists() {
|
||||
const { data } = await api.shopping.lists.getAll();
|
||||
const { data } = await api.shopping.lists.getAll(1, -1, { orderBy: "name", orderDirection: "asc" });
|
||||
if (data) {
|
||||
shoppingLists.value = data.items ?? [];
|
||||
}
|
||||
|
||||
@@ -3,8 +3,9 @@
|
||||
<v-hover v-slot="{ hover }" :open-delay="50">
|
||||
<v-card
|
||||
:class="{ 'on-hover': hover }"
|
||||
:style="{ cursor }"
|
||||
:elevation="hover ? 12 : 2"
|
||||
:to="route ? recipeRoute : ''"
|
||||
:to="recipeRoute"
|
||||
:min-height="imageHeight + 75"
|
||||
@click="$emit('click')"
|
||||
>
|
||||
@@ -33,7 +34,7 @@
|
||||
</v-card-title>
|
||||
|
||||
<slot name="actions">
|
||||
<v-card-actions class="px-1">
|
||||
<v-card-actions v-if="showRecipeContent" class="px-1">
|
||||
<RecipeFavoriteBadge v-if="isOwnGroup" class="absolute" :slug="slug" show-always />
|
||||
|
||||
<RecipeRating class="pb-1" :value="rating" :name="name" :slug="slug" :small="true" />
|
||||
@@ -101,10 +102,6 @@ export default defineComponent({
|
||||
required: false,
|
||||
default: "abc123",
|
||||
},
|
||||
route: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
tags: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
@@ -123,14 +120,18 @@ export default defineComponent({
|
||||
const { isOwnGroup } = useLoggedInState();
|
||||
|
||||
const route = useRoute();
|
||||
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "")
|
||||
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "");
|
||||
const showRecipeContent = computed(() => props.recipeId && props.slug);
|
||||
const recipeRoute = computed<string>(() => {
|
||||
return `/g/${groupSlug.value}/r/${props.slug}`;
|
||||
return showRecipeContent.value ? `/g/${groupSlug.value}/r/${props.slug}` : "";
|
||||
});
|
||||
const cursor = computed(() => showRecipeContent.value ? "pointer" : "auto");
|
||||
|
||||
return {
|
||||
isOwnGroup,
|
||||
recipeRoute,
|
||||
showRecipeContent,
|
||||
cursor,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<v-card
|
||||
:ripple="false"
|
||||
:class="isFlat ? 'mx-auto flat' : 'mx-auto'"
|
||||
:style="{ cursor }"
|
||||
hover
|
||||
:to="$listeners.selected ? undefined : recipeRoute"
|
||||
@click="$emit('selected')"
|
||||
@@ -37,8 +38,9 @@
|
||||
</v-list-item-subtitle>
|
||||
<div class="d-flex flex-wrap justify-end align-center">
|
||||
<slot name="actions">
|
||||
<RecipeFavoriteBadge v-if="isOwnGroup" :slug="slug" show-always />
|
||||
<RecipeFavoriteBadge v-if="isOwnGroup && showRecipeContent" :slug="slug" show-always />
|
||||
<v-rating
|
||||
v-if="showRecipeContent"
|
||||
color="secondary"
|
||||
:class="isOwnGroup ? 'ml-auto' : 'ml-auto pb-2'"
|
||||
background-color="secondary lighten-3"
|
||||
@@ -52,7 +54,7 @@
|
||||
<!-- If we're not logged-in, no items display, so we hide this menu -->
|
||||
<!-- We also add padding to the v-rating above to compensate -->
|
||||
<RecipeContextMenu
|
||||
v-if="isOwnGroup"
|
||||
v-if="isOwnGroup && showRecipeContent"
|
||||
:slug="slug"
|
||||
:menu-icon="$globals.icons.dotsHorizontal"
|
||||
:name="name"
|
||||
@@ -113,10 +115,6 @@ export default defineComponent({
|
||||
required: false,
|
||||
default: "abc123",
|
||||
},
|
||||
route: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
recipeId: {
|
||||
type: String,
|
||||
required: true,
|
||||
@@ -135,14 +133,19 @@ export default defineComponent({
|
||||
const { isOwnGroup } = useLoggedInState();
|
||||
|
||||
const route = useRoute();
|
||||
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "")
|
||||
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "");
|
||||
const showRecipeContent = computed(() => props.recipeId && props.slug);
|
||||
const recipeRoute = computed<string>(() => {
|
||||
return `/g/${groupSlug.value}/r/${props.slug}`;
|
||||
return showRecipeContent.value ? `/g/${groupSlug.value}/r/${props.slug}` : "";
|
||||
});
|
||||
const cursor = computed(() => showRecipeContent.value ? "pointer" : "auto");
|
||||
|
||||
|
||||
return {
|
||||
isOwnGroup,
|
||||
recipeRoute,
|
||||
showRecipeContent,
|
||||
cursor,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -321,7 +321,7 @@ export default defineComponent({
|
||||
const recipeRefWithScale = computed(() => recipeRef.value ? { scale: props.recipeScale, ...recipeRef.value } : undefined);
|
||||
|
||||
async function getShoppingLists() {
|
||||
const { data } = await api.shopping.lists.getAll();
|
||||
const { data } = await api.shopping.lists.getAll(1, -1, { orderBy: "name", orderDirection: "asc" });
|
||||
if (data) {
|
||||
shoppingLists.value = data.items ?? [];
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<BaseDialog v-if="shoppingListDialog" v-model="dialog" :title="$t('recipe.add-to-list')" :icon="$globals.icons.cartCheck">
|
||||
<v-card-text>
|
||||
<v-card
|
||||
v-for="list in shoppingLists"
|
||||
v-for="list in shoppingListChoices"
|
||||
:key="list.id"
|
||||
hover
|
||||
class="my-2 left-border"
|
||||
@@ -14,6 +14,18 @@
|
||||
</v-card-title>
|
||||
</v-card>
|
||||
</v-card-text>
|
||||
<template #card-actions>
|
||||
<v-btn
|
||||
text
|
||||
color="grey"
|
||||
@click="dialog = false"
|
||||
>
|
||||
{{ $t("general.cancel") }}
|
||||
</v-btn>
|
||||
<div class="d-flex justify-end" style="width: 100%;">
|
||||
<v-checkbox v-model="preferences.viewAllLists" hide-details :label="$tc('general.show-all')" class="my-auto mr-4" />
|
||||
</div>
|
||||
</template>
|
||||
</BaseDialog>
|
||||
<BaseDialog
|
||||
v-if="shoppingListIngredientDialog"
|
||||
@@ -120,6 +132,7 @@ import { toRefs } from "@vueuse/core";
|
||||
import RecipeIngredientListItem from "./RecipeIngredientListItem.vue";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { alert } from "~/composables/use-toast";
|
||||
import { useShoppingListPreferences } from "~/composables/use-users/preferences";
|
||||
import { ShoppingListSummary } from "~/lib/api/types/group";
|
||||
import { Recipe, RecipeIngredient } from "~/lib/api/types/recipe";
|
||||
|
||||
@@ -164,8 +177,9 @@ export default defineComponent({
|
||||
},
|
||||
},
|
||||
setup(props, context) {
|
||||
const { i18n } = useContext();
|
||||
const { $auth, i18n } = useContext();
|
||||
const api = useUserApi();
|
||||
const preferences = useShoppingListPreferences();
|
||||
|
||||
// v-model support
|
||||
const dialog = computed({
|
||||
@@ -183,6 +197,10 @@ export default defineComponent({
|
||||
shoppingListIngredientDialog: false,
|
||||
});
|
||||
|
||||
const shoppingListChoices = computed(() => {
|
||||
return props.shoppingLists.filter((list) => preferences.value.viewAllLists || list.userId === $auth.user?.id);
|
||||
});
|
||||
|
||||
const recipeIngredientSections = ref<ShoppingListRecipeIngredientSection[]>([]);
|
||||
const selectedShoppingList = ref<ShoppingListSummary | null>(null);
|
||||
|
||||
@@ -334,6 +352,8 @@ export default defineComponent({
|
||||
|
||||
return {
|
||||
dialog,
|
||||
preferences,
|
||||
shoppingListChoices,
|
||||
...toRefs(state),
|
||||
addRecipesToList,
|
||||
bulkCheckIngredients,
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
:rating="recipe.rating"
|
||||
:image="recipe.image"
|
||||
:recipe-id="recipe.id"
|
||||
:route="true"
|
||||
v-on="$listeners.selected ? { selected: () => handleSelect(recipe) } : {}"
|
||||
/>
|
||||
</v-card>
|
||||
|
||||
@@ -132,8 +132,7 @@ export default defineComponent({
|
||||
const { $auth, i18n } = useContext();
|
||||
const domMadeThisForm = ref<VForm>();
|
||||
const newTimelineEvent = ref<RecipeTimelineEventIn>({
|
||||
// @ts-expect-error - TS doesn't like the $auth global user attribute
|
||||
subject: i18n.t("recipe.user-made-this", { user: $auth.user.fullName } as string),
|
||||
subject: "",
|
||||
eventType: "comment",
|
||||
eventMessage: "",
|
||||
timestamp: undefined,
|
||||
@@ -178,6 +177,8 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
newTimelineEvent.value.recipeId = props.recipe.id
|
||||
// @ts-expect-error - TS doesn't like the $auth global user attribute
|
||||
newTimelineEvent.value.subject = i18n.t("recipe.user-made-this", { user: $auth.user.fullName })
|
||||
|
||||
// the user only selects the date, so we set the time to end of day local time
|
||||
// we choose the end of day so it always comes after "new recipe" events
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
</div>
|
||||
|
||||
<div v-if="edit" class="d-flex justify-end">
|
||||
<BaseButton class="ml-auto my-2" @click="addNote"> {{ $t("general.new") }}</BaseButton>
|
||||
<BaseButton class="ml-auto my-2" @click="addNote"> {{ $t("general.add") }}</BaseButton>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -19,11 +19,11 @@
|
||||
</div>
|
||||
</v-card-text>
|
||||
<v-list v-if="showViewer" dense class="mt-0 pt-0">
|
||||
<v-list-item v-for="(item, key, index) in labels" :key="index" style="min-height: 25px" dense>
|
||||
<v-list-item v-for="(item, key, index) in renderedList" :key="index" style="min-height: 25px" dense>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title class="pl-4 caption flex row">
|
||||
<div>{{ item.label }}</div>
|
||||
<div class="ml-auto mr-1">{{ value[key] }}</div>
|
||||
<div class="ml-auto mr-1">{{ item.value }}</div>
|
||||
<div>{{ item.suffix }}</div>
|
||||
</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
@@ -37,6 +37,14 @@
|
||||
import { computed, defineComponent, useContext } from "@nuxtjs/composition-api";
|
||||
import { Nutrition } from "~/lib/api/types/recipe";
|
||||
|
||||
type NutritionLabelType = {
|
||||
[key: string]: {
|
||||
label: string;
|
||||
suffix: string;
|
||||
value?: string;
|
||||
};
|
||||
};
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
value: {
|
||||
@@ -50,34 +58,34 @@ export default defineComponent({
|
||||
},
|
||||
setup(props, context) {
|
||||
const { i18n } = useContext();
|
||||
const labels = {
|
||||
const labels = <NutritionLabelType>{
|
||||
calories: {
|
||||
label: i18n.t("recipe.calories"),
|
||||
suffix: i18n.t("recipe.calories-suffix"),
|
||||
label: i18n.tc("recipe.calories"),
|
||||
suffix: i18n.tc("recipe.calories-suffix"),
|
||||
},
|
||||
fatContent: {
|
||||
label: i18n.t("recipe.fat-content"),
|
||||
suffix: i18n.t("recipe.grams"),
|
||||
label: i18n.tc("recipe.fat-content"),
|
||||
suffix: i18n.tc("recipe.grams"),
|
||||
},
|
||||
fiberContent: {
|
||||
label: i18n.t("recipe.fiber-content"),
|
||||
suffix: i18n.t("recipe.grams"),
|
||||
label: i18n.tc("recipe.fiber-content"),
|
||||
suffix: i18n.tc("recipe.grams"),
|
||||
},
|
||||
proteinContent: {
|
||||
label: i18n.t("recipe.protein-content"),
|
||||
suffix: i18n.t("recipe.grams"),
|
||||
label: i18n.tc("recipe.protein-content"),
|
||||
suffix: i18n.tc("recipe.grams"),
|
||||
},
|
||||
sodiumContent: {
|
||||
label: i18n.t("recipe.sodium-content"),
|
||||
suffix: i18n.t("recipe.milligrams"),
|
||||
label: i18n.tc("recipe.sodium-content"),
|
||||
suffix: i18n.tc("recipe.milligrams"),
|
||||
},
|
||||
sugarContent: {
|
||||
label: i18n.t("recipe.sugar-content"),
|
||||
suffix: i18n.t("recipe.grams"),
|
||||
label: i18n.tc("recipe.sugar-content"),
|
||||
suffix: i18n.tc("recipe.grams"),
|
||||
},
|
||||
carbohydrateContent: {
|
||||
label: i18n.t("recipe.carbohydrate-content"),
|
||||
suffix: i18n.t("recipe.grams"),
|
||||
label: i18n.tc("recipe.carbohydrate-content"),
|
||||
suffix: i18n.tc("recipe.grams"),
|
||||
},
|
||||
};
|
||||
const valueNotNull = computed(() => {
|
||||
@@ -96,11 +104,25 @@ export default defineComponent({
|
||||
context.emit("input", { ...props.value, [key]: event });
|
||||
}
|
||||
|
||||
// Build a new list that only contains nutritional information that has a value
|
||||
const renderedList = computed(() => {
|
||||
return Object.entries(labels).reduce((item: NutritionLabelType, [key, label]) => {
|
||||
if (props.value[key]?.trim()) {
|
||||
item[key] = {
|
||||
...label,
|
||||
value: props.value[key],
|
||||
};
|
||||
}
|
||||
return item;
|
||||
}, {});
|
||||
});
|
||||
|
||||
return {
|
||||
labels,
|
||||
valueNotNull,
|
||||
showViewer,
|
||||
updateValue,
|
||||
renderedList,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
/>
|
||||
<div v-if="isEditForm" class="d-flex">
|
||||
<RecipeDialogBulkAdd class="ml-auto my-2 mr-1" @bulk-data="addStep" />
|
||||
<BaseButton class="my-2" @click="addStep()"> {{ $t("general.new") }}</BaseButton>
|
||||
<BaseButton class="my-2" @click="addStep()"> {{ $t("general.add") }}</BaseButton>
|
||||
</div>
|
||||
<div v-if="!$vuetify.breakpoint.mdAndUp">
|
||||
<RecipePageOrganizers :recipe="recipe" />
|
||||
@@ -112,6 +112,7 @@ import { useUserApi } from "~/composables/api";
|
||||
import { uuid4, deepCopy } from "~/composables/use-utils";
|
||||
import RecipeDialogBulkAdd from "~/components/Domain/Recipe/RecipeDialogBulkAdd.vue";
|
||||
import RecipeNotes from "~/components/Domain/Recipe/RecipeNotes.vue";
|
||||
import { useNavigationWarning } from "~/composables/use-navigation-warning";
|
||||
|
||||
const EDITOR_OPTIONS = {
|
||||
mode: "code",
|
||||
@@ -151,6 +152,7 @@ export default defineComponent({
|
||||
const api = useUserApi();
|
||||
const { pageMode, editMode, setMode, isEditForm, isEditJSON, isCookMode, isEditMode, toggleCookMode } =
|
||||
usePageState(props.recipe.slug);
|
||||
const { deactivateNavigationWarning } = useNavigationWarning();
|
||||
|
||||
/** =============================================================
|
||||
* Recipe Snapshot on Mount
|
||||
@@ -175,6 +177,7 @@ export default defineComponent({
|
||||
await api.recipes.updateOne(props.recipe.slug, props.recipe);
|
||||
}
|
||||
}
|
||||
deactivateNavigationWarning();
|
||||
});
|
||||
|
||||
/** =============================================================
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
<span>{{ parserToolTip }}</span>
|
||||
</v-tooltip>
|
||||
<RecipeDialogBulkAdd class="mx-1 mb-1" @bulk-data="addIngredient" />
|
||||
<BaseButton class="mb-1" @click="addIngredient" > {{ $t("general.new") }} </BaseButton>
|
||||
<BaseButton class="mb-1" @click="addIngredient" > {{ $t("general.add") }} </BaseButton>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -148,10 +148,6 @@
|
||||
text: $tc('recipe.link-ingredients'),
|
||||
event: 'link-ingredients',
|
||||
},
|
||||
{
|
||||
text: $tc('recipe.merge-above'),
|
||||
event: 'merge-above',
|
||||
},
|
||||
{
|
||||
text: $tc('recipe.upload-image'),
|
||||
event: 'upload-image'
|
||||
@@ -160,11 +156,26 @@
|
||||
icon: previewStates[index] ? $globals.icons.edit : $globals.icons.eye,
|
||||
text: previewStates[index] ? $tc('recipe.edit-markdown') : $tc('markdown-editor.preview-markdown-button-label'),
|
||||
event: 'preview-step',
|
||||
divider: true,
|
||||
},
|
||||
{
|
||||
text: $tc('recipe.merge-above'),
|
||||
event: 'merge-above',
|
||||
},
|
||||
{
|
||||
text: $tc('recipe.move-to-top'),
|
||||
event: 'move-to-top',
|
||||
},
|
||||
{
|
||||
text: $tc('recipe.move-to-bottom'),
|
||||
event: 'move-to-bottom',
|
||||
},
|
||||
],
|
||||
},
|
||||
]"
|
||||
@merge-above="mergeAbove(index - 1, index)"
|
||||
@move-to-top="moveTo('top', index)"
|
||||
@move-to-bottom="moveTo('bottom', index)"
|
||||
@toggle-section="toggleShowTitle(step.id)"
|
||||
@link-ingredients="openDialog(index, step.text, step.ingredientReferences)"
|
||||
@preview-step="togglePreviewState(index)"
|
||||
@@ -531,6 +542,14 @@ export default defineComponent({
|
||||
}
|
||||
}
|
||||
|
||||
function moveTo(dest: string, source: number) {
|
||||
if (dest === "top") {
|
||||
props.value.unshift(props.value.splice(source, 1)[0]);
|
||||
} else {
|
||||
props.value.push(props.value.splice(source, 1)[0]);
|
||||
}
|
||||
}
|
||||
|
||||
const previewStates = ref<boolean[]>([]);
|
||||
|
||||
function togglePreviewState(index: number) {
|
||||
@@ -646,6 +665,7 @@ export default defineComponent({
|
||||
getIngredientByRefId,
|
||||
showTitleEditor,
|
||||
mergeAbove,
|
||||
moveTo,
|
||||
openDialog,
|
||||
setIngredientIds,
|
||||
availableNextStep,
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
:label="$t('shopping-list.note')"
|
||||
rows="1"
|
||||
auto-grow
|
||||
@keypress="handleNoteKeyPress"
|
||||
></v-textarea>
|
||||
</div>
|
||||
<div class="d-flex align-end" style="gap: 20px">
|
||||
@@ -95,7 +96,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, computed } from "@nuxtjs/composition-api";
|
||||
import { defineComponent, computed, watch } from "@nuxtjs/composition-api";
|
||||
import { ShoppingListItemCreate, ShoppingListItemOut } from "~/lib/api/types/group";
|
||||
import { MultiPurposeLabelOut } from "~/lib/api/types/labels";
|
||||
import { IngredientFood, IngredientUnit } from "~/lib/api/types/recipe";
|
||||
@@ -128,9 +129,28 @@ export default defineComponent({
|
||||
context.emit("input", val);
|
||||
},
|
||||
});
|
||||
|
||||
watch(
|
||||
() => props.value.food,
|
||||
(newFood) => {
|
||||
// @ts-ignore our logic already assumes there's a label attribute, even if TS doesn't think there is
|
||||
listItem.value.label = newFood?.label || null;
|
||||
listItem.value.labelId = listItem.value.label?.id || null;
|
||||
}
|
||||
);
|
||||
|
||||
return {
|
||||
listItem,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
handleNoteKeyPress(event) {
|
||||
// Save on Enter
|
||||
if (!event.shiftKey && event.key === "Enter") {
|
||||
event.preventDefault();
|
||||
this.$emit("save");
|
||||
}
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -10,9 +10,12 @@
|
||||
</v-btn>
|
||||
</template>
|
||||
<v-list dense>
|
||||
<v-list-item v-for="(child, idx) in btn.children" :key="idx" dense @click="$emit(child.event)">
|
||||
<v-list-item-title>{{ child.text }}</v-list-item-title>
|
||||
</v-list-item>
|
||||
<template v-for="(child, idx) in btn.children">
|
||||
<v-list-item :key="idx" dense @click="$emit(child.event)">
|
||||
<v-list-item-title>{{ child.text }}</v-list-item-title>
|
||||
</v-list-item>
|
||||
<v-divider v-if="child.divider" :key="`divider-${idx}`" class="my-1"></v-divider>
|
||||
</template>
|
||||
</v-list>
|
||||
</v-menu>
|
||||
<v-tooltip
|
||||
@@ -55,6 +58,7 @@ export interface ButtonOption {
|
||||
event: string;
|
||||
children?: ButtonOption[];
|
||||
disabled?: boolean;
|
||||
divider?: boolean;
|
||||
}
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { computed, ComputedRef, ref, Ref, useContext } from "@nuxtjs/composition-api";
|
||||
import { UserOut } from "~/lib/api/types/user";
|
||||
import { useNavigationWarning } from "~/composables/use-navigation-warning";
|
||||
|
||||
export enum PageMode {
|
||||
EDIT = "EDIT",
|
||||
@@ -65,6 +66,8 @@ function pageRefs(slug: string) {
|
||||
}
|
||||
|
||||
function pageState({ slugRef, pageModeRef, editModeRef, imageKey }: PageRefs): PageState {
|
||||
const { activateNavigationWarning, deactivateNavigationWarning } = useNavigationWarning();
|
||||
|
||||
const toggleEditMode = () => {
|
||||
if (editModeRef.value === EditorMode.FORM) {
|
||||
editModeRef.value = EditorMode.JSON;
|
||||
@@ -88,8 +91,13 @@ function pageState({ slugRef, pageModeRef, editModeRef, imageKey }: PageRefs): P
|
||||
const setMode = (toMode: PageMode) => {
|
||||
const fromMode = pageModeRef.value;
|
||||
|
||||
if (fromMode === PageMode.EDIT && toMode === PageMode.VIEW) {
|
||||
setEditMode(EditorMode.FORM);
|
||||
if (fromMode === PageMode.EDIT) {
|
||||
if (toMode === PageMode.VIEW) {
|
||||
setEditMode(EditorMode.FORM);
|
||||
}
|
||||
deactivateNavigationWarning();
|
||||
} else if (toMode === PageMode.EDIT) {
|
||||
activateNavigationWarning();
|
||||
}
|
||||
|
||||
pageModeRef.value = toMode;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// This Code is auto generated by gen_global_components.py
|
||||
// This Code is auto generated by gen_ts_locales.py
|
||||
export const LOCALES = [
|
||||
{
|
||||
name: "繁體中文 (Chinese traditional)",
|
||||
value: "zh-TW",
|
||||
progress: 30,
|
||||
progress: 29,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -15,7 +15,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Tiếng Việt (Vietnamese)",
|
||||
value: "vi-VN",
|
||||
progress: 1,
|
||||
progress: 0,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -27,43 +27,43 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Türkçe (Turkish)",
|
||||
value: "tr-TR",
|
||||
progress: 53,
|
||||
progress: 62,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Svenska (Swedish)",
|
||||
value: "sv-SE",
|
||||
progress: 94,
|
||||
progress: 99,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "српски (Serbian)",
|
||||
value: "sr-SP",
|
||||
progress: 32,
|
||||
progress: 31,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Slovenian",
|
||||
value: "sl-SI",
|
||||
progress: 47,
|
||||
progress: 49,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Slovak",
|
||||
value: "sk-SK",
|
||||
progress: 93,
|
||||
progress: 91,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Pусский (Russian)",
|
||||
value: "ru-RU",
|
||||
progress: 98,
|
||||
progress: 99,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Română (Romanian)",
|
||||
value: "ro-RO",
|
||||
progress: 42,
|
||||
progress: 44,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -75,19 +75,19 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Português do Brasil (Brazilian Portuguese)",
|
||||
value: "pt-BR",
|
||||
progress: 97,
|
||||
progress: 95,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Polski (Polish)",
|
||||
value: "pl-PL",
|
||||
progress: 98,
|
||||
progress: 100,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Norsk (Norwegian)",
|
||||
value: "no-NO",
|
||||
progress: 99,
|
||||
progress: 97,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -99,25 +99,25 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Latvian",
|
||||
value: "lv-LV",
|
||||
progress: 1,
|
||||
progress: 0,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Lithuanian",
|
||||
value: "lt-LT",
|
||||
progress: 93,
|
||||
progress: 91,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "한국어 (Korean)",
|
||||
value: "ko-KR",
|
||||
progress: 5,
|
||||
progress: 3,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "日本語 (Japanese)",
|
||||
value: "ja-JP",
|
||||
progress: 12,
|
||||
progress: 11,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -135,25 +135,25 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Magyar (Hungarian)",
|
||||
value: "hu-HU",
|
||||
progress: 100,
|
||||
progress: 98,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Croatian",
|
||||
value: "hr-HR",
|
||||
progress: 93,
|
||||
progress: 91,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "עברית (Hebrew)",
|
||||
value: "he-IL",
|
||||
progress: 97,
|
||||
progress: 98,
|
||||
dir: "rtl",
|
||||
},
|
||||
{
|
||||
name: "Galician",
|
||||
value: "gl-ES",
|
||||
progress: 1,
|
||||
progress: 3,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -165,19 +165,19 @@ export const LOCALES = [
|
||||
{
|
||||
name: "French, Canada",
|
||||
value: "fr-CA",
|
||||
progress: 97,
|
||||
progress: 95,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Suomi (Finnish)",
|
||||
value: "fi-FI",
|
||||
progress: 91,
|
||||
progress: 89,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Español (Spanish)",
|
||||
value: "es-ES",
|
||||
progress: 79,
|
||||
progress: 93,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -189,13 +189,13 @@ export const LOCALES = [
|
||||
{
|
||||
name: "British English",
|
||||
value: "en-GB",
|
||||
progress: 3,
|
||||
progress: 2,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Ελληνικά (Greek)",
|
||||
value: "el-GR",
|
||||
progress: 34,
|
||||
progress: 33,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -219,7 +219,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Català (Catalan)",
|
||||
value: "ca-ES",
|
||||
progress: 75,
|
||||
progress: 74,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -231,13 +231,13 @@ export const LOCALES = [
|
||||
{
|
||||
name: "العربية (Arabic)",
|
||||
value: "ar-SA",
|
||||
progress: 20,
|
||||
progress: 18,
|
||||
dir: "rtl",
|
||||
},
|
||||
{
|
||||
name: "Afrikaans (Afrikaans)",
|
||||
value: "af-ZA",
|
||||
progress: 92,
|
||||
progress: 90,
|
||||
dir: "ltr",
|
||||
},
|
||||
]
|
||||
|
||||
20
frontend/composables/use-navigation-warning.ts
Normal file
20
frontend/composables/use-navigation-warning.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
export function useNavigationWarning() {
|
||||
return { activateNavigationWarning, deactivateNavigationWarning };
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a warning before the user navigates to another page
|
||||
* e.g., by clicking a link (which isn't internal and rendered without page load),
|
||||
* reloading the page,
|
||||
* or closing the tab.
|
||||
*/
|
||||
const activateNavigationWarning = () => {
|
||||
window.onbeforeunload = () => true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Disables the warning when navigating to a page
|
||||
*/
|
||||
const deactivateNavigationWarning = () => {
|
||||
window.onbeforeunload = null;
|
||||
}
|
||||
@@ -22,6 +22,7 @@ export interface UserRecipePreferences {
|
||||
}
|
||||
|
||||
export interface UserShoppingListPreferences {
|
||||
viewAllLists: boolean;
|
||||
viewByLabel: boolean;
|
||||
}
|
||||
|
||||
@@ -70,6 +71,7 @@ export function useShoppingListPreferences(): Ref<UserShoppingListPreferences> {
|
||||
const fromStorage = useLocalStorage(
|
||||
"shopping-list-preferences",
|
||||
{
|
||||
viewAllLists: false,
|
||||
viewByLabel: false,
|
||||
},
|
||||
{ mergeDefaults: true }
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Kanselleer",
|
||||
"clear": "Maak skoon",
|
||||
"close": "Maak toe",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Stoor",
|
||||
"settings": "Verstellings",
|
||||
"share": "Deel",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Skommel",
|
||||
"sort": "Sorteer",
|
||||
"sort-alphabetically": "Alfabeties",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Kook modus",
|
||||
"link-ingredients": "Koppel bestanddele",
|
||||
"merge-above": "Voeg bogenoemde saam",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Stel skaal terug",
|
||||
"decrease-scale-label": "Verminder die skaal met 1",
|
||||
"increase-scale-label": "Verhoog skaal met 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Invoeropsomming",
|
||||
"partial-backup": "Gedeeltelike back-up",
|
||||
"unable-to-delete-backup": "Kon nie back-up verwyder nie.",
|
||||
"experimental-description": "Back-up skep 'n momentopname van die werf se databasis en data directory. Dit sluit alle data in en kan nie gestel word om substelle data uit te sluit nie. Jy kan dit as 'n momentopname van Mealie neem. Dit dien as 'n agnostiese manier om data uit te voer en in te voer, of om die webwerf na 'n eksterne ligging te back-up.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Herlaai vanaf back-up",
|
||||
"back-restore-description": "Die herstel van hierdie back-up sal alle huidige data in jou databasis en in die data-lêergids oorskryf. {cannot-be-undone} As die herstel suksesvol was, sal jy afgemeld word.",
|
||||
"cannot-be-undone": "Hierdie aksie kan nie ongedaan gemaak word nie - gebruik met omsigtigheid.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "إلغاء",
|
||||
"clear": "مسح",
|
||||
"close": "إغلاق",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "حفظ",
|
||||
"settings": "الإعدادات",
|
||||
"share": "مشاركة",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "ترتيب عشوائي",
|
||||
"sort": "ترتيب",
|
||||
"sort-alphabetically": "ترتيب حَسَبَ الحروف الأبجدية",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Cook Mode",
|
||||
"link-ingredients": "Link Ingredients",
|
||||
"merge-above": "Merge Above",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reset Scale",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import Summary",
|
||||
"partial-backup": "Partial Backup",
|
||||
"unable-to-delete-backup": "Unable to Delete Backup.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -37,9 +37,9 @@
|
||||
},
|
||||
"category": {
|
||||
"categories": "Категории",
|
||||
"category-created": "Категория създадена",
|
||||
"category-created": "Категорията бе създадена",
|
||||
"category-creation-failed": "Неуспешно създаване на категория",
|
||||
"category-deleted": "Категория изтрита",
|
||||
"category-deleted": "Категорията бе изтрита",
|
||||
"category-deletion-failed": "Неуспешно изтриване на категория",
|
||||
"category-filter": "Филтър за категории",
|
||||
"category-update-failed": "Неуспешно актуализиране на категория",
|
||||
@@ -73,20 +73,21 @@
|
||||
"mealplan-events": "Известия за хранителен план",
|
||||
"when-a-user-in-your-group-creates-a-new-mealplan": "Когато потребител от твоята потребителска група създаде нов хранителен план",
|
||||
"shopping-list-events": "Събития за списък за пазаруване",
|
||||
"cookbook-events": "Събития за книга с рецепти",
|
||||
"tag-events": "Събития за таг",
|
||||
"cookbook-events": "История на книгата с рецепти",
|
||||
"tag-events": "История на етикетите",
|
||||
"category-events": "Събития за категория",
|
||||
"when-a-new-user-joins-your-group": "Когато потребител се присъедини към твоята потребителска група",
|
||||
"recipe-events": "Събития на рецептата"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Откажи",
|
||||
"clear": "Изчисти",
|
||||
"close": "Затвори",
|
||||
"confirm": "Потвърди",
|
||||
"confirm-delete-generic": "Сигурни ли сте, че желаете да изтриете това?",
|
||||
"copied_message": "Копирано!",
|
||||
"create": "Създай",
|
||||
"create": "Добави",
|
||||
"created": "Създадено",
|
||||
"custom": "Персонализиран",
|
||||
"dashboard": "Табло",
|
||||
@@ -123,7 +124,7 @@
|
||||
"monday": "Понеделник",
|
||||
"name": "Име",
|
||||
"new": "Нов",
|
||||
"never": "Никога",
|
||||
"never": "никога",
|
||||
"no": "Не",
|
||||
"no-recipe-found": "Няма намерени рецепти",
|
||||
"ok": "Добре",
|
||||
@@ -142,10 +143,11 @@
|
||||
"save": "Запази",
|
||||
"settings": "Настройки",
|
||||
"share": "Сподели",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Разбъркано",
|
||||
"sort": "Сортирай",
|
||||
"sort-alphabetically": "По азбучен ред",
|
||||
"status": "Статус",
|
||||
"status": "състояние",
|
||||
"subject": "Относно",
|
||||
"submit": "Изпрати",
|
||||
"success-count": "Успешни: {count}",
|
||||
@@ -153,7 +155,7 @@
|
||||
"templates": "Шаблони:",
|
||||
"test": "Тест",
|
||||
"themes": "Теми",
|
||||
"thursday": "Четвъртък",
|
||||
"thursday": "четвъртък",
|
||||
"token": "Токън",
|
||||
"tuesday": "Вторник",
|
||||
"type": "Тип",
|
||||
@@ -164,7 +166,7 @@
|
||||
"view": "Преглед",
|
||||
"wednesday": "Сряда",
|
||||
"yes": "Да",
|
||||
"foods": "Храна",
|
||||
"foods": "Продукти",
|
||||
"units": "Мерни единици",
|
||||
"back": "Назад",
|
||||
"next": "Напред",
|
||||
@@ -180,12 +182,12 @@
|
||||
"delete-with-name": "Изтриване {name}",
|
||||
"confirm-delete-generic-with-name": "Сигурни ли сте, че искате да изтриете това {name}?",
|
||||
"confirm-delete-own-admin-account": "Моля имайте предвид, че се опитвате да изтриете собствения си администраторски акаунт! Това действие не може да бъде отменени и ще изтриете окончателно Вашия акаунт?",
|
||||
"organizer": "Организиращ",
|
||||
"organizer": "Органайзер",
|
||||
"transfer": "Преместване",
|
||||
"copy": "Копиране",
|
||||
"color": "Цвят",
|
||||
"timestamp": "Времева отметка",
|
||||
"last-made": "Последно приготвено",
|
||||
"last-made": "Последно приготвена на",
|
||||
"learn-more": "Научи повече",
|
||||
"this-feature-is-currently-inactive": "Тази функционалност в момента е неактивна",
|
||||
"clipboard-not-supported": "Не се поддържа клипборд",
|
||||
@@ -195,7 +197,7 @@
|
||||
"actions": "Действия",
|
||||
"selected-count": "Избрано: {count}",
|
||||
"export-all": "Експортиране на всички",
|
||||
"refresh": "Опресни",
|
||||
"refresh": "Опресняване",
|
||||
"upload-file": "Качване на файл",
|
||||
"created-on-date": "Създадено на {0}",
|
||||
"unsaved-changes": "Имате незапазени промени. Желаете ли да ги запазите преди да излезете? Натиснете Ок за запазване и Отказ за отхвърляне на промените.",
|
||||
@@ -227,7 +229,7 @@
|
||||
"keep-my-recipes-private-description": "Задай групата и всичките рецепти като лични. Винаги може да промените това по-късно."
|
||||
},
|
||||
"manage-members": "Управление на потребителите",
|
||||
"manage-members-description": "Управлявай правата на потребителите в твоите групи. {manage} позволява на потребителя да достъпи страницата за управление на данни {invite} позволява на потребителя да генерира линк за присъединяване за други потребители. Собствениците на група не могат да променят своите права.",
|
||||
"manage-members-description": "Настройки на правата на потребителите в твоите групи. {manage} позволява на потребителя да достъпи страницата за управление на данни {invite} позволява на потребителя да генерира линк за присъединяване за други потребители. Собствениците на група не могат да променят своите права.",
|
||||
"manage": "Управление",
|
||||
"invite": "Покани",
|
||||
"looking-to-update-your-profile": "Търсите да обновите собствения си профил?",
|
||||
@@ -238,7 +240,7 @@
|
||||
"private-group-description": "Задаването на групата като лична ще зададе всички настройки за публично виждане към стандартните. Това е с по-висок приоритет от индивидуалните настройки за публично виждане на всяка една рецепта.",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes": "Разрешете на потребители извън вашата група да виждат рецептите Ви",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Когато е пуснато ще може да генерирате публичен линк за споделяне на рецепти без да е нужно потребителя да се нуждае от вписване. Когато е изключено, ще можете да споделяте рецепти само с потребители, които са във Вашата група или чрез предварително генериран личен линк за споделяне.",
|
||||
"show-nutrition-information": "Показвай информация за храната",
|
||||
"show-nutrition-information": "Показвай информация за хранителните стойности",
|
||||
"show-nutrition-information-description": "Когато е пуснато, информацията за хранителната стойност на рецептата ще бъде показана, ако е налична. Ако няма информация за хранителната стойност, тогава тя няма да бъде показана.",
|
||||
"show-recipe-assets": "Покажи медия файловете на рецептата",
|
||||
"show-recipe-assets-description": "Когато е пуснато, медия файловете ще бъдат показани към рецептата, ако са налични.",
|
||||
@@ -246,8 +248,8 @@
|
||||
"default-to-landscape-view-description": "Когато е пуснато, раздела за главната информация на рецептата ще бъде показан в пейзажен режим",
|
||||
"disable-users-from-commenting-on-recipes": "Забрани коментирането на рецепти от потребителите",
|
||||
"disable-users-from-commenting-on-recipes-description": "Скрива раздела за коментари към рецептата и забранява коментирането",
|
||||
"disable-organizing-recipe-ingredients-by-units-and-food": "Изключи организирането на съставките на рецепта по мерни единици и храна",
|
||||
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Скрива полетата за храната, мерната единица и количеството за съставките и третира съставките като полета със свободен текст.",
|
||||
"disable-organizing-recipe-ingredients-by-units-and-food": "Изключи организирането на съставките по мерни единици и продукти",
|
||||
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Скрива полетата за продукт, мерна единица и количество и третира съставките като полета със свободен текст.",
|
||||
"general-preferences": "Общи предпочитания",
|
||||
"group-recipe-preferences": "Предпочитания за рецепта по група",
|
||||
"report": "Сигнал",
|
||||
@@ -263,37 +265,37 @@
|
||||
"dinner-this-week": "Вечеря тази седмица",
|
||||
"dinner-today": "Вечеря Днес",
|
||||
"dinner-tonight": "Вечеря ТАЗИ ВЕЧЕР",
|
||||
"edit-meal-plan": "Редактиране на хранителен план",
|
||||
"edit-meal-plan": "Редактиране на планираното меню",
|
||||
"end-date": "Крайна дата",
|
||||
"group": "Група (Бета версия)",
|
||||
"main": "Основен",
|
||||
"meal-planner": "Планиране на хранене",
|
||||
"meal-plans": "Хранителни планове",
|
||||
"mealplan-categories": "Категории на хранителния план",
|
||||
"mealplan-created": "Планът за хранене е създаден",
|
||||
"mealplan-creation-failed": "Неуспешно създаване на план за хранене",
|
||||
"mealplan-deleted": "Планът за хранене е изтрит",
|
||||
"mealplan-deletion-failed": "Неуспешно изтриване на план за хранене",
|
||||
"mealplan-settings": "Настройки на плана за хранене",
|
||||
"mealplan-update-failed": "Неуспешно обновяване на план за хранене",
|
||||
"mealplan-updated": "Планът за хранене е обновен",
|
||||
"no-meal-plan-defined-yet": "Все още няма дефинирани планове за хранене",
|
||||
"no-meal-planned-for-today": "Няма хранителен план за днес",
|
||||
"meal-planner": "Планиране на менюта",
|
||||
"meal-plans": "Планирани менюта",
|
||||
"mealplan-categories": "Категории на менюто",
|
||||
"mealplan-created": "Менюто бе създадено",
|
||||
"mealplan-creation-failed": "Неуспешно създаване на меню",
|
||||
"mealplan-deleted": "Менюто бе изтрито",
|
||||
"mealplan-deletion-failed": "Неуспешно изтриване на меню",
|
||||
"mealplan-settings": "Настройки на менюто",
|
||||
"mealplan-update-failed": "Неуспешно обновяване на седмичното меню",
|
||||
"mealplan-updated": "Седмичното меню бе обновено",
|
||||
"no-meal-plan-defined-yet": "Все още няма създадено седмично меню",
|
||||
"no-meal-planned-for-today": "За днес няма планирано меню",
|
||||
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Само рецептите от тези категории ще бъдат използвани в хранителните планове",
|
||||
"planner": "Планьор",
|
||||
"quick-week": "Бърза седмица",
|
||||
"side": "Страна",
|
||||
"side": "Предястие",
|
||||
"sides": "Страни",
|
||||
"start-date": "Начална дата",
|
||||
"rule-day": "Правило за деня",
|
||||
"meal-type": "Тип на ястието",
|
||||
"rule-day": "Ден от седмицата",
|
||||
"meal-type": "Вид ястие",
|
||||
"breakfast": "Закуска",
|
||||
"lunch": "Обяд",
|
||||
"lunch": "обяд",
|
||||
"dinner": "Вечеря",
|
||||
"type-any": "Който и да е",
|
||||
"day-any": "Който и да е",
|
||||
"type-any": "Всички",
|
||||
"day-any": "Всички",
|
||||
"editor": "Редактор",
|
||||
"meal-recipe": "Рецепта за хранене",
|
||||
"meal-recipe": "Рецепта за ястие",
|
||||
"meal-title": "Заглавие на рецептата",
|
||||
"meal-note": "Бележка към рецептата",
|
||||
"note-only": "Само бележка",
|
||||
@@ -303,15 +305,15 @@
|
||||
"this-rule-will-apply": "Това правило ще се приложи на {dayCriteria} {mealTypeCriteria}.",
|
||||
"to-all-days": "за всички дни",
|
||||
"on-days": "на {0}",
|
||||
"for-all-meal-types": "за всички типове ястия",
|
||||
"for-type-meal-types": "за {0} типове ястия",
|
||||
"meal-plan-rules": "Правила на плана за хранене",
|
||||
"for-all-meal-types": "за всички видове ястия",
|
||||
"for-type-meal-types": "за {0}",
|
||||
"meal-plan-rules": "Правила за съставяне на седмично меню",
|
||||
"new-rule": "Ново правило",
|
||||
"meal-plan-rules-description": "Може да създадете правила за автоматично избиране на рецепти от хранителните планове. Тези правила ще бъдат използвани за попълване на списъка от произволното избрани рецепти, от които да избирате, когато създавате нов хранителен план. Бележка: ако тези правила имат еднакви ограничения по ден/тип, тогава техните категории ще бъдат обединени. На практика, е ненужно да създавате дублирани правила, но все пак това е възможно.",
|
||||
"new-rule-description": "Когато създавате ново правило за хранителен план, Вие ще може да зададете ограничение за правилото да бъде приложено за определен ден от седмицата и/или специфичен тип ястие. За да добавите правило за всички дни или всички типове ястия, Вие може да зададете правилото като \"Всички\", което ще го приложи за всички дни и/или типове ястия.",
|
||||
"meal-plan-rules-description": "Може да създадете правила за автоматично избиране на рецепти в седмичното меню. Тези правила ще бъдат използвани за създаване на седмично маню от произволното избрани рецепти. Бележка: ако тези правила имат еднакви ограничения по ден/тип, тогава техните категории ще бъдат обединени. На практика, не е нужно да създавате дублиращи се правила, но все пак това е възможно.",
|
||||
"new-rule-description": "Когато създавате ново правило за създаване на седмично меню, може да зададете ограничение правилото да бъде приложено за определен ден от седмицата и/или специфичен вид ястие. За да добавите правило за всички дни или всички типове ястия, Вие може да изберете \"Всички\", което ще го приложи за всички дни и/или видове ястия.",
|
||||
"recipe-rules": "Правила на рецептата",
|
||||
"applies-to-all-days": "Прилага се за всички дни",
|
||||
"applies-on-days": "Прилага се на {0}",
|
||||
"applies-on-days": "Всеки/всяка {0}",
|
||||
"meal-plan-settings": "Настройки на плана за хранене"
|
||||
},
|
||||
"migration": {
|
||||
@@ -350,7 +352,7 @@
|
||||
"recipe-data-migrations": "Миграция на данни на рецепти",
|
||||
"recipe-data-migrations-explanation": "Рецептите могат да бъдат мигрирани от други приложения поддържани от Mealie. Това е добър начин да започнете използването си на Mealie.",
|
||||
"choose-migration-type": "Избери тип на миграцията",
|
||||
"tag-all-recipes": "Отбележи всички рецепти с {tag-name} таг",
|
||||
"tag-all-recipes": "Добави {tag-name} като етикет във всички рецепти",
|
||||
"nextcloud-text": "Nextcloud рецептите могат да бъдат импортирани от .zip файл, който съдържа данни съхранени в Nextcloud. Вижте примерната структура на папките по-долу за да се подсигурите, че рецептите Ви могат да бъдат импортирани.",
|
||||
"chowdown-text": "Mealie поддържа формата на хранилището на Chowdown. Свалете кода на хранилището като .zip файл и го качете по-долу",
|
||||
"recipe-1": "Рецепта 1",
|
||||
@@ -358,7 +360,7 @@
|
||||
"paprika-text": "Mealie може да импортирай рецепти от приложението Paprika. Експортирайте рецептите си от Paprika, преименувате файловото разширение на .zip и го качете по-долу.",
|
||||
"mealie-text": "Mealie може да импортира рецепти от Mealie преди версия 1.0. Експортирайте рецептите от старата си инстанция и ги качете като .zip файл по-долу. Бележка: могат да бъдат импортирани само рецептите.",
|
||||
"plantoeat": {
|
||||
"title": "Plan to Eat",
|
||||
"title": "Планиране на меню",
|
||||
"description-long": "Mealie може да импортира рецепти от Plan to Eat."
|
||||
}
|
||||
},
|
||||
@@ -453,7 +455,7 @@
|
||||
"remove-section": "Премахни раздел",
|
||||
"save-recipe-before-use": "Запази рецептата преди да я използваш",
|
||||
"section-title": "Заглавие на раздела",
|
||||
"servings": "Порции",
|
||||
"servings": "Порция|порции",
|
||||
"share-recipe-message": "Искам да споделя моята рецепта {0} с теб.",
|
||||
"show-nutrition-values": "Покажи хранителните стойности",
|
||||
"sodium-content": "Натрий",
|
||||
@@ -471,7 +473,7 @@
|
||||
"date-format-hint-yyyy-mm-dd": "YYYY-MM-DD формат",
|
||||
"add-to-list": "Добави към списък",
|
||||
"add-to-plan": "Добави към план",
|
||||
"add-to-timeline": "Добави към времевата линия",
|
||||
"add-to-timeline": "Добави към историята на събитията",
|
||||
"recipe-added-to-list": "Рецептата е добавена към списъка",
|
||||
"recipes-added-to-list": "Рецептите са добавени към списъка",
|
||||
"successfully-added-to-list": "Успешно добавено в списъка",
|
||||
@@ -483,7 +485,7 @@
|
||||
"quantity": "Количество",
|
||||
"choose-unit": "Избери единица",
|
||||
"press-enter-to-create": "Натисните Enter за да създадете",
|
||||
"choose-food": "Избери храна",
|
||||
"choose-food": "Избери продукт",
|
||||
"notes": "Бележки",
|
||||
"toggle-section": "Превключване на раздела",
|
||||
"see-original-text": "Виж оригиналния текст",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Режим на готвене",
|
||||
"link-ingredients": "Свържи съставките",
|
||||
"merge-above": "Обедини с по-горната",
|
||||
"move-to-bottom": "Премести най-долу",
|
||||
"move-to-top": "Премести най-горе",
|
||||
"reset-scale": "Оригинален мащаб",
|
||||
"decrease-scale-label": "Намали мащаба с 1",
|
||||
"increase-scale-label": "Увеличи мащаба с 1",
|
||||
@@ -506,12 +510,12 @@
|
||||
"resume-timer": "Възобновяване на таймера",
|
||||
"stop-timer": "Спри таймера"
|
||||
},
|
||||
"edit-timeline-event": "Редактирай събитие от времевата линия",
|
||||
"timeline": "Времева линия",
|
||||
"timeline-is-empty": "Няма нищо във времевата линия. Опитайте да приготвите рецептата!",
|
||||
"group-global-timeline": "{groupName} глобална времева линия",
|
||||
"open-timeline": "Отвори времевата линия",
|
||||
"made-this": "Аз направих това",
|
||||
"edit-timeline-event": "Редактирай събитие",
|
||||
"timeline": "Хронология на събитията",
|
||||
"timeline-is-empty": "Няма история на събитията. Опитайте да приготвите рецептата!",
|
||||
"group-global-timeline": "{groupName} История на събитията",
|
||||
"open-timeline": "Отвори историята на събитията",
|
||||
"made-this": "Сготвих рецептата",
|
||||
"how-did-it-turn-out": "Как се получи?",
|
||||
"user-made-this": "{user} направи това",
|
||||
"last-made-date": "Последно приготвена на {date}",
|
||||
@@ -526,29 +530,29 @@
|
||||
"edit-markdown": "Редактирай с markdown",
|
||||
"recipe-creation": "Създаване на рецепта",
|
||||
"select-one-of-the-various-ways-to-create-a-recipe": "Изберете един от разнообразните начини за създаване на рецепта",
|
||||
"looking-for-migrations": "Търсите миграциите?",
|
||||
"looking-for-migrations": "Миграция на данни",
|
||||
"import-with-url": "Импортирай от линк",
|
||||
"create-recipe": "Създай рецепта",
|
||||
"create-recipe": "Добави рецепта",
|
||||
"import-with-zip": "Импортирай от .zip",
|
||||
"create-recipe-from-an-image": "Създай рецепта от снимка",
|
||||
"create-recipe-from-an-image": "Добави рецепта от снимка",
|
||||
"bulk-url-import": "Импортиране на рецепти от линк",
|
||||
"debug-scraper": "Отстраняване на грешки на скрейпъра",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Създай рецепта като предоставиш име. Всички рецепти трябва да имат уникални имена.",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Добави рецепта като предоставиш име. Всички рецепти трябва да имат уникални имена.",
|
||||
"new-recipe-names-must-be-unique": "Името на рецептата трябва да бъде уникално",
|
||||
"scrape-recipe": "Обхождане на рецепта",
|
||||
"scrape-recipe-description": "Обходи рецепта по линк. Предоставете линк за сайт, който искате да бъде обходен. Mealie ще опита да обходи рецептата от този сайт и да я добави във Вашата колекция.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Имате много рецепти, които искате да обходите наведнъж?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Пробвайте масовото импорторане",
|
||||
"import-original-keywords-as-tags": "Импортирай оригиналните ключови думи като тагове",
|
||||
"import-original-keywords-as-tags": "Добави оригиналните ключови думи като етикети",
|
||||
"stay-in-edit-mode": "Остани в режим на редакция",
|
||||
"import-from-zip": "Импортирай от Zip",
|
||||
"import-from-zip-description": "Импортирай рецепта, която е била експортирана от друга инстанция на Mealie.",
|
||||
"zip-files-must-have-been-exported-from-mealie": ".zip файловете трябва да бъдат експортирани от Mealie",
|
||||
"create-a-recipe-by-uploading-a-scan": "Създай рецепта като качиш сканирано копие.",
|
||||
"create-a-recipe-by-uploading-a-scan": "Добави рецепта като качиш сканирано копие.",
|
||||
"upload-a-png-image-from-a-recipe-book": "Качи png изображение от книга с рецепти",
|
||||
"recipe-bulk-importer": "Масово импортиране на рецепти",
|
||||
"recipe-bulk-importer-description": "Масовото импортиране Ви позволява да импортиране множество рецепти наведнъж като постави сайтовете на опашка в бекенда и изпълненява задачата във фонов режим. Това може да бъде полезно когато първоначално мигрирате Mealie, или когато искате да импортиране голям брой рецепти наведнъж.",
|
||||
"set-categories-and-tags": "Задай Категории и Тагове",
|
||||
"set-categories-and-tags": "Задай категории и етикети",
|
||||
"bulk-imports": "Масови импортирания",
|
||||
"bulk-import-process-has-started": "Процеса на масово импортиране започна",
|
||||
"bulk-import-process-has-failed": "Процеса на масово импортиране се прекрати с грешка",
|
||||
@@ -577,7 +581,7 @@
|
||||
"search": "Търсене",
|
||||
"search-mealie": "Търсене в Mealie (Натисни /)",
|
||||
"search-placeholder": "Търсене...",
|
||||
"tag-filter": "Филтриране на тагове",
|
||||
"tag-filter": "Филтриране по етикет",
|
||||
"search-hint": "Натисни '/'",
|
||||
"advanced": "Разширени",
|
||||
"auto-search": "Автоматично търсене",
|
||||
@@ -591,7 +595,7 @@
|
||||
"backup-created-at-response-export_path": "Резервно копие е създадено на {path}",
|
||||
"backup-deleted": "Резервното копие е изтрито",
|
||||
"restore-success": "Успешно възстановяване",
|
||||
"backup-tag": "Таг на резервното копие",
|
||||
"backup-tag": "Етикет на резервното копие",
|
||||
"create-heading": "Създай резервно копие",
|
||||
"delete-backup": "Изтрий резервно копие",
|
||||
"error-creating-backup-see-log-file": "Грешка при създаването на резервно копие. Виж лог файла",
|
||||
@@ -719,7 +723,7 @@
|
||||
"secure-site-success-text": "Сайтът е достъпен чрез localhost или https",
|
||||
"server-side-base-url": "Сървърен базов URL",
|
||||
"server-side-base-url-error-text": "„BASE_URL“ все още е стойността по подразбиране на API сървъра. Това ще причини проблеми с връзките за известия, генерирани на сървъра за имейли и др.",
|
||||
"server-side-base-url-success-text": "URL адресът от страна на сървъра не съответства на стандартния",
|
||||
"server-side-base-url-success-text": "URL адресът от страна на сървъра не съответства на зададения",
|
||||
"ldap-ready": "Използва LDAP",
|
||||
"ldap-ready-error-text": "Не всички LDAP стойности са конфигурирани. Това може да бъде игнорирано, ако не използвате LDAP удостоверяване.",
|
||||
"ldap-ready-success-text": "Задължителните LDAP променливи са зададени.",
|
||||
@@ -735,7 +739,7 @@
|
||||
"quantity": "Количество: {0}",
|
||||
"shopping-list": "Списък за пазаруване",
|
||||
"shopping-lists": "Списъци за пазаруване",
|
||||
"food": "Храна",
|
||||
"food": "Продукт",
|
||||
"note": "Бележка",
|
||||
"label": "Етикет",
|
||||
"linked-item-warning": "Елементът е добавен към една или повече рецепти. Редактиране на единиците или храните ще се отрази с непредвидими резултати когато добавяте или премахвате рецепта от списъка.",
|
||||
@@ -766,7 +770,7 @@
|
||||
"profile": "Профил",
|
||||
"search": "Търсене",
|
||||
"site-settings": "Настройки на сайта",
|
||||
"tags": "Тагове",
|
||||
"tags": "Етикети",
|
||||
"toolbox": "Инструменти",
|
||||
"language": "Език",
|
||||
"maintenance": "Профилактика",
|
||||
@@ -787,17 +791,17 @@
|
||||
"welcome-to-mealie": "Добре дошли в Mealie! За да станете потребител на тази инстанция сте длъжни да имате валиден линк за покана. Ако не сте получили покана, тогава е невъзможно да се регистрирате. За да получите линк, свържете се с администратора на сайта."
|
||||
},
|
||||
"tag": {
|
||||
"tag-created": "Тагът е създаден",
|
||||
"tag-creation-failed": "Неуспешно създаване на таг",
|
||||
"tag-deleted": "Тагът е изтрит",
|
||||
"tag-deletion-failed": "Неуспешно изтриване на таг",
|
||||
"tag-update-failed": "Неуспешно обновяване на таг",
|
||||
"tag-updated": "Тагът е обновен",
|
||||
"tags": "Тагове",
|
||||
"untagged-count": "Без таг {count}",
|
||||
"create-a-tag": "Създаване на таг",
|
||||
"tag-name": "Име на тага",
|
||||
"tag": "Тагове"
|
||||
"tag-created": "Етикетът беше добавен",
|
||||
"tag-creation-failed": "Неуспешно създаване на етикет",
|
||||
"tag-deleted": "Етикетът беше изтрит",
|
||||
"tag-deletion-failed": "Неуспешно изтриване на етикет",
|
||||
"tag-update-failed": "Неуспешно обновяване на етикет",
|
||||
"tag-updated": "Етикетът беше обновен",
|
||||
"tags": "Етикети",
|
||||
"untagged-count": "Без етикет {count}",
|
||||
"create-a-tag": "Създаване на етикет",
|
||||
"tag-name": "Име на етикета",
|
||||
"tag": "Етикет"
|
||||
},
|
||||
"tool": {
|
||||
"tools": "Инструменти",
|
||||
@@ -906,7 +910,7 @@
|
||||
"language-dialog": {
|
||||
"translated": "преведено",
|
||||
"choose-language": "Избери Език",
|
||||
"select-description": "Изберете език за Mealie. Тази настройка се прилага само за Вас, не и за други потребители.",
|
||||
"select-description": "Изберете език за Mealie. Тази настройка засяга само текущия профил.",
|
||||
"how-to-contribute-description": "Има ли нещо все още непреведено, с грешка в превода, или езикът Ви липсва в списъка? {read-the-docs-link} за да видите как да допринесете!",
|
||||
"read-the-docs": "Прочетете документацията"
|
||||
},
|
||||
@@ -914,12 +918,12 @@
|
||||
"foods": {
|
||||
"merge-dialog-text": "Комбинирането на избраните храни ще обедини изходната храна и целевата храна в една единствена храна. Изходната храна ще бъде изтрита и всички препратки към изходната храна ще бъдат актуализирани, за да сочат към целевата храна.",
|
||||
"merge-food-example": "Обединяване на {food1} с {food2}",
|
||||
"seed-dialog-text": "Заредете базата данни с храни на базата на вашия местен език. Това ще създаде 200+ общи храни, които могат да се използват за организиране на вашата база данни. Храните се превеждат чрез усилия на общността.",
|
||||
"seed-dialog-text": "Изтеглете базата данни с продукти на вашия местен език. Ще бъдат заредени 200+ продукта, които да използвате за организиране на вашата база данни. Имената на продуктите се превеждат от общността.",
|
||||
"seed-dialog-warning": "Вече имате някои елементи във Вашата база данни. Това действие няма да съгласува дубликати, ще трябва да ги управлявате ръчно.",
|
||||
"combine-food": "Комбинирай Храни",
|
||||
"source-food": "Изходна храна",
|
||||
"target-food": "Целева храна",
|
||||
"create-food": "Създай храна",
|
||||
"create-food": "Създай продукт",
|
||||
"food-label": "Заглавие на храната",
|
||||
"edit-food": "Редактирай храна",
|
||||
"food-data": "Данни за храните",
|
||||
@@ -927,7 +931,7 @@
|
||||
"example-food-plural": "пример: Домати"
|
||||
},
|
||||
"units": {
|
||||
"seed-dialog-text": "Заредете базата данни с общи единици въз основа на Вашия местен език.",
|
||||
"seed-dialog-text": "Заредете базата данни с мерни единици на Вашия местен език.",
|
||||
"combine-unit-description": "Комбинирането на избраните единици ще обедини единицата източник и целевата единица в една единица. {source-unit-will-be-deleted} и всички препратки към изходната единица ще бъдат актуализирани, за да сочат към целевата единица.",
|
||||
"combine-unit": "Комбинирай мерни единици",
|
||||
"source-unit": "Изходна мярна единица",
|
||||
@@ -949,7 +953,7 @@
|
||||
"example-unit-abbreviation-plural": "пример: ч.л.-ки"
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Заредете базата данни с общи етикети въз основа на Вашия местен език.",
|
||||
"seed-dialog-text": "Заредете базата данни с етикети на Вашия местен език.",
|
||||
"edit-label": "Редактиране на етикет",
|
||||
"new-label": "Нов етикет",
|
||||
"labels": "Етикети"
|
||||
@@ -966,10 +970,10 @@
|
||||
"recipe-columns": "Колони на рецептата",
|
||||
"data-exports-description": "Този раздел предоставя връзки към налични експортирания, които са готови за изтегляне. Тези експорти изтичат, така че не забравяйте да ги изтеглите, докато все още са налични.",
|
||||
"data-exports": "Експорти на данни",
|
||||
"tag": "Таг",
|
||||
"tag": "Етикет",
|
||||
"categorize": "Категоризиране",
|
||||
"update-settings": "Обнови настройките",
|
||||
"tag-recipes": "Тагове на рецепти",
|
||||
"tag-recipes": "Етикети на рецепти",
|
||||
"categorize-recipes": "Категоризирай рецепти",
|
||||
"export-recipes": "Експортирай рецепти",
|
||||
"delete-recipes": "Изтрий рецепти",
|
||||
@@ -977,8 +981,8 @@
|
||||
},
|
||||
"create-alias": "Създаване на псевдоним",
|
||||
"manage-aliases": "Управление на псевдоними",
|
||||
"seed-data": "Сийд на данни",
|
||||
"seed": "Сийд",
|
||||
"seed-data": "Зареждане на данни",
|
||||
"seed": "Зареждане",
|
||||
"data-management": "Управление на данни",
|
||||
"data-management-description": "Изберете кой набор от данни искате да промените.",
|
||||
"select-data": "Изберете данни",
|
||||
@@ -991,9 +995,9 @@
|
||||
"category-data": "Категория за данните"
|
||||
},
|
||||
"tags": {
|
||||
"new-tag": "Нов таг",
|
||||
"edit-tag": "Редакция на таг",
|
||||
"tag-data": "Данни на тага"
|
||||
"new-tag": "Нов етикет",
|
||||
"edit-tag": "Редакция на етикет",
|
||||
"tag-data": "Данни на етикета"
|
||||
},
|
||||
"tools": {
|
||||
"new-tool": "Нов инструмент",
|
||||
@@ -1010,7 +1014,7 @@
|
||||
"group-details": "Подробности за групата",
|
||||
"group-details-description": "Преди да създадете акаунт, ще трябва да създадете група. Вашата група ще съдържа само Вас, но ще можете да поканите други по-късно. Членовете във вашата група могат да споделят планове за хранене, списъци за пазаруване, рецепти и други!",
|
||||
"use-seed-data": "Използвай предварителни данни",
|
||||
"use-seed-data-description": "Mealie се доставя с колекция от храни, мерни единици и етикети, които могат да се използват за попълване на Вашата група с полезни данни за организиране на вашите рецепти.",
|
||||
"use-seed-data-description": "Mealie се доставя с колекция от продукти, мерни единици и етикети за попълване на Вашата група с полезни данни за организиране на рецептите.",
|
||||
"account-details": "Подробни данни за акаунта"
|
||||
},
|
||||
"validation": {
|
||||
@@ -1133,7 +1137,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Добре дошъл(а), {0}",
|
||||
"description": "Управлявай твоят профил, рецепти и настройки на групата.",
|
||||
"description": "Настройки на профил, рецепти и настройки на групата.",
|
||||
"get-invite-link": "Вземи линк за покана",
|
||||
"get-public-link": "Вземи публичен линк",
|
||||
"account-summary": "Обобщение на акаунта",
|
||||
@@ -1145,19 +1149,19 @@
|
||||
"personal": "Лични",
|
||||
"personal-description": "Това са настройки, които са лични за Вас. Промените тук няма да засегнат други потребители",
|
||||
"user-settings": "Потребителски настройки",
|
||||
"user-settings-description": "Управлявайте предпочитанията си, променяйте паролата си и актуализирайте имейла си",
|
||||
"api-tokens-description": "Управлявайте вашите API токени за достъп от външни приложения",
|
||||
"user-settings-description": "Нстройки на предпочитанията, смяна на парола и актуализация на имей адрес",
|
||||
"api-tokens-description": "Управление на API токени за достъп от външни приложения",
|
||||
"group-description": "Тези елементи се споделят във вашата група. Редактирането на един от тях ще го промени за цялата група!",
|
||||
"group-settings": "Настройки на групата",
|
||||
"group-settings-description": "Управлявайте общите си групови настройки като план за хранене и настройки за поверителност.",
|
||||
"cookbooks-description": "Управлявайте колекция от категории на рецепти и генерирайте страници за тях.",
|
||||
"group-settings-description": "Общи групови настройки като седмично меню и настройки за поверителност.",
|
||||
"cookbooks-description": "Управление на категории на рецепти и генериране на съответните страници.",
|
||||
"members": "Участници",
|
||||
"members-description": "Вижте кой е във Вашата група и управлявайте техните права.",
|
||||
"members-description": "Списък на потребителите в групата и управление на техните права.",
|
||||
"webhooks-description": "Настройте webhooks, които се задействат в дните, в които имате планиран план за хранене.",
|
||||
"notifiers": "Уведомители",
|
||||
"notifiers-description": "Настройте имейл и push известия, които се задействат при конкретни събития.",
|
||||
"manage-data": "Управление на данни",
|
||||
"manage-data-description": "Управлявайте вашата храна и единици (очаквайте още опции скоро)",
|
||||
"manage-data-description": "Настройки на продукти и мерни единици (очаквайте добавяне на още възможности)",
|
||||
"data-migrations": "Миграция на данни",
|
||||
"data-migrations-description": "Мигрирайте вашите съществуващи данни от други приложения като Nextcloud Recipes и Chowdown",
|
||||
"email-sent": "Имейлът е изпратен",
|
||||
@@ -1177,13 +1181,13 @@
|
||||
},
|
||||
"cookbook": {
|
||||
"cookbooks": "Готварски книги",
|
||||
"description": "Готварските книги са друг начин за организиране на рецепти чрез създаване на напречни сечения на рецепти и тагове. Създаването на готварска книга ще добави запис към страничната лента и всички рецепти с избраните тагове и категории ще бъдат показани в готварската книга.",
|
||||
"description": "Готварските книги са друг начин за организиране на рецепти чрез създаване на напречни сечения на рецепти и етикети. Създаването на готварска книга ще добави запис към страничната лента и всички рецепти с избраните категории и етикети ще бъдат показани в готварската книга.",
|
||||
"public-cookbook": "Публична книга с рецепти",
|
||||
"public-cookbook-description": "Публичните готварски книги могат да се споделят с потребители, които не са в Mealie, и ще се показват на страницата на вашите групи.",
|
||||
"filter-options": "Опции на филтъра",
|
||||
"filter-options-description": "Когато е избрано изискване на всички, готварската книга ще включва само рецепти, които имат всички избрани елементи. Това се отнася за всяко подмножество от селектори, а не за напречно сечение на избраните елементи.",
|
||||
"require-all-categories": "Изискване на всички категории",
|
||||
"require-all-tags": "Изискване на всички тагове",
|
||||
"require-all-tags": "Включване на всички етикети",
|
||||
"require-all-tools": "Изискване на всички инструменти",
|
||||
"cookbook-name": "Име на книгата с рецепти",
|
||||
"cookbook-with-name": "Книга с рецепти {0}",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Esdeveniments de receptes"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Anuŀla",
|
||||
"clear": "Neteja",
|
||||
"close": "Tanca",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Desa",
|
||||
"settings": "Configuració",
|
||||
"share": "Compartiu",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Barreja",
|
||||
"sort": "Ordena",
|
||||
"sort-alphabetically": "Alfabèticament",
|
||||
@@ -259,7 +261,7 @@
|
||||
},
|
||||
"meal-plan": {
|
||||
"create-a-new-meal-plan": "Crea un nou menú",
|
||||
"update-this-meal-plan": "Update this Meal Plan",
|
||||
"update-this-meal-plan": "Actualitza aquest pla de menjar",
|
||||
"dinner-this-week": "Sopar d'esta setmana",
|
||||
"dinner-today": "Sopar per avui",
|
||||
"dinner-tonight": "Sopar d'aquesta nit",
|
||||
@@ -307,7 +309,7 @@
|
||||
"for-type-meal-types": "per {0} tipus de menús",
|
||||
"meal-plan-rules": "Normes del planificador de menús",
|
||||
"new-rule": "Nova norma",
|
||||
"meal-plan-rules-description": "You can create rules for auto selecting recipes for your meal plans. These rules are used by the server to determine the random pool of recipes to select from when creating meal plans. Note that if rules have the same day/type constraints then the categories of the rules will be merged. In practice, it's unnecessary to create duplicate rules, but it's possible to do so.",
|
||||
"meal-plan-rules-description": "Podeu crear regles per a la selecció automàtica de receptes per als vostres plans d'àpats. El servidor utilitza aquestes regles per determinar el conjunt aleatori de receptes per seleccionar quan es creen plans d'àpats. Tingueu en compte que si les regles tenen les mateixes restriccions de dia/tipus, les categories de les regles es fusionaran. A la pràctica, no és necessari crear regles duplicades, però és possible fer-ho.",
|
||||
"new-rule-description": "When creating a new rule for a meal plan you can restrict the rule to be applicable for a specific day of the week and/or a specific type of meal. To apply a rule to all days or all meal types you can set the rule to \"Any\" which will apply it to all the possible values for the day and/or meal type.",
|
||||
"recipe-rules": "Normes per la recepta",
|
||||
"applies-to-all-days": "Aplica a tots els dies",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Mode \"cuinant\"",
|
||||
"link-ingredients": "Enllaça amb els ingredients",
|
||||
"merge-above": "Fusiona amb el de dalt",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reinicialitza",
|
||||
"decrease-scale-label": "Divideix",
|
||||
"increase-scale-label": "Multiplica",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Resum de la importació",
|
||||
"partial-backup": "Còpia de seguretat parcial",
|
||||
"unable-to-delete-backup": "No s'ha pogut suprimir la còpia.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Restaura la còpia de seguretat",
|
||||
"back-restore-description": "Restaurar aquesta còpia de seguretat sobreescriurà totes les dades actuals de la teva base de dades i qualsevol directori i els substituirà amb el contingut d'aquesta còpia de seguretat. {cannot-be-undone} Si la restauració es duu a terme correctament, se us tancarà la sessió.",
|
||||
"cannot-be-undone": "Aquesta acció no es pot desfer. Utilitza-la amb precaució.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Zrušit",
|
||||
"clear": "Vymazat",
|
||||
"close": "Zavřít",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Uložit",
|
||||
"settings": "Nastavení",
|
||||
"share": "Sdílet",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Náhodně",
|
||||
"sort": "Seřadit",
|
||||
"sort-alphabetically": "Abecedně",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Režim vaření",
|
||||
"link-ingredients": "Propojit ingredience",
|
||||
"merge-above": "Sloučit s předchozím",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Obnovit násobení",
|
||||
"decrease-scale-label": "Snížit násobení o 1",
|
||||
"increase-scale-label": "Zvýšit násobení o 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Shrnutí importu",
|
||||
"partial-backup": "Částečná záloha",
|
||||
"unable-to-delete-backup": "Zálohu nelze odstranit.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Hændelser for opskrifter"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Annuller",
|
||||
"clear": "Ryd",
|
||||
"close": "Luk",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Gem",
|
||||
"settings": "Indstillinger",
|
||||
"share": "Del",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Bland",
|
||||
"sort": "Sorter",
|
||||
"sort-alphabetically": "Alfabetisk",
|
||||
@@ -199,8 +201,8 @@
|
||||
"upload-file": "Upload Fil",
|
||||
"created-on-date": "Oprettet den: {0}",
|
||||
"unsaved-changes": "Du har ændringer som ikke er gemt. Vil du gemme før du forlader? Vælg \"Okay\" for at gemme, eller \"Annullér\" for at kassere ændringer.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"clipboard-copy-failure": "Kopiering til udklipsholderen mislykkedes.",
|
||||
"confirm-delete-generic-items": "Er du sikker på at du ønsker at slette de valgte emner?"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Er du sikker på, du vil slette <b>{groupName}<b/>?",
|
||||
@@ -259,7 +261,7 @@
|
||||
},
|
||||
"meal-plan": {
|
||||
"create-a-new-meal-plan": "Opret en ny madplan",
|
||||
"update-this-meal-plan": "Update this Meal Plan",
|
||||
"update-this-meal-plan": "Opdater denne måltidsplan",
|
||||
"dinner-this-week": "Madplan denne uge",
|
||||
"dinner-today": "Madplan i dag",
|
||||
"dinner-tonight": "AFTENSMAD I AFTEN",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Tilberedningsvisning",
|
||||
"link-ingredients": "Link ingredienser",
|
||||
"merge-above": "Sammenflet ovenstående",
|
||||
"move-to-bottom": "Flyt til bunden",
|
||||
"move-to-top": "Flyt til toppen",
|
||||
"reset-scale": "Nulstil skalering",
|
||||
"decrease-scale-label": "Formindsk skala med 1",
|
||||
"increase-scale-label": "Forøg skala med 1",
|
||||
@@ -515,7 +519,7 @@
|
||||
"how-did-it-turn-out": "Hvordan blev det?",
|
||||
"user-made-this": "{user} lavede denne",
|
||||
"last-made-date": "Sidst tilberedt den {date}",
|
||||
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
|
||||
"api-extras-description": "Opskrifter ekstra er en central feature i Mealie API. De giver dig mulighed for at oprette brugerdefinerede JSON nøgle / værdi par inden for en opskrift, at henvise til fra 3. parts applikationer. Du kan bruge disse nøgler til at give oplysninger, for eksempel til at udløse automatiseringer eller brugerdefinerede beskeder til at videresende til din ønskede enhed.",
|
||||
"message-key": "Beskednøgle",
|
||||
"parse": "Behandl data",
|
||||
"attach-images-hint": "Vedhæft billeder ved at trække dem ind i redigeringsværktøjet",
|
||||
@@ -537,7 +541,7 @@
|
||||
"new-recipe-names-must-be-unique": "Opskriftsnavnet er allerede i brug",
|
||||
"scrape-recipe": "Scrape Opskrift",
|
||||
"scrape-recipe-description": "Hent en opskrift fra en hjemmeside. Angiv URL'en til den hjemmeside, du vil hente data fra, og Mealie vil forsøge at hente opskriften og tilføje den til din samling.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Har du en masse opskrifter, du ønsker at scrappe på en gang?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
|
||||
"import-original-keywords-as-tags": "Importér originale nøgleord som mærker",
|
||||
"stay-in-edit-mode": "Bliv i redigeringstilstand",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Importer resumé",
|
||||
"partial-backup": "Delvis backup",
|
||||
"unable-to-delete-backup": "Ude af stand til at slette backup.",
|
||||
"experimental-description": "Backups en samlet snapshots af databasen og datamappe på installationen. Dette omfatter alle data og kan ikke indstilles til at udelukke undergrupper af data. Du kan tænke på dette som et øjebliksbillede af Mealie på et bestemt tidspunkt. I øjeblikket, {not-crossed-version} (data migrationer er ikke udført automatisk). Disse fungerer som en database agnostisk måde at eksportere og importere data eller backup af webstedet til en ekstern placering.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup / gendannelse",
|
||||
"back-restore-description": "Gendannelse af denne sikkerhedskopi vil overskrive alle de aktuelle data i din database og i datamappen og erstatte dem med indholdet af denne sikkerhedskopi. {cannot-be-undone} Hvis gendannelsen lykkes, vil du blive logget ud.",
|
||||
"cannot-be-undone": "Denne handling kan ikke fortrydes - brug med forsigtighed.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Rezept-Ereignisse"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Abbrechen",
|
||||
"clear": "Zurücksetzen",
|
||||
"close": "Schließen",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Speichern",
|
||||
"settings": "Einstellungen",
|
||||
"share": "Teilen",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Mischen",
|
||||
"sort": "Sortierung",
|
||||
"sort-alphabetically": "Alphabetisch",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Koch-Modus",
|
||||
"link-ingredients": "Zutaten verlinken",
|
||||
"merge-above": "Mit Eintrag darüber zusammenführen",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Maßstab zurücksetzen",
|
||||
"decrease-scale-label": "Maßstab um 1 verringern",
|
||||
"increase-scale-label": "Maßstab um 1 erhöhen",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Zusammenfassung des Imports",
|
||||
"partial-backup": "Teilsicherung",
|
||||
"unable-to-delete-backup": "Sicherung kann nicht gelöscht werden.",
|
||||
"experimental-description": "Sichert eine vollständige Momentaufnahme der Datenbank und des Datenverzeichnisses der Webseite. Dies schließt alle Daten ein, es können keine Daten ausgenommen werden. Es handelt sich also um eine Momentaufnahme von Mealie zu einem bestimmten Zeitpunkt. Zur Zeit {not-crossed-version} (es erfolgt keine automatische Datenmigration). Es ist eine Datenbank-unabhängige Möglichkeit, Daten zu exportieren und importieren oder um die Webseite an einem externen Ort zu sichern.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Wiederherstellen aus Sicherung",
|
||||
"back-restore-description": "Das Wiederherstellen dieser Sicherung wird alle vorhandenen Daten in deiner Datenbank und im Datenverzeichnis überschreiben und durch den Inhalt dieser Sicherung ersetzen. {cannot-be-undone} Wenn die Wiederherstellung erfolgreich war, wirst du abgemeldet.",
|
||||
"cannot-be-undone": "Diese Aktion kann nicht rückgängig gemacht werden - verwende sie mit Vorsicht.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Άκυρο",
|
||||
"clear": "Εκκαθάριση",
|
||||
"close": "Κλείσιμο",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Αποθήκευση",
|
||||
"settings": "Ρυθμίσεις",
|
||||
"share": "Κοινοποίηση",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Τυχαία",
|
||||
"sort": "Ταξινόμηση",
|
||||
"sort-alphabetically": "Αλφαβητική",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Cook Mode",
|
||||
"link-ingredients": "Link Ingredients",
|
||||
"merge-above": "Merge Above",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reset Scale",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Εισαγωγή Περίληψης",
|
||||
"partial-backup": "Μερικό Αντίγραφο Ασφαλείας",
|
||||
"unable-to-delete-backup": "Αδυναμία διαγραφής αντιγράφου ασφαλείας.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Cancel",
|
||||
"clear": "Clear",
|
||||
"close": "Close",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Save",
|
||||
"settings": "Settings",
|
||||
"share": "Share",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Shuffle",
|
||||
"sort": "Sort",
|
||||
"sort-alphabetically": "Alphabetical",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Cook Mode",
|
||||
"link-ingredients": "Link Ingredients",
|
||||
"merge-above": "Merge Above",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reset Scale",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import Summary",
|
||||
"partial-backup": "Partial Backup",
|
||||
"unable-to-delete-backup": "Unable to Delete Backup.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Cancel",
|
||||
"clear": "Clear",
|
||||
"close": "Close",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Save",
|
||||
"settings": "Settings",
|
||||
"share": "Share",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Shuffle",
|
||||
"sort": "Sort",
|
||||
"sort-alphabetically": "Alphabetical",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Cook Mode",
|
||||
"link-ingredients": "Link Ingredients",
|
||||
"merge-above": "Merge Above",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reset Scale",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import Summary",
|
||||
"partial-backup": "Partial Backup",
|
||||
"unable-to-delete-backup": "Unable to Delete Backup.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
"database-url": "URL de base de datos",
|
||||
"default-group": "Grupo Predeterminado",
|
||||
"demo": "Versión Demo",
|
||||
"demo-status": "Estado Demo",
|
||||
"demo-status": "Modo Demo",
|
||||
"development": "Desarrollo",
|
||||
"docs": "Documentación",
|
||||
"download-log": "Descargar Log",
|
||||
"download-recipe-json": "Último JSON recuperado",
|
||||
"download-recipe-json": "Último JSON extraído",
|
||||
"github": "Github",
|
||||
"log-lines": "Líneas de registro",
|
||||
"not-demo": "No Demo",
|
||||
@@ -33,7 +33,7 @@
|
||||
"pdf": "PDF",
|
||||
"recipe": "Receta",
|
||||
"show-assets": "Mostrar recursos",
|
||||
"error-submitting-form": "Se ha producido un error al enviar el formulario"
|
||||
"error-submitting-form": "Error al enviar el formulario"
|
||||
},
|
||||
"category": {
|
||||
"categories": "Categorías",
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Eventos de receta"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Cancelar",
|
||||
"clear": "Eliminar",
|
||||
"close": "Cerrar",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Guardar",
|
||||
"settings": "Ajustes",
|
||||
"share": "Compartir",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Aleatorio",
|
||||
"sort": "Ordenar",
|
||||
"sort-alphabetically": "Alfabéticamente",
|
||||
@@ -200,7 +202,7 @@
|
||||
"created-on-date": "Creado el {0}",
|
||||
"unsaved-changes": "Tienes cambios sin guardar. ¿Quieres guardar antes de salir? Aceptar para guardar, Cancelar para descartar cambios.",
|
||||
"clipboard-copy-failure": "No se pudo copiar al portapapeles.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "¿Estás seguro que quieres eliminar los siguientes elementos?"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Por favor, confirma que deseas eliminar <b>{groupName}<b/>",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Modo Cocinar",
|
||||
"link-ingredients": "Vincular ingredientes",
|
||||
"merge-above": "Combinar por encima",
|
||||
"move-to-bottom": "Mover al fondo",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reiniciar",
|
||||
"decrease-scale-label": "Disminuir escala en 1",
|
||||
"increase-scale-label": "Aumentar escala en 1",
|
||||
@@ -599,9 +603,9 @@
|
||||
"import-summary": "Importar resumen",
|
||||
"partial-backup": "Copia de seguridad parcial",
|
||||
"unable-to-delete-backup": "No se puede eliminar la copia de seguridad.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Restaurar Copia de Seguridad",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"back-restore-description": "Restaurar esta copia de seguridad sobrescribirá todos los datos actuales de su base de datos y del directorio de datos y los sustituirá por el contenido de esta copia. {cannot-be-undone} Si la restauración se realiza correctamente, se cerrará su sesión.",
|
||||
"cannot-be-undone": "Esta acción no se puede deshacer, use con precaución.",
|
||||
"postgresql-note": "Si estás usando PostGreSQL, por favor revisa el {backup-restore-process} antes de restaurar.",
|
||||
"backup-restore-process-in-the-documentation": "copia de seguridad/proceso de restauración en la documentación",
|
||||
@@ -723,7 +727,7 @@
|
||||
"ldap-ready": "LDAP Listo",
|
||||
"ldap-ready-error-text": "No todos los valores LDAP están configurados. Esto puede ignorarse si no está usando autenticación LDAP.",
|
||||
"ldap-ready-success-text": "Las variables LDAP requeridas están todas definidas.",
|
||||
"build": "Compilar",
|
||||
"build": "Compilación",
|
||||
"recipe-scraper-version": "Versión de Analizador de Recetas"
|
||||
},
|
||||
"shopping-list": {
|
||||
@@ -962,9 +966,9 @@
|
||||
"settings-chosen-explanation": "Los ajustes seleccionados aquí, excluyendo la opción bloqueada, se aplicarán a todas las recetas seleccionadas.",
|
||||
"selected-length-recipe-s-settings-will-be-updated": "Se actualizarán los ajustes de {count} receta(s).",
|
||||
"recipe-data": "Datos de la receta",
|
||||
"recipe-data-description": "Use this section to manage the data associated with your recipes. You can perform several bulk actions on your recipes including exporting, deleting, tagging, and assigning categories.",
|
||||
"recipe-columns": "Recipe Columns",
|
||||
"data-exports-description": "This section provides links to available exports that are ready to download. These exports do expire, so be sure to grab them while they're still available.",
|
||||
"recipe-data-description": "Utiliza esta sección para gestionar los datos asociados a tus recetas. Puedes realizar varias acciones de forma masiva en tus recetas, como exportar, eliminar, etiquetar y asignar categorías.",
|
||||
"recipe-columns": "Columnas de Recetas",
|
||||
"data-exports-description": "Esta sección proporciona enlaces a las exportaciones disponibles listas para descargar. Estas exportaciones caducan, así que asegúrate de descargarlas mientras estén disponibles.",
|
||||
"data-exports": "Exportación de datos",
|
||||
"tag": "Etiqueta",
|
||||
"categorize": "Clasificar",
|
||||
@@ -973,14 +977,14 @@
|
||||
"categorize-recipes": "Categorizar recetas",
|
||||
"export-recipes": "Exportar recetas",
|
||||
"delete-recipes": "Borrar Recetas",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
"source-unit-will-be-deleted": "Se eliminará la unidad de origen"
|
||||
},
|
||||
"create-alias": "Crear un Alias",
|
||||
"manage-aliases": "Administrar Alias",
|
||||
"seed-data": "Datos de ejemplo",
|
||||
"seed": "Semilla",
|
||||
"data-management": "Data Management",
|
||||
"data-management-description": "Select which data set you want to make changes to.",
|
||||
"data-management": "Gestión de Datos",
|
||||
"data-management-description": "Selecciona el conjunto de datos al que deseas hacer cambios.",
|
||||
"select-data": "Seleccionar datos",
|
||||
"select-language": "Seleccionar idioma",
|
||||
"columns": "Columnas",
|
||||
@@ -1003,7 +1007,7 @@
|
||||
},
|
||||
"user-registration": {
|
||||
"user-registration": "Registro de usuario",
|
||||
"registration-success": "Registration Success",
|
||||
"registration-success": "Registrado con éxito",
|
||||
"join-a-group": "Unirse a un grupo",
|
||||
"create-a-new-group": "Crear un grupo nuevo",
|
||||
"provide-registration-token-description": "Por favor, proporcione el token de registro asociado con el grupo al que desea unirse. Necesitará obtenerlo de un miembro del grupo.",
|
||||
@@ -1050,57 +1054,57 @@
|
||||
},
|
||||
"ocr-editor": {
|
||||
"ocr-editor": "Editor de OCR",
|
||||
"toolbar": "Toolbar",
|
||||
"toolbar": "Barra de Herramientas",
|
||||
"selection-mode": "Modo de selección",
|
||||
"pan-and-zoom-picture": "Desplazar y hacer zoom en la imagen",
|
||||
"split-text": "Split text",
|
||||
"preserve-line-breaks": "Preserve original line breaks",
|
||||
"split-by-block": "Split by text block",
|
||||
"flatten": "Flatten regardless of original formating",
|
||||
"split-text": "Dividir texto",
|
||||
"preserve-line-breaks": "Mantener los saltos de línea originales",
|
||||
"split-by-block": "División por bloques de texto",
|
||||
"flatten": "Acoplar independientemente del formato original",
|
||||
"help": {
|
||||
"help": "Help",
|
||||
"mouse-modes": "Mouse modes",
|
||||
"selection-mode": "Selection Mode (default)",
|
||||
"selection-mode-desc": "The selection mode is the main mode that can be used to enter data:",
|
||||
"help": "Ayuda",
|
||||
"mouse-modes": "Modos de ratón",
|
||||
"selection-mode": "Modo selección (por defecto)",
|
||||
"selection-mode-desc": "El modo de selección es el modo principal que puede utilizarse para introducir datos:",
|
||||
"selection-mode-steps": {
|
||||
"draw": "Draw a rectangle on the text you want to select.",
|
||||
"draw": "Dibuja un rectángulo sobre el texto que deseas seleccionar.",
|
||||
"click": "Click on any field on the right and then click back on the rectangle above the image.",
|
||||
"result": "The selected text will appear inside the previously selected field."
|
||||
},
|
||||
"pan-and-zoom-mode": "Pan and Zoom Mode",
|
||||
"pan-and-zoom-mode": "Modo Panorámico y Zoom",
|
||||
"pan-and-zoom-desc": "Select pan and zoom by clicking the icon. This mode allows to zoom inside the image and move around to make using big images easier.",
|
||||
"split-text-mode": "Split Text modes",
|
||||
"split-text-mode": "Modos de división de texto",
|
||||
"split-modes": {
|
||||
"line-mode": "Line mode (default)",
|
||||
"line-mode": "Modo de línea (por defecto)",
|
||||
"line-mode-desc": "In line mode, the text will be propagated by keeping the original line breaks. This mode is useful when using bulk add on a list of ingredients where one ingredient is one line.",
|
||||
"block-mode": "Block mode",
|
||||
"block-mode-desc": "In block mode, the text will be split in blocks. This mode is useful when bulk adding instructions that are usually written in paragraphs.",
|
||||
"flat-mode": "Flat mode",
|
||||
"flat-mode-desc": "In flat mode, the text will be added to the selected recipe field with no line breaks."
|
||||
"block-mode": "Modo en bloque",
|
||||
"block-mode-desc": "En el modo de bloque, el texto se dividirá en bloques. Este modo es útil cuando se agregan instrucciones que están escritas en párrafos.",
|
||||
"flat-mode": "Modo texto sin formato",
|
||||
"flat-mode-desc": "En modo texto sin formato, el texto se añadirá al campo de la receta seleccionado sin saltos de línea."
|
||||
}
|
||||
}
|
||||
},
|
||||
"admin": {
|
||||
"maintenance": {
|
||||
"storage-details": "Storage Details",
|
||||
"page-title": "Site Maintenance",
|
||||
"summary-title": "Summary",
|
||||
"button-label-get-summary": "Get Summary",
|
||||
"storage-details": "Detalle del almacenamiento",
|
||||
"page-title": "Mantenimiento del sitio",
|
||||
"summary-title": "Índice",
|
||||
"button-label-get-summary": "Obtener Resumen",
|
||||
"button-label-open-details": "Detalles",
|
||||
"info-description-data-dir-size": "Data Directory Size",
|
||||
"info-description-log-file-size": "Log File Size",
|
||||
"info-description-cleanable-directories": "Cleanable Directories",
|
||||
"info-description-cleanable-images": "Cleanable Images",
|
||||
"info-description-data-dir-size": "Tamaño del directorio de datos",
|
||||
"info-description-log-file-size": "Tamaño del archivo de registro",
|
||||
"info-description-cleanable-directories": "Directorios eliminables",
|
||||
"info-description-cleanable-images": "Imágenes eliminables",
|
||||
"storage": {
|
||||
"title-temporary-directory": "Directorio temporal (.temp)",
|
||||
"title-backups-directory": "Backups Directory (backups)",
|
||||
"title-groups-directory": "Groups Directory (groups)",
|
||||
"title-recipes-directory": "Recipes Directory (recipes)",
|
||||
"title-user-directory": "User Directory (user)"
|
||||
"title-backups-directory": "Directorio de Copias de Seguridad (respaldos)",
|
||||
"title-groups-directory": "Directorio de Grupos (grupos)",
|
||||
"title-recipes-directory": "Directorio de Recetas (recetas)",
|
||||
"title-user-directory": "Directorio de usuario (usuario)"
|
||||
},
|
||||
"action-delete-log-files-name": "Delete Log Files",
|
||||
"action-delete-log-files-description": "Deletes all the log files",
|
||||
"action-clean-directories-name": "Clean Directories",
|
||||
"action-delete-log-files-name": "Borrar archivos de registro",
|
||||
"action-delete-log-files-description": "Elimina todos los archivos de registro",
|
||||
"action-clean-directories-name": "Limpiar directorios",
|
||||
"action-clean-directories-description": "Removes all the recipe folders that are not valid UUIDs",
|
||||
"action-clean-temporary-files-name": "Eliminar archivos temporales",
|
||||
"action-clean-temporary-files-description": "Eliminar todos los archivos y carpetas del directorio .temp",
|
||||
@@ -1119,8 +1123,8 @@
|
||||
"ingredients-natural-language-processor": "Ingredients Natural Language Processor",
|
||||
"ingredients-natural-language-processor-explanation": "Mealie uses Conditional Random Fields (CRFs) for parsing and processing ingredients. The model used for ingredients is based off a data set of over 100,000 ingredients from a dataset compiled by the New York Times. Note that as the model is trained in English only, you may have varied results when using the model in other languages. This page is a playground for testing the model.",
|
||||
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
|
||||
"nlp": "NLP",
|
||||
"brute": "Brute",
|
||||
"nlp": "PLN",
|
||||
"brute": "En bruto",
|
||||
"show-individual-confidence": "Mostrar confianza individual",
|
||||
"ingredient-text": "Texto del ingrediente",
|
||||
"average-confident": "{0} Confianza",
|
||||
@@ -1148,31 +1152,31 @@
|
||||
"user-settings-description": "Administrar preferencias, cambiar contraseña y actualizar correo electrónico",
|
||||
"api-tokens-description": "Administra tus API Tokens para acceder desde aplicaciones externas",
|
||||
"group-description": "These items are shared within your group. Editing one of them will change it for the whole group!",
|
||||
"group-settings": "Group Settings",
|
||||
"group-settings": "Ajustes de grupo",
|
||||
"group-settings-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
"cookbooks-description": "Manage a collection of recipe categories and generate pages for them.",
|
||||
"members": "Members",
|
||||
"members-description": "See who's in your group and manage their permissions.",
|
||||
"members": "Miembros",
|
||||
"members-description": "Ver quién está en tu grupo y administrar sus permisos.",
|
||||
"webhooks-description": "Setup webhooks that trigger on days that you have have mealplan scheduled.",
|
||||
"notifiers": "Notifiers",
|
||||
"notifiers": "Notificaciones",
|
||||
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
|
||||
"manage-data": "Manage Data",
|
||||
"manage-data-description": "Manage your Food and Units (more options coming soon)",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"email-sent": "Email Sent",
|
||||
"error-sending-email": "Error Sending Email",
|
||||
"personal-information": "Personal Information",
|
||||
"preferences": "Preferences",
|
||||
"show-advanced-description": "Show advanced features (API Keys, Webhooks, and Data Management)",
|
||||
"back-to-profile": "Back to Profile",
|
||||
"looking-for-privacy-settings": "Looking for Privacy Settings?",
|
||||
"manage-your-api-tokens": "Manage Your API Tokens",
|
||||
"manage-user-profile": "Manage User Profile",
|
||||
"manage-cookbooks": "Manage Cookbooks",
|
||||
"manage-data": "Administrar datos",
|
||||
"manage-data-description": "Administra tu Comida y Unidades (próximamente más opciones)",
|
||||
"data-migrations": "Migración de datos",
|
||||
"data-migrations-description": "Migrar tus datos existentes de otras aplicaciones como Nextcloud Recipes y Chowdown",
|
||||
"email-sent": "Email enviado",
|
||||
"error-sending-email": "Error enviando email",
|
||||
"personal-information": "Datos Personales",
|
||||
"preferences": "Preferencias",
|
||||
"show-advanced-description": "Mostrar características avanzadas (API Keys, Webhooks y Gestión de Datos)",
|
||||
"back-to-profile": "Volver al perfil",
|
||||
"looking-for-privacy-settings": "¿Buscas los ajustes de privacidad?",
|
||||
"manage-your-api-tokens": "Gestiona tus API tokens",
|
||||
"manage-user-profile": "Administrar Perfil de Usuario",
|
||||
"manage-cookbooks": "Administrar Recetario",
|
||||
"manage-members": "Gestionar miembros",
|
||||
"manage-webhooks": "Manage Webhooks",
|
||||
"manage-notifiers": "Manage Notifiers",
|
||||
"manage-webhooks": "Gestionar Webhooks",
|
||||
"manage-notifiers": "Administrar Notificadores",
|
||||
"manage-data-migrations": "Administrar Migraciones de Datos"
|
||||
},
|
||||
"cookbook": {
|
||||
@@ -1187,7 +1191,7 @@
|
||||
"require-all-tools": "Requiere todos los utensilios",
|
||||
"cookbook-name": "Nombre del recetario",
|
||||
"cookbook-with-name": "Recetario {0}",
|
||||
"create-a-cookbook": "Create a Cookbook",
|
||||
"cookbook": "Cookbook"
|
||||
"create-a-cookbook": "Crear Recetario",
|
||||
"cookbook": "Recetario"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Peruuta",
|
||||
"clear": "Tyhjennä",
|
||||
"close": "Sulje",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Tallenna",
|
||||
"settings": "Asetukset",
|
||||
"share": "Jaa",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Sekoita",
|
||||
"sort": "Järjestä",
|
||||
"sort-alphabetically": "Aakkosjärjestyksessä",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Kokkitila",
|
||||
"link-ingredients": "Linkitä Ainesosat",
|
||||
"merge-above": "Yhdistä Yläpuolelle",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Palauta skaala",
|
||||
"decrease-scale-label": "Vähennä mittakaavaa yhdellä",
|
||||
"increase-scale-label": "Suurenna mittakaavaa yhdellä",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Tuo yhteenveto",
|
||||
"partial-backup": "Osittainen varmuuskopiointi",
|
||||
"unable-to-delete-backup": "Varmuuskopiota ei voi poistaa.",
|
||||
"experimental-description": "Varmuuskopiot ovat kokonaisia tilannekuvia sivuston tietokannasta ja tietohakemistosta. Tämä sisältää kaikki tiedot, eikä sitä voida asettaa sulkemaan pois tietojen osajoukkoja. Voit ajatella tätä tilannekuvana Mealiesta tiettynä ajankohtana. Nämä toimivat tietokannan agnostisena tapana viedä ja tuoda tietoja tai varmuuskopioida sivusto ulkoiseen sijaintiin.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Varmuuskopion palautus",
|
||||
"back-restore-description": "Tämän varmuuskopion palauttaminen korvaa kaikki tietokannassasi ja tietokannassasi olevat tiedot ja korvaa ne tämän varmuuskopion sisällöllä. {cannot-be-undone} Jos palautus onnistuu, sinut kirjataan ulos.",
|
||||
"cannot-be-undone": "Tätä toimintoa ei voi kumota - käytä varoen.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Événements de recette"
|
||||
},
|
||||
"general": {
|
||||
"add": "Ajouter",
|
||||
"cancel": "Annuler",
|
||||
"clear": "Effacer",
|
||||
"close": "Fermer",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Sauvegarder",
|
||||
"settings": "Paramètres",
|
||||
"share": "Partager",
|
||||
"show-all": "Tout afficher",
|
||||
"shuffle": "Mélanger",
|
||||
"sort": "Trier",
|
||||
"sort-alphabetically": "Alphabétique",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Mode Cuisine",
|
||||
"link-ingredients": "Ingrédients du lien",
|
||||
"merge-above": "Fusionner avec au-dessus",
|
||||
"move-to-bottom": "Déplacer à la fin",
|
||||
"move-to-top": "Déplacer au début",
|
||||
"reset-scale": "Réinitialiser échelle",
|
||||
"decrease-scale-label": "Diminuer l'échelle de 1",
|
||||
"increase-scale-label": "Augmenter l'échelle de 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Résumé de l'importation",
|
||||
"partial-backup": "Sauvegarde partielle",
|
||||
"unable-to-delete-backup": "Impossible de supprimer la sauvegarde.",
|
||||
"experimental-description": "Sauvegarde une photo complète de la base de données et du répertoire de données du site. Cela inclut toutes les données et ne peut pas être configuré pour exclure des sous-ensembles de données. C'est un peu comme une photo de Mealie à un instant précis. Actuellement, {not-crossed-version} (les migrations de données ne sont pas effectuées automatiquement). Il s'agit d'un moyen indépendant de la base de données pour exporter et importer des données ou de sauvegarder le site vers un emplacement externe.",
|
||||
"experimental-description": "Les sauvegardes sont des instantanés complets de la base de données et du répertoire de données du site. Cela inclue toutes les données et il n’est pas possible d’en exclure un sous-ensemble. Vous pouvez le voir comme un instantané de Mealie à un temps donné. Cela peut servir de moyen d’importer et d’exporter les données indépendamment du moteur de base de données, ou bien de sauvegarder le site vers un emplacement externe.",
|
||||
"backup-restore": "Restaurer la sauvegarde",
|
||||
"back-restore-description": "La restauration de cette sauvegarde écrasera toutes les données actuelles dans votre base de données et dans le répertoire de données et les remplacera par le contenu de cette sauvegarde. {cannot-be-undone} Si la restauration est réussie, vous serez déconnecté.",
|
||||
"cannot-be-undone": "Cette action ne peut pas être annulée - à utiliser avec prudence.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Événements de recette"
|
||||
},
|
||||
"general": {
|
||||
"add": "Ajouter",
|
||||
"cancel": "Annuler",
|
||||
"clear": "Effacer",
|
||||
"close": "Fermer",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Sauvegarder",
|
||||
"settings": "Paramètres",
|
||||
"share": "Partager",
|
||||
"show-all": "Tout afficher",
|
||||
"shuffle": "Aléatoire",
|
||||
"sort": "Trier",
|
||||
"sort-alphabetically": "Alphabétique",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Mode Cuisine",
|
||||
"link-ingredients": "Lier des ingrédients",
|
||||
"merge-above": "Fusionner avec au-dessus",
|
||||
"move-to-bottom": "Déplacer à la fin",
|
||||
"move-to-top": "Déplacer au début",
|
||||
"reset-scale": "Rétablir l’échelle par défaut",
|
||||
"decrease-scale-label": "Diminuer l’échelle de 1",
|
||||
"increase-scale-label": "Augmenter l’échelle de 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Résumé de l’importation",
|
||||
"partial-backup": "Sauvegarde partielle",
|
||||
"unable-to-delete-backup": "Impossible de supprimer la sauvegarde.",
|
||||
"experimental-description": "Sauvegarde une photo complète de la base de données et du répertoire de données du site. Cela inclut toutes les données et ne peut pas être configuré pour exclure des sous-ensembles de données. C'est un peu comme une photo de Mealie à un instant précis. Actuellement, {not-crossed-version} (les migrations de données ne sont pas effectuées automatiquement). Il s'agit d'un moyen indépendant de la base de données pour exporter et importer des données ou de sauvegarder le site vers un emplacement externe.",
|
||||
"experimental-description": "Les sauvegardes sont des instantanés complets de la base de données et du répertoire de données du site. Cela inclue toutes les données et il n’est pas possible d’en exclure un sous-ensemble. Vous pouvez le voir comme un instantané de Mealie à un temps donné. Cela peut servir de moyen d’importer et d’exporter les données indépendamment du moteur de base de données, ou bien de sauvegarder le site vers un emplacement externe.",
|
||||
"backup-restore": "Restaurer la sauvegarde",
|
||||
"back-restore-description": "La restauration de cette sauvegarde écrasera toutes les données actuelles dans votre base de données et dans le répertoire de données et les remplacera par le contenu de cette sauvegarde. {cannot-be-undone} Si la restauration est réussie, vous serez déconnecté.",
|
||||
"cannot-be-undone": "Cette action ne peut pas être annulée - à utiliser avec prudence.",
|
||||
@@ -1187,7 +1191,7 @@
|
||||
"require-all-tools": "Nécessite tous les ustensiles",
|
||||
"cookbook-name": "Nom du livre de recettes",
|
||||
"cookbook-with-name": "Livre de recettes {0}",
|
||||
"create-a-cookbook": "Create a Cookbook",
|
||||
"cookbook": "Cookbook"
|
||||
"create-a-cookbook": "Créer un livre de cuisine",
|
||||
"cookbook": "Livre de recettes"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Cancel",
|
||||
"clear": "Clear",
|
||||
"close": "Close",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Gardar",
|
||||
"settings": "Axustes",
|
||||
"share": "Compartir",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Barallar",
|
||||
"sort": "Ordenar",
|
||||
"sort-alphabetically": "Alfabético",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Cook Mode",
|
||||
"link-ingredients": "Link Ingredients",
|
||||
"merge-above": "Merge Above",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reset Scale",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import Summary",
|
||||
"partial-backup": "Partial Backup",
|
||||
"unable-to-delete-backup": "Unable to Delete Backup.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "אירועי מתכון"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "ביטול",
|
||||
"clear": "נקה",
|
||||
"close": "סגירה",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "שמירה",
|
||||
"settings": "הגדרות",
|
||||
"share": "שיתוף",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "אקראי",
|
||||
"sort": "מיון",
|
||||
"sort-alphabetically": "א-ת",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "מצב בישול",
|
||||
"link-ingredients": "קשר בין רכיבים",
|
||||
"merge-above": "מזג למעלה",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "איפוס קנה המידה",
|
||||
"decrease-scale-label": "הורד קנה מידה ב-1",
|
||||
"increase-scale-label": "העלה קנה מידה ב-1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "ייבא תקציר",
|
||||
"partial-backup": "גיבוי חלקי",
|
||||
"unable-to-delete-backup": "לא ניתן למחוק גיבוי.",
|
||||
"experimental-description": "גיבויים, סנאפשוט מלא של מלא של מסד הנתונים והסיפריות באתר. הגיבוי מכיל את כל המידע ולא ניתן להסיר מידע מהגיבוי. ניתן להתייחס לגיבוי כסנאפשוט של מילי בזמן ספציפי. כרגע {not-crossed-version} (מיגרציית נתונים לא מתבצעות אוטומטית). הם מאפשרים לייבא, לייצא ולגבות את האתר למקום חיצוני.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "גיבוי / שחזור",
|
||||
"back-restore-description": "שחזור מגיבוי זה ידרוס את המידע הקיים במסד הנתונים ובספריות האתר ויחליף אותם בזה הקיים בגיבוי. {cannot-be-undone} אם השחזור יצליח, המשתמש ינותק מהמערכת.",
|
||||
"cannot-be-undone": "פעולה זו לא בלתי הפיכה - השתמש בזהירות.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Odustani",
|
||||
"clear": "Očisti",
|
||||
"close": "Zatvori",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Spremi",
|
||||
"settings": "Postavke",
|
||||
"share": "Podijeli",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Nasumično",
|
||||
"sort": "Sortiraj",
|
||||
"sort-alphabetically": "Abecedno",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Način Kuhanja",
|
||||
"link-ingredients": "Poveži Sastojke",
|
||||
"merge-above": "Spoji prethodni korak",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Vrati skaliranje na stare postavke",
|
||||
"decrease-scale-label": "Smanji skaliranje za 1",
|
||||
"increase-scale-label": "Povećaj skaliranje za 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Uvoz sažetka",
|
||||
"partial-backup": "Djelomična sigurnosna kopija",
|
||||
"unable-to-delete-backup": "Ne Mogu Obrisati Sigurnosnu Kopiju.",
|
||||
"experimental-description": "Sigurnosna kopija predstavlja snimak baze podataka i direktorija podataka web stranice. To uključuje sve podatke i ne može se postaviti da isključuje podskupove podataka. Možete zamisliti sigurnosnu kopiju kao snimak Mealieja u određenom trenutku. Trenutno, verzije {not-crossed-version} (migracija podataka se ne izvode automatski). Sigurnosne kopije služe kao način izvoza i uvoza podataka ili za sigurnosno kopiranje web mjesta na vanjsku lokaciju.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Sigurnosno kopiranje/vraćanje",
|
||||
"back-restore-description": "Vraćanje ove sigurnosne kopije će prepisati sve trenutne podatke u vašoj bazi podataka i direktoriju podataka i zamijeniti ih sadržajem ove sigurnosne kopije. Ova radnja je {ne-može-se-povratiti}. Ako se vraćanje uspješno izvrši, bit ćete odjavljeni iz sustava.",
|
||||
"cannot-be-undone": "Ova radnja ne može se poništiti - koristite je oprezno.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recept esemény"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Mégsem",
|
||||
"clear": "Törlés",
|
||||
"close": "Bezár",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Mentés",
|
||||
"settings": "Beállítások",
|
||||
"share": "Megosztás",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Véletlenszerű",
|
||||
"sort": "Rendezés",
|
||||
"sort-alphabetically": "Betűrendben",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Főzési mód",
|
||||
"link-ingredients": "Hozzávalók összekapcsolása",
|
||||
"merge-above": "Összevonás a fentivel",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Skála alaphelyzetbe állítása",
|
||||
"decrease-scale-label": "Skála csökkentése 1-gyel",
|
||||
"increase-scale-label": "Skála növelése 1-gyel",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import összefoglaló",
|
||||
"partial-backup": "Részleges biztonsági mentés",
|
||||
"unable-to-delete-backup": "Nem lehetett létrehozni a biztonsági mentést.",
|
||||
"experimental-description": "A biztonsági mentések az oldal adatbázisának és adatkönyvtárának teljes pillanatfelvételei. Ez az összes adatot tartalmazza, és nem lehet beállítani, hogy az adatok részhalmazait kizárja. Ezt úgy is elképzelheti, mint a Mealie egy adott időpontban készült pillanatfelvételét. Ezek adatbázis-független módon szolgálnak az adatok exportálására és importálására, vagy a webhely külső helyre történő mentésére.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Biztonsági Mentés/Visszaállítás",
|
||||
"back-restore-description": "A biztonsági mentés visszaállítása felülírja az adatbázisban és az adatkönyvtárban lévő összes aktuális adatot, és a biztonsági mentés tartalmával helyettesíti azokat. {cannot-be-undone} Ha a visszaállítás sikeres, akkor a rendszer kilépteti Önt.",
|
||||
"cannot-be-undone": "Ezt a műveletet visszavonható - óvatosan használja.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Cancel",
|
||||
"clear": "Clear",
|
||||
"close": "Close",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Save",
|
||||
"settings": "Settings",
|
||||
"share": "Share",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Shuffle",
|
||||
"sort": "Sort",
|
||||
"sort-alphabetically": "Alphabetical",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Cook Mode",
|
||||
"link-ingredients": "Link Ingredients",
|
||||
"merge-above": "Merge Above",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reset Scale",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import Summary",
|
||||
"partial-backup": "Partial Backup",
|
||||
"unable-to-delete-backup": "Unable to Delete Backup.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Eventi di ricette"
|
||||
},
|
||||
"general": {
|
||||
"add": "Aggiungi",
|
||||
"cancel": "Cancella",
|
||||
"clear": "Resetta",
|
||||
"close": "Chiudi",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Salva",
|
||||
"settings": "Impostazioni",
|
||||
"share": "Condividi",
|
||||
"show-all": "Mostra tutto",
|
||||
"shuffle": "Casuale",
|
||||
"sort": "Ordina",
|
||||
"sort-alphabetically": "Alfabetico",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Modalità di Cottura",
|
||||
"link-ingredients": "Link Ingredienti",
|
||||
"merge-above": "Unisci Sopra",
|
||||
"move-to-bottom": "Sposta in fondo",
|
||||
"move-to-top": "Sposta in cima",
|
||||
"reset-scale": "Ripristina la Scala",
|
||||
"decrease-scale-label": "Riduci la Scala di 1",
|
||||
"increase-scale-label": "Aumenta la scala di 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Importa Riepilogo",
|
||||
"partial-backup": "Backup Parziale",
|
||||
"unable-to-delete-backup": "Impossibile rimuovere backup.",
|
||||
"experimental-description": "Esegue il backup di un'istantanea totale del database e della directory dati del sito. Questo include tutti i dati e non può essere impostato per escludere sottoinsiemi di dati. Si può pensare a questo come un'istantanea di Mealie in un momento specifico. Attualmente, {not-crossed-version} (le migrazioni dei dati non sono effettuate automaticamente). Questi servono come modo indipendente dal database per esportare e importare i dati o il backup del sito in una posizione esterna.",
|
||||
"experimental-description": "I backup sono immagini complete del database e della cartella dati del sito. Questo include tutti i dati e non è possibile escluderne alcune. Puoi pensare a questo come un'immagine vera e propria di Mealie a uno specifico orario. Questo funge da metodo agnostico per esportare e importare database e relativi dati, o per fare un backup del sito in una posizione esterna.",
|
||||
"backup-restore": "Ripristina backup",
|
||||
"back-restore-description": "Il ripristino di questo backup sovrascriverà tutti i dati correnti nel database e nella directory dei dati e li sostituirà con il contenuto di questo backup. {cannot-be-undone} Se il ripristino avrà successo, sarai disconnesso.",
|
||||
"cannot-be-undone": "Questa azione non può essere annullata - usa con cautela.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "キャンセル",
|
||||
"clear": "クリア",
|
||||
"close": "閉じる",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "保存",
|
||||
"settings": "設定",
|
||||
"share": "共有",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "シャッフル",
|
||||
"sort": "並べ換え",
|
||||
"sort-alphabetically": "Alphabetical",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Cook Mode",
|
||||
"link-ingredients": "Link Ingredients",
|
||||
"merge-above": "Merge Above",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reset Scale",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import Summary",
|
||||
"partial-backup": "Partial Backup",
|
||||
"unable-to-delete-backup": "Unable to Delete Backup.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Cancel",
|
||||
"clear": "Clear",
|
||||
"close": "Close",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "저장",
|
||||
"settings": "설정",
|
||||
"share": "공유",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "섞기",
|
||||
"sort": "정렬",
|
||||
"sort-alphabetically": "알파벳순",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Cook Mode",
|
||||
"link-ingredients": "Link Ingredients",
|
||||
"merge-above": "Merge Above",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reset Scale",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import Summary",
|
||||
"partial-backup": "Partial Backup",
|
||||
"unable-to-delete-backup": "Unable to Delete Backup.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Atšaukti",
|
||||
"clear": "Išvalyti",
|
||||
"close": "Uždaryti",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Išsaugoti",
|
||||
"settings": "Nustatymai",
|
||||
"share": "Dalintis",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Maišyti",
|
||||
"sort": "Rikiavimas",
|
||||
"sort-alphabetically": "Pagal abėcėlę",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Gaminimo režimas",
|
||||
"link-ingredients": "Susieti ingredientus",
|
||||
"merge-above": "Sujungti su ankstesniu",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Atstatyti mastelį",
|
||||
"decrease-scale-label": "Sumažinti mastelį 1 k.",
|
||||
"increase-scale-label": "Padidinti mastelį 1 k.",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Įkėlimo santrauka",
|
||||
"partial-backup": "Dalinė atsarginė kopija",
|
||||
"unable-to-delete-backup": "Nepavyko ištrinti atsarginės kopijos.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Atkurti iš atsarginės kopijos",
|
||||
"back-restore-description": "Atkūrimas ištrina visus šiuo metu duomenų bazėje ir duomenų archyve esančius duomenis ir perrašo juos į duomenis iš atsarginės kopijos. {cannot-be-undone} Jei atkūrimas bus sėkmingas, būsite atjungti nuo savo paskyros.",
|
||||
"cannot-be-undone": "Atsargiai - šis veiksmas negrįžtamas.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Cancel",
|
||||
"clear": "Clear",
|
||||
"close": "Close",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Save",
|
||||
"settings": "Settings",
|
||||
"share": "Share",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Shuffle",
|
||||
"sort": "Sort",
|
||||
"sort-alphabetically": "Alphabetical",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Cook Mode",
|
||||
"link-ingredients": "Link Ingredients",
|
||||
"merge-above": "Merge Above",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reset Scale",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import Summary",
|
||||
"partial-backup": "Partial Backup",
|
||||
"unable-to-delete-backup": "Unable to Delete Backup.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recept gebeurtenissen"
|
||||
},
|
||||
"general": {
|
||||
"add": "Voeg toe",
|
||||
"cancel": "Annuleren",
|
||||
"clear": "Wissen",
|
||||
"close": "Sluiten",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Opslaan",
|
||||
"settings": "Instellingen",
|
||||
"share": "Delen",
|
||||
"show-all": "Laat alles zien",
|
||||
"shuffle": "Willekeurig",
|
||||
"sort": "Sorteren",
|
||||
"sort-alphabetically": "Alfabetisch",
|
||||
@@ -200,7 +202,7 @@
|
||||
"created-on-date": "Gemaakt op {0}",
|
||||
"unsaved-changes": "Er zijn niet-opgeslagen wijzigingen. Wil je eerst opslaan voordat je vertrekt? Okay om op te slaan, Annuleren om wijzigingen ongedaan te maken.",
|
||||
"clipboard-copy-failure": "Kopiëren naar klembord mislukt.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Weet u zeker dat u de volgende items wilt verwijderen?"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Weet je zeker dat je <b>{groupName}<b/> wil verwijderen?",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Kookmodus",
|
||||
"link-ingredients": "Koppel ingrediënten",
|
||||
"merge-above": "Bovenstaande samenvoegen",
|
||||
"move-to-bottom": "Verplaats naar onderen",
|
||||
"move-to-top": "Verplaats naar begin",
|
||||
"reset-scale": "Schaal resetten",
|
||||
"decrease-scale-label": "Verlaag de schaal met 1",
|
||||
"increase-scale-label": "Verhoog de schaal met 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Samenvatting importeren",
|
||||
"partial-backup": "Gedeeltelijke back-up",
|
||||
"unable-to-delete-backup": "Kan back-up niet verwijderen.",
|
||||
"experimental-description": "Back-up maakt een momentopname van de database en data directory van de site. Dit omvat alle gegevens en kan niet worden ingesteld om subsets van gegevens uit te sluiten. Je kunt dit opvatten als een momentopname van Mealie. Deze dienen als een agnostische manier om gegevens te exporteren en importeren, of een backup van de site naar een externe locatie te maken.",
|
||||
"experimental-description": "Back-ups zijn een complete kopie van de database en de data map. Je kunt geen keuze maken wat wel of niet in de reservekopie zit. Het is een kopie van Mealie van dat moment. Je kunt de back-up gebruiken om data te importeren of exporteren. Of om de hele site op een andere plek te bewaren.",
|
||||
"backup-restore": "Back-up maken/terugzetten",
|
||||
"back-restore-description": "Het terugzetten van deze back-up overschrijft alle huidige gegevens in uw database en in de gegevensmap. {cannot-be-undone} Als het terugzetten is gelukt wordt u afgemeld.",
|
||||
"cannot-be-undone": "Deze actie kan niet ongedaan worden gemaakt - gebruik met voorzichtigheid.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Oppskriftshendelser"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Avbryt",
|
||||
"clear": "Tøm",
|
||||
"close": "Lukk",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Lagre",
|
||||
"settings": "Innstillinger",
|
||||
"share": "Del",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Tilfeldig rekkefølge",
|
||||
"sort": "Sortér",
|
||||
"sort-alphabetically": "Alfabetisk",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Tilberedelsesmodus",
|
||||
"link-ingredients": "Tilknytt ingredienser",
|
||||
"merge-above": "Slå sammen med steget over",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Nullstill skala",
|
||||
"decrease-scale-label": "Reduser skala med 1",
|
||||
"increase-scale-label": "Øk skala med 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Importer sammendrag",
|
||||
"partial-backup": "Delvis sikkerhetskopi",
|
||||
"unable-to-delete-backup": "Kan ikke slette sikkerhetskopi.",
|
||||
"experimental-description": "Sikkerhetskopier er komplette øyeblikksbilder av databasen og datamappen til nettstedet. Dette inkluderer all data og kan ikke settes til å ekskludere delsett av data. Du kan tenke på dette som et øyeblikksbilde av Mealie på et bestemt tidspunkt. Disse fungerer som en databasesystemuavhengig måte å eksportere og importere data på, eller sikkerhetskopiere nettstedet til en ekstern plassering.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Gjenoppretting av sikkerhetskopi",
|
||||
"back-restore-description": "Gjenoppretting av denne sikkerhetskopien vil overskrive alle gjeldende data i databasen og i datamappen og erstatte dem med innholdet i denne sikkerhetskopien. {cannot-be-undone} Hvis gjenopprettingen er vellykket, vil du bli logget ut.",
|
||||
"cannot-be-undone": "Denne handlingen kan ikke angres – bruk med forsiktighet.",
|
||||
|
||||
@@ -77,9 +77,10 @@
|
||||
"tag-events": "Zdarzenia tagów",
|
||||
"category-events": "Wydarzenia kategorii",
|
||||
"when-a-new-user-joins-your-group": "Kiedy nowy użytkownik dołączy do Twojej grupy",
|
||||
"recipe-events": "Recipe Events"
|
||||
"recipe-events": "Zdarzenia Przepisów"
|
||||
},
|
||||
"general": {
|
||||
"add": "Dodaj",
|
||||
"cancel": "Anuluj",
|
||||
"clear": "Wyczyść",
|
||||
"close": "Zamknij",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Zapisz",
|
||||
"settings": "Ustawienia",
|
||||
"share": "Udostępnij",
|
||||
"show-all": "Pokaż wszystko",
|
||||
"shuffle": "Pomieszaj",
|
||||
"sort": "Sortuj",
|
||||
"sort-alphabetically": "Alfabetyczne",
|
||||
@@ -199,8 +201,8 @@
|
||||
"upload-file": "Prześlij plik",
|
||||
"created-on-date": "Utworzono dnia: {0}",
|
||||
"unsaved-changes": "Masz niezapisane zmiany. Czy chcesz zapisać przed wyjściem? Ok, aby zapisać, Anuluj, żeby odrzucić zmiany.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"clipboard-copy-failure": "Nie udało się skopiować do schowka.",
|
||||
"confirm-delete-generic-items": "Czy na pewno chcesz usunąć następujące elementy?"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Czy na pewno chcesz usunąć <b>{groupName}<b/>?",
|
||||
@@ -478,7 +480,7 @@
|
||||
"recipe-added-to-mealplan": "Przepis dodany do planu posiłków",
|
||||
"failed-to-add-recipes-to-list": "Nie udało się dodać przepisu do listy",
|
||||
"failed-to-add-recipe-to-mealplan": "Nie udało się dodać przepisu do planu posiłków",
|
||||
"failed-to-add-to-list": "Failed to add to list",
|
||||
"failed-to-add-to-list": "Nie udało się dodać do listy",
|
||||
"yield": "Wydajność",
|
||||
"quantity": "Ilość",
|
||||
"choose-unit": "Wybierz jednostkę",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Tryb Gotowania",
|
||||
"link-ingredients": "Podłącz składniki",
|
||||
"merge-above": "Scal z powyższym",
|
||||
"move-to-bottom": "Przesuń na sam dół",
|
||||
"move-to-top": "Przesuń na samą górę",
|
||||
"reset-scale": "Zresetuj Skalę",
|
||||
"decrease-scale-label": "Zmniejsz Skalę o 1",
|
||||
"increase-scale-label": "Zwiększ Skalę o 1",
|
||||
@@ -537,8 +541,8 @@
|
||||
"new-recipe-names-must-be-unique": "Nazwa przepisu musi być unikalna",
|
||||
"scrape-recipe": "Scrapuj Przepis",
|
||||
"scrape-recipe-description": "Wczytaj przepis przez URL. Podaj adres URL witryny z przepisem, który chcesz wczytać, a Mealie spróbuje wyodrębnić przepis z tej strony i dodać go do kolekcji.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Masz mnóstwo przepisów, które chcesz zescrapować naraz?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Wypróbuj importer zbiorczy",
|
||||
"import-original-keywords-as-tags": "Importuj oryginalne słowa kluczowe jako tagi",
|
||||
"stay-in-edit-mode": "Pozostań w trybie edycji",
|
||||
"import-from-zip": "Importuj z pliku Zip",
|
||||
@@ -562,7 +566,7 @@
|
||||
"upload-image": "Prześlij obraz",
|
||||
"screen-awake": "Pozostaw ekran włączony",
|
||||
"remove-image": "Usuń obraz",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Następny krok"
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Wyszukiwanie zaawansowane",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Podsumowanie importu",
|
||||
"partial-backup": "Częściowa kopia zapasowa",
|
||||
"unable-to-delete-backup": "Nie można usunąć kopii zapasowej.",
|
||||
"experimental-description": "Kopia zapasowa wszystkich migawek bazy danych i katalogu danych witryny. Obejmuje to wszystkie dane i nie można ich ustawić, aby wykluczyć podzbiory danych. Możesz to pomyśleć o tym jako zrzut Mączki w określonym czasie. Obecnie {not-crossed-version} (migracje danych nie są wykonywane automatycznie). Służą one jako agnostyczny sposób eksportowania i importu danych lub tworzenia kopii zapasowej witryny do zewnętrznej lokalizacji.",
|
||||
"experimental-description": "Kopie zapasowe to całkowite zrzuty bazy danych i katalogu danych witryny. Obejmują one wszystkie dane i nie można nic ustawić, aby wykluczyć podzbiory danych. Traktuj je jako stan całego Mealie w określonym momencie czasu. Backupy to agnostyczny sposób eksportowania i importowania danych oraz sposób na zrobienie kopii witryny do zewnętrznej lokalizacji.",
|
||||
"backup-restore": "Przywróć kopie",
|
||||
"back-restore-description": "Przywracanie tej kopii zapasowej nadpisze wszystkie aktualne dane w bazie danych i w katalogu danych i zastąpi je zawartością tej kopii zapasowej. {cannot-be-undone} Jeśli przywrócenie zakończy się pomyślnie, zostaniesz wylogowany.",
|
||||
"cannot-be-undone": "Tej czynności nie można cofnąć - należy zachować ostrożność.",
|
||||
@@ -869,7 +873,7 @@
|
||||
"you-are-not-allowed-to-create-a-user": "Nie masz uprawnień do tworzenia użytkowników",
|
||||
"you-are-not-allowed-to-delete-this-user": "Nie masz uprawnień do usuwania użytkowników",
|
||||
"enable-advanced-content": "Włącz zaawansowane ustawienia",
|
||||
"enable-advanced-content-description": "Włącza funkcje zaawansowane takie jak skalowanie przepisów, klucze API, webhooki i zarządzanie danymi. Nie mart się, opcję tą można później zmienić",
|
||||
"enable-advanced-content-description": "Włącza zaawansowane funkcje, takie jak skalowanie receptur, klucze API, Webhooki i zarządzanie danymi. Nie martw się, zawsze możesz to zmienić później",
|
||||
"favorite-recipes": "Ulubione przepisy",
|
||||
"email-or-username": "E-mail lub nazwa użytkownika",
|
||||
"remember-me": "Zapamiętaj",
|
||||
@@ -935,7 +939,7 @@
|
||||
"merging-unit-into-unit": "Scalanie {0} do {1}",
|
||||
"create-unit": "Utwórz Jednostkę",
|
||||
"abbreviation": "Skrócona nazwa",
|
||||
"plural-abbreviation": "Plural Abbreviation",
|
||||
"plural-abbreviation": "Skrót liczby mnogiej",
|
||||
"description": "Opis",
|
||||
"display-as-fraction": "Wyświetlaj jako ułamek",
|
||||
"use-abbreviation": "Używaj skróconej nazwy",
|
||||
@@ -946,7 +950,7 @@
|
||||
"example-unit-singular": "np. Łyżka stołowa",
|
||||
"example-unit-plural": "np. Łyżki stołowe",
|
||||
"example-unit-abbreviation-singular": "na przykład: Łyżka stołowa",
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
||||
"example-unit-abbreviation-plural": "na przykład: Łyżka stołowa"
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Wypełnij bazę zwyczajowymi etykietami dla wybranego języka.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Eventos da Receita"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Cancelar",
|
||||
"clear": "Limpar",
|
||||
"close": "Fechar",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Salvar",
|
||||
"settings": "Configurações",
|
||||
"share": "Compartilhar",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Aleatório",
|
||||
"sort": "Ordenar",
|
||||
"sort-alphabetically": "Alfabética",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Modo Cozinheiro",
|
||||
"link-ingredients": "Vincular ingredientes",
|
||||
"merge-above": "Mesclar acima",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Redefinir escala",
|
||||
"decrease-scale-label": "Diminuir Escala por 1",
|
||||
"increase-scale-label": "Aumentar Escala por 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Resumo da importação",
|
||||
"partial-backup": "Backup parcial",
|
||||
"unable-to-delete-backup": "Não foi possível apagar o backup.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Restauração de Backup",
|
||||
"back-restore-description": "Restaurar este backup substituirá todos os dados atuais no seu banco de dados e no diretório de dados e os substituirá pelo conteúdo deste backup. {cannot-be-undone} Se a restauração for bem-sucedida, você será desconectado.",
|
||||
"cannot-be-undone": "Esta ação não pode ser desfeita - use com cautela.",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"about": {
|
||||
"about": "Sobre",
|
||||
"about-mealie": "Sobre Mealie",
|
||||
"about-mealie": "Sobre o Mealie",
|
||||
"api-docs": "Documentação de API",
|
||||
"api-port": "Porta da API",
|
||||
"application-mode": "Modo de aplicação",
|
||||
@@ -12,9 +12,9 @@
|
||||
"demo-status": "Estado da demonstração",
|
||||
"development": "Desenvolvimento",
|
||||
"docs": "Documentação",
|
||||
"download-log": "Transferir registo",
|
||||
"download-log": "Transferir Log",
|
||||
"download-recipe-json": "Último JSON recuperado",
|
||||
"github": "GitHub",
|
||||
"github": "Github",
|
||||
"log-lines": "Linhas de registo",
|
||||
"not-demo": "Não Demonstração",
|
||||
"portfolio": "Portefólio",
|
||||
@@ -56,7 +56,7 @@
|
||||
"event-delete-confirmation": "Tem a certeza que pretende eliminar este evento?",
|
||||
"event-deleted": "Evento eliminado",
|
||||
"event-updated": "Evento atualizado",
|
||||
"new-notification-form-description": "O Mealie usa a biblioteca Apprise para gerar notificações. Eles oferecem muitas opções de serviços para notificações. Consulte a wiki para um guia abrangente sobre como criar o URL para o seu serviço. Se disponível, selecionar o tipo de notificação pode incluir recursos extras.",
|
||||
"new-notification-form-description": "O Mealie usa a biblioteca Apprise para gerar notificações. Esta oferece muitas opções de serviços para notificações. Consulte a sua wiki para um guia abrangente sobre como criar o URL para o seu serviço. Se disponível, selecionar o tipo de notificação pode incluir recursos extra.",
|
||||
"new-version": "Nova versão disponível!",
|
||||
"notification": "Notificação",
|
||||
"refresh": "Atualizar",
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Eventos de receita"
|
||||
},
|
||||
"general": {
|
||||
"add": "Adicionar",
|
||||
"cancel": "Cancelar",
|
||||
"clear": "Limpar",
|
||||
"close": "Fechar",
|
||||
@@ -136,12 +137,13 @@
|
||||
"recent": "Recente",
|
||||
"recipe": "Receita",
|
||||
"recipes": "Receitas",
|
||||
"rename-object": "Renomear {0}",
|
||||
"rename-object": "Alterar nome {0}",
|
||||
"reset": "Repor",
|
||||
"saturday": "Sábado",
|
||||
"save": "Guardar",
|
||||
"settings": "Definições",
|
||||
"share": "Partilhar",
|
||||
"show-all": "Mostrar todos",
|
||||
"shuffle": "Baralhar",
|
||||
"sort": "Ordenar",
|
||||
"sort-alphabetically": "Ordem alfabética",
|
||||
@@ -176,7 +178,7 @@
|
||||
"none": "Nenhum",
|
||||
"run": "Executar",
|
||||
"menu": "Ementa",
|
||||
"a-name-is-required": "É necessário um nome",
|
||||
"a-name-is-required": "O Nome é obrigatório",
|
||||
"delete-with-name": "Eliminar {name}",
|
||||
"confirm-delete-generic-with-name": "Tem a certeza de que quer apagar este {name}?",
|
||||
"confirm-delete-own-admin-account": "Por favor, tenha em atenção que está a eliminar a sua própria conta de administrador! Esta ação não pode ser anulada e eliminará a sua conta permanentemente?",
|
||||
@@ -203,7 +205,7 @@
|
||||
"confirm-delete-generic-items": "Tem a certeza de que deseja eliminar os seguintes itens?"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Tem a certeza que quer eliminar <b>{groupName}</b>?",
|
||||
"are-you-sure-you-want-to-delete-the-group": "Tem a certeza que quer eliminar <b>{groupName}<b/>?",
|
||||
"cannot-delete-default-group": "Não é possível eliminar o grupo pré-definido",
|
||||
"cannot-delete-group-with-users": "Não é possível eliminar grupo com utilizadores",
|
||||
"confirm-group-deletion": "Confirmar eliminação do grupo",
|
||||
@@ -231,7 +233,7 @@
|
||||
"manage": "Gerir",
|
||||
"invite": "Convidar",
|
||||
"looking-to-update-your-profile": "Procura atualizar o seu perfil?",
|
||||
"default-recipe-preferences-description": "Estas são as configurações padrão quando uma receita nova é criada no seu grupo. Isto pode ser alterado para receitas individuais no menu de configurações da receita.",
|
||||
"default-recipe-preferences-description": "Estas são as configurações padrão quando uma nova receita é criada no seu grupo. Estas podem ser alteradas para receitas individuais no menu de configurações de receitas.",
|
||||
"default-recipe-preferences": "Preferências padrão de receita",
|
||||
"group-preferences": "Preferências do Grupo",
|
||||
"private-group": "Grupo Privado",
|
||||
@@ -284,7 +286,7 @@
|
||||
"quick-week": "Semana Rápida",
|
||||
"side": "Acompanhamento",
|
||||
"sides": "Acompanhamentos",
|
||||
"start-date": "Data de Inicio",
|
||||
"start-date": "Data de Início",
|
||||
"rule-day": "Dia de Regra",
|
||||
"meal-type": "Tipo de refeição",
|
||||
"breakfast": "Pequeno-almoço",
|
||||
@@ -320,7 +322,7 @@
|
||||
"no-file-selected": "Nenhum ficheiro selecionado",
|
||||
"no-migration-data-available": "Não há dados de migração disponíveis",
|
||||
"previous-migrations": "Migrações anteriores",
|
||||
"recipe-migration": "Migração da Receita",
|
||||
"recipe-migration": "Migração de Receitas",
|
||||
"chowdown": {
|
||||
"description": "Migrar dados do Chowdown",
|
||||
"description-long": "Mealie suporta de forma nativa o formato de repositório chowdown. Descarregue o repositório de código como ficheiro .zip e carregue-o abaixo.",
|
||||
@@ -344,7 +346,7 @@
|
||||
"title": "Mealie Pre v1.0"
|
||||
},
|
||||
"tandoor": {
|
||||
"description-long": "Mealie pode importar receitas a partir da Tandoor. Exporte os seus dados no formato \"Padrão\" e faça o upload do arquivo .zip abaixo.",
|
||||
"description-long": "O Mealie pode importar receitas a partir da Tandoor. Exporte os seus dados no formato \"Padrão\" e faça o upload do .zip abaixo.",
|
||||
"title": "Receitas do Tandoor"
|
||||
},
|
||||
"recipe-data-migrations": "Migrações de dados de receita",
|
||||
@@ -366,11 +368,11 @@
|
||||
"bulk-add": "Adicionar Vários",
|
||||
"error-details": "Apenas sites contendo ld+json ou microdata podem ser importados pela Mealie. Os principais sites de receitas suportam esta estrutura de dados. Se o seu site não pode ser importado, mas há dados json no log, coloque uma questão no github com o URL e os dados.",
|
||||
"error-title": "Parece que não conseguimos encontrar nada",
|
||||
"from-url": "Do URL",
|
||||
"from-url": "Importar uma Receita",
|
||||
"github-issues": "GitHub Issues",
|
||||
"google-ld-json-info": "Google ld+json Info",
|
||||
"must-be-a-valid-url": "Tem de ser um URL válido",
|
||||
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Insira os dados da sua receita. Cada linha será tratada como um item numa lista.",
|
||||
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Cole os dados da sua receita. Cada linha será tratada como um item numa lista",
|
||||
"recipe-markup-specification": "Especificação Markup da Receita",
|
||||
"recipe-url": "URL da Receita",
|
||||
"upload-a-recipe": "Enviar uma Receita",
|
||||
@@ -410,7 +412,7 @@
|
||||
"comment-action": "Comentário",
|
||||
"comment": "Comentário",
|
||||
"comments": "Comentários",
|
||||
"delete-confirmation": "Tem a certeza que deseja eliminar esta receita?",
|
||||
"delete-confirmation": "Tem a certeza de que deseja eliminar esta receita?",
|
||||
"delete-recipe": "Eliminar Receita",
|
||||
"description": "Descrição",
|
||||
"disable-amount": "Desativar Quantidades dos Ingredientes",
|
||||
@@ -430,7 +432,7 @@
|
||||
"landscape-view-coming-soon": "Modo paisagem",
|
||||
"milligrams": "miligramas",
|
||||
"new-key-name": "Novo nome da Chave",
|
||||
"no-white-space-allowed": "Espaço em Branco não Permitido",
|
||||
"no-white-space-allowed": "Não são permitidos espaços em branco",
|
||||
"note": "Nota",
|
||||
"nutrition": "Nutrição",
|
||||
"object-key": "Chave do Objeto",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Modo Cozinheiro",
|
||||
"link-ingredients": "Associar ingredientes",
|
||||
"merge-above": "Fundir acima",
|
||||
"move-to-bottom": "Mover para o Fundo",
|
||||
"move-to-top": "Mover para o Topo",
|
||||
"reset-scale": "Reiniciar escala",
|
||||
"decrease-scale-label": "Diminuir Escala por 1",
|
||||
"increase-scale-label": "Aumentar Escala em 1",
|
||||
@@ -535,8 +539,8 @@
|
||||
"debug-scraper": "Depurar Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crie uma receita fornecendo o nome. Todas as receitas devem ter nomes únicos.",
|
||||
"new-recipe-names-must-be-unique": "Os nomes de receitas devem ser únicos",
|
||||
"scrape-recipe": "Obter receita da Web (Scrape)",
|
||||
"scrape-recipe-description": "Fazer scrape a receita por URL. Indique o URL da página a que quer fazer scrape e o Mealie tentará obter a receita dessa página e adicioná-la à sua coleção.",
|
||||
"scrape-recipe": "Extrair receita (Scrape)",
|
||||
"scrape-recipe-description": "Extrair a receita por URL. Indique o URL da página da qual quer extrair e o Mealie tentará obter a receita dessa página e adicioná-la à sua coleção.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Tem muitas receitas para processar em simultâneo?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Experimente o importador em massa",
|
||||
"import-original-keywords-as-tags": "Importar palavras-chave originais como etiquetas",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Resumo da importação",
|
||||
"partial-backup": "Backup Parcial",
|
||||
"unable-to-delete-backup": "Erro ao eliminar Backup.",
|
||||
"experimental-description": "Faz backup total da base de dados e da pasta de dados do site. Isto inclui todos os dados e não pode excluir subconjuntos de dados. Pode ver isto como uma fotografia do Mealie num determinado momento. Atualmente, {not-crossed-version} (as migrações de dados são feitas automaticamente). Isto é uma forma agnóstica de exportar e importar dados ou fazer backup do site para uma localização externa.",
|
||||
"experimental-description": "Os backups são imagens totais da base de dados e da pasta de dados do site. Inclui todos os dados e não é possível definir para excluir subconjuntos de dados. Pode pensar nisto como uma imagem do Mealie num momento específico. Estas servem como uma forma agnóstica de exportar e importar dados ou fazer cópias de segurança do site para uma localização externa.",
|
||||
"backup-restore": "Restaurar backup",
|
||||
"back-restore-description": "Restaurar este backup irá apagar todos os dados atuais da sua base de dados e da pasta de dados e substituí-los pelo conteúdo deste backup. {cannot-be-undone} Se o restauro for bem-sucedido, a sua sessão será encerrada.",
|
||||
"cannot-be-undone": "Esta acção não pode ser desfeita - use com prudência.",
|
||||
@@ -686,12 +690,12 @@
|
||||
},
|
||||
"webhooks": {
|
||||
"test-webhooks": "Webhooks de Teste",
|
||||
"the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "Os URLs apresentados abaixo receberão webhooks que contêm os dados da receita para o plano de refeições no dia marcado. Atualmente, os webhooks serão executados a ",
|
||||
"the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "Os URLs apresentados abaixo receberão webhooks que contêm os dados da receita para o plano de refeições no dia marcado. Atualmente, os webhooks serão executados a",
|
||||
"webhook-url": "URL do webhook",
|
||||
"webhooks-caps": "WEBHOOKS",
|
||||
"webhooks": "Webhooks",
|
||||
"webhook-name": "Nome do Webhook",
|
||||
"description": "Os Webhooks definidos abaixo serão executados quando uma refeição for definida para o dia. À hora marcada, os webhooks serão enviados com os dados da receita que está agendada para o dia. Observe que a execução do webhook não é exacta. Os webhooks são executados num intervalo de 5 minutos, de modo que os webhooks serão executados dentro de + /- 5 minutos da hora marcada."
|
||||
"description": "Os webhooks definidos abaixo serão executados quando for definida uma refeição para o dia. À hora programada, os webhooks serão enviados com os dados da receita que está programada para o dia. Note-se que a execução do webhook não é exacta. Os webhooks são executados num intervalo de 5 minutos, pelo que serão executados num intervalo de +/- 5 minutos em relação à hora programada."
|
||||
},
|
||||
"bug-report": "Relatório de erro",
|
||||
"bug-report-information": "Use esta informação para relatar um erro. Fornecer os detalhes da sua configuração para o criador da aplicação, é a melhor maneira de resolver os seus problemas rapidamente.",
|
||||
@@ -716,10 +720,10 @@
|
||||
"mealie-is-up-to-date": "Mealie está atualizado",
|
||||
"secure-site": "Site Seguro",
|
||||
"secure-site-error-text": "Servir via localhost ou proteja com https. A Área de Transferência e as APIs do navegador podem não funcionar.",
|
||||
"secure-site-success-text": "O site é acedido por localhost ou https",
|
||||
"secure-site-success-text": "O site é acedido via localhost ou https",
|
||||
"server-side-base-url": "URL Base do Servidor",
|
||||
"server-side-base-url-error-text": "O `BASE_URL` no Servidor API ainda está definido com o valor padrão. Isso causará problemas com ligações geradas no servidor para emails, etc.",
|
||||
"server-side-base-url-success-text": "O URL do Servidor não corresponde com o valor padrão",
|
||||
"server-side-base-url-success-text": "O URL do lado do servidor não coincide com o valor padrão",
|
||||
"ldap-ready": "LDAP Pronto",
|
||||
"ldap-ready-error-text": "Nem todos os valores LDAP estão configurados. Isso pode ser ignorado se não estiver a utilizar a autenticação LDAP.",
|
||||
"ldap-ready-success-text": "As variáveis LDAP necessárias estão todas definidas.",
|
||||
@@ -738,11 +742,11 @@
|
||||
"food": "Alimentos",
|
||||
"note": "Nota",
|
||||
"label": "Rótulo",
|
||||
"linked-item-warning": "Este item tem ligação a uma ou mais receitas. Ajustar as unidades ou alimentos irá produzir resultados inesperados quando adicionar ou remover a receita da lista.",
|
||||
"toggle-food": "Alterar para Alimento",
|
||||
"linked-item-warning": "Este item tem ligação a uma ou mais receitas. Ajustar as unidades ou alimentos irá produzir resultados inesperados quando adicionar ou remover a receita desta lista.",
|
||||
"toggle-food": "Alternar Alimento",
|
||||
"manage-labels": "Gerir Rótulos",
|
||||
"are-you-sure-you-want-to-delete-this-item": "Tem a certeza que pretende remover este item?",
|
||||
"copy-as-text": "Copiar como Texto Simples",
|
||||
"are-you-sure-you-want-to-delete-this-item": "Tem a certeza de que pretende remover este item?",
|
||||
"copy-as-text": "Copiar como Texto",
|
||||
"copy-as-markdown": "Copiar como Markdown",
|
||||
"delete-checked": "Apagar Seleção",
|
||||
"toggle-label-sort": "Alternar Ordenação de Rótulos",
|
||||
@@ -811,8 +815,8 @@
|
||||
},
|
||||
"user": {
|
||||
"admin": "Administrador",
|
||||
"are-you-sure-you-want-to-delete-the-link": "Tem a certeza que quer eliminar este link <b>{link}<b/>?",
|
||||
"are-you-sure-you-want-to-delete-the-user": "Tem a certeza que quer eliminar este utilizador <b>{activeName} ID: {activeId}<b/>?",
|
||||
"are-you-sure-you-want-to-delete-the-link": "Tem a certeza de que quer eliminar este link <b>{link}<b/>?",
|
||||
"are-you-sure-you-want-to-delete-the-user": "Tem a certeza de que quer eliminar este utilizador <b>{activeName} ID: {activeId}<b/>?",
|
||||
"auth-method": "Método de Autenticação",
|
||||
"confirm-link-deletion": "Confirme a Eliminação da Ligação",
|
||||
"confirm-password": "Confirmar Palavra-passe",
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
"about": "Despre",
|
||||
"about-mealie": "Despre Mealie",
|
||||
"api-docs": "Documentație API",
|
||||
"api-port": "Port API",
|
||||
"application-mode": "Mod aplicație",
|
||||
"api-port": "API Port",
|
||||
"application-mode": "Application Mode",
|
||||
"database-type": "Tipul bazei de date",
|
||||
"database-url": "URL bază de date",
|
||||
"default-group": "Grup implicit",
|
||||
@@ -15,7 +15,7 @@
|
||||
"download-log": "Descarcă jurnal",
|
||||
"download-recipe-json": "Ultimul fișier JSON parcurs",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Linii de log",
|
||||
"log-lines": "Linii de jurnal",
|
||||
"not-demo": "Nu este Demo",
|
||||
"portfolio": "Portofoliu",
|
||||
"production": "Producție",
|
||||
@@ -40,9 +40,9 @@
|
||||
"category-created": "Categorie creată",
|
||||
"category-creation-failed": "Crearea categoriei a eșuat",
|
||||
"category-deleted": "Categorie ștearsă",
|
||||
"category-deletion-failed": "Ştergerea categoriei a eşuat",
|
||||
"category-deletion-failed": "Ștergerea categoriei a eșuat",
|
||||
"category-filter": "Filtru categorie",
|
||||
"category-update-failed": "Actualizarea categoriei a eşuat",
|
||||
"category-update-failed": "Actualizarea categoriei a eșuat",
|
||||
"category-updated": "Categorie actualizată",
|
||||
"uncategorized-count": "Necategorizat {count}",
|
||||
"create-a-category": "Creați o categorie",
|
||||
@@ -50,7 +50,7 @@
|
||||
"category": "Categorie"
|
||||
},
|
||||
"events": {
|
||||
"apprise-url": "URL Apprise",
|
||||
"apprise-url": "URL Apprise app",
|
||||
"database": "Bază de date",
|
||||
"delete-event": "Șterge evenimentul",
|
||||
"event-delete-confirmation": "Ești sigur(ă) că vrei să ștergi acest eveniment?",
|
||||
@@ -80,11 +80,12 @@
|
||||
"recipe-events": "Evenimente rețetă"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Anulează",
|
||||
"clear": "Șterge",
|
||||
"close": "Închide",
|
||||
"confirm": "Confirmă",
|
||||
"confirm-delete-generic": "Ești sigur(ă) că dorești să ștergi aceast element?",
|
||||
"confirm-delete-generic": "Ești sigur(ă) că dorești să ștergi acest element?",
|
||||
"copied_message": "Copiat!",
|
||||
"create": "Creează",
|
||||
"created": "Creat",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Salvează",
|
||||
"settings": "Setări",
|
||||
"share": "Distribuie",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Redați aleatoriu",
|
||||
"sort": "Sortează",
|
||||
"sort-alphabetically": "Alfabetic",
|
||||
@@ -178,8 +180,8 @@
|
||||
"menu": "Meniu",
|
||||
"a-name-is-required": "Este necesar un nume",
|
||||
"delete-with-name": "Ștergere {name}",
|
||||
"confirm-delete-generic-with-name": "Sunteți sigur că vrei să ștergi {name}?",
|
||||
"confirm-delete-own-admin-account": "Te rugăm să reții că încerci să ștergi propriul cont de administrator! Această acțiune nu poate fi anulată și iți va șterge permanent contul?",
|
||||
"confirm-delete-generic-with-name": "Ești sigur(ă) că vrei să ștergi {name}?",
|
||||
"confirm-delete-own-admin-account": "Te rugăm să reții că încerci să ștergi propriul cont de administrator! Această acțiune nu poate fi anulată și iți va șterge permanent contul",
|
||||
"organizer": "Organizator",
|
||||
"transfer": "Transferă",
|
||||
"copy": "Copiază",
|
||||
@@ -316,11 +318,11 @@
|
||||
},
|
||||
"migration": {
|
||||
"migration-data-removed": "Datele migrării au fost șterse",
|
||||
"new-migration": "New Migration",
|
||||
"no-file-selected": "No File Selected",
|
||||
"new-migration": "Migrare nouă",
|
||||
"no-file-selected": "Nici un fișier selecționat",
|
||||
"no-migration-data-available": "No Migration Data Available",
|
||||
"previous-migrations": "Previous Migrations",
|
||||
"recipe-migration": "Recipe Migration",
|
||||
"previous-migrations": "Migrări anterioare",
|
||||
"recipe-migration": "Migrare rețeta",
|
||||
"chowdown": {
|
||||
"description": "Migrează datele din Chowdown",
|
||||
"description-long": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
|
||||
@@ -365,7 +367,7 @@
|
||||
"new-recipe": {
|
||||
"bulk-add": "Adăugare în masă",
|
||||
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.",
|
||||
"error-title": "Looks Like We Couldn't Find Anything",
|
||||
"error-title": "Se pare că nu am găsit nimic",
|
||||
"from-url": "Importați o rețetă",
|
||||
"github-issues": "GitHub Issues",
|
||||
"google-ld-json-info": "Google ld+json Info",
|
||||
@@ -382,7 +384,7 @@
|
||||
"split-by-numbered-line-description": "Attempts to split a paragraph by matching '1)' or '1.' patterns",
|
||||
"import-by-url": "Importă rețetă prin URL",
|
||||
"create-manually": "Creează o rețetă manual",
|
||||
"make-recipe-image": "Make this the recipe image"
|
||||
"make-recipe-image": "Setează ca imaginea rețetei"
|
||||
},
|
||||
"page": {
|
||||
"404-page-not-found": "404 Pagina nu a fost găsită",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Modul de gătire",
|
||||
"link-ingredients": "Link-uri Ingrediente",
|
||||
"merge-above": "Îmbină deasupra",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Resetează scara",
|
||||
"decrease-scale-label": "Scade scara cu 1",
|
||||
"increase-scale-label": "Crește scara cu 1",
|
||||
@@ -514,7 +518,7 @@
|
||||
"made-this": "Am făcut asta",
|
||||
"how-did-it-turn-out": "Cum a ieșit?",
|
||||
"user-made-this": "{user} a făcut asta",
|
||||
"last-made-date": "Last Made {date}",
|
||||
"last-made-date": "Ultima preparare {date}",
|
||||
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
|
||||
"message-key": "Message Key",
|
||||
"parse": "Parse",
|
||||
@@ -529,7 +533,7 @@
|
||||
"looking-for-migrations": "Looking For Migrations?",
|
||||
"import-with-url": "Import cu URL",
|
||||
"create-recipe": "Crează rețetă",
|
||||
"import-with-zip": "Import with .zip",
|
||||
"import-with-zip": "Importă cu .zip",
|
||||
"create-recipe-from-an-image": "Create recipe from an image",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Depanare funcție Importare",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import Summary",
|
||||
"partial-backup": "Partial Backup",
|
||||
"unable-to-delete-backup": "Unable to Delete Backup.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "События Рецепта"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Отмена",
|
||||
"clear": "Очистить",
|
||||
"close": "Закрыть",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Сохранить",
|
||||
"settings": "Настройки",
|
||||
"share": "Поделиться",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Перемешать",
|
||||
"sort": "Сортировать",
|
||||
"sort-alphabetically": "По алфавиту",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Режим готовки",
|
||||
"link-ingredients": "Связать ингредиенты",
|
||||
"merge-above": "Объединить с верхними",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Кол-во порций по умолчанию",
|
||||
"decrease-scale-label": "Убрать порцию",
|
||||
"increase-scale-label": "Добавить порцию",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Сводка по импорту",
|
||||
"partial-backup": "Частичное резервное копирование",
|
||||
"unable-to-delete-backup": "Не получилось удалить резервную копию.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Резервные копии представляют собой полные снапшоты базы данных и каталога данных сайта. Они включают все данные без исключений. По сути, это моментальный снимок Mealie в определенный момент времени. Эти снимки позволяют экспортировать и импортировать данные, а также создавать резервные копии сайта во внешнем хранилище.",
|
||||
"backup-restore": "Восстановление резервной копии",
|
||||
"back-restore-description": "Восстановление этой резервной копии перезапишет все текущие данные в вашей базе данных и в каталоге данных и заменит их содержимым этой резервной копии. {cannot-be-undone} при успешном восстановлении вы выйдете из системы.",
|
||||
"cannot-be-undone": "Это действие нельзя отменить, используйте с осторожностью.",
|
||||
@@ -707,7 +711,7 @@
|
||||
"email-configured": "Email настроен",
|
||||
"email-test-results": "Результаты теста Email",
|
||||
"ready": "Готово",
|
||||
"not-ready": "Не готово - Проверьте переменные окружающей среды",
|
||||
"not-ready": "Не готово - Проверьте переменные окружения",
|
||||
"succeeded": "Выполнено успешно",
|
||||
"failed": "Ошибка",
|
||||
"general-about": "Общая информация",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Zrušiť",
|
||||
"clear": "Vymazať",
|
||||
"close": "Zavrieť",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Uložiť",
|
||||
"settings": "Nastavenia",
|
||||
"share": "Zdieľať",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Náhodný výber",
|
||||
"sort": "Usporiadať",
|
||||
"sort-alphabetically": "Abecedne",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Režim varenia",
|
||||
"link-ingredients": "Prepojiť suroviny",
|
||||
"merge-above": "Zlúčiť s predchádzajúcim",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Obnoviť škálovanie",
|
||||
"decrease-scale-label": "Znížiť škálovanie o 1",
|
||||
"increase-scale-label": "Zvýšiť škálovanie o 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Importovať zhrnutie",
|
||||
"partial-backup": "Čiastočná záloha",
|
||||
"unable-to-delete-backup": "Zálohu nebolo možné odstrániť.",
|
||||
"experimental-description": "Zálohuje kompletný aktuálny obsah databázy a adresára s dátami inštalácie Mealie. Toto zahŕňa všetky dáta, pričom nie je možné zo zálohy vylúčiť akúkoľvek podskupinu dát. Takúto zálohu možno považovať za obraz dátového obsahu Mealie v danom čase. Aktuálne, {not-crossed-version} (dátové migrácie nie sú vykonávané automaticky). Táto funkcionalita slúži ako databázovo agnostický spôsob exportovania a importovania dát alebo ako záloha inštalácie na externú lokáciu.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Uložiť zálohu",
|
||||
"back-restore-description": "Obnovenie tejto zálohy prepíše všetky aktuálne údaje vo vašej databáze a dáta v dátovom adresári a nahradí ich obsahom tejto zálohy. {cannot-be-undone} Po úspešnom obnovení budete odhlásený.",
|
||||
"cannot-be-undone": "Túto akciu nie je možné vrátiť späť - používajte s rozvahou.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Prekliči",
|
||||
"clear": "Počisti",
|
||||
"close": "Zapri",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Shrani",
|
||||
"settings": "Nastavitve",
|
||||
"share": "Deli",
|
||||
"show-all": "Prikaži vse",
|
||||
"shuffle": "Naključno",
|
||||
"sort": "Razvrsti",
|
||||
"sort-alphabetically": "Po abecedi",
|
||||
@@ -197,8 +199,8 @@
|
||||
"export-all": "Izvozi vse",
|
||||
"refresh": "Osveži",
|
||||
"upload-file": "Naloži datoteko",
|
||||
"created-on-date": "Created on: {0}",
|
||||
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
|
||||
"created-on-date": "Ustvarjeno dne: {0}",
|
||||
"unsaved-changes": "Imate neohranjene spremembe. Ali želite shraniti pred odhodom? V redu, če želite shraniti, Prekliči, če želite zavreči spremembe.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
},
|
||||
@@ -293,8 +295,8 @@
|
||||
"type-any": "Katerikoli",
|
||||
"day-any": "Katerikoli",
|
||||
"editor": "Editor",
|
||||
"meal-recipe": "Meal Recipe",
|
||||
"meal-title": "Meal Title",
|
||||
"meal-recipe": "Recept za obrok",
|
||||
"meal-title": "Naslov obroka",
|
||||
"meal-note": "Meal Note",
|
||||
"note-only": "Note Only",
|
||||
"random-meal": "Random Meal",
|
||||
@@ -353,8 +355,8 @@
|
||||
"tag-all-recipes": "Tag all recipes with {tag-name} tag",
|
||||
"nextcloud-text": "Nextcloud recipes can be imported from a zip file that contains the data stored in Nextcloud. See the example folder structure below to ensure your recipes are able to be imported.",
|
||||
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below",
|
||||
"recipe-1": "Recipe 1",
|
||||
"recipe-2": "Recipe 2",
|
||||
"recipe-1": "Recept 1",
|
||||
"recipe-2": "Recept 2",
|
||||
"paprika-text": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
|
||||
"mealie-text": "Mealie can import recipes from the Mealie application from a pre v1.0 release. Export your recipes from your old instance, and upload the zip file below. Note that only recipes can be imported from the export.",
|
||||
"plantoeat": {
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Način kuhanja",
|
||||
"link-ingredients": "Poveži sestavine",
|
||||
"merge-above": "Združi skupaj",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Ponastavi merilo",
|
||||
"decrease-scale-label": "Znižaj merilo za 1",
|
||||
"increase-scale-label": "Zvišaj merilo za 1",
|
||||
@@ -528,7 +532,7 @@
|
||||
"select-one-of-the-various-ways-to-create-a-recipe": "Select one of the various ways to create a recipe",
|
||||
"looking-for-migrations": "Looking For Migrations?",
|
||||
"import-with-url": "Import with URL",
|
||||
"create-recipe": "Create Recipe",
|
||||
"create-recipe": "Ustvari recept",
|
||||
"import-with-zip": "Import with .zip",
|
||||
"create-recipe-from-an-image": "Create recipe from an image",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Povzetek uvoza",
|
||||
"partial-backup": "Delna varnostna kopija",
|
||||
"unable-to-delete-backup": "Napaka pri izbrisu varnostne kopije.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Откажи",
|
||||
"clear": "Обриши",
|
||||
"close": "Затвори",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Сачувај",
|
||||
"settings": "Подешавања",
|
||||
"share": "Подели",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Помешано",
|
||||
"sort": "Сортирај",
|
||||
"sort-alphabetically": "Азбучно",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Cook Mode",
|
||||
"link-ingredients": "Повежи састојке",
|
||||
"merge-above": "Merge Above",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reset Scale",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import Summary",
|
||||
"partial-backup": "Partial Backup",
|
||||
"unable-to-delete-backup": "Unable to Delete Backup.",
|
||||
"experimental-description": "Резервне копије су потпуни снимци базе података и директоријума са подацима сајта. Ово укључује све податке и не може се подесити да искључује подскупове података. Схватите ово као снимак Милија у одређено време. Они служе као база података која није зависна од типа за извоз и увоз података, или за резервну копију сајта на спољну локацију.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"not-demo": "Inte Demo",
|
||||
"portfolio": "Portfölj",
|
||||
"production": "Produktion",
|
||||
"support": "Hjälp",
|
||||
"support": "Support",
|
||||
"version": "Version",
|
||||
"unknown-version": "okänd",
|
||||
"sponsor": "Sponsor"
|
||||
@@ -61,14 +61,14 @@
|
||||
"notification": "Notifiering",
|
||||
"refresh": "Uppdatera",
|
||||
"scheduled": "Schemalagd",
|
||||
"something-went-wrong": "Hmmm, något blev fel!",
|
||||
"something-went-wrong": "Någonting gick fel",
|
||||
"subscribed-events": "Prenumererade händelser",
|
||||
"test-message-sent": "Testmeddelande Skickat",
|
||||
"new-notification": "Ny avisering",
|
||||
"event-notifiers": "Händelseavisering",
|
||||
"apprise-url-skipped-if-blank": "Meddela URL (hoppa över om tom)",
|
||||
"apprise-url-skipped-if-blank": "Apprise-URL (hoppa över om tom)",
|
||||
"enable-notifier": "Aktivera avisering",
|
||||
"what-events": "Vilka händelser bör denna avisering prenumerera på?",
|
||||
"what-events": "Vilka händelser ska denna avisering prenumerera på?",
|
||||
"user-events": "Användarhändelser",
|
||||
"mealplan-events": "Händelser för måltidsplan",
|
||||
"when-a-user-in-your-group-creates-a-new-mealplan": "När en användare i din grupp skapar en ny måltidsplan",
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recepthändelser"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Avbryt",
|
||||
"clear": "Rensa",
|
||||
"close": "Stäng",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Spara",
|
||||
"settings": "Inställningar",
|
||||
"share": "Dela",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Blanda",
|
||||
"sort": "Sortering",
|
||||
"sort-alphabetically": "Alfabetisk",
|
||||
@@ -259,7 +261,7 @@
|
||||
},
|
||||
"meal-plan": {
|
||||
"create-a-new-meal-plan": "Skapa en ny måltidsplan",
|
||||
"update-this-meal-plan": "Update this Meal Plan",
|
||||
"update-this-meal-plan": "Uppdatera denna måltidsplan",
|
||||
"dinner-this-week": "Veckans middagar",
|
||||
"dinner-today": "Middag idag",
|
||||
"dinner-tonight": "Middag ikväll",
|
||||
@@ -474,11 +476,11 @@
|
||||
"add-to-timeline": "Lägg till i tidslinje",
|
||||
"recipe-added-to-list": "Recept tillagt i listan",
|
||||
"recipes-added-to-list": "Recept tillagt i listan",
|
||||
"successfully-added-to-list": "Successfully added to list",
|
||||
"successfully-added-to-list": "Framgångsrikt tillagd till listan",
|
||||
"recipe-added-to-mealplan": "Recept tillagt i måltidsplanen",
|
||||
"failed-to-add-recipes-to-list": "Det gick inte att lägga till recept till listan",
|
||||
"failed-to-add-recipe-to-mealplan": "Det gick inte att lägga till recept i måltidsplanen",
|
||||
"failed-to-add-to-list": "Failed to add to list",
|
||||
"failed-to-add-to-list": "Misslyckades att lägga till listan",
|
||||
"yield": "Ger",
|
||||
"quantity": "Antal",
|
||||
"choose-unit": "Välj enhet",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Matlagningsläge",
|
||||
"link-ingredients": "Länka ingredienser",
|
||||
"merge-above": "Sammanfoga ovanför",
|
||||
"move-to-bottom": "Flytta längst ned",
|
||||
"move-to-top": "Flytta längst upp",
|
||||
"reset-scale": "Nollställ skalning",
|
||||
"decrease-scale-label": "Skala ner med 1",
|
||||
"increase-scale-label": "Skala upp med 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import sammanfattning",
|
||||
"partial-backup": "Partiell backup",
|
||||
"unable-to-delete-backup": "Kan inte radera backup.",
|
||||
"experimental-description": "Säkerhetskopierar en komplett ögonblicksbild av databasen och datakatalogen på webbplatsen. Detta inkluderar all data och kan inte ställas in för att utesluta undergrupper av data. Du kan se det som en ögonblicksbild av Mealie vid en viss tidpunkt. För närvarande {not-crossed-version} (datamigreringar görs inte automatiskt). Dessa fungerar som ett agnostiskt sätt att exportera eller säkerhetskopiera siten till en extern plats.",
|
||||
"experimental-description": "Säkerhetskopior en komplett ögonblicksbild av databasen och datakatalogen på webbplatsen. Detta inkluderar all data och kan inte ställas in för att utesluta undergrupper av data. Du kan se det som en ögonblicksbild av Mealie vid en viss tidpunkt. Dessa fungerar som ett agnostiskt sätt att exportera eller säkerhetskopiera hemsidan till en extern plats.",
|
||||
"backup-restore": "Återställ backup",
|
||||
"back-restore-description": "Återställning av den här backuppen kommer att skriva över all information i databasen och datakatalogen och ersätta allt med innehållet i nackuppen. {cannot-be-undone} Om återställningen går bra kommer du att loggas ut.",
|
||||
"cannot-be-undone": "Denna åtgärd kan inte ångras - använd med försiktighet.",
|
||||
@@ -1111,12 +1115,12 @@
|
||||
"actions-description-irreversible": "oåterkallelig",
|
||||
"logs-action-refresh": "Uppdatera loggar",
|
||||
"logs-page-title": "Mealie loggar",
|
||||
"logs-tail-lines-label": "Tail Lines"
|
||||
"logs-tail-lines-label": "Slutrader"
|
||||
},
|
||||
"mainentance": {
|
||||
"actions-title": "Åtgärder"
|
||||
},
|
||||
"ingredients-natural-language-processor": "Ingredients Natural Language Processor",
|
||||
"ingredients-natural-language-processor": "Ingredienser Naturligt språkprocessor",
|
||||
"ingredients-natural-language-processor-explanation": "Mealie använder villkorliga slumpfält (CRF) för tolkning och bearbetning av ingredienser. Modellen som används för ingredienser är baserad på en uppsättning data på över 100.000 ingredienser från en dataset sammanställd av New York Times. Observera att eftersom modellen endast är utbildad på engelska kan du ha olika resultat när du använder modellen på andra språk. Denna sida är en lekplats för att testa modellen.",
|
||||
"ingredients-natural-language-processor-explanation-2": "Det är inte perfekt, men det ger bra resultat i allmänhet och är en bra utgångspunkt för att manuellt tolka ingredienser i enskilda områden. Alternativt kan du också använda \"Brute\" processor som använder en mönstermatchningsteknik för att identifiera ingredienser.",
|
||||
"nlp": "NLP",
|
||||
@@ -1187,7 +1191,7 @@
|
||||
"require-all-tools": "Kräv alla verktyg",
|
||||
"cookbook-name": "Namn på kokbok",
|
||||
"cookbook-with-name": "Kokbok {0}",
|
||||
"create-a-cookbook": "Create a Cookbook",
|
||||
"cookbook": "Cookbook"
|
||||
"create-a-cookbook": "Skapa en kokbok",
|
||||
"cookbook": "Kokbok"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Ekle",
|
||||
"cancel": "İptal",
|
||||
"clear": "Temizle",
|
||||
"close": "Kapat",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Kaydet",
|
||||
"settings": "Ayarlar",
|
||||
"share": "Paylaş",
|
||||
"show-all": "Tümünü Göster",
|
||||
"shuffle": "Karıştır",
|
||||
"sort": "Sırala",
|
||||
"sort-alphabetically": "Alfabetik",
|
||||
@@ -494,11 +496,13 @@
|
||||
"cook-mode": "Pişirme Modu",
|
||||
"link-ingredients": "Link Ingredients",
|
||||
"merge-above": "Yukarıda Birleştir",
|
||||
"move-to-bottom": "En Alta taşı",
|
||||
"move-to-top": "En Üste Taşı",
|
||||
"reset-scale": "Ölçeği Sıfırla",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
"locked": "Kilitli",
|
||||
"public-link": "Public Link",
|
||||
"public-link": "Genel bağlantı",
|
||||
"timer": {
|
||||
"kitchen-timer": "Mutfak Saati",
|
||||
"start-timer": "Zamanlayıcıyı Başlat",
|
||||
@@ -516,7 +520,7 @@
|
||||
"user-made-this": "{user} bunu yaptı",
|
||||
"last-made-date": "En Son {date} Yapıldı",
|
||||
"api-extras-description": "Tarif ekstraları Mealie API'nin önemli bir özelliğidir. Üçüncü taraf uygulamalardan referans almak üzere bir tarif içinde özel JSON anahtar/değer çiftleri oluşturmanıza olanak tanır. Bu tuşları, örneğin otomasyonları tetiklemek veya istediğiniz cihaza iletilecek özel mesajları bilgi sağlamak için kullanabilirsiniz.",
|
||||
"message-key": "Message Key",
|
||||
"message-key": "İleti Anahtarı",
|
||||
"parse": "Parse",
|
||||
"attach-images-hint": "Düzenleyiciye sürükleyip bırakarak görselleri ekleyin",
|
||||
"drop-image": "Yüklenecek resimi sürükleyip bırakın",
|
||||
@@ -540,7 +544,7 @@
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Aynı anda kazımak istediğiniz birçok tarifiniz mi var?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Toplu ithalatçıyı deneyin",
|
||||
"import-original-keywords-as-tags": "Orijinal anahtar kelimeleri etiket olarak içe aktar",
|
||||
"stay-in-edit-mode": "Stay in Edit mode",
|
||||
"stay-in-edit-mode": "Düzenleme modunda kalın",
|
||||
"import-from-zip": "Zip'ten içeri aktar",
|
||||
"import-from-zip-description": "Import a single recipe that was exported from another Mealie instance.",
|
||||
"zip-files-must-have-been-exported-from-mealie": ".zip files must have been exported from Mealie",
|
||||
@@ -577,23 +581,23 @@
|
||||
"search": "Ara",
|
||||
"search-mealie": "Search Mealie (press /)",
|
||||
"search-placeholder": "Ara...",
|
||||
"tag-filter": "Tag Filter",
|
||||
"tag-filter": "Etiket Filtresi",
|
||||
"search-hint": "Press '/'",
|
||||
"advanced": "Gelişmiş",
|
||||
"auto-search": "Otomatik Arama",
|
||||
"no-results": "Sonuç bulunamadı"
|
||||
},
|
||||
"settings": {
|
||||
"add-a-new-theme": "Add a New Theme",
|
||||
"admin-settings": "Admin Settings",
|
||||
"add-a-new-theme": "Yeni Tema Ekle",
|
||||
"admin-settings": "Yönetici Ayarları",
|
||||
"backup": {
|
||||
"backup-created": "Yedekleme başarıyla oluşturuldu",
|
||||
"backup-created-at-response-export_path": "Backup Created at {path}",
|
||||
"backup-deleted": "Backup deleted",
|
||||
"backup-deleted": "Yedekleme silindi",
|
||||
"restore-success": "Geri yükleme başarılı",
|
||||
"backup-tag": "Backup Tag",
|
||||
"backup-tag": "Yedek Etiketi",
|
||||
"create-heading": "Create a Backup",
|
||||
"delete-backup": "Delete Backup",
|
||||
"delete-backup": "Yedeği Sil",
|
||||
"error-creating-backup-see-log-file": "Error Creating Backup. See Log File",
|
||||
"full-backup": "Tam Yedekleme",
|
||||
"import-summary": "İçe aktarma özeti",
|
||||
@@ -608,24 +612,24 @@
|
||||
"irreversible-acknowledgment": "I understand that this action is irreversible, destructive and may cause data loss",
|
||||
"restore-backup": "Yedeği Geri Yükle"
|
||||
},
|
||||
"backup-and-exports": "Backups",
|
||||
"change-password": "Change Password",
|
||||
"backup-and-exports": "Yedeklemeler",
|
||||
"change-password": "Şifre Değiştir",
|
||||
"current": "Sürüm:",
|
||||
"custom-pages": "Custom Pages",
|
||||
"custom-pages": "Özel Sayfalar",
|
||||
"edit-page": "Sayfayı Düzenle",
|
||||
"events": "Events",
|
||||
"first-day-of-week": "First day of the week",
|
||||
"group-settings-updated": "Group Settings Updated",
|
||||
"events": "Olaylar",
|
||||
"first-day-of-week": "Haftanın ilk günü",
|
||||
"group-settings-updated": "Grup Ayarları Güncellendi",
|
||||
"homepage": {
|
||||
"all-categories": "All Categories",
|
||||
"all-categories": "Tüm Kategoriler",
|
||||
"card-per-section": "Card Per Section",
|
||||
"home-page": "Ana Sayfa",
|
||||
"home-page-sections": "Home Page Sections",
|
||||
"show-recent": "Show Recent"
|
||||
"show-recent": "Son Kullanılanları Göster"
|
||||
},
|
||||
"language": "Language",
|
||||
"latest": "Latest",
|
||||
"local-api": "Local API",
|
||||
"language": "Dil",
|
||||
"latest": "En Son",
|
||||
"local-api": "Yerel API",
|
||||
"locale-settings": "Yerel Ayarlar",
|
||||
"migrations": "Migrations",
|
||||
"new-page": "Yeni Sayfa",
|
||||
@@ -675,11 +679,11 @@
|
||||
},
|
||||
"toolbox": {
|
||||
"assign-all": "Assign All",
|
||||
"bulk-assign": "Bulk Assign",
|
||||
"new-name": "New Name",
|
||||
"bulk-assign": "Toplu Atama",
|
||||
"new-name": "Yeni İsim",
|
||||
"no-unused-items": "No Unused Items",
|
||||
"recipes-affected": "No Recipes Affected|One Recipe Affected|{count} Recipes Affected",
|
||||
"remove-unused": "Remove Unused",
|
||||
"remove-unused": "Kullanılmayanları Kaldır",
|
||||
"title-case-all": "Title Case All",
|
||||
"toolbox": "Toolbox",
|
||||
"unorganized": "Unorganized"
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Події рецепту"
|
||||
},
|
||||
"general": {
|
||||
"add": "Додати",
|
||||
"cancel": "Скасувати",
|
||||
"clear": "Очистити",
|
||||
"close": "Закрити",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Зберегти",
|
||||
"settings": "Налаштування",
|
||||
"share": "Поділитись",
|
||||
"show-all": "Показати все",
|
||||
"shuffle": "Перемішати",
|
||||
"sort": "Сортувати",
|
||||
"sort-alphabetically": "За алфавітом",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Режим кухаря",
|
||||
"link-ingredients": "Зв'язати інгредієнти",
|
||||
"merge-above": "Об'єднати з тим що вище",
|
||||
"move-to-bottom": "Перемістити вниз",
|
||||
"move-to-top": "Перемістити вгору",
|
||||
"reset-scale": "Скинути масштабування",
|
||||
"decrease-scale-label": "Зменшити масштабування на 1",
|
||||
"increase-scale-label": "Збільшити масштабування на 1",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Cancel",
|
||||
"clear": "Clear",
|
||||
"close": "Close",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "Save",
|
||||
"settings": "Settings",
|
||||
"share": "Share",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "Shuffle",
|
||||
"sort": "Sort",
|
||||
"sort-alphabetically": "Alphabetical",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Cook Mode",
|
||||
"link-ingredients": "Link Ingredients",
|
||||
"merge-above": "Merge Above",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reset Scale",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "Import Summary",
|
||||
"partial-backup": "Partial Backup",
|
||||
"unable-to-delete-backup": "Unable to Delete Backup.",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "食谱事件"
|
||||
},
|
||||
"general": {
|
||||
"add": "添加",
|
||||
"cancel": "取消",
|
||||
"clear": "清空",
|
||||
"close": "关闭",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "保存",
|
||||
"settings": "设定",
|
||||
"share": "分享",
|
||||
"show-all": "全部显示",
|
||||
"shuffle": "随机",
|
||||
"sort": "排序",
|
||||
"sort-alphabetically": "按字母顺序排序",
|
||||
@@ -200,7 +202,7 @@
|
||||
"created-on-date": "创建于: {0}",
|
||||
"unsaved-changes": "你有未保存的更改。你希望现在离开前保存吗?保存选择“是”,不保存选择“取消”。",
|
||||
"clipboard-copy-failure": "未能复制到剪切板。",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "你确定删除以下条目吗?"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "您确定要删除<b>{groupName}<b/>吗?",
|
||||
@@ -474,11 +476,11 @@
|
||||
"add-to-timeline": "添加到时间轴",
|
||||
"recipe-added-to-list": "食谱已被添加到购物清单",
|
||||
"recipes-added-to-list": "食谱已被添加到购物清单",
|
||||
"successfully-added-to-list": "Successfully added to list",
|
||||
"successfully-added-to-list": "成功添加到列表",
|
||||
"recipe-added-to-mealplan": "已添加该食谱到饮食计划",
|
||||
"failed-to-add-recipes-to-list": "食谱未能添加到购物清单",
|
||||
"failed-to-add-recipe-to-mealplan": "添加食谱到饮食计划失败",
|
||||
"failed-to-add-to-list": "Failed to add to list",
|
||||
"failed-to-add-to-list": "未能添加到列表",
|
||||
"yield": "菜量(几人份)",
|
||||
"quantity": "数量",
|
||||
"choose-unit": "选择单位",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "烹饪模式",
|
||||
"link-ingredients": "关联食材",
|
||||
"merge-above": "合并上一步",
|
||||
"move-to-bottom": "置底",
|
||||
"move-to-top": "置顶",
|
||||
"reset-scale": "重置倍数",
|
||||
"decrease-scale-label": "减1倍",
|
||||
"increase-scale-label": "加1倍",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "导入概况",
|
||||
"partial-backup": "部分备份",
|
||||
"unable-to-delete-backup": "无法删除备份",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "备份是网站数据库和数据目录的共同快照。它必须包含全部数据,不能排除任何数据。你可以把它视为Mealie在某个时刻的快照。这些备份作为一种与数据库无关的方式,用于导入和导出数据,或将站点备份到外部位置。",
|
||||
"backup-restore": "备份恢复",
|
||||
"back-restore-description": "恢复该备份将覆盖当前数据库和数据文件夹的数据。 {cannot-be-undone} 若恢复成功,你需要重新登录。",
|
||||
"cannot-be-undone": "该操作无法撤销,请谨慎使用!",
|
||||
@@ -1187,7 +1191,7 @@
|
||||
"require-all-tools": "包含全部工具",
|
||||
"cookbook-name": "食谱名称",
|
||||
"cookbook-with-name": "{0}合集",
|
||||
"create-a-cookbook": "Create a Cookbook",
|
||||
"cookbook": "Cookbook"
|
||||
"create-a-cookbook": "创建一个食谱合集",
|
||||
"cookbook": "食谱合集"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "取消",
|
||||
"clear": "清除",
|
||||
"close": "關閉",
|
||||
@@ -142,6 +143,7 @@
|
||||
"save": "保存",
|
||||
"settings": "設定",
|
||||
"share": "分享",
|
||||
"show-all": "Show All",
|
||||
"shuffle": "隨機",
|
||||
"sort": "排序",
|
||||
"sort-alphabetically": "按字母順序",
|
||||
@@ -494,6 +496,8 @@
|
||||
"cook-mode": "Cook Mode",
|
||||
"link-ingredients": "Link Ingredients",
|
||||
"merge-above": "Merge Above",
|
||||
"move-to-bottom": "Move To Bottom",
|
||||
"move-to-top": "Move To Top",
|
||||
"reset-scale": "Reset Scale",
|
||||
"decrease-scale-label": "Decrease Scale by 1",
|
||||
"increase-scale-label": "Increase Scale by 1",
|
||||
@@ -599,7 +603,7 @@
|
||||
"import-summary": "匯入總結",
|
||||
"partial-backup": "部分備份",
|
||||
"unable-to-delete-backup": "無法刪除備份",
|
||||
"experimental-description": "Backups a total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think off this as a snapshot of Mealie at a specific time. Currently, {not-crossed-version} (data migrations are not done automatically). These serve as a database agnostic way to export and import data or backup the site to an external location.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"backup-restore": "Backup Restore",
|
||||
"back-restore-description": "Restoring this backup will overwrite all the current data in your database and in the data directory and replace them with the contents of this backup. {cannot-be-undone} If the restoration is successful, you will be logged out.",
|
||||
"cannot-be-undone": "This action cannot be undone - use with caution.",
|
||||
|
||||
@@ -505,6 +505,7 @@ export interface ShoppingListOut {
|
||||
createdAt?: string;
|
||||
updateAt?: string;
|
||||
groupId: string;
|
||||
userId: string;
|
||||
id: string;
|
||||
listItems?: ShoppingListItemOut[];
|
||||
recipeReferences: ShoppingListRecipeRefOut[];
|
||||
@@ -568,6 +569,7 @@ export interface ShoppingListSave {
|
||||
createdAt?: string;
|
||||
updateAt?: string;
|
||||
groupId: string;
|
||||
userId: string;
|
||||
}
|
||||
export interface ShoppingListSummary {
|
||||
name?: string;
|
||||
@@ -577,6 +579,7 @@ export interface ShoppingListSummary {
|
||||
createdAt?: string;
|
||||
updateAt?: string;
|
||||
groupId: string;
|
||||
userId: string;
|
||||
id: string;
|
||||
recipeReferences: ShoppingListRecipeRefOut[];
|
||||
labelSettings: ShoppingListMultiPurposeLabelOut[];
|
||||
@@ -589,6 +592,7 @@ export interface ShoppingListUpdate {
|
||||
createdAt?: string;
|
||||
updateAt?: string;
|
||||
groupId: string;
|
||||
userId: string;
|
||||
id: string;
|
||||
listItems?: ShoppingListItemOut[];
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
interface AuthRedirectParams {
|
||||
interface AdminRedirectParams {
|
||||
$auth: any
|
||||
redirect: (path: string) => void
|
||||
}
|
||||
export default function ({ $auth, redirect }: AuthRedirectParams) {
|
||||
export default function ({ $auth, redirect }: AdminRedirectParams) {
|
||||
// If the user is not an admin redirect to the home page
|
||||
if (!$auth.user.admin) {
|
||||
return redirect("/")
|
||||
|
||||
11
frontend/middleware/advanced-only.ts
Normal file
11
frontend/middleware/advanced-only.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
interface AdvancedOnlyRedirectParams {
|
||||
$auth: any
|
||||
redirect: (path: string) => void
|
||||
}
|
||||
export default function ({ $auth, redirect }: AdvancedOnlyRedirectParams) {
|
||||
// If the user is not allowed to access advanced features redirect to the home page
|
||||
if (!$auth.user.advanced) {
|
||||
console.warn("User is not allowed to access advanced features");
|
||||
return redirect("/")
|
||||
}
|
||||
}
|
||||
12
frontend/middleware/can-manage-only.ts
Normal file
12
frontend/middleware/can-manage-only.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
interface CanManageRedirectParams {
|
||||
$auth: any
|
||||
redirect: (path: string) => void
|
||||
}
|
||||
export default function ({ $auth, redirect }: CanManageRedirectParams) {
|
||||
// If the user is not allowed to manage group settings redirect to the home page
|
||||
console.log($auth.user)
|
||||
if (!$auth.user.canManage) {
|
||||
console.warn("User is not allowed to manage group settings");
|
||||
return redirect("/")
|
||||
}
|
||||
}
|
||||
11
frontend/middleware/can-organize-only.ts
Normal file
11
frontend/middleware/can-organize-only.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
interface CanOrganizeRedirectParams {
|
||||
$auth: any
|
||||
redirect: (path: string) => void
|
||||
}
|
||||
export default function ({ $auth, redirect }: CanOrganizeRedirectParams) {
|
||||
// If the user is not allowed to organize redirect to the home page
|
||||
if (!$auth.user.canOrganize) {
|
||||
console.warn("User is not allowed to organize data");
|
||||
return redirect("/")
|
||||
}
|
||||
}
|
||||
12
frontend/middleware/group-only.ts
Normal file
12
frontend/middleware/group-only.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
interface GroupOnlyRedirectParams {
|
||||
$auth: any
|
||||
route: any
|
||||
redirect: (path: string) => void
|
||||
}
|
||||
|
||||
export default function ({ $auth, route, redirect }: GroupOnlyRedirectParams) {
|
||||
// this can only be used for routes that have a groupSlug parameter (e.g. /g/:groupSlug/...)
|
||||
if (route.params.groupSlug !== $auth.user.groupSlug) {
|
||||
redirect("/")
|
||||
}
|
||||
}
|
||||
@@ -379,6 +379,20 @@ export default {
|
||||
purpose: "maskable",
|
||||
},
|
||||
],
|
||||
"shortcuts": [
|
||||
{
|
||||
"name": "Shopping Lists",
|
||||
"short_name": "Shopping Lists",
|
||||
"description": "Open the shopping lists",
|
||||
"url": "/shopping-lists",
|
||||
},
|
||||
{
|
||||
"name": "Meal Planner",
|
||||
"short_name": "Meal Planner",
|
||||
"description": "Open the meal planner",
|
||||
"url": "/group/mealplan/planner/view",
|
||||
},
|
||||
],
|
||||
},
|
||||
icon: false, // disables the icon module
|
||||
},
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
"date-fns": "^2.29.3",
|
||||
"fuse.js": "^6.6.2",
|
||||
"isomorphic-dompurify": "^1.0.0",
|
||||
"nuxt": "^2.16.0",
|
||||
"nuxt": "^2.17.3",
|
||||
"v-jsoneditor": "^1.4.5",
|
||||
"vue-advanced-cropper": "^1.11.6",
|
||||
"vuedraggable": "^2.24.3",
|
||||
@@ -56,8 +56,8 @@
|
||||
},
|
||||
"resolutions": {
|
||||
"@nuxtjs/i18n/**/ufo": "0.7.9",
|
||||
"vue-template-compiler": "2.7.14",
|
||||
"vue-demi": "^0.13.11",
|
||||
"vue-template-compiler": "2.7.16",
|
||||
"postcss-preset-env": "^7.0.0",
|
||||
"typescript": "^4.9.5"
|
||||
}
|
||||
|
||||
@@ -31,7 +31,24 @@
|
||||
<BaseButton type="button" :loading="generatingToken" create @click.prevent="handlePasswordReset">
|
||||
{{ $t("user.generate-password-reset-link") }}
|
||||
</BaseButton>
|
||||
<AppButtonCopy v-if="resetUrl" :copy-text="resetUrl"></AppButtonCopy>
|
||||
</div>
|
||||
<div v-if="resetUrl" class="mb-2">
|
||||
<v-card-text>
|
||||
<p class="text-center pb-0">
|
||||
{{ resetUrl }}
|
||||
</p>
|
||||
</v-card-text>
|
||||
<v-card-actions class="align-center pt-0" style="gap: 4px">
|
||||
<BaseButton cancel @click="resetUrl = ''"> {{ $t("general.close") }} </BaseButton>
|
||||
<v-spacer></v-spacer>
|
||||
<BaseButton v-if="user.email" color="info" class="mr-1" @click="sendResetEmail">
|
||||
<template #icon>
|
||||
{{ $globals.icons.email }}
|
||||
</template>
|
||||
{{ $t("user.email") }}
|
||||
</BaseButton>
|
||||
<AppButtonCopy :icon="false" color="info" :copy-text="resetUrl" />
|
||||
</v-card-actions>
|
||||
</div>
|
||||
|
||||
<AutoForm v-model="user" :items="userForm" update-mode :disabled-fields="disabledFields" />
|
||||
@@ -46,7 +63,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { computed, defineComponent, useRoute, onMounted, ref, useContext } from "@nuxtjs/composition-api";
|
||||
import { useAdminApi } from "~/composables/api";
|
||||
import { useAdminApi, useUserApi } from "~/composables/api";
|
||||
import { useGroups } from "~/composables/use-groups";
|
||||
import { alert } from "~/composables/use-toast";
|
||||
import { useUserForm } from "~/composables/use-users";
|
||||
@@ -118,6 +135,17 @@ export default defineComponent({
|
||||
generatingToken.value = false;
|
||||
}
|
||||
|
||||
const userApi = useUserApi();
|
||||
async function sendResetEmail() {
|
||||
if (!user.value?.email) return;
|
||||
const { response } = await userApi.email.sendForgotPassword({ email: user.value.email });
|
||||
if (response && response.status === 200) {
|
||||
alert.success(i18n.tc("profile.email-sent"));
|
||||
} else {
|
||||
alert.error(i18n.tc("profile.error-sending-email"));
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
user,
|
||||
disabledFields,
|
||||
@@ -130,6 +158,7 @@ export default defineComponent({
|
||||
handlePasswordReset,
|
||||
resetUrl,
|
||||
generatingToken,
|
||||
sendResetEmail,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -98,31 +98,23 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, reactive, ref, useRouter } from "@nuxtjs/composition-api";
|
||||
|
||||
import { defineComponent, reactive, ref } from "@nuxtjs/composition-api";
|
||||
import draggable from "vuedraggable";
|
||||
import { useCookbooks } from "@/composables/use-group-cookbooks";
|
||||
import { useLoggedInState } from "~/composables/use-logged-in-state";
|
||||
import CookbookEditor from "~/components/Domain/Cookbook/CookbookEditor.vue";
|
||||
import { ReadCookBook } from "~/lib/api/types/cookbook";
|
||||
|
||||
export default defineComponent({
|
||||
components: { CookbookEditor, draggable },
|
||||
middleware: ["auth", "group-only"],
|
||||
setup() {
|
||||
const { isOwnGroup, loggedIn } = useLoggedInState();
|
||||
const router = useRouter();
|
||||
|
||||
if (!(loggedIn.value && isOwnGroup.value)) {
|
||||
router.back();
|
||||
}
|
||||
|
||||
const dialogStates = reactive({
|
||||
create: false,
|
||||
delete: false,
|
||||
});
|
||||
|
||||
const { cookbooks, actions } = useCookbooks();
|
||||
|
||||
|
||||
|
||||
// create
|
||||
const createTarget = ref<ReadCookBook | null>(null);
|
||||
async function createCookbook() {
|
||||
@@ -146,7 +138,6 @@ export default defineComponent({
|
||||
dialogStates.delete = false;
|
||||
deleteTarget.value = null;
|
||||
}
|
||||
|
||||
return {
|
||||
cookbooks,
|
||||
actions,
|
||||
|
||||
@@ -48,46 +48,54 @@
|
||||
</div>
|
||||
|
||||
<v-expansion-panels v-model="panels" multiple>
|
||||
<v-expansion-panel v-for="(ing, index) in parsedIng" :key="index">
|
||||
<v-expansion-panel-header class="my-0 py-0" disable-icon-rotate>
|
||||
<template #default="{ open }">
|
||||
<v-fade-transition>
|
||||
<span v-if="!open" key="0"> {{ ing.input }} </span>
|
||||
</v-fade-transition>
|
||||
</template>
|
||||
<template #actions>
|
||||
<v-icon left :color="isError(ing) ? 'error' : 'success'">
|
||||
{{ isError(ing) ? $globals.icons.alert : $globals.icons.check }}
|
||||
</v-icon>
|
||||
<div class="my-auto" :color="isError(ing) ? 'error-text' : 'success-text'">
|
||||
{{ ing.confidence ? asPercentage(ing.confidence.average) : "" }}
|
||||
</div>
|
||||
</template>
|
||||
</v-expansion-panel-header>
|
||||
<v-expansion-panel-content class="pb-0 mb-0">
|
||||
<RecipeIngredientEditor v-model="parsedIng[index].ingredient" allow-insert-ingredient @insert-ingredient="insertIngredient(index)" @delete="deleteIngredient(index)" />
|
||||
{{ ing.input }}
|
||||
<v-card-actions>
|
||||
<v-spacer />
|
||||
<BaseButton
|
||||
v-if="errors[index].unitError && errors[index].unitErrorMessage !== ''"
|
||||
color="warning"
|
||||
small
|
||||
@click="createUnit(ing.ingredient.unit, index)"
|
||||
>
|
||||
{{ errors[index].unitErrorMessage }}
|
||||
</BaseButton>
|
||||
<BaseButton
|
||||
v-if="errors[index].foodError && errors[index].foodErrorMessage !== ''"
|
||||
color="warning"
|
||||
small
|
||||
@click="createFood(ing.ingredient.food, index)"
|
||||
>
|
||||
{{ errors[index].foodErrorMessage }}
|
||||
</BaseButton>
|
||||
</v-card-actions>
|
||||
</v-expansion-panel-content>
|
||||
</v-expansion-panel>
|
||||
<draggable
|
||||
v-if="parsedIng.length > 0"
|
||||
v-model="parsedIng"
|
||||
handle=".handle"
|
||||
:style="{ width: '100%' }"
|
||||
ghost-class="ghost"
|
||||
>
|
||||
<v-expansion-panel v-for="(ing, index) in parsedIng" :key="index">
|
||||
<v-expansion-panel-header class="my-0 py-0" disable-icon-rotate>
|
||||
<template #default="{ open }">
|
||||
<v-fade-transition>
|
||||
<span v-if="!open" key="0"> {{ ing.input }} </span>
|
||||
</v-fade-transition>
|
||||
</template>
|
||||
<template #actions>
|
||||
<v-icon left :color="isError(ing) ? 'error' : 'success'">
|
||||
{{ isError(ing) ? $globals.icons.alert : $globals.icons.check }}
|
||||
</v-icon>
|
||||
<div class="my-auto" :color="isError(ing) ? 'error-text' : 'success-text'">
|
||||
{{ ing.confidence ? asPercentage(ing.confidence.average) : "" }}
|
||||
</div>
|
||||
</template>
|
||||
</v-expansion-panel-header>
|
||||
<v-expansion-panel-content class="pb-0 mb-0">
|
||||
<RecipeIngredientEditor v-model="parsedIng[index].ingredient" allow-insert-ingredient @insert-ingredient="insertIngredient(index)" @delete="deleteIngredient(index)" />
|
||||
{{ ing.input }}
|
||||
<v-card-actions>
|
||||
<v-spacer />
|
||||
<BaseButton
|
||||
v-if="errors[index].unitError && errors[index].unitErrorMessage !== ''"
|
||||
color="warning"
|
||||
small
|
||||
@click="createUnit(ing.ingredient.unit, index)"
|
||||
>
|
||||
{{ errors[index].unitErrorMessage }}
|
||||
</BaseButton>
|
||||
<BaseButton
|
||||
v-if="errors[index].foodError && errors[index].foodErrorMessage !== ''"
|
||||
color="warning"
|
||||
small
|
||||
@click="createFood(ing.ingredient.food, index)"
|
||||
>
|
||||
{{ errors[index].foodErrorMessage }}
|
||||
</BaseButton>
|
||||
</v-card-actions>
|
||||
</v-expansion-panel-content>
|
||||
</v-expansion-panel>
|
||||
</draggable>
|
||||
</v-expansion-panels>
|
||||
</v-container>
|
||||
</v-container>
|
||||
@@ -96,6 +104,7 @@
|
||||
<script lang="ts">
|
||||
import { computed, defineComponent, ref, useContext, useRoute, useRouter } from "@nuxtjs/composition-api";
|
||||
import { invoke, until } from "@vueuse/core";
|
||||
import draggable from "vuedraggable";
|
||||
import {
|
||||
CreateIngredientFood,
|
||||
CreateIngredientUnit,
|
||||
@@ -122,7 +131,9 @@ interface Error {
|
||||
export default defineComponent({
|
||||
components: {
|
||||
RecipeIngredientEditor,
|
||||
draggable
|
||||
},
|
||||
middleware: ["auth", "group-only"],
|
||||
setup() {
|
||||
const { $auth } = useContext();
|
||||
const panels = ref<number[]>([]);
|
||||
|
||||
@@ -33,6 +33,7 @@ import AdvancedOnly from "~/components/global/AdvancedOnly.vue";
|
||||
|
||||
export default defineComponent({
|
||||
components: { AdvancedOnly },
|
||||
middleware: ["auth", "group-only"],
|
||||
setup() {
|
||||
const { $auth, $globals, i18n } = useContext();
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ export default defineComponent({
|
||||
components: {
|
||||
RecipeOrganizerPage,
|
||||
},
|
||||
middleware: ["auth", "group-only"],
|
||||
setup() {
|
||||
const { items, actions } = useCategoryStore();
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ export default defineComponent({
|
||||
components: {
|
||||
RecipeOrganizerPage,
|
||||
},
|
||||
middleware: ["auth", "group-only"],
|
||||
setup() {
|
||||
const { items, actions } = useTagStore();
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ import RecipeTimeline from "~/components/Domain/Recipe/RecipeTimeline.vue";
|
||||
|
||||
export default defineComponent({
|
||||
components: { RecipeTimeline },
|
||||
middleware: ["auth", "group-only"],
|
||||
setup() {
|
||||
const api = useUserApi();
|
||||
const ready = ref<boolean>(false);
|
||||
|
||||
@@ -22,6 +22,7 @@ export default defineComponent({
|
||||
components: {
|
||||
RecipeOrganizerPage,
|
||||
},
|
||||
middleware: ["auth", "group-only"],
|
||||
setup() {
|
||||
const toolStore = useToolStore();
|
||||
const dialog = ref(false);
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
import { computed, defineComponent, useContext, useRoute } from "@nuxtjs/composition-api";
|
||||
|
||||
export default defineComponent({
|
||||
middleware: ["auth", "can-organize-only"],
|
||||
props: {
|
||||
value: {
|
||||
type: Boolean,
|
||||
|
||||
@@ -227,7 +227,6 @@ import { useFoodStore, useLabelStore } from "~/composables/store";
|
||||
import { VForm } from "~/types/vuetify";
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
components: { MultiPurposeLabel, RecipeDataAliasManagerDialog },
|
||||
setup() {
|
||||
const userApi = useUserApi();
|
||||
|
||||
@@ -65,6 +65,7 @@ import { useGroupSelf } from "~/composables/use-groups";
|
||||
import { ReadGroupPreferences } from "~/lib/api/types/group";
|
||||
|
||||
export default defineComponent({
|
||||
middleware: ["auth", "can-manage-only"],
|
||||
setup() {
|
||||
const { group, actions: groupActions } = useGroupSelf();
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ import { isSameDay, addDays, parseISO } from "date-fns";
|
||||
import { useMealplans } from "~/composables/use-group-mealplan";
|
||||
|
||||
export default defineComponent({
|
||||
middleware: ["auth"],
|
||||
setup() {
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
:key="mealplan.id"
|
||||
:recipe-id="mealplan.recipe ? mealplan.recipe.id : ''"
|
||||
class="mb-2"
|
||||
:route="mealplan.recipe ? true : false"
|
||||
:rating="mealplan.recipe ? mealplan.recipe.rating : 0"
|
||||
:slug="mealplan.recipe ? mealplan.recipe.slug : mealplan.title"
|
||||
:description="mealplan.recipe ? mealplan.recipe.description : mealplan.text"
|
||||
:name="mealplan.recipe ? mealplan.recipe.name : mealplan.title"
|
||||
|
||||
@@ -98,6 +98,7 @@ export default defineComponent({
|
||||
GroupMealPlanRuleForm,
|
||||
RecipeChips,
|
||||
},
|
||||
middleware: ["auth"],
|
||||
props: {
|
||||
value: {
|
||||
type: Boolean,
|
||||
|
||||
@@ -78,6 +78,7 @@ export default defineComponent({
|
||||
components: {
|
||||
UserAvatar,
|
||||
},
|
||||
middleware: ["auth"],
|
||||
setup() {
|
||||
const api = useUserApi();
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user