mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-25 09:13:11 -05:00
Compare commits
186 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
418a8ec72b | ||
|
|
770630bf73 | ||
|
|
89ee7475a6 | ||
|
|
bca5dd8282 | ||
|
|
dabd93c919 | ||
|
|
6991dff3e6 | ||
|
|
b0eece789d | ||
|
|
9fad4a9dce | ||
|
|
22d8c4d5dc | ||
|
|
7be24d3479 | ||
|
|
fbceb61b9a | ||
|
|
1be5bfaef1 | ||
|
|
fac1df31d3 | ||
|
|
6957e2fa74 | ||
|
|
4f02fae284 | ||
|
|
f2615c97e9 | ||
|
|
6b4c9a400d | ||
|
|
cca11b5a12 | ||
|
|
f697a7ee34 | ||
|
|
0d73338e12 | ||
|
|
2f4c6bd500 | ||
|
|
3807778e2f | ||
|
|
ee87a14401 | ||
|
|
ec458a0a08 | ||
|
|
2ff37c86d6 | ||
|
|
b7da3c0f73 | ||
|
|
d799136f0d | ||
|
|
d1d5754c6d | ||
|
|
52662fdce2 | ||
|
|
8df6033c19 | ||
|
|
c23660007e | ||
|
|
786aa2279c | ||
|
|
ab8c3be367 | ||
|
|
8bf8dfd3ed | ||
|
|
b3aa7aeb1a | ||
|
|
0f2b1d8d3a | ||
|
|
4de6391684 | ||
|
|
c3e68b7d8a | ||
|
|
7557d2e818 | ||
|
|
c22a2fc4a8 | ||
|
|
ad94a4f42f | ||
|
|
e6bf3b3acd | ||
|
|
711dd93851 | ||
|
|
2b6d7811ca | ||
|
|
3373abf787 | ||
|
|
741d37f59e | ||
|
|
b38c19ce71 | ||
|
|
1a385e941c | ||
|
|
c6f5b62ad0 | ||
|
|
84dad84326 | ||
|
|
f369c8fd6e | ||
|
|
467cf46c6d | ||
|
|
360b8e21d9 | ||
|
|
0b851e79ec | ||
|
|
faf716cb7e | ||
|
|
46f1ad7941 | ||
|
|
6e1112c73e | ||
|
|
6bd5a82b92 | ||
|
|
cba076b6a4 | ||
|
|
2ff1135b00 | ||
|
|
467b9c6d65 | ||
|
|
176e471276 | ||
|
|
193888fb30 | ||
|
|
13edefbf41 | ||
|
|
fd33468fda | ||
|
|
2a541f081a | ||
|
|
8ab09cf03b | ||
|
|
9e6ae2e514 | ||
|
|
94678fe6e0 | ||
|
|
ed533c8fad | ||
|
|
93f7d15917 | ||
|
|
53aa4dab51 | ||
|
|
92659c64eb | ||
|
|
6f871c6bdb | ||
|
|
f4f511aad6 | ||
|
|
03d384f3a5 | ||
|
|
0c2917a112 | ||
|
|
606a8f03a3 | ||
|
|
2d31c0abf2 | ||
|
|
15c752d428 | ||
|
|
b254cf3833 | ||
|
|
0bd023d8a8 | ||
|
|
aad50f2267 | ||
|
|
fcbc57b392 | ||
|
|
a62299e6ef | ||
|
|
82563fa948 | ||
|
|
7583c56b35 | ||
|
|
b9cc2dc257 | ||
|
|
0dcf81e764 | ||
|
|
3d3763d4b9 | ||
|
|
517727a4b6 | ||
|
|
1c26dff1e9 | ||
|
|
ed1834d945 | ||
|
|
bf8bc88ffb | ||
|
|
6c48eba5f7 | ||
|
|
dc7df0d4aa | ||
|
|
45d5194f19 | ||
|
|
8ad1a15bf1 | ||
|
|
57aeb401b8 | ||
|
|
e15a2f35e2 | ||
|
|
b28e135ceb | ||
|
|
148aca5e85 | ||
|
|
1ac7f90c28 | ||
|
|
413a8a82fc | ||
|
|
72c414bf94 | ||
|
|
b67263e63f | ||
|
|
1673eedff7 | ||
|
|
d3ee5f34f8 | ||
|
|
683f1ac69e | ||
|
|
d6d0f7de71 | ||
|
|
dd0eaac45f | ||
|
|
f8e672c7ac | ||
|
|
2aa9d84d6c | ||
|
|
2c13c4760e | ||
|
|
62bf733548 | ||
|
|
2c72ea17a2 | ||
|
|
06406c86f5 | ||
|
|
b7f7712011 | ||
|
|
4b13686261 | ||
|
|
9fade36014 | ||
|
|
eb1d569e95 | ||
|
|
1099e30a1d | ||
|
|
fa9a2d64f7 | ||
|
|
de142c47df | ||
|
|
c990420a87 | ||
|
|
d772e3bb4f | ||
|
|
bb8080475c | ||
|
|
c1e05f57db | ||
|
|
9ad68542e0 | ||
|
|
83997dbb47 | ||
|
|
b5f3c5bef7 | ||
|
|
ddd97cce10 | ||
|
|
0ecd57a50b | ||
|
|
e4efcee0df | ||
|
|
a6920f057e | ||
|
|
dbb212ceda | ||
|
|
5d5805459a | ||
|
|
3e68920e69 | ||
|
|
91c978a309 | ||
|
|
e7c101c96b | ||
|
|
004f3552c0 | ||
|
|
cd56149371 | ||
|
|
8edea0a7e0 | ||
|
|
df15e97026 | ||
|
|
760462e12f | ||
|
|
60793bb560 | ||
|
|
7c84d3dea5 | ||
|
|
eee1c5733d | ||
|
|
cf0a7ae9c9 | ||
|
|
be80d3e74c | ||
|
|
db1fabf5c8 | ||
|
|
e7e73772e0 | ||
|
|
e5cab0e4d0 | ||
|
|
6a14d5b7db | ||
|
|
57106c4cce | ||
|
|
61c6a991f3 | ||
|
|
6824b3c269 | ||
|
|
6b13166880 | ||
|
|
b2747d77e1 | ||
|
|
fc4d1b88d0 | ||
|
|
8798bd6e55 | ||
|
|
cef61ae29f | ||
|
|
e304d48e84 | ||
|
|
4f1a7c55b9 | ||
|
|
bae7acbc3b | ||
|
|
c0cf6a9aca | ||
|
|
f4570faf1a | ||
|
|
9548a7eb70 | ||
|
|
d5e3a1dacb | ||
|
|
1ce760ec7e | ||
|
|
9e23ed1a07 | ||
|
|
b3885cc3f8 | ||
|
|
5da990abd4 | ||
|
|
cb7302d2d9 | ||
|
|
a30084a199 | ||
|
|
c0654a5d95 | ||
|
|
945810c47a | ||
|
|
35f6b0e80e | ||
|
|
ab37c2e8c0 | ||
|
|
d1f82df936 | ||
|
|
6c7cb7e795 | ||
|
|
ecf80b8e9c | ||
|
|
24d8854723 | ||
|
|
2f9b711973 | ||
|
|
2b09495e87 | ||
|
|
ae5a1a9af2 |
@@ -30,7 +30,6 @@
|
||||
"dbaeumer.vscode-eslint",
|
||||
"matangover.mypy",
|
||||
"ms-python.black-formatter",
|
||||
"ms-python.isort",
|
||||
"ms-python.pylint",
|
||||
"ms-python.python",
|
||||
"ms-python.vscode-pylance",
|
||||
@@ -42,6 +41,7 @@
|
||||
"forwardPorts": [
|
||||
3000,
|
||||
9000,
|
||||
9091, // used by docker production
|
||||
24678 // used by nuxt when hot-reloading using polling
|
||||
],
|
||||
// Use 'onCreateCommand' to run commands at the end of container creation.
|
||||
|
||||
6
.github/workflows/partial-backend.yml
vendored
6
.github/workflows/partial-backend.yml
vendored
@@ -66,7 +66,7 @@ jobs:
|
||||
id: cache-validate
|
||||
if: steps.cached-poetry-dependencies.outputs.cache-hit == 'true'
|
||||
run: |
|
||||
echo "import black;print('venv good?')" > test.py && poetry run python test.py && echo "cache-hit-success=true" >> $GITHUB_OUTPUT
|
||||
echo "import fastapi;print('venv good?')" > test.py && poetry run python test.py && echo "cache-hit-success=true" >> $GITHUB_OUTPUT
|
||||
rm test.py
|
||||
continue-on-error: true
|
||||
|
||||
@@ -78,9 +78,9 @@ jobs:
|
||||
poetry add "psycopg2-binary==2.9.9"
|
||||
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' || steps.cache-validate.outputs.cache-hit-success != 'true'
|
||||
|
||||
- name: Formatting (Black)
|
||||
- name: Formatting (Ruff)
|
||||
run: |
|
||||
poetry run black . --check
|
||||
poetry run ruff format . --check
|
||||
|
||||
- name: Lint (Ruff)
|
||||
run: |
|
||||
|
||||
@@ -10,7 +10,8 @@ repos:
|
||||
- id: end-of-file-fixer
|
||||
- id: trailing-whitespace
|
||||
exclude: ^tests/data/
|
||||
- repo: https://github.com/psf/black
|
||||
rev: 24.1.0
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.4.3
|
||||
hooks:
|
||||
- id: black
|
||||
- id: ruff-format
|
||||
|
||||
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@@ -60,8 +60,5 @@
|
||||
},
|
||||
"[vue]": {
|
||||
"editor.formatOnSave": false
|
||||
},
|
||||
"[python]": {
|
||||
"editor.defaultFormatter": "ms-python.black-formatter",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ tasks:
|
||||
desc: run code generators
|
||||
cmds:
|
||||
- poetry run python dev/code-generation/main.py
|
||||
- task: py:format
|
||||
|
||||
dev:services:
|
||||
desc: starts postgres and mailpit containers
|
||||
@@ -105,7 +106,7 @@ tasks:
|
||||
py:format:
|
||||
desc: runs python code formatter
|
||||
cmds:
|
||||
- poetry run black mealie
|
||||
- poetry run ruff format .
|
||||
|
||||
py:lint:
|
||||
desc: runs python linter
|
||||
@@ -146,6 +147,12 @@ tasks:
|
||||
cmds:
|
||||
- poetry run python mealie/app.py
|
||||
|
||||
py:migrate:
|
||||
desc: generates a new migration file e.g. task py:migrate:generate "add new column"
|
||||
cmds:
|
||||
- poetry run alembic revision --autogenerate -m "{{ .CLI_ARGS }}"
|
||||
- task: py:format
|
||||
|
||||
ui:build:
|
||||
desc: builds the frontend in frontend/dist
|
||||
dir: frontend
|
||||
|
||||
12
alembic.ini
12
alembic.ini
@@ -58,15 +58,3 @@ sqlalchemy.url =
|
||||
# post_write_hooks defines scripts or Python functions that are run
|
||||
# on newly generated revision scripts. See the documentation for further
|
||||
# detail and examples
|
||||
|
||||
hooks = isort, black
|
||||
|
||||
# format using "isort" - use the console_scripts runner, against the "isort" entrypoint
|
||||
isort.type = console_scripts
|
||||
isort.entrypoint = isort
|
||||
isort.options = REVISION_SCRIPT_FILENAME
|
||||
|
||||
# format using "black" - use the console_scripts runner, against the "black" entrypoint
|
||||
black.type = console_scripts
|
||||
black.entrypoint = black
|
||||
black.options = REVISION_SCRIPT_FILENAME
|
||||
|
||||
@@ -22,7 +22,11 @@ target_metadata = SqlAlchemyBase.metadata
|
||||
|
||||
# Set DB url from config
|
||||
settings = get_app_settings()
|
||||
config.set_main_option("sqlalchemy.url", settings.DB_URL)
|
||||
|
||||
if not settings.DB_URL:
|
||||
raise Exception("DB URL not set in config")
|
||||
|
||||
config.set_main_option("sqlalchemy.url", settings.DB_URL.replace("%", "%%"))
|
||||
|
||||
|
||||
def run_migrations_offline():
|
||||
|
||||
@@ -0,0 +1,229 @@
|
||||
"""migrate favorites and ratings to user_ratings
|
||||
|
||||
Revision ID: d7c6efd2de42
|
||||
Revises: 09aba125b57a
|
||||
Create Date: 2024-03-18 02:28:15.896959
|
||||
|
||||
"""
|
||||
|
||||
from datetime import datetime
|
||||
from textwrap import dedent
|
||||
from typing import Any
|
||||
from uuid import uuid4
|
||||
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
|
||||
import mealie.db.migration_types
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "d7c6efd2de42"
|
||||
down_revision = "09aba125b57a"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def is_postgres():
|
||||
return op.get_context().dialect.name == "postgresql"
|
||||
|
||||
|
||||
def new_user_rating(user_id: Any, recipe_id: Any, rating: float | None = None, is_favorite: bool = False):
|
||||
if is_postgres():
|
||||
id = str(uuid4())
|
||||
else:
|
||||
id = "%.32x" % uuid4().int
|
||||
|
||||
now = datetime.now().isoformat()
|
||||
return {
|
||||
"id": id,
|
||||
"user_id": user_id,
|
||||
"recipe_id": recipe_id,
|
||||
"rating": rating,
|
||||
"is_favorite": is_favorite,
|
||||
"created_at": now,
|
||||
"update_at": now,
|
||||
}
|
||||
|
||||
|
||||
def migrate_user_favorites_to_user_ratings():
|
||||
bind = op.get_bind()
|
||||
session = orm.Session(bind=bind)
|
||||
|
||||
with session:
|
||||
user_ids_and_recipe_ids = session.execute(sa.text("SELECT user_id, recipe_id FROM users_to_favorites")).all()
|
||||
rows = [
|
||||
new_user_rating(user_id, recipe_id, is_favorite=True)
|
||||
for user_id, recipe_id in user_ids_and_recipe_ids
|
||||
if user_id and recipe_id
|
||||
]
|
||||
|
||||
if is_postgres():
|
||||
query = dedent(
|
||||
"""
|
||||
INSERT INTO users_to_recipes (id, user_id, recipe_id, rating, is_favorite, created_at, update_at)
|
||||
VALUES (:id, :user_id, :recipe_id, :rating, :is_favorite, :created_at, :update_at)
|
||||
ON CONFLICT DO NOTHING
|
||||
"""
|
||||
)
|
||||
else:
|
||||
query = dedent(
|
||||
"""
|
||||
INSERT OR IGNORE INTO users_to_recipes
|
||||
(id, user_id, recipe_id, rating, is_favorite, created_at, update_at)
|
||||
VALUES (:id, :user_id, :recipe_id, :rating, :is_favorite, :created_at, :update_at)
|
||||
"""
|
||||
)
|
||||
|
||||
for row in rows:
|
||||
session.execute(sa.text(query), row)
|
||||
|
||||
|
||||
def migrate_group_to_user_ratings(group_id: Any):
|
||||
bind = op.get_bind()
|
||||
session = orm.Session(bind=bind)
|
||||
|
||||
with session:
|
||||
user_ids = (
|
||||
session.execute(sa.text("SELECT id FROM users WHERE group_id=:group_id").bindparams(group_id=group_id))
|
||||
.scalars()
|
||||
.all()
|
||||
)
|
||||
|
||||
recipe_ids_ratings = session.execute(
|
||||
sa.text(
|
||||
"SELECT id, rating FROM recipes WHERE group_id=:group_id AND rating > 0 AND rating IS NOT NULL"
|
||||
).bindparams(group_id=group_id)
|
||||
).all()
|
||||
|
||||
# Convert recipe ratings to user ratings. Since we don't know who
|
||||
# rated the recipe initially, we copy the rating to all users.
|
||||
rows: list[dict] = []
|
||||
for recipe_id, rating in recipe_ids_ratings:
|
||||
for user_id in user_ids:
|
||||
rows.append(new_user_rating(user_id, recipe_id, rating, is_favorite=False))
|
||||
|
||||
if is_postgres():
|
||||
insert_query = dedent(
|
||||
"""
|
||||
INSERT INTO users_to_recipes (id, user_id, recipe_id, rating, is_favorite, created_at, update_at)
|
||||
VALUES (:id, :user_id, :recipe_id, :rating, :is_favorite, :created_at, :update_at)
|
||||
ON CONFLICT (user_id, recipe_id) DO NOTHING;
|
||||
"""
|
||||
)
|
||||
else:
|
||||
insert_query = dedent(
|
||||
"""
|
||||
INSERT OR IGNORE INTO users_to_recipes
|
||||
(id, user_id, recipe_id, rating, is_favorite, created_at, update_at)
|
||||
VALUES (:id, :user_id, :recipe_id, :rating, :is_favorite, :created_at, :update_at);
|
||||
"""
|
||||
)
|
||||
|
||||
update_query = dedent(
|
||||
"""
|
||||
UPDATE users_to_recipes
|
||||
SET rating = :rating, update_at = :update_at
|
||||
WHERE user_id = :user_id AND recipe_id = :recipe_id;
|
||||
"""
|
||||
)
|
||||
|
||||
# Create new user ratings with is_favorite set to False
|
||||
for row in rows:
|
||||
session.execute(sa.text(insert_query), row)
|
||||
|
||||
# Update existing user ratings with the correct rating
|
||||
for row in rows:
|
||||
session.execute(sa.text(update_query), row)
|
||||
|
||||
|
||||
def migrate_to_user_ratings():
|
||||
migrate_user_favorites_to_user_ratings()
|
||||
|
||||
bind = op.get_bind()
|
||||
session = orm.Session(bind=bind)
|
||||
|
||||
with session:
|
||||
group_ids = session.execute(sa.text("SELECT id FROM groups")).scalars().all()
|
||||
|
||||
for group_id in group_ids:
|
||||
migrate_group_to_user_ratings(group_id)
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.create_table(
|
||||
"users_to_recipes",
|
||||
sa.Column("user_id", mealie.db.migration_types.GUID(), nullable=False),
|
||||
sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=False),
|
||||
sa.Column("rating", sa.Float(), nullable=True),
|
||||
sa.Column("is_favorite", sa.Boolean(), nullable=False),
|
||||
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
||||
sa.Column("created_at", sa.DateTime(), nullable=True),
|
||||
sa.Column("update_at", sa.DateTime(), nullable=True),
|
||||
sa.ForeignKeyConstraint(
|
||||
["recipe_id"],
|
||||
["recipes.id"],
|
||||
),
|
||||
sa.ForeignKeyConstraint(
|
||||
["user_id"],
|
||||
["users.id"],
|
||||
),
|
||||
sa.PrimaryKeyConstraint("user_id", "recipe_id", "id"),
|
||||
sa.UniqueConstraint("user_id", "recipe_id", name="user_id_recipe_id_rating_key"),
|
||||
)
|
||||
op.create_index(op.f("ix_users_to_recipes_created_at"), "users_to_recipes", ["created_at"], unique=False)
|
||||
op.create_index(op.f("ix_users_to_recipes_is_favorite"), "users_to_recipes", ["is_favorite"], unique=False)
|
||||
op.create_index(op.f("ix_users_to_recipes_rating"), "users_to_recipes", ["rating"], unique=False)
|
||||
op.create_index(op.f("ix_users_to_recipes_recipe_id"), "users_to_recipes", ["recipe_id"], unique=False)
|
||||
op.create_index(op.f("ix_users_to_recipes_user_id"), "users_to_recipes", ["user_id"], unique=False)
|
||||
|
||||
migrate_to_user_ratings()
|
||||
|
||||
if is_postgres():
|
||||
op.drop_index("ix_users_to_favorites_recipe_id", table_name="users_to_favorites")
|
||||
op.drop_index("ix_users_to_favorites_user_id", table_name="users_to_favorites")
|
||||
op.alter_column("recipes", "rating", existing_type=sa.INTEGER(), type_=sa.Float(), existing_nullable=True)
|
||||
else:
|
||||
op.execute("DROP INDEX IF EXISTS ix_users_to_favorites_recipe_id")
|
||||
op.execute("DROP INDEX IF EXISTS ix_users_to_favorites_user_id")
|
||||
with op.batch_alter_table("recipes") as batch_op:
|
||||
batch_op.alter_column("rating", existing_type=sa.INTEGER(), type_=sa.Float(), existing_nullable=True)
|
||||
|
||||
op.drop_table("users_to_favorites")
|
||||
op.create_index(op.f("ix_recipes_rating"), "recipes", ["rating"], unique=False)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.alter_column(
|
||||
"recipes_ingredients", "quantity", existing_type=sa.Float(), type_=sa.INTEGER(), existing_nullable=True
|
||||
)
|
||||
op.drop_index(op.f("ix_recipes_rating"), table_name="recipes")
|
||||
op.alter_column("recipes", "rating", existing_type=sa.Float(), type_=sa.INTEGER(), existing_nullable=True)
|
||||
op.create_unique_constraint("ingredient_units_name_group_id_key", "ingredient_units", ["name", "group_id"])
|
||||
op.create_unique_constraint("ingredient_foods_name_group_id_key", "ingredient_foods", ["name", "group_id"])
|
||||
op.create_table(
|
||||
"users_to_favorites",
|
||||
sa.Column("user_id", sa.CHAR(length=32), nullable=True),
|
||||
sa.Column("recipe_id", sa.CHAR(length=32), nullable=True),
|
||||
sa.ForeignKeyConstraint(
|
||||
["recipe_id"],
|
||||
["recipes.id"],
|
||||
),
|
||||
sa.ForeignKeyConstraint(
|
||||
["user_id"],
|
||||
["users.id"],
|
||||
),
|
||||
sa.UniqueConstraint("user_id", "recipe_id", name="user_id_recipe_id_key"),
|
||||
)
|
||||
op.create_index("ix_users_to_favorites_user_id", "users_to_favorites", ["user_id"], unique=False)
|
||||
op.create_index("ix_users_to_favorites_recipe_id", "users_to_favorites", ["recipe_id"], unique=False)
|
||||
op.drop_index(op.f("ix_users_to_recipes_user_id"), table_name="users_to_recipes")
|
||||
op.drop_index(op.f("ix_users_to_recipes_recipe_id"), table_name="users_to_recipes")
|
||||
op.drop_index(op.f("ix_users_to_recipes_rating"), table_name="users_to_recipes")
|
||||
op.drop_index(op.f("ix_users_to_recipes_is_favorite"), table_name="users_to_recipes")
|
||||
op.drop_index(op.f("ix_users_to_recipes_created_at"), table_name="users_to_recipes")
|
||||
op.drop_table("users_to_recipes")
|
||||
# ### end Alembic commands ###
|
||||
@@ -0,0 +1,52 @@
|
||||
"""add group recipe actions
|
||||
|
||||
Revision ID: 7788478a0338
|
||||
Revises: d7c6efd2de42
|
||||
Create Date: 2024-04-07 01:05:20.816270
|
||||
|
||||
"""
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
import mealie.db.migration_types
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "7788478a0338"
|
||||
down_revision = "d7c6efd2de42"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.create_table(
|
||||
"recipe_actions",
|
||||
sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
|
||||
sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
|
||||
sa.Column("action_type", sa.String(), nullable=False),
|
||||
sa.Column("title", sa.String(), nullable=False),
|
||||
sa.Column("url", sa.String(), nullable=False),
|
||||
sa.Column("created_at", sa.DateTime(), nullable=True),
|
||||
sa.Column("update_at", sa.DateTime(), nullable=True),
|
||||
sa.ForeignKeyConstraint(
|
||||
["group_id"],
|
||||
["groups.id"],
|
||||
),
|
||||
sa.PrimaryKeyConstraint("id"),
|
||||
)
|
||||
op.create_index(op.f("ix_recipe_actions_action_type"), "recipe_actions", ["action_type"], unique=False)
|
||||
op.create_index(op.f("ix_recipe_actions_created_at"), "recipe_actions", ["created_at"], unique=False)
|
||||
op.create_index(op.f("ix_recipe_actions_group_id"), "recipe_actions", ["group_id"], unique=False)
|
||||
op.create_index(op.f("ix_recipe_actions_title"), "recipe_actions", ["title"], unique=False)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_index(op.f("ix_recipe_actions_title"), table_name="recipe_actions")
|
||||
op.drop_index(op.f("ix_recipe_actions_group_id"), table_name="recipe_actions")
|
||||
op.drop_index(op.f("ix_recipe_actions_created_at"), table_name="recipe_actions")
|
||||
op.drop_index(op.f("ix_recipe_actions_action_type"), table_name="recipe_actions")
|
||||
op.drop_table("recipe_actions")
|
||||
# ### end Alembic commands ###
|
||||
@@ -35,18 +35,24 @@ LOCALE_DATA: dict[str, LocaleData] = {
|
||||
"es-ES": LocaleData(name="Español (Spanish)"),
|
||||
"fi-FI": LocaleData(name="Suomi (Finnish)"),
|
||||
"fr-FR": LocaleData(name="Français (French)"),
|
||||
"gl-ES": LocaleData(name="Galego (Galician)"),
|
||||
"he-IL": LocaleData(name="עברית (Hebrew)", dir="rtl"),
|
||||
"hr-HR": LocaleData(name="Hrvatski (Croatian)"),
|
||||
"hu-HU": LocaleData(name="Magyar (Hungarian)"),
|
||||
"is-IS": LocaleData(name="Íslenska (Icelandic)"),
|
||||
"it-IT": LocaleData(name="Italiano (Italian)"),
|
||||
"ja-JP": LocaleData(name="日本語 (Japanese)"),
|
||||
"ko-KR": LocaleData(name="한국어 (Korean)"),
|
||||
"no-NO": LocaleData(name="Norsk (Norwegian)"),
|
||||
"lt-LT": LocaleData(name="Lietuvių (Lithuanian)"),
|
||||
"lv-LV": LocaleData(name="Latviešu (Latvian)"),
|
||||
"nl-NL": LocaleData(name="Nederlands (Dutch)"),
|
||||
"no-NO": LocaleData(name="Norsk (Norwegian)"),
|
||||
"pl-PL": LocaleData(name="Polski (Polish)"),
|
||||
"pt-BR": LocaleData(name="Português do Brasil (Brazilian Portuguese)"),
|
||||
"pt-PT": LocaleData(name="Português (Portuguese)"),
|
||||
"ro-RO": LocaleData(name="Română (Romanian)"),
|
||||
"ru-RU": LocaleData(name="Pусский (Russian)"),
|
||||
"sl-SI": LocaleData(name="Slovenščina (Slovenian)"),
|
||||
"sr-SP": LocaleData(name="српски (Serbian)"),
|
||||
"sv-SE": LocaleData(name="Svenska (Swedish)"),
|
||||
"tr-TR": LocaleData(name="Türkçe (Turkish)"),
|
||||
|
||||
@@ -3,8 +3,6 @@ import re
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
import black
|
||||
import isort
|
||||
from jinja2 import Template
|
||||
from rich.logging import RichHandler
|
||||
|
||||
@@ -23,10 +21,7 @@ def render_python_template(template_file: Path | str, dest: Path, data: dict):
|
||||
|
||||
text = tplt.render(data=data)
|
||||
|
||||
text = black.format_str(text, mode=black.FileMode())
|
||||
|
||||
dest.write_text(text)
|
||||
isort.file(dest)
|
||||
|
||||
|
||||
@dataclass
|
||||
|
||||
@@ -14,6 +14,7 @@ services:
|
||||
- 9091:9000
|
||||
environment:
|
||||
ALLOW_SIGNUP: "false"
|
||||
LOG_LEVEL: "DEBUG"
|
||||
|
||||
DB_ENGINE: sqlite # Optional: 'sqlite', 'postgres'
|
||||
# =====================================
|
||||
|
||||
@@ -40,10 +40,11 @@ init
|
||||
GUNICORN_PORT=${API_PORT:-9000}
|
||||
|
||||
# Start API
|
||||
hostip=`/sbin/ip route|awk '/default/ { print $3 }'`
|
||||
HOST_IP=`/sbin/ip route|awk '/default/ { print $3 }'`
|
||||
|
||||
if [ "$WEB_GUNICORN" = 'true' ]; then
|
||||
echo "Starting Gunicorn"
|
||||
exec gunicorn mealie.app:app -b 0.0.0.0:$GUNICORN_PORT --forwarded-allow-ips=$hostip -k uvicorn.workers.UvicornWorker -c /app/gunicorn_conf.py --preload
|
||||
exec gunicorn mealie.app:app -b 0.0.0.0:$GUNICORN_PORT --forwarded-allow-ips=$HOST_IP -k uvicorn.workers.UvicornWorker -c /app/gunicorn_conf.py --preload
|
||||
else
|
||||
exec uvicorn mealie.app:app --host 0.0.0.0 --forwarded-allow-ips=$hostip --port $GUNICORN_PORT
|
||||
exec python /app/mealie/main.py
|
||||
fi
|
||||
|
||||
@@ -20,7 +20,7 @@ Before you can start using OIDC Authentication, you must first configure a new c
|
||||
1. Create a new client application
|
||||
- The Provider type should be OIDC or OAuth2
|
||||
- The Grant type should be `Authorization Code`
|
||||
- The Application type should be `Web`
|
||||
- The Application type should be `Web` or `SPA`
|
||||
- The Client type should be `public`
|
||||
|
||||
2. Configure redirect URI
|
||||
@@ -42,7 +42,9 @@ Before you can start using OIDC Authentication, you must first configure a new c
|
||||
|
||||
4. Configure allowed scopes
|
||||
|
||||
The scopes required are `openid profile email groups`
|
||||
The scopes required are `openid profile email`
|
||||
|
||||
If you plan to use the [groups](#groups) to configure access within Mealie, you will need to also add the scope defined by the `OIDC_GROUPS_CLAIM` environment variable. The default claim is `groups`
|
||||
|
||||
## Mealie Setup
|
||||
|
||||
@@ -50,7 +52,7 @@ Take the client id and your discovery URL and update your environment variables
|
||||
|
||||
### Groups
|
||||
|
||||
There are two (optional) [environment variables](../installation/backend-config.md#openid-connect-oidc) that can control which of the users in your IdP can log in to Mealie and what permissions they will have. The groups should be **defined in your IdP** and be returned in the `groups` claim.
|
||||
There are two (optional) [environment variables](../installation/backend-config.md#openid-connect-oidc) that can control which of the users in your IdP can log in to Mealie and what permissions they will have. Keep in mind that these groups **do not necessarily correspond to groups in Mealie**. The groups claim is configurable via the `OIDC_GROUPS_CLAIM` environment variable. The groups should be **defined in your IdP** and be returned in the configured claim value.
|
||||
|
||||
`OIDC_USER_GROUP`: Users must be a part of this group (within your IdP) to be able to log in.
|
||||
|
||||
|
||||
@@ -81,12 +81,63 @@ The meal planner has the concept of plan rules. These offer a flexible way to us
|
||||
|
||||
The shopping lists feature is a great way to keep track of what you need to buy for your next meal. You can add items directly to the shopping list or link a recipe and all of it's ingredients to track meals during the week.
|
||||
|
||||
!!! warning
|
||||
At this time there isn't a tight integration between meal-plans and shopping lists; however, it's something we have planned for the future.
|
||||
|
||||
|
||||
[Shopping List Demo](https://demo.mealie.io/shopping-lists){ .md-button .md-button--primary }
|
||||
|
||||
## Integrations
|
||||
|
||||
Mealie is designed to integrate with many different external services. There are several ways you can integrate with Mealie to achieve custom IoT automations, data synchronization, and anything else you can think of. [You can work directly with Mealie through the API](./api-usage.md), or leverage other services to make seamless integrations.
|
||||
|
||||
### Notifiers
|
||||
|
||||
Notifiers are event-driven notifications sent when specific actions are performed within Mealie. Some actions include:
|
||||
- creating a recipe
|
||||
- adding items to a shopping list
|
||||
- creating a new mealplan
|
||||
|
||||
Notifiers use the [Apprise library](https://github.com/caronc/apprise/wiki), which integrates with a large number of notification services. In addition, certain custom notifiers send basic event data to the consumer (e.g. the `id` of the resource). These include:
|
||||
|
||||
- `form` and `forms`
|
||||
- `json` and `jsons`
|
||||
- `xml` and `xmls`
|
||||
|
||||
[Notifiers Demo](https://demo.mealie.io/group/notifiers){ .md-button .md-button--primary }
|
||||
|
||||
### Webhooks
|
||||
|
||||
Unlike notifiers, which are event-driven notifications, Webhooks allow you to send scheduled notifications to your desired endpoint. Webhooks are sent on the day of a scheduled mealplan, at the specified time, and contain the mealplan data in the request.
|
||||
|
||||
[Webhooks Demo](https://demo.mealie.io/group/webhooks){ .md-button .md-button--primary }
|
||||
|
||||
### Recipe Actions
|
||||
|
||||
Recipe Actions are custom actions you can add to all recipes in Mealie. This is a great way to add custom integrations that are fired manually. There are two types of recipe actions:
|
||||
|
||||
1. link - these actions will take you directly to an external page
|
||||
2. post - these actions will send a `POST` request to the specified URL, with the recipe JSON in the request body. These can be used, for instance, to manually trigger a webhook in Home Assistant
|
||||
|
||||
Recipe Action URLs can include merge fields to inject the current recipe's data. For instance, you can use the following URL to include a Google search with the recipe's slug:
|
||||
```
|
||||
https://www.google.com/search?q=${slug}
|
||||
```
|
||||
|
||||
When the action is clicked on, the `${slug}` field is replaced with the recipe's slug value. So, for example, it might take you to this URL on one of your recipes:
|
||||
```
|
||||
https://www.google.com/search?q=pasta-fagioli
|
||||
```
|
||||
|
||||
A common use case for "link" recipe actions is to integrate with the Bring! shopping list. Simply add a Recipe Action with the following URL:
|
||||
```
|
||||
https://api.getbring.com/rest/bringrecipes/deeplink?url=${url}&source=web
|
||||
```
|
||||
|
||||
Below is a list of all valid merge fields:
|
||||
|
||||
- ${id}
|
||||
- ${slug}
|
||||
- ${url}
|
||||
|
||||
To add, modify, or delete Recipe Actions, visit the Data Management page (more on that below).
|
||||
|
||||
## Data Management
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
| API_DOCS | True | Turns on/off access to the API documentation locally. |
|
||||
| TZ | UTC | Must be set to get correct date/time on the server |
|
||||
| ALLOW_SIGNUP<super>\*</super> | false | Allow user sign-up without token |
|
||||
| LOG_CONFIG_OVERRIDE | | Override the config for logging with a custom path |
|
||||
| LOG_LEVEL | info | logging level configured |
|
||||
|
||||
<super>\*</super> Starting in v1.4.0 this was changed to default to `false` as apart of a security review of the application.
|
||||
|
||||
@@ -27,14 +29,15 @@
|
||||
|
||||
### Database
|
||||
|
||||
| Variables | Default | Description |
|
||||
| ----------------- | :------: | -------------------------------- |
|
||||
| DB_ENGINE | sqlite | Optional: 'sqlite', 'postgres' |
|
||||
| POSTGRES_USER | mealie | Postgres database user |
|
||||
| POSTGRES_PASSWORD | mealie | Postgres database password |
|
||||
| POSTGRES_SERVER | postgres | Postgres database server address |
|
||||
| POSTGRES_PORT | 5432 | Postgres database port |
|
||||
| POSTGRES_DB | mealie | Postgres database name |
|
||||
| Variables | Default | Description |
|
||||
| --------------------- | :------: | ----------------------------------------------------------------------- |
|
||||
| DB_ENGINE | sqlite | Optional: 'sqlite', 'postgres' |
|
||||
| POSTGRES_USER | mealie | Postgres database user |
|
||||
| POSTGRES_PASSWORD | mealie | Postgres database password |
|
||||
| POSTGRES_SERVER | postgres | Postgres database server address |
|
||||
| POSTGRES_PORT | 5432 | Postgres database port |
|
||||
| POSTGRES_DB | mealie | Postgres database name |
|
||||
| POSTGRES_URL_OVERRIDE | None | Optional Postgres URL override to use instead of POSTGRES\_\* variables |
|
||||
|
||||
### Email
|
||||
|
||||
@@ -95,6 +98,9 @@ For usage, see [Usage - OpenID Connect](../authentication/oidc.md)
|
||||
| OIDC_PROVIDER_NAME | OAuth | The provider name is shown in SSO login button. "Login with <OIDC_PROVIDER_NAME\>" |
|
||||
| OIDC_REMEMBER_ME | False | Because redirects bypass the login screen, you cant extend your session by clicking the "Remember Me" checkbox. By setting this value to true, a session will be extended as if "Remember Me" was checked |
|
||||
| OIDC_SIGNING_ALGORITHM | RS256 | The algorithm used to sign the id token (examples: RS256, HS256) |
|
||||
| OIDC_USER_CLAIM | email | This is the claim which Mealie will use to look up an existing user by (e.g. "email", "preferred_username") |
|
||||
| OIDC_GROUPS_CLAIM | groups | Optional if not using `OIDC_USER_GROUP` or `OIDC_ADMIN_GROUP`. This is the claim Mealie will request from your IdP and will use to compare to `OIDC_USER_GROUP` or `OIDC_ADMIN_GROUP` to allow the user to log in to Mealie or is set as an admin. **Your IdP must be configured to grant this claim**|
|
||||
| OIDC_TLS_CACERTFILE | None | File path to Certificate Authority used to verify server certificate (e.g. `/path/to/ca.crt`) |
|
||||
|
||||
### Themeing
|
||||
|
||||
|
||||
16
docs/docs/documentation/getting-started/installation/logs.md
Normal file
16
docs/docs/documentation/getting-started/installation/logs.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# Logs
|
||||
|
||||
:octicons-tag-24: v1.5.0
|
||||
|
||||
## Highlighs
|
||||
|
||||
- Logs are written to `/app/data/mealie.log` by default in the container.
|
||||
- Logs are also written to stdout and stderr.
|
||||
- You can adjust the log level using the `LOG_LEVEL` environment variable.
|
||||
|
||||
## Configuration
|
||||
|
||||
Starting in v1.5.0 logging is now highly configurable. Using the `LOG_CONFIG_OVERRIDE` you can provide the application with a custom configuration to log however you'd like. This configuration file is based off the [Python Logging Config](https://docs.python.org/3/library/logging.config.html#logging.config.fileConfig). It can be difficult to understand the configuration at first, so here are some resources to help get started.
|
||||
|
||||
- This [YouTube Video](https://www.youtube.com/watch?v=9L77QExPmI0) for a great walkthrough on the logging file format.
|
||||
- Our [Logging Config](https://github.com/mealie-recipes/mealie/blob/mealie-next/mealie/core/logger/logconf.prod.json)
|
||||
@@ -5,40 +5,39 @@ PostgreSQL might be considered if you need to support many concurrent users. In
|
||||
**For Environment Variable Configuration, see** [Backend Configuration](./backend-config.md)
|
||||
|
||||
```yaml
|
||||
---
|
||||
version: "3.7"
|
||||
services:
|
||||
mealie:
|
||||
image: ghcr.io/mealie-recipes/mealie:v1.3.2 # (3)
|
||||
image: ghcr.io/mealie-recipes/mealie:v1.5.1 # (3)
|
||||
container_name: mealie
|
||||
restart: always
|
||||
ports:
|
||||
- "9925:9000" # (1)
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 1000M # (2)
|
||||
depends_on:
|
||||
- postgres
|
||||
volumes:
|
||||
- mealie-data:/app/data/
|
||||
environment:
|
||||
# Set Backend ENV Variables Here
|
||||
- ALLOW_SIGNUP=true
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=America/Anchorage
|
||||
- MAX_WORKERS=1
|
||||
- WEB_CONCURRENCY=1
|
||||
- BASE_URL=https://mealie.yourdomain.com
|
||||
# Set Backend ENV Variables Here
|
||||
ALLOW_SIGNUP: true
|
||||
PUID: 1000
|
||||
PGID: 1000
|
||||
TZ: America/Anchorage
|
||||
MAX_WORKERS: 1
|
||||
WEB_CONCURRENCY: 1
|
||||
BASE_URL: https://mealie.yourdomain.com
|
||||
# Database Settings
|
||||
DB_ENGINE: postgres
|
||||
POSTGRES_USER: mealie
|
||||
POSTGRES_PASSWORD: mealie
|
||||
POSTGRES_SERVER: postgres
|
||||
POSTGRES_PORT: 5432
|
||||
POSTGRES_DB: mealie
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
|
||||
# Database Settings
|
||||
- DB_ENGINE=postgres
|
||||
- POSTGRES_USER=mealie
|
||||
- POSTGRES_PASSWORD=mealie
|
||||
- POSTGRES_SERVER=postgres
|
||||
- POSTGRES_PORT=5432
|
||||
- POSTGRES_DB=mealie
|
||||
restart: always
|
||||
postgres:
|
||||
container_name: postgres
|
||||
image: postgres:15
|
||||
@@ -48,12 +47,15 @@ services:
|
||||
environment:
|
||||
POSTGRES_PASSWORD: mealie
|
||||
POSTGRES_USER: mealie
|
||||
healthcheck:
|
||||
test: ["CMD", "pg_isready"]
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
|
||||
volumes:
|
||||
mealie-data:
|
||||
driver: local
|
||||
mealie-pgdata:
|
||||
driver: local
|
||||
```
|
||||
|
||||
<!-- Updating This? Be Sure to also update the SQLite Annotations -->
|
||||
|
||||
@@ -9,12 +9,11 @@ SQLite is a popular, open source, self-contained, zero-configuration database th
|
||||
**For Environment Variable Configuration, see** [Backend Configuration](./backend-config.md)
|
||||
|
||||
```yaml
|
||||
---
|
||||
version: "3.7"
|
||||
services:
|
||||
mealie:
|
||||
image: ghcr.io/mealie-recipes/mealie:v1.3.2 # (3)
|
||||
image: ghcr.io/mealie-recipes/mealie:v1.5.1 # (3)
|
||||
container_name: mealie
|
||||
restart: always
|
||||
ports:
|
||||
- "9925:9000" # (1)
|
||||
deploy:
|
||||
@@ -24,19 +23,17 @@ services:
|
||||
volumes:
|
||||
- mealie-data:/app/data/
|
||||
environment:
|
||||
# Set Backend ENV Variables Here
|
||||
- ALLOW_SIGNUP=true
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=America/Anchorage
|
||||
- MAX_WORKERS=1
|
||||
- WEB_CONCURRENCY=1
|
||||
- BASE_URL=https://mealie.yourdomain.com
|
||||
restart: always
|
||||
# Set Backend ENV Variables Here
|
||||
ALLOW_SIGNUP: true
|
||||
PUID: 1000
|
||||
PGID: 1000
|
||||
TZ: America/Anchorage
|
||||
MAX_WORKERS: 1
|
||||
WEB_CONCURRENCY: 1
|
||||
BASE_URL: https://mealie.yourdomain.com
|
||||
|
||||
volumes:
|
||||
mealie-data:
|
||||
driver: local
|
||||
```
|
||||
|
||||
<!-- Updating This? Be Sure to also update the Postgres Annotations -->
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -73,6 +73,7 @@ nav:
|
||||
- PostgreSQL: "documentation/getting-started/installation/postgres.md"
|
||||
- Backend Configuration: "documentation/getting-started/installation/backend-config.md"
|
||||
- Security: "documentation/getting-started/installation/security.md"
|
||||
- Logs: "documentation/getting-started/installation/logs.md"
|
||||
- Usage:
|
||||
- Backup and Restoring: "documentation/getting-started/usage/backups-and-restoring.md"
|
||||
- Permissions and Public Access: "documentation/getting-started/usage/permissions-and-public-access.md"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<script lang="ts">
|
||||
import { defineComponent, computed, useContext } from "@nuxtjs/composition-api";
|
||||
import RecipeOrganizerSelector from "~/components/Domain/Recipe/RecipeOrganizerSelector.vue";
|
||||
import { RecipeTag, RecipeCategory } from "~/lib/api/types/group";
|
||||
import { RecipeTag, RecipeCategory } from "~/lib/api/types/recipe";
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
<v-spacer></v-spacer>
|
||||
<div v-if="!open" class="custom-btn-group ma-1">
|
||||
<RecipeFavoriteBadge v-if="loggedIn" class="mx-1" color="info" button-style :slug="recipe.slug" show-always />
|
||||
<RecipeFavoriteBadge v-if="loggedIn" class="mx-1" color="info" button-style :recipe-id="recipe.id" show-always />
|
||||
<RecipeTimelineBadge v-if="loggedIn" button-style :slug="recipe.slug" :recipe-name="recipe.name" />
|
||||
<div v-if="loggedIn">
|
||||
<v-tooltip v-if="!locked" bottom color="info">
|
||||
@@ -70,6 +70,7 @@
|
||||
print: true,
|
||||
printPreferences: true,
|
||||
share: loggedIn,
|
||||
recipeActions: true,
|
||||
}"
|
||||
@print="$emit('print')"
|
||||
/>
|
||||
|
||||
@@ -35,9 +35,9 @@
|
||||
|
||||
<slot name="actions">
|
||||
<v-card-actions v-if="showRecipeContent" class="px-1">
|
||||
<RecipeFavoriteBadge v-if="isOwnGroup" class="absolute" :slug="slug" show-always />
|
||||
<RecipeFavoriteBadge v-if="isOwnGroup" class="absolute" :recipe-id="recipeId" show-always />
|
||||
|
||||
<RecipeRating class="pb-1" :value="rating" :name="name" :slug="slug" :small="true" />
|
||||
<RecipeRating class="pb-1" :value="rating" :recipe-id="recipeId" :slug="slug" :small="true" />
|
||||
<v-spacer></v-spacer>
|
||||
<RecipeChips :truncate="true" :items="tags" :title="false" :limit="2" :small="true" url-prefix="tags" />
|
||||
|
||||
@@ -97,6 +97,10 @@ export default defineComponent({
|
||||
required: false,
|
||||
default: 0,
|
||||
},
|
||||
ratingColor: {
|
||||
type: String,
|
||||
default: "secondary",
|
||||
},
|
||||
image: {
|
||||
type: String,
|
||||
required: false,
|
||||
|
||||
@@ -38,17 +38,14 @@
|
||||
</v-list-item-subtitle>
|
||||
<div class="d-flex flex-wrap justify-end align-center">
|
||||
<slot name="actions">
|
||||
<RecipeFavoriteBadge v-if="isOwnGroup && showRecipeContent" :slug="slug" show-always />
|
||||
<v-rating
|
||||
v-if="showRecipeContent"
|
||||
color="secondary"
|
||||
<RecipeFavoriteBadge v-if="isOwnGroup && showRecipeContent" :recipe-id="recipeId" show-always />
|
||||
<RecipeRating
|
||||
:class="isOwnGroup ? 'ml-auto' : 'ml-auto pb-2'"
|
||||
background-color="secondary lighten-3"
|
||||
dense
|
||||
length="5"
|
||||
size="15"
|
||||
:value="rating"
|
||||
></v-rating>
|
||||
:recipe-id="recipeId"
|
||||
:slug="slug"
|
||||
:small="true"
|
||||
/>
|
||||
<v-spacer></v-spacer>
|
||||
|
||||
<!-- If we're not logged-in, no items display, so we hide this menu -->
|
||||
@@ -85,12 +82,14 @@ import { computed, defineComponent, useContext, useRoute } from "@nuxtjs/composi
|
||||
import RecipeFavoriteBadge from "./RecipeFavoriteBadge.vue";
|
||||
import RecipeContextMenu from "./RecipeContextMenu.vue";
|
||||
import RecipeCardImage from "./RecipeCardImage.vue";
|
||||
import RecipeRating from "./RecipeRating.vue";
|
||||
import { useLoggedInState } from "~/composables/use-logged-in-state";
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
RecipeFavoriteBadge,
|
||||
RecipeContextMenu,
|
||||
RecipeRating,
|
||||
RecipeCardImage,
|
||||
},
|
||||
props: {
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { computed, defineComponent, useContext, useRoute } from "@nuxtjs/composition-api";
|
||||
import { RecipeCategory, RecipeTag, RecipeTool } from "~/lib/api/types/user";
|
||||
import { RecipeCategory, RecipeTag, RecipeTool } from "~/lib/api/types/recipe";
|
||||
|
||||
export type UrlPrefixParam = "tags" | "categories" | "tools";
|
||||
|
||||
|
||||
@@ -105,6 +105,26 @@
|
||||
</v-list-item-icon>
|
||||
<v-list-item-title>{{ item.title }}</v-list-item-title>
|
||||
</v-list-item>
|
||||
<div v-if="useItems.recipeActions && recipeActions && recipeActions.length">
|
||||
<v-divider />
|
||||
<v-list-group @click.stop>
|
||||
<template #activator>
|
||||
<v-list-item-title>{{ $tc("recipe.recipe-actions") }}</v-list-item-title>
|
||||
</template>
|
||||
<v-list dense class="ma-0 pa-0">
|
||||
<v-list-item
|
||||
v-for="(action, index) in recipeActions"
|
||||
:key="index"
|
||||
class="pl-6"
|
||||
@click="executeRecipeAction(action)"
|
||||
>
|
||||
<v-list-item-title>
|
||||
{{ action.title }}
|
||||
</v-list-item-title>
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</v-list-group>
|
||||
</div>
|
||||
</v-list>
|
||||
</v-menu>
|
||||
</div>
|
||||
@@ -117,11 +137,12 @@ import RecipeDialogPrintPreferences from "./RecipeDialogPrintPreferences.vue";
|
||||
import RecipeDialogShare from "./RecipeDialogShare.vue";
|
||||
import { useLoggedInState } from "~/composables/use-logged-in-state";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { useGroupRecipeActions } from "~/composables/use-group-recipe-actions";
|
||||
import { useGroupSelf } from "~/composables/use-groups";
|
||||
import { alert } from "~/composables/use-toast";
|
||||
import { usePlanTypeOptions } from "~/composables/use-group-mealplan";
|
||||
import { Recipe } from "~/lib/api/types/recipe";
|
||||
import { ShoppingListSummary } from "~/lib/api/types/group";
|
||||
import { GroupRecipeActionOut, ShoppingListSummary } from "~/lib/api/types/group";
|
||||
import { PlanEntryType } from "~/lib/api/types/meal-plan";
|
||||
import { useAxiosDownloader } from "~/composables/api/use-axios-download";
|
||||
|
||||
@@ -134,6 +155,7 @@ export interface ContextMenuIncludes {
|
||||
print: boolean;
|
||||
printPreferences: boolean;
|
||||
share: boolean;
|
||||
recipeActions: boolean;
|
||||
}
|
||||
|
||||
export interface ContextMenuItem {
|
||||
@@ -163,6 +185,7 @@ export default defineComponent({
|
||||
print: true,
|
||||
printPreferences: true,
|
||||
share: true,
|
||||
recipeActions: true,
|
||||
}),
|
||||
},
|
||||
// Append items are added at the end of the useItems list
|
||||
@@ -347,6 +370,19 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
const router = useRouter();
|
||||
const groupRecipeActionsStore = useGroupRecipeActions();
|
||||
|
||||
async function executeRecipeAction(action: GroupRecipeActionOut) {
|
||||
const response = await groupRecipeActionsStore.execute(action, props.recipe);
|
||||
|
||||
if (action.actionType === "post") {
|
||||
if (!response || (response.status >= 200 && response.status < 300)) {
|
||||
alert.success(i18n.tc("events.message-sent"));
|
||||
} else {
|
||||
alert.error(i18n.tc("events.something-went-wrong"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function deleteRecipe() {
|
||||
await api.recipes.deleteOne(props.slug);
|
||||
@@ -437,6 +473,8 @@ export default defineComponent({
|
||||
...toRefs(state),
|
||||
recipeRef,
|
||||
recipeRefWithScale,
|
||||
executeRecipeAction,
|
||||
recipeActions: groupRecipeActionsStore.recipeActions,
|
||||
shoppingLists,
|
||||
duplicateRecipe,
|
||||
contextMenuEventHandler,
|
||||
|
||||
@@ -143,7 +143,7 @@ import { watchDebounced } from "@vueuse/shared";
|
||||
import SearchFilter from "~/components/Domain/SearchFilter.vue";
|
||||
import { useLoggedInState } from "~/composables/use-logged-in-state";
|
||||
import { useCategoryStore, useFoodStore, useTagStore, useToolStore } from "~/composables/store";
|
||||
import { useUserSortPreferences } from "~/composables/use-users/preferences";
|
||||
import { useUserSearchQuerySession } from "~/composables/use-users/preferences";
|
||||
import RecipeCardSection from "~/components/Domain/Recipe/RecipeCardSection.vue";
|
||||
import { IngredientFood, RecipeCategory, RecipeTag, RecipeTool } from "~/lib/api/types/recipe";
|
||||
import { NoUndefinedField } from "~/lib/api/types/non-generated";
|
||||
@@ -177,7 +177,7 @@ export default defineComponent({
|
||||
|
||||
const route = useRoute();
|
||||
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "");
|
||||
const preferences = useUserSortPreferences();
|
||||
const searchQuerySession = useUserSearchQuerySession();
|
||||
|
||||
const { recipes, appendRecipes, assignSorted, removeRecipe, replaceRecipes } = useLazyRecipes(isOwnGroup.value ? null : groupSlug.value);
|
||||
const categories = isOwnGroup.value ? useCategoryStore() : usePublicCategoryStore(groupSlug.value);
|
||||
@@ -194,7 +194,9 @@ export default defineComponent({
|
||||
|
||||
function calcPassedQuery(): RecipeSearchQuery {
|
||||
return {
|
||||
search: state.value.search,
|
||||
// the search clear button sets search to null, which still renders the query param for a moment,
|
||||
// whereas an empty string is not rendered
|
||||
search: state.value.search ? state.value.search : "",
|
||||
categories: toIDArray(selectedCategories.value),
|
||||
foods: toIDArray(selectedFoods.value),
|
||||
tags: toIDArray(selectedTags.value),
|
||||
@@ -217,14 +219,24 @@ export default defineComponent({
|
||||
};
|
||||
})
|
||||
|
||||
const queryDefaults = {
|
||||
search: "",
|
||||
orderBy: "created_at",
|
||||
orderDirection: "desc" as "asc" | "desc",
|
||||
requireAllCategories: false,
|
||||
requireAllTags: false,
|
||||
requireAllTools: false,
|
||||
requireAllFoods: false,
|
||||
}
|
||||
|
||||
function reset() {
|
||||
state.value.search = "";
|
||||
state.value.orderBy = "created_at";
|
||||
state.value.orderDirection = "desc";
|
||||
state.value.requireAllCategories = false;
|
||||
state.value.requireAllTags = false;
|
||||
state.value.requireAllTools = false;
|
||||
state.value.requireAllFoods = false;
|
||||
state.value.search = queryDefaults.search;
|
||||
state.value.orderBy = queryDefaults.orderBy;
|
||||
state.value.orderDirection = queryDefaults.orderDirection;
|
||||
state.value.requireAllCategories = queryDefaults.requireAllCategories;
|
||||
state.value.requireAllTags = queryDefaults.requireAllTags;
|
||||
state.value.requireAllTools = queryDefaults.requireAllTools;
|
||||
state.value.requireAllFoods = queryDefaults.requireAllFoods;
|
||||
selectedCategories.value = [];
|
||||
selectedFoods.value = [];
|
||||
selectedTags.value = [];
|
||||
@@ -262,12 +274,12 @@ export default defineComponent({
|
||||
foods: passedQuery.value.foods,
|
||||
tags: passedQuery.value.tags,
|
||||
tools: passedQuery.value.tools,
|
||||
// Only add the query param if it's or not default
|
||||
// Only add the query param if it's not the default value
|
||||
...{
|
||||
auto: state.value.auto ? undefined : "false",
|
||||
search: passedQuery.value.search === "" ? undefined : passedQuery.value.search,
|
||||
orderBy: passedQuery.value.orderBy === "created_at" ? undefined : passedQuery.value.orderBy,
|
||||
orderDirection: passedQuery.value.orderDirection === "desc" ? undefined : passedQuery.value.orderDirection,
|
||||
search: passedQuery.value.search === queryDefaults.search ? undefined : passedQuery.value.search,
|
||||
orderBy: passedQuery.value.orderBy === queryDefaults.orderBy ? undefined : passedQuery.value.orderBy,
|
||||
orderDirection: passedQuery.value.orderDirection === queryDefaults.orderDirection ? undefined : passedQuery.value.orderDirection,
|
||||
requireAllCategories: passedQuery.value.requireAllCategories ? "true" : undefined,
|
||||
requireAllTags: passedQuery.value.requireAllTags ? "true" : undefined,
|
||||
requireAllTools: passedQuery.value.requireAllTools ? "true" : undefined,
|
||||
@@ -275,7 +287,7 @@ export default defineComponent({
|
||||
},
|
||||
}
|
||||
await router.push({ query });
|
||||
preferences.value.searchQuery = JSON.stringify(query);
|
||||
searchQuerySession.value.recipe = JSON.stringify(query);
|
||||
}
|
||||
|
||||
function waitUntilAndExecute(
|
||||
@@ -360,25 +372,55 @@ export default defineComponent({
|
||||
|
||||
async function hydrateSearch() {
|
||||
const query = router.currentRoute.query;
|
||||
if (query.auto) {
|
||||
if (query.auto?.length) {
|
||||
state.value.auto = query.auto === "true";
|
||||
}
|
||||
|
||||
if (query.search) {
|
||||
if (query.search?.length) {
|
||||
state.value.search = query.search as string;
|
||||
} else {
|
||||
state.value.search = queryDefaults.search;
|
||||
}
|
||||
|
||||
if (query.orderBy) {
|
||||
if (query.orderBy?.length) {
|
||||
state.value.orderBy = query.orderBy as string;
|
||||
} else {
|
||||
state.value.orderBy = queryDefaults.orderBy;
|
||||
}
|
||||
|
||||
if (query.orderDirection) {
|
||||
if (query.orderDirection?.length) {
|
||||
state.value.orderDirection = query.orderDirection as "asc" | "desc";
|
||||
} else {
|
||||
state.value.orderDirection = queryDefaults.orderDirection;
|
||||
}
|
||||
|
||||
if (query.requireAllCategories?.length) {
|
||||
state.value.requireAllCategories = query.requireAllCategories === "true";
|
||||
} else {
|
||||
state.value.requireAllCategories = queryDefaults.requireAllCategories;
|
||||
}
|
||||
|
||||
if (query.requireAllTags?.length) {
|
||||
state.value.requireAllTags = query.requireAllTags === "true";
|
||||
} else {
|
||||
state.value.requireAllTags = queryDefaults.requireAllTags;
|
||||
}
|
||||
|
||||
if (query.requireAllTools?.length) {
|
||||
state.value.requireAllTools = query.requireAllTools === "true";
|
||||
} else {
|
||||
state.value.requireAllTools = queryDefaults.requireAllTools;
|
||||
}
|
||||
|
||||
if (query.requireAllFoods?.length) {
|
||||
state.value.requireAllFoods = query.requireAllFoods === "true";
|
||||
} else {
|
||||
state.value.requireAllFoods = queryDefaults.requireAllFoods;
|
||||
}
|
||||
|
||||
const promises: Promise<void>[] = [];
|
||||
|
||||
if (query.categories) {
|
||||
if (query.categories?.length) {
|
||||
promises.push(
|
||||
waitUntilAndExecute(
|
||||
() => categories.items.value.length > 0,
|
||||
@@ -395,7 +437,35 @@ export default defineComponent({
|
||||
selectedCategories.value = [];
|
||||
}
|
||||
|
||||
if (query.foods) {
|
||||
if (query.tags?.length) {
|
||||
promises.push(
|
||||
waitUntilAndExecute(
|
||||
() => tags.items.value.length > 0,
|
||||
() => {
|
||||
const result = tags.items.value.filter((item) => (query.tags as string[]).includes(item.id as string));
|
||||
selectedTags.value = result as NoUndefinedField<RecipeTag>[];
|
||||
}
|
||||
)
|
||||
);
|
||||
} else {
|
||||
selectedTags.value = [];
|
||||
}
|
||||
|
||||
if (query.tools?.length) {
|
||||
promises.push(
|
||||
waitUntilAndExecute(
|
||||
() => tools.items.value.length > 0,
|
||||
() => {
|
||||
const result = tools.items.value.filter((item) => (query.tools as string[]).includes(item.id));
|
||||
selectedTools.value = result as NoUndefinedField<RecipeTool>[];
|
||||
}
|
||||
)
|
||||
);
|
||||
} else {
|
||||
selectedTools.value = [];
|
||||
}
|
||||
|
||||
if (query.foods?.length) {
|
||||
promises.push(
|
||||
waitUntilAndExecute(
|
||||
() => {
|
||||
@@ -414,45 +484,17 @@ export default defineComponent({
|
||||
selectedFoods.value = [];
|
||||
}
|
||||
|
||||
if (query.tags) {
|
||||
promises.push(
|
||||
waitUntilAndExecute(
|
||||
() => tags.items.value.length > 0,
|
||||
() => {
|
||||
const result = tags.items.value.filter((item) => (query.tags as string[]).includes(item.id as string));
|
||||
selectedTags.value = result as NoUndefinedField<RecipeTag>[];
|
||||
}
|
||||
)
|
||||
);
|
||||
} else {
|
||||
selectedTags.value = [];
|
||||
}
|
||||
|
||||
if (query.tools) {
|
||||
promises.push(
|
||||
waitUntilAndExecute(
|
||||
() => tools.items.value.length > 0,
|
||||
() => {
|
||||
const result = tools.items.value.filter((item) => (query.tools as string[]).includes(item.id));
|
||||
selectedTools.value = result as NoUndefinedField<RecipeTool>[];
|
||||
}
|
||||
)
|
||||
);
|
||||
} else {
|
||||
selectedTools.value = [];
|
||||
}
|
||||
|
||||
await Promise.allSettled(promises);
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
// restore the user's last search query
|
||||
if (preferences.value.searchQuery && !(Object.keys(route.value.query).length > 0)) {
|
||||
if (searchQuerySession.value.recipe && !(Object.keys(route.value.query).length > 0)) {
|
||||
try {
|
||||
const query = JSON.parse(preferences.value.searchQuery);
|
||||
const query = JSON.parse(searchQuerySession.value.recipe);
|
||||
await router.replace({ query });
|
||||
} catch (error) {
|
||||
preferences.value.searchQuery = "";
|
||||
searchQuerySession.value.recipe = "";
|
||||
router.replace({ query: {} });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,11 +22,12 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { computed, defineComponent, useContext } from "@nuxtjs/composition-api";
|
||||
import { useUserSelfRatings } from "~/composables/use-users";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { UserOut } from "~/lib/api/types/user";
|
||||
export default defineComponent({
|
||||
props: {
|
||||
slug: {
|
||||
recipeId: {
|
||||
type: String,
|
||||
default: "",
|
||||
},
|
||||
@@ -42,19 +43,23 @@ export default defineComponent({
|
||||
setup(props) {
|
||||
const api = useUserApi();
|
||||
const { $auth } = useContext();
|
||||
const { userRatings, refreshUserRatings } = useUserSelfRatings();
|
||||
|
||||
// TODO Setup the correct type for $auth.user
|
||||
// See https://github.com/nuxt-community/auth-module/issues/1097
|
||||
const user = computed(() => $auth.user as unknown as UserOut);
|
||||
const isFavorite = computed(() => user.value?.favoriteRecipes?.includes(props.slug));
|
||||
const isFavorite = computed(() => {
|
||||
const rating = userRatings.value.find((r) => r.recipeId === props.recipeId);
|
||||
return rating?.isFavorite || false;
|
||||
});
|
||||
|
||||
async function toggleFavorite() {
|
||||
if (!isFavorite.value) {
|
||||
await api.users.addFavorite(user.value?.id, props.slug);
|
||||
await api.users.addFavorite(user.value?.id, props.recipeId);
|
||||
} else {
|
||||
await api.users.removeFavorite(user.value?.id, props.slug);
|
||||
await api.users.removeFavorite(user.value?.id, props.recipeId);
|
||||
}
|
||||
$auth.fetchUser();
|
||||
await refreshUserRatings();
|
||||
}
|
||||
|
||||
return { isFavorite, toggleFavorite };
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
<script lang="ts">
|
||||
import { defineComponent, ref, useContext, computed, onMounted } from "@nuxtjs/composition-api";
|
||||
import RecipeOrganizerDialog from "./RecipeOrganizerDialog.vue";
|
||||
import { RecipeCategory, RecipeTag } from "~/lib/api/types/user";
|
||||
import { RecipeCategory, RecipeTag } from "~/lib/api/types/recipe";
|
||||
import { RecipeTool } from "~/lib/api/types/admin";
|
||||
import { useTagStore } from "~/composables/store/use-tag-store";
|
||||
import { useCategoryStore, useToolStore } from "~/composables/store";
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<v-card-text>
|
||||
<v-card-title class="headline pa-0 flex-column align-center">
|
||||
{{ recipe.name }}
|
||||
<RecipeRating :key="recipe.slug" v-model="recipe.rating" :name="recipe.name" :slug="recipe.slug" />
|
||||
<RecipeRating :key="recipe.slug" :value="recipe.rating" :recipe-id="recipe.id" :slug="recipe.slug" />
|
||||
</v-card-title>
|
||||
<v-divider class="my-2"></v-divider>
|
||||
<SafeMarkdown :source="recipe.description" />
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
v-if="landscape && $vuetify.breakpoint.smAndUp"
|
||||
:key="recipe.slug"
|
||||
v-model="recipe.rating"
|
||||
:name="recipe.name"
|
||||
:recipe-id="recipe.id"
|
||||
:slug="recipe.slug"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
v-if="$vuetify.breakpoint.smAndDown"
|
||||
:key="recipe.slug"
|
||||
v-model="recipe.rating"
|
||||
:name="recipe.name"
|
||||
:recipe-id="recipe.id"
|
||||
:slug="recipe.slug"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -1,34 +1,48 @@
|
||||
<template>
|
||||
<div @click.prevent>
|
||||
<v-rating
|
||||
v-model="rating"
|
||||
:readonly="!isOwnGroup"
|
||||
color="secondary"
|
||||
background-color="secondary lighten-3"
|
||||
length="5"
|
||||
:dense="small ? true : undefined"
|
||||
:size="small ? 15 : undefined"
|
||||
hover
|
||||
:value="value"
|
||||
clearable
|
||||
@input="updateRating"
|
||||
@click="updateRating"
|
||||
></v-rating>
|
||||
<!-- User Rating -->
|
||||
<v-hover v-slot="{ hover }">
|
||||
<v-rating
|
||||
v-if="isOwnGroup && (userRating || hover || !ratingsLoaded)"
|
||||
:value="userRating"
|
||||
color="secondary"
|
||||
background-color="secondary lighten-3"
|
||||
length="5"
|
||||
:dense="small ? true : undefined"
|
||||
:size="small ? 15 : undefined"
|
||||
hover
|
||||
clearable
|
||||
@input="updateRating"
|
||||
@click="updateRating"
|
||||
/>
|
||||
<!-- Group Rating -->
|
||||
<v-rating
|
||||
v-else
|
||||
:value="groupRating"
|
||||
:half-increments="true"
|
||||
:readonly="true"
|
||||
color="grey darken-1"
|
||||
background-color="secondary lighten-3"
|
||||
length="5"
|
||||
:dense="small ? true : undefined"
|
||||
:size="small ? 15 : undefined"
|
||||
hover
|
||||
/>
|
||||
</v-hover>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, ref } from "@nuxtjs/composition-api";
|
||||
import { computed, defineComponent, ref, watch } from "@nuxtjs/composition-api";
|
||||
import { useLoggedInState } from "~/composables/use-logged-in-state";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { useUserSelfRatings } from "~/composables/use-users";
|
||||
export default defineComponent({
|
||||
props: {
|
||||
emitOnly: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
// TODO Remove name prop?
|
||||
name: {
|
||||
recipeId: {
|
||||
type: String,
|
||||
default: "",
|
||||
},
|
||||
@@ -47,23 +61,45 @@ export default defineComponent({
|
||||
},
|
||||
setup(props, context) {
|
||||
const { isOwnGroup } = useLoggedInState();
|
||||
const { userRatings, setRating, ready: ratingsLoaded } = useUserSelfRatings();
|
||||
|
||||
const rating = ref(props.value);
|
||||
const userRating = computed(() => {
|
||||
return userRatings.value.find((r) => r.recipeId === props.recipeId)?.rating;
|
||||
});
|
||||
|
||||
// if a user unsets their rating, we don't want to fall back to the group rating since it's out of sync
|
||||
const hideGroupRating = ref(!!userRating.value);
|
||||
watch(
|
||||
() => userRating.value,
|
||||
() => {
|
||||
if (userRating.value) {
|
||||
hideGroupRating.value = true;
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
const groupRating = computed(() => {
|
||||
return hideGroupRating.value ? 0 : props.value;
|
||||
});
|
||||
|
||||
const api = useUserApi();
|
||||
function updateRating(val: number | null) {
|
||||
if (val === 0) {
|
||||
val = null;
|
||||
if (!isOwnGroup.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!props.emitOnly) {
|
||||
api.recipes.patchOne(props.slug, {
|
||||
rating: val,
|
||||
});
|
||||
setRating(props.slug, val || 0, null);
|
||||
}
|
||||
context.emit("input", val);
|
||||
}
|
||||
|
||||
return { isOwnGroup, rating, updateRating };
|
||||
return {
|
||||
isOwnGroup,
|
||||
ratingsLoaded,
|
||||
groupRating,
|
||||
userRating,
|
||||
updateRating,
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -8,8 +8,11 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { computed, defineComponent } from "@nuxtjs/composition-api";
|
||||
// @ts-ignore missing color types
|
||||
import Color from "@sphinxxxx/color-conversion";
|
||||
import { MultiPurposeLabelSummary } from "~/lib/api/types/recipe";
|
||||
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
label: {
|
||||
@@ -34,19 +37,27 @@ export default defineComponent({
|
||||
const ACCESSIBILITY_THRESHOLD = 0.179;
|
||||
|
||||
function pickTextColorBasedOnBgColorAdvanced(bgColor: string, lightColor: string, darkColor: string) {
|
||||
const color = bgColor.charAt(0) === "#" ? bgColor.substring(1, 7) : bgColor;
|
||||
const r = parseInt(color.substring(0, 2), 16); // hexToR
|
||||
const g = parseInt(color.substring(2, 4), 16); // hexToG
|
||||
const b = parseInt(color.substring(4, 6), 16); // hexToB
|
||||
const uicolors = [r / 255, g / 255, b / 255];
|
||||
const c = uicolors.map((col) => {
|
||||
if (col <= 0.03928) {
|
||||
return col / 12.92;
|
||||
try {
|
||||
const color = new Color(bgColor);
|
||||
|
||||
// if opacity is less than 0.3 always return dark color
|
||||
if (color._rgba[3] < 0.3) {
|
||||
return darkColor;
|
||||
}
|
||||
return Math.pow((col + 0.055) / 1.055, 2.4);
|
||||
});
|
||||
const L = 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];
|
||||
return L > ACCESSIBILITY_THRESHOLD ? darkColor : lightColor;
|
||||
|
||||
const uicolors = [color._rgba[0] / 255, color._rgba[1] / 255, color._rgba[2] / 255];
|
||||
const c = uicolors.map((col) => {
|
||||
if (col <= 0.03928) {
|
||||
return col / 12.92;
|
||||
}
|
||||
return Math.pow((col + 0.055) / 1.055, 2.4);
|
||||
});
|
||||
const L = 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];
|
||||
return L > ACCESSIBILITY_THRESHOLD ? darkColor : lightColor;
|
||||
} catch (error) {
|
||||
console.warn(error);
|
||||
return "black";
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -188,7 +188,7 @@
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.organizers,
|
||||
title: "Organizers",
|
||||
title: i18n.tc("general.organizers"),
|
||||
restricted: true,
|
||||
children: [
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@ import { reactive, ref, useAsync } from "@nuxtjs/composition-api";
|
||||
import { useAsyncKey } from "../use-utils";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { VForm } from "~/types/vuetify";
|
||||
import { RecipeTool } from "~/lib/api/types/user";
|
||||
import { RecipeTool } from "~/lib/api/types/recipe";
|
||||
|
||||
export const useTools = function (eager = true) {
|
||||
const workingToolData = reactive<RecipeTool>({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { reactive, ref, Ref } from "@nuxtjs/composition-api";
|
||||
import { usePublicStoreActions, useStoreActions } from "../partials/use-actions-factory";
|
||||
import { usePublicExploreApi } from "../api/api-client";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { RecipeCategory } from "~/lib/api/types/admin";
|
||||
import { RecipeCategory } from "~/lib/api/types/recipe";
|
||||
|
||||
const categoryStore: Ref<RecipeCategory[]> = ref([]);
|
||||
const publicStoreLoading = ref(false);
|
||||
|
||||
98
frontend/composables/use-group-recipe-actions.ts
Normal file
98
frontend/composables/use-group-recipe-actions.ts
Normal file
@@ -0,0 +1,98 @@
|
||||
import { computed, reactive, ref } from "@nuxtjs/composition-api";
|
||||
import { useStoreActions } from "./partials/use-actions-factory";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { GroupRecipeActionOut, RecipeActionType } from "~/lib/api/types/group";
|
||||
import { Recipe } from "~/lib/api/types/recipe";
|
||||
|
||||
const groupRecipeActions = ref<GroupRecipeActionOut[] | null>(null);
|
||||
const loading = ref(false);
|
||||
|
||||
export function useGroupRecipeActionData() {
|
||||
const data = reactive({
|
||||
id: "",
|
||||
actionType: "link" as RecipeActionType,
|
||||
title: "",
|
||||
url: "",
|
||||
});
|
||||
|
||||
function reset() {
|
||||
data.id = "";
|
||||
data.actionType = "link";
|
||||
data.title = "";
|
||||
data.url = "";
|
||||
}
|
||||
|
||||
return {
|
||||
data,
|
||||
reset,
|
||||
};
|
||||
}
|
||||
|
||||
export const useGroupRecipeActions = function (
|
||||
orderBy: string | null = "title",
|
||||
orderDirection: string | null = "asc",
|
||||
) {
|
||||
const api = useUserApi();
|
||||
|
||||
async function refreshGroupRecipeActions() {
|
||||
loading.value = true;
|
||||
const { data } = await api.groupRecipeActions.getAll(1, -1, { orderBy, orderDirection });
|
||||
groupRecipeActions.value = data?.items || null;
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
const recipeActions = computed<GroupRecipeActionOut[] | null>(() => {
|
||||
return groupRecipeActions.value;
|
||||
});
|
||||
|
||||
function parseRecipeActionUrl(url: string, recipe: Recipe): string {
|
||||
/* eslint-disable no-template-curly-in-string */
|
||||
return url
|
||||
.replace("${url}", window.location.href)
|
||||
.replace("${id}", recipe.id || "")
|
||||
.replace("${slug}", recipe.slug || "")
|
||||
/* eslint-enable no-template-curly-in-string */
|
||||
};
|
||||
|
||||
async function execute(action: GroupRecipeActionOut, recipe: Recipe): Promise<void | Response> {
|
||||
const url = parseRecipeActionUrl(action.url, recipe);
|
||||
|
||||
switch (action.actionType) {
|
||||
case "link":
|
||||
window.open(url, "_blank")?.focus();
|
||||
break;
|
||||
case "post":
|
||||
return await fetch(url, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
// The "text/plain" content type header is used here to skip the CORS preflight request,
|
||||
// since it may fail. This is fine, since we don't care about the response, we just want
|
||||
// the request to get sent.
|
||||
"Content-Type": "text/plain",
|
||||
},
|
||||
body: JSON.stringify(recipe),
|
||||
}).catch((error) => {
|
||||
console.error(error);
|
||||
});
|
||||
default:
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
if (!groupRecipeActions.value && !loading.value) {
|
||||
refreshGroupRecipeActions();
|
||||
};
|
||||
|
||||
const actions = {
|
||||
...useStoreActions<GroupRecipeActionOut>(api.groupRecipeActions, groupRecipeActions, loading),
|
||||
flushStore() {
|
||||
groupRecipeActions.value = [];
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
actions,
|
||||
execute,
|
||||
recipeActions,
|
||||
};
|
||||
};
|
||||
@@ -1,2 +1,3 @@
|
||||
export { useUserForm } from "./user-form";
|
||||
export { useUserRegistrationForm } from "./user-registration-form";
|
||||
export { useUserSelfRatings } from "./user-ratings";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Ref, useContext } from "@nuxtjs/composition-api";
|
||||
import { useLocalStorage } from "@vueuse/core";
|
||||
import { useLocalStorage, useSessionStorage } from "@vueuse/core";
|
||||
import { TimelineEventType } from "~/lib/api/types/recipe";
|
||||
|
||||
export interface UserPrintPreferences {
|
||||
@@ -8,6 +8,10 @@ export interface UserPrintPreferences {
|
||||
showNotes: boolean;
|
||||
}
|
||||
|
||||
export interface UserSearchQuery {
|
||||
recipe: string;
|
||||
}
|
||||
|
||||
export enum ImagePosition {
|
||||
hidden = "hidden",
|
||||
left = "left",
|
||||
@@ -20,7 +24,6 @@ export interface UserRecipePreferences {
|
||||
filterNull: boolean;
|
||||
sortIcon: string;
|
||||
useMobileCards: boolean;
|
||||
searchQuery: string;
|
||||
}
|
||||
|
||||
export interface UserShoppingListPreferences {
|
||||
@@ -60,7 +63,6 @@ export function useUserSortPreferences(): Ref<UserRecipePreferences> {
|
||||
filterNull: false,
|
||||
sortIcon: $globals.icons.sortAlphabeticalAscending,
|
||||
useMobileCards: false,
|
||||
searchQuery: "",
|
||||
},
|
||||
{ mergeDefaults: true }
|
||||
// we cast to a Ref because by default it will return an optional type ref
|
||||
@@ -70,6 +72,20 @@ export function useUserSortPreferences(): Ref<UserRecipePreferences> {
|
||||
return fromStorage;
|
||||
}
|
||||
|
||||
export function useUserSearchQuerySession(): Ref<UserSearchQuery> {
|
||||
const fromStorage = useSessionStorage(
|
||||
"search-query",
|
||||
{
|
||||
recipe: "",
|
||||
},
|
||||
{ mergeDefaults: true }
|
||||
// we cast to a Ref because by default it will return an optional type ref
|
||||
// but since we pass defaults we know all properties are set.
|
||||
) as unknown as Ref<UserSearchQuery>;
|
||||
|
||||
return fromStorage;
|
||||
}
|
||||
|
||||
|
||||
export function useShoppingListPreferences(): Ref<UserShoppingListPreferences> {
|
||||
const fromStorage = useLocalStorage(
|
||||
|
||||
40
frontend/composables/use-users/user-ratings.ts
Normal file
40
frontend/composables/use-users/user-ratings.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import { ref, useContext } from "@nuxtjs/composition-api";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { UserRatingSummary } from "~/lib/api/types/user";
|
||||
|
||||
const userRatings = ref<UserRatingSummary[]>([]);
|
||||
const loading = ref(false);
|
||||
const ready = ref(false);
|
||||
|
||||
export const useUserSelfRatings = function () {
|
||||
const { $auth } = useContext();
|
||||
const api = useUserApi();
|
||||
|
||||
async function refreshUserRatings() {
|
||||
if (loading.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
loading.value = true;
|
||||
const { data } = await api.users.getSelfRatings();
|
||||
userRatings.value = data?.ratings || [];
|
||||
loading.value = false;
|
||||
ready.value = true;
|
||||
}
|
||||
|
||||
async function setRating(slug: string, rating: number | null, isFavorite: boolean | null) {
|
||||
loading.value = true;
|
||||
const userId = $auth.user?.id || "";
|
||||
await api.users.setRating(userId, slug, rating, isFavorite);
|
||||
loading.value = false;
|
||||
await refreshUserRatings();
|
||||
}
|
||||
|
||||
refreshUserRatings();
|
||||
return {
|
||||
userRatings,
|
||||
refreshUserRatings,
|
||||
setRating,
|
||||
ready,
|
||||
}
|
||||
}
|
||||
21
frontend/lang/dateTimeFormats/gl-ES.json
Normal file
21
frontend/lang/dateTimeFormats/gl-ES.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"short": {
|
||||
"month": "short",
|
||||
"day": "numeric",
|
||||
"weekday": "long"
|
||||
},
|
||||
"medium": {
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"year": "numeric"
|
||||
},
|
||||
"long": {
|
||||
"year": "numeric",
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"hour": "numeric",
|
||||
"minute": "numeric"
|
||||
}
|
||||
}
|
||||
21
frontend/lang/dateTimeFormats/hr-HR.json
Normal file
21
frontend/lang/dateTimeFormats/hr-HR.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"short": {
|
||||
"month": "short",
|
||||
"day": "numeric",
|
||||
"weekday": "long"
|
||||
},
|
||||
"medium": {
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"year": "numeric"
|
||||
},
|
||||
"long": {
|
||||
"year": "numeric",
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"hour": "numeric",
|
||||
"minute": "numeric"
|
||||
}
|
||||
}
|
||||
21
frontend/lang/dateTimeFormats/is-IS.json
Normal file
21
frontend/lang/dateTimeFormats/is-IS.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"short": {
|
||||
"month": "short",
|
||||
"day": "numeric",
|
||||
"weekday": "long"
|
||||
},
|
||||
"medium": {
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"year": "numeric"
|
||||
},
|
||||
"long": {
|
||||
"year": "numeric",
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"hour": "numeric",
|
||||
"minute": "numeric"
|
||||
}
|
||||
}
|
||||
21
frontend/lang/dateTimeFormats/lt-LT.json
Normal file
21
frontend/lang/dateTimeFormats/lt-LT.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"short": {
|
||||
"month": "short",
|
||||
"day": "numeric",
|
||||
"weekday": "long"
|
||||
},
|
||||
"medium": {
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"year": "numeric"
|
||||
},
|
||||
"long": {
|
||||
"year": "numeric",
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"hour": "numeric",
|
||||
"minute": "numeric"
|
||||
}
|
||||
}
|
||||
21
frontend/lang/dateTimeFormats/lv-LV.json
Normal file
21
frontend/lang/dateTimeFormats/lv-LV.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"short": {
|
||||
"month": "short",
|
||||
"day": "numeric",
|
||||
"weekday": "long"
|
||||
},
|
||||
"medium": {
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"year": "numeric"
|
||||
},
|
||||
"long": {
|
||||
"year": "numeric",
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"hour": "numeric",
|
||||
"minute": "numeric"
|
||||
}
|
||||
}
|
||||
21
frontend/lang/dateTimeFormats/sl-SI.json
Normal file
21
frontend/lang/dateTimeFormats/sl-SI.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"short": {
|
||||
"month": "short",
|
||||
"day": "numeric",
|
||||
"weekday": "long"
|
||||
},
|
||||
"medium": {
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"year": "numeric"
|
||||
},
|
||||
"long": {
|
||||
"year": "numeric",
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"hour": "numeric",
|
||||
"minute": "numeric"
|
||||
}
|
||||
}
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Iets het verkeerd geloop!",
|
||||
"subscribed-events": "Ingetekende Gebeure",
|
||||
"test-message-sent": "Toets Boodskap Gestuur",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Nuwe kennisgewing",
|
||||
"event-notifiers": "Gebeurteniskennisgewers",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (oorgeslaan indien leeg)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Toets",
|
||||
"themes": "Temas",
|
||||
"thursday": "Donderdag",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Dinsdag",
|
||||
"type": "Tipe",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Geskep op: {0}",
|
||||
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Is jy seker jy wil <b>{groupName}<b/> uitvee?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Laai prent",
|
||||
"screen-awake": "Hou die skerm aan",
|
||||
"remove-image": "Verwyder prent",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Gevorderde soek",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Verwyder resepte",
|
||||
"source-unit-will-be-deleted": "Bron-eenheid sal verwyder word"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Voorbeeld data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "Welkom, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Bestuur jou profiel, resepte en groepverstellings.",
|
||||
"get-invite-link": "Kry uitnodigingskakel",
|
||||
"get-public-link": "Kry openbare skakel",
|
||||
"account-summary": "Rekeningopsomming",
|
||||
"account-summary-description": "Hier is 'n opsomming van jou groep se inligting",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Groepstatistieke",
|
||||
"group-statistics-description": "Jou groepstatistieke gee 'n bietjie insig hoe jy Mealie gebruik.",
|
||||
"storage-capacity": "Stoorkapasiteit",
|
||||
"storage-capacity-description": "Jou stoorkapasiteit is 'n berekening van die prente en dokumente wat jy opgelaai het.",
|
||||
"personal": "Persoonlik",
|
||||
"personal-description": "Dit is jou persoonlike verstellings. Veranderinge hier sal nie ander gebruikers beïnvloed nie",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "Gebruikers verstellings",
|
||||
"user-settings-description": "Bestuur jou voorkeure, verander jou wagwoord en werk jou e-posadres op",
|
||||
"api-tokens-description": "Bestuur jou API-tokens vir toegang vanaf eksterne toepassings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "Hierdie items word binne jou groep gedeel. Deur een van hulle te wysig, sal dit vir die hele groep verander!",
|
||||
"group-settings": "Groep verstellings",
|
||||
"group-settings-description": "Bestuur jou algemene groep verstellings soos eetplan en privaatheidinstellings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Kennisgewers",
|
||||
"notifiers-description": "Stel e-pos- en stootkennisgewings op wat deur spesifieke gebeurtenisse geaktiveer word.",
|
||||
"manage-data": "Databestuur",
|
||||
"manage-data-description": "Bestuur jou kos en eenhede (meer opsies kom binnekort)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data-migrasies",
|
||||
"data-migrations-description": "Migreer jou bestaande data vanaf ander toepassings, soos Nextcloud-resepte en Chowdown",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "E-pos gestuur",
|
||||
"error-sending-email": "Kon nie die e-pos stuur nie",
|
||||
"personal-information": "Persoonlike inligting",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "حدث خطأ ما!",
|
||||
"subscribed-events": "الأحداث التي تم الاشتراك فيها",
|
||||
"test-message-sent": "تم إرسال رسالة تجريبية",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "إشعار جديد",
|
||||
"event-notifiers": "إشعار الحدث",
|
||||
"apprise-url-skipped-if-blank": "الرابط Apprise (يتم تجاهله إذا ما كان فارغً)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "تجربة",
|
||||
"themes": "السمات",
|
||||
"thursday": "الخميس",
|
||||
"title": "Title",
|
||||
"token": "الرمز التعريفي",
|
||||
"tuesday": "الثلاثاء",
|
||||
"type": "النوع",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "تم الإنشاء في {0}",
|
||||
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "هل انت متأكد من رغبتك في حذف <b>{groupName}<b/>؟",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Upload image",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Advanced Search",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"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-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"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)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Нещо се обърка!",
|
||||
"subscribed-events": "Планирани събития",
|
||||
"test-message-sent": "Тестово съобщение е изпратено",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Ново известие",
|
||||
"event-notifiers": "Известия за събитие",
|
||||
"apprise-url-skipped-if-blank": "URL за известяване (пропуска се ако е празно)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Тест",
|
||||
"themes": "Теми",
|
||||
"thursday": "четвъртък",
|
||||
"title": "Title",
|
||||
"token": "Токън",
|
||||
"tuesday": "Вторник",
|
||||
"type": "Тип",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Създадено на {0}",
|
||||
"unsaved-changes": "Имате незапазени промени. Желаете ли да ги запазите преди да излезете? Натиснете Ок за запазване и Отказ за отхвърляне на промените.",
|
||||
"clipboard-copy-failure": "Линкът към рецептата е копиран в клипборда.",
|
||||
"confirm-delete-generic-items": "Сигурни ли сте, че желаете да изтриете следните елементи?"
|
||||
"confirm-delete-generic-items": "Сигурни ли сте, че желаете да изтриете следните елементи?",
|
||||
"organizers": "Органайзер"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Сигурни ли сте, че искате да изтриете <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Качване на изображение",
|
||||
"screen-awake": "Запази екрана активен",
|
||||
"remove-image": "Премахване на изображение",
|
||||
"nextStep": "Следваща стъпка"
|
||||
"nextStep": "Следваща стъпка",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Разширено търсене",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Изтрий рецепти",
|
||||
"source-unit-will-be-deleted": "Изходната мерна единица ще бъде изтрита"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Създаване на псевдоним",
|
||||
"manage-aliases": "Управление на псевдоними",
|
||||
"seed-data": "Зареждане на данни",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Добре дошъл(а), {0}",
|
||||
"welcome-user": "👋 Добре дошъл(а), {0}!",
|
||||
"description": "Настройки на профил, рецепти и настройки на групата.",
|
||||
"get-invite-link": "Вземи линк за покана",
|
||||
"get-public-link": "Вземи публичен линк",
|
||||
"account-summary": "Обобщение на акаунта",
|
||||
"account-summary-description": "Обобщение на информацията за Вашата група",
|
||||
"account-summary-description": "Обобщение на информацията за Вашата група.",
|
||||
"group-statistics": "Статистики на групата",
|
||||
"group-statistics-description": "Вашата статистика на групата дава известна представа как използвате Mealie.",
|
||||
"storage-capacity": "Капацитет за съхранение",
|
||||
"storage-capacity-description": "Вашият капацитет за съхранение е изчисление на изображенията и активите, които сте качили.",
|
||||
"personal": "Лични",
|
||||
"personal-description": "Това са настройки, които са лични за Вас. Промените тук няма да засегнат други потребители",
|
||||
"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": "Общи групови настройки като седмично меню и настройки за поверителност.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Уведомители",
|
||||
"notifiers-description": "Настройте имейл и push известия, които се задействат при конкретни събития.",
|
||||
"manage-data": "Управление на данни",
|
||||
"manage-data-description": "Настройки на продукти и мерни единици (очаквайте добавяне на още възможности)",
|
||||
"manage-data-description": "Управлявай данните в Mealie: Храни, Единици, Категории, Тагове и други.",
|
||||
"data-migrations": "Миграция на данни",
|
||||
"data-migrations-description": "Мигрирайте вашите съществуващи данни от други приложения като Nextcloud Recipes и Chowdown",
|
||||
"data-migrations-description": "Мигрирайте вашите съществуващи данни от други приложения като Nextcloud Recipes и Chowdown.",
|
||||
"email-sent": "Имейлът е изпратен",
|
||||
"error-sending-email": "Грешка при изпращане на имейл",
|
||||
"personal-information": "Лична информация",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Alguna cosa ha anat malament!",
|
||||
"subscribed-events": "Esdeveniments subscrits",
|
||||
"test-message-sent": "S'ha enviat el missatge",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Nova notificació",
|
||||
"event-notifiers": "Notificacions d'esdeveniments",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (si es deixa buit, s'ignorarà)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Prova",
|
||||
"themes": "Temes",
|
||||
"thursday": "Dijous",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Dimarts",
|
||||
"type": "Tipus",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Creat el: {0}",
|
||||
"unsaved-changes": "Tens canvis que no estan guardats. Vols guardar-los abans de sortir? Clica d'acord per guardar-los o cancel·lar per descartar els canvis.",
|
||||
"clipboard-copy-failure": "No s'ha pogut copiar al porta-retalls.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Esteu segur de voler suprimir el grup <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Puja una imatge",
|
||||
"screen-awake": "Mantenir la pantalla encesa",
|
||||
"remove-image": "Esborrar la imatge",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Cerca avançada",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Dades d'exemple",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Benvingut, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Enllaç públic",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"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-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"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)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Něco se nepovedlo!",
|
||||
"subscribed-events": "Odebírané události",
|
||||
"test-message-sent": "Testovací zpráva odeslána",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Nové oznámení",
|
||||
"event-notifiers": "Notifikace událostí",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (přeskočeno pokud je prázdné)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Test",
|
||||
"themes": "Motivy",
|
||||
"thursday": "Čtvrtek",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Úterý",
|
||||
"type": "Typ",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Vytvořeno dne: {0}",
|
||||
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Jste si jisti, že chcete smazat <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Nahrát obrázek",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Další krok"
|
||||
"nextStep": "Další krok",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Pokročilé vyhledávání",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Smazat recepty",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Vítejte, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Přehled účtu",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Statistiky skupiny",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Kapacita úložiště",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Osobní",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "Uživatelské nastavení",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "These items are shared within your group. Editing one of them will change it for the whole group!",
|
||||
"group-settings": "Nastavení skupiny",
|
||||
"group-settings-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Oznámení",
|
||||
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
|
||||
"manage-data": "Spravovat data",
|
||||
"manage-data-description": "Manage your Food and Units (more options coming soon)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Migrace dat",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "E-mail odeslán",
|
||||
"error-sending-email": "Nastala chyba při odesílání e-mailu",
|
||||
"personal-information": "Osobní údaje",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Noget gik galt!",
|
||||
"subscribed-events": "Abonnerede begivenheder",
|
||||
"test-message-sent": "Testbesked sendt",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Ny notifikation",
|
||||
"event-notifiers": "Notifikation om begivenheder",
|
||||
"apprise-url-skipped-if-blank": "Informations link (sprunget over hvis ladet være tomt)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Afprøv",
|
||||
"themes": "Temaer",
|
||||
"thursday": "Torsdag",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Tirsdag",
|
||||
"type": "Type",
|
||||
@@ -207,7 +209,8 @@
|
||||
"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": "Kopiering til udklipsholderen mislykkedes.",
|
||||
"confirm-delete-generic-items": "Er du sikker på at du ønsker at slette de valgte emner?"
|
||||
"confirm-delete-generic-items": "Er du sikker på at du ønsker at slette de valgte emner?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Er du sikker på, du vil slette <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Upload billede",
|
||||
"screen-awake": "Hold skærmen tændt",
|
||||
"remove-image": "Fjern billede",
|
||||
"nextStep": "Næste trin"
|
||||
"nextStep": "Næste trin",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Avanceret søgning",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Slet Opskrifter",
|
||||
"source-unit-will-be-deleted": "Kildeenhed vil blive slettet"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Opret alias",
|
||||
"manage-aliases": "Administrer Aliaser",
|
||||
"seed-data": "Opret standard data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Velkommen, {0}",
|
||||
"welcome-user": "👋 Velkommen, {0}!",
|
||||
"description": "Administrer din profil, opskrifter og gruppeindstillinger.",
|
||||
"get-invite-link": "Få Invitationslink",
|
||||
"get-public-link": "Offentligt link",
|
||||
"account-summary": "Konto oversigt",
|
||||
"account-summary-description": "Her er en oversigt over din gruppes oplysninger",
|
||||
"account-summary-description": "Her er en oversigt over din gruppes oplysninger.",
|
||||
"group-statistics": "Gruppestatistik",
|
||||
"group-statistics-description": "Din gruppestatistik giver indsigt i, hvordan du bruger Mealie.",
|
||||
"storage-capacity": "Lagerkapacitet",
|
||||
"storage-capacity-description": "Din lagerkapacitet er en beregning af de billeder og elementer, du har uploadet.",
|
||||
"personal": "Personlig",
|
||||
"personal-description": "Disse indstillinger er personlige for dig. Ændringer her vil ikke påvirke andre brugere",
|
||||
"personal-description": "Disse indstillinger er personlige for dig. Ændringer vil ikke påvirke andre brugere.",
|
||||
"user-settings": "Brugerindstillinger",
|
||||
"user-settings-description": "Administrer dine indstillinger, din adgangskode eller din e-mail",
|
||||
"api-tokens-description": "Administrer dine API Tokens, der giver adgang til eksterne applikationer",
|
||||
"user-settings-description": "Administrer dine indstillinger, din adgangskode eller din e-mail.",
|
||||
"api-tokens-description": "Administrer dine API Tokens for adgang fra eksterne applikationer.",
|
||||
"group-description": "Disse elementer deles i din gruppe. Redigering af et af dem vil ændre det for hele gruppen!",
|
||||
"group-settings": "Gruppeindstillinger",
|
||||
"group-settings-description": "Administrer dine fælles gruppeindstillinger såsom madplaner og privatlivsindstillinger.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifikationer",
|
||||
"notifiers-description": "Opsæt e-mail og push-notifikationer, der udløser på specifikke begivenheder.",
|
||||
"manage-data": "Administrer data",
|
||||
"manage-data-description": "Administrer dine fødevarer og enheder (flere muligheder kommer snart)",
|
||||
"manage-data-description": "Administrer dine Mealie data; Mad, Enheder, Kategorier, Tags og meget mere.",
|
||||
"data-migrations": "Migrering af data",
|
||||
"data-migrations-description": "Migrer dine eksisterende data fra andre programmer som Nextcloud Recipes og Chowdown",
|
||||
"data-migrations-description": "Migrér dine eksisterende data fra andre programmer som Nextcloud Opskrifter og Chowdown.",
|
||||
"email-sent": "E-mail sendt",
|
||||
"error-sending-email": "Fejl ved afsendelse af email",
|
||||
"personal-information": "Personlige oplysninger",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Etwas ist schief gelaufen!",
|
||||
"subscribed-events": "Abonnierte Ereignisse",
|
||||
"test-message-sent": "Testnachricht gesendet",
|
||||
"message-sent": "Daten gesendet",
|
||||
"new-notification": "Neue Benachrichtigung",
|
||||
"event-notifiers": "Ereignis-Benachrichtigungen",
|
||||
"apprise-url-skipped-if-blank": "Apprise-URL (wird übersprungen, wenn leer)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Testen",
|
||||
"themes": "Themen",
|
||||
"thursday": "Donnerstag",
|
||||
"title": "Titel",
|
||||
"token": "Token",
|
||||
"tuesday": "Dienstag",
|
||||
"type": "Typ",
|
||||
@@ -185,7 +187,7 @@
|
||||
"menu": "Menü",
|
||||
"a-name-is-required": "Ein Name wird benötigt",
|
||||
"delete-with-name": "{name} löschen",
|
||||
"confirm-delete-generic-with-name": "Bist du dir sicher, dass du \"{name}\" löschen möchtest?",
|
||||
"confirm-delete-generic-with-name": "Bist du dir sicher, dass du dies löschen möchtest?",
|
||||
"confirm-delete-own-admin-account": "Bitte beachte, dass du versuchst, dein eigenes Administrator-Konto zu löschen! Diese Aktion kann nicht rückgängig gemacht werden und wird dein Konto dauerhaft löschen!",
|
||||
"organizer": "Organisator",
|
||||
"transfer": "Übertragen",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Erstellt am: {0}",
|
||||
"unsaved-changes": "Du hast ungespeicherte Änderungen. Möchtest du vor dem Verlassen speichern? OK um zu speichern, Cancel um Änderungen zu verwerfen.",
|
||||
"clipboard-copy-failure": "Fehler beim Kopieren in die Zwischenablage.",
|
||||
"confirm-delete-generic-items": "Bist du dir sicher, dass du die folgenden Einträge löschen möchtest?"
|
||||
"confirm-delete-generic-items": "Bist du dir sicher, dass du die folgenden Einträge löschen möchtest?",
|
||||
"organizers": "Organisieren"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Bist du dir sicher, dass du die Gruppe <b>{groupName}<b/> löschen möchtest?",
|
||||
@@ -534,7 +537,7 @@
|
||||
"last-made-date": "Zuletzt gemacht {date}",
|
||||
"api-extras-description": "Rezepte-Extras sind ein Hauptmerkmal der Mealie API. Sie ermöglichen es dir, benutzerdefinierte JSON Key-Value-Paare zu einem Rezept zu erstellen, um Drittanbieter-Anwendungen zu steuern. Du kannst diese dazu verwenden, um Automatisierungen auszulösen oder benutzerdefinierte Nachrichten an bestimmte Geräte zu senden.",
|
||||
"message-key": "Nachrichten-Schlüssel",
|
||||
"parse": "Parse",
|
||||
"parse": "Parsen",
|
||||
"attach-images-hint": "Bilder durch Ziehen & Ablegen in den Editor hinzufügen",
|
||||
"drop-image": "Bild hier ablegen",
|
||||
"enable-ingredient-amounts-to-use-this-feature": "Aktiviere Zutatenmengen, um diese Funktion zu nutzen",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Bild hochladen",
|
||||
"screen-awake": "Bildschirm nicht abschalten",
|
||||
"remove-image": "Bild entfernen",
|
||||
"nextStep": "Nächster Schritt"
|
||||
"nextStep": "Nächster Schritt",
|
||||
"recipe-actions": "Rezept-Aktionen",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie verwendet natürliche Sprachverarbeitung (NLP), um Einheiten und Lebensmittel für deine Zutatenliste zu parsen. Diese Funktion ist experimentell und funktioniert möglicherweise nicht immer wie sie sollte. Wenn du die Parser-Ergebnisse nicht verwenden möchtest, wähle 'Abbrechen' und deine Änderungen werden nicht gespeichert.",
|
||||
"ingredient-parser": "Zutaten-Parser",
|
||||
"explanation": "Um den Zutaten-Parser zu verwenden, klicke auf den Button 'Alles parsen', um den Vorgang zu starten. Nachdem die Zutaten analysiert worden sind, kannst du überprüfen, ob die Einträge korrekt erkannt wurden. Der vom Modell errechnete Zuverlässigkeitswert wird rechts neben der Zutat angezeigt. Diese Angabe ist ein Durchschnitt der Einzelwerte und möglicherweise nicht immer ganz korrekt.",
|
||||
"alerts-explainer": "Es werden Warnungen angezeigt, wenn ein passendes Lebensmittel oder eine Einheit gefunden wurde, aber in der Datenbank nicht vorhanden ist.",
|
||||
"select-parser": "Parser auswählen",
|
||||
"natural-language-processor": "Natürliche Sprachverarbeitung (NLP)",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Alles parsen",
|
||||
"no-unit": "Keine Einheit",
|
||||
"missing-unit": "Fehlende Einheit erstellen: {unit}",
|
||||
"missing-food": "Fehlendes Lebensmittel erstellen: {food}",
|
||||
"no-food": "Kein Lebensmittel"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Erweiterte Suche",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Rezepte löschen",
|
||||
"source-unit-will-be-deleted": "Quell-Einheit wird gelöscht"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Rezept-Aktionen Daten",
|
||||
"new-recipe-action": "Neue Rezept-Aktion",
|
||||
"edit-recipe-action": "Rezept-Aktion bearbeiten",
|
||||
"action-type": "Aktionstyp"
|
||||
},
|
||||
"create-alias": "Alias erstellen",
|
||||
"manage-aliases": "Aliasse verwalten",
|
||||
"seed-data": "Musterdaten",
|
||||
@@ -1118,10 +1142,10 @@
|
||||
"info-description-cleanable-images": "Löschbare Bilder",
|
||||
"storage": {
|
||||
"title-temporary-directory": "Temporäres Verzeichnis (.temp)",
|
||||
"title-backups-directory": "Sicherungsverzeichnis (backups)",
|
||||
"title-backups-directory": "Sicherungen-Verzeichnis (backups)",
|
||||
"title-groups-directory": "Gruppen-Verzeichnis (groups)",
|
||||
"title-recipes-directory": "Rezept-Verzeichnis (recipes)",
|
||||
"title-user-directory": "Benutzerverzeichnis (user)"
|
||||
"title-user-directory": "Benutzer-Verzeichnis (user)"
|
||||
},
|
||||
"action-delete-log-files-name": "Logs löschen",
|
||||
"action-delete-log-files-description": "Löscht alle Logdateien",
|
||||
@@ -1146,9 +1170,9 @@
|
||||
"ingredients-natural-language-processor-explanation-2": "Es ist nicht perfekt, aber es erzeugt meist sehr gute Ergebnisse und ist ein guter Anfang, um Zutaten manuell den einzelnen Feldern zuzuordnen. Alternativ kannst du auch den \"Brute\" Prozessor benutzen, der eine Musterabgleich-Technik verwendet, um Zutaten zu identifizieren.",
|
||||
"nlp": "NLP",
|
||||
"brute": "Brute",
|
||||
"show-individual-confidence": "Zeige individuelle Überzeugungswerte an",
|
||||
"show-individual-confidence": "Zeige individuelle Zuverlässigkeitswerte an",
|
||||
"ingredient-text": "Zutaten-Angabe",
|
||||
"average-confident": "{0} überzeugt",
|
||||
"average-confident": "{0} zuverlässig",
|
||||
"try-an-example": "Probier ein Beispiel aus",
|
||||
"parser": "Parser",
|
||||
"background-tasks": "Hintergrundaufgaben",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Willkommen, {0}",
|
||||
"welcome-user": "👋 Willkommen, {0}!",
|
||||
"description": "Verwalte dein Profil, Rezepte und Gruppeneinstellungen.",
|
||||
"get-invite-link": "Einladungslink erzeugen",
|
||||
"get-public-link": "Öffentlichen Link abrufen",
|
||||
"account-summary": "Kontoübersicht",
|
||||
"account-summary-description": "Hier ist eine Übersicht der Informationen deiner Gruppe",
|
||||
"account-summary-description": "Hier ist eine Zusammenfassung der Details deiner Gruppe.",
|
||||
"group-statistics": "Gruppenstatistik",
|
||||
"group-statistics-description": "Deine Gruppenstatistik gibt dir einen Einblick, wie du Mealie verwendest.",
|
||||
"storage-capacity": "Speicherplatz",
|
||||
"storage-capacity-description": "Dein Speicherplatz wird anhand der Bilder und Anhänge berechnet, die du hochgeladen hast.",
|
||||
"personal": "Persönlich",
|
||||
"personal-description": "Das sind deine persönlichen Einstellungen. Änderungen hier wirken sich nicht auf andere Benutzer aus",
|
||||
"personal-description": "Das sind deine persönlichen Einstellungen. Änderungen hier wirken sich nicht auf andere Benutzer aus.",
|
||||
"user-settings": "Benutzereinstellungen",
|
||||
"user-settings-description": "Verwalte deine Einstellungen, ändere dein Passwort und aktualisiere deine E-Mail-Adresse",
|
||||
"api-tokens-description": "Verwalte deine API Token für den Zugriff von externen Anwendungen",
|
||||
"user-settings-description": "Verwalte deine Einstellungen, ändere dein Passwort und aktualisiere deine E-Mail-Adresse.",
|
||||
"api-tokens-description": "Verwalte deine API Token für den Zugriff von externen Anwendungen.",
|
||||
"group-description": "Diese Elemente werden innerhalb deiner Gruppe geteilt. Änderungen wirken sich auf die gesamte Gruppe aus!",
|
||||
"group-settings": "Gruppen-Einstellungen",
|
||||
"group-settings-description": "Verwalte deine allgemeinen Gruppeneinstellungen wie Essenspläne und Privatsphäre.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Benachrichtigungen",
|
||||
"notifiers-description": "Richte E-Mail und Push-Benachrichtigungen ein, die bei bestimmten Ereignissen ausgelöst werden.",
|
||||
"manage-data": "Daten verwalten",
|
||||
"manage-data-description": "Verwalte deine Rezepte, Lebensmittel, Einheiten und Etiketten (weitere Optionen kommen bald)",
|
||||
"manage-data-description": "Verwalte deine Mealie-Daten: Lebensmittel, Einheiten, Kategorien, Schlagworte und mehr.",
|
||||
"data-migrations": "Datenmigration",
|
||||
"data-migrations-description": "Migriere deine vorhandenen Daten aus anderen Anwendungen wie Nextcloud-Rezepte und Chowdown",
|
||||
"data-migrations-description": "Migriere deine vorhandenen Daten aus anderen Anwendungen wie Nextcloud-Rezepte und Chowdown.",
|
||||
"email-sent": "E-Mail gesendet",
|
||||
"error-sending-email": "Fehler beim Senden der E-Mail",
|
||||
"personal-information": "Persönliche Daten",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Κάτι δεν πήγε καλά!",
|
||||
"subscribed-events": "Εγγεγραμμένα Γεγονότα",
|
||||
"test-message-sent": "Το δοκιμαστικό μήνυμα εστάλη",
|
||||
"message-sent": "Το μήνυμα εστάλη",
|
||||
"new-notification": "Νέα ειδοποίηση",
|
||||
"event-notifiers": "Ειδοποιητές Συμβάντος",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Δοκιμή",
|
||||
"themes": "Θέματα",
|
||||
"thursday": "Τρίτη",
|
||||
"title": "Τίτλος",
|
||||
"token": "Token",
|
||||
"tuesday": "Τρίτη",
|
||||
"type": "Τύπος",
|
||||
@@ -174,7 +176,7 @@
|
||||
"units": "Μονάδες",
|
||||
"back": "Πίσω",
|
||||
"next": "Επόμενο",
|
||||
"start": "Start",
|
||||
"start": "Εναρξη",
|
||||
"toggle-view": "Εναλλαγή προβολής",
|
||||
"date": "Ημερομηνία",
|
||||
"id": "Αναγνωριστικό",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Δημιουργήθηκε στις: {0}",
|
||||
"unsaved-changes": "Εχετε μη αποθηκευμένες αλλαγές. Θέλετε να κάνετε αποθήκευση πριν από την αποχώρηση; Εντάξει για αποθήκευση, Ακυρο για απόρριψη των αλλαγών.",
|
||||
"clipboard-copy-failure": "Η αντιγραφή στο πρόχειρο απέτυχε.",
|
||||
"confirm-delete-generic-items": "Θέλετε σίγουρα να διαγράψετε τα ακόλουθα αντικείμενα;"
|
||||
"confirm-delete-generic-items": "Θέλετε σίγουρα να διαγράψετε τα ακόλουθα αντικείμενα;",
|
||||
"organizers": "Οργανωτές"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Θέλετε σίγουρα να διαγράψετε αυτό τον ασφαλή σύνδεσμο <b>{groupName}<b/>;",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Upload image",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Ενέργειες Συνταγής",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Το Mealie χρησιμοποιεί επεξεργασία φυσικής γλώσσας για να αναλύσει και να δημιουργήσει μονάδες και είδη διατροφής για τα συστατικά της συνταγής σας. Αυτή η λειτουργία είναι πειραματική και μπορεί να μην λειτουργεί πάντα όπως πρέπει. Αν προτιμάτε να μην χρησιμοποιείτε τα αναλυμένα αποτελέσματα, μπορείτε να επιλέξετε 'Ακύρωση' και οι αλλαγές σας δεν θα αποθηκευτούν.",
|
||||
"ingredient-parser": "Αναλυτής Συστατικών",
|
||||
"explanation": "Για να χρησιμοποιήσετε τον αναλυτή συστατικών, κάντε κλικ στο πλήκτρο 'Ανάλυση Ολων' για να ξεκινήσετε τη διαδικασία. Μόλις τα αναλυμένα συστατικά είναι διαθέσιμα, μπορείτε να τα επανεξετάσετε και να βεβαιωθείτε ότι έχουν αναλυθεί σωστά. Η βαθμολογία εμπιστοσύνης του μοντέλου εμφανίζεται στα δεξιά του τίτλου αντικειμένου. Αυτό το σκορ είναι ένας μέσος όρος όλων των επιμέρους βαθμολογιών και μπορεί να μην είναι πάντα εντελώς ακριβής.",
|
||||
"alerts-explainer": "Θα εμφανίζονται ειδοποιήσεις αν βρεθεί ένα αντίστοιχο φαγητό ή μονάδα αλλά δεν υπάρχει στη βάση δεδομένων.",
|
||||
"select-parser": "Επιλέξτε Αναλυτή",
|
||||
"natural-language-processor": "Επεξεργαστής Φυσικής Γλώσσας",
|
||||
"brute-parser": "Αναλυτής Ωμής Βίας",
|
||||
"parse-all": "Ανάλυση Ολων",
|
||||
"no-unit": "Καμία μονάδα",
|
||||
"missing-unit": "Δημιουργία μονάδας που λείπει: {unit}",
|
||||
"missing-food": "Δημιουργία φαγητού που λείπει: {food}",
|
||||
"no-food": "Χωρίς Φαγητό"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Σύνθετη Αναζήτηση",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Δεδομένα Ενεργειών Συνταγής",
|
||||
"new-recipe-action": "Νέα Ενέργεια Συνταγής",
|
||||
"edit-recipe-action": "Επεξεργασία Ενέργειας Συνταγής",
|
||||
"action-type": "Τύπος Ενέργειας"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}",
|
||||
"welcome-user": "👋 Καλώς ορίσατε, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Ακολουθεί μια περίληψη των πληροφοριών της ομάδας σας.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "Αυτές είναι προσωπικές ρυθμίσεις σας. Οι αλλαγές εδώ δεν θα επηρεάσουν άλλους χρήστες.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Διαχειριστείτε τις προτιμήσεις σας, αλλάξτε τον κωδικό πρόσβασής σας και ενημερώστε το email σας",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Διαχειριστείτε τις προτιμήσεις σας, αλλάξτε τον κωδικό πρόσβασής σας και ενημερώστε το email σας.",
|
||||
"api-tokens-description": "Διαχειριστείτε τα API Tokens σας για πρόσβαση από εξωτερικές εφαρμογές.",
|
||||
"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-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"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)",
|
||||
"manage-data-description": "Διαχειριστείτε τα δεδομένα σας στο Mealie. Τρόφιμα, Μονάδες, Κατηγορίες, Ετικέτες και πολλά άλλα.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Something Went Wrong!",
|
||||
"subscribed-events": "Subscribed Events",
|
||||
"test-message-sent": "Test Message Sent",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "New Notification",
|
||||
"event-notifiers": "Event Notifiers",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Test",
|
||||
"themes": "Themes",
|
||||
"thursday": "Thursday",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Tuesday",
|
||||
"type": "Type",
|
||||
@@ -207,7 +209,8 @@
|
||||
"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.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organisers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Upload image",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Advanced Search",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"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-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"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)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Something Went Wrong!",
|
||||
"subscribed-events": "Subscribed Events",
|
||||
"test-message-sent": "Test Message Sent",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "New Notification",
|
||||
"event-notifiers": "Event Notifiers",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Test",
|
||||
"themes": "Themes",
|
||||
"thursday": "Thursday",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Tuesday",
|
||||
"type": "Type",
|
||||
@@ -207,7 +209,8 @@
|
||||
"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.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
|
||||
@@ -371,7 +374,7 @@
|
||||
"title": "Plan to Eat",
|
||||
"description-long": "Mealie can import recipies from Plan to Eat."
|
||||
},
|
||||
"myrecipebox" : {
|
||||
"myrecipebox": {
|
||||
"title": "My Recipe Box",
|
||||
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
|
||||
}
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Upload image",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Advanced Search",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"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-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"notifiers-description": "Set up 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)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "¡Algo ha salido mal!",
|
||||
"subscribed-events": "Eventos suscritos",
|
||||
"test-message-sent": "Mensaje Enviado",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Nueva notificación",
|
||||
"event-notifiers": "Notificaciones de eventos",
|
||||
"apprise-url-skipped-if-blank": "URL de Apprise (omitida si está en blanco)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Prueba",
|
||||
"themes": "Temas",
|
||||
"thursday": "Jueves",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Martes",
|
||||
"type": "Tipo",
|
||||
@@ -207,7 +209,8 @@
|
||||
"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": "¿Estás seguro que quieres eliminar los siguientes elementos?"
|
||||
"confirm-delete-generic-items": "¿Estás seguro que quieres eliminar los siguientes elementos?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Por favor, confirma que deseas eliminar <b>{groupName}<b/>",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Subir imagen",
|
||||
"screen-awake": "Mantener la pantalla encendida",
|
||||
"remove-image": "Eliminar imagen",
|
||||
"nextStep": "Siguiente paso"
|
||||
"nextStep": "Siguiente paso",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Búsqueda avanzada",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Borrar Recetas",
|
||||
"source-unit-will-be-deleted": "Se eliminará la unidad de origen"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Crear un Alias",
|
||||
"manage-aliases": "Administrar Alias",
|
||||
"seed-data": "Datos de ejemplo",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Hola, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Administra tu perfil, recetas y ajustes de grupo.",
|
||||
"get-invite-link": "Obtener enlace de invitación",
|
||||
"get-public-link": "Obtener enlace público",
|
||||
"account-summary": "Información de la cuenta",
|
||||
"account-summary-description": "Este es un resumen de la información de tu grupo",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Estadísticas del grupo",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Capacidad de almacenamiento",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "Ajustes de usuario",
|
||||
"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",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "These items are shared within your group. Editing one of them will change it for the whole group!",
|
||||
"group-settings": "Ajustes de grupo",
|
||||
"group-settings-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notificaciones",
|
||||
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
|
||||
"manage-data": "Administrar datos",
|
||||
"manage-data-description": "Administra tu Comida y Unidades (próximamente más opciones)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Migración de datos",
|
||||
"data-migrations-description": "Migrar tus datos existentes de otras aplicaciones como Nextcloud Recipes y Chowdown",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "Email enviado",
|
||||
"error-sending-email": "Error enviando email",
|
||||
"personal-information": "Datos Personales",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Jotain meni pieleen!",
|
||||
"subscribed-events": "Tilatut tapahtumat",
|
||||
"test-message-sent": "Viesti lähetetty",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Uusi ilmoitus",
|
||||
"event-notifiers": "Tapahtumien ilmoitukset",
|
||||
"apprise-url-skipped-if-blank": "Ilmoitusverkko-osoite (voi jättää tyhjäksi)",
|
||||
@@ -80,12 +81,12 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"add": "Lisää",
|
||||
"cancel": "Peruuta",
|
||||
"clear": "Tyhjennä",
|
||||
"close": "Sulje",
|
||||
"confirm": "Vahvista",
|
||||
"confirm-how-does-everything-look": "How does everything look?",
|
||||
"confirm-how-does-everything-look": "Miltä näyttää?",
|
||||
"confirm-delete-generic": "Haluatko varmasti poistaa tämän?",
|
||||
"copied_message": "Kopioitu!",
|
||||
"create": "Luo",
|
||||
@@ -116,10 +117,10 @@
|
||||
"json": "JSON",
|
||||
"keyword": "Hakusana",
|
||||
"link-copied": "Linkki kopioitu",
|
||||
"loading": "Loading",
|
||||
"loading": "Ladataan",
|
||||
"loading-events": "Ladataan tapahtumia",
|
||||
"loading-recipe": "Loading recipe...",
|
||||
"loading-ocr-data": "Loading OCR data...",
|
||||
"loading-recipe": "Ladataan reseptiä...",
|
||||
"loading-ocr-data": "Ladataan tekstintunnistustietoja...",
|
||||
"loading-recipes": "Ladataan reseptejä",
|
||||
"message": "Viesti",
|
||||
"monday": "Maanantai",
|
||||
@@ -130,7 +131,7 @@
|
||||
"no-recipe-found": "Reseptiä ei löytynyt",
|
||||
"ok": "OK",
|
||||
"options": "Valinnat:",
|
||||
"plural-name": "Plural Name",
|
||||
"plural-name": "Monikollinen nimi",
|
||||
"print": "Tulosta",
|
||||
"print-preferences": "Tulosta asetukset",
|
||||
"random": "Satunnainen",
|
||||
@@ -144,22 +145,23 @@
|
||||
"save": "Tallenna",
|
||||
"settings": "Asetukset",
|
||||
"share": "Jaa",
|
||||
"show-all": "Show All",
|
||||
"show-all": "Näytä kaikki",
|
||||
"shuffle": "Sekoita",
|
||||
"sort": "Järjestä",
|
||||
"sort-ascending": "Sort Ascending",
|
||||
"sort-descending": "Sort Descending",
|
||||
"sort-ascending": "Järjestä nousevasti",
|
||||
"sort-descending": "Järjestä laskevasti",
|
||||
"sort-alphabetically": "Aakkosjärjestyksessä",
|
||||
"status": "Tila",
|
||||
"subject": "Aihe",
|
||||
"submit": "Lähetä",
|
||||
"success-count": "Onnistui: {count}",
|
||||
"sunday": "Sunnuntai",
|
||||
"system": "System",
|
||||
"system": "Järjestelmä",
|
||||
"templates": "Mallipohjat:",
|
||||
"test": "Testi",
|
||||
"themes": "Teemat",
|
||||
"thursday": "Torstai",
|
||||
"title": "Title",
|
||||
"token": "Tunniste",
|
||||
"tuesday": "Tiistai",
|
||||
"type": "Tyyppi",
|
||||
@@ -174,7 +176,7 @@
|
||||
"units": "Yksiköt",
|
||||
"back": "Takaisin",
|
||||
"next": "Seuraava",
|
||||
"start": "Start",
|
||||
"start": "Aloita",
|
||||
"toggle-view": "Vaihda näkymää",
|
||||
"date": "Päivämäärä",
|
||||
"id": "Id",
|
||||
@@ -205,9 +207,10 @@
|
||||
"refresh": "Päivitä",
|
||||
"upload-file": "Tuo tiedosto",
|
||||
"created-on-date": "Luotu {0}",
|
||||
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"unsaved-changes": "Et ole tallentanut tekemiäsi muutoksia. Tallennetaanko ne? Paina \"ok\" tallentaaksesi ja \"peruuta\", jos et halua tallentaa.",
|
||||
"clipboard-copy-failure": "Kopioiminen leikepöydälle epäonnistui.",
|
||||
"confirm-delete-generic-items": "Haluatko varmasti poistaa seuraavat kohteet?",
|
||||
"organizers": "Järjestäjät"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Haluatko varmasti poistaa ryhmän <b>{groupName}<b/>?",
|
||||
@@ -222,7 +225,7 @@
|
||||
"group-id-with-value": "Ryhmän ID: {groupID}",
|
||||
"group-name": "Ryhmän nimi",
|
||||
"group-not-found": "Ryhmää ei löytynyt",
|
||||
"group-token": "Group Token",
|
||||
"group-token": "Ryhmän tunnus",
|
||||
"group-with-value": "Ryhmä: {groupID}",
|
||||
"groups": "Ryhmät",
|
||||
"manage-groups": "Hallitse ryhmiä",
|
||||
@@ -243,8 +246,8 @@
|
||||
"group-preferences": "Ryhmän oletusasetukset",
|
||||
"private-group": "Yksityinen ryhmä",
|
||||
"private-group-description": "Jos asetat ryhmäsi yksityiseksi, kaikki julkisen näkymän asetukset ovat oletusarvoisia. Tämä ohittaa yksittäisten reseptien julkisen näkymän asetukset.",
|
||||
"enable-public-access": "Enable Public Access",
|
||||
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
|
||||
"enable-public-access": "Salli julkinen käyttö",
|
||||
"enable-public-access-description": "Julkista ryhmän reseptit automaattisesti ja anna vierailijoiden nähdä reseptit kirjautumatta sisään",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes": "Anna muiden kuin ryhmäsi jäsenten nähdä reseptisi",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Kun tämä on käytössä, voit käyttää julkista jakolinkkiä tiettyjen reseptien jakamiseen ilman käyttäjän valtuutusta. Kun se on poistettu käytöstä, voit jakaa reseptejä vain käyttäjien kanssa, jotka ovat ryhmässäsi tai joilla on ennalta luotu yksityinen linkki",
|
||||
"show-nutrition-information": "Näytä ravintotiedot",
|
||||
@@ -260,7 +263,7 @@
|
||||
"general-preferences": "Yleiset Asetukset",
|
||||
"group-recipe-preferences": "Ryhmän reseptiasetukset",
|
||||
"report": "Raportti",
|
||||
"report-with-id": "Report ID: {id}",
|
||||
"report-with-id": "Ilmoituksen tunnus: {id}",
|
||||
"group-management": "Ryhmien hallinta",
|
||||
"admin-group-management": "Ylläpitoryhmien hallinta",
|
||||
"admin-group-management-text": "Muutokset tähän ryhmään tulevat näkymään välittömästi.",
|
||||
@@ -358,11 +361,11 @@
|
||||
},
|
||||
"recipe-data-migrations": "Reseptien tietojen migraatiot",
|
||||
"recipe-data-migrations-explanation": "Reseptit voidaan siirtää toisesta tuetusta sovelluksesta Mealie -sovellukseen. Tämä on hyvä tapa päästä alkuun Mealiella.",
|
||||
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
|
||||
"coming-from-another-application-or-an-even-older-version-of-mealie": "Olitko toisessa sovelluksessa tai Mealien aiemmassa versiossa? Tarkista, voidaanko tietosi siirtää.",
|
||||
"choose-migration-type": "Valitse migraatiotyyppi",
|
||||
"tag-all-recipes": "Merkitse kaikki reseptit tunnisteella {tag-name}",
|
||||
"nextcloud-text": "Nextcloud reseptejä voidaan tuoda zip-tiedostosta, joka sisältää Nextcloudiin tallennetut tiedot. Katso esimerkkikansiorakenne alla varmistaaksesi, että reseptisi voidaan tuoda.",
|
||||
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
|
||||
"chowdown-text": "Mealie tukee Chowdown-säilömistä. Lataa koodin arkisto zip-tiedostona alempaa.",
|
||||
"recipe-1": "Resepti 1",
|
||||
"recipe-2": "Resepti 2",
|
||||
"paprika-text": "Mealie voi tuoda reseptejä Paprika-sovelluksesta. Vie reseptisi ohjelmasta ulos, nimeä tiedoston pääte uudelleen .zip ja lataa se alla.",
|
||||
@@ -372,8 +375,8 @@
|
||||
"description-long": "Mealieen voi tuoda reseptejä Plan to Eat -sovelluksesta."
|
||||
},
|
||||
"myrecipebox": {
|
||||
"title": "My Recipe Box",
|
||||
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
|
||||
"title": "Reseptilaatikkoni",
|
||||
"description-long": "Voit tuoda Mealieen reseptejä reseptilaatikosta. Tuo reseptisi csv-muodossa ja lataa sitten csv-tiedosto alempaa."
|
||||
}
|
||||
},
|
||||
"new-recipe": {
|
||||
@@ -487,12 +490,12 @@
|
||||
"add-to-plan": "Lisää suunnitelmaan",
|
||||
"add-to-timeline": "Lisää aikajanalle",
|
||||
"recipe-added-to-list": "Resepti lisätty listalle",
|
||||
"recipes-added-to-list": "Recipes added to list",
|
||||
"successfully-added-to-list": "Successfully added to list",
|
||||
"recipes-added-to-list": "Reseptit lisätty luetteloon",
|
||||
"successfully-added-to-list": "Luetteloon lisääminen onnistui",
|
||||
"recipe-added-to-mealplan": "Resepti lisätty ateriasuunnitelmaan",
|
||||
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
|
||||
"failed-to-add-recipes-to-list": "Luetteloon lisääminen epäonnistui",
|
||||
"failed-to-add-recipe-to-mealplan": "Reseptiä ei voitu lisätä ateriasuunnitelmaan",
|
||||
"failed-to-add-to-list": "Failed to add to list",
|
||||
"failed-to-add-to-list": "Luetteloon lisääminen epäonnistui",
|
||||
"yield": "Sato",
|
||||
"quantity": "Määrä",
|
||||
"choose-unit": "Valitse Yksikkö",
|
||||
@@ -508,8 +511,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",
|
||||
"move-to-bottom": "Siirrä alas",
|
||||
"move-to-top": "Siirrä ylös",
|
||||
"reset-scale": "Palauta skaala",
|
||||
"decrease-scale-label": "Vähennä mittakaavaa yhdellä",
|
||||
"increase-scale-label": "Suurenna mittakaavaa yhdellä",
|
||||
@@ -525,18 +528,18 @@
|
||||
"edit-timeline-event": "Muokkaa Aikajanan Tapahtumaa",
|
||||
"timeline": "Aikajana",
|
||||
"timeline-is-empty": "Aikajana on tyhjä. Tee resepti.",
|
||||
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
|
||||
"timeline-no-events-found-try-adjusting-filters": "Tapahtumia ei löytynyt. Voit yrittää muuttaa hakusuodattimia.",
|
||||
"group-global-timeline": "{groupName} Yleinen Aikajana",
|
||||
"open-timeline": "Avaa aikajana",
|
||||
"made-this": "Tein tämän",
|
||||
"how-did-it-turn-out": "Miten se onnistui?",
|
||||
"user-made-this": "{user} teki tämän",
|
||||
"last-made-date": "Viimeksi valmistettu {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": "Reseptiekstrat ovat Mealien API:n tärkeä ominaisuus. Niiden avulla voidaan luoda mukautettuja JSON-avain/arvo-pareja reseptin sisällä viitaten kolmannen osapuolen sovelluksiin. Näitä avaimia voi käyttää tiedon antamiseksi, esimerkiksi automaattisen toiminnon tai mukautetun viestin käynnistämiseksi haluamaasi laitteeseen.",
|
||||
"message-key": "Viestiavain",
|
||||
"parse": "Jäsennä",
|
||||
"attach-images-hint": "Liitä kuvia vetämällä ja pudottamalla ne editoriin",
|
||||
"drop-image": "Drop image",
|
||||
"drop-image": "Tuo kuva",
|
||||
"enable-ingredient-amounts-to-use-this-feature": "Käytä ainesosan määriä käyttääksesi tätä ominaisuutta",
|
||||
"recipes-with-units-or-foods-defined-cannot-be-parsed": "Reseptejä, joissa on yksiköitä tai elintarvikkeita, ei voida jäsentää.",
|
||||
"parse-ingredients": "Jäsennä ainekset",
|
||||
@@ -546,8 +549,8 @@
|
||||
"looking-for-migrations": "Etsitkö Migraatioita?",
|
||||
"import-with-url": "Tuo URL-osoitteesta",
|
||||
"create-recipe": "Luo Resepti",
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"create-recipe-description": "Luo resepti alusta.",
|
||||
"create-recipes": "Luo reseptejä",
|
||||
"import-with-zip": "Tuo .zip:llä",
|
||||
"create-recipe-from-an-image": "Luo resepti kuvasta",
|
||||
"bulk-url-import": "Massa tuonti URL-osoitteesta",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Lataa kuva",
|
||||
"screen-awake": "Pidä näyttö aina päällä",
|
||||
"remove-image": "Poista kuva",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Seuraava askel",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Tarkennettu haku",
|
||||
@@ -600,16 +618,16 @@
|
||||
"search-hint": "Paina '/'",
|
||||
"advanced": "Lisäasetukset",
|
||||
"auto-search": "Automaattinen Haku",
|
||||
"no-results": "No results found"
|
||||
"no-results": "Ei tuloksia"
|
||||
},
|
||||
"settings": {
|
||||
"add-a-new-theme": "Lisää uusi teema",
|
||||
"admin-settings": "Ylläpitäjän asetukset",
|
||||
"backup": {
|
||||
"backup-created": "Backup created successfully",
|
||||
"backup-created": "Varmuuskopio luotu",
|
||||
"backup-created-at-response-export_path": "Varmuuskopio luotu sijaintiin {path}",
|
||||
"backup-deleted": "Varmuuskopio poistettu",
|
||||
"restore-success": "Restore successful",
|
||||
"restore-success": "Palautus onnistui",
|
||||
"backup-tag": "Varmuuskopion tunniste",
|
||||
"create-heading": "Create a Backup",
|
||||
"delete-backup": "Poista varmuuskopio",
|
||||
@@ -618,7 +636,7 @@
|
||||
"import-summary": "Tuo yhteenveto",
|
||||
"partial-backup": "Osittainen varmuuskopiointi",
|
||||
"unable-to-delete-backup": "Varmuuskopiota ei voi poistaa.",
|
||||
"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.",
|
||||
"experimental-description": "Varmuuskopiot ovat sivuston tietokannan ja -hakemiston tilannekuvia. Siihen sisältyy kaikki tieto, eikä siitä voi poistaa tietojen osajoukkoja. Tämä on verrattavissa tilannekuvaan Mealiesta tiettynä ajankohtana. Nämä toimivat tietokantojen tapana tuoda ja viedä tietoja sekä sivuston varmuuskopioina ulkoisessa sijainnissa.",
|
||||
"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.",
|
||||
@@ -710,7 +728,7 @@
|
||||
"webhooks-caps": "WEBHOOKIT",
|
||||
"webhooks": "Webhookit",
|
||||
"webhook-name": "Webhookin nimi",
|
||||
"description": "The webhooks defined below will be executed when a meal is defined for the day. At the scheduled time the webhooks will be sent with the data from the recipe that is scheduled for the day. Note that webhook execution is not exact. The webhooks are executed on a 5 minutes interval so the webhooks will be executed within 5 +/- minutes of the scheduled."
|
||||
"description": "Alla olevat nettikoukut suoritetaan, kun päivälle on määritelty ateria. Tiettynä ajankohtana koukut lähetetään päivän mukaisen reseptin tietojen mukana. Koukkujen suoritusaika ei ole tarkka, vaan niitä suoritetaan viiden minuutin välein."
|
||||
},
|
||||
"bug-report": "Virheraportti",
|
||||
"bug-report-information": "Käytä näitä tietoja raportoidaksesi viasta. Kehittäjille annettavien tietojen antaminen on paras tapa saada ongelmasi ratkaistua nopeasti.",
|
||||
@@ -718,13 +736,13 @@
|
||||
"configuration": "Konfigurointi",
|
||||
"docker-volume": "Docker-kontin tiedostojärjestelmä",
|
||||
"docker-volume-help": "Mealie vaatii, että frontend-kontti ja backend jakaa saman dockerin tiedostojärjestelmän tai varaston. Näin varmistetaan, että frontend-kontti pääsee kunnolla käsiksi levylle tallennettuihin kuviin ja resursseihin.",
|
||||
"volumes-are-misconfigured": "Volumes are misconfigured.",
|
||||
"volumes-are-misconfigured": "Äänenvoimakkuudet ovat virheellisiä.",
|
||||
"volumes-are-configured-correctly": "Tiedostojärjestelmät ovat oikein konfiguroitu.",
|
||||
"status-unknown-try-running-a-validation": "Tila tuntematon. Yritä suorittaa validointi.",
|
||||
"validate": "Vahvista",
|
||||
"email-configuration-status": "Sähköpostin varmistuksen tila",
|
||||
"email-configured": "Email Configured",
|
||||
"email-test-results": "Email Test Results",
|
||||
"email-configured": "Sähköposti on määritelty",
|
||||
"email-test-results": "Sähköpostin testin tulokset",
|
||||
"ready": "Valmis",
|
||||
"not-ready": "Ei Valmis - Tarkista Ympäristömuuttujat",
|
||||
"succeeded": "Onnistui",
|
||||
@@ -736,15 +754,15 @@
|
||||
"secure-site": "Turvallinen Sivusto",
|
||||
"secure-site-error-text": "Palvele paikallisen tai suojatun palvelimen kautta https-sovelluksella. Leikepöytä ja muut selaimen API-sovellukset eivät välttämättä toimi.",
|
||||
"secure-site-success-text": "Sivustolle pääsee localhost tai https",
|
||||
"server-side-base-url": "Server Side Base URL",
|
||||
"server-side-base-url": "Palvelimen pohja-URL",
|
||||
"server-side-base-url-error-text": "`BASE_URL` on API-palvelimen oletusarvo. Tämä aiheuttaa ongelmia ilmoitusten linkkien kanssa, jotka on luotu palvelimella sähköposteja varten jne.",
|
||||
"server-side-base-url-success-text": "Server Side URL does not match the default",
|
||||
"server-side-base-url-success-text": "Palvelimen nettiosoite ei vastaa oletusta",
|
||||
"ldap-ready": "LDAP Valmis",
|
||||
"ldap-ready-error-text": "Kaikkia LDAP-arvoja ei ole määritetty. Tämä voidaan ohittaa, jos et käytä LDAP-todennusta.",
|
||||
"ldap-ready-success-text": "Kaikki vaaditut LDAP-muuttujat on asetettu.",
|
||||
"build": "Koonti",
|
||||
"recipe-scraper-version": "Reseptikaappaimen versio",
|
||||
"oidc-ready": "OIDC Ready",
|
||||
"oidc-ready": "OIDC valmis",
|
||||
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
|
||||
"oidc-ready-success-text": "Required OIDC variables are all set."
|
||||
},
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Poista Reseptit",
|
||||
"source-unit-will-be-deleted": "Lähdeyksikkö poistetaan"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Tietokannan pohjadata",
|
||||
@@ -1161,27 +1185,27 @@
|
||||
"already-set-up-bring-to-homepage": "I'm already set up, just bring me to the homepage",
|
||||
"common-settings-for-new-sites": "Here are some common settings for new sites",
|
||||
"setup-complete": "Setup Complete!",
|
||||
"here-are-a-few-things-to-help-you-get-started": "Here are a few things to help you get started with Mealie",
|
||||
"restore-from-v1-backup": "Have a backup from a previous instance of Mealie v1? You can restore it here.",
|
||||
"manage-profile-or-get-invite-link": "Manage your own profile, or grab an invite link to share with others."
|
||||
"here-are-a-few-things-to-help-you-get-started": "Näillä muutamilla asioilla pääset alkuun",
|
||||
"restore-from-v1-backup": "Onko sinulla varmuuskopio aiemmasta Mealie v1 -instanssista? Palauta se tästä.",
|
||||
"manage-profile-or-get-invite-link": "Hallitse profiiliasi tai hanki kutsulinkki muille."
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Tervetuloa, {0}",
|
||||
"welcome-user": "👋 Tervetuloa, {0}!",
|
||||
"description": "Hallitse profiiliasi, reseptejäsi ja ryhmäasetuksiasi.",
|
||||
"get-invite-link": "Hanki Kutsulinkki",
|
||||
"get-public-link": "Julkinen linkki",
|
||||
"account-summary": "Tilin Yhteenveto",
|
||||
"account-summary-description": "Tässä on yhteenveto ryhmäsi tiedoista",
|
||||
"account-summary-description": "Tässä on yhteenveto ryhmäsi tiedoista.",
|
||||
"group-statistics": "Ryhmätilastot",
|
||||
"group-statistics-description": "Ryhmätilaston avulla saat tietoa siitä, miten käytät Mealietä.",
|
||||
"storage-capacity": "Tallennustila",
|
||||
"storage-capacity-description": "Tallennuskapasiteetti on laskettu niistä kuvista ja resursseista, jotka olet ladannut.",
|
||||
"personal": "Henkilökohtainen",
|
||||
"personal-description": "Nämä ovat henkilökohtaisia asetuksia, jotka eivät vaikuta muihin käyttäjiin",
|
||||
"personal-description": "Nämä asetukset ovat henkilökohtaisia, eivätkä ne vaikuta muihin käyttäjiin.",
|
||||
"user-settings": "Käyttäjäasetukset",
|
||||
"user-settings-description": "Hallitse asetuksiasi, vaihda salasanasi ja päivitä sähköpostiosoitteesi",
|
||||
"api-tokens-description": "Hallinnoi API-tunnisteitasi päästäksesi käsiksi ulkoisista sovelluksista",
|
||||
"user-settings-description": "Hallitse asetuksiasi, muuta salasanaasi ja päivitä sähköpostiosoitteesi.",
|
||||
"api-tokens-description": "Hallitse ulkoisten sovellusten API-tunnisteitasi.",
|
||||
"group-description": "Nämä kohteet on jaettu ryhmässäsi. Yhden muokkaaminen muuttaa sitä koko ryhmälle!",
|
||||
"group-settings": "Ryhmäasetukset",
|
||||
"group-settings-description": "Hallinnoi ryhmäsi asetuksia kuten ateriasuunnitelmaa ja yksityisyysasetuksia.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Ilmoitukset",
|
||||
"notifiers-description": "Määritä sähköposti- ja push-ilmoitukset, jotka käynnistävät tiettyjä tapahtumia.",
|
||||
"manage-data": "Hallinnoi tietoja",
|
||||
"manage-data-description": "Hallinnoi elintarvikkeita ja yksiköitä (lisää vaihtoehtoja tulossa pian)",
|
||||
"manage-data-description": "Hallitse Mealie-tietojasi: elintarvikkeita, yksiköitä, luokkia, tunnisteita ja muita.",
|
||||
"data-migrations": "Tietojen migraatiot",
|
||||
"data-migrations-description": "Siirrä olemassa olevat tiedot muista sovelluksista, kuten Nextcloud Recipes ja Chowdown",
|
||||
"data-migrations-description": "Siirrä tietosi muista sovelluksista, kuten Nextcloudista ja Chowdownista.",
|
||||
"email-sent": "Sähköposti lähetetty",
|
||||
"error-sending-email": "Virhe sähköpostin lähetyksessä",
|
||||
"personal-information": "Henkilötiedot",
|
||||
@@ -1222,7 +1246,7 @@
|
||||
"require-all-tools": "Vaadi Kaikki Työkalut",
|
||||
"cookbook-name": "Keittokirjan Nimi",
|
||||
"cookbook-with-name": "Keittokirja {0}",
|
||||
"create-a-cookbook": "Create a Cookbook",
|
||||
"cookbook": "Cookbook"
|
||||
"create-a-cookbook": "Luo keittokirja",
|
||||
"cookbook": "Keittokirja"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"download-log": "Télécharger les logs",
|
||||
"download-recipe-json": "Dernier JSON récupéré",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Lignes de log",
|
||||
"log-lines": "Lignes du journal",
|
||||
"not-demo": "Non démo",
|
||||
"portfolio": "Portfolio",
|
||||
"production": "Production",
|
||||
@@ -50,7 +50,7 @@
|
||||
"category": "Catégorie"
|
||||
},
|
||||
"events": {
|
||||
"apprise-url": "URL apprise",
|
||||
"apprise-url": "URL Apprise",
|
||||
"database": "Base de données",
|
||||
"delete-event": "Supprimer l'événement",
|
||||
"event-delete-confirmation": "Voulez-vous vraiment supprimer cet évènement ?",
|
||||
@@ -64,15 +64,16 @@
|
||||
"something-went-wrong": "Une erreur s'est produite!",
|
||||
"subscribed-events": "Évènements suivis",
|
||||
"test-message-sent": "Message de test envoyé",
|
||||
"message-sent": "Message envoyé",
|
||||
"new-notification": "Nouvelle notification",
|
||||
"event-notifiers": "Notifications d'événements",
|
||||
"apprise-url-skipped-if-blank": "URL Apprise (ignoré si vide)",
|
||||
"enable-notifier": "Activer la notification",
|
||||
"what-events": "À quels événements cette notification doit-elle s'abonner ?",
|
||||
"user-events": "Evénements utilisateur",
|
||||
"mealplan-events": "Évènements du menu",
|
||||
"user-events": "Événements de l'utilisateur",
|
||||
"mealplan-events": "Événements du menu",
|
||||
"when-a-user-in-your-group-creates-a-new-mealplan": "Lorsqu'un utilisateur de votre groupe crée un nouveau menu",
|
||||
"shopping-list-events": "Événements de la liste de courses",
|
||||
"shopping-list-events": "Événements de la liste d'épicerie",
|
||||
"cookbook-events": "Événements du livre de recettes",
|
||||
"tag-events": "Événements des mots-clés",
|
||||
"category-events": "Événements de catégories",
|
||||
@@ -147,8 +148,8 @@
|
||||
"show-all": "Tout afficher",
|
||||
"shuffle": "Mélanger",
|
||||
"sort": "Trier",
|
||||
"sort-ascending": "Tri croissant",
|
||||
"sort-descending": "Tri décroissant",
|
||||
"sort-ascending": "Trier par ordre croissant",
|
||||
"sort-descending": "Trier par ordre décroissant",
|
||||
"sort-alphabetically": "Alphabétique",
|
||||
"status": "Statut",
|
||||
"subject": "Sujet",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Tester",
|
||||
"themes": "Thèmes",
|
||||
"thursday": "Jeudi",
|
||||
"title": "Titre",
|
||||
"token": "Jeton",
|
||||
"tuesday": "Mardi",
|
||||
"type": "Type",
|
||||
@@ -203,11 +205,12 @@
|
||||
"selected-count": "Sélectionné : {count}",
|
||||
"export-all": "Exporter tout",
|
||||
"refresh": "Actualiser",
|
||||
"upload-file": "Transférer un fichier",
|
||||
"upload-file": "Téléverser un fichier",
|
||||
"created-on-date": "Créé le {0}",
|
||||
"unsaved-changes": "Vous avez des modifications non enregistrées. Voulez-vous les enregistrer ? Ok pour enregistrer, annuler pour ignorer les modifications.",
|
||||
"clipboard-copy-failure": "Échec de la copie vers le presse-papiers.",
|
||||
"confirm-delete-generic-items": "Êtes-vous sûr de vouloir supprimer les éléments suivants ?"
|
||||
"confirm-delete-generic-items": "Êtes-vous sûr de vouloir supprimer les éléments suivants ?",
|
||||
"organizers": "Classification"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Êtes-vous certain de vouloir supprimer <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Ajouter une image",
|
||||
"screen-awake": "Garder l’écran allumé",
|
||||
"remove-image": "Supprimer l’image",
|
||||
"nextStep": "Étape suivante"
|
||||
"nextStep": "Étape suivante",
|
||||
"recipe-actions": "Actions de recette",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie utilise le traitement du langage naturel pour analyser et créer des unités et des aliments pour vos ingrédients de recettes. Cette fonctionnalité est expérimentale et peut ne pas toujours fonctionner comme prévu. Si vous préférez ne pas utiliser les résultats analysés, vous pouvez sélectionner « Annuler » et vos modifications ne seront pas enregistrées.",
|
||||
"ingredient-parser": "Analyseur d'ingrédients",
|
||||
"explanation": "Pour utiliser l'analyseur d'ingrédients, cliquez sur le bouton « Tout analyser » pour démarrer le processus. Une fois les ingrédients disponibles, vous pouvez vérifier qu'ils ont été analysés correctement. Le score de confiance du modèle est affiché à droite du titre de l'article. Ce score est une moyenne de tous les scores individuels et peut ne pas toujours être complètement exact.",
|
||||
"alerts-explainer": "Les alertes seront affichées si un produit ou unité correspondant est trouvé mais n'existe pas dans la base de données.",
|
||||
"select-parser": "Sélectionner l'analyseur",
|
||||
"natural-language-processor": "Traitement du Langage Naturel",
|
||||
"brute-parser": "Analyseur brut",
|
||||
"parse-all": "Tout analyser",
|
||||
"no-unit": "Pas d'unité",
|
||||
"missing-unit": "Créer une unité manquante : {unit}",
|
||||
"missing-food": "Créer un aliment manquant : {food}",
|
||||
"no-food": "Aucun aliment"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Recherche avancée",
|
||||
@@ -722,8 +740,8 @@
|
||||
"volumes-are-configured-correctly": "Les volumes sont configurés correctement.",
|
||||
"status-unknown-try-running-a-validation": "Statut inconnu. Essayez de lancer une validation.",
|
||||
"validate": "Valider",
|
||||
"email-configuration-status": "État de la configuration e-mail",
|
||||
"email-configured": "E-mail configuré",
|
||||
"email-configuration-status": "État de la configuration courriel",
|
||||
"email-configured": "Courriel configuré",
|
||||
"email-test-results": "Résultats des tests e-mail",
|
||||
"ready": "Prêt",
|
||||
"not-ready": "Pas prêt - Vérifier les variables d'environnement",
|
||||
@@ -896,9 +914,9 @@
|
||||
"enable-advanced-content": "Activer le contenu avancé",
|
||||
"enable-advanced-content-description": "Active les fonctionnalités avancées comme la mise à l'échelle des recettes, les clés API, les Webhooks, et la gestion des données. Ne vous inquiétez pas, vous pouvez toujours modifier cela plus tard",
|
||||
"favorite-recipes": "Recettes préférées",
|
||||
"email-or-username": "E-mail ou nom d'utilisateur",
|
||||
"email-or-username": "Courriel ou nom d'utilisateur",
|
||||
"remember-me": "Se souvenir de moi",
|
||||
"please-enter-your-email-and-password": "Veuillez saisir votre e-mail et votre mot de passe",
|
||||
"please-enter-your-email-and-password": "Veuillez entrer votre adresse courriel et votre mot de passe",
|
||||
"invalid-credentials": "Identifiants invalides",
|
||||
"account-locked-please-try-again-later": "Compte verrouillé. Veuillez réessayer plus tard",
|
||||
"user-favorites": "Favoris utilisateur",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Supprimer les recettes",
|
||||
"source-unit-will-be-deleted": "L'unité source sera supprimée"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Données des actions de recette",
|
||||
"new-recipe-action": "Nouvelle action de recette",
|
||||
"edit-recipe-action": "Modifier l'action de recette",
|
||||
"action-type": "Type d'action"
|
||||
},
|
||||
"create-alias": "Créer un alias",
|
||||
"manage-aliases": "Gérer les alias",
|
||||
"seed-data": "Initialiser les données",
|
||||
@@ -1041,7 +1065,7 @@
|
||||
"validation": {
|
||||
"group-name-is-taken": "Le nom du groupe est déjà pris",
|
||||
"username-is-taken": "Nom d’utilisateur déjà utilisé",
|
||||
"email-is-taken": "Cet e-mail est déjà pris",
|
||||
"email-is-taken": "Cette adresse courriel est déjà prise",
|
||||
"this-field-is-required": "Ce champ est obligatoire"
|
||||
},
|
||||
"export": {
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Bienvenue, {0}",
|
||||
"welcome-user": "👋 Bienvenue, {0}!",
|
||||
"description": "Gérez votre profil, les recettes et les paramètres de groupe.",
|
||||
"get-invite-link": "Obtenir un lien d'invitation",
|
||||
"get-public-link": "Voir le lien public",
|
||||
"account-summary": "Aperçu du compte",
|
||||
"account-summary-description": "Voici un résumé des informations de votre groupe",
|
||||
"account-summary-description": "Voici un résumé des informations de votre groupe.",
|
||||
"group-statistics": "Statistiques du groupe",
|
||||
"group-statistics-description": "Les statistiques de votre groupe vous donnent un aperçu de la façon dont vous utilisez Mealie.",
|
||||
"storage-capacity": "Capacité de stockage",
|
||||
"storage-capacity-description": "Votre capacité de stockage est un calcul des images et des ressources que vous avez téléchargées.",
|
||||
"personal": "Personnel",
|
||||
"personal-description": "Ici se trouvent des paramètres qui vous sont propres personnellement. Toute modification n'affectera pas les autres utilisateurs.",
|
||||
"personal-description": "Il s'agit de paramètres qui vous sont personnels. Les modifications ici n'affecteront pas les autres utilisateurs.",
|
||||
"user-settings": "Paramètres utilisateur",
|
||||
"user-settings-description": "Gérez vos préférences, changez votre mot de passe et mettez à jour votre adresse e-mail",
|
||||
"api-tokens-description": "Gérez vos jetons API pour un accès à partir d'applications externes",
|
||||
"user-settings-description": "Gérez vos préférences, changez votre mot de passe et mettez à jour votre adresse courriel.",
|
||||
"api-tokens-description": "Gérez vos jetons d'API pour accéder à partir d'applications externes.",
|
||||
"group-description": "Ces éléments sont partagés au sein de votre groupe. Un changement impactera l'ensemble du groupe !",
|
||||
"group-settings": "Paramètres de groupe",
|
||||
"group-settings-description": "Gérez vos paramètres de groupe habituels tels que le menu de la semaine et les paramètres de confidentialité.",
|
||||
@@ -1190,13 +1214,13 @@
|
||||
"members-description": "Voyez qui est dans votre groupe et gérez leurs autorisations.",
|
||||
"webhooks-description": "Configurez les webhooks qui se déclenchent les jours où il y a un plan au menu.",
|
||||
"notifiers": "Notifications",
|
||||
"notifiers-description": "Configurer les e-mails et les notifications push qui se déclenchent sur des événements spécifiques.",
|
||||
"notifiers-description": "Configurer les courriels et les notifications push qui se déclenchent sur des événements spécifiques.",
|
||||
"manage-data": "Gérer les données",
|
||||
"manage-data-description": "Gérer vos Aliments et Unités (plus d'options seront bientôt disponibles)",
|
||||
"manage-data-description": "Gérez vos données Mealie, Aliments, Unités, Catégories, Tags et plus.",
|
||||
"data-migrations": "Migration des données",
|
||||
"data-migrations-description": "Migrez vos données existantes à partir d'autres applications comme Nextcloud Cookbook et Chowdown",
|
||||
"email-sent": "E-mail envoyé",
|
||||
"error-sending-email": "Erreur lors de l'envoi de l'email",
|
||||
"data-migrations-description": "Migrez vos données existantes à partir d'autres applications comme Nextcloud Cookbook et Chowdown.",
|
||||
"email-sent": "Courriel envoyé",
|
||||
"error-sending-email": "Erreur lors de l'envoi du courriel",
|
||||
"personal-information": "Informations personnelles",
|
||||
"preferences": "Préférences",
|
||||
"show-advanced-description": "Afficher les fonctionnalités avancées (clés API, Webhooks, et gestion des données)",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Une erreur s’est produite !",
|
||||
"subscribed-events": "Évènements suivis",
|
||||
"test-message-sent": "Message de test envoyé",
|
||||
"message-sent": "Message envoyé",
|
||||
"new-notification": "Nouvelle notification",
|
||||
"event-notifiers": "Notifications d'événements",
|
||||
"apprise-url-skipped-if-blank": "URL Apprise (ignoré si vide)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Tester",
|
||||
"themes": "Thèmes",
|
||||
"thursday": "Jeudi",
|
||||
"title": "Titre",
|
||||
"token": "Jeton",
|
||||
"tuesday": "Mardi",
|
||||
"type": "Type",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Créé le {0}",
|
||||
"unsaved-changes": "Vous avez des modifications non enregistrées. Voulez-vous enregistrer avant de partir ? OK pour enregistrer, Annuler pour ignorer les modifications.",
|
||||
"clipboard-copy-failure": "Échec de la copie dans le presse-papiers.",
|
||||
"confirm-delete-generic-items": "Êtes-vous sûr de vouloir supprimer les éléments suivants ?"
|
||||
"confirm-delete-generic-items": "Êtes-vous sûr de vouloir supprimer les éléments suivants ?",
|
||||
"organizers": "Classification"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Voulez-vous vraiment supprimer <b>{groupName}<b/> ?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Envoyer une image",
|
||||
"screen-awake": "Garder l’écran allumé",
|
||||
"remove-image": "Supprimer l’image",
|
||||
"nextStep": "Étape suivante"
|
||||
"nextStep": "Étape suivante",
|
||||
"recipe-actions": "Actions de recette",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie utilise le traitement du langage naturel pour analyser et créer des unités et des aliments pour vos ingrédients de recettes. Cette fonctionnalité est expérimentale et peut ne pas toujours fonctionner comme prévu. Si vous préférez ne pas utiliser les résultats analysés, vous pouvez sélectionner « Annuler » et vos modifications ne seront pas enregistrées.",
|
||||
"ingredient-parser": "Analyseur d'ingrédients",
|
||||
"explanation": "Pour utiliser l'analyseur d'ingrédients, cliquez sur le bouton « Tout analyser » pour démarrer le processus. Une fois les ingrédients disponibles, vous pouvez vérifier qu'ils ont été analysés correctement. Le score de confiance du modèle est affiché à droite du titre de l'article. Ce score est une moyenne de tous les scores individuels et peut ne pas toujours être complètement exact.",
|
||||
"alerts-explainer": "Les alertes seront affichées si un produit ou unité correspondant est trouvé mais n'existe pas dans la base de données.",
|
||||
"select-parser": "Sélectionner l'analyseur",
|
||||
"natural-language-processor": "Traitement du Langage Naturel",
|
||||
"brute-parser": "Analyseur brut",
|
||||
"parse-all": "Tout analyser",
|
||||
"no-unit": "Pas d'unité",
|
||||
"missing-unit": "Créer une unité manquante : {unit}",
|
||||
"missing-food": "Créer un aliment manquant : {food}",
|
||||
"no-food": "Aucun aliment"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Recherche avancée",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Supprimer les recettes",
|
||||
"source-unit-will-be-deleted": "L'unité source sera supprimée"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Données des actions de recette",
|
||||
"new-recipe-action": "Nouvelle action de recette",
|
||||
"edit-recipe-action": "Modifier l'action de recette",
|
||||
"action-type": "Type d'action"
|
||||
},
|
||||
"create-alias": "Créer un alias",
|
||||
"manage-aliases": "Gérer les alias",
|
||||
"seed-data": "Initialiser les données",
|
||||
@@ -1167,12 +1191,12 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Bienvenue, {0}",
|
||||
"welcome-user": "👋 Bienvenue, {0} !",
|
||||
"description": "Gérez votre profil, les recettes et les paramètres de groupe.",
|
||||
"get-invite-link": "Obtenir un lien d'invitation",
|
||||
"get-public-link": "Voir le lien public",
|
||||
"account-summary": "Aperçu du compte",
|
||||
"account-summary-description": "Voici un résumé des informations de votre groupe",
|
||||
"account-summary-description": "Voici un résumé des informations de votre groupe.",
|
||||
"group-statistics": "Statistiques du groupe",
|
||||
"group-statistics-description": "Les statistiques de votre groupe vous donnent un aperçu de la façon dont vous utilisez Mealie.",
|
||||
"storage-capacity": "Capacité de stockage",
|
||||
@@ -1180,8 +1204,8 @@
|
||||
"personal": "Personnel",
|
||||
"personal-description": "Ici se trouvent des paramètres qui vous sont propres personnellement. Toute modification n'affectera pas les autres utilisateurs.",
|
||||
"user-settings": "Paramètres utilisateur",
|
||||
"user-settings-description": "Gérez vos préférences, changez votre mot de passe et mettez à jour votre adresse e-mail",
|
||||
"api-tokens-description": "Gérez vos jetons API pour un accès à partir d'applications externes",
|
||||
"user-settings-description": "Gérez vos préférences, changez votre mot de passe et mettez à jour votre adresse e-mail.",
|
||||
"api-tokens-description": "Gérez vos jetons API pour un accès à partir d'applications externes.",
|
||||
"group-description": "Ces éléments sont partagés au sein de votre groupe. Un changement impactera l'ensemble du groupe !",
|
||||
"group-settings": "Paramètres de groupe",
|
||||
"group-settings-description": "Gérez vos paramètres de groupe habituels tels que le menu de la semaine et les paramètres de confidentialité.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifications",
|
||||
"notifiers-description": "Configurer les e-mails et les notifications push qui se déclenchent sur des événements spécifiques.",
|
||||
"manage-data": "Gérer les données",
|
||||
"manage-data-description": "Gérer vos Aliments et Unités (plus d'options seront bientôt disponibles)",
|
||||
"manage-data-description": "Gérez vos données Mealie, Aliments, Unités, Catégories, Tags et plus.",
|
||||
"data-migrations": "Migration des données",
|
||||
"data-migrations-description": "Migrez vos données existantes à partir d'autres applications comme Nextcloud Cookbook et Chowdown",
|
||||
"data-migrations-description": "Migrez vos données existantes à partir d'autres applications comme Nextcloud Cookbook et Chowdown.",
|
||||
"email-sent": "E-mail envoyé",
|
||||
"error-sending-email": "Erreur lors de l'envoi de l'email",
|
||||
"personal-information": "Informations personnelles",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Something Went Wrong!",
|
||||
"subscribed-events": "Subscribed Events",
|
||||
"test-message-sent": "Test Message Sent",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "New Notification",
|
||||
"event-notifiers": "Event Notifiers",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Probar",
|
||||
"themes": "Temas",
|
||||
"thursday": "Xoves",
|
||||
"title": "Title",
|
||||
"token": "Identificador",
|
||||
"tuesday": "Martes",
|
||||
"type": "Tipo",
|
||||
@@ -207,7 +209,8 @@
|
||||
"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.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Upload image",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Advanced Search",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"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-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"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)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "משהו השתבש!",
|
||||
"subscribed-events": "אירועים שנרשמת אליהם",
|
||||
"test-message-sent": "הודעת בדיקה נשלחה",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "התראה חדשה",
|
||||
"event-notifiers": "אירועי נוטיפיקציות",
|
||||
"apprise-url-skipped-if-blank": "כתובת Apprise (דלג אם ריק)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "ניסיון",
|
||||
"themes": "ערכות נושא",
|
||||
"thursday": "חמישי",
|
||||
"title": "Title",
|
||||
"token": "טוקן",
|
||||
"tuesday": "שלישי",
|
||||
"type": "סוג",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "נוצר ב-{0}",
|
||||
"unsaved-changes": "יש שינויים שלא נשמרו. לצאת לפני שמירה? אשר לשמירה, בטל למחיקת שינויים.",
|
||||
"clipboard-copy-failure": "כשלון בהעתקה ללוח ההדבקה.",
|
||||
"confirm-delete-generic-items": "האם אתה בטוח שברצונך למחוק את הפריטים הנבחרים?"
|
||||
"confirm-delete-generic-items": "האם אתה בטוח שברצונך למחוק את הפריטים הנבחרים?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "האם את/ה בטוח/ה שברצונך למחוק את <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "העלה תמונה",
|
||||
"screen-awake": "השאר את המסך פעיל",
|
||||
"remove-image": "האם למחוק את התמונה?",
|
||||
"nextStep": "השלב הבא"
|
||||
"nextStep": "השלב הבא",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "חיפוש מתקדם",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "מחיקת מתכונים",
|
||||
"source-unit-will-be-deleted": "יחידת המקור תמחק"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "יצירת שם נרדף",
|
||||
"manage-aliases": "נהל שמות נרדפים",
|
||||
"seed-data": "אכלס נתונים",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 שלום, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "ניהול פרופיל, מתכונים והגדרות קבוצה.",
|
||||
"get-invite-link": "קבלת קישור להזמנה",
|
||||
"get-public-link": "כתובת פומבית",
|
||||
"account-summary": "פירוט משתמש",
|
||||
"account-summary-description": "סיכום המידע של הקבוצות שלך",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "נתונים סטטיסטיים של קבוצה",
|
||||
"group-statistics-description": "סטטיסטיקות על הקבוצה שלך.",
|
||||
"storage-capacity": "מקום אחסון",
|
||||
"storage-capacity-description": "מקום האחסון מחושב ע\"י סיכום התמונות והקבצים שהעלת.",
|
||||
"personal": "אישי",
|
||||
"personal-description": "הגדרות אישיות",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "הגדרות משתמש",
|
||||
"user-settings-description": "העדפות, שינוי סיסמא, שינוי email",
|
||||
"api-tokens-description": "נהל את ה API tokens עבור תכונות חיצוניות",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "פריטים אלו שותפו עם קבוצתך. עריכתם תבצע שינוי עבור כל הקבוצה!",
|
||||
"group-settings": "הגדרות קבוצה",
|
||||
"group-settings-description": "נהל את הגדרות הקבוצה כמו תוכנית ארוחות והגדרות פרטיות.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "מתריעים",
|
||||
"notifiers-description": "הגדרת הודעות דואל והודעות בדחיפה אשר יופעלו עם אירועים ספציפיים.",
|
||||
"manage-data": "נהל נתונים",
|
||||
"manage-data-description": "נהל את המאכלים ויחידות המדידה (אפשרויות נוספות יגיעו בקרוב)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "ניוד נתונים",
|
||||
"data-migrations-description": "העבר לתוך מילי מידע קיים מאפליקציות אחרות כמו Nextcloud Recipes ו- Chowdown",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "דוא\"ל נשלח",
|
||||
"error-sending-email": "שגיאה בשליחת דוא\"ל",
|
||||
"personal-information": "פרטים אישיים",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Nešto nije bilo u redu!",
|
||||
"subscribed-events": "Pretplaćeni Događaji",
|
||||
"test-message-sent": "Testna Poruka je Poslana",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Nova Obavijest",
|
||||
"event-notifiers": "Obavještavatelji Događaja",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (preskočeno ako je prazno)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Test",
|
||||
"themes": "Teme",
|
||||
"thursday": "Četvrtak",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Utorak",
|
||||
"type": "Tip",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Kreirano dana: {0}",
|
||||
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Jeste li sigurni da želite izbrisati <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Učitavanje Slike",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Napredno Pretraživanje",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Obriši Recepte",
|
||||
"source-unit-will-be-deleted": "Izvorna jedinica će biti izbrisana"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Unesi Podatke",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Dobrodošli, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Upravljajte svojim profilom, receptima i postavkama grupa.",
|
||||
"get-invite-link": "Zatražite Poveznicu Pozivnice",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Zbirni Prikaz Računa",
|
||||
"account-summary-description": "Evo sažetka informacija o vašoj grupi",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Statistika Grupe",
|
||||
"group-statistics-description": "Statistika vaše grupe pruža uvid u to kako koristite Mealie.",
|
||||
"storage-capacity": "Prostor za Pohranu",
|
||||
"storage-capacity-description": "Vaša kapacitet za pohranu je izračun temeljen na slikama i resursima koje ste prenijeli.",
|
||||
"personal": "Osobno",
|
||||
"personal-description": "Ovo su postavke koje su osobne samo za vas. Promjene ovdje neće utjecati na druge korisnike",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "Korisničke Postavke",
|
||||
"user-settings-description": "Upravljajte svojim postavkama, promijenite lozinku i ažurirajte svoju e-poštu",
|
||||
"api-tokens-description": "Upravljajte svojim API tokenima za pristup izvanjskim aplikacijama",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "Ovi predmeti su zajednički unutar vaše grupe. Uređivanje jednog od njih promijenit će ga za cijelu grupu!",
|
||||
"group-settings": "Postavke grupe",
|
||||
"group-settings-description": "Upravljajte zajedničkim postavkama grupe kao što su postavke plana obroka i privatnosti.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Obavještavači (Notifiers)",
|
||||
"notifiers-description": "Postavi obavijesti putem e-pošte i push obavijesti koje se aktiviraju na određene događaje.",
|
||||
"manage-data": "Upravljaj podacima",
|
||||
"manage-data-description": "Upravljajte hranom i jedinicama mjere (uskoro će biti dostupno više opcija)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Migracija podataka",
|
||||
"data-migrations-description": "Migrirajte postojeće podatke iz drugih aplikacija poput Nextcloud Recipes i Chowdown",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "E-pošta poslana",
|
||||
"error-sending-email": "Pogreška pri slanju e-maila",
|
||||
"personal-information": "Osobne informacije",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Hiba történt!",
|
||||
"subscribed-events": "Feliratkozott események",
|
||||
"test-message-sent": "Teszt üzenet elküldve",
|
||||
"message-sent": "Üzenet elküldve",
|
||||
"new-notification": "Új értesítés",
|
||||
"event-notifiers": "Esemény értesítők",
|
||||
"apprise-url-skipped-if-blank": "Értesítendő URL (kihagy, ha üres)",
|
||||
@@ -85,7 +86,7 @@
|
||||
"clear": "Törlés",
|
||||
"close": "Bezár",
|
||||
"confirm": "Megerősítés",
|
||||
"confirm-how-does-everything-look": "How does everything look?",
|
||||
"confirm-how-does-everything-look": "Hogy néz ki?",
|
||||
"confirm-delete-generic": "Biztosan törölni szeretnéd ezt?",
|
||||
"copied_message": "Másolva!",
|
||||
"create": "Létrehozás",
|
||||
@@ -144,22 +145,23 @@
|
||||
"save": "Mentés",
|
||||
"settings": "Beállítások",
|
||||
"share": "Megosztás",
|
||||
"show-all": "Show All",
|
||||
"show-all": "Mutasd az összeset",
|
||||
"shuffle": "Véletlenszerű",
|
||||
"sort": "Rendezés",
|
||||
"sort-ascending": "Sort Ascending",
|
||||
"sort-descending": "Sort Descending",
|
||||
"sort-ascending": "Rendezés növekvő sorrendben",
|
||||
"sort-descending": "Rendezés csökkenő sorrendben",
|
||||
"sort-alphabetically": "Betűrendben",
|
||||
"status": "Állapot",
|
||||
"subject": "Tárgy",
|
||||
"submit": "Küldés",
|
||||
"success-count": "Sikeres: {count}",
|
||||
"sunday": "Vasárnap",
|
||||
"system": "System",
|
||||
"system": "Rendszer",
|
||||
"templates": "Sablonok:",
|
||||
"test": "Teszt",
|
||||
"themes": "Témák",
|
||||
"thursday": "Csütörtök",
|
||||
"title": "Cím",
|
||||
"token": "Token",
|
||||
"tuesday": "Kedd",
|
||||
"type": "Típus",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Létrehozva: {0}",
|
||||
"unsaved-changes": "El nem mentett módosításai vannak. Szeretné elmenteni, mielőtt kilép? A mentéshez kattintson az Ok, a módosítások elvetéséhez a Mégsem gombra.",
|
||||
"clipboard-copy-failure": "Nem sikerült a vágólapra másolás.",
|
||||
"confirm-delete-generic-items": "Biztos benne, hogy törölni szeretné az alábbi tételeket?"
|
||||
"confirm-delete-generic-items": "Biztos benne, hogy törölni szeretné az alábbi tételeket?",
|
||||
"organizers": "Rendszerezők"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Biztosan törölni szeretnéd ezt: <b>{groupName}<b/>?",
|
||||
@@ -243,8 +246,8 @@
|
||||
"group-preferences": "Csoport beállítások",
|
||||
"private-group": "Privát csoport",
|
||||
"private-group-description": "Ha a csoportot privátra állítja, az összes nyilvános nézeti beállítás alapértelmezettre lesz állítva. Ez felülírja az egyes receptek nyilvános nézet beállításait.",
|
||||
"enable-public-access": "Enable Public Access",
|
||||
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
|
||||
"enable-public-access": "Nyilvános hozzáférés engedélyezése",
|
||||
"enable-public-access-description": "Legyenek a csoport receptek alapértelmezetten publikusak és engedélyezze a látogatóknak a megtekintést belépés nélkül",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes": "Engedélyezze a csoporton kívüli felhasználók számára a receptek megtekintését",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Ha engedélyezve van, nyilvános megosztási hivatkozással megoszthat adott recepteket a felhasználó felhatalmazása nélkül. Ha le van tiltva, csak olyan felhasználókkal oszthat meg recepteket, akik a csoportjába tartoznak, vagy egy előre generált privát linkkel",
|
||||
"show-nutrition-information": "Táplálkozási információk megjelenítése",
|
||||
@@ -358,11 +361,11 @@
|
||||
},
|
||||
"recipe-data-migrations": "Receptadatok migrációja",
|
||||
"recipe-data-migrations-explanation": "A receptek átemelhetők más támogatott alkalmazásból Mealie-be. Ez egy remek módja a Mealie használatának elkezdésére.",
|
||||
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
|
||||
"coming-from-another-application-or-an-even-older-version-of-mealie": "A Mealie egy másik verzióját használtad vagy valami teljesen más applikációt? Nézd meg az adat importálási lehetőségeinket.",
|
||||
"choose-migration-type": "Válassza ki a migrációs típusát",
|
||||
"tag-all-recipes": "Az összes recept címkézése a {tag-name} címkével",
|
||||
"nextcloud-text": "A Nextcloud-receptek importálhatók a Nextcloudban tárolt adatokat tartalmazó zip-fájlból. Tekintse meg az alábbi példamappaszerkezetet, hogy receptjei biztosan importálhatók legyenek.",
|
||||
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
|
||||
"chowdown-text": "Mealie natívan támogatja a chowdown repository formátumot. Töltse le a kódtárat .zip fájlként, és töltse fel alább.",
|
||||
"recipe-1": "Recept 1",
|
||||
"recipe-2": "Recept 2",
|
||||
"paprika-text": "Mealie képes recepteket importálni a Paprika alkalmazásból. Exportálja a receptjeit a Paprikából, nevezze át az export kiterjesztést .zip-re, és töltse fel alább.",
|
||||
@@ -372,8 +375,8 @@
|
||||
"description-long": "Mealie képes recepteket importálni a Plan to Eat alkalmazásból."
|
||||
},
|
||||
"myrecipebox": {
|
||||
"title": "My Recipe Box",
|
||||
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
|
||||
"title": "Az én receptes dobozom",
|
||||
"description-long": "A Mealie képest recepteket importálni az Én Receptes Dobozomból. Exportáld a receptjeidet CSV formátúmba, aztán töltsd fel a .csv fájlt lentebb."
|
||||
}
|
||||
},
|
||||
"new-recipe": {
|
||||
@@ -508,8 +511,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",
|
||||
"move-to-bottom": "Ugrás az aljára",
|
||||
"move-to-top": "Ugrás a tetejére",
|
||||
"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",
|
||||
@@ -525,7 +528,7 @@
|
||||
"edit-timeline-event": "Idővonal-esemény szerkesztése",
|
||||
"timeline": "Idővonal",
|
||||
"timeline-is-empty": "Az idővonalon még semmi sincs. Próbálja meg elkészíteni ezt a receptet!",
|
||||
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
|
||||
"timeline-no-events-found-try-adjusting-filters": "Nem találtunk eseményeket. Próbáld meg átállítani a keresési szűrőket.",
|
||||
"group-global-timeline": "{groupName} Globális idővonal",
|
||||
"open-timeline": "Idővonal megnyitása",
|
||||
"made-this": "Elkészítettem ezt",
|
||||
@@ -546,8 +549,8 @@
|
||||
"looking-for-migrations": "Migrációt keres?",
|
||||
"import-with-url": "Importálás URL-címről",
|
||||
"create-recipe": "Recept létrehozása",
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"create-recipe-description": "Adj hozzá egy új receptet a nulláról kezdve.",
|
||||
"create-recipes": "Receptek létrehozása",
|
||||
"import-with-zip": "Importálás .zip formátummal",
|
||||
"create-recipe-from-an-image": "Recept létrehozása fotóról",
|
||||
"bulk-url-import": "Tömeges URL importálás",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Kép feltöltése",
|
||||
"screen-awake": "Képernyő ébren tartása",
|
||||
"remove-image": "Kép etávolítása",
|
||||
"nextStep": "Következő lépés"
|
||||
"nextStep": "Következő lépés",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "A Mealie természetes nyelvi feldolgozást használ a recept összetevőinek elemzésére, az egységek és az élelmiszerelemek létrehozására. Ez a funkció kísérleti jellegű, és előfordulhat, hogy nem mindig működik az elvárt módon. Ha nem szeretné használni az elemzett eredményeket, válassza a 'Mégse' lehetőséget, és a módosítások nem kerülnek mentésre.",
|
||||
"ingredient-parser": "Hozzávaló elemző",
|
||||
"explanation": "A hozzávalók elemzőjének használatához kattintson a 'Parse All' gombra a folyamat elindításához. Amint a feldolgozott hozzávalók elérhetővé válnak, áttekintheti az elemeket, és ellenőrizheti, hogy azok helyesen lettek-e elemezve. A modell megbízhatósági pontszáma az elem címének jobb oldalán jelenik meg. Ez a pontszám az összes egyéni pontszám átlaga, és nem biztos, hogy mindig teljesen pontos.",
|
||||
"alerts-explainer": "Figyelmeztetések jelennek meg, ha talál egy megfelelő élelmiszert vagy egységet, de az nem létezik az adatbázisban.",
|
||||
"select-parser": "Válasszon elemzőt",
|
||||
"natural-language-processor": "Természetes nyelvi feldolgozó",
|
||||
"brute-parser": "Brute elemző",
|
||||
"parse-all": "Összes elemzése",
|
||||
"no-unit": "Mértékegység nélkül",
|
||||
"missing-unit": "Hiányzó mértékegység létrehozása: {unit}",
|
||||
"missing-food": "Hiányzó élelmiszer létrehozása: {food}",
|
||||
"no-food": "Élelmiszer nélküli"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Részletes keresés",
|
||||
@@ -618,7 +636,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": "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.",
|
||||
"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.",
|
||||
"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.",
|
||||
@@ -744,9 +762,9 @@
|
||||
"ldap-ready-success-text": "A szükséges LDAP-változók mind beállítva.",
|
||||
"build": "Build",
|
||||
"recipe-scraper-version": "Receptkinyerő verziója",
|
||||
"oidc-ready": "OIDC Ready",
|
||||
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
|
||||
"oidc-ready-success-text": "Required OIDC variables are all set."
|
||||
"oidc-ready": "OIDC készen áll",
|
||||
"oidc-ready-error-text": "Nem minden OIDC érték van beállítva. Ezt figyelmen kívül lehet hagyni ha nem használ OIDC hitelesítést.",
|
||||
"oidc-ready-success-text": "A szükséges OIDC változók mind beállítva."
|
||||
},
|
||||
"shopping-list": {
|
||||
"all-lists": "Összes lista",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Receptek törlése",
|
||||
"source-unit-will-be-deleted": "A forrás mennyiségi egység törlésre kerül"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Alias készítése",
|
||||
"manage-aliases": "Alias kezelése",
|
||||
"seed-data": "Kezdőérték adat",
|
||||
@@ -1157,31 +1181,31 @@
|
||||
"tasks": "Feladatok",
|
||||
"setup": {
|
||||
"first-time-setup": "Első beállítás",
|
||||
"welcome-to-mealie-get-started": "Welcome to Mealie! Let's get started",
|
||||
"already-set-up-bring-to-homepage": "I'm already set up, just bring me to the homepage",
|
||||
"common-settings-for-new-sites": "Here are some common settings for new sites",
|
||||
"welcome-to-mealie-get-started": "Üdvözöl a Mealie! Vágjunk bele",
|
||||
"already-set-up-bring-to-homepage": "Már kész is vagyok, vigyél az új kezdőoldalamra",
|
||||
"common-settings-for-new-sites": "Itt van egy pár alap beállítás az új oldaladhoz",
|
||||
"setup-complete": "Beállítás kész!",
|
||||
"here-are-a-few-things-to-help-you-get-started": "Here are a few things to help you get started with Mealie",
|
||||
"restore-from-v1-backup": "Have a backup from a previous instance of Mealie v1? You can restore it here.",
|
||||
"manage-profile-or-get-invite-link": "Manage your own profile, or grab an invite link to share with others."
|
||||
"here-are-a-few-things-to-help-you-get-started": "Itt van egy pár dolog ami segíthet a kezdésben a Mealie-vel",
|
||||
"restore-from-v1-backup": "Van egy korábbi Mealie v1 biztonsági másolatod? Itt visszaállíthatod.",
|
||||
"manage-profile-or-get-invite-link": "Alakítsa a profilját vagy szerezze meg a meghívó link-jét hogy megoszthassa másokkal."
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Üdvözöljük, {0}",
|
||||
"welcome-user": "👋 Üdvözöljük, {0}!",
|
||||
"description": "Profiljának, receptjeinek és csoportbeállításainak kezelése.",
|
||||
"get-invite-link": "Meghívó link beszerzése",
|
||||
"get-public-link": "Nyilvánon link beszerzése",
|
||||
"account-summary": "Fiók áttekintése",
|
||||
"account-summary-description": "Itt egy áttekintés a csoportja információiról",
|
||||
"account-summary-description": "Itt egy áttekintés a csoportja információiról.",
|
||||
"group-statistics": "Csoportstatisztikák",
|
||||
"group-statistics-description": "Az Ön csoportstatisztikái betekintést nyújtanak abba, hogyan használja a Mealie-t.",
|
||||
"storage-capacity": "Tárhely mérete",
|
||||
"storage-capacity-description": "A tárhely kapacitása az Ön által feltöltött képek és eszközök számításából adódik.",
|
||||
"personal": "Személyes",
|
||||
"personal-description": "Ezek a beállítások az Ön személyes beállításai. Az itt végzett változtatások nincsenek hatással más felhasználókra",
|
||||
"personal-description": "Ezek a beállítások az Ön személyes beállításai. Az itt végzett változtatások nincsenek hatással más felhasználókra.",
|
||||
"user-settings": "Felhasználói beállítások",
|
||||
"user-settings-description": "Beállításainak kezelése, jelszavának módosítása és e-mail címének frissítése",
|
||||
"api-tokens-description": "API tokenek kezelése külső alkalmazásokon keresztül történő hozzáféréshez",
|
||||
"user-settings-description": "Itt kezelheti beállításait, módosíthatja jelszavát és frissítheti e-mail címét.",
|
||||
"api-tokens-description": "API kulcsok kezelése külső alkalmazásokból.",
|
||||
"group-description": "Ezek az elemek a csoporton belül megosztottak. Az egyik szerkesztése az egész csoport számára megváltoztatja azt!",
|
||||
"group-settings": "Csoport beállításai",
|
||||
"group-settings-description": "Közös csoportbeállítások, például menüterv és adatvédelmi beállítások kezelése.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Értesítések",
|
||||
"notifiers-description": "Állítson be olyan e-mail és push-értesítéseket, amelyek meghatározott események esetén lépnek működésbe.",
|
||||
"manage-data": "Adatok kezelése",
|
||||
"manage-data-description": "Alapanyagainak és mennyiségi egységeinek kezelése (további opciók hamarosan)",
|
||||
"manage-data-description": "Az Ön Mealie adatainak kezelése: alapanyagok, mértékegységek, kategóriák, címkék, stb.",
|
||||
"data-migrations": "Adat migráció",
|
||||
"data-migrations-description": "Migrálja meglévő adatait más alkalmazásokból, például a Nextcloud Recipes és a Chowdown",
|
||||
"data-migrations-description": "Migrálja meglévő adatait más alkalmazásokból, például Nextcloud Recipes vagy Chowdown.",
|
||||
"email-sent": "E-mail elküldve",
|
||||
"error-sending-email": "Hiba történt az e-Mail küldésénél",
|
||||
"personal-information": "Személyes adatok",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Something Went Wrong!",
|
||||
"subscribed-events": "Subscribed Events",
|
||||
"test-message-sent": "Test Message Sent",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "New Notification",
|
||||
"event-notifiers": "Event Notifiers",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Test",
|
||||
"themes": "Themes",
|
||||
"thursday": "Thursday",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Tuesday",
|
||||
"type": "Type",
|
||||
@@ -207,7 +209,8 @@
|
||||
"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.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Upload image",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Advanced Search",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"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-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"notifiers-description": "Set up 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)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Si è verificato un errore!",
|
||||
"subscribed-events": "Eventi Sottoscritti",
|
||||
"test-message-sent": "Messaggio di prova inviato",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Nuova Notifica",
|
||||
"event-notifiers": "Notifiche Evento",
|
||||
"apprise-url-skipped-if-blank": "Url di Apprise (ignorato se vuoto)",
|
||||
@@ -85,7 +86,7 @@
|
||||
"clear": "Resetta",
|
||||
"close": "Chiudi",
|
||||
"confirm": "Conferma",
|
||||
"confirm-how-does-everything-look": "How does everything look?",
|
||||
"confirm-how-does-everything-look": "Come ti sembra tutto questo?",
|
||||
"confirm-delete-generic": "Sei sicuro di volere eliminare?",
|
||||
"copied_message": "Copiato!",
|
||||
"create": "Crea",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Test",
|
||||
"themes": "Temi",
|
||||
"thursday": "Giovedì",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Martedì",
|
||||
"type": "Tipo",
|
||||
@@ -174,7 +176,7 @@
|
||||
"units": "Unità",
|
||||
"back": "Indietro",
|
||||
"next": "Avanti",
|
||||
"start": "Start",
|
||||
"start": "Inizia",
|
||||
"toggle-view": "Cambia Vista",
|
||||
"date": "Data",
|
||||
"id": "Id",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Creato il: {0}",
|
||||
"unsaved-changes": "Sono state apportate modifiche non salvate. Salvare prima di uscire? Premi Ok per salvare, Annulla per scartare le modifiche.",
|
||||
"clipboard-copy-failure": "Impossibile copiare negli appunti.",
|
||||
"confirm-delete-generic-items": "Sei sicuro di voler eliminare i seguenti elementi?"
|
||||
"confirm-delete-generic-items": "Sei sicuro di voler eliminare i seguenti elementi?",
|
||||
"organizers": "Organizzatori"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Sei sicuro di volerlo eliminare <b>{groupName}<b/>'?",
|
||||
@@ -243,8 +246,8 @@
|
||||
"group-preferences": "Preferenze Gruppo",
|
||||
"private-group": "Gruppo Privato",
|
||||
"private-group-description": "Impostando il tuo gruppo su privato verranno ripristinate tutte le opzioni di visualizzazione pubblica. Questa opzione sovrascrive le impostazioni di visualizzazione pubblica della singola ricetta.",
|
||||
"enable-public-access": "Enable Public Access",
|
||||
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
|
||||
"enable-public-access": "Abilita accesso pubblico",
|
||||
"enable-public-access-description": "Rendi pubbliche le ricette di gruppo per impostazione predefinita, e consenti ai visitatori di visualizzare le ricette senza effettuare l'accesso",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes": "Consenti agli utenti al di fuori del tuo gruppo di vedere le tue ricette",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Se abilitato, è possibile utilizzare un link pubblico per condividere ricette specifiche senza autorizzare l'utente. Se disabilitato, puoi condividere ricette solo con gli utenti che sono nel tuo gruppo o con un link privato pre-generato",
|
||||
"show-nutrition-information": "Mostra informazioni nutrizionali",
|
||||
@@ -358,11 +361,11 @@
|
||||
},
|
||||
"recipe-data-migrations": "Migrazione Dati Ricetta",
|
||||
"recipe-data-migrations-explanation": "Le ricette possono essere migrate da un'altra applicazione supportata da Mealie. Questo è un ottimo modo per iniziare con Mealie.",
|
||||
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
|
||||
"coming-from-another-application-or-an-even-older-version-of-mealie": "Arrivi da un'altra applicazione o da una versione più vecchia di Mealie? Scopri le migrazioni e scopri se i tuoi dati possono essere importati.",
|
||||
"choose-migration-type": "Scegli Il Tipo Di Migrazione",
|
||||
"tag-all-recipes": "Etichetta tutte le ricette con {tag-name} etichetta",
|
||||
"nextcloud-text": "Le ricette di Nextcloud possono essere importate da un file zip che contiene i dati memorizzati in Nextcloud. Osserva la struttura della cartella di esempio qui sotto per assicurarti che le tue ricette siano in grado di essere importate.",
|
||||
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
|
||||
"chowdown-text": "Mealie supporta nativamente il formato del repository chowdown. Scarica il repository del codice come file .zip e caricalo qui sotto.",
|
||||
"recipe-1": "Ricetta 1",
|
||||
"recipe-2": "Ricetta 2",
|
||||
"paprika-text": "Mealie può importare ricette dall'applicazione Paprika. Esporta le tue ricette da paprika, rinomina l'estensione di esportazione in .zip e caricala qui sotto.",
|
||||
@@ -372,8 +375,8 @@
|
||||
"description-long": "Mealie può importare le ricette da Plan to Eat."
|
||||
},
|
||||
"myrecipebox": {
|
||||
"title": "My Recipe Box",
|
||||
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
|
||||
"title": "Il mio ricettario",
|
||||
"description-long": "Mealie può importare ricette da My Recipe Box. Esporta le tue ricette in formato HTML, quindi carica il .zip qui sotto."
|
||||
}
|
||||
},
|
||||
"new-recipe": {
|
||||
@@ -546,8 +549,8 @@
|
||||
"looking-for-migrations": "Stai Cercando Le Migrazioni?",
|
||||
"import-with-url": "Importa da URL",
|
||||
"create-recipe": "Crea Ricetta",
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"create-recipe-description": "Crea una nuova ricetta da zero.",
|
||||
"create-recipes": "Crea Ricette",
|
||||
"import-with-zip": "Importa da .zip",
|
||||
"create-recipe-from-an-image": "Crea ricetta da un'immagine",
|
||||
"bulk-url-import": "Importazione multipla URL",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Carica immagine",
|
||||
"screen-awake": "Mantieni lo schermo acceso",
|
||||
"remove-image": "Rimuovi immagine",
|
||||
"nextStep": "Passo successivo"
|
||||
"nextStep": "Passo successivo",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Ricerca Avanzata",
|
||||
@@ -744,9 +762,9 @@
|
||||
"ldap-ready-success-text": "Le variabili LDAP richieste sono tutte configurate.",
|
||||
"build": "Versione",
|
||||
"recipe-scraper-version": "Versione Recipe Scraper",
|
||||
"oidc-ready": "OIDC Ready",
|
||||
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
|
||||
"oidc-ready-success-text": "Required OIDC variables are all set."
|
||||
"oidc-ready": "Pronto per OIDC",
|
||||
"oidc-ready-error-text": "I valori OIDC non sono configurati. Questo può essere ignorato se non si utilizza Autenticazione OIDC.",
|
||||
"oidc-ready-success-text": "Le variabili OIDC richieste sono tutte impostate."
|
||||
},
|
||||
"shopping-list": {
|
||||
"all-lists": "Tutte le Liste",
|
||||
@@ -854,11 +872,11 @@
|
||||
"link-id": "Link ID",
|
||||
"link-name": "Link Nome",
|
||||
"login": "Login",
|
||||
"login-oidc": "Login with",
|
||||
"or": "or",
|
||||
"login-oidc": "Accedi con",
|
||||
"or": "oppure",
|
||||
"logout": "Logout",
|
||||
"manage-users": "Gestisci Utenti",
|
||||
"manage-users-description": "Create and manage users.",
|
||||
"manage-users-description": "Crea e gestisci gli utenti.",
|
||||
"new-password": "Nuova Password",
|
||||
"new-user": "Nuovo Utente",
|
||||
"password-has-been-reset-to-the-default-password": "La password è stata reimpostata a quella di default",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Elimina Ricette",
|
||||
"source-unit-will-be-deleted": "L'unità di origine verrà eliminata"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Crea Alias",
|
||||
"manage-aliases": "Gestisci Alias",
|
||||
"seed-data": "Dati Predefiniti",
|
||||
@@ -1156,32 +1180,32 @@
|
||||
"no-logs-found": "Nessun Log Trovato",
|
||||
"tasks": "Compiti",
|
||||
"setup": {
|
||||
"first-time-setup": "First Time Setup",
|
||||
"welcome-to-mealie-get-started": "Welcome to Mealie! Let's get started",
|
||||
"already-set-up-bring-to-homepage": "I'm already set up, just bring me to the homepage",
|
||||
"common-settings-for-new-sites": "Here are some common settings for new sites",
|
||||
"setup-complete": "Setup Complete!",
|
||||
"here-are-a-few-things-to-help-you-get-started": "Here are a few things to help you get started with Mealie",
|
||||
"restore-from-v1-backup": "Have a backup from a previous instance of Mealie v1? You can restore it here.",
|
||||
"manage-profile-or-get-invite-link": "Manage your own profile, or grab an invite link to share with others."
|
||||
"first-time-setup": "Configurazione iniziale",
|
||||
"welcome-to-mealie-get-started": "Un benvenuto su Mealie! Iniziamo",
|
||||
"already-set-up-bring-to-homepage": "Ho già configurato tutto, portami alla pagina iniziale",
|
||||
"common-settings-for-new-sites": "Ecco alcune impostazioni comuni per i nuovi siti",
|
||||
"setup-complete": "Configurazione completata!",
|
||||
"here-are-a-few-things-to-help-you-get-started": "Qui ci sono alcune cose per aiutarvi a iniziare con Mealie",
|
||||
"restore-from-v1-backup": "Hai un backup da un'istanza precedente di Mealie v1? Puoi ripristinarlo qui.",
|
||||
"manage-profile-or-get-invite-link": "Gestisci il tuo profilo, o parti da un link di invito per condividere con gli altri."
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Benvenuto, {0}",
|
||||
"welcome-user": "👋 Benvenutǝ, {0}!",
|
||||
"description": "Gestisci il tuo profilo, le ricette e le impostazioni di gruppo.",
|
||||
"get-invite-link": "Ottieni Link Di Invito",
|
||||
"get-public-link": "Ottieni link pubblico",
|
||||
"account-summary": "Riepilogo Account",
|
||||
"account-summary-description": "Ecco un riepilogo delle informazioni del tuo gruppo",
|
||||
"account-summary-description": "Ecco un riepilogo delle informazioni del tuo gruppo.",
|
||||
"group-statistics": "Statistiche Gruppo",
|
||||
"group-statistics-description": "Le statistiche di gruppo forniscono alcune informazioni su come stai usando Mealie.",
|
||||
"storage-capacity": "Capacità di Archiviazione",
|
||||
"storage-capacity-description": "La capacità di archiviazione è data dall'insieme delle immagini e delle risorse caricate.",
|
||||
"personal": "Personale",
|
||||
"personal-description": "Queste sono le tue impostazioni personali. Le modifiche non influenzeranno gli altri utenti",
|
||||
"personal-description": "Queste sono le tue impostazioni personali. Le modifiche non influenzeranno gli altri utenti.",
|
||||
"user-settings": "Impostazioni Utente",
|
||||
"user-settings-description": "Gestisci le tue preferenze, modifica la tua password e aggiorna la tua email",
|
||||
"api-tokens-description": "Gestisci i tuoi Token API per l'accesso da applicazioni esterne",
|
||||
"user-settings-description": "Gestisci le tue preferenze, modifica la tua password e aggiorna la tua email.",
|
||||
"api-tokens-description": "Gestisci i tuoi Token API per l'accesso da applicazioni esterne.",
|
||||
"group-description": "Questi elementi sono condivisi all'interno del tuo gruppo. Modificando uno di essi cambierà per l'intero gruppo!",
|
||||
"group-settings": "Impostazioni Gruppo",
|
||||
"group-settings-description": "Gestisci le impostazioni comuni del gruppo, come il piano alimentare e impostazioni di privacy.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiche",
|
||||
"notifiers-description": "Imposta email e notifiche push che si attivano per eventi specifici.",
|
||||
"manage-data": "Gestisci Dati",
|
||||
"manage-data-description": "Gestisci il tuoi Alimenti e le tue Unità (più opzioni in arrivo a breve)",
|
||||
"manage-data-description": "Gestisci i tuoi dati di Mealie; Alimenti, Unità, Categorie, Tag e altro ancora.",
|
||||
"data-migrations": "Migrazioni Dati",
|
||||
"data-migrations-description": "Migra i dati esistenti da altre applicazioni come Nextcloud Recipes e Chowdown",
|
||||
"data-migrations-description": "Migra i dati esistenti da altre applicazioni come Nextcloud Recipes e Chowdown.",
|
||||
"email-sent": "Email Inviata",
|
||||
"error-sending-email": "Errore Nell'Invio Email",
|
||||
"personal-information": "Informazioni Personali",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "問題が発生しました",
|
||||
"subscribed-events": "購読中のイベント",
|
||||
"test-message-sent": "テストメッセージを送信しました",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "新着通知",
|
||||
"event-notifiers": "イベント通知",
|
||||
"apprise-url-skipped-if-blank": "通知用URL (空欄の場合はスキップ)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "テスト",
|
||||
"themes": "テーマ",
|
||||
"thursday": "木曜日",
|
||||
"title": "Title",
|
||||
"token": "トークン",
|
||||
"tuesday": "火曜日",
|
||||
"type": "タイプ",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "作成日: {0}",
|
||||
"unsaved-changes": "保存されていない変更があります。移動する前に保存しますか?保存するには はい を、変更を破棄するにはキャンセルしてください。",
|
||||
"clipboard-copy-failure": "クリップボードにコピーできませんでした",
|
||||
"confirm-delete-generic-items": "次のアイテムを本当に削除しますか?"
|
||||
"confirm-delete-generic-items": "次のアイテムを本当に削除しますか?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "<b>{groupName}<b/> を削除しますか?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "画像をアップロード",
|
||||
"screen-awake": "画面をスリープ状態にしない",
|
||||
"remove-image": "画像を削除",
|
||||
"nextStep": "次のステップ"
|
||||
"nextStep": "次のステップ",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "詳細検索",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "レシピを削除",
|
||||
"source-unit-will-be-deleted": "元の単位が削除されます"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "エイリアスを作成",
|
||||
"manage-aliases": "エイリアスの管理",
|
||||
"seed-data": "シードデータ",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 ようこそ, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "プロフィール、レシピ、グループ設定を管理します。",
|
||||
"get-invite-link": "招待リンクを取得",
|
||||
"get-public-link": "公開リンクを取得",
|
||||
"account-summary": "アカウントの概要",
|
||||
"account-summary-description": "グループ情報の概要は次のとおりです",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "グループ統計",
|
||||
"group-statistics-description": "グループ統計によりMealieの使用状況がわかります。",
|
||||
"storage-capacity": "ストレージ容量",
|
||||
"storage-capacity-description": "ストレージ容量は、アップロードした画像とアセットの合計です。",
|
||||
"personal": "個人",
|
||||
"personal-description": "これらは個人的な設定です。ここでの変更は他のユーザーには影響しません",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "ユーザー設定",
|
||||
"user-settings-description": "設定の管理、パスワードの変更、メールアドレスの更新",
|
||||
"api-tokens-description": "外部アプリケーションからアクセスするためのAPIトークンを管理します",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "これらのアイテムはグループ内で共有されます。そのうちの 1 つを編集すると、グループ全体の内容が変更されます。",
|
||||
"group-settings": "グループ設定",
|
||||
"group-settings-description": "食事プランやプライバシー設定などの共通のグループ設定を管理します。",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "通知",
|
||||
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
|
||||
"manage-data": "データ管理",
|
||||
"manage-data-description": "食品と単位の管理(近日公開予定)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "データ移行",
|
||||
"data-migrations-description": "NextcloudレシピやChowdownなどの他のアプリケーションから既存のデータを移行します",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "メールが送信されました",
|
||||
"error-sending-email": "メール送信エラー",
|
||||
"personal-information": "個人情報",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Something Went Wrong!",
|
||||
"subscribed-events": "구독한 이벤트",
|
||||
"test-message-sent": "Test Message Sent",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "새 알림",
|
||||
"event-notifiers": "Event Notifiers",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Test",
|
||||
"themes": "Themes",
|
||||
"thursday": "목요일",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "화요일",
|
||||
"type": "Type",
|
||||
@@ -207,7 +209,8 @@
|
||||
"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.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "이미지 업로드",
|
||||
"screen-awake": "화면을 항상 켠 상태로 유지",
|
||||
"remove-image": "이미지 제거",
|
||||
"nextStep": "다음 단계"
|
||||
"nextStep": "다음 단계",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "고급 검색",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "저장 공간",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "사용자 설정",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "These items are shared within your group. Editing one of them will change it for the whole group!",
|
||||
"group-settings": "그룹 설정",
|
||||
"group-settings-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
|
||||
"manage-data": "데이터 관리하기",
|
||||
"manage-data-description": "Manage your Food and Units (more options coming soon)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Įvyko klaida!",
|
||||
"subscribed-events": "Prenumeruojami įvykiai",
|
||||
"test-message-sent": "Testinė žinutė išsiųsta",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Naujas pranešimas",
|
||||
"event-notifiers": "Įvykių pranešimai",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (praleidžiama, jei tuščia)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Tikrinti",
|
||||
"themes": "Temos",
|
||||
"thursday": "Ketvirtadienis",
|
||||
"title": "Title",
|
||||
"token": "Prieeigos raktas",
|
||||
"tuesday": "Antradienis",
|
||||
"type": "Tipas",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Sukurta: {0}",
|
||||
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Ar tikrai norite ištrinti <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Įkelti nuotrauką",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Išplėstinė paieška",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Ištrinti receptus",
|
||||
"source-unit-will-be-deleted": "Pirminis vienetas bus ištrintas"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Pradiniai duomenys",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Sveiki atvykę, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Valdykite savo profilį, receptus ir grupių nustatymus.",
|
||||
"get-invite-link": "Gauti pakvietimo nuorodą",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Paskyros apžvalga",
|
||||
"account-summary-description": "Čia pateikiama jūsų grupės informacijos santrauka",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Grupės statistika",
|
||||
"group-statistics-description": "Jūsų grupės statistika pateikia įžvalgų apie jūsų Mealie naudojimą.",
|
||||
"storage-capacity": "Atminties talpa",
|
||||
"storage-capacity-description": "Duomenų užimama talpa yra dydis, apskaičiuojamas pagal jkeltų nuotraukų ir duomenų dydį.",
|
||||
"personal": "Asmeniniai",
|
||||
"personal-description": "Šie nustatymai yra jūsų asmeniniai. Čia atlikti pakeitimai nepaveiks kitų naudotojų",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "Vartotojo nustatymai",
|
||||
"user-settings-description": "Valdykite savo nustatymus, pasikeiskite slaptažodį ar atnaujinkite el. pašto adresą",
|
||||
"api-tokens-description": "Valdykite savo API Tokens prieigai iš išorinių sistemų",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "Šie nustatymai yra bendri jūsų grupei. Čia atlikti pakeitimai paveiks visus grupės naudotojus.",
|
||||
"group-settings": "Gupės nustatymai",
|
||||
"group-settings-description": "Valdykite bendrus grupės nustatymus, tokius kaip valgių plano ar privatumo nustatymai.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Pranešikliai",
|
||||
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
|
||||
"manage-data": "Duomenų valdymas",
|
||||
"manage-data-description": "Tvarkykite produktus ir vienetus (daugiau pasirinkimų jau greitai)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Duomenų migracijos",
|
||||
"data-migrations-description": "Perkelkite esamus duomenis iš kitų sistemų, pvz. \"Nextcloud Recipes\" ar \"Chowdown\"",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "El. laiškas išsiųstas",
|
||||
"error-sending-email": "Klaida siunčiant el. laišką",
|
||||
"personal-information": "Asmeninė informacija",
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
{
|
||||
"about": {
|
||||
"about": "About",
|
||||
"about-mealie": "About Mealie",
|
||||
"api-docs": "API Docs",
|
||||
"api-port": "API Port",
|
||||
"application-mode": "Application Mode",
|
||||
"database-type": "Database Type",
|
||||
"database-url": "Database URL",
|
||||
"default-group": "Default Group",
|
||||
"about": "Par",
|
||||
"about-mealie": "Par Mealie",
|
||||
"api-docs": "API Dokumentācija",
|
||||
"api-port": "API ports",
|
||||
"application-mode": "Lietojumprogrammas režīms",
|
||||
"database-type": "Datubāzes tips",
|
||||
"database-url": "Datubāzes URL",
|
||||
"default-group": "Noklusētā grupa",
|
||||
"demo": "Demo",
|
||||
"demo-status": "Demo Status",
|
||||
"development": "Development",
|
||||
"docs": "Docs",
|
||||
"download-log": "Download Log",
|
||||
"demo-status": "Demonstrācijas statuss",
|
||||
"development": "Izstrāde",
|
||||
"docs": "Dokumentācija",
|
||||
"download-log": "Lejupielādēt žurnālu",
|
||||
"download-recipe-json": "Last Scraped JSON",
|
||||
"github": "Github",
|
||||
"log-lines": "Log Lines",
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Something Went Wrong!",
|
||||
"subscribed-events": "Subscribed Events",
|
||||
"test-message-sent": "Test Message Sent",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "New Notification",
|
||||
"event-notifiers": "Event Notifiers",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Test",
|
||||
"themes": "Themes",
|
||||
"thursday": "Thursday",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Tuesday",
|
||||
"type": "Type",
|
||||
@@ -207,7 +209,8 @@
|
||||
"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.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Upload image",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Advanced Search",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"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-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"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)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Er is iets fout gegaan!",
|
||||
"subscribed-events": "Geabonneerde gebeurtenissen",
|
||||
"test-message-sent": "Testbericht verzonden",
|
||||
"message-sent": "Bericht verstuurd",
|
||||
"new-notification": "Nieuwe melding",
|
||||
"event-notifiers": "Meldingen van gebeurtenissen",
|
||||
"apprise-url-skipped-if-blank": "URL van Apprise (overgeslagen als veld leeg is)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Test",
|
||||
"themes": "Thema's",
|
||||
"thursday": "donderdag",
|
||||
"title": "Titel",
|
||||
"token": "Token",
|
||||
"tuesday": "dinsdag",
|
||||
"type": "Soort",
|
||||
@@ -207,7 +209,8 @@
|
||||
"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": "Weet u zeker dat u de volgende items wilt verwijderen?"
|
||||
"confirm-delete-generic-items": "Weet u zeker dat u de volgende items wilt verwijderen?",
|
||||
"organizers": "Organisatoren"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Weet je zeker dat je <b>{groupName}<b/> wil verwijderen?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Afbeelding uploaden",
|
||||
"screen-awake": "Scherm aan laten staan",
|
||||
"remove-image": "Afbeelding verwijderen",
|
||||
"nextStep": "Volgende stap"
|
||||
"nextStep": "Volgende stap",
|
||||
"recipe-actions": "Acties met recepten ",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie gebruikt natuurlijke taalverwerking om te ontleden en maakt eenheden en levensmiddelen voor de ingrediënten van je recept. Deze functie is experimenteel en werkt misschien niet altijd zoals verwacht. Als u liever niet de bewerkte resultaten gebruikt, kunt u 'Annuleren' selecteren en de wijzigingen worden niet opgeslagen.",
|
||||
"ingredient-parser": "",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Geavanceerd zoeken",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Verwijder recepten",
|
||||
"source-unit-will-be-deleted": "Broneenheid zal worden verwijderd"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Gegevens voor acties met recepten",
|
||||
"new-recipe-action": "Nieuwe actie met recept",
|
||||
"edit-recipe-action": "Pas actie met recept aan",
|
||||
"action-type": "Soort actie"
|
||||
},
|
||||
"create-alias": "Maak alias",
|
||||
"manage-aliases": "Beheer aliassen ",
|
||||
"seed-data": "Voorbeeldgegevens",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welkom, {0}",
|
||||
"welcome-user": "👋 Welkom, {0}!",
|
||||
"description": "Beheer je profiel, recepten en groepsinstellingen.",
|
||||
"get-invite-link": "Krijg uitnodigingslink",
|
||||
"get-public-link": "Openbare link krijgen",
|
||||
"account-summary": "Accountoverzicht",
|
||||
"account-summary-description": "Hier is een samenvatting van de informatie van jouw groep",
|
||||
"account-summary-description": "Hier is een samenvatting van jouw groep.",
|
||||
"group-statistics": "Groepsstatistieken",
|
||||
"group-statistics-description": "Jouw groepsstatistieken bieden inzicht in hoe je Mealie gebruikt.",
|
||||
"storage-capacity": "Opslagcapaciteit",
|
||||
"storage-capacity-description": "Jouw opslagcapaciteit is een berekening van de afbeeldingen en bijlagen die je hebt geüpload.",
|
||||
"personal": "Persoonlijk",
|
||||
"personal-description": "Dit zijn je persoonlijke instellingen. Veranderingen hier hebben geen invloed op andere gebruikers",
|
||||
"personal-description": "Dit zijn jouw persoonlijke instellingen. Aanpassingen hier hebben geen invloed op andere gebruikers.",
|
||||
"user-settings": "Gebruikersinstellingen",
|
||||
"user-settings-description": "Beheer jouw voorkeuren, verander jouw wachtwoord en werk jouw e-mailadres bij",
|
||||
"api-tokens-description": "Beheer jouw API-tokens voor toegang vanuit externe applicaties",
|
||||
"user-settings-description": "Beheer jouw voorkeuren, verander jouw wachtwoord en werk jouw e-mailadres bij.",
|
||||
"api-tokens-description": "Beheer jouw API-tokens voor toegang vanuit externe applicaties.",
|
||||
"group-description": "Deze items worden gedeeld binnen je groep. Het bewerken van een van deze items zal het voor de hele groep veranderen!",
|
||||
"group-settings": "Groepsinstellingen",
|
||||
"group-settings-description": "Beheer je groepsinstellingen zoals maaltijdplan en privacyinstellingen.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notificeerders",
|
||||
"notifiers-description": "Stel e-mail en push-meldingen in die worden getriggerd bij specifieke gebeurtenissen.",
|
||||
"manage-data": "Gegevensbeheer",
|
||||
"manage-data-description": "Beheer Voedsel en Eenheden (er komen binnenkort meer opties)",
|
||||
"manage-data-description": "Beheer je Mealie-gegevens: Levensmiddelen, Eenheden, Categorieën, Tags en meer.",
|
||||
"data-migrations": "Datamigratie",
|
||||
"data-migrations-description": "Migreer je bestaande gegevens van andere applicaties, zoals Nextcloud recepten en Chowdown",
|
||||
"data-migrations-description": "Importeer jouw bestaande gegevens van andere applicaties, zoals Nextcloud recepten en Chowdown.",
|
||||
"email-sent": "E-mail verzonden",
|
||||
"error-sending-email": "Fout tijdens het verzenden van de e-mail",
|
||||
"personal-information": "Persoonlijke gegevens",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Noe gikk galt!",
|
||||
"subscribed-events": "Abonnerte hendelser",
|
||||
"test-message-sent": "Testmelding sendt",
|
||||
"message-sent": "Melding sendt",
|
||||
"new-notification": "Ny varsel",
|
||||
"event-notifiers": "Hendelsesvarsler",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (hoppes over hvis tom)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Test",
|
||||
"themes": "Temaer",
|
||||
"thursday": "Torsdag",
|
||||
"title": "Tittel",
|
||||
"token": "Token",
|
||||
"tuesday": "Tirsdag",
|
||||
"type": "Type",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Opprettet: {0}",
|
||||
"unsaved-changes": "Du har ulagrede endringer. Ønsker du å lagre før du forlater? Trykk 'OK' for å lagre, 'Avbryt' for å forkaste endringene.",
|
||||
"clipboard-copy-failure": "Kunne ikke kopiere til utklippstavlen.",
|
||||
"confirm-delete-generic-items": "Er du sikker på at du vil følgende elementer?"
|
||||
"confirm-delete-generic-items": "Er du sikker på at du vil følgende elementer?",
|
||||
"organizers": "Organisatorer"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Er du sikker på at du vil slette <b>{groupName}<b/>?",
|
||||
@@ -362,7 +365,7 @@
|
||||
"choose-migration-type": "Velg type overføring",
|
||||
"tag-all-recipes": "Merk alle oppskrifter med emneordet {tag-name}",
|
||||
"nextcloud-text": "Oppskrifter fra Nextcloud kan importeres fra en zip-fil som inneholder dataene lagret i Nextcloud. Se eksempelet på mappestrukture nedenfor for å sikre at oppskriftene kan importeres.",
|
||||
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
|
||||
"chowdown-text": "Mealie støtter Chowdown-arkivformatet. Last ned kodearkivet som en .zip-fil og last den opp nedenfor.",
|
||||
"recipe-1": "Oppskrift 1",
|
||||
"recipe-2": "Oppskrift 2",
|
||||
"paprika-text": "Mealie kan importere oppskrifter fra Paprika. Eksporter oppskriftene fra Paprika, endre filnavnutvidelsen til .zip og last den opp nedenfor.",
|
||||
@@ -373,7 +376,7 @@
|
||||
},
|
||||
"myrecipebox": {
|
||||
"title": "My Recipe Box",
|
||||
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
|
||||
"description-long": "Mealie kan importere oppskrifter fra My Recipe Box. Eksporter oppskrifter i CSV-format, og last deretter opp .csv-filen nedenfor."
|
||||
}
|
||||
},
|
||||
"new-recipe": {
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Last opp bilde",
|
||||
"screen-awake": "Hold skjermen på",
|
||||
"remove-image": "Slett bilde",
|
||||
"nextStep": "Neste trinn"
|
||||
"nextStep": "Neste trinn",
|
||||
"recipe-actions": "Oppskriftshandlinger",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingrediens-parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Avansert søk",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Slett oppskrifter",
|
||||
"source-unit-will-be-deleted": "Kildeenheten vil bli slettet"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Opppgavehandlings-data",
|
||||
"new-recipe-action": "Ny oppskriftshandling",
|
||||
"edit-recipe-action": "Rediger oppskriftshandling",
|
||||
"action-type": "Handlingstype"
|
||||
},
|
||||
"create-alias": "Opprett alias",
|
||||
"manage-aliases": "Administrer aliaser",
|
||||
"seed-data": "Tilføringsdata",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Velkommen, {0}",
|
||||
"welcome-user": "Velkommen, {0}!",
|
||||
"description": "Administrer din profil, oppskrifter og gruppeinnstillinger.",
|
||||
"get-invite-link": "Få invitasjonslenke",
|
||||
"get-public-link": "Få offentlig lenke",
|
||||
"account-summary": "Kontosammendrag",
|
||||
"account-summary-description": "Her er en oppsummering av informasjonen til gruppen din",
|
||||
"account-summary-description": "Her er en oppsummering av informasjonen til gruppen din.",
|
||||
"group-statistics": "Gruppestatistikk",
|
||||
"group-statistics-description": "Gruppestatistikken din gir deg et innblikk i hvordan du bruker Mealie.",
|
||||
"storage-capacity": "Lagringskapasitet",
|
||||
"storage-capacity-description": "Lagringskapasiteten er en beregning av bildene og ressursene du har lastet opp.",
|
||||
"personal": "Personlig",
|
||||
"personal-description": "Dette er innstillingene som er personlige for deg. Endringer gjort her påvirker ikke andre brukere",
|
||||
"personal-description": "Dette er personlige innstillinger. Endringer gjort her påvirker ikke andre brukere.",
|
||||
"user-settings": "Brukerinnstillinger",
|
||||
"user-settings-description": "Administrer innstillingene, endre passordet og oppdater e-postadressen din",
|
||||
"api-tokens-description": "Administrer dine API-tokens for tilgang fra eksterne programmer",
|
||||
"user-settings-description": "Administrer innstillingene, endre passordet og oppdater e-postadressen din.",
|
||||
"api-tokens-description": "Administrer dine API-tokens for tilgang fra eksterne programmer.",
|
||||
"group-description": "Disse elementene deles innad i gruppen din. Redigering av elementenee vil føre til endringer for hele gruppen!",
|
||||
"group-settings": "Gruppeinnstillinger",
|
||||
"group-settings-description": "Administrer felles gruppeinnstillinger som innstillinger for måltidsplaner og personvern.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Varslingsagenter",
|
||||
"notifiers-description": "Sett opp e-post- og pushvarsler som utløses av spesifikke hendelser.",
|
||||
"manage-data": "Administrer data",
|
||||
"manage-data-description": "Administrer dine matvarer og enheter (flere alternativer kommer snart)",
|
||||
"manage-data-description": "Administrer dine Mealie-data; Ingredienser, enheter, kategorier, emneknagger og mer.",
|
||||
"data-migrations": "Dataoverføringer",
|
||||
"data-migrations-description": "Overfør eksisterende data fra andre programmer som Nextcloud Recipes og Chowdown",
|
||||
"data-migrations-description": "Overfør eksisterende data fra andre programmer som Nextcloud Recipes og Chowdown.",
|
||||
"email-sent": "E-post sendt",
|
||||
"error-sending-email": "Feil ved sending av e-post",
|
||||
"personal-information": "Personlig informasjon",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Coś poszło nie tak!",
|
||||
"subscribed-events": "Zasubskrybowane wydarzenia",
|
||||
"test-message-sent": "Wiadomość została wysłana",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Nowe powiadomienie",
|
||||
"event-notifiers": "Powiadomienia o zdarzeniach",
|
||||
"apprise-url-skipped-if-blank": "URL Apprise (pominięty, jeśli puste)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Testuj",
|
||||
"themes": "Motywy",
|
||||
"thursday": "Czwartek",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Wtorek",
|
||||
"type": "Typ",
|
||||
@@ -207,7 +209,8 @@
|
||||
"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": "Nie udało się skopiować do schowka.",
|
||||
"confirm-delete-generic-items": "Czy na pewno chcesz usunąć następujące elementy?"
|
||||
"confirm-delete-generic-items": "Czy na pewno chcesz usunąć następujące elementy?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Czy na pewno chcesz usunąć <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Prześlij obraz",
|
||||
"screen-awake": "Pozostaw ekran włączony",
|
||||
"remove-image": "Usuń obraz",
|
||||
"nextStep": "Następny krok"
|
||||
"nextStep": "Następny krok",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Wyszukiwanie zaawansowane",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Usuń Przepisy",
|
||||
"source-unit-will-be-deleted": "Jednostka źródłowa zostanie usunięta"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Utwórz alias",
|
||||
"manage-aliases": "Zarządzaj aliasami",
|
||||
"seed-data": "Dane przykładowe",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Witaj, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Zarządzaj swoim profilem, przepisami i ustawieniami grupy.",
|
||||
"get-invite-link": "Uzyskaj link z zaproszeniem",
|
||||
"get-public-link": "Uzyskaj link publiczny",
|
||||
"account-summary": "Podsumowanie konta",
|
||||
"account-summary-description": "Oto podsumowanie informacji o Twojej grupie",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Statystyki Grupy",
|
||||
"group-statistics-description": "Twoje statystyki grupy dostarczają informacji o tym, jak używasz Mealie.",
|
||||
"storage-capacity": "Pojemność Magazynowa",
|
||||
"storage-capacity-description": "Twoja pojemność magazynowa jest wyliczeniem zdjęć i zasobów, które przesłałeś.",
|
||||
"personal": "Osobiste",
|
||||
"personal-description": "To są ustawienia, które są dla Ciebie osobiste. Zmiany tutaj nie będą miały wpływu na innych użytkowników",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "Ustawienia użytkownika",
|
||||
"user-settings-description": "Zarządzaj swoimi preferencjami, zmień hasło i zaktualizuj swój e-mail",
|
||||
"api-tokens-description": "Zarządzaj tokenami API, aby uzyskać dostęp z zewnętrznych aplikacji",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "Te elementy są współdzielone w Twojej grupie. Edycja jednego z nich zmieni je dla całej grupy!",
|
||||
"group-settings": "Ustawienia Grupy",
|
||||
"group-settings-description": "Zarządzaj swoimi wspólnymi ustawieniami grupy, takimi jak plan posiłkowy i ustawienia prywatności.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Powiadomienia",
|
||||
"notifiers-description": "Skonfiguruj e-mail i powiadomienia, które uruchamiają określone zdarzenia.",
|
||||
"manage-data": "Zarządzanie Danymi",
|
||||
"manage-data-description": "Zarządzaj Żywnością i Jednostkami (wkrótce więcej opcji)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Migracje Danych",
|
||||
"data-migrations-description": "Migruj swoje istniejące dane z innych aplikacji, takich jak przepisy Nextcloud i Chowdown",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "E-mail wysłany",
|
||||
"error-sending-email": "Błąd podczas wysyłania e-mail",
|
||||
"personal-information": "Informacje osobiste",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Algo deu errado!",
|
||||
"subscribed-events": "Eventos Inscritos",
|
||||
"test-message-sent": "Mensagem de teste enviada",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Nova Notificação",
|
||||
"event-notifiers": "Notificações de Eventos",
|
||||
"apprise-url-skipped-if-blank": "URL Apprise (ignorado se estiver em branco)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Teste",
|
||||
"themes": "Temas",
|
||||
"thursday": "Quinta-feira",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Terça-feira",
|
||||
"type": "Tipo",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Criado em {0}",
|
||||
"unsaved-changes": "Você possui alterações não salvas. Deseja salvar antes de sair? Ok para salvar, Cancelar para descartar alterações.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Tem certeza que deseja excluir o grupo <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Enviar imagem",
|
||||
"screen-awake": "Manter a tela ligada",
|
||||
"remove-image": "Remover imagem",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Pesquisa avançada",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Excluir Receitas",
|
||||
"source-unit-will-be-deleted": "Unidade de origem será excluída"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Criar Apelido",
|
||||
"manage-aliases": "Gerenciar apelidos",
|
||||
"seed-data": "Semear dados",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Bem-vindo, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Gerencie seu perfil, receitas e configurações de grupo.",
|
||||
"get-invite-link": "Obter link de convite",
|
||||
"get-public-link": "Obter link público",
|
||||
"account-summary": "Resumo da conta",
|
||||
"account-summary-description": "Aqui está um resumo das informações do seu grupo",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Estatísticas do Grupo",
|
||||
"group-statistics-description": "Suas Estatísticas em Grupo fornecem algumas informações sobre como você está usando o Mealie.",
|
||||
"storage-capacity": "Capacidade de armazenamento",
|
||||
"storage-capacity-description": "Sua capacidade de armazenamento é um cálculo das imagens e arquivos que você carregou.",
|
||||
"personal": "Pessoal",
|
||||
"personal-description": "Estas são as configurações que são pessoais para você. As alterações aqui não afetarão outros usuários",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "Configurações de Usuário",
|
||||
"user-settings-description": "Gerencie suas preferências, altere sua senha e atualize seu e-mail",
|
||||
"api-tokens-description": "Gerencie seus Tokens de API para acesso de aplicativos externos",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "Esses itens são compartilhados dentro do seu grupo. Ao editar um deles vai mudá-lo para todo o grupo!",
|
||||
"group-settings": "Configurações do Grupo",
|
||||
"group-settings-description": "Gerencie suas configurações comuns de grupo como a refeição e as configurações de privacidade.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notificadores",
|
||||
"notifiers-description": "Configure e-mails e notificações push que desencadeiam eventos específicos.",
|
||||
"manage-data": "Gerenciar dados",
|
||||
"manage-data-description": "Gerencie suas Comidas e Unidades (mais opções em breve)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Migrações de dados",
|
||||
"data-migrations-description": "Migre os dados existentes de outras aplicações, como Nextcloud Recipes e Chowdown",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "E-mail enviado",
|
||||
"error-sending-email": "Erro enviando email",
|
||||
"personal-information": "Informações pessoais",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Algo correu mal!",
|
||||
"subscribed-events": "Eventos Subscritos",
|
||||
"test-message-sent": "Mensagem de teste enviada",
|
||||
"message-sent": "Mensagem Enviada",
|
||||
"new-notification": "Nova Notificação",
|
||||
"event-notifiers": "Notificadores de eventos",
|
||||
"apprise-url-skipped-if-blank": "URL da Apprise (ignorado se vazio)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Teste",
|
||||
"themes": "Temas",
|
||||
"thursday": "Quinta-feira",
|
||||
"title": "Título",
|
||||
"token": "Token",
|
||||
"tuesday": "Terça-feira",
|
||||
"type": "Tipo",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Criado em: {0}",
|
||||
"unsaved-changes": "Tem alterações por gravar. Quer gravar antes de sair? OK para gravar, Cancelar para descartar alterações.",
|
||||
"clipboard-copy-failure": "Erro ao copiar para a área de transferência.",
|
||||
"confirm-delete-generic-items": "Tem a certeza de que deseja eliminar os seguintes itens?"
|
||||
"confirm-delete-generic-items": "Tem a certeza de que deseja eliminar os seguintes itens?",
|
||||
"organizers": "Organizadores"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Tem a certeza que quer eliminar <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Carregar imagem",
|
||||
"screen-awake": "Manter ecrã ligado",
|
||||
"remove-image": "Remover imagem",
|
||||
"nextStep": "Próximo passo"
|
||||
"nextStep": "Próximo passo",
|
||||
"recipe-actions": "Ações da Receita",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Pesquisa Avançada",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Eliminar Receitas",
|
||||
"source-unit-will-be-deleted": "Unidade de origem será eliminada"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Dados das Ações da Receita",
|
||||
"new-recipe-action": "Nova Ação da Receita",
|
||||
"edit-recipe-action": "Editar Ação da Receita",
|
||||
"action-type": "Tipo de Ação"
|
||||
},
|
||||
"create-alias": "Criar Pseudónimo",
|
||||
"manage-aliases": "Gerir Pseudónimos",
|
||||
"seed-data": "Gerar dados",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Bem-vindo, {0}",
|
||||
"welcome-user": "👋 Bem-vindo, {0}!",
|
||||
"description": "Gira o seu perfil, receitas e definições de grupo.",
|
||||
"get-invite-link": "Obter ligação de convite",
|
||||
"get-public-link": "Obter ligação pública",
|
||||
"account-summary": "Resumo da conta",
|
||||
"account-summary-description": "Aqui está um resumo das informações do seu grupo",
|
||||
"account-summary-description": "Aqui está um resumo das informações do seu grupo.",
|
||||
"group-statistics": "Estatísticas do Grupo",
|
||||
"group-statistics-description": "A suas Estatísticas de Grupo fornecem algumas informações sobre como usa o Mealie.",
|
||||
"storage-capacity": "Capacidade de armazenamento",
|
||||
"storage-capacity-description": "A sua capacidade de armazenamento é um cálculo das imagens e itens que carregou.",
|
||||
"personal": "Pessoal",
|
||||
"personal-description": "Estas são definições que só se aplicam a si. Alterações aqui não afetam os outros utilizadores",
|
||||
"personal-description": "Estas são definições que só se aplicam a si. Alterações aqui não afetam os outros utilizadores.",
|
||||
"user-settings": "Definições do utilizador",
|
||||
"user-settings-description": "Gira as suas preferências, altera a sua senha e atualize o seu email",
|
||||
"api-tokens-description": "Gira os seus Tokens da API para acesso de aplicações externas",
|
||||
"user-settings-description": "Gira as suas preferências, altere a sua senha e atualize o seu email.",
|
||||
"api-tokens-description": "Gira os seus Tokens da API para acesso a partir de aplicações externas.",
|
||||
"group-description": "Estes itens são partilhados no seu grupo. As alterações aqui afetam todos os elementos do grupo!",
|
||||
"group-settings": "Definições do grupo",
|
||||
"group-settings-description": "Gira as definições comuns do grupo, tais como o plano de refeições e as definições de privacidade.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notificadores",
|
||||
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
|
||||
"manage-data": "Gerir Dados",
|
||||
"manage-data-description": "Gira os seus Alimentos e Unidades (mais opções em breve)",
|
||||
"manage-data-description": "Gira os seus dados no Mealie; Ingredientes, Unidades, Categorias, Etiquetas, etc.",
|
||||
"data-migrations": "Migrações de dados",
|
||||
"data-migrations-description": "Migre os seus dados existentes noutras aplicações, como Receitas Nextcloud e Chowdown",
|
||||
"data-migrations-description": "Migre os seus dados existentes noutras aplicações, tais como o Nextcloud Recipes e Chowdown.",
|
||||
"email-sent": "Email Enviado",
|
||||
"error-sending-email": "Erro ao enviar Email",
|
||||
"personal-information": "Informação pessoal",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Ceva nu a funcţionat corect!",
|
||||
"subscribed-events": "Evenimente la care ești Abonat",
|
||||
"test-message-sent": "Mesaj de test trimis",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Notificare nouă",
|
||||
"event-notifiers": "Notificatori de evenimente",
|
||||
"apprise-url-skipped-if-blank": "URL Apprise (ignorat daca e gol)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Testează",
|
||||
"themes": "Teme",
|
||||
"thursday": "Joi",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Marţi",
|
||||
"type": "Tip",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Creat pe {0}",
|
||||
"unsaved-changes": "Aveți modificări nesalvate. Doriți să salvați înainte de a închide aplicația? Apăsați \"OK\" pentru a salva sau \"Anulare\" pentru a renunța la modificări.",
|
||||
"clipboard-copy-failure": "Copierea în clipboard a eșuat.",
|
||||
"confirm-delete-generic-items": "Sunteți sigur că doriți să ștergeți următoarele?"
|
||||
"confirm-delete-generic-items": "Sunteți sigur că doriți să ștergeți următoarele?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Sunteți sigur că doriți să ștergeți <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Încărcare imagine",
|
||||
"screen-awake": "Păstrare ecran aprins",
|
||||
"remove-image": "Șterge Imaginea",
|
||||
"nextStep": "Pasul următor"
|
||||
"nextStep": "Pasul următor",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Căutare avansată",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"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-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"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)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Что-то пошло не так!",
|
||||
"subscribed-events": "События с подпиской",
|
||||
"test-message-sent": "Тестовое сообщение отправлено",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Новое уведомление",
|
||||
"event-notifiers": "Уведомления о событии",
|
||||
"apprise-url-skipped-if-blank": "URL-адрес (пропущен, если пусто)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Тест",
|
||||
"themes": "Темы",
|
||||
"thursday": "Четверг",
|
||||
"title": "Title",
|
||||
"token": "Токен",
|
||||
"tuesday": "Вторник",
|
||||
"type": "Тип",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Создано: {0}",
|
||||
"unsaved-changes": "У вас есть несохраненные изменения. Вы хотите сохранить их перед выходом?",
|
||||
"clipboard-copy-failure": "Не удалось скопировать текст.",
|
||||
"confirm-delete-generic-items": "Вы уверены, что хотите удалить следующие элементы?"
|
||||
"confirm-delete-generic-items": "Вы уверены, что хотите удалить следующие элементы?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Вы действительно хотите удалить <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Загрузить изображение",
|
||||
"screen-awake": "Держать экран включенным",
|
||||
"remove-image": "Удалить изображение",
|
||||
"nextStep": "След. шаг"
|
||||
"nextStep": "След. шаг",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Расширенный поиск",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Удалить рецепты",
|
||||
"source-unit-will-be-deleted": "Первая единица измерения будет удалена"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Создать псевдоним",
|
||||
"manage-aliases": "Управление псевдонимами",
|
||||
"seed-data": "Заполнить данные",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Добро пожаловать, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Управление настройками профиля, рецептов и группы.",
|
||||
"get-invite-link": "Получить ссылку для приглашения",
|
||||
"get-public-link": "Получить публичную ссылку",
|
||||
"account-summary": "Cведения об учетной записи",
|
||||
"account-summary-description": "Сводка информации о вашей группе",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Статистика группы",
|
||||
"group-statistics-description": "Статистика вашей группы дает некоторую информацию о том, как вы используете Mealie.",
|
||||
"storage-capacity": "Емкость хранилища",
|
||||
"storage-capacity-description": "Указанный размер хранилища - это подсчёт размера изображений и приложений рецептов загруженных вами.",
|
||||
"personal": "Личное",
|
||||
"personal-description": "Это персональные настройки. Изменения здесь не повлияют на других пользователей",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "Настройки пользователя",
|
||||
"user-settings-description": "Управляйте своими предпочтениями, меняйте свой пароль и обновите ваш адрес электронной почты",
|
||||
"api-tokens-description": "Управление API токенами для доступа из внешних приложений",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "Эти элементы доступны внутри вашей группы. Редактирование одного из них изменит их для всей группы!",
|
||||
"group-settings": "Настройки группы",
|
||||
"group-settings-description": "Управляйте общими настройками группы, такими как настройки плана питания и конфиденциальности.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Уведомления",
|
||||
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
|
||||
"manage-data": "Настройки хранилища данных",
|
||||
"manage-data-description": "Управление продуктами и единицами измерений (скоро появятся дополнительные опции)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Перенос данных",
|
||||
"data-migrations-description": "Переносите ваши существующие данные из других приложений, таких как Nextcloud Recipes и Chowdown",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "Отправленные письма",
|
||||
"error-sending-email": "Ошибка при отправке письма",
|
||||
"personal-information": "Личные данные",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Vyskytla sa chyba",
|
||||
"subscribed-events": "Prihlásené akcie",
|
||||
"test-message-sent": "Testovacia správa bola odoslaná",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Nové upozornenie",
|
||||
"event-notifiers": "Upozornenia udalostí",
|
||||
"apprise-url-skipped-if-blank": "Informačná URL (preskočená, ak je prázdna)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Otestovať",
|
||||
"themes": "Motívy",
|
||||
"thursday": "Štvrtok",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Utorok",
|
||||
"type": "Typ",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Vytvorené: {0}",
|
||||
"unsaved-changes": "Posledne vykonané zmeny nie sú uložené. Želáte si ich uložiť alebo zrušiť?",
|
||||
"clipboard-copy-failure": "Skopírovanie do schránky zlyhalo.",
|
||||
"confirm-delete-generic-items": "Ste si istý, že chcete odstrániť nasledujúce položky?"
|
||||
"confirm-delete-generic-items": "Ste si istý, že chcete odstrániť nasledujúce položky?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Naozaj chcete odstrániť <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Nahrať obrázok",
|
||||
"screen-awake": "Ponechať obrazovku stále zapnutú",
|
||||
"remove-image": "Odstrániť obrázok",
|
||||
"nextStep": "Ďalší krok"
|
||||
"nextStep": "Ďalší krok",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Rozšírené vyhľadávanie",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Odstrániť recepty",
|
||||
"source-unit-will-be-deleted": "Zdroj bude vymazaný"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Vytvoriť alias",
|
||||
"manage-aliases": "Spravovať aliasy",
|
||||
"seed-data": "Naplniť dáta",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Vitajte, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Spravujte svoj profil, recepty a nastavenia skupín.",
|
||||
"get-invite-link": "Odkaz s pozvánkou",
|
||||
"get-public-link": "Vytvoriť verejný odkaz",
|
||||
"account-summary": "Zhrnutie účtu",
|
||||
"account-summary-description": "Tu je zhrnutie informácií o vašej skupine",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Štatistiky skupiny",
|
||||
"group-statistics-description": "Štatistiky vašej skupiny poskytujú ďalší pohľad na to, ako využívate Mealie.",
|
||||
"storage-capacity": "Kapacita úložiska",
|
||||
"storage-capacity-description": "Kapacita vášho úložiska sa počíta ako celkový objem obrázkov a príloh, ktoré máte nahraté.",
|
||||
"personal": "Osobné",
|
||||
"personal-description": "Tieto nastavenia sa týkajú výlučne vás. Ich zmena neovplyvní iných užívateľov",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "Užívateľské nastavenia",
|
||||
"user-settings-description": "Spravujte vaše nastavenia, zmeňte svoje heslo alebo aktualizujte váš e-mail",
|
||||
"api-tokens-description": "Spravujte vaše API tokeny pre prístupy z externých aplikácií",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "Tieto položky sú zdieľané v rámci vašej skupiny. Zmena ktorejkoľvek z nich sa prejaví v celej skupine!",
|
||||
"group-settings": "Nastavenia skupiny",
|
||||
"group-settings-description": "Spravujte bežné nastavenia vašej skupiny ako napr. jedálniček, či nastavenia súkromia.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifikátory",
|
||||
"notifiers-description": "Nastaviť e-mail a push notifikácie, ktoré sa spúšťajú pri špecifických udalostiach.",
|
||||
"manage-data": "Spravovať dáta",
|
||||
"manage-data-description": "Spravovať vaše jedlo a jednotky (viac možností čoskoro)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Migrácie dát",
|
||||
"data-migrations-description": "Preneste si vaše existujúce dáta z iných aplikácií ako napr. Nextcloud Recipes a Chowdown",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "E-mail Odoslaný",
|
||||
"error-sending-email": "Chyba pri odosielaní e-mailu",
|
||||
"personal-information": "Osobné údaje",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Нешто је кренуло погрешно!",
|
||||
"subscribed-events": "Догађаји на које сте претплаћени",
|
||||
"test-message-sent": "Тест порука је послата",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Ново обавештење",
|
||||
"event-notifiers": "Обавештавач о догађају",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (прескочено ако је празно)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Тест",
|
||||
"themes": "Теме",
|
||||
"thursday": "четвртак",
|
||||
"title": "Title",
|
||||
"token": "Токен",
|
||||
"tuesday": "уторак",
|
||||
"type": "Тип",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Крерирано: {0}",
|
||||
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Да ли сте сигурни да желите да обришете <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Upload image",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Напредна претрага",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"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-description": "Управљајте општим подешавањима групе као што су подешавања јеловника и приватности.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"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)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Någonting gick fel",
|
||||
"subscribed-events": "Prenumererade händelser",
|
||||
"test-message-sent": "Testmeddelande Skickat",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Ny avisering",
|
||||
"event-notifiers": "Händelseavisering",
|
||||
"apprise-url-skipped-if-blank": "Apprise-URL (hoppa över om tom)",
|
||||
@@ -80,7 +81,7 @@
|
||||
"recipe-events": "Recepthändelser"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"add": "Lägg till",
|
||||
"cancel": "Avbryt",
|
||||
"clear": "Rensa",
|
||||
"close": "Stäng",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Test",
|
||||
"themes": "Tema",
|
||||
"thursday": "Torsdag",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Tisdag",
|
||||
"type": "Typ",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Skapad {0}",
|
||||
"unsaved-changes": "Du har osparade ändringar. Vill du spara innan du lämnar? Tryck Okej att spara, Avbryt för att ignorera ändringar.",
|
||||
"clipboard-copy-failure": "Det gick inte att kopiera till urklipp.",
|
||||
"confirm-delete-generic-items": "Är du säker på att du vill radera följande objekt?"
|
||||
"confirm-delete-generic-items": "Är du säker på att du vill radera följande objekt?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Är du säker på att du vill radera <b>{groupName}<b/>?",
|
||||
@@ -547,7 +550,7 @@
|
||||
"import-with-url": "Importera från URL",
|
||||
"create-recipe": "Skapa recept",
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"create-recipes": "Skapa recept",
|
||||
"import-with-zip": "Importera från .zip",
|
||||
"create-recipe-from-an-image": "Skapa recept från en bild",
|
||||
"bulk-url-import": "Massimport från URL",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Ladda upp bild",
|
||||
"screen-awake": "Håll skärmen vaken",
|
||||
"remove-image": "Ta bort bild",
|
||||
"nextStep": "Nästa steg"
|
||||
"nextStep": "Nästa steg",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Avancerad sökning",
|
||||
@@ -854,8 +872,8 @@
|
||||
"link-id": "Länk ID",
|
||||
"link-name": "Länk namn",
|
||||
"login": "Logga in",
|
||||
"login-oidc": "Login with",
|
||||
"or": "or",
|
||||
"login-oidc": "Logga in med",
|
||||
"or": "eller",
|
||||
"logout": "Logga ut",
|
||||
"manage-users": "Hantera användare",
|
||||
"manage-users-description": "Create and manage users.",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Radera recept",
|
||||
"source-unit-will-be-deleted": "Källenheten kommer att raderas"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Skapa alias",
|
||||
"manage-aliases": "Hantera alias",
|
||||
"seed-data": "Exempeldata",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Välkommen, {0}",
|
||||
"welcome-user": "👋 Välkommen, {0}!",
|
||||
"description": "Hantera dina profil, recept och gruppinställningar.",
|
||||
"get-invite-link": "Få inbjudningslänk",
|
||||
"get-public-link": "Få offentlig länk",
|
||||
"account-summary": "Kontosammanfattning",
|
||||
"account-summary-description": "Här är en sammanfattning av din grupps information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Gruppstatistik",
|
||||
"group-statistics-description": "Din gruppstatistik ger dig en inblick i hur du använder Mealie.",
|
||||
"storage-capacity": "Lagringskapacitet",
|
||||
"storage-capacity-description": "Din lagringskapacitet är en beräkning av de bilder och tillgångar du har laddat upp.",
|
||||
"personal": "Personligt",
|
||||
"personal-description": "Detta är inställningar som är personliga för dig. Ändringar här påverkar inte andra användare",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "Användarinställningar",
|
||||
"user-settings-description": "Hantera dina inställningar, ändra ditt lösenord och uppdatera din e-post",
|
||||
"api-tokens-description": "Hantera dina API-Tokens för åtkomst från externa applikationer",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "Dessa objekt delas inom din grupp. Att redigera en av dem kommer att ändra den för hela gruppen!",
|
||||
"group-settings": "Gruppinställningar",
|
||||
"group-settings-description": "Hantera dina gemensamma gruppinställningar som måltidsplan och sekretessinställningar.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifierare",
|
||||
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
|
||||
"manage-data": "Hantera data",
|
||||
"manage-data-description": "Hantera Mat och Enheter (fler alternativ kommer snart)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data migreringar",
|
||||
"data-migrations-description": "Migrera befintliga data från andra program som Nextcloud Recipes och Chowdown",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "E-post skickades",
|
||||
"error-sending-email": "Fel vid sändning av e-post",
|
||||
"personal-information": "Personlig information",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Bir sorun oluştu!",
|
||||
"subscribed-events": "Abone Olunan Etkinlikler",
|
||||
"test-message-sent": "Test Mesajı Gönderildi",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "Yeni bildirim",
|
||||
"event-notifiers": "Etkinlik Bildirimleri",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL'si (boşsa geçilir)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Dene",
|
||||
"themes": "Temalar",
|
||||
"thursday": "Perşembe",
|
||||
"title": "Title",
|
||||
"token": "Anahtar",
|
||||
"tuesday": "Salı",
|
||||
"type": "Tür",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "{0} tarihinde oluşturuldu",
|
||||
"unsaved-changes": "Kaydedilmemiş değişiklikleriniz mevcut. Ayrılmadan önce kaydetmek ister misiniz? Kaydetmek için Tamam'ı, değişiklikleri iptal etmek için İptal'i seçin.",
|
||||
"clipboard-copy-failure": "Panoya kopyalanamadı.",
|
||||
"confirm-delete-generic-items": "Aşağıdaki öğeleri silmek istediğinizden emin misiniz?"
|
||||
"confirm-delete-generic-items": "Aşağıdaki öğeleri silmek istediğinizden emin misiniz?",
|
||||
"organizers": "Organizatörler"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "<b>{groupName}<b/>'i silmek istediğine emin misin?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Resim yükleyin",
|
||||
"screen-awake": "Ekranı Açık Tut",
|
||||
"remove-image": "Resmi kaldır",
|
||||
"nextStep": "Sonraki adım"
|
||||
"nextStep": "Sonraki adım",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Advanced Search",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Takma Ad Oluştur",
|
||||
"manage-aliases": "Takma Adları Yönet",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Hoşgeldiniz, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Herkese açık bağlantıyı al",
|
||||
"account-summary": "Hesap Özeti",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Grup İstatistikleri",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Depolama kapasiten yüklediğin resim ve diğer bileşenlerin toplamıdır.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"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-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"notifiers-description": "Belirli etkinliklerde tetiklenen e-posta ve anlık bildirimleri ayarlayın.",
|
||||
"manage-data": "Verileri Yönet",
|
||||
"manage-data-description": "Manage your Food and Units (more options coming soon)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Щось пішло не так!",
|
||||
"subscribed-events": "Події, на які підписано",
|
||||
"test-message-sent": "Тестове повідомлення надіслано",
|
||||
"message-sent": "Повідомлення надіслано",
|
||||
"new-notification": "Нове сповіщення",
|
||||
"event-notifiers": "Сповіщувачі",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (пропущено якщо порожній)",
|
||||
@@ -147,19 +148,20 @@
|
||||
"show-all": "Показати все",
|
||||
"shuffle": "Перемішати",
|
||||
"sort": "Сортувати",
|
||||
"sort-ascending": "Sort Ascending",
|
||||
"sort-descending": "Sort Descending",
|
||||
"sort-ascending": "Сортувати за зростанням",
|
||||
"sort-descending": "Сортувати за спаданням",
|
||||
"sort-alphabetically": "За алфавітом",
|
||||
"status": "Статус",
|
||||
"subject": "Тема",
|
||||
"submit": "Надіслати",
|
||||
"success-count": "Успіх: {count}",
|
||||
"sunday": "Неділя",
|
||||
"system": "System",
|
||||
"system": "Система",
|
||||
"templates": "Шаблони:",
|
||||
"test": "Тест",
|
||||
"themes": "Теми",
|
||||
"thursday": "Четвер",
|
||||
"title": "Назва",
|
||||
"token": "Токен",
|
||||
"tuesday": "Вівторок",
|
||||
"type": "Тип",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "Створено: {0}",
|
||||
"unsaved-changes": "У вас є незбережені зміни. Ви хочете зберегти їх перед виходом? Гаразд, щоб зберегти, Скасувати, щоб скасувати.",
|
||||
"clipboard-copy-failure": "Не вдалося скопіювати до буфера обміну.",
|
||||
"confirm-delete-generic-items": "Ви впевнені, що хочете видалити вибрані елементи?"
|
||||
"confirm-delete-generic-items": "Ви впевнені, що хочете видалити вибрані елементи?",
|
||||
"organizers": "Організатори"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Ви дійсно бажаєте видалити <b>{groupName}<b/>?",
|
||||
@@ -362,7 +365,7 @@
|
||||
"choose-migration-type": "Оберіть тип міграції",
|
||||
"tag-all-recipes": "Позначити усі рецепти тегом {tag-name}",
|
||||
"nextcloud-text": "Рецепти Nextcloud можна імпортувати з zip-архіву, який містить дані, що зберігаються в Nextcloud. Перегляньте приклади структури тек нижче, щоб пересвідчитися що ваші рецепти можна імпортувати.",
|
||||
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
|
||||
"chowdown-text": "Mealie підтримує формат chowdown репозиторію. Завантажте репозиторій коду як файл .zip і відвантажте його нижче.",
|
||||
"recipe-1": "Рецепт 1",
|
||||
"recipe-2": "Рецепт 2",
|
||||
"paprika-text": "Mealie може імпортувати рецепти з додатку Paprika. Експортуйте ваші рецепти з Paprika, перейменуйте розширення експорту в .zip та відвантажте його нижче.",
|
||||
@@ -373,7 +376,7 @@
|
||||
},
|
||||
"myrecipebox": {
|
||||
"title": "My Recipe Box",
|
||||
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
|
||||
"description-long": "Mealie може імпортувати рецепти з My Recipe Box. Експортуйте ваші рецепти в форматі CSV, а потім відвантажте .csv файл нижче."
|
||||
}
|
||||
},
|
||||
"new-recipe": {
|
||||
@@ -525,7 +528,7 @@
|
||||
"edit-timeline-event": "Редагувати подію хронології",
|
||||
"timeline": "Хронологія",
|
||||
"timeline-is-empty": "Хронологія порожня. Спробуйте зробити цей рецепт!",
|
||||
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
|
||||
"timeline-no-events-found-try-adjusting-filters": "Не знайдено жодних подій. Спробуйте змінити фільтри пошуку.",
|
||||
"group-global-timeline": "Глобальна хроніка {groupName}",
|
||||
"open-timeline": "Відкрити хронологію",
|
||||
"made-this": "Я це зробив",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Вивантажити зображення",
|
||||
"screen-awake": "Тримати екран активним",
|
||||
"remove-image": "Видалити зображення",
|
||||
"nextStep": "Наступний крок"
|
||||
"nextStep": "Наступний крок",
|
||||
"recipe-actions": "Дії рецепту",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie використовує аналіз природної мови для аналізу та створення інгредієнтів та одиниць виміру. Це експериментальна функція і може не завжди працювати належним чином. Якщо ви не хочете використовувати результати аналізу виберіть \"Скасувати\", і зміни не будуть збережені.",
|
||||
"ingredient-parser": "Аналізатор інгредієнтів",
|
||||
"explanation": "Щоб використати аналізатор інгредієнтів, натисніть кнопку 'Аналізувати все', щоб запустити процес. Після того, як інгредієнти проаналізовані, ви можете їх переглянути та переконатися, що вони були проаналізовані правильно. Оцінка надійності аналізу відображена праворуч від назви елемента. Ця оцінка розраховується як середнє значення усіх індивідуальних оцінок і не завжди може бути абсолютно точним.",
|
||||
"alerts-explainer": "Оповіщення будуть відображатися, якщо знайдені продукти або одиниці знайдені яких не існує в базі даних.",
|
||||
"select-parser": "Вибрати аналізатор",
|
||||
"natural-language-processor": "Аналізатор природної мови",
|
||||
"brute-parser": "Простий аналізатор",
|
||||
"parse-all": "Аналізувати все",
|
||||
"no-unit": "Без одиниці",
|
||||
"missing-unit": "Створити відсутню одиниці: {unit}",
|
||||
"missing-food": "Створити відсутню їжу: {food}",
|
||||
"no-food": "Немає їжі"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Розширений пошук",
|
||||
@@ -793,7 +811,7 @@
|
||||
"language": "Мова",
|
||||
"maintenance": "Обслуговування",
|
||||
"background-tasks": "Фонові завдання",
|
||||
"parser": "Парсер",
|
||||
"parser": "Синтаксичний аналізатор (парсер)",
|
||||
"developer": "Розробник",
|
||||
"cookbook": "Кулінарна книга",
|
||||
"create-cookbook": "Створити нову кулінарну книгу"
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Видалити рецепти",
|
||||
"source-unit-will-be-deleted": "Початкову одиницю вимірювання буде видалено"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Дані дій рецепта",
|
||||
"new-recipe-action": "Нова дія рецепту",
|
||||
"edit-recipe-action": "Редагувати дії рецепта",
|
||||
"action-type": "Тип Дії"
|
||||
},
|
||||
"create-alias": "Створити псевдонім",
|
||||
"manage-aliases": "Керувати псевдонімами",
|
||||
"seed-data": "Підготовлені дані",
|
||||
@@ -1150,7 +1174,7 @@
|
||||
"ingredient-text": "Текст інгредієнта",
|
||||
"average-confident": "Впевненість {0}",
|
||||
"try-an-example": "Спробувати приклад",
|
||||
"parser": "Парсер",
|
||||
"parser": "Синтаксичний аналізатор (парсер)",
|
||||
"background-tasks": "Фонові задачі",
|
||||
"background-tasks-description": "Тут ви можете переглянути всі запущені фонові задачі та їх статус",
|
||||
"no-logs-found": "Журналів не знайдено",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Ласкаво просимо, {0}",
|
||||
"welcome-user": "👋 Ласкаво просимо, {0}!",
|
||||
"description": "Керування вашим профілем, рецептами та налаштуваннями групи.",
|
||||
"get-invite-link": "Отримати посилання-запрошення",
|
||||
"get-public-link": "Отримати публічне посилання",
|
||||
"account-summary": "Аккаунт",
|
||||
"account-summary-description": "Ось підсумок інформації про вашу групу",
|
||||
"account-summary-description": "Ось підсумок інформації про вашу групу.",
|
||||
"group-statistics": "Статистика групи",
|
||||
"group-statistics-description": "Статистика вашої групи дає можливість зрозуміти, як ви користуєтеся Mealie.",
|
||||
"storage-capacity": "Обсяг сховища",
|
||||
"storage-capacity-description": "Об'єм сховища це сума зображені та відвантажених медіаресурсів.",
|
||||
"personal": "Особисте",
|
||||
"personal-description": "Це особисті налаштування. Зміни тут не впливають на інших користувачів",
|
||||
"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": "Керуйте спільними налаштуванням груп, такими як плани харчування і налаштування конфіденційності.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Сповіщувачі",
|
||||
"notifiers-description": "Налаштуйте email та push сповіщення, що спрацьовують для певних подій.",
|
||||
"manage-data": "Керування даними",
|
||||
"manage-data-description": "Керуйте своїми продуктами та одиницями (більше варіантів найближчим часом)",
|
||||
"manage-data-description": "Керуйте своїми даними Mealie; їжа, одиниці, категорії, мітки та багато іншого.",
|
||||
"data-migrations": "Міграції даних",
|
||||
"data-migrations-description": "Перенести наявні дані з таких програм, як Nextcloud Recipes і Chowdown",
|
||||
"data-migrations-description": "Перенести наявні дані з таких програм, як Nextcloud Recipes і Chowdown.",
|
||||
"email-sent": "Лист надіслано",
|
||||
"error-sending-email": "Помилка надсилання листа",
|
||||
"personal-information": "Персональні данні",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "Something Went Wrong!",
|
||||
"subscribed-events": "Subscribed Events",
|
||||
"test-message-sent": "Test Message Sent",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "New Notification",
|
||||
"event-notifiers": "Event Notifiers",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "Test",
|
||||
"themes": "Themes",
|
||||
"thursday": "Thursday",
|
||||
"title": "Title",
|
||||
"token": "Token",
|
||||
"tuesday": "Tuesday",
|
||||
"type": "Type",
|
||||
@@ -207,7 +209,8 @@
|
||||
"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.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Upload image",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Advanced Search",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"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-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"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)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "出错了\t#",
|
||||
"subscribed-events": "订阅事件",
|
||||
"test-message-sent": "测试消息已发送",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "新通知",
|
||||
"event-notifiers": "事件通知器",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (如果为空则跳过)",
|
||||
@@ -85,7 +86,7 @@
|
||||
"clear": "清空",
|
||||
"close": "关闭",
|
||||
"confirm": "确定",
|
||||
"confirm-how-does-everything-look": "How does everything look?",
|
||||
"confirm-how-does-everything-look": "看起来如何?",
|
||||
"confirm-delete-generic": "你确定要删除这个?",
|
||||
"copied_message": "已复制!",
|
||||
"create": "创建",
|
||||
@@ -147,19 +148,20 @@
|
||||
"show-all": "全部显示",
|
||||
"shuffle": "随机",
|
||||
"sort": "排序",
|
||||
"sort-ascending": "Sort Ascending",
|
||||
"sort-descending": "Sort Descending",
|
||||
"sort-ascending": "升序",
|
||||
"sort-descending": "降序",
|
||||
"sort-alphabetically": "按字母顺序排序",
|
||||
"status": "状态",
|
||||
"subject": "标题",
|
||||
"submit": "提交",
|
||||
"success-count": "成功: {count}",
|
||||
"sunday": "周日",
|
||||
"system": "System",
|
||||
"system": "系统",
|
||||
"templates": "模板:",
|
||||
"test": "测试",
|
||||
"themes": "布景主题",
|
||||
"thursday": "周四",
|
||||
"title": "Title",
|
||||
"token": "密钥",
|
||||
"tuesday": "周二",
|
||||
"type": "类型",
|
||||
@@ -174,7 +176,7 @@
|
||||
"units": "单位",
|
||||
"back": "返回",
|
||||
"next": "下一步",
|
||||
"start": "Start",
|
||||
"start": "开始",
|
||||
"toggle-view": "切换视图",
|
||||
"date": "日期",
|
||||
"id": "Id",
|
||||
@@ -207,7 +209,8 @@
|
||||
"created-on-date": "创建于: {0}",
|
||||
"unsaved-changes": "你有未保存的更改。你希望现在离开前保存吗?保存选择“是”,不保存选择“取消”。",
|
||||
"clipboard-copy-failure": "未能复制到剪切板。",
|
||||
"confirm-delete-generic-items": "你确定删除以下条目吗?"
|
||||
"confirm-delete-generic-items": "你确定删除以下条目吗?",
|
||||
"organizers": "组织者"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "您确定要删除<b>{groupName}<b/>吗?",
|
||||
@@ -243,8 +246,8 @@
|
||||
"group-preferences": "群组偏好设置",
|
||||
"private-group": "私人群组",
|
||||
"private-group-description": "将群组设置为私有后,群组内每个食谱单独配置的可见性选项都将被覆盖,所有食谱都无法被公开访问。",
|
||||
"enable-public-access": "Enable Public Access",
|
||||
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
|
||||
"enable-public-access": "启用公开访问",
|
||||
"enable-public-access-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": "显示营养信息",
|
||||
@@ -358,11 +361,11 @@
|
||||
},
|
||||
"recipe-data-migrations": "食谱数据迁移",
|
||||
"recipe-data-migrations-explanation": "你可以从受支持的应用中将食谱迁移至Mealie,这是上手Mealie的好方法。",
|
||||
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
|
||||
"coming-from-another-application-or-an-even-older-version-of-mealie": "之前使用其他食谱应用或是旧版本Mealie吗?检查迁移设置,来确认你的原有数据是否可以导入。",
|
||||
"choose-migration-type": "选择迁移类型",
|
||||
"tag-all-recipes": "用{tag-name} 标签标记所有食谱",
|
||||
"nextcloud-text": "Mealie支持从Nextcloud中导入食谱。为了确保能被导入,应按照下方示例整理文件夹结构,并将其压缩成zip文件,然后在下方上传。",
|
||||
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
|
||||
"chowdown-text": "Mealie原生支持chowdown格式,只需将代码仓库打包成zip文件,并在下方上传。",
|
||||
"recipe-1": "食谱 1",
|
||||
"recipe-2": "食谱 2",
|
||||
"paprika-text": "Mealie 可以从 Paprika 导入食谱。请从paprika 导出食谱,重命名导出文件并压缩成.zip格式后,在下方上传",
|
||||
@@ -373,7 +376,7 @@
|
||||
},
|
||||
"myrecipebox": {
|
||||
"title": "My Recipe Box",
|
||||
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
|
||||
"description-long": "Mealie可以从“My Recipe Box\"导入食谱。把你的食谱导出为CSV模式,然后在下面上传.csv文件。"
|
||||
}
|
||||
},
|
||||
"new-recipe": {
|
||||
@@ -525,7 +528,7 @@
|
||||
"edit-timeline-event": "编辑时间轴事件",
|
||||
"timeline": "时间轴",
|
||||
"timeline-is-empty": "时间轴还空空如也,试着先去制作一个食谱吧!",
|
||||
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
|
||||
"timeline-no-events-found-try-adjusting-filters": "没有找到事件。请尝试调整你的搜索过滤器。",
|
||||
"group-global-timeline": "{groupName}的全局时间轴",
|
||||
"open-timeline": "查看时间轴",
|
||||
"made-this": "我做了这道菜",
|
||||
@@ -546,8 +549,8 @@
|
||||
"looking-for-migrations": "在找迁移设置?",
|
||||
"import-with-url": "通过URL导入",
|
||||
"create-recipe": "创建食谱",
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"create-recipe-description": "从头创建一个新食谱。",
|
||||
"create-recipes": "创建食谱",
|
||||
"import-with-zip": "使用 .zip 导入",
|
||||
"create-recipe-from-an-image": "用图片创建食谱",
|
||||
"bulk-url-import": "批量URL导入",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "上传图片",
|
||||
"screen-awake": "保持屏幕唤醒",
|
||||
"remove-image": "删除图片",
|
||||
"nextStep": "下一步"
|
||||
"nextStep": "下一步",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "高级搜索",
|
||||
@@ -744,9 +762,9 @@
|
||||
"ldap-ready-success-text": "LDAP所需的环境变量均已配置。",
|
||||
"build": "生成",
|
||||
"recipe-scraper-version": "食谱刮削器版本",
|
||||
"oidc-ready": "OIDC Ready",
|
||||
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
|
||||
"oidc-ready-success-text": "Required OIDC variables are all set."
|
||||
"oidc-ready": "OIDC 已就绪",
|
||||
"oidc-ready-error-text": "某些OIDC环境变量尚未配置。(如果你不使用OIDC验证可以忽略该报错)",
|
||||
"oidc-ready-success-text": "OIDC所需的环境变量均已配置。"
|
||||
},
|
||||
"shopping-list": {
|
||||
"all-lists": "所有购物清单",
|
||||
@@ -854,8 +872,8 @@
|
||||
"link-id": "链接ID",
|
||||
"link-name": "链接名",
|
||||
"login": "登录",
|
||||
"login-oidc": "Login with",
|
||||
"or": "or",
|
||||
"login-oidc": "登录方式",
|
||||
"or": "或",
|
||||
"logout": "登出",
|
||||
"manage-users": "管理用户",
|
||||
"manage-users-description": "Create and manage users.",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "删除食谱",
|
||||
"source-unit-will-be-deleted": "“待合并单位”将会被删除"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "创建别名",
|
||||
"manage-aliases": "管理别名",
|
||||
"seed-data": "初始数据",
|
||||
@@ -1156,32 +1180,32 @@
|
||||
"no-logs-found": "未找到日志",
|
||||
"tasks": "任务",
|
||||
"setup": {
|
||||
"first-time-setup": "First Time Setup",
|
||||
"welcome-to-mealie-get-started": "Welcome to Mealie! Let's get started",
|
||||
"already-set-up-bring-to-homepage": "I'm already set up, just bring me to the homepage",
|
||||
"common-settings-for-new-sites": "Here are some common settings for new sites",
|
||||
"setup-complete": "Setup Complete!",
|
||||
"first-time-setup": "初始配置",
|
||||
"welcome-to-mealie-get-started": "欢迎来到Mealie!让我们开始吧!",
|
||||
"already-set-up-bring-to-homepage": "我已经配置好了,直接跳转到主页",
|
||||
"common-settings-for-new-sites": "这有一些新站点的常见设置",
|
||||
"setup-complete": "配置完成!",
|
||||
"here-are-a-few-things-to-help-you-get-started": "Here are a few things to help you get started with Mealie",
|
||||
"restore-from-v1-backup": "Have a backup from a previous instance of Mealie v1? You can restore it here.",
|
||||
"manage-profile-or-get-invite-link": "Manage your own profile, or grab an invite link to share with others."
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 欢迎,{0}",
|
||||
"welcome-user": "👋 欢迎,{0}!",
|
||||
"description": "管理您的个人资料、食谱谱和群组设置。",
|
||||
"get-invite-link": "生成邀请链接",
|
||||
"get-public-link": "生成公开链接",
|
||||
"account-summary": "账户概况",
|
||||
"account-summary-description": "以下是你的群组概况",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "群组统计",
|
||||
"group-statistics-description": "群组统计为你如何使用Mealie提供一些深入信息。",
|
||||
"storage-capacity": "总储存容量",
|
||||
"storage-capacity-description": "你的存储容量基于你上传的图片和资源计算得出。",
|
||||
"personal": "个人设置",
|
||||
"personal-description": "这些是你的个人设置。此处的更改不影响同组其他用户。",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "个人资料",
|
||||
"user-settings-description": "修改密码,更换邮箱,管理偏好设置",
|
||||
"api-tokens-description": "管理您的 API 令牌以从外部应用程序访问",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "这些项目已在你的群组中共享,一旦被编辑,更改之处会对所有群组成员生效!",
|
||||
"group-settings": "基础选项",
|
||||
"group-settings-description": "管理常见的群组设置,如饮食计划和隐私设置。",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "通知方案",
|
||||
"notifiers-description": "设置基于特定事件触发的邮件提醒和通知推送。",
|
||||
"manage-data": "数据库",
|
||||
"manage-data-description": "管理食品和单位(将会提供更多选项)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "数据迁移",
|
||||
"data-migrations-description": "将现有数据从其他应用(如Nextcloud食谱、Chowdown)迁移至Mealie",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "邮件已发送",
|
||||
"error-sending-email": "发送邮件出错",
|
||||
"personal-information": "个人信息",
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
"something-went-wrong": "出了點問題...",
|
||||
"subscribed-events": "關注的事件",
|
||||
"test-message-sent": "測試訊息已發送",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "新通知",
|
||||
"event-notifiers": "Event Notifiers",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
|
||||
@@ -160,6 +161,7 @@
|
||||
"test": "測試",
|
||||
"themes": "佈景主題",
|
||||
"thursday": "星期四",
|
||||
"title": "Title",
|
||||
"token": "密鑰",
|
||||
"tuesday": "星期二",
|
||||
"type": "類型",
|
||||
@@ -207,7 +209,8 @@
|
||||
"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.",
|
||||
"clipboard-copy-failure": "Failed to copy to the clipboard.",
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?"
|
||||
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
|
||||
"organizers": "Organizers"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "確定要刪除<b>{groupName}<b/>?",
|
||||
@@ -581,7 +584,22 @@
|
||||
"upload-image": "Upload image",
|
||||
"screen-awake": "Keep Screen Awake",
|
||||
"remove-image": "Remove image",
|
||||
"nextStep": "Next step"
|
||||
"nextStep": "Next step",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "進階搜尋",
|
||||
@@ -1000,6 +1018,12 @@
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"seed-data": "Seed Data",
|
||||
@@ -1167,21 +1191,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}",
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"get-public-link": "Get Public Link",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"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-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
@@ -1192,9 +1216,9 @@
|
||||
"notifiers": "Notifiers",
|
||||
"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)",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown",
|
||||
"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",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div v-if="ready">
|
||||
<v-app dark>
|
||||
<v-card-title>
|
||||
<slot>
|
||||
<h1 class="mx-auto">{{ $t("page.404-page-not-found") }}</h1>
|
||||
@@ -24,7 +24,7 @@
|
||||
</slot>
|
||||
<v-spacer></v-spacer>
|
||||
</v-card-actions>
|
||||
</div>
|
||||
</v-app>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
|
||||
@@ -9,6 +9,7 @@ import { UtilsAPI } from "./user/utils";
|
||||
import { FoodAPI } from "./user/recipe-foods";
|
||||
import { UnitAPI } from "./user/recipe-units";
|
||||
import { CookbookAPI } from "./user/group-cookbooks";
|
||||
import { GroupRecipeActionsAPI } from "./user/group-recipe-actions";
|
||||
import { WebhooksAPI } from "./user/group-webhooks";
|
||||
import { RegisterAPI } from "./user/user-registration";
|
||||
import { MealPlanAPI } from "./user/group-mealplan";
|
||||
@@ -36,6 +37,7 @@ export class UserApiClient {
|
||||
public foods: FoodAPI;
|
||||
public units: UnitAPI;
|
||||
public cookbooks: CookbookAPI;
|
||||
public groupRecipeActions: GroupRecipeActionsAPI;
|
||||
public groupWebhooks: WebhooksAPI;
|
||||
public register: RegisterAPI;
|
||||
public mealplans: MealPlanAPI;
|
||||
@@ -65,6 +67,7 @@ export class UserApiClient {
|
||||
this.users = new UserApi(requests);
|
||||
this.groups = new GroupAPI(requests);
|
||||
this.cookbooks = new CookbookAPI(requests);
|
||||
this.groupRecipeActions = new GroupRecipeActionsAPI(requests);
|
||||
this.groupWebhooks = new WebhooksAPI(requests);
|
||||
this.register = new RegisterAPI(requests);
|
||||
this.mealplans = new MealPlanAPI(requests);
|
||||
|
||||
@@ -203,7 +203,6 @@ export interface MaintenanceStorageDetails {
|
||||
}
|
||||
export interface MaintenanceSummary {
|
||||
dataDirSize: string;
|
||||
logFileSize: string;
|
||||
cleanableImages: number;
|
||||
cleanableDirs: number;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
/* Do not modify it by hand - just update the pydantic models and then re-run the script
|
||||
*/
|
||||
|
||||
export type RecipeActionType =
|
||||
| "link"
|
||||
| "post";
|
||||
export type WebhookType = "mealplan";
|
||||
export type SupportedMigrations =
|
||||
| "nextcloud"
|
||||
@@ -26,6 +29,11 @@ export interface CreateGroupPreferences {
|
||||
recipeDisableAmount?: boolean;
|
||||
groupId: string;
|
||||
}
|
||||
export interface CreateGroupRecipeAction {
|
||||
actionType: RecipeActionType;
|
||||
title: string;
|
||||
url: string;
|
||||
}
|
||||
export interface CreateInviteToken {
|
||||
uses: number;
|
||||
}
|
||||
@@ -191,6 +199,13 @@ export interface GroupEventNotifierUpdate {
|
||||
options?: GroupEventNotifierOptions;
|
||||
id: string;
|
||||
}
|
||||
export interface GroupRecipeActionOut {
|
||||
actionType: RecipeActionType;
|
||||
title: string;
|
||||
url: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface GroupStatistics {
|
||||
totalRecipes: number;
|
||||
totalUsers: number;
|
||||
@@ -230,6 +245,12 @@ export interface ReadWebhook {
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface SaveGroupRecipeAction {
|
||||
actionType: RecipeActionType;
|
||||
title: string;
|
||||
url: string;
|
||||
groupId: string;
|
||||
}
|
||||
export interface SaveInviteToken {
|
||||
usesLeft: number;
|
||||
groupId: string;
|
||||
|
||||
@@ -5,10 +5,11 @@
|
||||
/* Do not modify it by hand - just update the pydantic models and then re-run the script
|
||||
*/
|
||||
|
||||
export type WebhookType = "mealplan";
|
||||
export type AuthMethod = "Mealie" | "LDAP" | "OIDC";
|
||||
|
||||
export interface ChangePassword {
|
||||
currentPassword: string;
|
||||
currentPassword?: string;
|
||||
newPassword: string;
|
||||
}
|
||||
export interface CreateToken {
|
||||
@@ -30,6 +31,11 @@ export interface CreateUserRegistration {
|
||||
seedData?: boolean;
|
||||
locale?: string;
|
||||
}
|
||||
export interface CredentialsRequest {
|
||||
username: string;
|
||||
password: string;
|
||||
remember_me?: boolean;
|
||||
}
|
||||
export interface DeleteTokenResponse {
|
||||
tokenDelete: string;
|
||||
}
|
||||
@@ -44,7 +50,7 @@ export interface GroupInDB {
|
||||
id: string;
|
||||
slug: string;
|
||||
categories?: CategoryBase[];
|
||||
webhooks?: unknown[];
|
||||
webhooks?: ReadWebhook[];
|
||||
users?: UserOut[];
|
||||
preferences?: ReadGroupPreferences;
|
||||
}
|
||||
@@ -60,7 +66,17 @@ export interface CategoryBase {
|
||||
id: string;
|
||||
slug: string;
|
||||
}
|
||||
export interface ReadWebhook {
|
||||
enabled?: boolean;
|
||||
name?: string;
|
||||
url?: string;
|
||||
webhookType?: WebhookType & string;
|
||||
scheduledTime: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface UserOut {
|
||||
id: string;
|
||||
username?: string;
|
||||
fullName?: string;
|
||||
email: string;
|
||||
@@ -68,11 +84,9 @@ export interface UserOut {
|
||||
admin?: boolean;
|
||||
group: string;
|
||||
advanced?: boolean;
|
||||
favoriteRecipes?: string[];
|
||||
canInvite?: boolean;
|
||||
canManage?: boolean;
|
||||
canOrganize?: boolean;
|
||||
id: string;
|
||||
groupId: string;
|
||||
groupSlug: string;
|
||||
tokens?: LongLiveTokenOut[];
|
||||
@@ -109,6 +123,7 @@ export interface LongLiveTokenInDB {
|
||||
user: PrivateUser;
|
||||
}
|
||||
export interface PrivateUser {
|
||||
id: string;
|
||||
username?: string;
|
||||
fullName?: string;
|
||||
email: string;
|
||||
@@ -116,11 +131,9 @@ export interface PrivateUser {
|
||||
admin?: boolean;
|
||||
group: string;
|
||||
advanced?: boolean;
|
||||
favoriteRecipes?: string[];
|
||||
canInvite?: boolean;
|
||||
canManage?: boolean;
|
||||
canOrganize?: boolean;
|
||||
id: string;
|
||||
groupId: string;
|
||||
groupSlug: string;
|
||||
tokens?: LongLiveTokenOut[];
|
||||
@@ -129,6 +142,9 @@ export interface PrivateUser {
|
||||
loginAttemps?: number;
|
||||
lockedAt?: string;
|
||||
}
|
||||
export interface OIDCRequest {
|
||||
id_token: string;
|
||||
}
|
||||
export interface PasswordResetToken {
|
||||
token: string;
|
||||
}
|
||||
@@ -163,9 +179,17 @@ export interface UpdateGroup {
|
||||
id: string;
|
||||
slug: string;
|
||||
categories?: CategoryBase[];
|
||||
webhooks?: unknown[];
|
||||
webhooks?: CreateWebhook[];
|
||||
}
|
||||
export interface CreateWebhook {
|
||||
enabled?: boolean;
|
||||
name?: string;
|
||||
url?: string;
|
||||
webhookType?: WebhookType & string;
|
||||
scheduledTime: string;
|
||||
}
|
||||
export interface UserBase {
|
||||
id?: string;
|
||||
username?: string;
|
||||
fullName?: string;
|
||||
email: string;
|
||||
@@ -173,65 +197,12 @@ export interface UserBase {
|
||||
admin?: boolean;
|
||||
group?: string;
|
||||
advanced?: boolean;
|
||||
favoriteRecipes?: string[];
|
||||
canInvite?: boolean;
|
||||
canManage?: boolean;
|
||||
canOrganize?: boolean;
|
||||
}
|
||||
export interface UserFavorites {
|
||||
username?: string;
|
||||
fullName?: string;
|
||||
email: string;
|
||||
authMethod?: AuthMethod & string;
|
||||
admin?: boolean;
|
||||
group?: string;
|
||||
advanced?: boolean;
|
||||
favoriteRecipes?: RecipeSummary[];
|
||||
canInvite?: boolean;
|
||||
canManage?: boolean;
|
||||
canOrganize?: boolean;
|
||||
}
|
||||
export interface RecipeSummary {
|
||||
id?: string;
|
||||
userId?: string;
|
||||
groupId?: string;
|
||||
name?: string;
|
||||
slug?: string;
|
||||
image?: unknown;
|
||||
recipeYield?: string;
|
||||
totalTime?: string;
|
||||
prepTime?: string;
|
||||
cookTime?: string;
|
||||
performTime?: string;
|
||||
description?: string;
|
||||
recipeCategory?: RecipeCategory[];
|
||||
tags?: RecipeTag[];
|
||||
tools?: RecipeTool[];
|
||||
rating?: number;
|
||||
orgURL?: string;
|
||||
dateAdded?: string;
|
||||
dateUpdated?: string;
|
||||
createdAt?: string;
|
||||
updateAt?: string;
|
||||
lastMade?: string;
|
||||
}
|
||||
export interface RecipeCategory {
|
||||
id?: string;
|
||||
name: string;
|
||||
slug: string;
|
||||
}
|
||||
export interface RecipeTag {
|
||||
id?: string;
|
||||
name: string;
|
||||
slug: string;
|
||||
}
|
||||
export interface RecipeTool {
|
||||
id: string;
|
||||
name: string;
|
||||
slug: string;
|
||||
onHand?: boolean;
|
||||
}
|
||||
export interface UserIn {
|
||||
id?: string;
|
||||
username?: string;
|
||||
fullName?: string;
|
||||
email: string;
|
||||
@@ -239,15 +210,32 @@ export interface UserIn {
|
||||
admin?: boolean;
|
||||
group?: string;
|
||||
advanced?: boolean;
|
||||
favoriteRecipes?: string[];
|
||||
canInvite?: boolean;
|
||||
canManage?: boolean;
|
||||
canOrganize?: boolean;
|
||||
password: string;
|
||||
}
|
||||
export interface UserRatingCreate {
|
||||
recipeId: string;
|
||||
rating?: number;
|
||||
isFavorite?: boolean;
|
||||
userId: string;
|
||||
}
|
||||
export interface UserRatingOut {
|
||||
recipeId: string;
|
||||
rating?: number;
|
||||
isFavorite?: boolean;
|
||||
userId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface UserRatingSummary {
|
||||
recipeId: string;
|
||||
rating?: number;
|
||||
isFavorite?: boolean;
|
||||
}
|
||||
export interface UserSummary {
|
||||
id: string;
|
||||
fullName?: string;
|
||||
fullName: string;
|
||||
}
|
||||
export interface ValidateResetToken {
|
||||
token: string;
|
||||
|
||||
14
frontend/lib/api/user/group-recipe-actions.ts
Normal file
14
frontend/lib/api/user/group-recipe-actions.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { BaseCRUDAPI } from "../base/base-clients";
|
||||
import { CreateGroupRecipeAction, GroupRecipeActionOut } from "~/lib/api/types/group";
|
||||
|
||||
const prefix = "/api";
|
||||
|
||||
const routes = {
|
||||
groupRecipeActions: `${prefix}/groups/recipe-actions`,
|
||||
groupRecipeActionsId: (id: string | number) => `${prefix}/groups/recipe-actions/${id}`,
|
||||
};
|
||||
|
||||
export class GroupRecipeActionsAPI extends BaseCRUDAPI<CreateGroupRecipeAction, GroupRecipeActionOut> {
|
||||
baseRoute = routes.groupRecipeActions;
|
||||
itemRoute = routes.groupRecipeActionsId;
|
||||
}
|
||||
@@ -1,26 +1,34 @@
|
||||
import { BaseCRUDAPI } from "../base/base-clients";
|
||||
import { QueryValue, route } from "~/lib/api/base/route";
|
||||
import { PaginationData, RequestResponse } from "~/lib/api/types/non-generated";
|
||||
import { PaginationData } from "~/lib/api/types/non-generated";
|
||||
import {
|
||||
ChangePassword,
|
||||
DeleteTokenResponse,
|
||||
GroupInDB,
|
||||
LongLiveTokenIn,
|
||||
LongLiveTokenOut,
|
||||
ResetPassword,
|
||||
UserBase,
|
||||
UserFavorites,
|
||||
UserIn,
|
||||
UserOut,
|
||||
UserRatingOut,
|
||||
UserRatingSummary,
|
||||
UserSummary,
|
||||
} from "~/lib/api/types/user";
|
||||
|
||||
export interface UserRatingsSummaries {
|
||||
ratings: UserRatingSummary[];
|
||||
}
|
||||
|
||||
export interface UserRatingsOut {
|
||||
ratings: UserRatingOut[];
|
||||
}
|
||||
|
||||
const prefix = "/api";
|
||||
|
||||
const routes = {
|
||||
groupUsers: `${prefix}/users/group-users`,
|
||||
usersSelf: `${prefix}/users/self`,
|
||||
groupsSelf: `${prefix}/users/self/group`,
|
||||
ratingsSelf: `${prefix}/users/self/ratings`,
|
||||
passwordReset: `${prefix}/users/reset-password`,
|
||||
passwordChange: `${prefix}/users/password`,
|
||||
users: `${prefix}/users`,
|
||||
@@ -30,6 +38,10 @@ const routes = {
|
||||
usersId: (id: string) => `${prefix}/users/${id}`,
|
||||
usersIdFavorites: (id: string) => `${prefix}/users/${id}/favorites`,
|
||||
usersIdFavoritesSlug: (id: string, slug: string) => `${prefix}/users/${id}/favorites/${slug}`,
|
||||
usersIdRatings: (id: string) => `${prefix}/users/${id}/ratings`,
|
||||
usersIdRatingsSlug: (id: string, slug: string) => `${prefix}/users/${id}/ratings/${slug}`,
|
||||
usersSelfFavoritesId: (id: string) => `${prefix}/users/self/favorites/${id}`,
|
||||
usersSelfRatingsId: (id: string) => `${prefix}/users/self/ratings/${id}`,
|
||||
|
||||
usersApiTokens: `${prefix}/users/api-tokens`,
|
||||
usersApiTokensTokenId: (token_id: string | number) => `${prefix}/users/api-tokens/${token_id}`,
|
||||
@@ -43,10 +55,6 @@ export class UserApi extends BaseCRUDAPI<UserIn, UserOut, UserBase> {
|
||||
return await this.requests.get<PaginationData<UserSummary>>(route(routes.groupUsers, { page, perPage, ...params }));
|
||||
}
|
||||
|
||||
async getSelfGroup(): Promise<RequestResponse<GroupInDB>> {
|
||||
return await this.requests.get(routes.groupsSelf, {});
|
||||
}
|
||||
|
||||
async addFavorite(id: string, slug: string) {
|
||||
return await this.requests.post(routes.usersIdFavoritesSlug(id, slug), {});
|
||||
}
|
||||
@@ -56,7 +64,23 @@ export class UserApi extends BaseCRUDAPI<UserIn, UserOut, UserBase> {
|
||||
}
|
||||
|
||||
async getFavorites(id: string) {
|
||||
return await this.requests.get<UserFavorites>(routes.usersIdFavorites(id));
|
||||
return await this.requests.get<UserRatingsOut>(routes.usersIdFavorites(id));
|
||||
}
|
||||
|
||||
async getSelfFavorites() {
|
||||
return await this.requests.get<UserRatingsSummaries>(routes.ratingsSelf);
|
||||
}
|
||||
|
||||
async getRatings(id: string) {
|
||||
return await this.requests.get<UserRatingsOut>(routes.usersIdRatings(id));
|
||||
}
|
||||
|
||||
async setRating(id: string, slug: string, rating: number | null, isFavorite: boolean | null) {
|
||||
return await this.requests.post(routes.usersIdRatingsSlug(id, slug), { rating, isFavorite });
|
||||
}
|
||||
|
||||
async getSelfRatings() {
|
||||
return await this.requests.get<UserRatingsSummaries>(routes.ratingsSelf);
|
||||
}
|
||||
|
||||
async changePassword(changePassword: ChangePassword) {
|
||||
|
||||
@@ -156,6 +156,7 @@ export default {
|
||||
propertyName: "access_token",
|
||||
},
|
||||
refresh: { url: "api/auth/refresh", method: "post" },
|
||||
logout: { url: "api/auth/logout", method: "post" },
|
||||
user: { url: "api/users/self", method: "get" },
|
||||
},
|
||||
},
|
||||
@@ -260,6 +261,12 @@ export default {
|
||||
"en-GB": require("./lang/dateTimeFormats/en-GB.json"),
|
||||
"fi-FI": require("./lang/dateTimeFormats/fi-FI.json"),
|
||||
"vi-VN": require("./lang/dateTimeFormats/vi-VN.json"),
|
||||
"sl-SI": require("./lang/dateTimeFormats/sl-SI.json"),
|
||||
"lv-LV": require("./lang/dateTimeFormats/lv-LV.json"),
|
||||
"is-IS": require("./lang/dateTimeFormats/is-IS.json"),
|
||||
"gl-ES": require("./lang/dateTimeFormats/gl-ES.json"),
|
||||
"lt-LT": require("./lang/dateTimeFormats/lt-LT.json"),
|
||||
"hr-HR": require("./lang/dateTimeFormats/hr-HR.json"),
|
||||
// END: DATE_LOCALES
|
||||
},
|
||||
fallbackLocale: "en-US",
|
||||
|
||||
@@ -22,10 +22,6 @@
|
||||
<template #title> {{ $t("admin.maintenance.page-title") }} </template>
|
||||
</BasePageTitle>
|
||||
|
||||
<div class="d-flex justify-end">
|
||||
<ButtonLink to="/admin/maintenance/logs" text="Logs" :icon="$globals.icons.file" />
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<BaseCardSectionTitle class="pb-0" :icon="$globals.icons.wrench" :title="$tc('admin.maintenance.summary-title')">
|
||||
</BaseCardSectionTitle>
|
||||
@@ -110,7 +106,6 @@ export default defineComponent({
|
||||
|
||||
const infoResults = ref<MaintenanceSummary>({
|
||||
dataDirSize: i18n.tc("about.unknown-version"),
|
||||
logFileSize: i18n.tc("about.unknown-version"),
|
||||
cleanableDirs: 0,
|
||||
cleanableImages: 0,
|
||||
});
|
||||
@@ -121,7 +116,6 @@ export default defineComponent({
|
||||
|
||||
infoResults.value = data ?? {
|
||||
dataDirSize: i18n.tc("about.unknown-version"),
|
||||
logFileSize: i18n.tc("about.unknown-version"),
|
||||
cleanableDirs: 0,
|
||||
cleanableImages: 0,
|
||||
};
|
||||
@@ -129,17 +123,12 @@ export default defineComponent({
|
||||
state.fetchingInfo = false;
|
||||
}
|
||||
|
||||
|
||||
const info = computed(() => {
|
||||
return [
|
||||
{
|
||||
name: i18n.t("admin.maintenance.info-description-data-dir-size"),
|
||||
value: infoResults.value.dataDirSize,
|
||||
},
|
||||
{
|
||||
name: i18n.t("admin.maintenance.info-description-log-file-size"),
|
||||
value: infoResults.value.logFileSize,
|
||||
},
|
||||
{
|
||||
name: i18n.t("admin.maintenance.info-description-cleanable-directories"),
|
||||
value: infoResults.value.cleanableDirs,
|
||||
@@ -184,12 +173,6 @@ export default defineComponent({
|
||||
// ==========================================================================
|
||||
// Actions
|
||||
|
||||
async function handleDeleteLogFile() {
|
||||
state.actionLoading = true;
|
||||
await adminApi.maintenance.cleanLogFile();
|
||||
state.actionLoading = false;
|
||||
}
|
||||
|
||||
async function handleCleanDirectories() {
|
||||
state.actionLoading = true;
|
||||
await adminApi.maintenance.cleanRecipeFolders();
|
||||
@@ -209,11 +192,6 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
const actions = [
|
||||
{
|
||||
name: i18n.t("admin.maintenance.action-delete-log-files-name"),
|
||||
handler: handleDeleteLogFile,
|
||||
subtitle: i18n.t("admin.maintenance.action-delete-log-files-description"),
|
||||
},
|
||||
{
|
||||
name: i18n.t("admin.maintenance.action-clean-directories-name"),
|
||||
handler: handleCleanDirectories,
|
||||
|
||||
@@ -1,109 +0,0 @@
|
||||
<template>
|
||||
<v-container fluid>
|
||||
<BaseCardSectionTitle class="pb-0" :icon="$globals.icons.cog" :title="$t('admin.maintenance.summary-title')">
|
||||
</BaseCardSectionTitle>
|
||||
<div class="mb-6 ml-2 d-flex" style="gap: 0.8rem">
|
||||
<BaseButton color="info" :loading="state.loading" @click="refreshLogs">
|
||||
<template #icon> {{ $globals.icons.refreshCircle }} </template>
|
||||
{{ $t("admin.maintenance.logs-action-refresh") }}
|
||||
</BaseButton>
|
||||
<AppButtonCopy :copy-text="copyText" />
|
||||
<div class="ml-auto" style="max-width: 150px">
|
||||
<v-text-field
|
||||
v-model="state.lines"
|
||||
type="number"
|
||||
:label="$t('admin.maintenance.logs-tail-lines-label')"
|
||||
hide-details
|
||||
dense
|
||||
outlined
|
||||
>
|
||||
</v-text-field>
|
||||
</div>
|
||||
</div>
|
||||
<v-card outlined>
|
||||
<v-virtual-scroll
|
||||
v-scroll="scrollOptions"
|
||||
:bench="20"
|
||||
:items="logs.logs"
|
||||
height="800"
|
||||
item-height="20"
|
||||
class="keep-whitespace log-container"
|
||||
>
|
||||
<template #default="{ item }">
|
||||
<p class="log-text">
|
||||
{{ item }}
|
||||
</p>
|
||||
</template>
|
||||
</v-virtual-scroll>
|
||||
</v-card>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, ref, computed, onMounted, reactive } from "@nuxtjs/composition-api";
|
||||
import { useAdminApi } from "~/composables/api";
|
||||
|
||||
export default defineComponent({
|
||||
layout: "admin",
|
||||
setup() {
|
||||
const adminApi = useAdminApi();
|
||||
|
||||
const state = reactive({
|
||||
loading: false,
|
||||
lines: 500,
|
||||
autoRefresh: true,
|
||||
});
|
||||
|
||||
const scrollOptions = reactive({
|
||||
enable: true,
|
||||
always: false,
|
||||
smooth: false,
|
||||
notSmoothOnInit: true,
|
||||
});
|
||||
|
||||
const logs = ref({
|
||||
logs: [] as string[],
|
||||
});
|
||||
|
||||
async function refreshLogs() {
|
||||
state.loading = true;
|
||||
const { data } = await adminApi.maintenance.logs(state.lines);
|
||||
if (data) {
|
||||
logs.value = data;
|
||||
}
|
||||
state.loading = false;
|
||||
}
|
||||
onMounted(() => {
|
||||
refreshLogs();
|
||||
});
|
||||
|
||||
const copyText = computed(() => {
|
||||
return logs.value.logs.join("") || "";
|
||||
});
|
||||
return {
|
||||
copyText,
|
||||
scrollOptions,
|
||||
state,
|
||||
refreshLogs,
|
||||
logs,
|
||||
};
|
||||
},
|
||||
head() {
|
||||
return {
|
||||
title: this.$t("admin.maintenance.logs-page-title") as string,
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.log-text {
|
||||
font: 0.8rem Inconsolata, monospace;
|
||||
}
|
||||
.log-container {
|
||||
background-color: var(--v-background-base) !important;
|
||||
}
|
||||
.keep-whitespace {
|
||||
white-space: pre;
|
||||
}
|
||||
</style>
|
||||
@@ -2,35 +2,30 @@
|
||||
<v-container v-if="recipe">
|
||||
<v-container>
|
||||
<v-alert dismissible border="left" colored-border type="warning" elevation="2" :icon="$globals.icons.alert">
|
||||
<b>Experimental Feature</b>
|
||||
<b>{{ $tc("banner-experimental.title") }}</b>
|
||||
<div>
|
||||
Mealie can use natural language processing to attempt to parse and create units, and foods for your Recipe
|
||||
ingredients. This is experimental and may not work as expected. If you choose to not use the parsed results
|
||||
you can select cancel and your changes will not be saved.
|
||||
{{ $tc("recipe.parser.experimental-alert-text") }}
|
||||
</div>
|
||||
</v-alert>
|
||||
|
||||
<BaseCardSectionTitle title="Ingredients Processor">
|
||||
To use the ingredient parser, click the "Parse All" button and the process will start. When the processed
|
||||
ingredients are available, you can look through the items and verify that they were parsed correctly. The models
|
||||
confidence score is displayed on the right of the title item. This is an average of all scores and may not be
|
||||
wholely accurate.
|
||||
<BaseCardSectionTitle :title="$tc('recipe.parser.ingredient-parser')">
|
||||
<div class="mt-4">{{ $tc("recipe.parser.explanation") }}</div>
|
||||
|
||||
<div class="my-4">
|
||||
Alerts will be displayed if a matching foods or unit is found but does not exists in the database.
|
||||
{{ $tc("recipe.parser.alerts-explainer") }}
|
||||
</div>
|
||||
<div class="d-flex align-center mb-n4">
|
||||
<div class="mb-4">Select Parser</div>
|
||||
<div class="mb-4">{{ $tc("recipe.parser.select-parser") }}</div>
|
||||
<BaseOverflowButton
|
||||
v-model="parser"
|
||||
btn-class="mx-2 mb-4"
|
||||
:items="[
|
||||
{
|
||||
text: 'Natural Language Processor ',
|
||||
text: $tc('recipe.parser.natural-language-processor'),
|
||||
value: 'nlp',
|
||||
},
|
||||
{
|
||||
text: 'Brute Parser',
|
||||
text: $tc('recipe.parser.brute-parser'),
|
||||
value: 'brute',
|
||||
},
|
||||
]"
|
||||
@@ -42,9 +37,9 @@
|
||||
<BaseButton cancel class="mr-auto" @click="$router.go(-1)"></BaseButton>
|
||||
<BaseButton color="info" @click="fetchParsed">
|
||||
<template #icon> {{ $globals.icons.foods }}</template>
|
||||
Parse All
|
||||
{{ $tc("recipe.parser.parse-all") }}
|
||||
</BaseButton>
|
||||
<BaseButton save @click="saveAll"> Save All </BaseButton>
|
||||
<BaseButton save @click="saveAll" />
|
||||
</div>
|
||||
|
||||
<v-expansion-panels v-model="panels" multiple>
|
||||
@@ -145,6 +140,8 @@ export default defineComponent({
|
||||
const slug = route.value.params.slug;
|
||||
const api = useUserApi();
|
||||
|
||||
const { i18n } = useContext();
|
||||
|
||||
const { recipe, loading } = useRecipe(slug);
|
||||
|
||||
invoke(async () => {
|
||||
@@ -170,13 +167,15 @@ export default defineComponent({
|
||||
if (unitError || foodError) {
|
||||
if (unitError) {
|
||||
if (ing?.ingredient?.unit?.name) {
|
||||
unitErrorMessage = `Create missing unit '${ing?.ingredient?.unit?.name || "No unit"}'`;
|
||||
const unit = ing.ingredient.unit.name || i18n.tc("recipe.parser.no-unit");
|
||||
unitErrorMessage = i18n.t("recipe.parser.missing-unit", { unit }).toString();
|
||||
}
|
||||
}
|
||||
|
||||
if (foodError) {
|
||||
if (ing?.ingredient?.food?.name) {
|
||||
foodErrorMessage = `Create missing food '${ing.ingredient.food.name || "No food"}'?`;
|
||||
const food = ing.ingredient.food.name || i18n.tc("recipe.parser.no-food");
|
||||
foodErrorMessage = i18n.t("recipe.parser.missing-food", { food }).toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -364,7 +363,7 @@ export default defineComponent({
|
||||
},
|
||||
head() {
|
||||
return {
|
||||
title: "Parser",
|
||||
title: this.$tc("recipe.parser.ingredient-parser"),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -41,6 +41,7 @@ export default defineComponent({
|
||||
const { i18n } = useContext();
|
||||
const buttonLookup: { [key: string]: string } = {
|
||||
recipes: i18n.tc("general.recipes"),
|
||||
recipeActions: i18n.tc("recipe.recipe-actions"),
|
||||
foods: i18n.tc("general.foods"),
|
||||
units: i18n.tc("general.units"),
|
||||
labels: i18n.tc("data-pages.labels.labels"),
|
||||
@@ -56,6 +57,11 @@ export default defineComponent({
|
||||
text: i18n.t("general.recipes"),
|
||||
value: "new",
|
||||
to: "/group/data/recipes",
|
||||
},
|
||||
{
|
||||
text: i18n.t("recipe.recipe-actions"),
|
||||
value: "new",
|
||||
to: "/group/data/recipe-actions",
|
||||
divider: true,
|
||||
},
|
||||
{
|
||||
@@ -92,7 +98,13 @@ export default defineComponent({
|
||||
]);
|
||||
|
||||
const buttonText = computed(() => {
|
||||
const last = route.value.path.split("/").pop();
|
||||
const last = route.value.path
|
||||
.split("/")
|
||||
.pop()
|
||||
// convert hypenated-values to camelCase
|
||||
?.replace(/-([a-z])/g, function (g) {
|
||||
return g[1].toUpperCase();
|
||||
})
|
||||
|
||||
if (last) {
|
||||
return buttonLookup[last];
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user