Compare commits

...

123 Commits

Author SHA1 Message Date
mealie-commit-bot[bot]
168ac79daa chore: bump version to v3.10.1 2026-02-03 01:04:49 +00:00
Hayden
22296277a8 chore(l10n): New Crowdin updates (#6994) 2026-02-03 00:51:49 +00:00
Michael Genson
6e006458be fix: Button overflow on main page filters (#6992) 2026-02-02 18:44:36 -06:00
Michael Genson
76a2fea076 docs: Typo (#6993) 2026-02-02 16:20:41 -06:00
mealie-commit-bot[bot]
3de4024619 chore: bump version to v3.10.0 2026-02-02 18:33:02 +00:00
renovate[bot]
194771653d chore(deps): pin dependency freezegun to ==1.5.5 (#6991)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-02 18:18:36 +00:00
renovate[bot]
24aa8f3525 fix(deps): update dependency orjson to v3.11.7 (#6989)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-02 17:54:33 +00:00
Michael Genson
fb8e318739 fix: Flaky $NOW tests (#6990) 2026-02-02 11:24:13 -06:00
Michael Genson
6255c71609 docs: Misc. cleanup (#6988) 2026-02-02 10:47:23 -06:00
Hayden
f2d1569488 chore(l10n): New Crowdin updates (#6987) 2026-02-02 11:18:56 +00:00
Michael Genson
987c7209fc feat: Query relative dates (#6984) 2026-02-01 21:36:46 -06:00
Hayden
f6dbd1f1f1 chore(l10n): New Crowdin updates (#6983) 2026-02-01 23:23:28 +00:00
Michael Genson
d30118899d fix: Re-enable some style tags (#6982) 2026-02-01 16:24:57 -06:00
Michael Genson
af241dad57 feat: Add range of dates to shopping list from meal planner (#6981) 2026-02-01 15:58:03 -06:00
renovate[bot]
b86de79c6f chore(deps): update dependency rich to v14.3.2 (#6980)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-01 20:28:33 +00:00
Hayden
86e86f8c81 chore(l10n): New Crowdin updates (#6979) 2026-02-01 10:58:51 +00:00
mealie-actions[bot]
d795f91938 chore(l10n): Crowdin locale sync (#6977)
Co-authored-by: GitHub Action <action@github.com>
2026-02-01 04:42:54 +00:00
Michael Genson
a59511cc81 dev: Switch to Mealie bot for auto-merging (#6978) 2026-01-31 22:42:03 -06:00
Michael Genson
a5d4cae6d0 dev: Switch approver for automated i18n merges (#6976) 2026-01-31 21:46:13 -06:00
Michael Genson
2987cf8ba6 dev: Allow locale sync path in auto merge (#6974) 2026-01-31 21:37:31 -06:00
Michael Genson
46b46978ff dev: Increase locale merge limit to 300 and allow PRs from Mealie bot (#6972) 2026-01-31 21:31:52 -06:00
Michael Genson
12857883a9 dev: Fix token vars (#6970) 2026-01-31 21:24:58 -06:00
Michael Genson
60fff3b5b8 dev: Switch to bot token for locale sync (#6969) 2026-01-31 21:21:07 -06:00
Hayden
b42e888929 chore(l10n): New Crowdin updates (#6967) 2026-02-01 00:47:50 +00:00
Michael Genson
570d6f1433 feat: Migrate OpenAI implementation to use structured outputs (#6964) 2026-01-31 11:57:05 -06:00
Morgan
dcf410739e fix: service-worker precache manifest entries not generated correctly (#6815) 2026-01-31 15:51:11 +00:00
Michael Genson
1929d630a1 fix: Remove deprecated warning from shopping list editor (#6963) 2026-01-31 09:44:34 -06:00
Michael Genson
c4c7bf2aed fix: Disable context hover (#6962) 2026-01-31 09:40:31 -06:00
Hayden
47034d18c5 chore(l10n): New Crowdin updates (#6960) 2026-01-31 15:09:56 +00:00
renovate[bot]
7ebe491f74 fix(deps): update dependency ingredient-parser-nlp to v2.5.0 (#6961)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-31 14:52:15 +00:00
Arsène Reymond
719bd89eb1 feat: Improve recipe assets preview (#6602)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2026-01-31 14:48:42 +00:00
Hayden
9030c7e6b9 chore(l10n): New Crowdin updates (#6959) 2026-01-30 23:15:01 +00:00
renovate[bot]
0202cc7ef8 fix(deps): update dependency pyjwt to v2.11.0 (#6958)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-30 20:53:19 +00:00
Patrick Lehner (he/him)
381ac9bfde dev: Improve caching in taskfile (#6798) 2026-01-30 20:52:44 +00:00
Patrick Lehner (he/him)
e9fe71c1b7 dev: Add tasks for e2e tests (#6797)
Co-authored-by: Michael Genson <genson.michael@gmail.com>
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2026-01-30 14:51:40 -06:00
Arsène Reymond
79bbc20cd6 fix: recipe context menu (#6782) 2026-01-30 20:08:49 +00:00
Arsène Reymond
c7be4a452a fix: disable invitations when password login is disabled (#6781) 2026-01-30 20:05:40 +00:00
Imanuel
731ee8ae3d fix: sub-recipes in multi group setup (#6652) (#6663) 2026-01-30 18:50:08 +00:00
Imanuel
c7ae67e7cd feat: Customizable OpenAI prompts (#5146) (#6588)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
Co-authored-by: Michael Genson <genson.michael@gmail.com>
2026-01-30 12:00:03 -06:00
Gtt1229
e83891e3ca feat: Added Option to Import Recipe Category During Recipe Import (#6523)
Co-authored-by: Michael Genson <genson.michael@gmail.com>
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2026-01-30 11:18:15 -06:00
Michael Genson
e3e45c534e dev: Skip Trivy on merge queue (#6957) 2026-01-30 16:47:30 +00:00
Stevie Howard
279cf65673 fix: Seed data - en-US only - correct [some] plural names and add [some] accented characters (#6405)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2026-01-30 16:30:56 +00:00
Fjodor42
cb44ecf394 feat: Add "sprig" as a unit. (#6934)
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2026-01-30 16:03:41 +00:00
Michael Genson
920eeb26d6 dev: Bunch of GH workflow fixes (#6956) 2026-01-30 15:58:49 +00:00
Hayden
9738d9f363 fix: dispose AlchemyExporter engine after restore completes (#6942) 2026-01-30 15:54:38 +00:00
CodeFaux
37e6123f9e fix: Keep ingredient headers in cook mode (#6946)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2026-01-30 15:36:04 +00:00
Hayden
0a2cabb348 chore(l10n): New Crowdin updates (#6954) 2026-01-30 15:19:02 +00:00
Michael Genson
447a1fb239 dev: Enable CI on merge queues (#6955) 2026-01-30 09:18:52 -06:00
Hayden
b5358896eb fix: use GITHUB_TOKEN for auto-merge to respect CI checks (#6953) 2026-01-30 03:26:10 +00:00
Jérôme
78fbbf0264 fix: correct global scroll strategy to prevent menu fixation (#6577)
Co-authored-by: Jerome <jerome.roth@imt-atlantique.net>
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2026-01-30 02:27:45 +00:00
Hayden
a33d8204df chore(l10n): New Crowdin updates (#6949)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2026-01-30 02:10:24 +00:00
Hayden
c8046bbdf0 chore: add workflow to auto-merge l10n PRs (#6948)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2026-01-30 02:05:56 +00:00
renovate[bot]
329ad4d8ed fix(deps): update dependency alembic to v1.18.3 (#6945)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-30 00:43:47 +00:00
renovate[bot]
4ccf649aa1 chore(deps): update dependency setuptools to v80.10.2 (#6930)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-29 18:32:44 -06:00
renovate[bot]
5994328a8b fix(deps): update dependency orjson to v3.11.6 (#6952)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-29 13:42:53 -06:00
Hayden
15b5917054 feat: add discard confirmation dialog for recipe editor (#6941)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2026-01-28 23:09:32 -06:00
Hayden
e48b150f7c chore(l10n): New Crowdin updates (#6944)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2026-01-28 22:57:04 -06:00
renovate[bot]
adbc66316f chore(deps): update dependency coverage to v7.13.2 (#6927)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-28 22:54:52 -06:00
Hayden
0dc7337972 chore(l10n): New Crowdin updates (#6938) 2026-01-28 19:14:41 +07:00
renovate[bot]
58d4b95a56 fix(deps): update dependency openai to v2.16.0 (#6937)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-27 20:51:07 -06:00
Hayden
0e74bc6cd0 chore(l10n): New Crowdin updates (#6936) 2026-01-27 20:29:06 +00:00
Hayden
4866eec62d chore(l10n): New Crowdin updates (#6935) 2026-01-26 18:34:52 -06:00
github-actions[bot]
c0d659724a chore(auto): Update pre-commit hooks (#6932)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2026-01-26 16:06:35 +00:00
Hayden
5f0996734a chore(l10n): New Crowdin updates (#6933) 2026-01-26 18:09:28 +07:00
Hayden
8cd0286ca1 chore(l10n): New Crowdin updates (#6929) 2026-01-25 19:49:14 -06:00
renovate[bot]
f214e8843a fix(deps): update dependency python-multipart to v0.0.22 (#6926) 2026-01-25 15:30:40 +00:00
github-actions[bot]
66fea60341 chore(l10n): Crowdin locale sync (#6924) 2026-01-25 15:19:23 +00:00
Hayden
69b4684bce chore(l10n): New Crowdin updates (#6925) 2026-01-25 18:46:24 +07:00
renovate[bot]
b75d6812a3 chore(deps): update dependency rich to v14.3.1 (#6923) 2026-01-24 18:04:27 -06:00
Hayden
ed000c2cc6 chore(l10n): New Crowdin updates (#6922) 2026-01-24 22:45:45 +00:00
Alexandre Eberhardt
d43a2020b3 docs: Add an info callout about client-side cookies. (#6830) 2026-01-24 20:33:19 +00:00
Patrick Lehner (he/him)
ff5e65b323 fix: Make 'auto-search' toggle change color to indicate state (#6809) 2026-01-24 20:21:53 +00:00
Hayden
e1b07a250b chore(l10n): New Crowdin updates (#6912) 2026-01-24 20:07:45 +00:00
renovate[bot]
e68486a0e1 chore(deps): update dependency rich to v14.3.0 (#6919)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-24 13:56:54 -06:00
renovate[bot]
271915ee23 chore(deps): update dependency types-python-dateutil to v2.9.0.20260124 (#6913)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-24 13:43:38 -06:00
renovate[bot]
a3d64c0761 fix(deps): update dependency pillow-heif to v1.2.0 (#6910)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-23 08:50:03 -06:00
Hayden
73c664649d chore(l10n): New Crowdin updates (#6911) 2026-01-23 18:08:07 +07:00
renovate[bot]
d887e68228 chore(deps): update dependency ruff to v0.14.14 (#6909)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-22 19:59:48 -06:00
Hayden
a8d3ed3310 chore(l10n): New Crowdin updates (#6908) 2026-01-22 15:43:48 -06:00
Hayden
00bd45c8f1 chore(l10n): New Crowdin updates (#6905) 2026-01-22 14:35:50 +00:00
renovate[bot]
05003a5c6f fix(deps): update dependency sqlalchemy to v2.0.46 (#6903)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-22 03:50:27 +00:00
renovate[bot]
e2be09b5d3 chore(deps): update dependency setuptools to v80.10.1 (#6901)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-21 21:39:54 -06:00
github-actions[bot]
b81e0ac03b chore(l10n): Crowdin locale sync (#6891)
Co-authored-by: GitHub Action <action@github.com>
2026-01-22 03:24:04 +00:00
renovate[bot]
c5d822cded chore(deps): update node.js to b2b2184 (#6879)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-21 21:13:45 -06:00
Hayden
0fc66fee9a chore(l10n): New Crowdin updates (#6888) 2026-01-21 03:44:18 +00:00
github-actions[bot]
612c07e6f3 chore(auto): Update pre-commit hooks (#6895) 2026-01-21 02:52:58 +00:00
renovate[bot]
a0ac2923d6 fix(deps): update dependency apprise to v1.9.7 (#6898) 2026-01-20 20:42:15 -06:00
Hayden
7107c08021 chore(l10n): New Crowdin updates (#6886) 2026-01-16 17:13:20 -06:00
renovate[bot]
a0e336edcb fix(deps): update dependency alembic to v1.18.1 (#6878)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-16 13:29:38 -06:00
Hayden
3e306638d0 fix: prevent XSS via javascript: URIs in recipe actions (#6885) 2026-01-16 12:19:27 -06:00
Patrick Lehner (he/him)
a72641b32e feat: Use toggle button for switching any/all mode for search filters (#6833) 2026-01-16 15:52:11 +00:00
renovate[bot]
f4ed9d92bf chore(deps): update dependency ruff to v0.14.13 (#6881)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-16 09:38:32 -06:00
Hayden
5ae35c3500 chore(l10n): New Crowdin updates (#6870) 2026-01-14 23:36:27 +00:00
renovate[bot]
08666e6c21 chore(deps): update node.js to 0ab63ca (#6872) 2026-01-14 17:26:34 -06:00
Hayden
5ae530a637 chore(l10n): New Crowdin updates (#6867) 2026-01-12 14:44:13 -06:00
github-actions[bot]
2b07497486 chore(auto): Update pre-commit hooks (#6866)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2026-01-12 18:34:46 +00:00
github-actions[bot]
3b65642325 chore(l10n): Crowdin locale sync (#6862)
Co-authored-by: GitHub Action <action@github.com>
2026-01-12 18:20:16 +00:00
Hayden
fdd1057e79 chore(l10n): New Crowdin updates (#6864) 2026-01-12 12:10:00 -06:00
Hayden
f1afebcc04 chore(l10n): New Crowdin updates (#6863) 2026-01-11 17:00:15 +07:00
Hayden
e711be7efa chore(l10n): New Crowdin updates (#6861) 2026-01-10 19:51:06 +00:00
renovate[bot]
ec94b8179c fix(deps): update dependency openai to v2.15.0 (#6859)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-09 22:32:27 -06:00
renovate[bot]
a7c1d6f486 fix(deps): update dependency alembic to v1.18.0 (#6858)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-10 03:54:14 +00:00
renovate[bot]
df0b792c52 chore(deps): update dependency ruff to v0.14.11 (#6852)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-09 21:43:04 -06:00
Hayden
1f5054fcbd chore(l10n): New Crowdin updates (#6843) 2026-01-10 03:24:28 +00:00
renovate[bot]
ca483b9cbe chore(deps): update dependency types-requests to v2.32.4.20260107 (#6846) 2026-01-09 21:14:02 -06:00
Mike Nguyen
03dc459162 docs: fix authentik oidc link (#6851) 2026-01-08 20:47:15 +00:00
Michael Genson
cf8f5fe2a2 docs: Fix typo and remove unused tip (#6849) 2026-01-07 14:31:57 -06:00
Hayden
760350ef88 chore(l10n): New Crowdin updates (#6840) 2026-01-05 23:47:44 -06:00
Michael Genson
706d4ee0b5 fix: Coerce null servings into 0 servings (#6839) 2026-01-05 17:49:34 -06:00
Patrick Lehner (he/him)
5fd8545cbe fix: Tags can't be renamed (#6835) 2026-01-05 09:46:48 -06:00
Hayden
3397c06db2 chore(l10n): New Crowdin updates (#6832) 2026-01-04 20:00:39 -06:00
Hayden
22df7a1ec7 chore(l10n): New Crowdin updates (#6827) 2026-01-04 09:58:19 -06:00
renovate[bot]
e87b0c75b6 fix(deps): update dependency pillow to v12.1.0 (#6816)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-03 23:34:36 -06:00
Hayden
b406b7fa16 chore(l10n): New Crowdin updates (#6806)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2026-01-04 03:18:35 +00:00
github-actions[bot]
7114ed1122 chore(l10n): Crowdin locale sync (#6825)
Co-authored-by: GitHub Action <action@github.com>
2026-01-03 21:08:10 -06:00
mealie-commit-bot[bot]
70b5865dce chore: bump version to v3.9.2 2026-01-02 19:40:19 +00:00
Michael Genson
3be7056f2c fix: Exception handling for recipe image reprocessing (#6822) 2026-01-02 13:17:07 -06:00
Arsène Reymond
1b57310535 fix: allow start attribute on ordered lists (SafeMarkdown) (#6820)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
2026-01-02 19:02:11 +00:00
Patrick Lehner (he/him)
2b15d9a515 fix: Make quantity input in shopping list item editor visually consistent with other inputs (#6810) 2026-01-02 12:51:53 -06:00
Hayden
adc9c0b970 chore(l10n): New Crowdin updates (#6804) 2025-12-31 00:36:01 +00:00
renovate[bot]
bec1708891 chore(deps): update node.js to b52a8d1 (#6800)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-30 10:33:30 -06:00
Patrick Lehner (he/him)
66bb545454 dev: Small .gitignore fixes (#6796) 2025-12-30 15:42:38 +00:00
renovate[bot]
c1ebf04291 chore(deps): update node.js to 33587cf (#6795)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-30 05:20:34 +00:00
245 changed files with 54489 additions and 52649 deletions

View File

@@ -1,9 +1,10 @@
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.224.2/containers/python-3/.devcontainer/base.Dockerfile
# [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster # [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster
ARG VARIANT="3.12-bullseye" ARG VARIANT="3.12-bullseye"
FROM mcr.microsoft.com/devcontainers/python:${VARIANT} FROM mcr.microsoft.com/devcontainers/python:${VARIANT}
# Remove outdated yarn GPG key, if it exists
RUN rm -f /etc/apt/sources.list.d/yarn.list /usr/share/keyrings/yarn-archive-keyring.gpg || true
# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10 # [Choice] Node.js version: none, lts/*, 16, 14, 12, 10
ARG NODE_VERSION="none" ARG NODE_VERSION="none"
RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi

113
.github/workflows/auto-merge-l10n.yml vendored Normal file
View File

@@ -0,0 +1,113 @@
name: Auto-merge l10n PRs
on:
pull_request:
types: [opened, synchronize, labeled]
permissions:
contents: write
pull-requests: write
jobs:
auto-merge:
runs-on: ubuntu-latest
if: contains(github.event.pull_request.labels.*.name, 'l10n')
steps:
- name: Validate PR author
env:
AUTHOR: ${{ github.event.pull_request.user.login }}
run: |
if [[
"$AUTHOR" != "hay-kot" &&
"$AUTHOR" != "github-actions[bot]" &&
"$AUTHOR" != "mealie-actions[bot]"
]]; then
echo "::error::PR author must be hay-kot, github-actions[bot], or mealie-actions[bot] for auto-merge (got: $AUTHOR)"
exit 1
fi
echo "Author validated: $AUTHOR"
- name: Validate PR size
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO: ${{ github.repository }}
run: |
ADDITIONS=$(gh pr view "$PR_NUMBER" --repo "$REPO" --json additions --jq '.additions')
DELETIONS=$(gh pr view "$PR_NUMBER" --repo "$REPO" --json deletions --jq '.deletions')
TOTAL=$((ADDITIONS + DELETIONS))
echo "PR changes: +$ADDITIONS -$DELETIONS (total: $TOTAL lines)"
if [ "$TOTAL" -gt 400 ]; then
echo "::error::PR exceeds 400 line change limit ($TOTAL lines)"
exit 1
fi
- name: Validate file paths
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO: ${{ github.repository }}
run: |
FILES=$(gh pr view "$PR_NUMBER" --repo "$REPO" --json files --jq '.files[].path')
for file in $FILES; do
# Check if file matches any allowed path
if [[ "$file" == "frontend/composables/use-locales/available-locales.ts" ]] || \
[[ "$file" =~ ^frontend/lang/ ]] || \
[[ "$file" =~ ^mealie/repos/seed/resources/[^/]+/locales/ ]]; then
continue
fi
# File doesn't match allowed paths
echo "::error::Invalid file path: $file"
echo "Only the following paths are allowed:"
echo " - frontend/composables/use-locales/available-locales.ts"
echo " - frontend/lang/"
echo " - mealie/repos/seed/resources/*/locales/"
exit 1
done
echo "All files are in allowed paths"
- name: Approve PR
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO: ${{ github.repository }}
run: |
APPROVED=$(gh pr view "$PR_NUMBER" \
--repo "$REPO" \
--json reviews \
--jq '.reviews[] | select(.state == "APPROVED") | .id' \
| wc -l)
if [ "$APPROVED" -gt 0 ]; then
echo "PR already approved"
exit 0
fi
gh pr review "$PR_NUMBER" \
--repo "$REPO" \
--approve \
--body "Auto-approved: l10n PR from trusted author with valid file paths"
- name: Generate GitHub App Token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.COMMIT_BOT_APP_ID }}
private-key: ${{ secrets.COMMIT_BOT_APP_PRIVATE_KEY }}
- name: Enable auto-merge
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO: ${{ github.repository }}
run: |
gh pr merge "$PR_NUMBER" \
--repo "$REPO" \
--auto \
--squash

View File

@@ -15,10 +15,17 @@ jobs:
sync-locales: sync-locales:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Generate GitHub App Token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.COMMIT_BOT_APP_ID }}
private-key: ${{ secrets.COMMIT_BOT_APP_PRIVATE_KEY }}
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ steps.app-token.outputs.token }}
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v5 uses: actions/setup-python@v5
@@ -105,7 +112,7 @@ jobs:
- Updated frontend locale files - Updated frontend locale files
- Generated from latest translation sources" \ - Generated from latest translation sources" \
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ steps.app-token.outputs.token }}
- name: No changes detected - name: No changes detected
if: steps.changes.outputs.has_changes == 'false' if: steps.changes.outputs.has_changes == 'false'

View File

@@ -4,14 +4,19 @@ on:
pull_request: pull_request:
branches: branches:
- mealie-next - mealie-next
merge_group:
types: [checks_requested]
branches:
- mealie-next
concurrency: concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number }} group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.merge_group.head_ref }}
cancel-in-progress: true cancel-in-progress: true
jobs: jobs:
pull-request-lint: pull-request-lint:
name: "Lint PR" name: "Lint PR"
if: github.event_name == 'pull_request'
uses: ./.github/workflows/pull-request-lint.yml uses: ./.github/workflows/pull-request-lint.yml
backend-tests: backend-tests:
@@ -24,6 +29,7 @@ jobs:
container-scanning: container-scanning:
name: "Trivy Container Scanning" name: "Trivy Container Scanning"
if: github.event_name == 'pull_request'
uses: ./.github/workflows/partial-trivy-container-scanning.yml uses: ./.github/workflows/partial-trivy-container-scanning.yml
code-ql: code-ql:
@@ -47,7 +53,10 @@ jobs:
publish-image: publish-image:
name: "Publish PR Image" name: "Publish PR Image"
if: contains(github.event.pull_request.labels.*.name, 'build-image') && github.repository == 'mealie-recipes/mealie' if: |
github.event_name == 'pull_request' &&
contains(github.event.pull_request.labels.*.name, 'build-image') &&
github.repository == 'mealie-recipes/mealie'
permissions: permissions:
contents: read contents: read
packages: write packages: write

View File

@@ -40,12 +40,18 @@ jobs:
shell: bash shell: bash
run: pre-commit autoupdate --color=always run: pre-commit autoupdate --color=always
- name: Create Pull Request - name: Generate GitHub App Token
uses: peter-evans/create-pull-request@v6 id: app-token
# This doesn't currently work for us because it creates the PR but the workflows don't run. uses: actions/create-github-app-token@v1
# TODO: Provide a personal access token as a parameter here, that solves that problem.
# https://github.com/peter-evans/create-pull-request
with: with:
app-id: ${{ secrets.COMMIT_BOT_APP_ID }}
private-key: ${{ secrets.COMMIT_BOT_APP_PRIVATE_KEY }}
- name: Create Pull Request
id: create-pr
uses: peter-evans/create-pull-request@v6
with:
token: ${{ steps.app-token.outputs.token }}
commit-message: "Update pre-commit hooks" commit-message: "Update pre-commit hooks"
branch: "fix/update-pre-commit-hooks" branch: "fix/update-pre-commit-hooks"
labels: | labels: |
@@ -54,3 +60,38 @@ jobs:
base: mealie-next base: mealie-next
title: "chore(auto): Update pre-commit hooks" title: "chore(auto): Update pre-commit hooks"
body: "Auto-generated by `.github/workflows/scheduled-checks.yml`" body: "Auto-generated by `.github/workflows/scheduled-checks.yml`"
- name: Approve PR
if: steps.create-pr.outputs.pull-request-number
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
PR_NUMBER: ${{ steps.create-pr.outputs.pull-request-number }}
REPO: ${{ github.repository }}
run: |
APPROVED=$(gh pr view "$PR_NUMBER" \
--repo "$REPO" \
--json reviews \
--jq '.reviews[] | select(.state == "APPROVED") | .id' \
| wc -l)
if [ "$APPROVED" -gt 0 ]; then
echo "PR already approved"
exit 0
fi
gh pr review "$PR_NUMBER" \
--repo "$REPO" \
--approve \
--body "Auto-approved: Pre-commit hook updates"
- name: Enable auto-merge
if: steps.create-pr.outputs.pull-request-number
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ steps.create-pr.outputs.pull-request-number }}
REPO: ${{ github.repository }}
run: |
gh pr merge "$PR_NUMBER" \
--repo "$REPO" \
--auto \
--squash

5
.gitignore vendored
View File

@@ -70,8 +70,11 @@ wheels/
.installed.cfg .installed.cfg
*.egg *.egg
# packaged output - temporarily written here by `uv build`
/mealie-*
# frontend copied into Python module for packaging purposes # frontend copied into Python module for packaging purposes
/mealie/frontend/ /mealie/frontend
# PyInstaller # PyInstaller
# Usually these files are written by a python script from a template # Usually these files are written by a python script from a template

View File

@@ -12,7 +12,7 @@ repos:
exclude: ^tests/data/ exclude: ^tests/data/
- repo: https://github.com/astral-sh/ruff-pre-commit - repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version. # Ruff version.
rev: v0.14.10 rev: v0.14.14
hooks: hooks:
- id: ruff - id: ruff
- id: ruff-format - id: ruff-format

View File

@@ -47,8 +47,6 @@ tasks:
sources: sources:
- package.json - package.json
- yarn.lock - yarn.lock
generates:
- node_modules/**
setup:py: setup:py:
desc: setup python dependencies desc: setup python dependencies
@@ -61,6 +59,18 @@ tasks:
- pyproject.toml - pyproject.toml
- .pre-commit-config.yaml - .pre-commit-config.yaml
setup:e2e:
desc: setup e2e test dependencies
dir: tests/e2e
run: once
cmds:
- yarn install
- yarn playwright install --with-deps
sources:
- package.json
- playwright.config.ts
- yarn.lock
setup: setup:
desc: setup all dependencies desc: setup all dependencies
deps: deps:
@@ -179,12 +189,21 @@ tasks:
status: status:
- '{{ .SKIP_PACKAGE_DEPS | default "false"}}' - '{{ .SKIP_PACKAGE_DEPS | default "false"}}'
py:package: py:package:build:
desc: builds Python packages (sdist and wheel) in top-level dist directory internal: true
deps: deps:
- py:package:deps - py:package:deps
cmds: cmds:
- uv build --out-dir dist - uv build --out-dir dist
sources:
- uv.lock
- pyproject.toml
- mealie/**
py:package:
desc: builds Python packages (sdist and wheel) in top-level dist directory
cmds:
- task: py:package:build
- task: py:package:generate-requirements - task: py:package:generate-requirements
py: py:
@@ -215,6 +234,12 @@ tasks:
dir: frontend dir: frontend
cmds: cmds:
- yarn build - yarn build
sources:
- "**"
- exclude: .nuxt/**
- exclude: .output/**
- exclude: dist/**
- exclude: node_modules/.cache/**
ui:generate: ui:generate:
desc: generates a static version of the frontend in frontend/dist desc: generates a static version of the frontend in frontend/dist
@@ -223,18 +248,36 @@ tasks:
- setup:ui - setup:ui
cmds: cmds:
- yarn generate - yarn generate
sources:
- "**"
- exclude: .nuxt/**
- exclude: .output/**
- exclude: dist/**
- exclude: node_modules/.cache/**
ui:lint: ui:lint:
desc: runs the frontend linter desc: runs the frontend linter
dir: frontend dir: frontend
cmds: cmds:
- yarn lint --max-warnings=0 - yarn lint --max-warnings=0
sources:
- "**"
- exclude: .nuxt/**
- exclude: .output/**
- exclude: dist/**
- exclude: node_modules/.cache/**
ui:test: ui:test:
desc: runs the frontend tests desc: runs the frontend tests
dir: frontend dir: frontend
cmds: cmds:
- yarn test - yarn test
sources:
- "**"
- exclude: .nuxt/**
- exclude: .output/**
- exclude: dist/**
- exclude: node_modules/.cache/**
ui:check: ui:check:
desc: runs all frontend checks desc: runs all frontend checks
@@ -263,3 +306,48 @@ tasks:
dir: docker dir: docker
cmds: cmds:
- docker compose -f docker-compose.yml -p mealie up -d --build - docker compose -f docker-compose.yml -p mealie up -d --build
e2e:build-image:
desc: builds the e2e test docker image
deps:
- py:package
cmds:
- docker build --tag mealie:e2e --file docker/Dockerfile --build-context packages=dist .
sources:
- docker/Dockerfile
- dist/**
e2e:start-server:
desc: Builds the image and starts the containers for e2e testing
dir: tests/e2e/docker
deps:
- e2e:build-image
vars:
WAIT_UNTIL_HEALTHY: '{{if .WAIT_UNTIL_HEALTHY}}--wait{{else}}{{end}}'
cmds:
- docker compose up -d {{.WAIT_UNTIL_HEALTHY}}
e2e:stop-server:
desc: Shuts down the e2e testing containers
dir: tests/e2e/docker
cmds:
- docker compose down --volumes
e2e:test:
desc: runs the e2e tests
dir: tests/e2e
deps:
- setup:e2e
vars:
PREVENT_REPORT_OPEN: '{{if .PREVENT_REPORT_OPEN}}PLAYWRIGHT_HTML_OPEN=never{{else}}{{end}}'
cmds:
- '{{.PREVENT_REPORT_OPEN}} yarn playwright test'
e2e:
desc: runs the full e2e test suite
cmds:
- task: e2e:start-server
vars: { WAIT_UNTIL_HEALTHY: true }
- defer: { task: e2e:stop-server }
- task: e2e:test
vars: { PREVENT_REPORT_OPEN: true }

View File

@@ -1,7 +1,7 @@
############################################### ###############################################
# Frontend Build # Frontend Build
############################################### ###############################################
FROM node:24@sha256:20988bcdc6dc76690023eb2505dd273bdeefddcd0bde4bfd1efe4ebf8707f747 \ FROM node:24@sha256:b2b2184ba9b78c022e1d6a7924ec6fba577adf28f15c9d9c457730cc4ad3807a \
AS frontend-builder AS frontend-builder
WORKDIR /frontend WORKDIR /frontend

View File

@@ -6,7 +6,7 @@ While this guide aims to simplify the migration process for developers, it's not
## V1 → V2 ## V1 → V2
The biggest change between V1 and V2 is the introduction of Households. For more information on how households work in relation to groups/users, check out the [Groups and Households](./features.md#groups-and-households) section in the Features guide. The biggest change between V1 and V2 is the introduction of Households. For more information on how households work in relation to groups/users, check out the [Groups and Households](../../documentation/getting-started/features.md#groups-and-households) section in the Features guide.
### `updateAt` is now `updatedAt` ### `updateAt` is now `updatedAt`

View File

@@ -16,7 +16,7 @@ Recipes extras are a key feature of the Mealie API. They allow you to create cus
For example you could add `{"message": "Remember to thaw the chicken"}` to a recipe and use the webhooks built into mealie to send that message payload to a destination to be processed. For example you could add `{"message": "Remember to thaw the chicken"}` to a recipe and use the webhooks built into mealie to send that message payload to a destination to be processed.
#### Shopping List and Food Extras #### Shopping List and Food Extras
Similarly to recipes, extras are supported on shopping lists, shopping list items, and foods. At this time they are only accessible through the API. Extras for these objects allow for rich integrations between the Mealie shopping list and your favorite list manager, such as Alexa, ToDoist, Trello, or any other list manager with an API. Similarly to recipes, extras are supported on shopping lists, shopping list items, and foods. At this time they are only accessible through the API. Extras for these objects allow for rich integrations between the Mealie shopping list and your favorite list manager, such as Todoist, Trello, or any other list manager with an API.
To keep shopping lists in sync, for instance, you can store your Trello list id on your Mealie shopping list: <br /> To keep shopping lists in sync, for instance, you can store your Trello list id on your Mealie shopping list: <br />
`{"trello_list_id": "5abbe4b7ddc1b351ef961414"}` `{"trello_list_id": "5abbe4b7ddc1b351ef961414"}`
@@ -52,6 +52,7 @@ Many applications will keep track of the query and adjust the page parameter app
Notice that the route does not contain the baseurl (e.g. `https://mymealieapplication.com/api`). Notice that the route does not contain the baseurl (e.g. `https://mymealieapplication.com/api`).
There are a few shorthands available to reduce the number of calls for certain common requests: There are a few shorthands available to reduce the number of calls for certain common requests:
- if you want to return _all_ results, effectively disabling pagination, set `perPage = -1` (and fetch the first page) - if you want to return _all_ results, effectively disabling pagination, set `perPage = -1` (and fetch the first page)
- if you want to fetch the _last_ page, set `page = -1` - if you want to fetch the _last_ page, set `page = -1`
@@ -89,6 +90,28 @@ This filter will find all recipes that don't start with the word "Test": <br>
This filter will find all recipes that have particular slugs: <br> This filter will find all recipes that have particular slugs: <br>
`slug IN ["pasta-fagioli", "delicious-ramen"]` `slug IN ["pasta-fagioli", "delicious-ramen"]`
##### Placeholder Keywords
You can use placeholders to insert dynamic values as opposed to static values. Currently the only supported placeholder keyword is `$NOW`, to insert the current date/time.
`$NOW` can optionally be paired with basic offsets. Here is an example of a filter which gives you recipes not made within the past 30 days: <br>
`lastMade <= "$NOW-30d"`
Supported offset operations include:
- `-` for subtracting a time (i.e. in the past)
- `+` for adding a time (i.e. in the future)
Supported offset intervals include:
- `y` for years
- `m` for months
- `d` for days
- `H` for hours
- `M` for minutes
- `S` for seconds
Note that intervals are _case sensitive_ (e.g. `s` is an invalid interval).
##### Nested Property filters ##### Nested Property filters
When querying tables with relationships, you can filter properties on related tables. For instance, if you want to query all recipes owned by a particular user: <br> When querying tables with relationships, you can filter properties on related tables. For instance, if you want to query all recipes owned by a particular user: <br>
`user.username = "SousChef20220320"` `user.username = "SousChef20220320"`
@@ -96,7 +119,7 @@ When querying tables with relationships, you can filter properties on related ta
This timeline event filter will return all timeline events for recipes that were created after a particular date: <br> This timeline event filter will return all timeline events for recipes that were created after a particular date: <br>
`recipe.createdAt >= "2023-02-25"` `recipe.createdAt >= "2023-02-25"`
This recipe filter will return all recipes that contains a particular set of tags: <br> This recipe filter will return all recipes that contain a particular set of tags: <br>
`tags.name CONTAINS ALL ["Easy", "Cajun"]` `tags.name CONTAINS ALL ["Easy", "Cajun"]`
##### Compound Filters ##### Compound Filters

View File

@@ -9,7 +9,7 @@
Mealie supports 3rd party authentication via [OpenID Connect (OIDC)](https://openid.net/connect/), an identity layer built on top of OAuth2. OIDC is supported by many Identity Providers (IdP), including: Mealie supports 3rd party authentication via [OpenID Connect (OIDC)](https://openid.net/connect/), an identity layer built on top of OAuth2. OIDC is supported by many Identity Providers (IdP), including:
- [Authentik](https://goauthentik.io/integrations/sources/oauth/#openid-connect) - [Authentik](https://integrations.goauthentik.io/documentation/mealie/)
- [Authelia](https://www.authelia.com/integration/openid-connect/mealie/) - [Authelia](https://www.authelia.com/integration/openid-connect/mealie/)
- [Keycloak](https://www.keycloak.org/docs/latest/securing_apps/#_oidc) - [Keycloak](https://www.keycloak.org/docs/latest/securing_apps/#_oidc)
- [Okta](https://www.okta.com/openid-connect/) - [Okta](https://www.okta.com/openid-connect/)
@@ -68,7 +68,6 @@ Example configurations for several Identity Providers have been provided by the
If you don't see your provider and have successfully set it up, please consider [creating your own example](https://github.com/mealie-recipes/mealie/discussions/new?category=oauth-provider-example) so that others can have a smoother setup. If you don't see your provider and have successfully set it up, please consider [creating your own example](https://github.com/mealie-recipes/mealie/discussions/new?category=oauth-provider-example) so that others can have a smoother setup.
## Migration from Mealie v1.x ## Migration from Mealie v1.x
**High level changes** **High level changes**

View File

@@ -104,9 +104,6 @@ Here you will be able to:
!!! tip !!! tip
You can use Labels to categorize your ingredients. You may want to Label by Food Type (Frozen, Fresh, etc), by Store, Tool, Recipe, or more. Play around with this to see what works best for you. You can use Labels to categorize your ingredients. You may want to Label by Food Type (Frozen, Fresh, etc), by Store, Tool, Recipe, or more. Play around with this to see what works best for you.
!!! tip
You can toggle 'Food' on items so that if you add multiple of the same food / ingredient, Mealie will automatically combine them together. Do this by editing an item in the Shopping List and clicking the 'Apple' icon. If you then have recipes that contain "1 | cup | cheese" and "2 | cup | cheese" this would be combined to show "3 cups of cheese."
[See FAQ for more information](../getting-started/faq.md) [See FAQ for more information](../getting-started/faq.md)
@@ -198,7 +195,7 @@ Mealie lets you fully customize how you organize your users. You can use Groups
### Groups ### Groups
Groups are fully isolated instances of Mealie. Think of a goup as a completely separate, fully self-contained site. There is no data shared between groups. Each group has its own users, recipes, tags, categories, etc. A user logged-in to one group cannot make any changes to another. Groups are fully isolated instances of Mealie. Think of a group as a completely separate, fully self-contained site. There is no data shared between groups. Each group has its own users, recipes, tags, categories, etc. A user logged-in to one group cannot make any changes to another.
Common use cases for groups include: Common use cases for groups include:

View File

@@ -123,7 +123,7 @@ Mealie supports various integrations using OpenAI. For more information, check o
For custom mapping variables (e.g. OPENAI_CUSTOM_HEADERS) you should pass values as JSON encoded strings (e.g. `OPENAI_CUSTOM_PARAMS='{"k1": "v1", "k2": "v2"}'`) For custom mapping variables (e.g. OPENAI_CUSTOM_HEADERS) you should pass values as JSON encoded strings (e.g. `OPENAI_CUSTOM_PARAMS='{"k1": "v1", "k2": "v2"}'`)
| Variables | Default | Description | | Variables | Default | Description |
| ------------------------------------------------- | :-----: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |---------------------------------------------------|:-------:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| OPENAI_BASE_URL<super>[&dagger;][secrets]</super> | None | The base URL for the OpenAI API. If you're not sure, leave this empty to use the standard OpenAI platform | | OPENAI_BASE_URL<super>[&dagger;][secrets]</super> | None | The base URL for the OpenAI API. If you're not sure, leave this empty to use the standard OpenAI platform |
| OPENAI_API_KEY<super>[&dagger;][secrets]</super> | None | Your OpenAI API Key. Enables OpenAI-related features | | OPENAI_API_KEY<super>[&dagger;][secrets]</super> | None | Your OpenAI API Key. Enables OpenAI-related features |
| OPENAI_MODEL | gpt-4o | Which OpenAI model to use. If you're not sure, leave this empty | | OPENAI_MODEL | gpt-4o | Which OpenAI model to use. If you're not sure, leave this empty |
@@ -133,6 +133,7 @@ For custom mapping variables (e.g. OPENAI_CUSTOM_HEADERS) you should pass values
| OPENAI_WORKERS | 2 | Number of OpenAI workers per request. Higher values may increase processing speed, but will incur additional API costs | | OPENAI_WORKERS | 2 | Number of OpenAI workers per request. Higher values may increase processing speed, but will incur additional API costs |
| OPENAI_SEND_DATABASE_DATA | True | Whether to send Mealie data to OpenAI to improve request accuracy. This will incur additional API costs | | OPENAI_SEND_DATABASE_DATA | True | Whether to send Mealie data to OpenAI to improve request accuracy. This will incur additional API costs |
| OPENAI_REQUEST_TIMEOUT | 300 | The number of seconds to wait for an OpenAI request to complete before cancelling the request. Leave this empty unless you're running into timeout issues on slower hardware | | OPENAI_REQUEST_TIMEOUT | 300 | The number of seconds to wait for an OpenAI request to complete before cancelling the request. Leave this empty unless you're running into timeout issues on slower hardware |
| OPENAI_CUSTOM_PROMPT_DIR | None | Path to custom prompt files. Only existing files in your custom directory will override the defaults; any missing or empty custom files will automatically fall back to the system defaults. See https://github.com/mealie-recipes/mealie/tree/mealie-next/mealie/services/openai/prompts for expected file names. |
### Theming ### Theming
@@ -235,6 +236,10 @@ The examples below provide copy-ready Docker Compose environment configurations
THEME_DARK_ERROR: '#E57373' THEME_DARK_ERROR: '#E57373'
``` ```
!!! info
Browser cookies may cause the client to keep outdated settings.
Clearing the cookies can be required for the change to take effect.
### Docker Secrets ### Docker Secrets
> <super>&dagger;</super> Starting in version `2.4.2`, any environment variable in the preceding lists with a dagger > <super>&dagger;</super> Starting in version `2.4.2`, any environment variable in the preceding lists with a dagger

View File

@@ -31,7 +31,7 @@ To deploy mealie on your local network, it is highly recommended to use Docker t
We've gone through a few versions of Mealie v1 deployment targets. We have settled on a single container deployment, and we've begun publishing the nightly container on github containers. If you're looking to move from the old nightly (split containers _or_ the omni image) to the new nightly, there are a few things you need to do: We've gone through a few versions of Mealie v1 deployment targets. We have settled on a single container deployment, and we've begun publishing the nightly container on github containers. If you're looking to move from the old nightly (split containers _or_ the omni image) to the new nightly, there are a few things you need to do:
1. Take a backup just in case! 1. Take a backup just in case!
2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v3.9.1` 2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v3.10.1`
3. Take the external port from the frontend container and set that as the port mapped to port `9000` on the new container. The frontend is now served on port 9000 from the new container, so it will need to be mapped for you to have access. 3. Take the external port from the frontend container and set that as the port mapped to port `9000` on the new container. The frontend is now served on port 9000 from the new container, so it will need to be mapped for you to have access.
4. Restart the container 4. Restart the container

View File

@@ -10,7 +10,7 @@ PostgreSQL might be considered if you need to support many concurrent users. In
```yaml ```yaml
services: services:
mealie: mealie:
image: ghcr.io/mealie-recipes/mealie:v3.9.1 # (3) image: ghcr.io/mealie-recipes/mealie:v3.10.1 # (3)
container_name: mealie container_name: mealie
restart: always restart: always
ports: ports:

View File

@@ -11,7 +11,7 @@ SQLite is a popular, open source, self-contained, zero-configuration database th
```yaml ```yaml
services: services:
mealie: mealie:
image: ghcr.io/mealie-recipes/mealie:v3.9.1 # (3) image: ghcr.io/mealie-recipes/mealie:v3.10.1 # (3)
container_name: mealie container_name: mealie
restart: always restart: always
ports: ports:

File diff suppressed because one or more lines are too long

View File

@@ -15,7 +15,6 @@
:nudge-top="menuTop ? '5' : '0'" :nudge-top="menuTop ? '5' : '0'"
allow-overflow allow-overflow
close-delay="125" close-delay="125"
:open-on-hover="mdAndUp"
content-class="d-print-none" content-class="d-print-none"
> >
<template #activator="{ props: activatorProps }"> <template #activator="{ props: activatorProps }">
@@ -83,8 +82,6 @@ const emit = defineEmits<{
[key: string]: []; [key: string]: [];
}>(); }>();
const { mdAndUp } = useDisplay();
const i18n = useI18n(); const i18n = useI18n();
const { $globals } = useNuxtApp(); const { $globals } = useNuxtApp();
const api = useUserApi(); const api = useUserApi();
@@ -94,7 +91,7 @@ const state = reactive({
shoppingListDialog: false, shoppingListDialog: false,
menuItems: [ menuItems: [
{ {
title: i18n.t("recipe.add-to-list"), title: i18n.t("meal-plan.add-day-to-list"),
icon: $globals.icons.cartCheck, icon: $globals.icons.cartCheck,
color: undefined, color: undefined,
event: "shoppingList", event: "shoppingList",
@@ -126,8 +123,8 @@ async function getShoppingLists() {
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
const eventHandlers: { [key: string]: () => void | Promise<any> } = { const eventHandlers: { [key: string]: () => void | Promise<any> } = {
shoppingList: () => { shoppingList: async () => {
getShoppingLists(); await getShoppingLists();
state.shoppingListDialog = true; state.shoppingListDialog = true;
}, },
}; };

View File

@@ -36,7 +36,7 @@
import QueryFilterBuilder from "~/components/Domain/QueryFilterBuilder.vue"; import QueryFilterBuilder from "~/components/Domain/QueryFilterBuilder.vue";
import type { FieldDefinition } from "~/composables/use-query-filter-builder"; import type { FieldDefinition } from "~/composables/use-query-filter-builder";
import { Organizer } from "~/lib/api/types/non-generated"; import { Organizer } from "~/lib/api/types/non-generated";
import type { QueryFilterJSON } from "~/lib/api/types/response"; import type { QueryFilterJSON } from "~/lib/api/types/non-generated";
interface Props { interface Props {
queryFilter?: QueryFilterJSON | null; queryFilter?: QueryFilterJSON | null;

View File

@@ -319,7 +319,7 @@ import { useDebounceFn } from "@vueuse/core";
import { useHouseholdSelf } from "~/composables/use-households"; import { useHouseholdSelf } from "~/composables/use-households";
import RecipeOrganizerSelector from "~/components/Domain/Recipe/RecipeOrganizerSelector.vue"; import RecipeOrganizerSelector from "~/components/Domain/Recipe/RecipeOrganizerSelector.vue";
import { Organizer } from "~/lib/api/types/non-generated"; import { Organizer } from "~/lib/api/types/non-generated";
import type { LogicalOperator, QueryFilterJSON, QueryFilterJSONPart, RelationalKeyword, RelationalOperator } from "~/lib/api/types/response"; import type { LogicalOperator, QueryFilterJSON, QueryFilterJSONPart, RelationalKeyword, RelationalOperator } from "~/lib/api/types/non-generated";
import { useCategoryStore, useFoodStore, useHouseholdStore, useTagStore, useToolStore } from "~/composables/store"; import { useCategoryStore, useFoodStore, useHouseholdStore, useTagStore, useToolStore } from "~/composables/store";
import { useUserStore } from "~/composables/store/use-user-store"; import { useUserStore } from "~/composables/store/use-user-store";
import { type Field, type FieldDefinition, type FieldValue, type OrganizerBase, useQueryFilterBuilder } from "~/composables/use-query-filter-builder"; import { type Field, type FieldDefinition, type FieldValue, type OrganizerBase, useQueryFilterBuilder } from "~/composables/use-query-filter-builder";

View File

@@ -79,7 +79,7 @@
@print="$emit('print')" @print="$emit('print')"
/> />
</div> </div>
<div v-if="open" class="custom-btn-group gapped"> <div v-if="open" class="custom-btn-group gapped ma-1">
<v-btn <v-btn
v-for="(btn, index) in editorButtons" v-for="(btn, index) in editorButtons"
:key="index" :key="index"

View File

@@ -1,60 +1,97 @@
<template> <template>
<div v-if="model.length > 0 || edit"> <div v-if="model.length > 0 || edit">
<v-card class="mt-4"> <v-card class="mt-4">
<v-card-title class="py-2"> <v-list-item class="pr-2 pl-0">
<v-card-title>
{{ $t("asset.assets") }} {{ $t("asset.assets") }}
</v-card-title> </v-card-title>
<template #append>
<v-btn
v-if="edit"
variant="plain"
:icon="$globals.icons.create"
@click="state.newAssetDialog = true"
/>
</template>
</v-list-item>
<v-divider class="mx-2" /> <v-divider class="mx-2" />
<v-list <v-list
v-if="model.length > 0" v-if="model.length > 0"
lines="two"
:flat="!edit" :flat="!edit"
> >
<v-list-item <v-list-item
v-for="(item, i) in model" v-for="(item, i) in model"
:key="i" :key="i"
:href="!edit ? assetURL(item.fileName ?? '') : ''"
target="_blank"
class="pr-2"
> >
<template #prepend> <template #prepend>
<div class="ma-auto"> <v-avatar size="48" rounded="lg" class="elevation-1">
<v-tooltip location="bottom"> <v-img
<template #activator="{ props: tooltipProps }"> v-if="isImage(item.fileName)"
<v-icon v-bind="tooltipProps"> :src="assetURL(item.fileName ?? '')"
:alt="item.name"
loading="lazy"
cover
/>
<v-icon v-else size="large">
{{ getIconDefinition(item.icon).icon }} {{ getIconDefinition(item.icon).icon }}
</v-icon> </v-icon>
</v-avatar>
</template> </template>
<span>{{ getIconDefinition(item.icon).title }}</span>
</v-tooltip> <v-list-item-title>
</div>
</template>
<v-list-item-title class="pl-2">
{{ item.name }} {{ item.name }}
</v-list-item-title> </v-list-item-title>
<template #append> <template #append>
<v-menu v-if="edit" location="bottom end">
<template #activator="{ props: menuProps }">
<v-btn
v-bind="menuProps"
icon
variant="plain"
>
<v-icon :icon="$globals.icons.dotsVertical" />
</v-btn>
</template>
<v-list density="compact" min-width="220">
<v-list-item
:href="assetURL(item.fileName ?? '')"
:prepend-icon="$globals.icons.eye"
:title="$t('general.view')"
target="_blank"
/>
<v-list-item
:href="assetURL(item.fileName ?? '')"
:prepend-icon="$globals.icons.download"
:title="$t('general.download')"
download
/>
<v-list-item
v-if="edit"
:prepend-icon="$globals.icons.contentCopy"
:title="$t('general.copy')"
@click="copyText(assetEmbed(item.fileName ?? ''))"
/>
<v-list-item
v-if="edit"
:prepend-icon="$globals.icons.delete"
:title="$t('general.delete')"
@click="model.splice(i, 1)"
/>
</v-list>
</v-menu>
<v-btn <v-btn
v-if="!edit" v-if="!edit"
color="primary"
icon icon
size="small" variant="plain"
:href="assetURL(item.fileName ?? '')" :href="assetURL(item.fileName ?? '')"
target="_blank" download
top
> >
<v-icon> {{ $globals.icons.download }} </v-icon> <v-icon> {{ $globals.icons.download }} </v-icon>
</v-btn> </v-btn>
<div v-else>
<v-btn
color="error"
icon
size="small"
top
@click="model.splice(i, 1)"
>
<v-icon>{{ $globals.icons.delete }}</v-icon>
</v-btn>
<AppButtonCopy
color=""
:copy-text="assetEmbed(item.fileName ?? '')"
/>
</div>
</template> </template>
</v-list-item> </v-list-item>
</v-list> </v-list>
@@ -68,18 +105,9 @@
can-submit can-submit
@submit="addAsset" @submit="addAsset"
> >
<template #activator>
<BaseButton
v-if="edit"
size="small"
create
@click="state.newAssetDialog = true"
/>
</template>
<v-card-text class="pt-4"> <v-card-text class="pt-4">
<v-text-field <v-text-field
v-model="state.newAsset.name" v-model="state.newAsset.name"
density="compact"
:label="$t('general.name')" :label="$t('general.name')"
/> />
<div class="d-flex justify-space-between"> <div class="d-flex justify-space-between">
@@ -92,10 +120,14 @@
item-value="name" item-value="name"
class="mr-2" class="mr-2"
> >
<template #item="{ item, props: itemProps }"> <template #item="{ props: itemProps, item }">
<v-list-item v-bind="itemProps"> <v-list-item v-bind="itemProps">
<template #prepend> <template #prepend>
<v-icon>{{ item.raw.icon }}</v-icon> <v-avatar>
<v-icon>
{{ item.raw.icon }}
</v-icon>
</v-avatar>
</template> </template>
</v-list-item> </v-list-item>
</template> </template>
@@ -107,7 +139,6 @@
@uploaded="setFileObject" @uploaded="setFileObject"
/> />
</div> </div>
{{ state.fileObject.name }}
</v-card-text> </v-card-text>
</BaseDialog> </BaseDialog>
</div> </div>
@@ -118,6 +149,7 @@
import { useStaticRoutes, useUserApi } from "~/composables/api"; import { useStaticRoutes, useUserApi } from "~/composables/api";
import { alert } from "~/composables/use-toast"; import { alert } from "~/composables/use-toast";
import type { RecipeAsset } from "~/lib/api/types/recipe"; import type { RecipeAsset } from "~/lib/api/types/recipe";
import { useCopy } from "~/composables/use-copy";
const props = defineProps({ const props = defineProps({
slug: { slug: {
@@ -149,6 +181,7 @@ const state = reactive({
const i18n = useI18n(); const i18n = useI18n();
const { $globals } = useNuxtApp(); const { $globals } = useNuxtApp();
const { copyText } = useCopy();
const iconOptions = [ const iconOptions = [
{ {
@@ -184,21 +217,31 @@ function getIconDefinition(icon: string) {
return iconOptions.find(item => item.name === icon) || iconOptions[0]; return iconOptions.find(item => item.name === icon) || iconOptions[0];
} }
function isImage(fileName?: string | null) {
if (!fileName) return false;
return /\.(png|jpe?g|gif|webp|bmp|avif)$/i.test(fileName);
}
const { recipeAssetPath } = useStaticRoutes(); const { recipeAssetPath } = useStaticRoutes();
function assetURL(assetName: string) { function assetURL(assetName: string) {
return recipeAssetPath(props.recipeId, assetName); return recipeAssetPath(props.recipeId, assetName);
} }
function assetEmbed(name: string) { function assetEmbed(name: string) {
return `<img src="${serverBase}${assetURL(name)}" height="100%" width="100%"> </img>`; return `<img src="${serverBase}${assetURL(name)}" height="100%" width="100%" />`;
} }
function setFileObject(fileObject: File) { function setFileObject(fileObject: File) {
state.fileObject = fileObject; state.fileObject = fileObject;
// If the user didn't provide a name, default to the file base name
if (!state.newAsset.name?.trim()) {
state.newAsset.name = fileObject.name.substring(0, fileObject.name.lastIndexOf("."));
}
} }
function validFields() { function validFields() {
return state.newAsset.name.length > 0 && state.fileObject.name.length > 0; // Only require a file; name will fall back to the file name if empty
return Boolean(state.fileObject?.name);
} }
async function addAsset() { async function addAsset() {
@@ -207,8 +250,10 @@ async function addAsset() {
return; return;
} }
const nameToUse = state.newAsset.name?.trim() || state.fileObject.name;
const { data } = await api.recipes.createAsset(props.slug, { const { data } = await api.recipes.createAsset(props.slug, {
name: state.newAsset.name, name: nameToUse,
icon: state.newAsset.icon, icon: state.newAsset.icon,
file: state.fileObject, file: state.fileObject,
extension: state.fileObject.name.split(".").pop() || "", extension: state.fileObject.name.split(".").pop() || "",

View File

@@ -10,7 +10,6 @@
:nudge-top="menuTop ? '5' : '0'" :nudge-top="menuTop ? '5' : '0'"
allow-overflow allow-overflow
close-delay="125" close-delay="125"
:open-on-hover="$vuetify.display.mdAndUp"
content-class="d-print-none" content-class="d-print-none"
@update:model-value="onMenuToggle" @update:model-value="onMenuToggle"
> >
@@ -24,7 +23,6 @@
:fab="fab" :fab="fab"
v-bind="activatorProps" v-bind="activatorProps"
@click.prevent @click.prevent
@mouseenter="onHover"
> >
<v-icon <v-icon
:size="!fab ? undefined : 'x-large'" :size="!fab ? undefined : 'x-large'"
@@ -127,12 +125,6 @@ const contentProps = computed(() => {
return rest; return rest;
}); });
function onHover() {
if (!isMenuContentLoaded.value) {
isMenuContentLoaded.value = true;
}
}
function onMenuToggle(isOpen: boolean) { function onMenuToggle(isOpen: boolean) {
if (isOpen && !isMenuContentLoaded.value) { if (isOpen && !isMenuContentLoaded.value) {
isMenuContentLoaded.value = true; isMenuContentLoaded.value = true;

View File

@@ -176,6 +176,7 @@ const props = withDefaults(defineProps<Props>(), {
const emit = defineEmits<{ const emit = defineEmits<{
[key: string]: any; [key: string]: any;
deleted: [slug: string]; deleted: [slug: string];
print: [];
}>(); }>();
const api = useUserApi(); const api = useUserApi();

View File

@@ -227,7 +227,7 @@ const currentHouseholdSlug = ref("");
const filteredShoppingLists = ref<ShoppingListSummary[]>([]); const filteredShoppingLists = ref<ShoppingListSummary[]>([]);
const state = reactive({ const state = reactive({
shoppingListDialog: true, shoppingListDialog: false,
shoppingListIngredientDialog: false, shoppingListIngredientDialog: false,
shoppingListShowAllToggled: false, shoppingListShowAllToggled: false,
}); });
@@ -237,8 +237,8 @@ const { shoppingListDialog, shoppingListIngredientDialog, shoppingListShowAllTog
const recipeIngredientSections = ref<ShoppingListRecipeIngredientSection[]>([]); const recipeIngredientSections = ref<ShoppingListRecipeIngredientSection[]>([]);
const selectedShoppingList = ref<ShoppingListSummary | null>(null); const selectedShoppingList = ref<ShoppingListSummary | null>(null);
watch(dialog, (newVal, oldVal) => { watch([dialog, () => preferences.value.viewAllLists], () => {
if (newVal && !oldVal) { if (dialog.value) {
currentHouseholdSlug.value = $auth.user.value?.householdSlug || ""; currentHouseholdSlug.value = $auth.user.value?.householdSlug || "";
filteredShoppingLists.value = props.shoppingLists.filter( filteredShoppingLists.value = props.shoppingLists.filter(
list => preferences.value.viewAllLists || list.userId === $auth.user.value?.id, list => preferences.value.viewAllLists || list.userId === $auth.user.value?.id,
@@ -249,10 +249,11 @@ watch(dialog, (newVal, oldVal) => {
openShoppingListIngredientDialog(selectedShoppingList.value); openShoppingListIngredientDialog(selectedShoppingList.value);
} }
else { else {
state.shoppingListDialog = true;
ready.value = true; ready.value = true;
} }
} }
else if (!newVal) { else if (!dialog.value) {
initState(); initState();
} }
}); });
@@ -371,7 +372,7 @@ async function consolidateRecipesIntoSections(recipes: RecipeWithScale[]) {
} }
function initState() { function initState() {
state.shoppingListDialog = true; state.shoppingListDialog = false;
state.shoppingListIngredientDialog = false; state.shoppingListIngredientDialog = false;
state.shoppingListShowAllToggled = false; state.shoppingListShowAllToggled = false;
recipeIngredientSections.value = []; recipeIngredientSections.value = [];

View File

@@ -100,6 +100,7 @@
v-model="state.auto" v-model="state.auto"
:label="$t('search.auto-search')" :label="$t('search.auto-search')"
single-line single-line
color="primary"
/> />
<v-btn <v-btn
block block

View File

@@ -17,7 +17,6 @@
v-for="(ingredient, index) in value" v-for="(ingredient, index) in value"
:key="'ingredient' + index" :key="'ingredient' + index"
> >
<template v-if="!isCookMode">
<h3 <h3
v-if="showTitleEditor[index]" v-if="showTitleEditor[index]"
class="mt-2" class="mt-2"
@@ -25,7 +24,6 @@
{{ ingredient.title }} {{ ingredient.title }}
</h3> </h3>
<v-divider v-if="showTitleEditor[index]" /> <v-divider v-if="showTitleEditor[index]" />
</template>
<v-list-item <v-list-item
density="compact" density="compact"
class="pa-0" class="pa-0"

View File

@@ -1,5 +1,18 @@
<template> <template>
<div> <div>
<BaseDialog
v-model="discardDialog"
:title="$t('general.discard-changes')"
color="warning"
:icon="$globals.icons.alertCircle"
can-confirm
@confirm="confirmDiscard"
@cancel="cancelDiscard"
>
<v-card-text>
{{ $t("general.discard-changes-description") }}
</v-card-text>
</BaseDialog>
<RecipePageParseDialog <RecipePageParseDialog
:model-value="isParsing" :model-value="isParsing"
:ingredients="recipe.recipeIngredient" :ingredients="recipe.recipeIngredient"
@@ -15,6 +28,7 @@
:landscape="landscape" :landscape="landscape"
@save="saveRecipe" @save="saveRecipe"
@delete="deleteRecipe" @delete="deleteRecipe"
@close="closeEditor"
/> />
<RecipeJsonEditor <RecipeJsonEditor
v-if="isEditJSON" v-if="isEditJSON"
@@ -174,6 +188,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { invoke, until } from "@vueuse/core"; import { invoke, until } from "@vueuse/core";
import type { RouteLocationNormalized } from "vue-router";
import RecipeIngredients from "../RecipeIngredients.vue"; import RecipeIngredients from "../RecipeIngredients.vue";
import RecipePageEditorToolbar from "./RecipePageParts/RecipePageEditorToolbar.vue"; import RecipePageEditorToolbar from "./RecipePageParts/RecipePageEditorToolbar.vue";
import RecipePageFooter from "./RecipePageParts/RecipePageFooter.vue"; import RecipePageFooter from "./RecipePageParts/RecipePageFooter.vue";
@@ -205,7 +220,6 @@ import { useNavigationWarning } from "~/composables/use-navigation-warning";
const recipe = defineModel<NoUndefinedField<Recipe>>({ required: true }); const recipe = defineModel<NoUndefinedField<Recipe>>({ required: true });
const display = useDisplay(); const display = useDisplay();
const i18n = useI18n();
const $auth = useMealieAuth(); const $auth = useMealieAuth();
const route = useRoute(); const route = useRoute();
const { isOwnGroup } = useLoggedInState(); const { isOwnGroup } = useLoggedInState();
@@ -231,26 +245,68 @@ const notLinkedIngredients = computed(() => {
* and prompts the user to save if they have unsaved changes. * and prompts the user to save if they have unsaved changes.
*/ */
const originalRecipe = ref<Recipe | null>(null); const originalRecipe = ref<Recipe | null>(null);
const discardDialog = ref(false);
const pendingRoute = ref<RouteLocationNormalized | null>(null);
invoke(async () => { invoke(async () => {
await until(recipe.value).not.toBeNull(); await until(recipe.value).not.toBeNull();
originalRecipe.value = deepCopy(recipe.value); originalRecipe.value = deepCopy(recipe.value);
}); });
onUnmounted(async () => { function hasUnsavedChanges(): boolean {
const isSame = JSON.stringify(recipe.value) === JSON.stringify(originalRecipe.value); if (originalRecipe.value === null) {
if (isEditMode.value && !isSame && recipe.value?.slug !== undefined) { return false;
const save = window.confirm(i18n.t("general.unsaved-changes")); }
return JSON.stringify(recipe.value) !== JSON.stringify(originalRecipe.value);
}
if (save) { function restoreOriginalRecipe() {
await api.recipes.updateOne(recipe.value.slug, recipe.value); if (originalRecipe.value) {
recipe.value = deepCopy(originalRecipe.value) as NoUndefinedField<Recipe>;
} }
} }
function closeEditor() {
if (hasUnsavedChanges()) {
pendingRoute.value = null;
discardDialog.value = true;
}
else {
setMode(PageMode.VIEW);
}
}
function confirmDiscard() {
restoreOriginalRecipe();
discardDialog.value = false;
if (pendingRoute.value) {
const destination = pendingRoute.value;
pendingRoute.value = null;
router.push(destination);
}
else {
setMode(PageMode.VIEW);
}
}
function cancelDiscard() {
discardDialog.value = false;
pendingRoute.value = null;
}
onBeforeRouteLeave((to) => {
if (isEditMode.value && hasUnsavedChanges()) {
pendingRoute.value = to;
discardDialog.value = true;
return false;
}
});
onUnmounted(() => {
deactivateNavigationWarning(); deactivateNavigationWarning();
toggleCookMode(); toggleCookMode();
clearPageState(recipe.value.slug || ""); clearPageState(recipe.value.slug || "");
console.debug("reset RecipePage state during unmount");
}); });
const hasLinkedIngredients = computed(() => { const hasLinkedIngredients = computed(() => {
return recipe.value.recipeInstructions.some( return recipe.value.recipeInstructions.some(
@@ -300,6 +356,8 @@ async function saveRecipe() {
if (data?.slug) { if (data?.slug) {
router.push(`/g/${groupSlug.value}/r/` + data.slug); router.push(`/g/${groupSlug.value}/r/` + data.slug);
recipe.value = data as NoUndefinedField<Recipe>; recipe.value = data as NoUndefinedField<Recipe>;
// Update the snapshot after successful save
originalRecipe.value = deepCopy(recipe.value);
} }
} }

View File

@@ -16,7 +16,7 @@
:open="isEditMode" :open="isEditMode"
:recipe-id="recipe.id" :recipe-id="recipe.id"
class="ml-auto mt-n7 pb-4" class="ml-auto mt-n7 pb-4"
@close="setMode(PageMode.VIEW)" @close="$emit('close')"
@json="toggleEditMode()" @json="toggleEditMode()"
@edit="setMode(PageMode.EDIT)" @edit="setMode(PageMode.EDIT)"
@save="$emit('save')" @save="$emit('save')"
@@ -47,7 +47,7 @@ const props = withDefaults(defineProps<Props>(), {
landscape: false, landscape: false,
}); });
defineEmits(["save", "delete", "print"]); defineEmits(["save", "delete", "print", "close"]);
const { recipeImage } = useStaticRoutes(); const { recipeImage } = useStaticRoutes();
const { imageKey, setMode, toggleEditMode, isEditMode } = usePageState(props.recipe.slug); const { imageKey, setMode, toggleEditMode, isEditMode } = usePageState(props.recipe.slug);

View File

@@ -39,7 +39,6 @@
:nudge-top="props.menuTop ? '5' : '0'" :nudge-top="props.menuTop ? '5' : '0'"
allow-overflow allow-overflow
close-delay="125" close-delay="125"
:open-on-hover="!props.useMobileFormat"
content-class="d-print-none" content-class="d-print-none"
> >
<template #activator="{ props: btnProps }"> <template #activator="{ props: btnProps }">
@@ -99,7 +98,6 @@ const props = defineProps<{
color?: string; color?: string;
event: RecipeTimelineEventOut; event: RecipeTimelineEventOut;
menuIcon?: string | null; menuIcon?: string | null;
useMobileFormat?: boolean;
}>(); }>();
const emit = defineEmits(["delete", "update"]); const emit = defineEmits(["delete", "update"]);

View File

@@ -35,7 +35,6 @@
:menu-top="false" :menu-top="false"
:event="event" :event="event"
:menu-icon="$globals.icons.dotsVertical" :menu-icon="$globals.icons.dotsVertical"
:use-mobile-format="useMobileFormat"
color="transparent" color="transparent"
:elevation="0" :elevation="0"
:card-menu="false" :card-menu="false"

View File

@@ -37,21 +37,29 @@
:label="$t('search.search')" :label="$t('search.search')"
clearable clearable
/> />
<div class="d-flex py-4 px-1"> <div />
<v-switch <div class="d-flex flex-wrap py-4 px-1 align-center">
<v-btn-toggle
v-if="requireAll != undefined" v-if="requireAll != undefined"
v-model="requireAllValue" v-model="combinator"
mandatory
density="compact" density="compact"
hide-details variant="outlined"
class="my-auto"
color="primary" color="primary"
:label="requireAllValue ? $t('search.has-all') : $t('search.has-any')" class="my-1"
/> >
<v-btn value="hasAll">
{{ $t('search.has-all') }}
</v-btn>
<v-btn value="hasAny">
{{ $t('search.has-any') }}
</v-btn>
</v-btn-toggle>
<v-spacer /> <v-spacer />
<v-btn <v-btn
size="small" size="small"
color="accent" color="accent"
class="mr-2 my-auto" class="my-1"
@click="clearSelection" @click="clearSelection"
> >
{{ $t("search.clear-selection") }} {{ $t("search.clear-selection") }}
@@ -174,10 +182,10 @@ export default defineNuxtComponent({
// Use shallowRef for better performance with arrays // Use shallowRef for better performance with arrays
const debouncedSearch = shallowRef(""); const debouncedSearch = shallowRef("");
const requireAllValue = computed({ const combinator = computed({
get: () => props.requireAll, get: () => (props.requireAll ? "hasAll" : "hasAny"),
set: (value) => { set: (value) => {
context.emit("update:requireAll", value); context.emit("update:requireAll", value === "hasAll");
}, },
}); });
@@ -246,7 +254,7 @@ export default defineNuxtComponent({
} }
return { return {
requireAllValue, combinator,
state, state,
selected, selected,
selectedRadio, selectedRadio,

View File

@@ -10,11 +10,8 @@
:label="$t('form.quantity-label-abbreviated')" :label="$t('form.quantity-label-abbreviated')"
:min="0" :min="0"
:precision="null" :precision="null"
variant="plain"
control-variant="stacked" control-variant="stacked"
inset inset
density="compact"
class="centered-number-input"
style="width: 100px;" style="width: 100px;"
/> />
</div> </div>
@@ -59,25 +56,6 @@
width="250" width="250"
/> />
</div> </div>
<v-menu
v-if="listItem.recipeReferences && listItem.recipeReferences.length > 0"
open-on-hover
offset-y
start
top
>
<template #activator="{ props }">
<v-icon class="mt-auto" :icon="$globals.icons.alert" v-bind="props" color="warning">
{{ $globals.icons.alert }}
</v-icon>
</template>
<v-card max-width="350px" class="left-warning-border">
<v-card-text>
{{ $t("shopping-list.linked-item-warning") }}
</v-card-text>
</v-card>
</v-menu>
</div> </div>
<BaseButton <BaseButton
v-if="listItem.labelId && listItem.food && listItem.labelId !== listItem.food.labelId" v-if="listItem.labelId && listItem.food && listItem.labelId !== listItem.food.labelId"
@@ -242,10 +220,3 @@ export default defineNuxtComponent({
}, },
}); });
</script> </script>
<style scoped>
.centered-number-input :deep(.v-field) {
display: flex;
align-items: center;
}
</style>

View File

@@ -8,7 +8,6 @@
:nudge-top="menuTop ? '5' : '0'" :nudge-top="menuTop ? '5' : '0'"
allow-overflow allow-overflow
close-delay="125" close-delay="125"
open-on-hover
content-class="d-print-none" content-class="d-print-none"
> >
<template #activator="{ props }"> <template #activator="{ props }">

View File

@@ -7,6 +7,10 @@
import DOMPurify from "isomorphic-dompurify"; import DOMPurify from "isomorphic-dompurify";
import { marked } from "marked"; import { marked } from "marked";
enum DOMPurifyHook {
UponSanitizeAttribute = "uponSanitizeAttribute",
}
export default defineNuxtComponent({ export default defineNuxtComponent({
props: { props: {
source: { source: {
@@ -15,14 +19,26 @@ export default defineNuxtComponent({
}, },
}, },
setup(props) { setup(props) {
const ALLOWED_STYLE_TAGS = [
"background-color", "color", "font-style", "font-weight", "text-decoration", "text-align",
];
function sanitizeMarkdown(rawHtml: string | null | undefined): string { function sanitizeMarkdown(rawHtml: string | null | undefined): string {
if (!rawHtml) { if (!rawHtml) {
return ""; return "";
} }
DOMPurify.addHook(DOMPurifyHook.UponSanitizeAttribute, (node, data) => {
if (data.attrName === "style") {
const styles = data.attrValue.split(";").filter((style) => {
const [property] = style.split(":");
return ALLOWED_STYLE_TAGS.includes(property.trim().toLowerCase());
});
data.attrValue = styles.join(";");
}
});
const sanitized = DOMPurify.sanitize(rawHtml, { const sanitized = DOMPurify.sanitize(rawHtml, {
// List based on
// https://support.zendesk.com/hc/en-us/articles/4408824584602-Allowing-unsafe-HTML-in-help-center-articles
ALLOWED_TAGS: [ ALLOWED_TAGS: [
"strong", "em", "b", "i", "u", "p", "code", "pre", "samp", "kbd", "var", "sub", "sup", "dfn", "cite", "strong", "em", "b", "i", "u", "p", "code", "pre", "samp", "kbd", "var", "sub", "sup", "dfn", "cite",
"small", "address", "hr", "br", "id", "div", "span", "h1", "h2", "h3", "h4", "h5", "h6", "small", "address", "hr", "br", "id", "div", "span", "h1", "h2", "h3", "h4", "h5", "h6",
@@ -31,10 +47,14 @@ export default defineNuxtComponent({
], ],
ALLOWED_ATTR: [ ALLOWED_ATTR: [
"href", "src", "alt", "height", "width", "class", "allow", "title", "allowfullscreen", "frameborder", "href", "src", "alt", "height", "width", "class", "allow", "title", "allowfullscreen", "frameborder",
"scrolling", "cite", "datetime", "name", "abbr", "target", "border", "scrolling", "cite", "datetime", "name", "abbr", "target", "border", "start", "style",
], ],
}); });
Object.values(DOMPurifyHook).forEach((hook) => {
DOMPurify.removeHook(hook);
});
return sanitized; return sanitized;
} }

View File

@@ -15,25 +15,25 @@ export const LOCALES = [
{ {
name: "Tiếng Việt (Vietnamese)", name: "Tiếng Việt (Vietnamese)",
value: "vi-VN", value: "vi-VN",
progress: 1, progress: 2,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Українська (Ukrainian)", name: "Українська (Ukrainian)",
value: "uk-UA", value: "uk-UA",
progress: 99, progress: 83,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Türkçe (Turkish)", name: "Türkçe (Turkish)",
value: "tr-TR", value: "tr-TR",
progress: 39, progress: 40,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Svenska (Swedish)", name: "Svenska (Swedish)",
value: "sv-SE", value: "sv-SE",
progress: 67, progress: 61,
dir: "ltr", dir: "ltr",
}, },
{ {
@@ -45,25 +45,25 @@ export const LOCALES = [
{ {
name: "Slovenščina (Slovenian)", name: "Slovenščina (Slovenian)",
value: "sl-SI", value: "sl-SI",
progress: 41, progress: 40,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Slovenčina (Slovak)", name: "Slovenčina (Slovak)",
value: "sk-SK", value: "sk-SK",
progress: 46, progress: 47,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Pусский (Russian)", name: "Pусский (Russian)",
value: "ru-RU", value: "ru-RU",
progress: 46, progress: 44,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Română (Romanian)", name: "Română (Romanian)",
value: "ro-RO", value: "ro-RO",
progress: 41, progress: 44,
dir: "ltr", dir: "ltr",
}, },
{ {
@@ -81,19 +81,19 @@ export const LOCALES = [
{ {
name: "Polski (Polish)", name: "Polski (Polish)",
value: "pl-PL", value: "pl-PL",
progress: 52, progress: 49,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Norsk (Norwegian)", name: "Norsk (Norwegian)",
value: "no-NO", value: "no-NO",
progress: 41, progress: 42,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Nederlands (Dutch)", name: "Nederlands (Dutch)",
value: "nl-NL", value: "nl-NL",
progress: 58, progress: 54,
dir: "ltr", dir: "ltr",
}, },
{ {
@@ -105,13 +105,13 @@ export const LOCALES = [
{ {
name: "Lietuvių (Lithuanian)", name: "Lietuvių (Lithuanian)",
value: "lt-LT", value: "lt-LT",
progress: 27, progress: 30,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "한국어 (Korean)", name: "한국어 (Korean)",
value: "ko-KR", value: "ko-KR",
progress: 22, progress: 38,
dir: "ltr", dir: "ltr",
}, },
{ {
@@ -123,73 +123,73 @@ export const LOCALES = [
{ {
name: "Italiano (Italian)", name: "Italiano (Italian)",
value: "it-IT", value: "it-IT",
progress: 48, progress: 49,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Íslenska (Icelandic)", name: "Íslenska (Icelandic)",
value: "is-IS", value: "is-IS",
progress: 45, progress: 43,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Magyar (Hungarian)", name: "Magyar (Hungarian)",
value: "hu-HU", value: "hu-HU",
progress: 47, progress: 46,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Hrvatski (Croatian)", name: "Hrvatski (Croatian)",
value: "hr-HR", value: "hr-HR",
progress: 29, progress: 30,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "עברית (Hebrew)", name: "עברית (Hebrew)",
value: "he-IL", value: "he-IL",
progress: 72, progress: 64,
dir: "rtl", dir: "rtl",
}, },
{ {
name: "Galego (Galician)", name: "Galego (Galician)",
value: "gl-ES", value: "gl-ES",
progress: 39, progress: 38,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Français (French)", name: "Français (French)",
value: "fr-FR", value: "fr-FR",
progress: 70, progress: 67,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Français canadien (Canadian French)", name: "Français canadien (Canadian French)",
value: "fr-CA", value: "fr-CA",
progress: 99, progress: 83,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Belge (Belgian)", name: "Belge (Belgian)",
value: "fr-BE", value: "fr-BE",
progress: 40, progress: 39,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Suomi (Finnish)", name: "Suomi (Finnish)",
value: "fi-FI", value: "fi-FI",
progress: 41, progress: 40,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Eesti (Estonian)", name: "Eesti (Estonian)",
value: "et-EE", value: "et-EE",
progress: 47, progress: 44,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Español (Spanish)", name: "Español (Spanish)",
value: "es-ES", value: "es-ES",
progress: 46, progress: 45,
dir: "ltr", dir: "ltr",
}, },
{ {
@@ -201,49 +201,49 @@ export const LOCALES = [
{ {
name: "British English", name: "British English",
value: "en-GB", value: "en-GB",
progress: 43, progress: 42,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Ελληνικά (Greek)", name: "Ελληνικά (Greek)",
value: "el-GR", value: "el-GR",
progress: 42, progress: 41,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Deutsch (German)", name: "Deutsch (German)",
value: "de-DE", value: "de-DE",
progress: 97, progress: 83,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Dansk (Danish)", name: "Dansk (Danish)",
value: "da-DK", value: "da-DK",
progress: 52, progress: 63,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Čeština (Czech)", name: "Čeština (Czech)",
value: "cs-CZ", value: "cs-CZ",
progress: 41, progress: 43,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Català (Catalan)", name: "Català (Catalan)",
value: "ca-ES", value: "ca-ES",
progress: 39, progress: 40,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "Български (Bulgarian)", name: "Български (Bulgarian)",
value: "bg-BG", value: "bg-BG",
progress: 51, progress: 49,
dir: "ltr", dir: "ltr",
}, },
{ {
name: "العربية (Arabic)", name: "العربية (Arabic)",
value: "ar-SA", value: "ar-SA",
progress: 23, progress: 25,
dir: "rtl", dir: "rtl",
}, },
{ {

View File

@@ -2,6 +2,7 @@ import { useRecipeCreatePreferences } from "~/composables/use-users/preferences"
export interface UseNewRecipeOptionsProps { export interface UseNewRecipeOptionsProps {
enableImportKeywords?: boolean; enableImportKeywords?: boolean;
enableImportCategories?: boolean;
enableStayInEditMode?: boolean; enableStayInEditMode?: boolean;
enableParseRecipe?: boolean; enableParseRecipe?: boolean;
} }
@@ -9,6 +10,7 @@ export interface UseNewRecipeOptionsProps {
export function useNewRecipeOptions(props: UseNewRecipeOptionsProps = {}) { export function useNewRecipeOptions(props: UseNewRecipeOptionsProps = {}) {
const { const {
enableImportKeywords = true, enableImportKeywords = true,
enableImportCategories = true,
enableStayInEditMode = true, enableStayInEditMode = true,
enableParseRecipe = true, enableParseRecipe = true,
} = props; } = props;
@@ -27,6 +29,17 @@ export function useNewRecipeOptions(props: UseNewRecipeOptionsProps = {}) {
}, },
}); });
const importCategories = computed({
get() {
if (!enableImportCategories) return false;
return recipeCreatePreferences.value.importCategories;
},
set(v: boolean) {
if (!enableImportCategories) return;
recipeCreatePreferences.value.importCategories = v;
},
});
const stayInEditMode = computed({ const stayInEditMode = computed({
get() { get() {
if (!enableStayInEditMode) return false; if (!enableStayInEditMode) return false;
@@ -71,6 +84,7 @@ export function useNewRecipeOptions(props: UseNewRecipeOptionsProps = {}) {
return { return {
// Computed properties for the checkboxes // Computed properties for the checkboxes
importKeywordsAsTags, importKeywordsAsTags,
importCategories,
stayInEditMode, stayInEditMode,
parseRecipe, parseRecipe,
@@ -79,6 +93,7 @@ export function useNewRecipeOptions(props: UseNewRecipeOptionsProps = {}) {
// Props for conditional rendering // Props for conditional rendering
enableImportKeywords, enableImportKeywords,
enableImportCategories,
enableStayInEditMode, enableStayInEditMode,
enableParseRecipe, enableParseRecipe,
}; };

View File

@@ -1,5 +1,5 @@
import { Organizer, type RecipeOrganizer } from "~/lib/api/types/non-generated"; import { Organizer } from "~/lib/api/types/non-generated";
import type { LogicalOperator, RelationalKeyword, RelationalOperator } from "~/lib/api/types/response"; import type { LogicalOperator, RecipeOrganizer, RelationalKeyword, RelationalOperator } from "~/lib/api/types/non-generated";
export interface FieldLogicalOperator { export interface FieldLogicalOperator {
label: string; label: string;

View File

@@ -1,7 +1,7 @@
import { useLocalStorage, useSessionStorage } from "@vueuse/core"; import { useLocalStorage, useSessionStorage } from "@vueuse/core";
import { ActivityKey } from "~/lib/api/types/activity"; import { ActivityKey } from "~/lib/api/types/activity";
import type { RegisteredParser, TimelineEventType } from "~/lib/api/types/recipe"; import type { RegisteredParser, TimelineEventType } from "~/lib/api/types/recipe";
import type { QueryFilterJSON } from "~/lib/api/types/response"; import type { QueryFilterJSON } from "~/lib/api/types/non-generated";
export interface UserPrintPreferences { export interface UserPrintPreferences {
imagePosition: string; imagePosition: string;
@@ -63,6 +63,7 @@ export interface UserRecipeFinderPreferences {
export interface UserRecipeCreatePreferences { export interface UserRecipeCreatePreferences {
importKeywordsAsTags: boolean; importKeywordsAsTags: boolean;
importCategories: boolean;
stayInEditMode: boolean; stayInEditMode: boolean;
parseRecipe: boolean; parseRecipe: boolean;
} }
@@ -233,6 +234,7 @@ export function useRecipeCreatePreferences(): Ref<UserRecipeCreatePreferences> {
"recipe-create-preferences", "recipe-create-preferences",
{ {
importKeywordsAsTags: false, importKeywordsAsTags: false,
importCategories: false,
stayInEditMode: false, stayInEditMode: false,
parseRecipe: true, parseRecipe: true,
}, },

View File

@@ -89,7 +89,7 @@
"clear": "Maak skoon", "clear": "Maak skoon",
"close": "Maak toe", "close": "Maak toe",
"confirm": "Bevestig", "confirm": "Bevestig",
"confirm-how-does-everything-look": "How does everything look?", "confirm-how-does-everything-look": "Hoe lyk alles?",
"confirm-delete-generic": "Is jy seker jy wil dit uitvee?", "confirm-delete-generic": "Is jy seker jy wil dit uitvee?",
"copied_message": "Gekopieër!", "copied_message": "Gekopieër!",
"create": "Skep", "create": "Skep",
@@ -120,9 +120,9 @@
"json": "JSON", "json": "JSON",
"keyword": "Sleutelwoord", "keyword": "Sleutelwoord",
"link-copied": "Skakel gekopieer", "link-copied": "Skakel gekopieer",
"loading": "Loading", "loading": "Laai tans",
"loading-events": "Besig om gebeurtenisse te laai", "loading-events": "Besig om gebeurtenisse te laai",
"loading-recipe": "Loading recipe...", "loading-recipe": "Laai tans resep...",
"loading-ocr-data": "Loading OCR data...", "loading-ocr-data": "Loading OCR data...",
"loading-recipes": "Besig om resepte te laai", "loading-recipes": "Besig om resepte te laai",
"message": "Boodskap", "message": "Boodskap",
@@ -212,14 +212,16 @@
"upload-file": "Laai dokument op", "upload-file": "Laai dokument op",
"created-on-date": "Geskep op: {0}", "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.", "unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Kon nie kopieer na die knipbord toe nie.", "clipboard-copy-failure": "Kon nie kopieer na die knipbord toe nie.",
"confirm-delete-generic-items": "Is jy seker jy wil die volgende items verwyder?", "confirm-delete-generic-items": "Is jy seker jy wil die volgende items verwyder?",
"organizers": "Organiseerders", "organizers": "Organiseerders",
"caution": "Caution", "caution": "Versigtig",
"show-advanced": "Show Advanced", "show-advanced": "Wys uitgebreide",
"add-field": "Add Field", "add-field": "Voeg veld by",
"date-created": "Datum Geskep", "date-created": "Datum Geskep",
"date-updated": "Date Updated" "date-updated": "Datum Opgedateer"
}, },
"group": { "group": {
"are-you-sure-you-want-to-delete-the-group": "Is jy seker jy wil <b>{groupName}<b/> uitvee?", "are-you-sure-you-want-to-delete-the-group": "Is jy seker jy wil <b>{groupName}<b/> uitvee?",
@@ -326,11 +328,11 @@
"mealplan-households-description": "If no household is selected, recipes can be added from any household", "mealplan-households-description": "If no household is selected, recipes can be added from any household",
"any-category": "Any Category", "any-category": "Any Category",
"any-tag": "Any Tag", "any-tag": "Any Tag",
"any-household": "Any Household", "any-household": "Enide Huishouding",
"no-meal-plan-defined-yet": "Nog geen maaltydplan opgestel nie", "no-meal-plan-defined-yet": "Nog geen maaltydplan opgestel nie",
"no-meal-planned-for-today": "Geen maaltyd beplan vir vandag nie", "no-meal-planned-for-today": "Geen maaltyd beplan vir vandag nie",
"numberOfDays-hint": "Number of days on page load", "numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days", "numberOfDays-label": "Standaard dae",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Slegs resepte met hierdie kategorieë sal in maaltydplanne gebruik word", "only-recipes-with-these-categories-will-be-used-in-meal-plans": "Slegs resepte met hierdie kategorieë sal in maaltydplanne gebruik word",
"planner": "Beplanner", "planner": "Beplanner",
"quick-week": "Vinnige week", "quick-week": "Vinnige week",
@@ -367,7 +369,9 @@
"recipe-rules": "Resepreëls", "recipe-rules": "Resepreëls",
"applies-to-all-days": "Van toepassing op alle dae", "applies-to-all-days": "Van toepassing op alle dae",
"applies-on-days": "Van toepassing op {0}s", "applies-on-days": "Van toepassing op {0}s",
"meal-plan-settings": "Maaltydplan verstellings" "meal-plan-settings": "Maaltydplan verstellings",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Migrasiedata is uitgevee", "migration-data-removed": "Migrasiedata is uitgevee",
@@ -453,7 +457,7 @@
"import-by-url": "Voer 'n resep vanaf 'n webwerf in", "import-by-url": "Voer 'n resep vanaf 'n webwerf in",
"create-manually": "Skep 'n resep met die hand", "create-manually": "Skep 'n resep met die hand",
"make-recipe-image": "Maak dit die prentjie vir hierdie resep", "make-recipe-image": "Maak dit die prentjie vir hierdie resep",
"add-food": "Add Food", "add-food": "Voeg Voedsel",
"add-recipe": "Voeg Resep By" "add-recipe": "Voeg Resep By"
}, },
"page": { "page": {
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "Voer oorspronklike sleutelwoorde as merkers in", "import-original-keywords-as-tags": "Voer oorspronklike sleutelwoorde as merkers in",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Bly in redigeer modus", "stay-in-edit-mode": "Bly in redigeer modus",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"import-from-zip": "Voer vanaf zip in", "import-from-zip": "Voer vanaf zip in",

View File

@@ -212,6 +212,8 @@
"upload-file": "تحميل الملف", "upload-file": "تحميل الملف",
"created-on-date": "تم الإنشاء في {0}", "created-on-date": "تم الإنشاء في {0}",
"unsaved-changes": "لديك تغييرات غير محفوظة. هل تريد الحفظ قبل المغادرة؟ حسنًا للحفظ، قم بإلغاء تجاهل التغييرات.", "unsaved-changes": "لديك تغييرات غير محفوظة. هل تريد الحفظ قبل المغادرة؟ حسنًا للحفظ، قم بإلغاء تجاهل التغييرات.",
"discard-changes": "إلغاء التغييرات",
"discard-changes-description": "لديك تغييرات غير محفوظة. هل أنت متأكد من أنك تريد تجاهلها؟",
"clipboard-copy-failure": "فشل في النسخ إلى الحافظة.", "clipboard-copy-failure": "فشل في النسخ إلى الحافظة.",
"confirm-delete-generic-items": "هل أنت متأكد أنك تريد حذف المجموعات التالية؟", "confirm-delete-generic-items": "هل أنت متأكد أنك تريد حذف المجموعات التالية؟",
"organizers": "المنظمون", "organizers": "المنظمون",
@@ -342,9 +344,9 @@
"breakfast": "الإفطار", "breakfast": "الإفطار",
"lunch": "الغداء", "lunch": "الغداء",
"dinner": "العشاء", "dinner": "العشاء",
"snack": "Snack", "snack": "وجبة خفيفة",
"drink": "Drink", "drink": "مشروب",
"dessert": "Dessert", "dessert": "حلوى",
"type-any": "أي", "type-any": "أي",
"day-any": "أي", "day-any": "أي",
"editor": "المحرر", "editor": "المحرر",
@@ -367,7 +369,9 @@
"recipe-rules": "قواعد الوصفات", "recipe-rules": "قواعد الوصفات",
"applies-to-all-days": "ينطبق على جميع الأيام", "applies-to-all-days": "ينطبق على جميع الأيام",
"applies-on-days": "يطبق على أيام {0}", "applies-on-days": "يطبق على أيام {0}",
"meal-plan-settings": "إعدادات خِطَّة الوجبات الغذائية" "meal-plan-settings": "إعدادات خِطَّة الوجبات الغذائية",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "حذف بيانات الهجرة", "migration-data-removed": "حذف بيانات الهجرة",
@@ -438,23 +442,23 @@
"github-issues": "مشاكل GitHub", "github-issues": "مشاكل GitHub",
"google-ld-json-info": "معرف Google + معلومات json", "google-ld-json-info": "معرف Google + معلومات json",
"must-be-a-valid-url": "يجب أن يكون عنوان URL صالحًا", "must-be-a-valid-url": "يجب أن يكون عنوان URL صالحًا",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Paste in your recipe data. Each line will be treated as an item in a list", "paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "لصق بيانات الوصفة الخاصة بك. سيتم التعامل مع كل سطر كعنصر في قائمة",
"recipe-markup-specification": "Recipe Markup Specification", "recipe-markup-specification": "Recipe Markup Specification",
"recipe-url": "رابط الوصفة", "recipe-url": "رابط الوصفة",
"recipe-html-or-json": "وصفة HTML أو JSON", "recipe-html-or-json": "وصفة HTML أو JSON",
"upload-a-recipe": "تحميل وصفة", "upload-a-recipe": "تحميل وصفة",
"upload-individual-zip-file": "تحميل مِلَفّ zip فردي تم تصديره من مثيل Malie آخر.", "upload-individual-zip-file": "تحميل مِلَفّ zip فردي تم تصديره من مثيل Malie آخر.",
"url-form-hint": "نسخ ولصق رابط من موقعك المفضل للوصفة", "url-form-hint": "نسخ ولصق رابط من موقعك المفضل للوصفة",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "نسخ ولصق عنوان URL المصدر لبياناتك (اختياري)",
"view-scraped-data": "عرض البيانات المحللة", "view-scraped-data": "عرض البيانات المحللة",
"trim-whitespace-description": "قص المسافات البيضاء البادئة واللاحقة وكذلك الأسطر الفارغة", "trim-whitespace-description": "قص المسافات البيضاء البادئة واللاحقة وكذلك الأسطر الفارغة",
"trim-prefix-description": "قص الحرف الأول من كل سطر", "trim-prefix-description": "قص الحرف الأول من كل سطر",
"split-by-numbered-line-description": "Attempts to split a paragraph by matching '1)' or '1.' patterns", "split-by-numbered-line-description": "محاولات تقسيم فقرة عن طريق مطابقة أنماط '1)' أو '1.'",
"import-by-url": "استيراد وصفة عن طريق عنوان URL", "import-by-url": "استيراد وصفة عن طريق عنوان URL",
"create-manually": "إنشاء وصفة يدوياً", "create-manually": "إنشاء وصفة يدوياً",
"make-recipe-image": "اجعل هذه صورة الوصفة", "make-recipe-image": "اجعل هذه صورة الوصفة",
"add-food": "Add Food", "add-food": "إضافة طعام",
"add-recipe": "Add Recipe" "add-recipe": "إضافة وصفة"
}, },
"page": { "page": {
"404-page-not-found": "404: لم يتم العثور على الصفحة", "404-page-not-found": "404: لم يتم العثور على الصفحة",
@@ -484,7 +488,7 @@
"comment": "أضف تعليق ", "comment": "أضف تعليق ",
"comments": "التعليقات", "comments": "التعليقات",
"delete-confirmation": "هل انت متأكد من رغبتك بحذف هذه الوصفة؟", "delete-confirmation": "هل انت متأكد من رغبتك بحذف هذه الوصفة؟",
"admin-delete-confirmation": "You're about to delete a recipe that isn't yours using admin permissions. Are you sure?", "admin-delete-confirmation": "أنت على وشك حذف وصفة ليست لك استخدام أذونات المشرف. هل أنت متأكد؟",
"delete-recipe": "حذف الوصفة", "delete-recipe": "حذف الوصفة",
"description": "الوصف", "description": "الوصف",
"disable-amount": "إيقاف إظهار كميات المكونات", "disable-amount": "إيقاف إظهار كميات المكونات",
@@ -521,9 +525,9 @@
"recipe-deleted": "تم حذف الوصفة", "recipe-deleted": "تم حذف الوصفة",
"recipe-image": "صورة الوصفة", "recipe-image": "صورة الوصفة",
"recipe-image-updated": "تم تحديث صورة الوصفة", "recipe-image-updated": "تم تحديث صورة الوصفة",
"delete-image": "Delete Recipe Image", "delete-image": "حذف صورة الوصفة",
"delete-image-confirmation": "Are you sure you want to delete this recipe image?", "delete-image-confirmation": "هل أنت متأكد أنك تريد حذف صورة الوصفة هذه؟",
"recipe-image-deleted": "Recipe image deleted", "recipe-image-deleted": "تم حذف صورة الوصفة",
"recipe-name": "اسم الوصفة", "recipe-name": "اسم الوصفة",
"recipe-settings": "إعدادات الوصفة", "recipe-settings": "إعدادات الوصفة",
"recipe-update-failed": "فشل تحديث الوصفة", "recipe-update-failed": "فشل تحديث الوصفة",
@@ -556,10 +560,10 @@
"add-to-plan": "أضف إلى الخُطة", "add-to-plan": "أضف إلى الخُطة",
"add-to-timeline": "إضافة إلى الخط الزمني", "add-to-timeline": "إضافة إلى الخط الزمني",
"recipe-added-to-list": "تم إضافة الوصفة إلى القائمة", "recipe-added-to-list": "تم إضافة الوصفة إلى القائمة",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "تم إضافة الوصفات إلى القائمة",
"successfully-added-to-list": "Successfully added to list", "successfully-added-to-list": "تمت الإضافة إلى القائمة بنجاح",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "تم إضافة الوصفة إلى خطة الوجبات",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "فشل في إضافة وصفة إلى القائمة",
"failed-to-add-recipe-to-mealplan": "فشل في إضافة الوصفة إلى خطة الوجبة", "failed-to-add-recipe-to-mealplan": "فشل في إضافة الوصفة إلى خطة الوجبة",
"failed-to-add-to-list": "فشل في الإضافة إلى القائمة", "failed-to-add-to-list": "فشل في الإضافة إلى القائمة",
"yield": "العائد", "yield": "العائد",
@@ -569,13 +573,13 @@
"choose-unit": "اختر الوحدة", "choose-unit": "اختر الوحدة",
"press-enter-to-create": "", "press-enter-to-create": "",
"choose-food": "اختيار الطعام", "choose-food": "اختيار الطعام",
"choose-recipe": "Choose Recipe", "choose-recipe": "اختر وصفة",
"notes": "ملاحظات", "notes": "ملاحظات",
"toggle-section": "", "toggle-section": "",
"see-original-text": "عرض النص الأصلي", "see-original-text": "عرض النص الأصلي",
"original-text-with-value": "النص الأصلي: {originalText}", "original-text-with-value": "النص الأصلي: {originalText}",
"ingredient-linker": "رابط المكون", "ingredient-linker": "رابط المكون",
"unlinked": "Not linked yet", "unlinked": "غير مرتبط بعد",
"linked-to-other-step": "مرتبط بخطوة أخرى", "linked-to-other-step": "مرتبط بخطوة أخرى",
"auto": "تلقائي", "auto": "تلقائي",
"cook-mode": "وضع الطبخ", "cook-mode": "وضع الطبخ",
@@ -597,23 +601,23 @@
"made-this": "لقد طبخت هذا", "made-this": "لقد طبخت هذا",
"how-did-it-turn-out": "كيف كانت النتيجة؟", "how-did-it-turn-out": "كيف كانت النتيجة؟",
"user-made-this": "{user} طبخ هذه", "user-made-this": "{user} طبخ هذه",
"made-for-recipe": "Made for {recipe}", "made-for-recipe": "صُنع لـ {recipe}",
"added-to-timeline": "Added to timeline", "added-to-timeline": "تمت الإضافة إلى الجدول الزمني",
"failed-to-add-to-timeline": "Failed to add to timeline", "failed-to-add-to-timeline": "فشلت الإضافة إلى الجدول الزمني",
"failed-to-update-recipe": "Failed to update recipe", "failed-to-update-recipe": "فشل تحديث الوصفة",
"added-to-timeline-but-failed-to-add-image": "Added to timeline, but failed to add image", "added-to-timeline-but-failed-to-add-image": "تمت الإضافة إلى الجدول الزمني، ولكن فشل في إضافة صورة",
"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": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
"message-key": "مفتاح الرساله", "message-key": "مفتاح الرساله",
"parse": "تحليل", "parse": "تحليل",
"ingredients-not-parsed-description": "It looks like your ingredients aren't parsed yet. Click the \"{parse}\" button below to parse your ingredients into structured foods.", "ingredients-not-parsed-description": "It looks like your ingredients aren't parsed yet. Click the \"{parse}\" button below to parse your ingredients into structured foods.",
"attach-images-hint": "Attach images by dragging & dropping them into the editor", "attach-images-hint": "إرفاق الصور عن طريق سحبها وإسقاطها في المحرر",
"drop-image": "وضع الصورة", "drop-image": "وضع الصورة",
"enable-ingredient-amounts-to-use-this-feature": "Enable ingredient amounts to use this feature", "enable-ingredient-amounts-to-use-this-feature": "Enable ingredient amounts to use this feature",
"recipes-with-units-or-foods-defined-cannot-be-parsed": "Recipes with units or foods defined cannot be parsed.", "recipes-with-units-or-foods-defined-cannot-be-parsed": "Recipes with units or foods defined cannot be parsed.",
"parse-ingredients": "تحليل المكونات", "parse-ingredients": "تحليل المكونات",
"edit-markdown": "تعديل Markdown", "edit-markdown": "تعديل Markdown",
"recipe-creation": "إنشاء الوصفة", "recipe-creation": "إنشاء الوصفة",
"select-one-of-the-various-ways-to-create-a-recipe": "Select one of the various ways to create a recipe", "select-one-of-the-various-ways-to-create-a-recipe": "اختر واحدة من الطرق المختلفة لإنشاء وصفة",
"looking-for-migrations": "هل تبحث عن نقل المعلومات؟", "looking-for-migrations": "هل تبحث عن نقل المعلومات؟",
"import-with-url": "الاستيراد باستخدام URL", "import-with-url": "الاستيراد باستخدام URL",
"create-recipe": "إنشاء وصفة", "create-recipe": "إنشاء وصفة",
@@ -623,14 +627,14 @@
"create-recipe-from-an-image": "إنشاء وصفة عن طريق صورة", "create-recipe-from-an-image": "إنشاء وصفة عن طريق صورة",
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.", "create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.", "crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
"create-from-images": "Create from Images", "create-from-images": "إنشاء عن طريق صور",
"should-translate-description": "Translate the recipe into my language", "should-translate-description": "ترجمة الوصفة إلى لغتي",
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.", "please-wait-image-procesing": "الرجاء الانتظار، تتم معالجة الصورة. قد يستغرق هذا بعض الوقت.",
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.", "please-wait-images-processing": "الرجاء الانتظار، يتم معالجة الصور. قد يستغرق هذا بعض الوقت.",
"bulk-url-import": "الاستيراد باستخدام أكثر من URL ", "bulk-url-import": "الاستيراد باستخدام أكثر من URL ",
"debug-scraper": "تصحيح أخطاء المحلل\n", "debug-scraper": "تصحيح أخطاء المحلل\n",
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.", "create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "قم بإنشاء وصفة عن طريق تقديم الاسم. يجب أن يكون لجميع الوصفات أسماء فريدة.",
"new-recipe-names-must-be-unique": "New recipe names must be unique", "new-recipe-names-must-be-unique": "يجب أن تكون أسماء الوصفات فريدة",
"scrape-recipe": "تحليل الوصفة", "scrape-recipe": "تحليل الوصفة",
"scrape-recipe-description": "أضف الوصفة عن طريق الرابط. قم بتوفير عنوان الURL للموقع الذي تريد أخذ الوصفة منه، وسيحاول Mealie إستخراج الوصفة من ذلك الموقع وإضافتها إلى مجموعتك.", "scrape-recipe-description": "أضف الوصفة عن طريق الرابط. قم بتوفير عنوان الURL للموقع الذي تريد أخذ الوصفة منه، وسيحاول Mealie إستخراج الوصفة من ذلك الموقع وإضافتها إلى مجموعتك.",
"scrape-recipe-have-a-lot-of-recipes": "هل لديك الكثير من الوصفات التي تريد أن تحللها في نفس الوقت؟", "scrape-recipe-have-a-lot-of-recipes": "هل لديك الكثير من الوصفات التي تريد أن تحللها في نفس الوقت؟",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "استيراد الكلمات المفتاحية الأصلية كوسوم", "import-original-keywords-as-tags": "استيراد الكلمات المفتاحية الأصلية كوسوم",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "البقاء في وضع التعديل", "stay-in-edit-mode": "البقاء في وضع التعديل",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"import-from-zip": "استيراد من ملف Zip", "import-from-zip": "استيراد من ملف Zip",
@@ -693,15 +698,15 @@
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.", "ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.", "ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}", "add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item" "delete-item": "حذف العنصر"
}, },
"reset-servings-count": "إعادة تعيين عدد الحصص", "reset-servings-count": "إعادة تعيين عدد الحصص",
"not-linked-ingredients": "مكونات إضافية", "not-linked-ingredients": "مكونات إضافية",
"upload-another-image": "Upload another image", "upload-another-image": "رفع صورة أخرى",
"upload-images": "Upload images", "upload-images": "رفع الصور",
"upload-more-images": "Upload more images", "upload-more-images": "رفع المزيد من الصور",
"set-as-cover-image": "Set as recipe cover image", "set-as-cover-image": "تعيين كصورة غلاف الوصفة",
"cover-image": "Cover image", "cover-image": "صورة الغلاف",
"include-linked-recipes": "Include Linked Recipes", "include-linked-recipes": "Include Linked Recipes",
"include-linked-recipe-ingredients": "Include Linked Recipe Ingredients", "include-linked-recipe-ingredients": "Include Linked Recipe Ingredients",
"toggle-recipe": "Toggle Recipe" "toggle-recipe": "Toggle Recipe"
@@ -742,7 +747,7 @@
"advanced": "الإعدادات المتقدمة", "advanced": "الإعدادات المتقدمة",
"auto-search": "البحث التلقائي", "auto-search": "البحث التلقائي",
"no-results": "لم يتم العثور على نتائج", "no-results": "لم يتم العثور على نتائج",
"type-to-search": "Type to search..." "type-to-search": "اكتب للبحث ..."
}, },
"settings": { "settings": {
"add-a-new-theme": "إضافة سمة جديدة", "add-a-new-theme": "إضافة سمة جديدة",
@@ -776,8 +781,8 @@
"custom-pages": "الصفحات الخاصة", "custom-pages": "الصفحات الخاصة",
"edit-page": "تعديل الصفحة", "edit-page": "تعديل الصفحة",
"events": "الأحداث", "events": "الأحداث",
"first-day-of-week": "First day of the week", "first-day-of-week": "اليوم الأول من الأسبوع",
"group-settings-updated": "Group Settings Updated", "group-settings-updated": "تم تحديث إعدادات المجموعة",
"homepage": { "homepage": {
"all-categories": "جميع التصنيفات", "all-categories": "جميع التصنيفات",
"card-per-section": "Card Per Section", "card-per-section": "Card Per Section",
@@ -799,29 +804,29 @@
"remove-existing-entries-matching-imported-entries": "Remove existing entries matching imported entries", "remove-existing-entries-matching-imported-entries": "Remove existing entries matching imported entries",
"set-new-time": "تعيين وقت جديد", "set-new-time": "تعيين وقت جديد",
"settings-update-failed": "فشل تحديث الإعدادات", "settings-update-failed": "فشل تحديث الإعدادات",
"settings-updated": "Settings updated", "settings-updated": "تم تحديث الإعدادات",
"site-settings": "إعدادات الموقع", "site-settings": "إعدادات الموقع",
"theme": { "theme": {
"accent": "Accent", "accent": "لون التمييز",
"dark": "الوضع الليلي", "dark": "الوضع الليلي",
"default-to-system": "مطابقة وضع الجهاز", "default-to-system": "مطابقة وضع الجهاز",
"error": "حدث خطأ", "error": "حدث خطأ",
"error-creating-theme-see-log-file": "Error creating theme. See log file.", "error-creating-theme-see-log-file": "خطأ في إنشاء السمة. راجع ملف السجل.",
"error-deleting-theme": "Error deleting theme", "error-deleting-theme": "خطأ في حذف السمة",
"error-updating-theme": "Error updating theme", "error-updating-theme": "خطأ في تحديث السمة",
"info": "Info", "info": "معلومات",
"light": "الوضع النهاري", "light": "الوضع النهاري",
"primary": "رئيسي", "primary": "رئيسي",
"secondary": "ثانوي", "secondary": "ثانوي",
"success": "Success", "success": "تم بنجاح",
"switch-to-dark-mode": "التحويل إلى الوضع الليلي", "switch-to-dark-mode": "التحويل إلى الوضع الليلي",
"switch-to-light-mode": "التحويل إلى الوضع النهاري", "switch-to-light-mode": "التحويل إلى الوضع النهاري",
"theme-deleted": "Theme deleted", "theme-deleted": "تم حذف السمة",
"theme-name": "Theme Name", "theme-name": "اسم السمة",
"theme-name-is-required": "Theme Name is required.", "theme-name-is-required": "اسم السمة مطلوب.",
"theme-saved": "Theme Saved", "theme-saved": "تم حفظ السمة",
"theme-updated": "Theme updated", "theme-updated": "تم تحديث السمة",
"warning": "Warning", "warning": "تحذير",
"light-mode": "الوضع النهاري", "light-mode": "الوضع النهاري",
"dark-mode": "الوضع الليلي" "dark-mode": "الوضع الليلي"
}, },
@@ -858,7 +863,7 @@
"bug-report": "الإبلاغ عن الأخطاء البرمجية", "bug-report": "الإبلاغ عن الأخطاء البرمجية",
"bug-report-information": "Use this information to report a bug. Providing details of your instance to developers is the best way to get your issues resolved quickly.", "bug-report-information": "Use this information to report a bug. Providing details of your instance to developers is the best way to get your issues resolved quickly.",
"tracker": "Tracker", "tracker": "Tracker",
"configuration": "Configuration", "configuration": "الإعدادات",
"docker-volume": "Docker Volume", "docker-volume": "Docker Volume",
"docker-volume-help": "Mealie requires that the frontend container and the backend share the same docker volume or storage. This ensures that the frontend container can properly access the images and assets stored on disk.", "docker-volume-help": "Mealie requires that the frontend container and the backend share the same docker volume or storage. This ensures that the frontend container can properly access the images and assets stored on disk.",
"volumes-are-misconfigured": "Volumes are misconfigured.", "volumes-are-misconfigured": "Volumes are misconfigured.",
@@ -1113,21 +1118,21 @@
"seed-dialog-text": "Seed the database with common units based on your local language.", "seed-dialog-text": "Seed the database with common units based on your local language.",
"combine-unit-description": "Combining the selected units will merge the Source Unit and Target Unit into a single unit. The {source-unit-will-be-deleted} and all of the references to the Source Unit will be updated to point to the Target Unit.", "combine-unit-description": "Combining the selected units will merge the Source Unit and Target Unit into a single unit. The {source-unit-will-be-deleted} and all of the references to the Source Unit will be updated to point to the Target Unit.",
"combine-unit": "دمج الوحدة", "combine-unit": "دمج الوحدة",
"source-unit": "Source Unit", "source-unit": "الوحدة المصدر",
"target-unit": "Target Unit", "target-unit": "الوحدة الهدف",
"merging-unit-into-unit": "Merging {0} into {1}", "merging-unit-into-unit": "دمج {0} مع {1}",
"create-unit": "إنشاء وحدة", "create-unit": "إنشاء وحدة",
"abbreviation": "Abbreviation", "abbreviation": "الاختصار",
"plural-abbreviation": "Plural Abbreviation", "plural-abbreviation": "Plural Abbreviation",
"description": "Description", "description": "الوصف",
"display-as-fraction": "Display as Fraction", "display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation", "use-abbreviation": "Use Abbreviation",
"edit-unit": "تعديل الوحدة", "edit-unit": "تعديل الوحدة",
"unit-data": "بيانات الوحدة", "unit-data": "بيانات الوحدة",
"use-abbv": "Use Abbv.", "use-abbv": "Use Abbv.",
"fraction": "Fraction", "fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon", "example-unit-singular": "مثال: ملعقة",
"example-unit-plural": "ex: Tablespoons", "example-unit-plural": "مثال: ملاعق",
"example-unit-abbreviation-singular": "ex: Tbsp", "example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps" "example-unit-abbreviation-plural": "ex: Tbsps"
}, },
@@ -1145,18 +1150,18 @@
"the-following-recipes-selected-length-will-be-exported": "The following recipes ({0}) will be exported.", "the-following-recipes-selected-length-will-be-exported": "The following recipes ({0}) will be exported.",
"settings-chosen-explanation": "Settings chosen here, excluding the locked option, will be applied to all selected recipes.", "settings-chosen-explanation": "Settings chosen here, excluding the locked option, will be applied to all selected recipes.",
"selected-length-recipe-s-settings-will-be-updated": "{count} recipe(s) settings will be updated.", "selected-length-recipe-s-settings-will-be-updated": "{count} recipe(s) settings will be updated.",
"recipe-data": "Recipe Data", "recipe-data": "بيانات الوصفة",
"recipe-data-description": "استخدم هذا القسم لإدارة البيانات المرتبطة بوصفاتك. يمكنك تنفيذ العديد من الإجراءات بالجملة على وصفاتك بما في ذلك التصدير والحذف وتعيين الوسوم وتعيين التصنيفات.", "recipe-data-description": "استخدم هذا القسم لإدارة البيانات المرتبطة بوصفاتك. يمكنك تنفيذ العديد من الإجراءات بالجملة على وصفاتك بما في ذلك التصدير والحذف وتعيين الوسوم وتعيين التصنيفات.",
"recipe-columns": "Recipe Columns", "recipe-columns": "أعمدة الوصفة",
"data-exports-description": "This section provides links to available exports that are ready to download. These exports do expire, so be sure to grab them while they're still available.", "data-exports-description": "This section provides links to available exports that are ready to download. These exports do expire, so be sure to grab them while they're still available.",
"data-exports": "Data Exports", "data-exports": "صادرات البيانات",
"tag": "وسم", "tag": "وسم",
"categorize": "Categorize", "categorize": "Categorize",
"update-settings": "Update Settings", "update-settings": "Update Settings",
"tag-recipes": "وسم الوصفات", "tag-recipes": "وسم الوصفات",
"categorize-recipes": "Categorize Recipes", "categorize-recipes": "تصنيف الوصفات",
"export-recipes": "Export Recipes", "export-recipes": "تصدير الوصفات",
"delete-recipes": "Delete Recipes", "delete-recipes": "حذف الوصفات",
"source-unit-will-be-deleted": "Source Unit will be deleted" "source-unit-will-be-deleted": "Source Unit will be deleted"
}, },
"recipe-actions": { "recipe-actions": {
@@ -1166,15 +1171,15 @@
"action-type": "Action Type" "action-type": "Action Type"
}, },
"create-alias": "Create Alias", "create-alias": "Create Alias",
"manage-aliases": "Manage Aliases", "manage-aliases": "إدارة الأسماء المستعارة",
"seed-data": "Seed Data", "seed-data": "Seed Data",
"seed": "Seed", "seed": "Seed",
"data-management": "Data Management", "data-management": "Data Management",
"data-management-description": "Select which data set you want to make changes to.", "data-management-description": "Select which data set you want to make changes to.",
"select-data": "Select Data", "select-data": " اختر البيانات",
"select-language": "Select Language", "select-language": "اختر اللغة",
"columns": "Columns", "columns": "الأعمدة",
"combine": "Combine", "combine": "دمج",
"categories": { "categories": {
"edit-category": "تعديل التصنيف", "edit-category": "تعديل التصنيف",
"new-category": "تصنيف جديد", "new-category": "تصنيف جديد",
@@ -1204,15 +1209,15 @@
"account-details": "تفاصيل الحساب" "account-details": "تفاصيل الحساب"
}, },
"validation": { "validation": {
"group-name-is-taken": "Group name is taken", "group-name-is-taken": "اسم المجموعة مأخوذ",
"username-is-taken": "اسم المستخدم مستعمل", "username-is-taken": "اسم المستخدم مستعمل",
"email-is-taken": "Email is taken", "email-is-taken": "هذا البريد الإلكتروني مأخوذ",
"this-field-is-required": "This Field is Required" "this-field-is-required": "هذا الحقل مطلوب"
}, },
"export": { "export": {
"export": "Export", "export": "تصدير",
"file-name": "File Name", "file-name": "اسم الملف",
"size": "Size", "size": "الحجم",
"link-expires": "Link Expires" "link-expires": "Link Expires"
}, },
"recipe-share": { "recipe-share": {
@@ -1341,12 +1346,12 @@
"profile": { "profile": {
"welcome-user": "مرحبًا 👋، {0}!", "welcome-user": "مرحبًا 👋، {0}!",
"description": "Manage your profile, recipes, and group settings.", "description": "Manage your profile, recipes, and group settings.",
"invite-link": "Invite Link", "invite-link": "رابط الدعوة",
"get-invite-link": "Get Invite Link", "get-invite-link": "الحصول على رابط الدعوة",
"get-public-link": "Get Public Link", "get-public-link": "Get Public Link",
"account-summary": "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": "إحصائيات المجموعة",
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.", "group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
"household-statistics": "Household Statistics", "household-statistics": "Household Statistics",
"household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.", "household-statistics-description": "Your Household Statistics provide some insight how you're using Mealie.",
@@ -1358,32 +1363,32 @@
"user-settings-description": "إدارة تفضيلاتك، وتغيير كلمة المرور الخاصة بك، وتحديث بريدك الإلكتروني.", "user-settings-description": "إدارة تفضيلاتك، وتغيير كلمة المرور الخاصة بك، وتحديث بريدك الإلكتروني.",
"api-tokens-description": "Manage your API Tokens for access from external applications.", "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-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": "إعدادات المجموعة",
"group-settings-description": "Manage your common group settings, like privacy settings.", "group-settings-description": "Manage your common group settings, like privacy settings.",
"household-description": "These items are shared within your household. Editing one of them will change it for the whole household!", "household-description": "These items are shared within your household. Editing one of them will change it for the whole household!",
"household-settings": "Household Settings", "household-settings": "إعدادات الأسرة",
"household-settings-description": "Manage your household settings, like mealplan and privacy settings.", "household-settings-description": "Manage your household settings, like mealplan and privacy settings.",
"cookbooks-description": "إدارة مجموعة من تصنيفات الوصفات وإنشاء صفحات لها.", "cookbooks-description": "إدارة مجموعة من تصنيفات الوصفات وإنشاء صفحات لها.",
"members": "Members", "members": "الأعضاء",
"members-description": "See who's in your household and manage their permissions.", "members-description": "See who's in your household and manage their permissions.",
"webhooks-description": "Setup webhooks that trigger on days that you have have mealplan scheduled.", "webhooks-description": "Setup webhooks that trigger on days that you have have mealplan scheduled.",
"notifiers": "Notifiers", "notifiers": "Notifiers",
"notifiers-description": "Setup email and push notifications that trigger on specific events.", "notifiers-description": "Setup email and push notifications that trigger on specific events.",
"manage-data": "Manage Data", "manage-data": "إدارة البيانات",
"manage-data-description": "إدارة بيانات Mealie الخاصة بك؛ الأطعمة، الوحدات، التصنيفات، الوسوم وأكثر من ذلك.", "manage-data-description": "إدارة بيانات Mealie الخاصة بك؛ الأطعمة، الوحدات، التصنيفات، الوسوم وأكثر من ذلك.",
"data-migrations": "Data Migrations", "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", "email-sent": "تم إرسال البريد الإلكتروني",
"error-sending-email": "Error Sending Email", "error-sending-email": "خطأ في إرسال البريد الإلكتروني",
"personal-information": "Personal Information", "personal-information": "المعلومات الشخصية",
"preferences": "Preferences", "preferences": "التفضيلات",
"show-advanced-description": "Show advanced features (API Keys, Webhooks, and Data Management)", "show-advanced-description": "Show advanced features (API Keys, Webhooks, and Data Management)",
"back-to-profile": "Back to Profile", "back-to-profile": "العودة إلى الملف الشخصي",
"looking-for-privacy-settings": "Looking for Privacy Settings?", "looking-for-privacy-settings": "Looking for Privacy Settings?",
"manage-your-api-tokens": "Manage Your API Tokens", "manage-your-api-tokens": "Manage Your API Tokens",
"manage-user-profile": "إدارة الملف الشخصي للمستخدم", "manage-user-profile": "إدارة الملف الشخصي للمستخدم",
"manage-cookbooks": "إدارة كتب الطبخ", "manage-cookbooks": "إدارة كتب الطبخ",
"manage-members": "Manage Members", "manage-members": "إدارة الأعضاء",
"manage-webhooks": "Manage Webhooks", "manage-webhooks": "Manage Webhooks",
"manage-notifiers": "Manage Notifiers", "manage-notifiers": "Manage Notifiers",
"manage-data-migrations": "Manage Data Migrations" "manage-data-migrations": "Manage Data Migrations"
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "هذا الحقل مطلوب",
"invalid-email": "Email Must Be Valid", "invalid-email": "يجب أن يكون البريد الإلكتروني صالحاً",
"invalid-url": "Must Be A Valid URL", "invalid-url": "يجب أن يكون عنوان URL صالحًا",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "لا يسمح باستخدام المسافات",
"min-length": "Must Be At Least {min} Characters", "min-length": "يجب أن يكون على الأقل {min} أحرف",
"max-length": "Must Be At Most {max} Characters" "max-length": "يجب أن يكون على الأكثر {max} أحرف"
} }
} }

View File

@@ -156,7 +156,7 @@
"sort-alphabetically": "По азбучен ред", "sort-alphabetically": "По азбучен ред",
"status": "състояние", "status": "състояние",
"subject": "Относно", "subject": "Относно",
"submit": "Изпрати", "submit": "Потвърди",
"success-count": "Успешни: {count}", "success-count": "Успешни: {count}",
"sunday": "Неделя", "sunday": "Неделя",
"system": "В хронологичен ред", "system": "В хронологичен ред",
@@ -212,11 +212,13 @@
"upload-file": "Качване на файл", "upload-file": "Качване на файл",
"created-on-date": "Добавена на {0}", "created-on-date": "Добавена на {0}",
"unsaved-changes": "Имате незапазени промени. Желаете ли да ги запазите преди да излезете? Натиснете Ок за запазване и Отказ за отхвърляне на промените.", "unsaved-changes": "Имате незапазени промени. Желаете ли да ги запазите преди да излезете? Натиснете Ок за запазване и Отказ за отхвърляне на промените.",
"discard-changes": "Отхвърляне на промените",
"discard-changes-description": "Имате незаписани промени, сигурни ли сте, че искате да ги отмените?",
"clipboard-copy-failure": "Линкът към рецептата е копиран в клипборда.", "clipboard-copy-failure": "Линкът към рецептата е копиран в клипборда.",
"confirm-delete-generic-items": "Сигурни ли сте, че желаете да изтриете следните елементи?", "confirm-delete-generic-items": "Сигурни ли сте, че желаете да изтриете следните елементи?",
"organizers": "Органайзер", "organizers": "Органайзер",
"caution": "Внимание", "caution": "Внимание",
"show-advanced": "Покажи разширени", "show-advanced": "Разширени настройки",
"add-field": "Добави поле", "add-field": "Добави поле",
"date-created": "Дата на създаване", "date-created": "Дата на създаване",
"date-updated": "Дата на актуализация" "date-updated": "Дата на актуализация"
@@ -367,7 +369,9 @@
"recipe-rules": "Правила на рецептата", "recipe-rules": "Правила на рецептата",
"applies-to-all-days": "Прилага се за всички дни", "applies-to-all-days": "Прилага се за всички дни",
"applies-on-days": "Всеки/всяка {0}", "applies-on-days": "Всеки/всяка {0}",
"meal-plan-settings": "Настройки на плана за хранене" "meal-plan-settings": "Настройки на плана за хранене",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Данните за мигриране са премахнати", "migration-data-removed": "Данните за мигриране са премахнати",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Блокиран ли е уебсайтът?", "scrape-recipe-website-being-blocked": "Блокиран ли е уебсайтът?",
"scrape-recipe-try-importing-raw-html-instead": "Опитайте вместо това да импортирате суровия HTML код.", "scrape-recipe-try-importing-raw-html-instead": "Опитайте вместо това да импортирате суровия HTML код.",
"import-original-keywords-as-tags": "Добави оригиналните ключови думи като етикети", "import-original-keywords-as-tags": "Добави оригиналните ключови думи като етикети",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Остани в режим на редакция", "stay-in-edit-mode": "Остани в режим на редакция",
"parse-recipe-ingredients-after-import": "Анализиране на съставките на рецептата след импортиране", "parse-recipe-ingredients-after-import": "Анализиране на съставките на рецептата след импортиране",
"import-from-zip": "Импортирай от Zip", "import-from-zip": "Импортирай от Zip",
@@ -1178,17 +1183,17 @@
"categories": { "categories": {
"edit-category": "Редактиране на категория", "edit-category": "Редактиране на категория",
"new-category": "Нова категория", "new-category": "Нова категория",
"category-data": "Категория за данните" "category-data": "Категории"
}, },
"tags": { "tags": {
"new-tag": "Нов етикет", "new-tag": "Нов етикет",
"edit-tag": "Редакция на етикет", "edit-tag": "Редакция на етикет",
"tag-data": "Данни на етикета" "tag-data": "Етикети"
}, },
"tools": { "tools": {
"new-tool": "Нов инструмент", "new-tool": "Нов инструмент",
"edit-tool": "Редактирай инструмента", "edit-tool": "Редактирай инструмента",
"tool-data": "Данни на инструмента" "tool-data": "Прибори"
} }
}, },
"user-registration": { "user-registration": {

View File

@@ -69,7 +69,7 @@
"new-notification": "Nova notificació", "new-notification": "Nova notificació",
"event-notifiers": "Notificacions d'esdeveniments", "event-notifiers": "Notificacions d'esdeveniments",
"apprise-url-skipped-if-blank": "Apprise URL (si es deixa buit, s'ignorarà)", "apprise-url-skipped-if-blank": "Apprise URL (si es deixa buit, s'ignorarà)",
"apprise-url-is-left-intentionally-blank": "Since Apprise URLs typically contain sensitive information, this field is left intentionally blank while editing. If you wish to update the URL, please enter the new one here, otherwise leave it blank to keep the current URL.", "apprise-url-is-left-intentionally-blank": "Com que les URLs de Apprise contenen informació sensible, aquest camp es deixa intencionadament en blanc a l'editar. Si vols actualitzar la URL, per favor, introdueix-ne una nova ací, si no, deixa-ho en blanc per a mantenir la URL actual.",
"enable-notifier": "Habilita la notificació", "enable-notifier": "Habilita la notificació",
"what-events": "Què esdeveniments vols que utilitzen aquest notificador?", "what-events": "Què esdeveniments vols que utilitzen aquest notificador?",
"user-events": "Esdeveniments d'usuari", "user-events": "Esdeveniments d'usuari",
@@ -81,7 +81,7 @@
"category-events": "Esdeveniments de les categories", "category-events": "Esdeveniments de les categories",
"when-a-new-user-joins-your-group": "Quan un nou usuari s'afegeix al grup", "when-a-new-user-joins-your-group": "Quan un nou usuari s'afegeix al grup",
"recipe-events": "Esdeveniments de receptes", "recipe-events": "Esdeveniments de receptes",
"label-events": "Label Events" "label-events": "Etiquetar Esdeveniments"
}, },
"general": { "general": {
"add": "Afegeix", "add": "Afegeix",
@@ -212,6 +212,8 @@
"upload-file": "Puja un fitxer", "upload-file": "Puja un fitxer",
"created-on-date": "Creat el: {0}", "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.", "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.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "No s'ha pogut copiar al porta-retalls.", "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": "Organitzadors", "organizers": "Organitzadors",
@@ -367,7 +369,9 @@
"recipe-rules": "Normes per la recepta", "recipe-rules": "Normes per la recepta",
"applies-to-all-days": "Aplica a tots els dies", "applies-to-all-days": "Aplica a tots els dies",
"applies-on-days": "S'aplicarà en {0}s", "applies-on-days": "S'aplicarà en {0}s",
"meal-plan-settings": "Opcions de planificació de menús" "meal-plan-settings": "Opcions de planificació de menús",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "S'han suprimit les dades migrades", "migration-data-removed": "S'han suprimit les dades migrades",
@@ -403,7 +407,7 @@
"title": "Tandoor Recipes" "title": "Tandoor Recipes"
}, },
"cookn": { "cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.", "description-long": "Mealie pot importar receptes des de DVO Cook'n K3. Exporta un receptari o menú en el format \"Cook'n\", canvia la extensió d'exportació a .zip, i després puja el .zip a sota.",
"title": "DVO Cook'n X3" "title": "DVO Cook'n X3"
}, },
"recipe-data-migrations": "Migració de receptes", "recipe-data-migrations": "Migració de receptes",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Puja una recepta", "upload-a-recipe": "Puja una recepta",
"upload-individual-zip-file": "Puja només un arxiu zip, exportat d'altre Mealie.", "upload-individual-zip-file": "Puja només un arxiu zip, exportat d'altre Mealie.",
"url-form-hint": "Copia i enganxa l'enllaç del teu lloc web de receptes preferit", "url-form-hint": "Copia i enganxa l'enllaç del teu lloc web de receptes preferit",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Copia i enganxa la URL font a les teues dades (opcional)",
"view-scraped-data": "Visualitza les dades recuperades", "view-scraped-data": "Visualitza les dades recuperades",
"trim-whitespace-description": "Elimina els espais a principi i final; i elimina les línies buides", "trim-whitespace-description": "Elimina els espais a principi i final; i elimina les línies buides",
"trim-prefix-description": "Elimina el primer caràcter de cada línia", "trim-prefix-description": "Elimina el primer caràcter de cada línia",
@@ -597,10 +601,10 @@
"made-this": "Ho he fet", "made-this": "Ho he fet",
"how-did-it-turn-out": "Com ha sortit?", "how-did-it-turn-out": "Com ha sortit?",
"user-made-this": "{user} ha fet això", "user-made-this": "{user} ha fet això",
"made-for-recipe": "Made for {recipe}", "made-for-recipe": "Fet per a {recipe}",
"added-to-timeline": "Added to timeline", "added-to-timeline": "Afegit a la cronologia",
"failed-to-add-to-timeline": "Failed to add to timeline", "failed-to-add-to-timeline": "No s'ha pogut afegir a la cronologia",
"failed-to-update-recipe": "Failed to update recipe", "failed-to-update-recipe": "No s'ha pogut actualitzar la recepta",
"added-to-timeline-but-failed-to-add-image": "S'ha afegit a la línia de temps, però no s'ha pogut afegir la imatge", "added-to-timeline-but-failed-to-add-image": "S'ha afegit a la línia de temps, però no s'ha pogut afegir la imatge",
"api-extras-description": "Els extres de receptes són una funcionalitat clau de l'API de Mealie. Permeten crear parells clau/valor JSON personalitzats dins una recepta, per referenciar-los des d'aplicacions de tercers. Pots emprar aquestes claus per proveir informació, per exemple per a desencadenar automatitzacions o missatges personlitzats per a propagar al teu dispositiu desitjat.", "api-extras-description": "Els extres de receptes són una funcionalitat clau de l'API de Mealie. Permeten crear parells clau/valor JSON personalitzats dins una recepta, per referenciar-los des d'aplicacions de tercers. Pots emprar aquestes claus per proveir informació, per exemple per a desencadenar automatitzacions o missatges personlitzats per a propagar al teu dispositiu desitjat.",
"message-key": "Clau del missatge", "message-key": "Clau del missatge",
@@ -637,9 +641,10 @@
"scrape-recipe-suggest-bulk-importer": "Prova l'importador a granel", "scrape-recipe-suggest-bulk-importer": "Prova l'importador a granel",
"scrape-recipe-have-raw-html-or-json-data": "Teniu dades HTML o JSON pla?", "scrape-recipe-have-raw-html-or-json-data": "Teniu dades HTML o JSON pla?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Podeu importar directament des de les dades planes", "scrape-recipe-you-can-import-from-raw-data-directly": "Podeu importar directament des de les dades planes",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "S'està bloquejant el lloc web?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Prova important l'HTML directament.",
"import-original-keywords-as-tags": "Importa les paraules clau originals com a tags", "import-original-keywords-as-tags": "Importa les paraules clau originals com a tags",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Segueix en el mode d'edició", "stay-in-edit-mode": "Segueix en el mode d'edició",
"parse-recipe-ingredients-after-import": "Analitza els ingredients de la recepta després d'importar", "parse-recipe-ingredients-after-import": "Analitza els ingredients de la recepta després d'importar",
"import-from-zip": "Importa des d'un ZIP", "import-from-zip": "Importa des d'un ZIP",
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "Aquest camp és obligatori",
"invalid-email": "Email Must Be Valid", "invalid-email": "El correu electrònic ha de ser vàlid",
"invalid-url": "Must Be A Valid URL", "invalid-url": "La URL ha de ser vàlida",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "No es permeten espais en blanc",
"min-length": "Must Be At Least {min} Characters", "min-length": "Ha de tenir almenys {min} caràcters",
"max-length": "Must Be At Most {max} Characters" "max-length": "Ha de tenir com a màxim {max} caràcters"
} }
} }

View File

@@ -5,8 +5,8 @@
"api-docs": "Dokumentace API", "api-docs": "Dokumentace API",
"api-port": "Port API", "api-port": "Port API",
"application-mode": "Režim aplikace", "application-mode": "Režim aplikace",
"database-type": "Database Type", "database-type": "Typ databáze",
"database-url": "Adresa URL databáze", "database-url": "URL databáze",
"default-group": "Výchozí skupina", "default-group": "Výchozí skupina",
"default-household": "Výchozí domácnost", "default-household": "Výchozí domácnost",
"demo": "Demo", "demo": "Demo",
@@ -102,7 +102,7 @@
"duplicate": "Duplikovat", "duplicate": "Duplikovat",
"edit": "Upravit", "edit": "Upravit",
"enabled": "Povoleno", "enabled": "Povoleno",
"exception": "Vyjimka", "exception": "Výjimka",
"failed-count": "Chyba: {count}", "failed-count": "Chyba: {count}",
"failure-uploading-file": "Nahrávání souboru se nezdařilo", "failure-uploading-file": "Nahrávání souboru se nezdařilo",
"favorites": "Oblíbené", "favorites": "Oblíbené",
@@ -192,7 +192,7 @@
"a-name-is-required": "Název je povinný", "a-name-is-required": "Název je povinný",
"delete-with-name": "Odstranit {name}", "delete-with-name": "Odstranit {name}",
"confirm-delete-generic-with-name": "Opravdu chcete smazat {name}?", "confirm-delete-generic-with-name": "Opravdu chcete smazat {name}?",
"confirm-delete-own-admin-account": "Prosím, vemte na vědomí, že se pokoušíte odstranit svůj vlastní účet správce! Tato akce nemůže být odvolána a trvale smaže váš účet?", "confirm-delete-own-admin-account": "Prosím, vezměte na vědomí, že se pokoušíte odstranit svůj vlastní účet správce! Tato akce nemůže být odvolána a trvale smaže váš účet?",
"organizer": "Organizátor", "organizer": "Organizátor",
"transfer": "Přenos", "transfer": "Přenos",
"copy": "Kopírovat", "copy": "Kopírovat",
@@ -212,6 +212,8 @@
"upload-file": "Nahrát soubor", "upload-file": "Nahrát soubor",
"created-on-date": "Vytvořeno dne: {0}", "created-on-date": "Vytvořeno dne: {0}",
"unsaved-changes": "Máte neuložené změny. Chcete je uložit před odchodem? Klikněte Okay pro uložení, Cancel pro smazání změn.", "unsaved-changes": "Máte neuložené změny. Chcete je uložit před odchodem? Klikněte Okay pro uložení, Cancel pro smazání změn.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Zkopírování do schránky se nezdařilo.", "clipboard-copy-failure": "Zkopírování do schránky se nezdařilo.",
"confirm-delete-generic-items": "Opravdu chcete smazat následující položky?", "confirm-delete-generic-items": "Opravdu chcete smazat následující položky?",
"organizers": "Organizace", "organizers": "Organizace",
@@ -292,7 +294,7 @@
"manage-households": "Spravovat domácnosti", "manage-households": "Spravovat domácnosti",
"admin-household-management": "Administrátorská správa domácnosti", "admin-household-management": "Administrátorská správa domácnosti",
"admin-household-management-text": "Změny v této domácnosti budou okamžitě zohledněny.", "admin-household-management-text": "Změny v této domácnosti budou okamžitě zohledněny.",
"household-id-value": "Id domácnosti: {0}", "household-id-value": "ID domácnosti: {0}",
"private-household": "Soukromá domácnost", "private-household": "Soukromá domácnost",
"private-household-description": "Nastavení domácnosti na soukromou zakáže všechny možnosti veřejného zobrazení. To má přednost před individuálním nastavením veřejného zobrazení", "private-household-description": "Nastavení domácnosti na soukromou zakáže všechny možnosti veřejného zobrazení. To má přednost před individuálním nastavením veřejného zobrazení",
"lock-recipe-edits-from-other-households": "Uzamknout úpravy receptů z ostatních domácností", "lock-recipe-edits-from-other-households": "Uzamknout úpravy receptů z ostatních domácností",
@@ -367,7 +369,9 @@
"recipe-rules": "Pravidla receptu", "recipe-rules": "Pravidla receptu",
"applies-to-all-days": "Použije se na všechny dny", "applies-to-all-days": "Použije se na všechny dny",
"applies-on-days": "Platí pro {0}", "applies-on-days": "Platí pro {0}",
"meal-plan-settings": "Nastavení jídelníčku" "meal-plan-settings": "Nastavení jídelníčku",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Data z migrace byla smazána", "migration-data-removed": "Data z migrace byla smazána",
@@ -435,7 +439,7 @@
"error-details": "Pouze webové stránky obsahující Id+json nebo mikrodata mohou být přeneseny do Mealie. Většina hlavních webových stránek s recepty tuto datovou strukturu podporuje. Pokud vaše stránka nemůže být převedena ale json data jsou uvedena v logu, prosím nahlašte nám chybu do githubu a přiložte URL a data.", "error-details": "Pouze webové stránky obsahující Id+json nebo mikrodata mohou být přeneseny do Mealie. Většina hlavních webových stránek s recepty tuto datovou strukturu podporuje. Pokud vaše stránka nemůže být převedena ale json data jsou uvedena v logu, prosím nahlašte nám chybu do githubu a přiložte URL a data.",
"error-title": "Vypadá to, že se nám nic nepodařilo najít", "error-title": "Vypadá to, že se nám nic nepodařilo najít",
"from-url": "Přenést recept", "from-url": "Přenést recept",
"github-issues": "Hlášení chyb na Githubu", "github-issues": "Hlášení chyb na GitHubu",
"google-ld-json-info": "Google ld+json Info", "google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Musí být validní URL", "must-be-a-valid-url": "Musí být validní URL",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Vložte data receptu. Každý řádek bude považován za položku v seznamu", "paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Vložte data receptu. Každý řádek bude považován za položku v seznamu",
@@ -503,7 +507,7 @@
"insert-below": "Vložit pod", "insert-below": "Vložit pod",
"instructions": "Postup", "instructions": "Postup",
"key-name-required": "Je vyžadován název klíče", "key-name-required": "Je vyžadován název klíče",
"landscape-view-coming-soon": "Landscape View (Coming Soon)", "landscape-view-coming-soon": "Horizontální orientace (Coming Soon)",
"milligrams": "miligramy", "milligrams": "miligramy",
"new-key-name": "Nový název klíče", "new-key-name": "Nový název klíče",
"no-white-space-allowed": "Prázdná místa nejsou povolena", "no-white-space-allowed": "Prázdná místa nejsou povolena",
@@ -550,7 +554,7 @@
"join-the-conversation": "Připojit se ke konverzaci", "join-the-conversation": "Připojit se ke konverzaci",
"add-recipe-to-mealplan": "Přidat recept do jídelníčku", "add-recipe-to-mealplan": "Přidat recept do jídelníčku",
"entry-type": "Typ položky", "entry-type": "Typ položky",
"date-format-hint": "Formát data MM/DD/YYYY", "date-format-hint": "Formát data MM/DD/RRRR",
"date-format-hint-yyyy-mm-dd": "Formát RRRR-MM-DD", "date-format-hint-yyyy-mm-dd": "Formát RRRR-MM-DD",
"add-to-list": "Přidat na seznam", "add-to-list": "Přidat na seznam",
"add-to-plan": "Přidat do jídelníčku", "add-to-plan": "Přidat do jídelníčku",
@@ -632,7 +636,7 @@
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Vytvořte recept zadáním názvu. Všechny recepty musí mít jedinečná jména.", "create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Vytvořte recept zadáním názvu. Všechny recepty musí mít jedinečná jména.",
"new-recipe-names-must-be-unique": "Názvy receptů musí být jedinečné", "new-recipe-names-must-be-unique": "Názvy receptů musí být jedinečné",
"scrape-recipe": "Zpracovat recept", "scrape-recipe": "Zpracovat recept",
"scrape-recipe-description": "Zpracovat recept na url. Uveďte adresu url pro str8nku, kterou chcete zpracovat a Mealie se pokusí zpracovat recept z tohoto webu a přidat jej do vaší sbírky.", "scrape-recipe-description": "Zpracovat recept z URL. Uveďte adresu URL pro stránku, kterou chcete zpracovat a Mealie se pokusí zpracovat recept z tohoto webu a přidat jej do vaší sbírky.",
"scrape-recipe-have-a-lot-of-recipes": "Máte spoustu receptů, které chcete zpracovat najednou?", "scrape-recipe-have-a-lot-of-recipes": "Máte spoustu receptů, které chcete zpracovat najednou?",
"scrape-recipe-suggest-bulk-importer": "Vyzkoušejte hromadný import", "scrape-recipe-suggest-bulk-importer": "Vyzkoušejte hromadný import",
"scrape-recipe-have-raw-html-or-json-data": "Máte surová data HTML nebo JSON?", "scrape-recipe-have-raw-html-or-json-data": "Máte surová data HTML nebo JSON?",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Webové stránky jsou blokovány?", "scrape-recipe-website-being-blocked": "Webové stránky jsou blokovány?",
"scrape-recipe-try-importing-raw-html-instead": "Zkuste namísto toho importovat raw HTML.", "scrape-recipe-try-importing-raw-html-instead": "Zkuste namísto toho importovat raw HTML.",
"import-original-keywords-as-tags": "Importovat původní klíčová slova jako štítky", "import-original-keywords-as-tags": "Importovat původní klíčová slova jako štítky",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Zůstat v režimu úprav", "stay-in-edit-mode": "Zůstat v režimu úprav",
"parse-recipe-ingredients-after-import": "Po importu analyzovat ingredience receptu", "parse-recipe-ingredients-after-import": "Po importu analyzovat ingredience receptu",
"import-from-zip": "Importovat ze zipu", "import-from-zip": "Importovat ze zipu",
@@ -704,7 +709,7 @@
"cover-image": "Úvodní obrázek", "cover-image": "Úvodní obrázek",
"include-linked-recipes": "Zahrnout připojené recepty", "include-linked-recipes": "Zahrnout připojené recepty",
"include-linked-recipe-ingredients": "Zahrnout připojené ingredience", "include-linked-recipe-ingredients": "Zahrnout připojené ingredience",
"toggle-recipe": "Přidat/odebrat název sekce" "toggle-recipe": "Přepnout na recept/jídlo"
}, },
"recipe-finder": { "recipe-finder": {
"recipe-finder": "Vyhledávač receptů", "recipe-finder": "Vyhledávač receptů",
@@ -754,7 +759,7 @@
"restore-success": "Obnovení bylo úspěšné", "restore-success": "Obnovení bylo úspěšné",
"restore-fail": "Obnovení se nezdařilo. Pro více informací zkontrolujte protokoly serveru", "restore-fail": "Obnovení se nezdařilo. Pro více informací zkontrolujte protokoly serveru",
"backup-tag": "Štítek zálohy", "backup-tag": "Štítek zálohy",
"create-heading": "Create a Backup", "create-heading": "Vytvořit zálohy",
"delete-backup": "Smazat zálohu", "delete-backup": "Smazat zálohu",
"error-creating-backup-see-log-file": "Chyba při vytváření zálohy. Viz log soubor", "error-creating-backup-see-log-file": "Chyba při vytváření zálohy. Viz log soubor",
"full-backup": "Úplná záloha", "full-backup": "Úplná záloha",
@@ -1042,7 +1047,7 @@
"users-header": "UŽIVATELÉ", "users-header": "UŽIVATELÉ",
"users": "Uživatelé", "users": "Uživatelé",
"user-not-found": "Uživatel nebyl nalezen", "user-not-found": "Uživatel nebyl nalezen",
"webhook-time": "Čas Webhooku", "webhook-time": "Čas webhooku",
"webhooks-enabled": "Povolené webhooky", "webhooks-enabled": "Povolené webhooky",
"you-are-not-allowed-to-create-a-user": "Nemáte oprávnění k vytvoření uživatele", "you-are-not-allowed-to-create-a-user": "Nemáte oprávnění k vytvoření uživatele",
"you-are-not-allowed-to-delete-this-user": "Nemáte oprávnění k odstranění tohoto uživatele", "you-are-not-allowed-to-delete-this-user": "Nemáte oprávnění k odstranění tohoto uživatele",
@@ -1068,7 +1073,7 @@
"user-details": "Detaily uživatele", "user-details": "Detaily uživatele",
"user-name": "Uživatelské jméno", "user-name": "Uživatelské jméno",
"authentication-method": "Metoda ověření", "authentication-method": "Metoda ověření",
"authentication-method-hint": "This specifies how a user will authenticate with Mealie. If you're not sure, choose 'Mealie", "authentication-method-hint": "Toto specifikuje, jak se uživatel přihlásí do Mealie. Pokud si nejste jistí, vyberte 'Mealie'",
"permissions": "Oprávnění", "permissions": "Oprávnění",
"administrator": "Správce", "administrator": "Správce",
"user-can-invite-other-to-group": "Uživatel může pozvat ostatní do skupiny", "user-can-invite-other-to-group": "Uživatel může pozvat ostatní do skupiny",
@@ -1077,7 +1082,7 @@
"user-can-organize-group-data": "Uživatel může organizovat data skupiny", "user-can-organize-group-data": "Uživatel může organizovat data skupiny",
"enable-advanced-features": "Povolit pokročilé funkce", "enable-advanced-features": "Povolit pokročilé funkce",
"it-looks-like-this-is-your-first-time-logging-in": "Vypadá to, že toto je vaše první přihlášení.", "it-looks-like-this-is-your-first-time-logging-in": "Vypadá to, že toto je vaše první přihlášení.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Už to nechcete vidět? Nezapomeňte si změnit svůj e-mail v uživatelském nastavení!", "dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Už toto nechcete vidět? Nezapomeňte si změnit svůj e-mail v uživatelském nastavení!",
"forgot-password": "Zapomenuté heslo", "forgot-password": "Zapomenuté heslo",
"forgot-password-text": "Zadejte prosím svou e-mailovou adresu a my vám zašleme odkaz pro obnovení hesla.", "forgot-password-text": "Zadejte prosím svou e-mailovou adresu a my vám zašleme odkaz pro obnovení hesla.",
"changes-reflected-immediately": "Změny tohoto uživatele budou okamžitě zohledněny.", "changes-reflected-immediately": "Změny tohoto uživatele budou okamžitě zohledněny.",
@@ -1095,7 +1100,7 @@
"foods": { "foods": {
"merge-dialog-text": "Zkombinování zvolených potravin způsobí smazání zdrojové potraviny a veškeré odkazy na ni budou přesměrovány do cílové potraviny.", "merge-dialog-text": "Zkombinování zvolených potravin způsobí smazání zdrojové potraviny a veškeré odkazy na ni budou přesměrovány do cílové potraviny.",
"merge-food-example": "Sloučení {food1} do {food2}", "merge-food-example": "Sloučení {food1} do {food2}",
"seed-dialog-text": "Naplňte databázi potravinami z vašeho jazyka. Tímto vytvoříte přes 200 běžných potravin, které můžete použít k organizaci vaší databáze. Potravny jsou přeloženy skrze komunitní úsilí.", "seed-dialog-text": "Naplňte databázi potravinami z vašeho jazyka. Tímto vytvoříte přes 200 běžných potravin, které můžete použít k organizaci vaší databáze. Potraviny jsou přeloženy skrze komunitní úsilí.",
"seed-dialog-warning": "Již v databázi máte nějaká data. Tato akce neodstraní duplicity, budete je muset odstranit ručně.", "seed-dialog-warning": "Již v databázi máte nějaká data. Tato akce neodstraní duplicity, budete je muset odstranit ručně.",
"combine-food": "Kombinovat jídlo", "combine-food": "Kombinovat jídlo",
"source-food": "Zdrojové jídlo", "source-food": "Zdrojové jídlo",
@@ -1308,7 +1313,7 @@
}, },
"ingredients-natural-language-processor": "Zpracování přirozeného jazyka přísad", "ingredients-natural-language-processor": "Zpracování přirozeného jazyka přísad",
"ingredients-natural-language-processor-explanation": "Mealie používá podmíněná náhodná pole (CRF) pro rozbor a zpracování ingrediencí. Model používaný pro ingredience je založen na datovém souboru s více než 100 000 ingrediencemi sestaveného New York Times. Vzhledem k tomu, že model je natrénován pouze v angličtině, můžete mít při používání variabilní výsledky. Tato stránka slouží jako hřiště pro testování tohoto modelu.", "ingredients-natural-language-processor-explanation": "Mealie používá podmíněná náhodná pole (CRF) pro rozbor a zpracování ingrediencí. Model používaný pro ingredience je založen na datovém souboru s více než 100 000 ingrediencemi sestaveného New York Times. Vzhledem k tomu, že model je natrénován pouze v angličtině, můžete mít při používání variabilní výsledky. Tato stránka slouží jako hřiště pro testování tohoto modelu.",
"ingredients-natural-language-processor-explanation-2": "Není to dokonalé, ale obecně to přináší skvělé výsledky a je dobrým výchozím bodem pro ruční zpracování ingrediencí do jednotlivých polí. Alternativně můžete také použít procesor \"Brute\", který používá metodu porovnávání vzorců pro idenfikaci ingrediencí.", "ingredients-natural-language-processor-explanation-2": "Není to dokonalé, ale obecně to přináší skvělé výsledky a je dobrým výchozím bodem pro ruční zpracování ingrediencí do jednotlivých polí. Alternativně můžete také použít procesor \"Brute\", který používá metodu porovnávání vzorců pro identifikaci ingrediencí.",
"nlp": "ZPJ", "nlp": "ZPJ",
"brute": "Brute", "brute": "Brute",
"openai": "OpenAI", "openai": "OpenAI",
@@ -1380,9 +1385,9 @@
"show-advanced-description": "Zobrazit pokročilé funkce (API klíče, Webhooky a správa dat)", "show-advanced-description": "Zobrazit pokročilé funkce (API klíče, Webhooky a správa dat)",
"back-to-profile": "Zpět na profil", "back-to-profile": "Zpět na profil",
"looking-for-privacy-settings": "Hledáte nastavení ochrany soukromí?", "looking-for-privacy-settings": "Hledáte nastavení ochrany soukromí?",
"manage-your-api-tokens": "Správa API tokenů", "manage-your-api-tokens": "Spravovat API tokeny",
"manage-user-profile": "Správa uživatelského profilu", "manage-user-profile": "Spravovat uživatelský profil",
"manage-cookbooks": "Správa kuchařek", "manage-cookbooks": "Spravovat kuchařky",
"manage-members": "Spravovat členy", "manage-members": "Spravovat členy",
"manage-webhooks": "Spravovat webhooky", "manage-webhooks": "Spravovat webhooky",
"manage-notifiers": "Spravovat oznámení", "manage-notifiers": "Spravovat oznámení",
@@ -1433,7 +1438,7 @@
"required": "Toto pole je povinné", "required": "Toto pole je povinné",
"invalid-email": "E-mail musí být platný", "invalid-email": "E-mail musí být platný",
"invalid-url": "Musí být platná URL adresa", "invalid-url": "Musí být platná URL adresa",
"no-whitespace": "Prázdný prostor není povolen", "no-whitespace": "Mezery nejsou povoleny",
"min-length": "Musí být alespoň {min} znaků", "min-length": "Musí být alespoň {min} znaků",
"max-length": "Musí být nejvíce {max} znaků" "max-length": "Musí být nejvíce {max} znaků"
} }

View File

@@ -2,38 +2,38 @@
"about": { "about": {
"about": "Om", "about": "Om",
"about-mealie": "Om Mealie", "about-mealie": "Om Mealie",
"api-docs": "API dokumentation", "api-docs": "API-dokumentation",
"api-port": "API port", "api-port": "API-port",
"application-mode": "Applikationstilstand", "application-mode": "Applikationstilstand",
"database-type": "Database-type", "database-type": "Database-type",
"database-url": "Database-url", "database-url": "Database-URL",
"default-group": "Standardgruppe", "default-group": "Standardgruppe",
"default-household": "Standard Husstand", "default-household": "Standardhusstand",
"demo": "Demo", "demo": "Demo",
"demo-status": "Demo status", "demo-status": "Demo-status",
"development": "Udvikling", "development": "Udvikling",
"docs": "Dokumenter", "docs": "Dokumentation",
"download-log": "Download log", "download-log": "Download log",
"download-recipe-json": "Senest hentede JSON", "download-recipe-json": "Senest hentede JSON",
"github": "GitHub", "github": "GitHub",
"log-lines": "Log-linjer", "log-lines": "Loglinjer",
"not-demo": "Ikke demo", "not-demo": "Ikke demo",
"portfolio": "Portefølje", "portfolio": "Portefølje",
"production": "Produktion", "production": "Produktion",
"support": "Hjælp", "support": "Hjælp",
"version": "Version", "version": "Version",
"unknown-version": "ukendt", "unknown-version": "ukendt",
"sponsor": "Sponsor" "sponsor": "Sponsorér"
}, },
"asset": { "asset": {
"assets": "Ekstramateriale", "assets": "Aktiver",
"code": "Kode", "code": "Kode",
"file": "Fil", "file": "Fil",
"image": "Billede", "image": "Billede",
"new-asset": "Nyt aktiv", "new-asset": "Nyt aktiv",
"pdf": "PDF", "pdf": "PDF",
"recipe": "Opskrift", "recipe": "Opskrift",
"show-assets": "Vis ekstramateriale", "show-assets": "Vis aktiver",
"error-submitting-form": "Fejl ved indsendelse af data" "error-submitting-form": "Fejl ved indsendelse af data"
}, },
"category": { "category": {
@@ -51,11 +51,11 @@
"category": "Kategori" "category": "Kategori"
}, },
"events": { "events": {
"apprise-url": "Apprise URL", "apprise-url": "Apprise-URL",
"database": "Database", "database": "Database",
"delete-event": "Slet hændelse", "delete-event": "Slet begivenhed",
"event-delete-confirmation": "Er du sikker på, at du vil slette denne begivenhed?", "event-delete-confirmation": "Er du sikker på, at du vil slette denne begivenhed?",
"event-deleted": "Hændelse slettet", "event-deleted": "Begivenhed slettet",
"event-updated": "Hændelse opdateret", "event-updated": "Hændelse opdateret",
"new-notification-form-description": "Mealie bruger Apprise biblioteket for at generere notifikationer. De giver mange muligheder for notifikationer til tjenester. Kig i deres wiki for en gennemgående guide til, hvordan en URL oprettes i din situation. Hvis muligt, kan valget af din type af notifikation omfatte flere ekstrafunktioner.", "new-notification-form-description": "Mealie bruger Apprise biblioteket for at generere notifikationer. De giver mange muligheder for notifikationer til tjenester. Kig i deres wiki for en gennemgående guide til, hvordan en URL oprettes i din situation. Hvis muligt, kan valget af din type af notifikation omfatte flere ekstrafunktioner.",
"new-version": "Ny opdatering er tilgængelig!", "new-version": "Ny opdatering er tilgængelig!",
@@ -212,6 +212,8 @@
"upload-file": "Upload fil", "upload-file": "Upload fil",
"created-on-date": "Oprettet den: {0}", "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.", "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.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Kopiering til udklipsholderen mislykkedes.", "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": "Organisatorer", "organizers": "Organisatorer",
@@ -343,7 +345,7 @@
"lunch": "Frokost", "lunch": "Frokost",
"dinner": "Aftensmad", "dinner": "Aftensmad",
"snack": "Snack", "snack": "Snack",
"drink": "Drink", "drink": "Drik",
"dessert": "Dessert", "dessert": "Dessert",
"type-any": "Alle", "type-any": "Alle",
"day-any": "Alle", "day-any": "Alle",
@@ -367,7 +369,9 @@
"recipe-rules": "Opskriftsregler", "recipe-rules": "Opskriftsregler",
"applies-to-all-days": "Gælder for alle dage", "applies-to-all-days": "Gælder for alle dage",
"applies-on-days": "Gælder for {0}e", "applies-on-days": "Gælder for {0}e",
"meal-plan-settings": "Indstillinger for madplanlægning" "meal-plan-settings": "Indstillinger for madplanlægning",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Migreringsdata fjernet", "migration-data-removed": "Migreringsdata fjernet",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Upload en opskrift", "upload-a-recipe": "Upload en opskrift",
"upload-individual-zip-file": "Upload en individuel .zip-fil, eksporteret fra en anden Mealie-instans.", "upload-individual-zip-file": "Upload en individuel .zip-fil, eksporteret fra en anden Mealie-instans.",
"url-form-hint": "Kopiér og indsæt et link fra din foretrukne opskrifts hjemmeside", "url-form-hint": "Kopiér og indsæt et link fra din foretrukne opskrifts hjemmeside",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Kopiér og indsæt kilde-URL'en til dine data (valgfrit)",
"view-scraped-data": "Vis dataudtræk", "view-scraped-data": "Vis dataudtræk",
"trim-whitespace-description": "Fjern indledende og efterfølgende mellemrum samt blanke linjer", "trim-whitespace-description": "Fjern indledende og efterfølgende mellemrum samt blanke linjer",
"trim-prefix-description": "Beskær første tegn fra hver linje", "trim-prefix-description": "Beskær første tegn fra hver linje",
@@ -562,9 +566,9 @@
"failed-to-add-recipes-to-list": "Kunne ikke tilføje opskrift til listen", "failed-to-add-recipes-to-list": "Kunne ikke tilføje opskrift til listen",
"failed-to-add-recipe-to-mealplan": "Kunne ikke tilføje opskrift til madplanen", "failed-to-add-recipe-to-mealplan": "Kunne ikke tilføje opskrift til madplanen",
"failed-to-add-to-list": "Kunne ikke tilføje opskrift til listen", "failed-to-add-to-list": "Kunne ikke tilføje opskrift til listen",
"yield": "Portioner", "yield": "Mængde",
"yields-amount-with-text": "{amount} {text}", "yields-amount-with-text": "Mængde {amount} {text}",
"yield-text": "Portionsenhed (eks. pers./stk.)", "yield-text": "Hvor mange enheder giver opskriften?",
"quantity": "Antal", "quantity": "Antal",
"choose-unit": "Vælg enhed", "choose-unit": "Vælg enhed",
"press-enter-to-create": "Tryk enter for at oprette", "press-enter-to-create": "Tryk enter for at oprette",
@@ -637,9 +641,10 @@
"scrape-recipe-suggest-bulk-importer": "Prøv masseimport", "scrape-recipe-suggest-bulk-importer": "Prøv masseimport",
"scrape-recipe-have-raw-html-or-json-data": "Har rå HTML- eller JSON-data?", "scrape-recipe-have-raw-html-or-json-data": "Har rå HTML- eller JSON-data?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Du kan importere direkte fra rå data", "scrape-recipe-you-can-import-from-raw-data-directly": "Du kan importere direkte fra rå data",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Bliver hjemmesiden blokeret?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Forsøg at importere den rå HTML i stedet.",
"import-original-keywords-as-tags": "Importér originale nøgleord som mærker", "import-original-keywords-as-tags": "Importér originale nøgleord som mærker",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Bliv i redigeringstilstand", "stay-in-edit-mode": "Bliv i redigeringstilstand",
"parse-recipe-ingredients-after-import": "Fortolk opskrift ingredienser efter import", "parse-recipe-ingredients-after-import": "Fortolk opskrift ingredienser efter import",
"import-from-zip": "Importer fra zip-fil", "import-from-zip": "Importer fra zip-fil",
@@ -659,14 +664,14 @@
"bulk-import-process-has-failed": "Der opstod en fejl ved import af opskrifter", "bulk-import-process-has-failed": "Der opstod en fejl ved import af opskrifter",
"report-deletion-failed": "Sletning af rapport mislykkedes", "report-deletion-failed": "Sletning af rapport mislykkedes",
"recipe-debugger": "Fejlsøgning af opskrifter", "recipe-debugger": "Fejlsøgning af opskrifter",
"recipe-debugger-description": "Indsæt URL'en på hjemmesiden, der indeholder den opskrift, du vil fejlsøge. URL-adressen vil blive læst og resultaterne vil blive vist. Hvis ingen data bliver vist, er indhentning af opskrifter fra hjemmesiden endnu ikke understøttet af Mealie.", "recipe-debugger-description": "Indsæt URL'en på hjemmesiden, der indeholder den opskrift, du vil fejlsøge. URL-adressen vil blive læst og resultaterne vil blive vist. Hvis ingen data bliver vist, er indhentning af opskrifter fra hjemmesiden endnu ikke understøttet af Mealie.",
"use-openai": "Brug OpenAI", "use-openai": "Brug OpenAI",
"recipe-debugger-use-openai-description": "Brug OpenAI til at fortolke resultaterne i stedet for at stole på scraperbiblioteket. Når du opretter en opskrift via URL, gøres dette automatisk, hvis skraberbiblioteket fejler, men du kan teste det manuelt her.", "recipe-debugger-use-openai-description": "Brug OpenAI til at fortolke resultaterne i stedet for at stole på scraperbiblioteket. Når du opretter en opskrift via URL, gøres dette automatisk, hvis skraberbiblioteket fejler, men du kan teste det manuelt her.",
"debug": "Fejlsøgning", "debug": "Fejlsøgning",
"tree-view": "Træ visning", "tree-view": "Træ visning",
"recipe-servings": "Opskrift Servinger", "recipe-servings": "Opskrift Servinger",
"recipe-yield": "Udbytte af opskrift", "recipe-yield": "Udbytte af opskrift",
"recipe-yield-text": "Portioner", "recipe-yield-text": "Mængde",
"unit": "Enhed", "unit": "Enhed",
"upload-image": "Upload billede", "upload-image": "Upload billede",
"screen-awake": "Hold skærmen tændt", "screen-awake": "Hold skærmen tændt",
@@ -1308,7 +1313,7 @@
}, },
"ingredients-natural-language-processor": "Ingredienser Naturlig Sprogprocessor", "ingredients-natural-language-processor": "Ingredienser Naturlig Sprogprocessor",
"ingredients-natural-language-processor-explanation": "Mealie bruger Conditional Random Fields felter (CRF'er) til berarbejdning af ingredienser. Den model, der anvendes til ingredienser er baseret ud fra et datasæt på over 100.000 ingredienser fra et datasæt udarbejdet af New York Times. Bemærk, at da modellen kun er trænet på engelsk, kan du have forskellige resultater, når du bruger modellen på andre sprog. På denne side kan du teste modellen.", "ingredients-natural-language-processor-explanation": "Mealie bruger Conditional Random Fields felter (CRF'er) til berarbejdning af ingredienser. Den model, der anvendes til ingredienser er baseret ud fra et datasæt på over 100.000 ingredienser fra et datasæt udarbejdet af New York Times. Bemærk, at da modellen kun er trænet på engelsk, kan du have forskellige resultater, når du bruger modellen på andre sprog. På denne side kan du teste modellen.",
"ingredients-natural-language-processor-explanation-2": "Det er ikke perfekt, men giver generelt gode resultater og er et godt udgangspunkt for manuel redigering af ingredienser i individuelle felter. Alternativt kan du også bruge \"Brute\" metoden, der bruger en mønstermatchende teknik til at identificere ingredienser.", "ingredients-natural-language-processor-explanation-2": "Det er ikke perfekt, men giver generelt gode resultater og er et godt udgangspunkt for manuel redigering af ingredienser i individuelle felter. Alternativt kan du også bruge \"Brute\"-metoden, der bruger en mønstermatchende teknik til at identificere ingredienser.",
"nlp": "NLP", "nlp": "NLP",
"brute": "Brute", "brute": "Brute",
"openai": "OpenAI", "openai": "OpenAI",
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "Dette felt er påkrævet",
"invalid-email": "Email Must Be Valid", "invalid-email": "E-mailen skal være gyldig",
"invalid-url": "Must Be A Valid URL", "invalid-url": "URL'en skal være gyldig",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "Mellemrum er ikke tilladt",
"min-length": "Must Be At Least {min} Characters", "min-length": "Der skal mindst være {min} tegn",
"max-length": "Must Be At Most {max} Characters" "max-length": "Der må højst være {max} tegn"
} }
} }

View File

@@ -69,7 +69,7 @@
"new-notification": "Neue Benachrichtigung", "new-notification": "Neue Benachrichtigung",
"event-notifiers": "Ereignis-Benachrichtigungen", "event-notifiers": "Ereignis-Benachrichtigungen",
"apprise-url-skipped-if-blank": "Apprise-URL (wird übersprungen, wenn leer)", "apprise-url-skipped-if-blank": "Apprise-URL (wird übersprungen, wenn leer)",
"apprise-url-is-left-intentionally-blank": "Da Apprise-URLs normalerweise sensible Informationen enthalten, wird dieses Feld während der Bearbeitung absichtlich leer gelassen. Wenn Sie die URL aktualisieren möchten, geben Sie hier die neue ein. Andernfalls lassen Sie diese leer, um die aktuelle URL zu behalten.", "apprise-url-is-left-intentionally-blank": "Da Apprise-URLs normalerweise sensible Informationen enthalten, wird dieses Feld während der Bearbeitung absichtlich leer gelassen. Wenn du die URL aktualisieren möchtest, gib hier die neue ein. Andernfalls lasse diese leer, um die aktuelle URL zu behalten.",
"enable-notifier": "Benachrichtigen aktivieren", "enable-notifier": "Benachrichtigen aktivieren",
"what-events": "Welche Ereignisse soll diese Benachrichtigung abonnieren?", "what-events": "Welche Ereignisse soll diese Benachrichtigung abonnieren?",
"user-events": "Benutzer-Ereignisse", "user-events": "Benutzer-Ereignisse",
@@ -212,6 +212,8 @@
"upload-file": "Datei hochladen", "upload-file": "Datei hochladen",
"created-on-date": "Erstellt am: {0}", "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.", "unsaved-changes": "Du hast ungespeicherte Änderungen. Möchtest du vor dem Verlassen speichern? OK um zu speichern, Cancel um Änderungen zu verwerfen.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Fehler beim Kopieren in die Zwischenablage.", "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", "organizers": "Organisieren",
@@ -279,7 +281,7 @@
"admin-group-management-text": "Änderungen an dieser Gruppe sind sofort wirksam.", "admin-group-management-text": "Änderungen an dieser Gruppe sind sofort wirksam.",
"group-id-value": "Gruppen ID: {0}", "group-id-value": "Gruppen ID: {0}",
"total-households": "Haushalte insgesamt", "total-households": "Haushalte insgesamt",
"you-must-select-a-group-before-selecting-a-household": "Sie müssen eine Gruppe auswählen, bevor Sie einen Haushalt auswählen" "you-must-select-a-group-before-selecting-a-household": "Du musst eine Gruppe auswählen, bevor du einen Haushalt auswählst"
}, },
"household": { "household": {
"household": "Haushalt", "household": "Haushalt",
@@ -367,7 +369,9 @@
"recipe-rules": "Rezeptregeln", "recipe-rules": "Rezeptregeln",
"applies-to-all-days": "Gilt an allen Tagen", "applies-to-all-days": "Gilt an allen Tagen",
"applies-on-days": "Gilt {0}s", "applies-on-days": "Gilt {0}s",
"meal-plan-settings": "Essensplan Einstellungen" "meal-plan-settings": "Essensplan Einstellungen",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Migrationsdaten entfernt", "migration-data-removed": "Migrationsdaten entfernt",
@@ -403,7 +407,7 @@
"title": "Tandoor Rezepte" "title": "Tandoor Rezepte"
}, },
"cookn": { "cookn": {
"description-long": "Mealie kann Rezepte von DVO Cook'n X3 importieren. Exportieren Sie ein Kochbuch oder ein Menü im \"Cook'n\"-Format, benennen Sie die Export-Erweiterung in .zip um, dann laden Sie die .zip unten hoch.", "description-long": "Mealie kann Rezepte von DVO Cook'n X3 importieren. Exportiere ein Kochbuch oder ein Menü im \"Cook'n\"-Format, benenne die Export-Erweiterung in .zip um, dann lade die .zip unten hoch.",
"title": "DVO Cook'n X3" "title": "DVO Cook'n X3"
}, },
"recipe-data-migrations": "Rezeptdatenmigration", "recipe-data-migrations": "Rezeptdatenmigration",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Rezept hochladen", "upload-a-recipe": "Rezept hochladen",
"upload-individual-zip-file": "Lade eine individuelle .zip-Datei hoch, die von einer anderen Mealie-Instanz exportiert wird.", "upload-individual-zip-file": "Lade eine individuelle .zip-Datei hoch, die von einer anderen Mealie-Instanz exportiert wird.",
"url-form-hint": "Kopiere einen Link von deiner Lieblingsrezept-Website und füge ihn ein", "url-form-hint": "Kopiere einen Link von deiner Lieblingsrezept-Website und füge ihn ein",
"copy-and-paste-the-source-url-of-your-data-optional": "Kopieren und fügen Sie die Quell-URL Ihrer Daten ein (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Kopiere und füge die Quell-URL deiner Daten ein (optional)",
"view-scraped-data": "Gesammelte Daten anzeigen", "view-scraped-data": "Gesammelte Daten anzeigen",
"trim-whitespace-description": "Leerzeichen am Anfang und Ende sowie leere Zeilen entfernen", "trim-whitespace-description": "Leerzeichen am Anfang und Ende sowie leere Zeilen entfernen",
"trim-prefix-description": "Erste Zeichen aus jeder Zeile entfernen", "trim-prefix-description": "Erste Zeichen aus jeder Zeile entfernen",
@@ -522,7 +526,7 @@
"recipe-image": "Rezeptbild", "recipe-image": "Rezeptbild",
"recipe-image-updated": "Rezeptbild aktualisiert", "recipe-image-updated": "Rezeptbild aktualisiert",
"delete-image": "Rezeptbild löschen", "delete-image": "Rezeptbild löschen",
"delete-image-confirmation": "Bist du dir sicher, dass du dieses Rezept löschen möchtest?", "delete-image-confirmation": "Bist du dir sicher, dass du dieses Rezeptbild löschen möchtest?",
"recipe-image-deleted": "Rezeptbild gelöscht", "recipe-image-deleted": "Rezeptbild gelöscht",
"recipe-name": "Rezeptname", "recipe-name": "Rezeptname",
"recipe-settings": "Rezepteinstellungen", "recipe-settings": "Rezepteinstellungen",
@@ -638,8 +642,9 @@
"scrape-recipe-have-raw-html-or-json-data": "Hast du Roh-HTML oder JSON Daten?", "scrape-recipe-have-raw-html-or-json-data": "Hast du Roh-HTML oder JSON Daten?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Du kannst direkt von Rohdaten importieren", "scrape-recipe-you-can-import-from-raw-data-directly": "Du kannst direkt von Rohdaten importieren",
"scrape-recipe-website-being-blocked": "Die Website wird blockiert?", "scrape-recipe-website-being-blocked": "Die Website wird blockiert?",
"scrape-recipe-try-importing-raw-html-instead": "Versuchen Sie stattdessen das reine HTML zu importieren.", "scrape-recipe-try-importing-raw-html-instead": "Versuche stattdessen das reine HTML zu importieren.",
"import-original-keywords-as-tags": "Importiere ursprüngliche Stichwörter als Schlagwörter", "import-original-keywords-as-tags": "Importiere ursprüngliche Stichwörter als Schlagwörter",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Im Bearbeitungsmodus bleiben", "stay-in-edit-mode": "Im Bearbeitungsmodus bleiben",
"parse-recipe-ingredients-after-import": "Zutaten nach dem Import parsen", "parse-recipe-ingredients-after-import": "Zutaten nach dem Import parsen",
"import-from-zip": "Von Zip importieren", "import-from-zip": "Von Zip importieren",
@@ -765,7 +770,7 @@
"backup-restore": "Wiederherstellen aus Sicherung", "backup-restore": "Wiederherstellen aus Sicherung",
"back-restore-description": "Das Wiederherstellen dieser Sicherung wird alle vorhandenen Daten in deiner Datenbank und im Datenverzeichnis überschreiben und durch den Inhalt dieser Sicherung ersetzen. {cannot-be-undone} Wenn die Wiederherstellung erfolgreich war, wirst du abgemeldet.", "back-restore-description": "Das Wiederherstellen dieser Sicherung wird alle vorhandenen Daten in deiner Datenbank und im Datenverzeichnis überschreiben und durch den Inhalt dieser Sicherung ersetzen. {cannot-be-undone} Wenn die Wiederherstellung erfolgreich war, wirst du abgemeldet.",
"cannot-be-undone": "Diese Aktion kann nicht rückgängig gemacht werden - verwende sie mit Vorsicht.", "cannot-be-undone": "Diese Aktion kann nicht rückgängig gemacht werden - verwende sie mit Vorsicht.",
"postgresql-note": "Falls Sie PostgreSQL verwenden, überprüfen Sie bitte den {backup-restore-process} vor dem Wiederherstellen.", "postgresql-note": "Falls du PostgreSQL verwendest, überprüfe bitte den {backup-restore-process} vor dem Wiederherstellen.",
"backup-restore-process-in-the-documentation": "Sichern- und Wiederherstellen-Prozess in der Dokumentation", "backup-restore-process-in-the-documentation": "Sichern- und Wiederherstellen-Prozess in der Dokumentation",
"irreversible-acknowledgment": "Ich verstehe, dass diese Maßnahme unumkehrbar und destruktiv ist und Datenverlust verursachen kann", "irreversible-acknowledgment": "Ich verstehe, dass diese Maßnahme unumkehrbar und destruktiv ist und Datenverlust verursachen kann",
"restore-backup": "Sicherung wiederherstellen" "restore-backup": "Sicherung wiederherstellen"
@@ -1082,7 +1087,7 @@
"forgot-password-text": "Bitte gib Deine E-Mail-Adresse ein. Wir werden Dir eine E-Mail zusenden, damit Du Dein Passwort zurücksetzen kannst.", "forgot-password-text": "Bitte gib Deine E-Mail-Adresse ein. Wir werden Dir eine E-Mail zusenden, damit Du Dein Passwort zurücksetzen kannst.",
"changes-reflected-immediately": "Änderungen an diesem Benutzer sind sofort wirksam.", "changes-reflected-immediately": "Änderungen an diesem Benutzer sind sofort wirksam.",
"default-activity": "Standardaktivität", "default-activity": "Standardaktivität",
"default-activity-hint": "Wählen Sie die Seite, auf die Sie navigieren möchten, wenn Sie sich von diesem Gerät aus anmelden" "default-activity-hint": "Wähle die Seite, auf die du navigieren möchtest, wenn du dich von diesem Gerät aus anmeldest"
}, },
"language-dialog": { "language-dialog": {
"translated": "übersetzt", "translated": "übersetzt",
@@ -1096,7 +1101,7 @@
"merge-dialog-text": "Zusammenführen der ausgewählten Lebensmittel führt diese zusammen in ein einzelnes Lebensmittel. Die Ausgangslebensmittel werden gelöscht und alle Verweise werden auf das zusammengeführte Lebensmittel angepasst.", "merge-dialog-text": "Zusammenführen der ausgewählten Lebensmittel führt diese zusammen in ein einzelnes Lebensmittel. Die Ausgangslebensmittel werden gelöscht und alle Verweise werden auf das zusammengeführte Lebensmittel angepasst.",
"merge-food-example": "{food1} wird zu {food2} zusammengeführt", "merge-food-example": "{food1} wird zu {food2} zusammengeführt",
"seed-dialog-text": "Füllt die Datenbank mit Lebensmitteln basierend auf deiner Landessprache. Hierdurch werden mehr als 200 gängige Lebensmittel eingetragen, die verwendet werden können, um die Datenbank zu organisieren. Die Lebensmittel werden von der Community übersetzt.", "seed-dialog-text": "Füllt die Datenbank mit Lebensmitteln basierend auf deiner Landessprache. Hierdurch werden mehr als 200 gängige Lebensmittel eingetragen, die verwendet werden können, um die Datenbank zu organisieren. Die Lebensmittel werden von der Community übersetzt.",
"seed-dialog-warning": "Sie haben bereits einige Einträge in der Datenbank. Diese Aktion wird Doppelungen nicht berücksichtigen. Sie müssen diese selbst beheben.", "seed-dialog-warning": "Du hast bereits einige Einträge in der Datenbank. Diese Aktion wird Doppelungen nicht berücksichtigen. Du musst diese selbst beheben.",
"combine-food": "Lebensmittel zusammenführen", "combine-food": "Lebensmittel zusammenführen",
"source-food": "Quell-Lebensmittel", "source-food": "Quell-Lebensmittel",
"target-food": "Ziel-Lebensmittel", "target-food": "Ziel-Lebensmittel",
@@ -1135,7 +1140,7 @@
"seed-dialog-text": "Füllt die Datenbank mit gängigen Kategorien basierend auf deiner Sprache.", "seed-dialog-text": "Füllt die Datenbank mit gängigen Kategorien basierend auf deiner Sprache.",
"edit-label": "Kategorie bearbeiten", "edit-label": "Kategorie bearbeiten",
"new-label": "Neue Kategorie", "new-label": "Neue Kategorie",
"labels": "Kategorien", "labels": "Bezeichnungen",
"assign-label": "Kategorie zuweisen" "assign-label": "Kategorie zuweisen"
}, },
"recipes": { "recipes": {

View File

@@ -212,6 +212,8 @@
"upload-file": "Μεταφόρτωση αρχείου", "upload-file": "Μεταφόρτωση αρχείου",
"created-on-date": "Δημιουργήθηκε στις: {0}", "created-on-date": "Δημιουργήθηκε στις: {0}",
"unsaved-changes": "Εχετε μη αποθηκευμένες αλλαγές. Θέλετε να κάνετε αποθήκευση πριν από την αποχώρηση; Εντάξει για αποθήκευση, Ακυρο για απόρριψη των αλλαγών.", "unsaved-changes": "Εχετε μη αποθηκευμένες αλλαγές. Θέλετε να κάνετε αποθήκευση πριν από την αποχώρηση; Εντάξει για αποθήκευση, Ακυρο για απόρριψη των αλλαγών.",
"discard-changes": "Απόρριψη αλλαγών",
"discard-changes-description": "Εχετε μη αποθηκευμένες αλλαγές, θέλετε σίγουρα να τις απορρίψετε;",
"clipboard-copy-failure": "Η αντιγραφή στο πρόχειρο απέτυχε.", "clipboard-copy-failure": "Η αντιγραφή στο πρόχειρο απέτυχε.",
"confirm-delete-generic-items": "Θέλετε σίγουρα να διαγράψετε τα ακόλουθα αντικείμενα;", "confirm-delete-generic-items": "Θέλετε σίγουρα να διαγράψετε τα ακόλουθα αντικείμενα;",
"organizers": "Οργανωτές", "organizers": "Οργανωτές",
@@ -367,7 +369,9 @@
"recipe-rules": "Κανόνες Συνταγής", "recipe-rules": "Κανόνες Συνταγής",
"applies-to-all-days": "Εφαρμόζεται για όλες τις ημέρες", "applies-to-all-days": "Εφαρμόζεται για όλες τις ημέρες",
"applies-on-days": "Εφαρμόζεται κάθε {0}", "applies-on-days": "Εφαρμόζεται κάθε {0}",
"meal-plan-settings": "Ρυθμίσεις προγράμματος γευμάτων" "meal-plan-settings": "Ρυθμίσεις προγράμματος γευμάτων",
"add-all-to-list": "Προσθήκη όλων στη λίστα",
"add-day-to-list": "Προσθήκη ημέρας στη λίστα"
}, },
"migration": { "migration": {
"migration-data-removed": "Τα δεδομένα μετεγκατάστασης καταργήθηκαν", "migration-data-removed": "Τα δεδομένα μετεγκατάστασης καταργήθηκαν",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Η ιστοσελίδα μπλοκάρεται;", "scrape-recipe-website-being-blocked": "Η ιστοσελίδα μπλοκάρεται;",
"scrape-recipe-try-importing-raw-html-instead": "Δοκιμάστε να εισάγετε τον ακατέργαστο κώδικα HTML.", "scrape-recipe-try-importing-raw-html-instead": "Δοκιμάστε να εισάγετε τον ακατέργαστο κώδικα HTML.",
"import-original-keywords-as-tags": "Εισαγωγή αρχικών λέξεων-κλειδιών ως ετικέτες", "import-original-keywords-as-tags": "Εισαγωγή αρχικών λέξεων-κλειδιών ως ετικέτες",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Παραμονή σε λειτουργία επεξεργασίας", "stay-in-edit-mode": "Παραμονή σε λειτουργία επεξεργασίας",
"parse-recipe-ingredients-after-import": "Ανάλυση συστατικών συνταγής μετά την εισαγωγή", "parse-recipe-ingredients-after-import": "Ανάλυση συστατικών συνταγής μετά την εισαγωγή",
"import-from-zip": "Εισαγωγή μέσω zip", "import-from-zip": "Εισαγωγή μέσω zip",

View File

@@ -212,6 +212,8 @@
"upload-file": "Upload File", "upload-file": "Upload File",
"created-on-date": "Created on: {0}", "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.", "unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Failed to copy to the clipboard.", "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", "organizers": "Organisers",
@@ -367,7 +369,9 @@
"recipe-rules": "Recipe Rules", "recipe-rules": "Recipe Rules",
"applies-to-all-days": "Applies to all days", "applies-to-all-days": "Applies to all days",
"applies-on-days": "Applies on {0}s", "applies-on-days": "Applies on {0}s",
"meal-plan-settings": "Meal Plan Settings" "meal-plan-settings": "Meal Plan Settings",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Migration data removed", "migration-data-removed": "Migration data removed",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "Import original keywords as tags", "import-original-keywords-as-tags": "Import original keywords as tags",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Stay in Edit mode", "stay-in-edit-mode": "Stay in Edit mode",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"import-from-zip": "Import from Zip", "import-from-zip": "Import from Zip",

View File

@@ -212,6 +212,8 @@
"upload-file": "Upload File", "upload-file": "Upload File",
"created-on-date": "Created on: {0}", "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.", "unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Failed to copy to the clipboard.", "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", "organizers": "Organizers",
@@ -367,7 +369,9 @@
"recipe-rules": "Recipe Rules", "recipe-rules": "Recipe Rules",
"applies-to-all-days": "Applies to all days", "applies-to-all-days": "Applies to all days",
"applies-on-days": "Applies on {0}s", "applies-on-days": "Applies on {0}s",
"meal-plan-settings": "Meal Plan Settings" "meal-plan-settings": "Meal Plan Settings",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Migration data removed", "migration-data-removed": "Migration data removed",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "Import original keywords as tags", "import-original-keywords-as-tags": "Import original keywords as tags",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Stay in Edit mode", "stay-in-edit-mode": "Stay in Edit mode",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"import-from-zip": "Import from Zip", "import-from-zip": "Import from Zip",

View File

@@ -212,6 +212,8 @@
"upload-file": "Subir Archivo", "upload-file": "Subir Archivo",
"created-on-date": "Creado el {0}", "created-on-date": "Creado el {0}",
"unsaved-changes": "Tienes cambios sin guardar. ¿Quieres guardar antes de salir? Aceptar para guardar, Cancelar para descartar cambios.", "unsaved-changes": "Tienes cambios sin guardar. ¿Quieres guardar antes de salir? Aceptar para guardar, Cancelar para descartar cambios.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "No se pudo copiar al portapapeles.", "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": "Organizadores", "organizers": "Organizadores",
@@ -343,8 +345,8 @@
"lunch": "Comida principal", "lunch": "Comida principal",
"dinner": "Cena", "dinner": "Cena",
"snack": "Snack", "snack": "Snack",
"drink": "Drink", "drink": "Bebida",
"dessert": "Dessert", "dessert": "Postre",
"type-any": "Cualquiera", "type-any": "Cualquiera",
"day-any": "Cualquier", "day-any": "Cualquier",
"editor": "Editor", "editor": "Editor",
@@ -367,7 +369,9 @@
"recipe-rules": "Reglas de Recetas", "recipe-rules": "Reglas de Recetas",
"applies-to-all-days": "Aplica para todos los días", "applies-to-all-days": "Aplica para todos los días",
"applies-on-days": "Se aplica en {0}s", "applies-on-days": "Se aplica en {0}s",
"meal-plan-settings": "Configuración del Plan de Comidas" "meal-plan-settings": "Configuración del Plan de Comidas",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Datos de migración eliminados", "migration-data-removed": "Datos de migración eliminados",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Subir una receta", "upload-a-recipe": "Subir una receta",
"upload-individual-zip-file": "Sube un archivo .zip individual exportado desde otra instancia de Mealie.", "upload-individual-zip-file": "Sube un archivo .zip individual exportado desde otra instancia de Mealie.",
"url-form-hint": "Copia y pega un enlace desde tu página web favorita", "url-form-hint": "Copia y pega un enlace desde tu página web favorita",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Copia y pega la URL de origen de tus datos (opcional)",
"view-scraped-data": "Ver información recuperada", "view-scraped-data": "Ver información recuperada",
"trim-whitespace-description": "Eliminar espacios en blanco iniciales y finales así como líneas en blanco", "trim-whitespace-description": "Eliminar espacios en blanco iniciales y finales así como líneas en blanco",
"trim-prefix-description": "Eliminar el primer carácter de cada línea", "trim-prefix-description": "Eliminar el primer carácter de cada línea",
@@ -453,7 +457,7 @@
"import-by-url": "Importar una receta desde URL", "import-by-url": "Importar una receta desde URL",
"create-manually": "Crear receta manualmente", "create-manually": "Crear receta manualmente",
"make-recipe-image": "Haz de esta la imagen de la receta", "make-recipe-image": "Haz de esta la imagen de la receta",
"add-food": "Add Food", "add-food": "Agregar comida",
"add-recipe": "Agregar receta" "add-recipe": "Agregar receta"
}, },
"page": { "page": {
@@ -523,7 +527,7 @@
"recipe-image-updated": "Imagen de la receta actualizada", "recipe-image-updated": "Imagen de la receta actualizada",
"delete-image": "Borra la imagen de la receta", "delete-image": "Borra la imagen de la receta",
"delete-image-confirmation": "¿Estás seguro de que quieres borrar esta imagen de la receta?", "delete-image-confirmation": "¿Estás seguro de que quieres borrar esta imagen de la receta?",
"recipe-image-deleted": "Recipe image deleted", "recipe-image-deleted": "Imagen de receta eliminada",
"recipe-name": "Nombre de la receta", "recipe-name": "Nombre de la receta",
"recipe-settings": "Ajustes de la receta", "recipe-settings": "Ajustes de la receta",
"recipe-update-failed": "Error al actualizar la receta", "recipe-update-failed": "Error al actualizar la receta",
@@ -569,7 +573,7 @@
"choose-unit": "Elija unidad", "choose-unit": "Elija unidad",
"press-enter-to-create": "Presione Intro para crear", "press-enter-to-create": "Presione Intro para crear",
"choose-food": "Elija comida", "choose-food": "Elija comida",
"choose-recipe": "Choose Recipe", "choose-recipe": "Elige la receta",
"notes": "Notas", "notes": "Notas",
"toggle-section": "Activar sección", "toggle-section": "Activar sección",
"see-original-text": "Mostrar Texto Original", "see-original-text": "Mostrar Texto Original",
@@ -597,7 +601,7 @@
"made-this": "Lo hice", "made-this": "Lo hice",
"how-did-it-turn-out": "¿Cómo resultó esto?", "how-did-it-turn-out": "¿Cómo resultó esto?",
"user-made-this": "{user} hizo esto", "user-made-this": "{user} hizo esto",
"made-for-recipe": "Made for {recipe}", "made-for-recipe": "Hecha para {recipe}",
"added-to-timeline": "Añadido a la línea de tiempo", "added-to-timeline": "Añadido a la línea de tiempo",
"failed-to-add-to-timeline": "No se pudo agregar a la línea de tiempo", "failed-to-add-to-timeline": "No se pudo agregar a la línea de tiempo",
"failed-to-update-recipe": "Error al actualizar la receta", "failed-to-update-recipe": "Error al actualizar la receta",
@@ -637,9 +641,10 @@
"scrape-recipe-suggest-bulk-importer": "Prueba el importador masivo", "scrape-recipe-suggest-bulk-importer": "Prueba el importador masivo",
"scrape-recipe-have-raw-html-or-json-data": "¿Tiene datos HTML o JSON?", "scrape-recipe-have-raw-html-or-json-data": "¿Tiene datos HTML o JSON?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Puede importar directamente desde datos brutos", "scrape-recipe-you-can-import-from-raw-data-directly": "Puede importar directamente desde datos brutos",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "¿Sitio web bloqueado?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Intenta importar el HTML en bruto.",
"import-original-keywords-as-tags": "Importar palabras clave originales como etiquetas", "import-original-keywords-as-tags": "Importar palabras clave originales como etiquetas",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Permanecer en modo edición", "stay-in-edit-mode": "Permanecer en modo edición",
"parse-recipe-ingredients-after-import": "Analizar los ingredientes de la receta después de importarla", "parse-recipe-ingredients-after-import": "Analizar los ingredientes de la receta después de importarla",
"import-from-zip": "Importar desde zip", "import-from-zip": "Importar desde zip",
@@ -702,8 +707,8 @@
"upload-more-images": "Subir más imágenes", "upload-more-images": "Subir más imágenes",
"set-as-cover-image": "Establecer como imagen de portada de receta", "set-as-cover-image": "Establecer como imagen de portada de receta",
"cover-image": "Imagen de portada", "cover-image": "Imagen de portada",
"include-linked-recipes": "Include Linked Recipes", "include-linked-recipes": "Incluye recetas vinculadas",
"include-linked-recipe-ingredients": "Include Linked Recipe Ingredients", "include-linked-recipe-ingredients": "Incluye ingredientes de receta vinculados",
"toggle-recipe": "Alternar Receta" "toggle-recipe": "Alternar Receta"
}, },
"recipe-finder": { "recipe-finder": {
@@ -742,7 +747,7 @@
"advanced": "Avanzado", "advanced": "Avanzado",
"auto-search": "Búsqueda automática", "auto-search": "Búsqueda automática",
"no-results": "No se encontraron resultados", "no-results": "No se encontraron resultados",
"type-to-search": "Type to search..." "type-to-search": "Escribe para buscar..."
}, },
"settings": { "settings": {
"add-a-new-theme": "Añadir un nuevo tema", "add-a-new-theme": "Añadir un nuevo tema",
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "Este campo es requerido",
"invalid-email": "Email Must Be Valid", "invalid-email": "El email debe ser válido",
"invalid-url": "Must Be A Valid URL", "invalid-url": "Debe ser una URL válida",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "No se permiten espacios en blanco",
"min-length": "Must Be At Least {min} Characters", "min-length": "Debe ser como mínimo {min} caracteres",
"max-length": "Must Be At Most {max} Characters" "max-length": "Debe ser como máximo {max} caracteres"
} }
} }

View File

@@ -212,6 +212,8 @@
"upload-file": "Lae fail üles", "upload-file": "Lae fail üles",
"created-on-date": "Loodud: {0}", "created-on-date": "Loodud: {0}",
"unsaved-changes": "Sul on salvestamata muudatusi. Kas sa tahad salvestada enne lehelt lahkumist? Vajuta OK salvestamiseks või Tühista, et muudatused tühistada.", "unsaved-changes": "Sul on salvestamata muudatusi. Kas sa tahad salvestada enne lehelt lahkumist? Vajuta OK salvestamiseks või Tühista, et muudatused tühistada.",
"discard-changes": "Loobu muudatustest",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Lõikepuhvrisse kopeerimine ebaõnnestus.", "clipboard-copy-failure": "Lõikepuhvrisse kopeerimine ebaõnnestus.",
"confirm-delete-generic-items": "Kas oled kindel, et tahad kustutada järgnevad asjad?", "confirm-delete-generic-items": "Kas oled kindel, et tahad kustutada järgnevad asjad?",
"organizers": "Korraldajad", "organizers": "Korraldajad",
@@ -342,9 +344,9 @@
"breakfast": "Hommikusöök", "breakfast": "Hommikusöök",
"lunch": "Lõuna", "lunch": "Lõuna",
"dinner": "Õhtusöök", "dinner": "Õhtusöök",
"snack": "Snack", "snack": "Snäkk",
"drink": "Drink", "drink": "Jook",
"dessert": "Dessert", "dessert": "Magustoit",
"type-any": "Kõik", "type-any": "Kõik",
"day-any": "Kõik", "day-any": "Kõik",
"editor": "Editor", "editor": "Editor",
@@ -367,7 +369,9 @@
"recipe-rules": "Retsepti reeglid", "recipe-rules": "Retsepti reeglid",
"applies-to-all-days": "Kehtib kõikide päevade kohta", "applies-to-all-days": "Kehtib kõikide päevade kohta",
"applies-on-days": "Kehtib {0}l", "applies-on-days": "Kehtib {0}l",
"meal-plan-settings": "Toitumisplaani sätted" "meal-plan-settings": "Toitumisplaani sätted",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Ületoomiste andmed eemaldatud", "migration-data-removed": "Ületoomiste andmed eemaldatud",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "Impordi originaal võtmesõnad siltidena", "import-original-keywords-as-tags": "Impordi originaal võtmesõnad siltidena",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Püsige redigeerimisrežiimis", "stay-in-edit-mode": "Püsige redigeerimisrežiimis",
"parse-recipe-ingredients-after-import": "Tuvasta retsepti koostisosad pärast importimist", "parse-recipe-ingredients-after-import": "Tuvasta retsepti koostisosad pärast importimist",
"import-from-zip": "Impordi .zip-st", "import-from-zip": "Impordi .zip-st",

View File

@@ -54,7 +54,7 @@
"apprise-url": "Apprise URL", "apprise-url": "Apprise URL",
"database": "Tietokanta", "database": "Tietokanta",
"delete-event": "Poista tapahtuma", "delete-event": "Poista tapahtuma",
"event-delete-confirmation": "Oletko varma että haluat poistaa tämän tapahtuman?", "event-delete-confirmation": "Haluatko varmasti poistaa tämän tapahtuman?",
"event-deleted": "Tapahtuma poistettu", "event-deleted": "Tapahtuma poistettu",
"event-updated": "Tapahtuma päivitetty", "event-updated": "Tapahtuma päivitetty",
"new-notification-form-description": "Mealie käyttää Apprise-kirjastoa ilmoitusten luomiseen. Se tarjoaa monia ilmoituspalvelveluvaihtoehtoja. Lisää tietoa siitä, kuinka luoda URL palvelua varten, löydät Apprisen wikistä. Joihinkin ilmoitustyyppeihin voi sisältyä lisäominaisuuksia.", "new-notification-form-description": "Mealie käyttää Apprise-kirjastoa ilmoitusten luomiseen. Se tarjoaa monia ilmoituspalvelveluvaihtoehtoja. Lisää tietoa siitä, kuinka luoda URL palvelua varten, löydät Apprisen wikistä. Joihinkin ilmoitustyyppeihin voi sisältyä lisäominaisuuksia.",
@@ -212,6 +212,8 @@
"upload-file": "Tuo tiedosto", "upload-file": "Tuo tiedosto",
"created-on-date": "Luotu {0}", "created-on-date": "Luotu {0}",
"unsaved-changes": "Et ole tallentanut tekemiäsi muutoksia. Tallennetaanko ne? Paina \"ok\" tallentaaksesi ja \"peruuta\", jos et halua tallentaa.", "unsaved-changes": "Et ole tallentanut tekemiäsi muutoksia. Tallennetaanko ne? Paina \"ok\" tallentaaksesi ja \"peruuta\", jos et halua tallentaa.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Kopioiminen leikepöydälle epäonnistui.", "clipboard-copy-failure": "Kopioiminen leikepöydälle epäonnistui.",
"confirm-delete-generic-items": "Haluatko varmasti poistaa seuraavat kohteet?", "confirm-delete-generic-items": "Haluatko varmasti poistaa seuraavat kohteet?",
"organizers": "Järjestäjät", "organizers": "Järjestäjät",
@@ -342,9 +344,9 @@
"breakfast": "Aamiainen", "breakfast": "Aamiainen",
"lunch": "Lounas", "lunch": "Lounas",
"dinner": "Päivällinen", "dinner": "Päivällinen",
"snack": "Snack", "snack": "Välipala",
"drink": "Drink", "drink": "Juoma",
"dessert": "Dessert", "dessert": "Jälkiruoka",
"type-any": "Mikä tahansa", "type-any": "Mikä tahansa",
"day-any": "Koska tahansa", "day-any": "Koska tahansa",
"editor": "Editori", "editor": "Editori",
@@ -367,7 +369,9 @@
"recipe-rules": "Reseptimääritykset", "recipe-rules": "Reseptimääritykset",
"applies-to-all-days": "Sovelletaan kaikkiin päiviin", "applies-to-all-days": "Sovelletaan kaikkiin päiviin",
"applies-on-days": "Käytetään {0}", "applies-on-days": "Käytetään {0}",
"meal-plan-settings": "Ateriasuunnitelman asetukset" "meal-plan-settings": "Ateriasuunnitelman asetukset",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Tuodut tiedot poistettu", "migration-data-removed": "Tuodut tiedot poistettu",
@@ -637,9 +641,10 @@
"scrape-recipe-suggest-bulk-importer": "Kokeile massasiirtotyökalua", "scrape-recipe-suggest-bulk-importer": "Kokeile massasiirtotyökalua",
"scrape-recipe-have-raw-html-or-json-data": "Onko sinulla raakaa HTML- tai JSON-dataa?", "scrape-recipe-have-raw-html-or-json-data": "Onko sinulla raakaa HTML- tai JSON-dataa?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Voit tuoda raakadatan suoraan", "scrape-recipe-you-can-import-from-raw-data-directly": "Voit tuoda raakadatan suoraan",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Onko sivusto estetty?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "Tuo alkuperäiset avainsanat tunnisteiksi", "import-original-keywords-as-tags": "Tuo alkuperäiset avainsanat tunnisteiksi",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Pysy muokkaustilassa", "stay-in-edit-mode": "Pysy muokkaustilassa",
"parse-recipe-ingredients-after-import": "Jäsennä reseptin ainesosat tuonnin jälkeen", "parse-recipe-ingredients-after-import": "Jäsennä reseptin ainesosat tuonnin jälkeen",
"import-from-zip": "Tuo zip-arkistosta", "import-from-zip": "Tuo zip-arkistosta",
@@ -1081,7 +1086,7 @@
"forgot-password": "Unohditko salasanasi", "forgot-password": "Unohditko salasanasi",
"forgot-password-text": "Syötä sähköpostiosoitteesi, niin voit muuttaa salasanaasi linkin kautta.", "forgot-password-text": "Syötä sähköpostiosoitteesi, niin voit muuttaa salasanaasi linkin kautta.",
"changes-reflected-immediately": "Muutokset tähän käyttäjään astuvat välittömästi voimaan.", "changes-reflected-immediately": "Muutokset tähän käyttäjään astuvat välittömästi voimaan.",
"default-activity": "Oletus Toiminta", "default-activity": "Oletusnäkymä",
"default-activity-hint": "Valitse haluamasi sivu, johon haluat navigoida kirjautuessasi tältä laitteelta" "default-activity-hint": "Valitse haluamasi sivu, johon haluat navigoida kirjautuessasi tältä laitteelta"
}, },
"language-dialog": { "language-dialog": {
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "Tämä kenttä on pakollinen",
"invalid-email": "Email Must Be Valid", "invalid-email": "Sähköpostiosoite ei ole kelvollinen",
"invalid-url": "Must Be A Valid URL", "invalid-url": "URL ei ole kelvollinen",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "No Whitespace Allowed",
"min-length": "Must Be At Least {min} Characters", "min-length": "Vähimmäispituus on {min} merkkiä",
"max-length": "Must Be At Most {max} Characters" "max-length": "Enimmäispituus on {max} merkkiä"
} }
} }

View File

@@ -212,6 +212,8 @@
"upload-file": "Transférer un fichier", "upload-file": "Transférer un fichier",
"created-on-date": "Créé le {0}", "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.", "unsaved-changes": "Vous avez des modifications non enregistrées. Voulez-vous enregistrer avant de partir? OK pour enregistrer, Annuler pour ignorer les modifications.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Échec de la copie dans le presse-papiers.", "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", "organizers": "Classification",
@@ -367,7 +369,9 @@
"recipe-rules": "Règles de recette", "recipe-rules": "Règles de recette",
"applies-to-all-days": "S'applique à tous les jours", "applies-to-all-days": "S'applique à tous les jours",
"applies-on-days": "S'applique les {0}s", "applies-on-days": "S'applique les {0}s",
"meal-plan-settings": "Paramètres des menus" "meal-plan-settings": "Paramètres des menus",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Données de migration supprimées", "migration-data-removed": "Données de migration supprimées",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Le site web est bloqué ?", "scrape-recipe-website-being-blocked": "Le site web est bloqué ?",
"scrape-recipe-try-importing-raw-html-instead": "Essayez plutôt d'importer le code HTML brut.", "scrape-recipe-try-importing-raw-html-instead": "Essayez plutôt d'importer le code HTML brut.",
"import-original-keywords-as-tags": "Importer les mots-clés d'origine en tant que tags", "import-original-keywords-as-tags": "Importer les mots-clés d'origine en tant que tags",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Rester en mode édition", "stay-in-edit-mode": "Rester en mode édition",
"parse-recipe-ingredients-after-import": "Analyser les ingrédients de la recette après l'import", "parse-recipe-ingredients-after-import": "Analyser les ingrédients de la recette après l'import",
"import-from-zip": "Importer depuis un zip", "import-from-zip": "Importer depuis un zip",

View File

@@ -212,6 +212,8 @@
"upload-file": "Téléverser un fichier", "upload-file": "Téléverser un fichier",
"created-on-date": "Créé le {0}", "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.", "unsaved-changes": "Vous avez des modifications non enregistrées. Voulez-vous les enregistrer? Ok pour enregistrer, annuler pour ignorer les modifications.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Échec de la copie vers le presse-papiers.", "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", "organizers": "Classification",
@@ -367,7 +369,9 @@
"recipe-rules": "Règles de recette", "recipe-rules": "Règles de recette",
"applies-to-all-days": "S'applique à tous les jours", "applies-to-all-days": "S'applique à tous les jours",
"applies-on-days": "S'applique les {0}s", "applies-on-days": "S'applique les {0}s",
"meal-plan-settings": "Paramètres des menus" "meal-plan-settings": "Paramètres des menus",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Données de migration supprimées", "migration-data-removed": "Données de migration supprimées",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Le site web est bloqué ?", "scrape-recipe-website-being-blocked": "Le site web est bloqué ?",
"scrape-recipe-try-importing-raw-html-instead": "Essayez plutôt d'importer le code HTML brut.", "scrape-recipe-try-importing-raw-html-instead": "Essayez plutôt d'importer le code HTML brut.",
"import-original-keywords-as-tags": "Importer les mots-clés d'origine en tant que tags", "import-original-keywords-as-tags": "Importer les mots-clés d'origine en tant que tags",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Rester en mode édition", "stay-in-edit-mode": "Rester en mode édition",
"parse-recipe-ingredients-after-import": "Analyser les ingrédients de la recette après l'import", "parse-recipe-ingredients-after-import": "Analyser les ingrédients de la recette après l'import",
"import-from-zip": "Importer depuis un zip", "import-from-zip": "Importer depuis un zip",
@@ -1434,7 +1439,7 @@
"invalid-email": "Le-mail doit être valide", "invalid-email": "Le-mail doit être valide",
"invalid-url": "Doit être une URL valide", "invalid-url": "Doit être une URL valide",
"no-whitespace": "Aucun espace n'est autorisé", "no-whitespace": "Aucun espace n'est autorisé",
"min-length": "Doit contenir au moins {min} caractères", "min-length": "",
"max-length": "Doit contenir au maximum {max} caractères" "max-length": "Doit contenir au maximum {max} caractères"
} }
} }

View File

@@ -212,6 +212,8 @@
"upload-file": "Téléverser un fichier", "upload-file": "Téléverser un fichier",
"created-on-date": "Créé le {0}", "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.", "unsaved-changes": "Vous avez des modifications non enregistrées. Voulez-vous enregistrer avant de partir? OK pour enregistrer, Annuler pour ignorer les modifications.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Échec de la copie dans le presse-papiers.", "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", "organizers": "Classification",
@@ -337,7 +339,7 @@
"side": "Accompagnement", "side": "Accompagnement",
"sides": "Accompagnements", "sides": "Accompagnements",
"start-date": "Date de début", "start-date": "Date de début",
"rule-day": "Jour de la Règle", "rule-day": "Jour de la règle",
"meal-type": "Type de repas", "meal-type": "Type de repas",
"breakfast": "Petit-déjeuner", "breakfast": "Petit-déjeuner",
"lunch": "Déjeuner", "lunch": "Déjeuner",
@@ -367,7 +369,9 @@
"recipe-rules": "Règles de recette", "recipe-rules": "Règles de recette",
"applies-to-all-days": "S'applique à tous les jours", "applies-to-all-days": "S'applique à tous les jours",
"applies-on-days": "S'applique les {0}s", "applies-on-days": "S'applique les {0}s",
"meal-plan-settings": "Paramètres des menus" "meal-plan-settings": "Paramètres des menus",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Données de migration supprimées", "migration-data-removed": "Données de migration supprimées",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Le site web est bloqué ?", "scrape-recipe-website-being-blocked": "Le site web est bloqué ?",
"scrape-recipe-try-importing-raw-html-instead": "Essayez plutôt d'importer le code HTML brut.", "scrape-recipe-try-importing-raw-html-instead": "Essayez plutôt d'importer le code HTML brut.",
"import-original-keywords-as-tags": "Importer les mots-clés d'origine en tant que tags", "import-original-keywords-as-tags": "Importer les mots-clés d'origine en tant que tags",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Rester en mode édition", "stay-in-edit-mode": "Rester en mode édition",
"parse-recipe-ingredients-after-import": "Analyser les ingrédients de la recette après l'import", "parse-recipe-ingredients-after-import": "Analyser les ingrédients de la recette après l'import",
"import-from-zip": "Importer depuis un zip", "import-from-zip": "Importer depuis un zip",

View File

@@ -212,6 +212,8 @@
"upload-file": "Subir Arquivo", "upload-file": "Subir Arquivo",
"created-on-date": "Creado o: {0}", "created-on-date": "Creado o: {0}",
"unsaved-changes": "Tes cambios sen gardar. Queres gardar antes de saír? OK para gardar, Cancelar para descartar cambios.", "unsaved-changes": "Tes cambios sen gardar. Queres gardar antes de saír? OK para gardar, Cancelar para descartar cambios.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Produciuse un erro ao copiar contido no portapapeis.", "clipboard-copy-failure": "Produciuse un erro ao copiar contido no portapapeis.",
"confirm-delete-generic-items": "Estás seguro de que queres eliminar os seguintes elementos?", "confirm-delete-generic-items": "Estás seguro de que queres eliminar os seguintes elementos?",
"organizers": "Organizadores", "organizers": "Organizadores",
@@ -367,7 +369,9 @@
"recipe-rules": "Regras da Receita", "recipe-rules": "Regras da Receita",
"applies-to-all-days": "Aplícase a todos os días", "applies-to-all-days": "Aplícase a todos os días",
"applies-on-days": "Aplícase en {0}s", "applies-on-days": "Aplícase en {0}s",
"meal-plan-settings": "Axustes do Menú" "meal-plan-settings": "Axustes do Menú",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Elimináronse os datos de migración", "migration-data-removed": "Elimináronse os datos de migración",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "Importar palavras-chave orixinais como etiquetas", "import-original-keywords-as-tags": "Importar palavras-chave orixinais como etiquetas",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Permanecer no modo de edición", "stay-in-edit-mode": "Permanecer no modo de edición",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"import-from-zip": "Importar de Zip", "import-from-zip": "Importar de Zip",

View File

@@ -212,6 +212,8 @@
"upload-file": "העלאת קבצים", "upload-file": "העלאת קבצים",
"created-on-date": "נוצר ב-{0}", "created-on-date": "נוצר ב-{0}",
"unsaved-changes": "יש שינויים שלא נשמרו. לצאת לפני שמירה? אשר לשמירה, בטל למחיקת שינויים.", "unsaved-changes": "יש שינויים שלא נשמרו. לצאת לפני שמירה? אשר לשמירה, בטל למחיקת שינויים.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "כשלון בהעתקה ללוח ההדבקה.", "clipboard-copy-failure": "כשלון בהעתקה ללוח ההדבקה.",
"confirm-delete-generic-items": "למחוק את הפריטים שנבחרו?", "confirm-delete-generic-items": "למחוק את הפריטים שנבחרו?",
"organizers": "מארגנים", "organizers": "מארגנים",
@@ -367,7 +369,9 @@
"recipe-rules": "חוקי מתכון", "recipe-rules": "חוקי מתכון",
"applies-to-all-days": "החל על כל הימים", "applies-to-all-days": "החל על כל הימים",
"applies-on-days": "חל על {0}", "applies-on-days": "חל על {0}",
"meal-plan-settings": "הגדרות תכנון ארוחות" "meal-plan-settings": "הגדרות תכנון ארוחות",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "מידע ממוגרץ נמחק", "migration-data-removed": "מידע ממוגרץ נמחק",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "ייבוא שמות מפתח מקוריות כתגיות", "import-original-keywords-as-tags": "ייבוא שמות מפתח מקוריות כתגיות",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "השאר במצב עריכה", "stay-in-edit-mode": "השאר במצב עריכה",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"import-from-zip": "ייבא מקובץ", "import-from-zip": "ייבא מקובץ",

View File

@@ -212,6 +212,8 @@
"upload-file": "Prenesi Datoteku", "upload-file": "Prenesi Datoteku",
"created-on-date": "Kreirano dana: {0}", "created-on-date": "Kreirano dana: {0}",
"unsaved-changes": "Imate promjene koje nisu spremljene. Želite li ih spremiti prije odlaska? Ok za spremanje, Odustani za odbaciti promjene.", "unsaved-changes": "Imate promjene koje nisu spremljene. Želite li ih spremiti prije odlaska? Ok za spremanje, Odustani za odbaciti promjene.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Pogreška prilikom spremanja u međuspremnik.", "clipboard-copy-failure": "Pogreška prilikom spremanja u međuspremnik.",
"confirm-delete-generic-items": "Jeste li sigurni da želite izbrisati ove stavke?", "confirm-delete-generic-items": "Jeste li sigurni da želite izbrisati ove stavke?",
"organizers": "Organizatori", "organizers": "Organizatori",
@@ -367,7 +369,9 @@
"recipe-rules": "Pravila Recepata", "recipe-rules": "Pravila Recepata",
"applies-to-all-days": "Primjeni na sve dane", "applies-to-all-days": "Primjeni na sve dane",
"applies-on-days": "Primjeni na {0}", "applies-on-days": "Primjeni na {0}",
"meal-plan-settings": "Postavke Plana Obroka" "meal-plan-settings": "Postavke Plana Obroka",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Podaci o migraciji su uklonjeni", "migration-data-removed": "Podaci o migraciji su uklonjeni",
@@ -521,9 +525,9 @@
"recipe-deleted": "Recept obrisan", "recipe-deleted": "Recept obrisan",
"recipe-image": "Slika Recepta", "recipe-image": "Slika Recepta",
"recipe-image-updated": "Slika recepta ažurirana", "recipe-image-updated": "Slika recepta ažurirana",
"delete-image": "Delete Recipe Image", "delete-image": "Obriši sliku recepta",
"delete-image-confirmation": "Are you sure you want to delete this recipe image?", "delete-image-confirmation": "Jeste li sigurni da želite obrisati ovu sliku?",
"recipe-image-deleted": "Recipe image deleted", "recipe-image-deleted": "Slika recepta obrisana",
"recipe-name": "Naziv Recepta", "recipe-name": "Naziv Recepta",
"recipe-settings": "Postavke Recepta", "recipe-settings": "Postavke Recepta",
"recipe-update-failed": "Ažuriranje polja recepta", "recipe-update-failed": "Ažuriranje polja recepta",
@@ -554,14 +558,14 @@
"date-format-hint-yyyy-mm-dd": "YYYY-MM-DD format", "date-format-hint-yyyy-mm-dd": "YYYY-MM-DD format",
"add-to-list": "Dodaj na Popis", "add-to-list": "Dodaj na Popis",
"add-to-plan": "Dodaj u Plan", "add-to-plan": "Dodaj u Plan",
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Dodaj na vremensku crtu",
"recipe-added-to-list": "Recept je dodan na popis", "recipe-added-to-list": "Recept je dodan na popis",
"recipes-added-to-list": "Recipes added to list", "recipes-added-to-list": "Recepti dodani na popis",
"successfully-added-to-list": "Successfully added to list", "successfully-added-to-list": "Uspješno dodan na popis",
"recipe-added-to-mealplan": "Recept je dodan u Plan", "recipe-added-to-mealplan": "Recept je dodan u Plan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list", "failed-to-add-recipes-to-list": "Neuspješno dodavanje na popis",
"failed-to-add-recipe-to-mealplan": "Nije uspjelo dodavanje recepta u plan obroka", "failed-to-add-recipe-to-mealplan": "Nije uspjelo dodavanje recepta u plan obroka",
"failed-to-add-to-list": "Failed to add to list", "failed-to-add-to-list": "Neuspješno dodavanje na popis",
"yield": "Konačna Količina", "yield": "Konačna Količina",
"yields-amount-with-text": "Yields {amount} {text}", "yields-amount-with-text": "Yields {amount} {text}",
"yield-text": "Yield Text", "yield-text": "Yield Text",
@@ -569,19 +573,19 @@
"choose-unit": "Odaberi Jedinicu", "choose-unit": "Odaberi Jedinicu",
"press-enter-to-create": "Pritisni Enter za Kreiranje", "press-enter-to-create": "Pritisni Enter za Kreiranje",
"choose-food": "Odaberi Hranu", "choose-food": "Odaberi Hranu",
"choose-recipe": "Choose Recipe", "choose-recipe": "Odaberite recept",
"notes": "Bilješke", "notes": "Bilješke",
"toggle-section": "Preklopi Odjeljak", "toggle-section": "Preklopi Odjeljak",
"see-original-text": "Prikaži Izvorni Tekst", "see-original-text": "Prikaži Izvorni Tekst",
"original-text-with-value": "Izvorni Tekst: {originalText}", "original-text-with-value": "Izvorni Tekst: {originalText}",
"ingredient-linker": "Poveznik Sastojaka", "ingredient-linker": "Poveznik Sastojaka",
"unlinked": "Not linked yet", "unlinked": "Nije povezano",
"linked-to-other-step": "Povezano s drugim korakom", "linked-to-other-step": "Povezano s drugim korakom",
"auto": "Auto", "auto": "Auto",
"cook-mode": "Način Kuhanja", "cook-mode": "Način Kuhanja",
"link-ingredients": "Poveži Sastojke", "link-ingredients": "Poveži Sastojke",
"merge-above": "Spoji prethodni korak", "merge-above": "Spoji prethodni korak",
"move-to-bottom": "Move To Bottom", "move-to-bottom": "Pomakni na dno",
"move-to-top": "Na vrh", "move-to-top": "Na vrh",
"reset-scale": "Vrati skaliranje na stare postavke", "reset-scale": "Vrati skaliranje na stare postavke",
"decrease-scale-label": "Smanji skaliranje za 1", "decrease-scale-label": "Smanji skaliranje za 1",
@@ -602,7 +606,7 @@
"failed-to-add-to-timeline": "Neuspješno dodavanje na vremensku crtu", "failed-to-add-to-timeline": "Neuspješno dodavanje na vremensku crtu",
"failed-to-update-recipe": "Neuspješno ažuriranje recepta", "failed-to-update-recipe": "Neuspješno ažuriranje recepta",
"added-to-timeline-but-failed-to-add-image": "Dodano na vremensku crtu, no nije uspjelo dodavanje fotografije", "added-to-timeline-but-failed-to-add-image": "Dodano na vremensku crtu, no nije uspjelo dodavanje fotografije",
"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": "Dodatci recepata su ključna značajka Mealie API-ja. Omogućuju vam stvaranje prilagođenih JSON ključ/vrijednost parova unutar recepata kako biste ih mogli koristiti iz aplikacija trećih strana. Možete koristiti ove ključeve kako biste prenijeli informacije koje će pokrenuti automatizaciju ili prilagođene poruke koje će biti prenesene na željeni uređaj.",
"message-key": "Ključ poruke", "message-key": "Ključ poruke",
"parse": "Razluči (parsiraj)", "parse": "Razluči (parsiraj)",
"ingredients-not-parsed-description": "It looks like your ingredients aren't parsed yet. Click the \"{parse}\" button below to parse your ingredients into structured foods.", "ingredients-not-parsed-description": "It looks like your ingredients aren't parsed yet. Click the \"{parse}\" button below to parse your ingredients into structured foods.",
@@ -637,16 +641,17 @@
"scrape-recipe-suggest-bulk-importer": "Isprobajte masovni uvoz", "scrape-recipe-suggest-bulk-importer": "Isprobajte masovni uvoz",
"scrape-recipe-have-raw-html-or-json-data": "Imate neobrađene HTML ili JSON podatke?", "scrape-recipe-have-raw-html-or-json-data": "Imate neobrađene HTML ili JSON podatke?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Možete uvesti iz neobrađenih podataka izravno", "scrape-recipe-you-can-import-from-raw-data-directly": "Možete uvesti iz neobrađenih podataka izravno",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Stranica ne radi?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Pokušajte s uvozom HTML-a.",
"import-original-keywords-as-tags": "Uvezi originalne ključne riječi kao oznake", "import-original-keywords-as-tags": "Uvezi originalne ključne riječi kao oznake",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Ostanite u načinu uređivanja", "stay-in-edit-mode": "Ostanite u načinu uređivanja",
"parse-recipe-ingredients-after-import": "Parsiranje sastojaka recepta nakon uvoza", "parse-recipe-ingredients-after-import": "Parsiranje sastojaka recepta nakon uvoza",
"import-from-zip": "Uvoz iz Zip-a", "import-from-zip": "Uvoz iz Zip-a",
"import-from-zip-description": "Uvezi pojedinačni recept koji je izvezen iz druge instance Mealie aplikacije.", "import-from-zip-description": "Uvezi pojedinačni recept koji je izvezen iz druge instance Mealie aplikacije.",
"import-from-html-or-json": "Uvoz iz HTML-a ili JSON-a", "import-from-html-or-json": "Uvoz iz HTML-a ili JSON-a",
"import-from-html-or-json-description": "Uvezite jedan recept iz neobrađenog HTML-a ili JSON-a. Ovo je korisno ako imate recept s web-stranice koju Mealie ne može normalno preuzeti ili iz nekog drugog vanjskog izvora.", "import-from-html-or-json-description": "Uvezite jedan recept iz neobrađenog HTML-a ili JSON-a. Ovo je korisno ako imate recept s web-stranice koju Mealie ne može normalno preuzeti ili iz nekog drugog vanjskog izvora.",
"json-import-format-description-colon": "To import via JSON, it must be in valid format:", "json-import-format-description-colon": "Kako biste uveli JSON, mora biti u ispravnom obliku:",
"json-editor": "JSON uređivač", "json-editor": "JSON uređivač",
"zip-files-must-have-been-exported-from-mealie": ".zip datoteke moraju biti izvezeni iz Mealie-a", "zip-files-must-have-been-exported-from-mealie": ".zip datoteke moraju biti izvezeni iz Mealie-a",
"create-a-recipe-by-uploading-a-scan": "Izradite recept tako što ćete učitati skeniranu kopiju.", "create-a-recipe-by-uploading-a-scan": "Izradite recept tako što ćete učitati skeniranu kopiju.",

View File

@@ -212,6 +212,8 @@
"upload-file": "Fájl feltöltése", "upload-file": "Fájl feltöltése",
"created-on-date": "Létrehozva: {0}", "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.", "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.",
"discard-changes": "Discard Changes",
"discard-changes-description": "Nem mentett módosításai vannak, biztos, hogy elveti?",
"clipboard-copy-failure": "Nem sikerült a vágólapra másolás.", "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", "organizers": "Rendszerezők",
@@ -367,7 +369,9 @@
"recipe-rules": "Recept szabályok", "recipe-rules": "Recept szabályok",
"applies-to-all-days": "Minden napra vonatkozóan", "applies-to-all-days": "Minden napra vonatkozóan",
"applies-on-days": "Érvényes {0}-ként", "applies-on-days": "Érvényes {0}-ként",
"meal-plan-settings": "Menütervező beállításai" "meal-plan-settings": "Menütervező beállításai",
"add-all-to-list": "Összes hozzáadása a listához",
"add-day-to-list": "Nap hozzáadása a listához"
}, },
"migration": { "migration": {
"migration-data-removed": "Migrációs adatok eltávolítva", "migration-data-removed": "Migrációs adatok eltávolítva",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "A weboldal blokkolva van?", "scrape-recipe-website-being-blocked": "A weboldal blokkolva van?",
"scrape-recipe-try-importing-raw-html-instead": "Próbálja meg inkább a nyers HTML-t importálni.", "scrape-recipe-try-importing-raw-html-instead": "Próbálja meg inkább a nyers HTML-t importálni.",
"import-original-keywords-as-tags": "Eredeti kulcsszavak importálása címkeként", "import-original-keywords-as-tags": "Eredeti kulcsszavak importálása címkeként",
"import-original-categories": "Eredeti kategóriák importálása",
"stay-in-edit-mode": "Maradjon Szerkesztés módban", "stay-in-edit-mode": "Maradjon Szerkesztés módban",
"parse-recipe-ingredients-after-import": "Recept összetevőinek elemzése importálás után", "parse-recipe-ingredients-after-import": "Recept összetevőinek elemzése importálás után",
"import-from-zip": "Importálás ZIP-ből", "import-from-zip": "Importálás ZIP-ből",

View File

@@ -212,6 +212,8 @@
"upload-file": "Hlaða upp skrá", "upload-file": "Hlaða upp skrá",
"created-on-date": "Búið til: {0}", "created-on-date": "Búið til: {0}",
"unsaved-changes": "Þú hefur ekki vistað breytingar. Viltu vista áður en þú ferð? Ýttu á \"Í lagi\" til að vista, \"Hætta við\" til að henda breytingum.", "unsaved-changes": "Þú hefur ekki vistað breytingar. Viltu vista áður en þú ferð? Ýttu á \"Í lagi\" til að vista, \"Hætta við\" til að henda breytingum.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Mistókst að afrita klippispjaldið.", "clipboard-copy-failure": "Mistókst að afrita klippispjaldið.",
"confirm-delete-generic-items": "Ertu viss um að þú viljir eyða eftirfylgjandi atriðum?", "confirm-delete-generic-items": "Ertu viss um að þú viljir eyða eftirfylgjandi atriðum?",
"organizers": "Skipuleggjarar", "organizers": "Skipuleggjarar",
@@ -367,7 +369,9 @@
"recipe-rules": "Uppskriftar reglur", "recipe-rules": "Uppskriftar reglur",
"applies-to-all-days": "Á við alla daga", "applies-to-all-days": "Á við alla daga",
"applies-on-days": "Gildir þegar er {0},", "applies-on-days": "Gildir þegar er {0},",
"meal-plan-settings": "Stillingar matarplans" "meal-plan-settings": "Stillingar matarplans",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Gagnaflutningur fjarlægður", "migration-data-removed": "Gagnaflutningur fjarlægður",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Er vefsíðan lokuð?", "scrape-recipe-website-being-blocked": "Er vefsíðan lokuð?",
"scrape-recipe-try-importing-raw-html-instead": "Reyndu að flytja inn HTML kóðann í staðinn.", "scrape-recipe-try-importing-raw-html-instead": "Reyndu að flytja inn HTML kóðann í staðinn.",
"import-original-keywords-as-tags": "Nota upprunanleg merki", "import-original-keywords-as-tags": "Nota upprunanleg merki",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Vera í breytingarham", "stay-in-edit-mode": "Vera í breytingarham",
"parse-recipe-ingredients-after-import": "Greina innhald uppskriftar eftir að búið er að hlaða inn uppskrift", "parse-recipe-ingredients-after-import": "Greina innhald uppskriftar eftir að búið er að hlaða inn uppskrift",
"import-from-zip": "Hlaða inn frá .zip", "import-from-zip": "Hlaða inn frá .zip",
@@ -702,9 +707,9 @@
"upload-more-images": "Setja inn fleiri myndir", "upload-more-images": "Setja inn fleiri myndir",
"set-as-cover-image": "Velja sem forsíðumynd fyrir uppskriftina", "set-as-cover-image": "Velja sem forsíðumynd fyrir uppskriftina",
"cover-image": "Forsíðumynd", "cover-image": "Forsíðumynd",
"include-linked-recipes": "Include Linked Recipes", "include-linked-recipes": "Hafa með tengda uppskrift",
"include-linked-recipe-ingredients": "Include Linked Recipe Ingredients", "include-linked-recipe-ingredients": "Hafa með innihaldsefni úr tengdum uppskriftum",
"toggle-recipe": "Víxla uppskrift" "toggle-recipe": "Sýna/fela uppskrift"
}, },
"recipe-finder": { "recipe-finder": {
"recipe-finder": "Uppskriftaleit", "recipe-finder": "Uppskriftaleit",

View File

@@ -212,6 +212,8 @@
"upload-file": "Carica file", "upload-file": "Carica file",
"created-on-date": "Creato il: {0}", "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.", "unsaved-changes": "Sono state apportate modifiche non salvate. Salvare prima di uscire? Premi Ok per salvare, Annulla per scartare le modifiche.",
"discard-changes": "Scarta le modifiche",
"discard-changes-description": "Sono state apportate modifiche non salvate. Sei sicuro di volerle scartare?",
"clipboard-copy-failure": "Impossibile copiare negli appunti.", "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", "organizers": "Organizzatori",
@@ -367,7 +369,9 @@
"recipe-rules": "Regole per le ricette", "recipe-rules": "Regole per le ricette",
"applies-to-all-days": "Si applica a ogni giorno", "applies-to-all-days": "Si applica a ogni giorno",
"applies-on-days": "Si applica ai {0}", "applies-on-days": "Si applica ai {0}",
"meal-plan-settings": "Impostazioni del piano alimentare" "meal-plan-settings": "Impostazioni del piano alimentare",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Dati di migrazione rimossi", "migration-data-removed": "Dati di migrazione rimossi",
@@ -578,7 +582,7 @@
"unlinked": "Non ancora collegato", "unlinked": "Non ancora collegato",
"linked-to-other-step": "Collegato ad un altro passaggio", "linked-to-other-step": "Collegato ad un altro passaggio",
"auto": "Automatico", "auto": "Automatico",
"cook-mode": "Modalità di Cottura", "cook-mode": "Modalità Cucina",
"link-ingredients": "Link Ingredienti", "link-ingredients": "Link Ingredienti",
"merge-above": "Unisci Sopra", "merge-above": "Unisci Sopra",
"move-to-bottom": "Sposta in fondo", "move-to-bottom": "Sposta in fondo",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Il sito viene bloccato?", "scrape-recipe-website-being-blocked": "Il sito viene bloccato?",
"scrape-recipe-try-importing-raw-html-instead": "Prova a importare l'HTML puro.", "scrape-recipe-try-importing-raw-html-instead": "Prova a importare l'HTML puro.",
"import-original-keywords-as-tags": "Importa parole chiave originali come tag", "import-original-keywords-as-tags": "Importa parole chiave originali come tag",
"import-original-categories": "Importa categorie originali",
"stay-in-edit-mode": "Rimani in modalità Modifica", "stay-in-edit-mode": "Rimani in modalità Modifica",
"parse-recipe-ingredients-after-import": "Analizza gli ingredienti della ricetta dopo l'importazione", "parse-recipe-ingredients-after-import": "Analizza gli ingredienti della ricetta dopo l'importazione",
"import-from-zip": "Importa da Zip", "import-from-zip": "Importa da Zip",

View File

@@ -212,6 +212,8 @@
"upload-file": "ファイルのアップロード", "upload-file": "ファイルのアップロード",
"created-on-date": "作成日: {0}", "created-on-date": "作成日: {0}",
"unsaved-changes": "保存されていない変更があります。移動する前に保存しますか?保存するには はい を、変更を破棄するにはキャンセルしてください。", "unsaved-changes": "保存されていない変更があります。移動する前に保存しますか?保存するには はい を、変更を破棄するにはキャンセルしてください。",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "クリップボードにコピーできませんでした", "clipboard-copy-failure": "クリップボードにコピーできませんでした",
"confirm-delete-generic-items": "次のアイテムを本当に削除しますか?", "confirm-delete-generic-items": "次のアイテムを本当に削除しますか?",
"organizers": "収納", "organizers": "収納",
@@ -367,7 +369,9 @@
"recipe-rules": "レシピのルール", "recipe-rules": "レシピのルール",
"applies-to-all-days": "すべての日に適用", "applies-to-all-days": "すべての日に適用",
"applies-on-days": "{0}曜日に適用", "applies-on-days": "{0}曜日に適用",
"meal-plan-settings": "献立設定" "meal-plan-settings": "献立設定",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "移行データが削除されました", "migration-data-removed": "移行データが削除されました",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "元のキーワードをタグとしてインポート", "import-original-keywords-as-tags": "元のキーワードをタグとしてインポート",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "編集モードを維持", "stay-in-edit-mode": "編集モードを維持",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"import-from-zip": "Zipからインポート", "import-from-zip": "Zipからインポート",

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@
"database-type": "Database Type", "database-type": "Database Type",
"database-url": "Duomenų bazės URL", "database-url": "Duomenų bazės URL",
"default-group": "Numatytoji grupė", "default-group": "Numatytoji grupė",
"default-household": "Default Household", "default-household": "Numatytasis namų ūkis",
"demo": "Demo", "demo": "Demo",
"demo-status": "Demo Status", "demo-status": "Demo Status",
"development": "Vystymas", "development": "Vystymas",
@@ -69,7 +69,7 @@
"new-notification": "Naujas pranešimas", "new-notification": "Naujas pranešimas",
"event-notifiers": "Įvykių pranešimai", "event-notifiers": "Įvykių pranešimai",
"apprise-url-skipped-if-blank": "Apprise URL (praleidžiama, jei tuščia)", "apprise-url-skipped-if-blank": "Apprise URL (praleidžiama, jei tuščia)",
"apprise-url-is-left-intentionally-blank": "Since Apprise URLs typically contain sensitive information, this field is left intentionally blank while editing. If you wish to update the URL, please enter the new one here, otherwise leave it blank to keep the current URL.", "apprise-url-is-left-intentionally-blank": "Kadangi adreso URL paprastai turi jautrios informacijos, redaguojant šis laukas tyčia paliekamas tuščias.\nJei norite atnaujinti URL, įveskite naują reikšmę čia; priešingu atveju palikite lauką tuščią, kad būtų išsaugotas esamas URL.",
"enable-notifier": "Įjungti pranešiklį", "enable-notifier": "Įjungti pranešiklį",
"what-events": "Kokie įvykiai turėtų būti sekami?", "what-events": "Kokie įvykiai turėtų būti sekami?",
"user-events": "Naudotojų įvykiai", "user-events": "Naudotojų įvykiai",
@@ -80,8 +80,8 @@
"tag-events": "Žymų įvykiai", "tag-events": "Žymų įvykiai",
"category-events": "Kategorijų įvykiai", "category-events": "Kategorijų įvykiai",
"when-a-new-user-joins-your-group": "Kai prie jūsų grupės prisijungia naujas naudotojas", "when-a-new-user-joins-your-group": "Kai prie jūsų grupės prisijungia naujas naudotojas",
"recipe-events": "Recipe Events", "recipe-events": "Receptų įvykiai",
"label-events": "Label Events" "label-events": "Žymų įvykiai"
}, },
"general": { "general": {
"add": "Pridėti", "add": "Pridėti",
@@ -89,7 +89,7 @@
"clear": "Išvalyti", "clear": "Išvalyti",
"close": "Uždaryti", "close": "Uždaryti",
"confirm": "Patvirtinti", "confirm": "Patvirtinti",
"confirm-how-does-everything-look": "How does everything look?", "confirm-how-does-everything-look": "Kaip viskas atrodo?",
"confirm-delete-generic": "Ar tikrai norite ištrinti?", "confirm-delete-generic": "Ar tikrai norite ištrinti?",
"copied_message": "Nukopijuota!", "copied_message": "Nukopijuota!",
"create": "Sukurti", "create": "Sukurti",
@@ -134,7 +134,7 @@
"no-recipe-found": "Nerasta receptų", "no-recipe-found": "Nerasta receptų",
"ok": "Gerai", "ok": "Gerai",
"options": "Pasirinkimai:", "options": "Pasirinkimai:",
"plural-name": "Plural Name", "plural-name": "Daugiskaitos pavadinimas",
"print": "Spausdinti", "print": "Spausdinti",
"print-preferences": "Spausdinimo nustatymai", "print-preferences": "Spausdinimo nustatymai",
"random": "Atsitiktinis", "random": "Atsitiktinis",
@@ -164,7 +164,7 @@
"test": "Tikrinti", "test": "Tikrinti",
"themes": "Temos", "themes": "Temos",
"thursday": "Ketvirtadienis", "thursday": "Ketvirtadienis",
"title": "Title", "title": "Pavadinimas",
"token": "Prieeigos raktas", "token": "Prieeigos raktas",
"tuesday": "Antradienis", "tuesday": "Antradienis",
"type": "Tipas", "type": "Tipas",
@@ -184,7 +184,7 @@
"date": "Data", "date": "Data",
"id": "Id", "id": "Id",
"owner": "Savininkas", "owner": "Savininkas",
"change-owner": "Change Owner", "change-owner": "Keisti savininką",
"date-added": "Įkėlimo data", "date-added": "Įkėlimo data",
"none": "Nėra", "none": "Nėra",
"run": "Paleisti", "run": "Paleisti",
@@ -211,11 +211,13 @@
"refresh": "Atnaujinti", "refresh": "Atnaujinti",
"upload-file": "Įkelti failą", "upload-file": "Įkelti failą",
"created-on-date": "Sukurta: {0}", "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.", "unsaved-changes": "Turite neišsaugotų pakeitimų. Ar norite juos išsaugoti prieš išeidami?\nSpauskite „Gerai“, jei norite išsaugoti, arba „Atšaukti“, jei norite atmesti pakeitimus.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Nepavyko nukopijuoti į iškarpinę.", "clipboard-copy-failure": "Nepavyko nukopijuoti į iškarpinę.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?", "confirm-delete-generic-items": "Ar tikrai norite ištrinti šiuos elementus?",
"organizers": "Organizers", "organizers": "Organizatoriai",
"caution": "Caution", "caution": "Įspėjimas",
"show-advanced": "Rodyti plačiau", "show-advanced": "Rodyti plačiau",
"add-field": "Pridėti lauką", "add-field": "Pridėti lauką",
"date-created": "Sukūrimo data", "date-created": "Sukūrimo data",
@@ -234,7 +236,7 @@
"group-id-with-value": "Grupės ID {groupID}", "group-id-with-value": "Grupės ID {groupID}",
"group-name": "Grupės pavadinimas", "group-name": "Grupės pavadinimas",
"group-not-found": "Grupė nerasta", "group-not-found": "Grupė nerasta",
"group-token": "Group Token", "group-token": "Grupės raktas",
"group-with-value": "Grupė: {groupID}", "group-with-value": "Grupė: {groupID}",
"groups": "Grupės", "groups": "Grupės",
"manage-groups": "Tvarkyti grupes", "manage-groups": "Tvarkyti grupes",
@@ -246,18 +248,18 @@
"keep-my-recipes-private-description": "Nustato, kad jūsų grupė ir visi receptai joje yra privatūs pagal nutylėjimą. Visada galėsite tai pakeisti vėliau." "keep-my-recipes-private-description": "Nustato, kad jūsų grupė ir visi receptai joje yra privatūs pagal nutylėjimą. Visada galėsite tai pakeisti vėliau."
}, },
"manage-members": "Tvarkyti narius", "manage-members": "Tvarkyti narius",
"manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.", "manage-members-description": "Tvarkykite savo namų ūkio narių teises.\n{manage} leidžia naudotojui pasiekti duomenų tvarkymo puslapį, o {invite} generuoti kvietimų nuorodas kitiems naudotojams.\nGrupės savininkai negali keisti savo pačių teisių.",
"manage": "Tvarkyti", "manage": "Tvarkyti",
"manage-household": "Manage Household", "manage-household": "Tvarkyti namų ūkį",
"invite": "Pakviesti", "invite": "Pakviesti",
"looking-to-update-your-profile": "Ar norėtumėte atnaujinti savo profilį?", "looking-to-update-your-profile": "Ar norėtumėte atnaujinti savo profilį?",
"default-recipe-preferences-description": "Tai yra numatytosios parinktys, kai jūsų grupėje sukuriamas naujas receptas. Atskiriems receptams jie gali būti keičiami per receptų nustatymų meniu.", "default-recipe-preferences-description": "Tai yra numatytosios parinktys, kai jūsų grupėje sukuriamas naujas receptas. Atskiriems receptams jie gali būti keičiami per receptų nustatymų meniu.",
"default-recipe-preferences": "Numatytosios receptų parinktys", "default-recipe-preferences": "Numatytosios receptų parinktys",
"group-preferences": "Grupės nustatymai", "group-preferences": "Grupės nustatymai",
"private-group": "Privati grupė", "private-group": "Privati grupė",
"private-group-description": "Setting your group to private will disable all public view options. This overrides any individual public view settings", "private-group-description": "Nustačius grupę kaip privačią, bus išjungtos visos viešo peržiūrėjimo parinktys.\nTai perrašo visus atskirus viešo peržiūrėjimo nustatymus",
"enable-public-access": "Enable Public Access", "enable-public-access": "Įjungti viešą prieigą",
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in", "enable-public-access-description": "Pagal numatymą padaryti grupės receptus viešus ir leisti lankytojams peržiūrėti receptus neprisijungus",
"allow-users-outside-of-your-group-to-see-your-recipes": "Leiskite vartotojams, nepriskirtiemsjūsų grupei, matyti jūsų receptus", "allow-users-outside-of-your-group-to-see-your-recipes": "Leiskite vartotojams, nepriskirtiemsjūsų grupei, matyti jūsų receptus",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Leidžia konkretiems receptams naudoti viešai prieinamą pasidalinimui nuorodą, nereikalaujančią prisijungimo. Kai šis nustatymas išjungtas, dalintis receptais galima tik su savo grupėje esančiais naudotojais, arba per iš anksto sugeneruotą privačią nuorodą", "allow-users-outside-of-your-group-to-see-your-recipes-description": "Leidžia konkretiems receptams naudoti viešai prieinamą pasidalinimui nuorodą, nereikalaujančią prisijungimo. Kai šis nustatymas išjungtas, dalintis receptais galima tik su savo grupėje esančiais naudotojais, arba per iš anksto sugeneruotą privačią nuorodą",
"show-nutrition-information": "Rodyti maistinę vertę", "show-nutrition-information": "Rodyti maistinę vertę",
@@ -269,43 +271,43 @@
"disable-users-from-commenting-on-recipes": "Neleisti vartotojams komentuoti receptų", "disable-users-from-commenting-on-recipes": "Neleisti vartotojams komentuoti receptų",
"disable-users-from-commenting-on-recipes-description": "Receptų komentavimas išjungiamas ir komentarų skiltis paslepiama", "disable-users-from-commenting-on-recipes-description": "Receptų komentavimas išjungiamas ir komentarų skiltis paslepiama",
"disable-organizing-recipe-ingredients-by-units-and-food": "Išjungti ingredientų organizavimą pagal matavimo vienetus ir maistą", "disable-organizing-recipe-ingredients-by-units-and-food": "Išjungti ingredientų organizavimą pagal matavimo vienetus ir maistą",
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields", "disable-organizing-recipe-ingredients-by-units-and-food-description": "Paslepia maisto, vieneto ir kiekio laukus ingredientams ir apdoroja ingredientus kaip paprasto teksto laukus",
"general-preferences": "Bendrosios nuostatos", "general-preferences": "Bendrosios nuostatos",
"group-recipe-preferences": "Grupės receptų nustatymai", "group-recipe-preferences": "Grupės receptų nustatymai",
"report": "Pranešti", "report": "Pranešti",
"report-with-id": "Report ID: {id}", "report-with-id": "Ataskaitos ID: {id}",
"group-management": "Grupių valdymas", "group-management": "Grupių valdymas",
"admin-group-management": "Administravimo grupės valdymas", "admin-group-management": "Administravimo grupės valdymas",
"admin-group-management-text": "Pakeitimai šiai grupei pritaikomi iš karto.", "admin-group-management-text": "Pakeitimai šiai grupei pritaikomi iš karto.",
"group-id-value": "Grupės ID: {0}", "group-id-value": "Grupės ID: {0}",
"total-households": "Total Households", "total-households": "Iš viso namų ūkių",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household" "you-must-select-a-group-before-selecting-a-household": "Prieš pasirinkdami namų ūkį, turite pasirinkti grupę"
}, },
"household": { "household": {
"household": "Household", "household": "Namų ūkis",
"households": "Households", "households": "Namų ūkiai",
"user-household": "User Household", "user-household": "Naudotojo namų ūkis",
"create-household": "Create Household", "create-household": "Sukurti namų ūkį",
"household-name": "Household Name", "household-name": "Namų ūkio pavadinimas",
"household-group": "Household Group", "household-group": "Namų ūkio grupė",
"household-management": "Household Management", "household-management": "Namų ūkio valdymas",
"manage-households": "Manage Households", "manage-households": "Tvarkyti namų ūkius",
"admin-household-management": "Admin Household Management", "admin-household-management": "Administratoriaus namų ūkio valdymas",
"admin-household-management-text": "Changes to this household will be reflected immediately.", "admin-household-management-text": "Šio namų ūkio pakeitimai įsigalios iš karto.",
"household-id-value": "Household Id: {0}", "household-id-value": "Namų ūkio Id: {0}",
"private-household": "Private Household", "private-household": "Privatus namų ūkis",
"private-household-description": "Setting your household to private will disable all public view options. This overrides any individual public view settings", "private-household-description": "Nustačius namų ūkį kaip privatų, bus išjungtos visos viešo peržiūrėjimo parinktys.\nTai perrašo visus atskirus viešo peržiūrėjimo nustatymus",
"lock-recipe-edits-from-other-households": "Lock recipe edits from other households", "lock-recipe-edits-from-other-households": "Užrakinti receptų redagavimą kitiems namų ūkiams",
"lock-recipe-edits-from-other-households-description": "When enabled only users in your household can edit recipes created by your household", "lock-recipe-edits-from-other-households-description": "Įjungus šį nustatymą, tik jūsų namų ūkio naudotojai galės redaguoti jūsų namų ūkio sukurtus receptus",
"household-recipe-preferences": "Household Recipe Preferences", "household-recipe-preferences": "Namų ūkio receptų nuostatos",
"default-recipe-preferences-description": "These are the default settings when a new recipe is created in your household. These can be changed for individual recipes in the recipe settings menu.", "default-recipe-preferences-description": "Tai yra numatytieji nustatymai, taikomi kuriant naują receptą jūsų namų ūkyje.\nJuos galima pakeisti atskiriems receptams recepto nustatymų meniu.",
"allow-users-outside-of-your-household-to-see-your-recipes": "Allow users outside of your household to see your recipes", "allow-users-outside-of-your-household-to-see-your-recipes": "Leisti naudotojams, nepriklausantiems jūsų namų ūkiui, matyti jūsų receptus",
"allow-users-outside-of-your-household-to-see-your-recipes-description": "When enabled you can use a public share link to share specific recipes without authorizing the user. When disabled, you can only share recipes with users who are in your household or with a pre-generated private link", "allow-users-outside-of-your-household-to-see-your-recipes-description": "Įjungus šį nustatymą, galėsite naudoti viešą bendrinimo nuorodą ir dalintis konkrečiais receptais nesuteikiant naudotojui prieigos.\nIšjungus, receptais galėsite dalintis tik su naudotojais, esančiais jūsų namų ūkyje, arba naudodami iš anksto sugeneruotą privačią nuorodą",
"household-preferences": "Household Preferences" "household-preferences": "Namų ūkio nuostatos"
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Sukurti naują mitybos planą", "create-a-new-meal-plan": "Sukurti naują mitybos planą",
"update-this-meal-plan": "Update this Meal Plan", "update-this-meal-plan": "Atnaujinti šį maitinimo planą",
"dinner-this-week": "Šios savaitės vakarienė", "dinner-this-week": "Šios savaitės vakarienė",
"dinner-today": "Šiandienos vakarienė", "dinner-today": "Šiandienos vakarienė",
"dinner-tonight": "VAKARIENĖ ŠIANDIEN", "dinner-tonight": "VAKARIENĖ ŠIANDIEN",
@@ -323,14 +325,14 @@
"mealplan-settings": "Mitybos plano nustatymai", "mealplan-settings": "Mitybos plano nustatymai",
"mealplan-update-failed": "Mitybos plano atnaujinti nepavyko", "mealplan-update-failed": "Mitybos plano atnaujinti nepavyko",
"mealplan-updated": "Mitybos planas atnaujintas", "mealplan-updated": "Mitybos planas atnaujintas",
"mealplan-households-description": "If no household is selected, recipes can be added from any household", "mealplan-households-description": "Jei nepasirinktas joks namų ūkis, receptus galima pridėti iš bet kurio namų ūkio",
"any-category": "Bet kuri kategorija", "any-category": "Bet kuri kategorija",
"any-tag": "Any Tag", "any-tag": "Bet kuri žyma",
"any-household": "Any Household", "any-household": "Bet kuris namų ūkis",
"no-meal-plan-defined-yet": "Nėra nustatytų mitybos planų", "no-meal-plan-defined-yet": "Nėra nustatytų mitybos planų",
"no-meal-planned-for-today": "Nėra šios dienos mitybos plano", "no-meal-planned-for-today": "Nėra šios dienos mitybos plano",
"numberOfDays-hint": "Number of days on page load", "numberOfDays-hint": "Dienų skaičius puslapio įkėlimo metu",
"numberOfDays-label": "Default Days", "numberOfDays-label": "Numatytasis dienų skaičius",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Mitybos planuose bus naudojami tik šių kategorijų receptai", "only-recipes-with-these-categories-will-be-used-in-meal-plans": "Mitybos planuose bus naudojami tik šių kategorijų receptai",
"planner": "Planuoklis", "planner": "Planuoklis",
"quick-week": "Greitas savaitės planas", "quick-week": "Greitas savaitės planas",
@@ -342,7 +344,7 @@
"breakfast": "Pusryčiai", "breakfast": "Pusryčiai",
"lunch": "Pietūs", "lunch": "Pietūs",
"dinner": "Vakarienė", "dinner": "Vakarienė",
"snack": "Snack", "snack": "Užkandis",
"drink": "Drink", "drink": "Drink",
"dessert": "Dessert", "dessert": "Dessert",
"type-any": "Bet kas", "type-any": "Bet kas",
@@ -367,7 +369,9 @@
"recipe-rules": "Recepto taisyklės", "recipe-rules": "Recepto taisyklės",
"applies-to-all-days": "Galioja visoms dienoms", "applies-to-all-days": "Galioja visoms dienoms",
"applies-on-days": "Galioja {0}", "applies-on-days": "Galioja {0}",
"meal-plan-settings": "Valgių plano nustatymai" "meal-plan-settings": "Valgių plano nustatymai",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Perkėlimo duomenys pašalinti", "migration-data-removed": "Perkėlimo duomenys pašalinti",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Įkelti receptą", "upload-a-recipe": "Įkelti receptą",
"upload-individual-zip-file": "Įkelkite .zip failą, eksportuotą iš kitos \"Mealie\" sistemos.", "upload-individual-zip-file": "Įkelkite .zip failą, eksportuotą iš kitos \"Mealie\" sistemos.",
"url-form-hint": "Nukopijuokite ir įklijuokite nuorodą iš mėgstamų receptų svetainės", "url-form-hint": "Nukopijuokite ir įklijuokite nuorodą iš mėgstamų receptų svetainės",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Nukopijuokite ir įklijuokite savo duomenų šaltinio URL (nebūtina)",
"view-scraped-data": "Peržiūrėti nuskaitytus duomenis", "view-scraped-data": "Peržiūrėti nuskaitytus duomenis",
"trim-whitespace-description": "Pašalinti tarpus bei tuščias eilutes pradžioje ir pabaigoje", "trim-whitespace-description": "Pašalinti tarpus bei tuščias eilutes pradžioje ir pabaigoje",
"trim-prefix-description": "Pašalinti kiekvienos eilutės pirmąjį ženklą", "trim-prefix-description": "Pašalinti kiekvienos eilutės pirmąjį ženklą",
@@ -623,31 +627,32 @@
"create-recipe-from-an-image": "Create Recipe from an Image", "create-recipe-from-an-image": "Create Recipe from an Image",
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.", "create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.", "crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
"create-from-images": "Create from Images", "create-from-images": "Kurti iš vaizdų",
"should-translate-description": "Translate the recipe into my language", "should-translate-description": "Išversti receptą į mano kalbą",
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.", "please-wait-image-procesing": "Prašome palaukti, vaizdas apdorojamas. Tai gali užtrukti.",
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.", "please-wait-images-processing": "Prašome palaukti, vaizdai apdorojami. Tai gali užtrukti.",
"bulk-url-import": "Masinis URL importavimas", "bulk-url-import": "Masinis URL importavimas",
"debug-scraper": "Ieškoti nuskaitymo klaidų", "debug-scraper": "Ieškoti nuskaitymo klaidų",
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Sukurti receptą įrašant pavadinimą. Visi receptai privalo turėti unikalius pavadinimus.", "create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Sukurti receptą įrašant pavadinimą. Visi receptai privalo turėti unikalius pavadinimus.",
"new-recipe-names-must-be-unique": "Naujo recepto pavadinimas turi būti unikalus", "new-recipe-names-must-be-unique": "Naujo recepto pavadinimas turi būti unikalus",
"scrape-recipe": "Nuskaityti receptą", "scrape-recipe": "Nuskaityti receptą",
"scrape-recipe-description": "Nuskaityti receptą iš URL nuorodos. Pateikite recepto nuorodą, ir Mealie pabandys paimti recepto informaciją iš šios svetainės ir patalpinti ją jūsų kolekcijoje.", "scrape-recipe-description": "Nuskaityti receptą iš URL nuorodos. Pateikite recepto nuorodą, ir Mealie pabandys paimti recepto informaciją iš šios svetainės ir patalpinti ją jūsų kolekcijoje.",
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?", "scrape-recipe-have-a-lot-of-recipes": "Turite daug receptų, kuriuos norite nuskaityti vienu metu?",
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer", "scrape-recipe-suggest-bulk-importer": "Išbandykite masinį importavimą",
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?", "scrape-recipe-have-raw-html-or-json-data": "Turite neapdorotų HTML arba JSON duomenų?",
"scrape-recipe-you-can-import-from-raw-data-directly": "You can import from raw data directly", "scrape-recipe-you-can-import-from-raw-data-directly": "Galite importuoti tiesiogiai iš neapdorotų duomenų",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Svetainė blokuojama?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Pabandykite vietoj to importuoti neapdorotą HTML.",
"import-original-keywords-as-tags": "Įkelti pradinius raktažodžius kaip žymas", "import-original-keywords-as-tags": "Įkelti pradinius raktažodžius kaip žymas",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Toliau redaguoti", "stay-in-edit-mode": "Toliau redaguoti",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Analizuoti recepto ingredientus po importavimo",
"import-from-zip": "Įkelti iš .ZIP archyvo", "import-from-zip": "Įkelti iš .ZIP archyvo",
"import-from-zip-description": "Įkelti atskirą receptą, išsaugotą iš Mealie.", "import-from-zip-description": "Įkelti atskirą receptą, išsaugotą iš Mealie.",
"import-from-html-or-json": "Import from HTML or JSON", "import-from-html-or-json": "Importuoti iš HTML arba JSON",
"import-from-html-or-json-description": "Import a single recipe from raw HTML or JSON. This is useful if you have a recipe from a site that Mealie can't scrape normally, or from some other external source.", "import-from-html-or-json-description": "Importuokite vieną receptą iš neapdoroto HTML arba JSON. Tai naudinga, jei turite receptą iš svetainės, kurios Mealie įprastai negali nuskaityti, arba iš kito išorinio šaltinio.",
"json-import-format-description-colon": "To import via JSON, it must be in valid format:", "json-import-format-description-colon": "Norint importuoti per JSON, jis turi būti tinkamo formato:",
"json-editor": "JSON Editor", "json-editor": "JSON redaktorius",
"zip-files-must-have-been-exported-from-mealie": ".ZIP archyvai privalo būti išsaugoti iš Mealie", "zip-files-must-have-been-exported-from-mealie": ".ZIP archyvai privalo būti išsaugoti iš Mealie",
"create-a-recipe-by-uploading-a-scan": "Sukurti receptą iš nuskenuoto dokumento.", "create-a-recipe-by-uploading-a-scan": "Sukurti receptą iš nuskenuoto dokumento.",
"upload-a-png-image-from-a-recipe-book": "Įkelti .PNG nuotrauką iš receptų knygos", "upload-a-png-image-from-a-recipe-book": "Įkelti .PNG nuotrauką iš receptų knygos",
@@ -664,46 +669,46 @@
"recipe-debugger-use-openai-description": "Naudokite 'OpenAI', kad išanalizuoti rezultatus, o ne pasikliauti tinklalapių duomenų rinkiklio įrankiu. Kuriant receptą naudojant URL, tai padaroma automatiškai, jei duomenų rinkiklio įrankiui nepavyksta apdoroti rezultatų, tačiau čia jį galite išbandyti rankiniu būdu.", "recipe-debugger-use-openai-description": "Naudokite 'OpenAI', kad išanalizuoti rezultatus, o ne pasikliauti tinklalapių duomenų rinkiklio įrankiu. Kuriant receptą naudojant URL, tai padaroma automatiškai, jei duomenų rinkiklio įrankiui nepavyksta apdoroti rezultatų, tačiau čia jį galite išbandyti rankiniu būdu.",
"debug": "Šalinti klaidas", "debug": "Šalinti klaidas",
"tree-view": "Medžio struktūra", "tree-view": "Medžio struktūra",
"recipe-servings": "Recipe Servings", "recipe-servings": "Recepto porcijos",
"recipe-yield": "Recepto išeiga", "recipe-yield": "Recepto išeiga",
"recipe-yield-text": "Recipe Yield Text", "recipe-yield-text": "Recepto išeigos tekstas",
"unit": "Vienetas", "unit": "Vienetas",
"upload-image": "Įkelti nuotrauką", "upload-image": "Įkelti nuotrauką",
"screen-awake": "Keep Screen Awake", "screen-awake": "Neleisti ekranui užmigti",
"remove-image": "Remove image", "remove-image": "Pašalinti vaizdą",
"nextStep": "Next step", "nextStep": "Kitas žingsnis",
"recipe-actions": "Recipe Actions", "recipe-actions": "Recepto veiksmai",
"parser": { "parser": {
"ingredient-parser": "Ingredient Parser", "ingredient-parser": "Ingredientų analizatorius",
"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.", "explanation": "Norėdami naudoti ingredientų analizatorių, spustelėkite mygtuką „Analizuoti visus“, kad pradėtumėte procesą.\nKai apdoroti ingredientai bus paruošti, galėsite peržiūrėti elementus ir patikrinti, ar jie buvo teisingai išanalizuoti.\nModelio pasitikėjimo įvertinimas rodomas dešinėje nuo elemento pavadinimo. Šis įvertinimas yra visų atskirų įverčių vidurkis ir ne visada gali būti visiškai tikslus.",
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.", "alerts-explainer": "Įspėjimai bus rodomi, jei bus rastas atitinkamas maistas arba matavimo vienetas, tačiau jo nėra duomenų bazėje.",
"select-parser": "Select Parser", "select-parser": "Pasirinkti analizatorių",
"natural-language-processor": "Natural Language Processor", "natural-language-processor": "Natūralios kalbos apdorojimo modulis",
"brute-parser": "Brute Parser", "brute-parser": "Brutalus analizatorius",
"openai-parser": "OpenAI Parser", "openai-parser": "OpenAI analizatorius",
"parse-all": "Parse All", "parse-all": "Analizuoti visus",
"no-unit": "No unit", "no-unit": "Be vieneto",
"missing-unit": "Create missing unit: {unit}", "missing-unit": "Sukurti trūkstamą vienetą: {unit}",
"missing-food": "Create missing food: {food}", "missing-food": "Sukurti trūkstamą maisto produktą: {food}",
"this-unit-could-not-be-parsed-automatically": "This unit could not be parsed automatically", "this-unit-could-not-be-parsed-automatically": "Šio vieneto nepavyko automatiškai išanalizuoti",
"this-food-could-not-be-parsed-automatically": "This food could not be parsed automatically", "this-food-could-not-be-parsed-automatically": "Šio maisto produkto nepavyko automatiškai išanalizuoti",
"no-food": "No Food", "no-food": "Be maisto produkto",
"review-parsed-ingredients": "Review parsed ingredients", "review-parsed-ingredients": "Peržiūrėti išanalizuotus ingredientus",
"confidence-score": "Confidence Score", "confidence-score": "Pasitikėjimo įvertinimas",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.", "ingredient-parser-description": "Jūsų ingredientai buvo sėkmingai išanalizuoti. Prašome peržiūrėti ingredientus, dėl kurių nesame tikri.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.", "ingredient-parser-final-review-description": "Peržiūrėjus visus ingredientus, turėsite dar vieną galimybę peržiūrėti visus ingredientus prieš pritaikant pakeitimus receptui.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}", "add-text-as-alias-for-item": "Pridėti \"{text}\" kaip alternatyvų pavadinimą {item}",
"delete-item": "Delete Item" "delete-item": "Ištrinti elementą"
}, },
"reset-servings-count": "Reset Servings Count", "reset-servings-count": "Atstatyti porcijų skaičių",
"not-linked-ingredients": "Additional Ingredients", "not-linked-ingredients": "Papildomi ingredientai",
"upload-another-image": "Upload another image", "upload-another-image": "Įkelti kitą vaizdą",
"upload-images": "Upload images", "upload-images": "Įkelti vaizdus",
"upload-more-images": "Upload more images", "upload-more-images": "Įkelti daugiau vaizdų",
"set-as-cover-image": "Set as recipe cover image", "set-as-cover-image": "Nustatyti kaip recepto viršelio vaizdą",
"cover-image": "Cover image", "cover-image": "Viršelio vaizdas",
"include-linked-recipes": "Include Linked Recipes", "include-linked-recipes": "Įtraukti susietus receptus",
"include-linked-recipe-ingredients": "Include Linked Recipe Ingredients", "include-linked-recipe-ingredients": "Įtraukti susietų receptų ingredientus",
"toggle-recipe": "Toggle Recipe" "toggle-recipe": "Toggle Recipe"
}, },
"recipe-finder": { "recipe-finder": {

View File

@@ -212,6 +212,8 @@
"upload-file": "Augšupielādēt failu", "upload-file": "Augšupielādēt failu",
"created-on-date": "Izveidots: {0}", "created-on-date": "Izveidots: {0}",
"unsaved-changes": "Jums ir nesaglabātas izmaiņas. Vai vēlaties ietaupīt pirms aiziešanas? Labi, lai saglabātu, Atcelt, lai izmestu izmaiņas.", "unsaved-changes": "Jums ir nesaglabātas izmaiņas. Vai vēlaties ietaupīt pirms aiziešanas? Labi, lai saglabātu, Atcelt, lai izmestu izmaiņas.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Neizdevās kopēt starpliktuvē.", "clipboard-copy-failure": "Neizdevās kopēt starpliktuvē.",
"confirm-delete-generic-items": "Vai tiešām vēlaties dzēst šādus vienumus?", "confirm-delete-generic-items": "Vai tiešām vēlaties dzēst šādus vienumus?",
"organizers": "Organizatori", "organizers": "Organizatori",
@@ -367,7 +369,9 @@
"recipe-rules": "Recepšu noteikumi", "recipe-rules": "Recepšu noteikumi",
"applies-to-all-days": "Attiecas uz visām dienām", "applies-to-all-days": "Attiecas uz visām dienām",
"applies-on-days": "Attiecas uz {0} s", "applies-on-days": "Attiecas uz {0} s",
"meal-plan-settings": "Maltītes plāna iestatījumi" "meal-plan-settings": "Maltītes plāna iestatījumi",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Migrācijas dati noņemti", "migration-data-removed": "Migrācijas dati noņemti",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "Importējiet oriģinālos atslēgvārdus kā tagus", "import-original-keywords-as-tags": "Importējiet oriģinālos atslēgvārdus kā tagus",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Palieciet rediģēšanas režīmā", "stay-in-edit-mode": "Palieciet rediģēšanas režīmā",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"import-from-zip": "Importēt no Zip", "import-from-zip": "Importēt no Zip",

View File

@@ -4,7 +4,7 @@
"about-mealie": "Over Mealie", "about-mealie": "Over Mealie",
"api-docs": "API-documentatie", "api-docs": "API-documentatie",
"api-port": "API-poort", "api-port": "API-poort",
"application-mode": "Toepassingsmodus", "application-mode": "Applicatiemodus",
"database-type": "Databasetype", "database-type": "Databasetype",
"database-url": "Database URL", "database-url": "Database URL",
"default-group": "Standaardgroep", "default-group": "Standaardgroep",
@@ -175,7 +175,7 @@
"view": "Weergave", "view": "Weergave",
"wednesday": "woensdag", "wednesday": "woensdag",
"yes": "Ja", "yes": "Ja",
"foods": "Levensmiddelen", "foods": "Ingrediënten",
"units": "Eenheden", "units": "Eenheden",
"back": "Terug", "back": "Terug",
"next": "Volgende", "next": "Volgende",
@@ -212,6 +212,8 @@
"upload-file": "Bestand uploaden", "upload-file": "Bestand uploaden",
"created-on-date": "Gemaakt op: {0}", "created-on-date": "Gemaakt op: {0}",
"unsaved-changes": "Er zijn niet-opgeslagen wijzigingen. Wil je eerst opslaan voordat je vertrekt? Oké om op te slaan, Annuleren om wijzigingen ongedaan te maken.", "unsaved-changes": "Er zijn niet-opgeslagen wijzigingen. Wil je eerst opslaan voordat je vertrekt? Oké om op te slaan, Annuleren om wijzigingen ongedaan te maken.",
"discard-changes": "Sla wijzigingen niet op",
"discard-changes-description": "Je wilt je wijzigingen niet opslaan. Weet je het zeker?",
"clipboard-copy-failure": "Kopiëren naar klembord mislukt.", "clipboard-copy-failure": "Kopiëren naar klembord mislukt.",
"confirm-delete-generic-items": "Weet je zeker dat je de volgende items wilt verwijderen?", "confirm-delete-generic-items": "Weet je zeker dat je de volgende items wilt verwijderen?",
"organizers": "Organisatoren", "organizers": "Organisatoren",
@@ -268,7 +270,7 @@
"default-to-landscape-view-description": "Als dit is ingeschakeld zie je de koptekst van dit recept in liggende weergave", "default-to-landscape-view-description": "Als dit is ingeschakeld zie je de koptekst van dit recept in liggende weergave",
"disable-users-from-commenting-on-recipes": "Gebruikersreacties op recepten uitschakelen", "disable-users-from-commenting-on-recipes": "Gebruikersreacties op recepten uitschakelen",
"disable-users-from-commenting-on-recipes-description": "Als dit is ingeschakeld zie je geen reacties op dit recept en kunnen bezoekers ook geen reacties achterlaten", "disable-users-from-commenting-on-recipes-description": "Als dit is ingeschakeld zie je geen reacties op dit recept en kunnen bezoekers ook geen reacties achterlaten",
"disable-organizing-recipe-ingredients-by-units-and-food": "Het organiseren van receptingrediënten met eenheden en levensmiddelen uitschakelen", "disable-organizing-recipe-ingredients-by-units-and-food": "Het organiseren van ingrediënten met eenheden en levensmiddelen uitschakelen",
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Als dit is ingeschakeld zijn levensmiddelen, eenheden en hoeveelheden verborgen en worden ingrediënten als gewone tekstvelden behandeld", "disable-organizing-recipe-ingredients-by-units-and-food-description": "Als dit is ingeschakeld zijn levensmiddelen, eenheden en hoeveelheden verborgen en worden ingrediënten als gewone tekstvelden behandeld",
"general-preferences": "Algemene voorkeuren", "general-preferences": "Algemene voorkeuren",
"group-recipe-preferences": "Receptvoorkeuren voor groep", "group-recipe-preferences": "Receptvoorkeuren voor groep",
@@ -367,7 +369,9 @@
"recipe-rules": "Receptregels", "recipe-rules": "Receptregels",
"applies-to-all-days": "Van toepassing op alle dagen", "applies-to-all-days": "Van toepassing op alle dagen",
"applies-on-days": "Van toepassing op {0}s", "applies-on-days": "Van toepassing op {0}s",
"meal-plan-settings": "Maaltijdplan-instellingen" "meal-plan-settings": "Maaltijdplan-instellingen",
"add-all-to-list": "Alles aan lijst toevoegen",
"add-day-to-list": "Dag aan lijst toevoegen"
}, },
"migration": { "migration": {
"migration-data-removed": "Migratiegegevens verwijderd", "migration-data-removed": "Migratiegegevens verwijderd",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Wordt de website geblokkeerd?", "scrape-recipe-website-being-blocked": "Wordt de website geblokkeerd?",
"scrape-recipe-try-importing-raw-html-instead": "Probeer de HTML broncode te importeren.", "scrape-recipe-try-importing-raw-html-instead": "Probeer de HTML broncode te importeren.",
"import-original-keywords-as-tags": "Importeer oorspronkelijke trefwoorden als labels", "import-original-keywords-as-tags": "Importeer oorspronkelijke trefwoorden als labels",
"import-original-categories": "Importeer oorspronkelijke categorieën",
"stay-in-edit-mode": "Blijf in bewerkingsmodus", "stay-in-edit-mode": "Blijf in bewerkingsmodus",
"parse-recipe-ingredients-after-import": "Ontleed de ingrediënten van het recept na importeren", "parse-recipe-ingredients-after-import": "Ontleed de ingrediënten van het recept na importeren",
"import-from-zip": "Importeren uit zip", "import-from-zip": "Importeren uit zip",

View File

@@ -69,7 +69,7 @@
"new-notification": "Nytt varsel", "new-notification": "Nytt varsel",
"event-notifiers": "Hendelsesvarsler", "event-notifiers": "Hendelsesvarsler",
"apprise-url-skipped-if-blank": "Apprise-URL (hoppes over hvis tom)", "apprise-url-skipped-if-blank": "Apprise-URL (hoppes over hvis tom)",
"apprise-url-is-left-intentionally-blank": "Siden Apprise URL-er vanligvis inneholder sensitiv informasjon, må dette feltet ikke være tomt mens du redigerer. Hvis du vil oppdatere URL, skriv inn den nye her, ellers la den være tom for å beholde den gjeldende URL.", "apprise-url-is-left-intentionally-blank": "Siden Apprise URL-er vanligvis inneholder sensitiv informasjon forblir dette feltet tomt mens du redigerer. Hvis du vil oppdatere URL, skriv inn den nye her, eller la den være tom for å beholde den gjeldende URL.",
"enable-notifier": "Aktiver varslingsagenten", "enable-notifier": "Aktiver varslingsagenten",
"what-events": "Hvilke hendelser skal denne varslingsagenten abonnere på?", "what-events": "Hvilke hendelser skal denne varslingsagenten abonnere på?",
"user-events": "Brukerhendelser", "user-events": "Brukerhendelser",
@@ -212,6 +212,8 @@
"upload-file": "Last opp fil", "upload-file": "Last opp fil",
"created-on-date": "Opprettet: {0}", "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.", "unsaved-changes": "Du har ulagrede endringer. Ønsker du å lagre før du forlater? Trykk 'OK' for å lagre, 'Avbryt' for å forkaste endringene.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Kunne ikke kopiere til utklippstavlen.", "clipboard-copy-failure": "Kunne ikke kopiere til utklippstavlen.",
"confirm-delete-generic-items": "Er du sikker på at du vil slette følgende elementer?", "confirm-delete-generic-items": "Er du sikker på at du vil slette følgende elementer?",
"organizers": "Organisatorer", "organizers": "Organisatorer",
@@ -343,7 +345,7 @@
"lunch": "Lunsj", "lunch": "Lunsj",
"dinner": "Middag", "dinner": "Middag",
"snack": "Snacks", "snack": "Snacks",
"drink": "Drink", "drink": "Drikke",
"dessert": "Dessert", "dessert": "Dessert",
"type-any": "Enhver", "type-any": "Enhver",
"day-any": "Enhver", "day-any": "Enhver",
@@ -367,7 +369,9 @@
"recipe-rules": "Regler for oppskrifter", "recipe-rules": "Regler for oppskrifter",
"applies-to-all-days": "Gjelder for alle dager", "applies-to-all-days": "Gjelder for alle dager",
"applies-on-days": "Gjelder på {0}er", "applies-on-days": "Gjelder på {0}er",
"meal-plan-settings": "Innstillinger for måltidsplan" "meal-plan-settings": "Innstillinger for måltidsplan",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Overføringsdata er fjernet", "migration-data-removed": "Overføringsdata er fjernet",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Last opp oppskrift", "upload-a-recipe": "Last opp oppskrift",
"upload-individual-zip-file": "Last opp en individuell .zip-fil eksportert fra en annen Mealie-instans.", "upload-individual-zip-file": "Last opp en individuell .zip-fil eksportert fra en annen Mealie-instans.",
"url-form-hint": "Kopier og lim inn en lenke fra nettstedet med favorittoppskriftene dine", "url-form-hint": "Kopier og lim inn en lenke fra nettstedet med favorittoppskriftene dine",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Kopier og lim inn kilde-URL-en til dataene dine (valgfritt)",
"view-scraped-data": "Vis skrapte data", "view-scraped-data": "Vis skrapte data",
"trim-whitespace-description": "Fjern innledende og etterfølgende mellomrom i tillegg til tomme linjer", "trim-whitespace-description": "Fjern innledende og etterfølgende mellomrom i tillegg til tomme linjer",
"trim-prefix-description": "Fjern første tegn fra hver linje", "trim-prefix-description": "Fjern første tegn fra hver linje",
@@ -569,7 +573,7 @@
"choose-unit": "Velg enhet", "choose-unit": "Velg enhet",
"press-enter-to-create": "Trykk Enter for å opprette", "press-enter-to-create": "Trykk Enter for å opprette",
"choose-food": "Velg matvarer", "choose-food": "Velg matvarer",
"choose-recipe": "Choose Recipe", "choose-recipe": "Velg oppskrift",
"notes": "Notater", "notes": "Notater",
"toggle-section": "Legg til seksjon", "toggle-section": "Legg til seksjon",
"see-original-text": "Se opprinnelig tekst", "see-original-text": "Se opprinnelig tekst",
@@ -637,9 +641,10 @@
"scrape-recipe-suggest-bulk-importer": "Prøv masseimportering", "scrape-recipe-suggest-bulk-importer": "Prøv masseimportering",
"scrape-recipe-have-raw-html-or-json-data": "Har du HTML- eller JSON-rådata?", "scrape-recipe-have-raw-html-or-json-data": "Har du HTML- eller JSON-rådata?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Du kan importere fra rådata direkte", "scrape-recipe-you-can-import-from-raw-data-directly": "Du kan importere fra rådata direkte",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Er nettstedet blokkert?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Prøv å importere HTML-koden i stedet.",
"import-original-keywords-as-tags": "Importer originale søkeord som emneord", "import-original-keywords-as-tags": "Importer originale søkeord som emneord",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Forbli i redigeringsmodus", "stay-in-edit-mode": "Forbli i redigeringsmodus",
"parse-recipe-ingredients-after-import": "Analyser oppskriftens ingredienser etter at importen er fullført", "parse-recipe-ingredients-after-import": "Analyser oppskriftens ingredienser etter at importen er fullført",
"import-from-zip": "Importer fra zip-fil", "import-from-zip": "Importer fra zip-fil",
@@ -742,7 +747,7 @@
"advanced": "Avansert", "advanced": "Avansert",
"auto-search": "Autosøk", "auto-search": "Autosøk",
"no-results": "Ingen resultater funnet", "no-results": "Ingen resultater funnet",
"type-to-search": "Type to search..." "type-to-search": "Skriv for å søke..."
}, },
"settings": { "settings": {
"add-a-new-theme": "Legg til nytt tema", "add-a-new-theme": "Legg til nytt tema",
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "Dette feltet er påkrevd",
"invalid-email": "Email Must Be Valid", "invalid-email": "E-postadressen må være gyldig",
"invalid-url": "Must Be A Valid URL", "invalid-url": "Må være en gyldig nettadresse",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "Ingen mellomrom tillatt",
"min-length": "Must Be At Least {min} Characters", "min-length": "Må minst ha {min} tegn",
"max-length": "Must Be At Most {max} Characters" "max-length": "Kan maksimalt ha {max} tegn"
} }
} }

View File

@@ -41,9 +41,9 @@
"category-created": "Kategoria stworzona", "category-created": "Kategoria stworzona",
"category-creation-failed": "Błąd podczas tworzenia kategorii", "category-creation-failed": "Błąd podczas tworzenia kategorii",
"category-deleted": "Usunięto kategorię", "category-deleted": "Usunięto kategorię",
"category-deletion-failed": "Usunięcie kategorii nie powiodło się", "category-deletion-failed": "Nie udało się usunąć kategorii",
"category-filter": "Filtr kategorii", "category-filter": "Filtr kategorii",
"category-update-failed": "Aktualizacja kategorii nie powiodła się", "category-update-failed": "Nie udało się zaktualizować kategorii",
"category-updated": "Zaktualizowano kategorię", "category-updated": "Zaktualizowano kategorię",
"uncategorized-count": "{count} bez kategorii", "uncategorized-count": "{count} bez kategorii",
"create-a-category": "Stwórz kategorię", "create-a-category": "Stwórz kategorię",
@@ -201,7 +201,7 @@
"last-made": "Ostatnio wykonane", "last-made": "Ostatnio wykonane",
"learn-more": "Dowiedz się więcej", "learn-more": "Dowiedz się więcej",
"this-feature-is-currently-inactive": "Ta funkcja jest obecnie nieaktywna", "this-feature-is-currently-inactive": "Ta funkcja jest obecnie nieaktywna",
"clipboard-not-supported": "Schowek nieobsługiwany", "clipboard-not-supported": "Schowek nie jest obsługiwany",
"copied-to-clipboard": "Skopiowano do schowka", "copied-to-clipboard": "Skopiowano do schowka",
"your-browser-does-not-support-clipboard": "Twoja przeglądarka nie obsługuje schowka", "your-browser-does-not-support-clipboard": "Twoja przeglądarka nie obsługuje schowka",
"copied-items-to-clipboard": "Nie skopiowano elementu do schowka|Jeden element skopiowany do schowka|Skopiowano {count} elementów do schowka", "copied-items-to-clipboard": "Nie skopiowano elementu do schowka|Jeden element skopiowany do schowka|Skopiowano {count} elementów do schowka",
@@ -212,6 +212,8 @@
"upload-file": "Prześlij plik", "upload-file": "Prześlij plik",
"created-on-date": "Utworzono dnia: {0}", "created-on-date": "Utworzono dnia: {0}",
"unsaved-changes": "Masz niezapisane zmiany. Czy chcesz zapisać przed wyjściem? Ok, aby zapisać, Anuluj, żeby odrzucić zmiany.", "unsaved-changes": "Masz niezapisane zmiany. Czy chcesz zapisać przed wyjściem? Ok, aby zapisać, Anuluj, żeby odrzucić zmiany.",
"discard-changes": "Odrzuć zmiany",
"discard-changes-description": "Masz niezapisane zmiany. Czy na pewno chcesz je odrzucić?",
"clipboard-copy-failure": "Nie udało się skopiować do schowka.", "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": "Organizatory", "organizers": "Organizatory",
@@ -307,8 +309,8 @@
"create-a-new-meal-plan": "Utwórz nowy plan posiłku", "create-a-new-meal-plan": "Utwórz nowy plan posiłku",
"update-this-meal-plan": "Zaktualizuj plan posiłku", "update-this-meal-plan": "Zaktualizuj plan posiłku",
"dinner-this-week": "Obiad w tym tygodniu", "dinner-this-week": "Obiad w tym tygodniu",
"dinner-today": "Obiad dziś", "dinner-today": "Obiad na dziś",
"dinner-tonight": "OBIAD DZIŚ", "dinner-tonight": "Kolacja na dziś",
"edit-meal-plan": "Edytuj plan posiłku", "edit-meal-plan": "Edytuj plan posiłku",
"end-date": "Data zakończenia", "end-date": "Data zakończenia",
"group": "Grupa (Beta)", "group": "Grupa (Beta)",
@@ -342,9 +344,9 @@
"breakfast": "Śniadanie", "breakfast": "Śniadanie",
"lunch": "Obiad", "lunch": "Obiad",
"dinner": "Kolacja", "dinner": "Kolacja",
"snack": "Snack", "snack": "Przekąska",
"drink": "Drink", "drink": "Napój",
"dessert": "Dessert", "dessert": "Deser",
"type-any": "Dowolny", "type-any": "Dowolny",
"day-any": "Dowolny", "day-any": "Dowolny",
"editor": "Edytor", "editor": "Edytor",
@@ -367,7 +369,9 @@
"recipe-rules": "Reguły przepisów", "recipe-rules": "Reguły przepisów",
"applies-to-all-days": "Dotyczy wszystkich dni", "applies-to-all-days": "Dotyczy wszystkich dni",
"applies-on-days": "Dotyczy {0}", "applies-on-days": "Dotyczy {0}",
"meal-plan-settings": "Ustawienia planera posiłków" "meal-plan-settings": "Ustawienia planera posiłków",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Dane migracji usunięte", "migration-data-removed": "Dane migracji usunięte",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Wrzuć przepis", "upload-a-recipe": "Wrzuć przepis",
"upload-individual-zip-file": "Prześlij pojedynczy plik .zip wyeksportowany z innej instancji Mealie.", "upload-individual-zip-file": "Prześlij pojedynczy plik .zip wyeksportowany z innej instancji Mealie.",
"url-form-hint": "Skopiuj i wklej link ze swojej ulubionej strony z przepisami", "url-form-hint": "Skopiuj i wklej link ze swojej ulubionej strony z przepisami",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Skopiuj i wklej źródłowy adres URL swoich danych (opcjonalnie)",
"view-scraped-data": "Wyświetl zebrane dane", "view-scraped-data": "Wyświetl zebrane dane",
"trim-whitespace-description": "Przytnij pustą przestrzeń przed i po zawartości oraz puste linie", "trim-whitespace-description": "Przytnij pustą przestrzeń przed i po zawartości oraz puste linie",
"trim-prefix-description": "Przytnij pierwszy znak z każdej linii", "trim-prefix-description": "Przytnij pierwszy znak z każdej linii",
@@ -637,9 +641,10 @@
"scrape-recipe-suggest-bulk-importer": "Wypróbuj importer zbiorczy", "scrape-recipe-suggest-bulk-importer": "Wypróbuj importer zbiorczy",
"scrape-recipe-have-raw-html-or-json-data": "Masz dane HTML bądź JSON?", "scrape-recipe-have-raw-html-or-json-data": "Masz dane HTML bądź JSON?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Możesz zaimportować bezpośrednio z surowych danych", "scrape-recipe-you-can-import-from-raw-data-directly": "Możesz zaimportować bezpośrednio z surowych danych",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Witryna jest zablokowana?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Zamiast tego spróbuj zaimportować surowy HTML.",
"import-original-keywords-as-tags": "Importuj oryginalne słowa kluczowe jako tagi", "import-original-keywords-as-tags": "Importuj oryginalne słowa kluczowe jako tagi",
"import-original-categories": "Importuj oryginalne kategorie",
"stay-in-edit-mode": "Pozostań w trybie edycji", "stay-in-edit-mode": "Pozostań w trybie edycji",
"parse-recipe-ingredients-after-import": "Analizuj składniki receptury po zaimportowaniu", "parse-recipe-ingredients-after-import": "Analizuj składniki receptury po zaimportowaniu",
"import-from-zip": "Importuj z pliku Zip", "import-from-zip": "Importuj z pliku Zip",
@@ -830,7 +835,7 @@
"api-token": "Token API", "api-token": "Token API",
"api-tokens": "Tokeny API", "api-tokens": "Tokeny API",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Skopiuj ten token w celu użycia w zewnętrznej aplikacji. Tokenu tego nie będzie można więcej wyświetlić.", "copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Skopiuj ten token w celu użycia w zewnętrznej aplikacji. Tokenu tego nie będzie można więcej wyświetlić.",
"create-an-api-token": "Utworz token API", "create-an-api-token": "Utwórz token API",
"token-name": "Nazwa tokenu", "token-name": "Nazwa tokenu",
"generate": "Generuj", "generate": "Generuj",
"you-have-token-count": "Nie masz aktywnych tokenów. |Masz jeden aktywny token.|Masz {count} aktywnych tokenów." "you-have-token-count": "Nie masz aktywnych tokenów. |Masz jeden aktywny token.|Masz {count} aktywnych tokenów."
@@ -966,8 +971,8 @@
"tag-creation-failed": "Utworzenie etykiety nie powiodło się", "tag-creation-failed": "Utworzenie etykiety nie powiodło się",
"tag-deleted": "Etykieta została usunięta", "tag-deleted": "Etykieta została usunięta",
"tag-deletion-failed": "Usunięcie etykiety nie powiodło się", "tag-deletion-failed": "Usunięcie etykiety nie powiodło się",
"tag-update-failed": "Atkualizacja etykiety nie powiodła się", "tag-update-failed": "Aktualizacja etykiety nie powiodła się",
"tag-updated": "Etykieta została zakutalizowana", "tag-updated": "Etykieta została zaktualizowana",
"tags": "Tagi", "tags": "Tagi",
"untagged-count": "{count} bez etykiety", "untagged-count": "{count} bez etykiety",
"create-a-tag": "Utwórz znacznik", "create-a-tag": "Utwórz znacznik",
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "To pole jest wymagane",
"invalid-email": "Email Must Be Valid", "invalid-email": "E-mail musi być prawidłowy",
"invalid-url": "Must Be A Valid URL", "invalid-url": "Musi być prawidłowym odnośnikiem",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "Niedozwolone są puste spacje",
"min-length": "Must Be At Least {min} Characters", "min-length": "Musi zawierać co najmniej {min} znaków",
"max-length": "Must Be At Most {max} Characters" "max-length": "Musi zawierać co najwyżej {max} znaków"
} }
} }

View File

@@ -75,7 +75,7 @@
"user-events": "Eventos do usuário", "user-events": "Eventos do usuário",
"mealplan-events": "Eventos do Plano Refeições", "mealplan-events": "Eventos do Plano Refeições",
"when-a-user-in-your-group-creates-a-new-mealplan": "Quando um usuário do seu grupo criar um plano de refeição", "when-a-user-in-your-group-creates-a-new-mealplan": "Quando um usuário do seu grupo criar um plano de refeição",
"shopping-list-events": "Eventos da Lista de Compras", "shopping-list-events": "Eventos da lista de compras",
"cookbook-events": "Eventos do Livro de Receitas", "cookbook-events": "Eventos do Livro de Receitas",
"tag-events": "Eventos de Etiqueta", "tag-events": "Eventos de Etiqueta",
"category-events": "Eventos de Categoria", "category-events": "Eventos de Categoria",
@@ -180,7 +180,7 @@
"back": "Voltar", "back": "Voltar",
"next": "Avançar", "next": "Avançar",
"start": "Iniciar", "start": "Iniciar",
"toggle-view": "Alternar Visualização", "toggle-view": "Alternar visualização",
"date": "Data", "date": "Data",
"id": "Id", "id": "Id",
"owner": "Proprietário", "owner": "Proprietário",
@@ -212,6 +212,8 @@
"upload-file": "Enviar arquivo", "upload-file": "Enviar arquivo",
"created-on-date": "Criado em {0}", "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.", "unsaved-changes": "Você possui alterações não salvas. Deseja salvar antes de sair? Ok para salvar, Cancelar para descartar alterações.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Falha ao copiar para a área de transferência.", "clipboard-copy-failure": "Falha ao copiar para a área de transferência.",
"confirm-delete-generic-items": "Tem certeza que quer excluir os itens seguintes?", "confirm-delete-generic-items": "Tem certeza que quer excluir os itens seguintes?",
"organizers": "Organizadores", "organizers": "Organizadores",
@@ -237,7 +239,7 @@
"group-token": "Token do Grupo", "group-token": "Token do Grupo",
"group-with-value": "Grupo: {groupID}", "group-with-value": "Grupo: {groupID}",
"groups": "Grupos", "groups": "Grupos",
"manage-groups": "Gerenciar Grupos", "manage-groups": "Gerenciar grupos",
"user-group": "Grupo de usuário", "user-group": "Grupo de usuário",
"user-group-created": "Grupo de usuários criado", "user-group-created": "Grupo de usuários criado",
"user-group-creation-failed": "Falha ao criar grupo de usuários", "user-group-creation-failed": "Falha ao criar grupo de usuários",
@@ -246,9 +248,9 @@
"keep-my-recipes-private-description": "Define o seu grupo e todas as receitas padrão como privadas. Você sempre pode mudar isso mais tarde." "keep-my-recipes-private-description": "Define o seu grupo e todas as receitas padrão como privadas. Você sempre pode mudar isso mais tarde."
}, },
"manage-members": "Gerenciar membros", "manage-members": "Gerenciar membros",
"manage-members-description": "Gerencie as permissões dos membros da sua casa. {manage} permite ao usuário acessar a página de gerenciamento de dados, e {invite} permite ao usuário gerar links de convites para outros usuários. Os proprietários de grupos não podem mudar suas próprias permissões.", "manage-members-description": "Gerencie as permissões dos membros do seu domicílio. {manage} permite ao usuário acessar a página de gerenciamento de dados, e {invite} permite ao usuário gerar links de convites para outros usuários. Os proprietários de grupos não podem mudar suas próprias permissões.",
"manage": "Gerenciar", "manage": "Gerenciar",
"manage-household": "Gerenciar Casa", "manage-household": "Gerenciar domicílio",
"invite": "Convidar", "invite": "Convidar",
"looking-to-update-your-profile": "Procurando atualizar seu perfil?", "looking-to-update-your-profile": "Procurando atualizar seu perfil?",
"default-recipe-preferences-description": "Estas são as configurações padrão quando uma nova receita é criada no seu grupo. Elas podem ser alteradas para receitas individuais no menu de configurações de receitas.", "default-recipe-preferences-description": "Estas são as configurações padrão quando uma nova receita é criada no seu grupo. Elas podem ser alteradas para receitas individuais no menu de configurações de receitas.",
@@ -278,30 +280,30 @@
"admin-group-management": "Gerenciamento de Grupos Administrativos", "admin-group-management": "Gerenciamento de Grupos Administrativos",
"admin-group-management-text": "As alterações a este grupo serão refletidas imediatamente.", "admin-group-management-text": "As alterações a este grupo serão refletidas imediatamente.",
"group-id-value": "ID do grupo: {0}", "group-id-value": "ID do grupo: {0}",
"total-households": "Total de Familiares", "total-households": "Total de domicílios",
"you-must-select-a-group-before-selecting-a-household": "Você deve selecionar um grupo antes de selecionar uma família" "you-must-select-a-group-before-selecting-a-household": "Você deve selecionar um grupo antes de selecionar um domicílio"
}, },
"household": { "household": {
"household": "Casa", "household": "Domicílio",
"households": "Casas", "households": "Domicílios",
"user-household": "Família do Usuário", "user-household": "Domicílio do usuário",
"create-household": "Criar Família", "create-household": "Criar domicílio",
"household-name": "Nome da Família", "household-name": "Nome do domicílio",
"household-group": "Grupo Familiar", "household-group": "Grupo domiciliar",
"household-management": "Gerenciamento Familiar", "household-management": "Gerenciamento domiciliar",
"manage-households": "Gerenciar Família", "manage-households": "Gerenciar domicílio",
"admin-household-management": "Administrador de Gerenciamento Familiar", "admin-household-management": "Administrador de gerenciamento domiciliar",
"admin-household-management-text": "Mudanças a esta família serão aplicadas imediatamente.", "admin-household-management-text": "Mudanças a este domicílio serão aplicadas imediatamente.",
"household-id-value": "Id Familiar: {0}", "household-id-value": "Identificação do domicílio: {0}",
"private-household": "Família Privada", "private-household": "Domicílio privado",
"private-household-description": "Configurar sua família como privado desativará todas as opções de visualização pública. Isso substitui as configurações de visualização pública individual", "private-household-description": "Configurar seu domicílio como privado desativará todas as opções de visualização pública. Isso substitui as configurações de visualização pública individual",
"lock-recipe-edits-from-other-households": "Bloquear edições de receitas de outras famílias", "lock-recipe-edits-from-other-households": "Bloquear edições de receitas de outros domicílios",
"lock-recipe-edits-from-other-households-description": "Quando ativado apenas os usuários da sua família podem editar receitas criadas por sua família", "lock-recipe-edits-from-other-households-description": "Quando ativado, apenas os membros do seu domicílio podem editar receitas criadas por membros do seu domicílio",
"household-recipe-preferences": "Preferências de Receita da Família", "household-recipe-preferences": "Preferências das receitas do domicílio",
"default-recipe-preferences-description": "Estas são as configurações padrão quando uma nova receita é criada em sua família. Elas podem ser alteradas para receitas individuais no menu de configurações de receitas.", "default-recipe-preferences-description": "Estas são as configurações padrão quando uma nova receita é criada em seu domicílio. Elas podem ser alteradas para receitas individuais no menu de configurações de receitas.",
"allow-users-outside-of-your-household-to-see-your-recipes": "Permitir que os usuários fora de sua família vejam suas receitas", "allow-users-outside-of-your-household-to-see-your-recipes": "Permitir que os usuários de fora do seu domicílio vejam suas receitas",
"allow-users-outside-of-your-household-to-see-your-recipes-description": "Quando ativado, você pode usar um link de compartilhamento público para compartilhar receitas específicas sem autorizar o usuário. Quando desativado, você só pode compartilhar receitas com usuários que estão na sua família ou com um link privado pré-gerado", "allow-users-outside-of-your-household-to-see-your-recipes-description": "Quando ativado, você pode usar um link de compartilhamento público para compartilhar receitas específicas sem autorizar o usuário. Quando desativado, você só pode compartilhar receitas com usuários do seu domicílio ou com um link privado pré-gerado",
"household-preferences": "Preferências Familiares" "household-preferences": "Preferências do domicílio"
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Criar um novo plano de refeições", "create-a-new-meal-plan": "Criar um novo plano de refeições",
@@ -313,20 +315,20 @@
"end-date": "Data Final", "end-date": "Data Final",
"group": "Grupo (Beta)", "group": "Grupo (Beta)",
"main": "Prato Principal", "main": "Prato Principal",
"meal-planner": "Planejador de Refeições", "meal-planner": "Planejador de refeições",
"meal-plans": "Planos de refeições", "meal-plans": "Planos de refeições",
"mealplan-categories": "CATEGORIAS DE PLANOS DE REFEIÇÕES", "mealplan-categories": "CATEGORIAS DE PLANOS DE REFEIÇÕES",
"mealplan-created": "Plano de Refeições criado", "mealplan-created": "Plano de Refeições criado",
"mealplan-creation-failed": "Falha ao criar Plano de Refeições", "mealplan-creation-failed": "Falha ao criar Plano de Refeições",
"mealplan-deleted": "Plano de Refeições removido", "mealplan-deleted": "Plano de Refeições removido",
"mealplan-deletion-failed": "Falha ao excluir Plano de Refeições", "mealplan-deletion-failed": "Falha ao excluir Plano de Refeições",
"mealplan-settings": "Configurações de Plano de Refeições", "mealplan-settings": "Configurações de plano de refeições",
"mealplan-update-failed": "Falha ao atualizar Plano de Refeições", "mealplan-update-failed": "Falha ao atualizar Plano de Refeições",
"mealplan-updated": "Plano de Refeições atualizado", "mealplan-updated": "Plano de Refeições atualizado",
"mealplan-households-description": "Se nenhuma família for selecionada, as receitas podem ser adicionadas por qualquer família", "mealplan-households-description": "Se nenhum domicílio for selecionado, as receitas podem ser adicionadas por qualquer domicílio",
"any-category": "Qualquer Categoria", "any-category": "Qualquer Categoria",
"any-tag": "Qualquer Etiqueta", "any-tag": "Qualquer Etiqueta",
"any-household": "Qualquer Família", "any-household": "Qualquer domicílio",
"no-meal-plan-defined-yet": "Nenhum Plano de Refeições definido ainda", "no-meal-plan-defined-yet": "Nenhum Plano de Refeições definido ainda",
"no-meal-planned-for-today": "Nenhuma refeição planejada para hoje", "no-meal-planned-for-today": "Nenhuma refeição planejada para hoje",
"numberOfDays-hint": "Número de dias ao carregar a página", "numberOfDays-hint": "Número de dias ao carregar a página",
@@ -342,9 +344,9 @@
"breakfast": "Café da manhã", "breakfast": "Café da manhã",
"lunch": "Almoço", "lunch": "Almoço",
"dinner": "Jantar", "dinner": "Jantar",
"snack": "Snack", "snack": "Lanche",
"drink": "Drink", "drink": "Bebida",
"dessert": "Dessert", "dessert": "Sobremesa",
"type-any": "Qualquer", "type-any": "Qualquer",
"day-any": "Qualquer", "day-any": "Qualquer",
"editor": "Editor", "editor": "Editor",
@@ -367,7 +369,9 @@
"recipe-rules": "Regras das receitas", "recipe-rules": "Regras das receitas",
"applies-to-all-days": "Aplica-se diariamente", "applies-to-all-days": "Aplica-se diariamente",
"applies-on-days": "Aplica-se em:", "applies-on-days": "Aplica-se em:",
"meal-plan-settings": "Configurações de Plano de Refeições" "meal-plan-settings": "Configurações de plano de refeições",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Dados de migração removidos", "migration-data-removed": "Dados de migração removidos",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Enviar uma Receita", "upload-a-recipe": "Enviar uma Receita",
"upload-individual-zip-file": "Enviar um arquivo .zip individual exportado a partir de outra instância do Mealie.", "upload-individual-zip-file": "Enviar um arquivo .zip individual exportado a partir de outra instância do Mealie.",
"url-form-hint": "Copie e cole um link do seu site de receita favorito", "url-form-hint": "Copie e cole um link do seu site de receita favorito",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Copie e cole o URL de origem dos seus dados (opcional)",
"view-scraped-data": "Visualizar Dados Rastreados", "view-scraped-data": "Visualizar Dados Rastreados",
"trim-whitespace-description": "Aparar o espaço em branco e à direita, bem como linhas em branco", "trim-whitespace-description": "Aparar o espaço em branco e à direita, bem como linhas em branco",
"trim-prefix-description": "Aparar primeiro caractere de cada linha", "trim-prefix-description": "Aparar primeiro caractere de cada linha",
@@ -525,7 +529,7 @@
"delete-image-confirmation": "Tem certeza que deseja deletar a imagem da receita?", "delete-image-confirmation": "Tem certeza que deseja deletar a imagem da receita?",
"recipe-image-deleted": "Imagem da receita deletada", "recipe-image-deleted": "Imagem da receita deletada",
"recipe-name": "Nome da Receita", "recipe-name": "Nome da Receita",
"recipe-settings": "Configurações da Receita", "recipe-settings": "Configurações da receita",
"recipe-update-failed": "Falha ao atualizar a receita", "recipe-update-failed": "Falha ao atualizar a receita",
"recipe-updated": "Receita atualizada", "recipe-updated": "Receita atualizada",
"remove-from-favorites": "Remover dos Favoritos", "remove-from-favorites": "Remover dos Favoritos",
@@ -571,7 +575,7 @@
"choose-food": "Escolher Comida", "choose-food": "Escolher Comida",
"choose-recipe": "Selecionar Receita", "choose-recipe": "Selecionar Receita",
"notes": "Notas", "notes": "Notas",
"toggle-section": "Alternar Seção", "toggle-section": "Alternar seção",
"see-original-text": "Exibir texto original", "see-original-text": "Exibir texto original",
"original-text-with-value": "Texto Original: {originalText}", "original-text-with-value": "Texto Original: {originalText}",
"ingredient-linker": "Ingrediente do Linker", "ingredient-linker": "Ingrediente do Linker",
@@ -637,9 +641,10 @@
"scrape-recipe-suggest-bulk-importer": "Tente o importador em massa", "scrape-recipe-suggest-bulk-importer": "Tente o importador em massa",
"scrape-recipe-have-raw-html-or-json-data": "Tem dados HTML ou JSON brutos?", "scrape-recipe-have-raw-html-or-json-data": "Tem dados HTML ou JSON brutos?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Você pode importar diretamente de dados brutos", "scrape-recipe-you-can-import-from-raw-data-directly": "Você pode importar diretamente de dados brutos",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Site sendo bloqueado?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Tente importar o HTML ao invés disso.",
"import-original-keywords-as-tags": "Importar palavras-chave originais como marcadores", "import-original-keywords-as-tags": "Importar palavras-chave originais como marcadores",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Permanecer no modo de edição", "stay-in-edit-mode": "Permanecer no modo de edição",
"parse-recipe-ingredients-after-import": "Interpretar os ingredientes da receita após importar", "parse-recipe-ingredients-after-import": "Interpretar os ingredientes da receita após importar",
"import-from-zip": "Importar do .zip", "import-from-zip": "Importar do .zip",
@@ -653,7 +658,7 @@
"upload-a-png-image-from-a-recipe-book": "Carregar uma imagem em png de um livro de receitas", "upload-a-png-image-from-a-recipe-book": "Carregar uma imagem em png de um livro de receitas",
"recipe-bulk-importer": "Importador em massa de Receitas", "recipe-bulk-importer": "Importador em massa de Receitas",
"recipe-bulk-importer-description": "O importador de receitas em massa permite que você importe várias receitas de uma vez enfileirando os sites no backend e executando a tarefa em segundo plano. Isso pode ser útil quando inicialmente migrar para Mealie, ou quando você quiser importar um grande número de receitas.", "recipe-bulk-importer-description": "O importador de receitas em massa permite que você importe várias receitas de uma vez enfileirando os sites no backend e executando a tarefa em segundo plano. Isso pode ser útil quando inicialmente migrar para Mealie, ou quando você quiser importar um grande número de receitas.",
"set-categories-and-tags": "Definir Categorias e Marcadores", "set-categories-and-tags": "Definir categorias e marcadores",
"bulk-imports": "Importações em massa", "bulk-imports": "Importações em massa",
"bulk-import-process-has-started": "Processo de importação em massa iniciado", "bulk-import-process-has-started": "Processo de importação em massa iniciado",
"bulk-import-process-has-failed": "Processo de importação em massa falhou", "bulk-import-process-has-failed": "Processo de importação em massa falhou",
@@ -704,10 +709,10 @@
"cover-image": "Imagem de capa", "cover-image": "Imagem de capa",
"include-linked-recipes": "Incluir Receita Linkada", "include-linked-recipes": "Incluir Receita Linkada",
"include-linked-recipe-ingredients": "Incluir Ingredientes da Receita Linkada", "include-linked-recipe-ingredients": "Incluir Ingredientes da Receita Linkada",
"toggle-recipe": "Alternar Receita" "toggle-recipe": "Alternar receita"
}, },
"recipe-finder": { "recipe-finder": {
"recipe-finder": "Localizador de Receitas", "recipe-finder": "Localizador de receitas",
"recipe-finder-description": "Procure por receitas baseadas em ingredientes que você tem na mão. Você também pode filtrar por ferramentas disponíveis e definir um número máximo de ingredientes ou ferramentas que faltam.", "recipe-finder-description": "Procure por receitas baseadas em ingredientes que você tem na mão. Você também pode filtrar por ferramentas disponíveis e definir um número máximo de ingredientes ou ferramentas que faltam.",
"selected-ingredients": "Ingredientes selecionados", "selected-ingredients": "Ingredientes selecionados",
"no-ingredients-selected": "Nenhum ingrediente selecionado", "no-ingredients-selected": "Nenhum ingrediente selecionado",
@@ -737,7 +742,7 @@
"search": "Pesquisar", "search": "Pesquisar",
"search-mealie": "Pesquisar no Mealie (pressione /)", "search-mealie": "Pesquisar no Mealie (pressione /)",
"search-placeholder": "Pesquisar...", "search-placeholder": "Pesquisar...",
"tag-filter": "Filtro de Marcadores", "tag-filter": "Filtro de marcadores",
"search-hint": "Pressione '/'", "search-hint": "Pressione '/'",
"advanced": "Avançado", "advanced": "Avançado",
"auto-search": "Pesquisa automática", "auto-search": "Pesquisa automática",
@@ -746,7 +751,7 @@
}, },
"settings": { "settings": {
"add-a-new-theme": "Adicionar um novo tema", "add-a-new-theme": "Adicionar um novo tema",
"admin-settings": "Configurações de Administrador", "admin-settings": "Configurações de administrador",
"backup": { "backup": {
"backup-created": "Backup criado com sucesso", "backup-created": "Backup criado com sucesso",
"backup-created-at-response-export_path": "Backup criado em {path}", "backup-created-at-response-export_path": "Backup criado em {path}",
@@ -777,7 +782,7 @@
"edit-page": "Editar Página", "edit-page": "Editar Página",
"events": "Eventos", "events": "Eventos",
"first-day-of-week": "Primeiro dia da semana", "first-day-of-week": "Primeiro dia da semana",
"group-settings-updated": "Configurações de Grupo Atualizadas", "group-settings-updated": "Configurações de grupo atualizadas",
"homepage": { "homepage": {
"all-categories": "Todas as Categorias", "all-categories": "Todas as Categorias",
"card-per-section": "Cartão por Seção", "card-per-section": "Cartão por Seção",
@@ -823,7 +828,7 @@
"theme-updated": "Tema atualizado", "theme-updated": "Tema atualizado",
"warning": "Atenção", "warning": "Atenção",
"light-mode": "Modo Claro", "light-mode": "Modo Claro",
"dark-mode": "Modo Escuro" "dark-mode": "Modo escuro"
}, },
"token": { "token": {
"active-tokens": "TOKENS ATIVOS", "active-tokens": "TOKENS ATIVOS",
@@ -896,13 +901,13 @@
}, },
"shopping-list": { "shopping-list": {
"all-lists": "Todas as Listas", "all-lists": "Todas as Listas",
"create-shopping-list": "Criar Lista de Compras", "create-shopping-list": "Criar lista de compras",
"from-recipe": "Da Receita", "from-recipe": "Da Receita",
"list-name": "Nome da Lista", "list-name": "Nome da Lista",
"new-list": "Nova lista", "new-list": "Nova lista",
"quantity": "Quantidade: {0}", "quantity": "Quantidade: {0}",
"shopping-list": "Lista de Compras", "shopping-list": "Lista de compras",
"shopping-lists": "Listas de Compras", "shopping-lists": "Listas de compras",
"food": "Comida", "food": "Comida",
"note": "Nota", "note": "Nota",
"label": "Marcador", "label": "Marcador",
@@ -914,8 +919,8 @@
"copy-as-text": "Copiar como texto", "copy-as-text": "Copiar como texto",
"copy-as-markdown": "Copiar como Markdown", "copy-as-markdown": "Copiar como Markdown",
"delete-checked": "Excluir selecionados", "delete-checked": "Excluir selecionados",
"toggle-label-sort": "Alternar Ordenação de Marcador", "toggle-label-sort": "Alternar ordem dos marcadores",
"reorder-labels": "Reordenar Marcadores", "reorder-labels": "Reordenar marcadores",
"uncheck-all-items": "Desmarcar todos os itens", "uncheck-all-items": "Desmarcar todos os itens",
"check-all-items": "Marcar todos os itens", "check-all-items": "Marcar todos os itens",
"linked-recipes-count": "Sem Receitas Vinculadas! Uma Receita Vinculada -{count} Receitas Vinculadas", "linked-recipes-count": "Sem Receitas Vinculadas! Uma Receita Vinculada -{count} Receitas Vinculadas",
@@ -936,7 +941,7 @@
"cookbooks": "Livros de Receita", "cookbooks": "Livros de Receita",
"dashboard": "Painel", "dashboard": "Painel",
"home-page": "Página Inicial", "home-page": "Página Inicial",
"manage-users": "Gerenciar Usuários", "manage-users": "Gerenciar usuários",
"migrations": "Migrações", "migrations": "Migrações",
"profile": "Perfil", "profile": "Perfil",
"search": "Pesquisar", "search": "Pesquisar",
@@ -1010,7 +1015,7 @@
"login-oidc": "Entrar com", "login-oidc": "Entrar com",
"or": "ou", "or": "ou",
"logout": "Sair", "logout": "Sair",
"manage-users": "Gerenciar Usuários", "manage-users": "Gerenciar usuários",
"manage-users-description": "Criar e gerir usuários.", "manage-users-description": "Criar e gerir usuários.",
"new-password": "Nova senha", "new-password": "Nova senha",
"new-user": "Novo Usuário", "new-user": "Novo Usuário",
@@ -1048,7 +1053,7 @@
"you-are-not-allowed-to-delete-this-user": "Você não tem permissão para remover esse usuário", "you-are-not-allowed-to-delete-this-user": "Você não tem permissão para remover esse usuário",
"enable-advanced-content": "Ativar conteúdo avançado", "enable-advanced-content": "Ativar conteúdo avançado",
"enable-advanced-content-description": "Habilita recursos avançados como Escalonamento de Receitas, chaves de API e Gerenciamento de Dados. Não se preocupe, você sempre pode mudar isso mais tarde", "enable-advanced-content-description": "Habilita recursos avançados como Escalonamento de Receitas, chaves de API e Gerenciamento de Dados. Não se preocupe, você sempre pode mudar isso mais tarde",
"favorite-recipes": "Receitas Favoritas", "favorite-recipes": "Receitas favoritas",
"email-or-username": "E-mail ou nome de usuário", "email-or-username": "E-mail ou nome de usuário",
"remember-me": "Lembre-se de mim", "remember-me": "Lembre-se de mim",
"please-enter-your-email-and-password": "Por favor, digite seu e-mail e senha", "please-enter-your-email-and-password": "Por favor, digite seu e-mail e senha",
@@ -1073,7 +1078,7 @@
"administrator": "Administrador", "administrator": "Administrador",
"user-can-invite-other-to-group": "O usuário pode convidar outros para o grupo", "user-can-invite-other-to-group": "O usuário pode convidar outros para o grupo",
"user-can-manage-group": "Usuário pode gerenciar o grupo", "user-can-manage-group": "Usuário pode gerenciar o grupo",
"user-can-manage-household": "O usuário pode gerenciar a família", "user-can-manage-household": "O usuário pode gerenciar o domicílio",
"user-can-organize-group-data": "Usuário pode organizar dados do grupo", "user-can-organize-group-data": "Usuário pode organizar dados do grupo",
"enable-advanced-features": "Ativar recursos avançados", "enable-advanced-features": "Ativar recursos avançados",
"it-looks-like-this-is-your-first-time-logging-in": "Parece que este é seu primeiro login.", "it-looks-like-this-is-your-first-time-logging-in": "Parece que este é seu primeiro login.",
@@ -1152,7 +1157,7 @@
"data-exports": "Exportações de Dados", "data-exports": "Exportações de Dados",
"tag": "Marcador", "tag": "Marcador",
"categorize": "Categorizar", "categorize": "Categorizar",
"update-settings": "Atualizar Configurações", "update-settings": "Atualizar configurações",
"tag-recipes": "Marcar Receitas", "tag-recipes": "Marcar Receitas",
"categorize-recipes": "Categorizar Receitas", "categorize-recipes": "Categorizar Receitas",
"export-recipes": "Exportar Receitas", "export-recipes": "Exportar Receitas",
@@ -1335,8 +1340,8 @@
"debug-openai-services-description": "Use esta página para depurar serviços OpenAI. Você pode testar a sua conexão OpenAI e ver os resultados aqui. Se você tiver os serviços de imagem ativados, você também pode fornecer uma imagem.", "debug-openai-services-description": "Use esta página para depurar serviços OpenAI. Você pode testar a sua conexão OpenAI e ver os resultados aqui. Se você tiver os serviços de imagem ativados, você também pode fornecer uma imagem.",
"run-test": "Executar teste", "run-test": "Executar teste",
"test-results": "Resultados do teste", "test-results": "Resultados do teste",
"group-delete-note": "Grupos com usuários ou famílias não podem ser excluídos", "group-delete-note": "Grupos com usuários ou domicílios não podem ser excluídos",
"household-delete-note": "Famílias com usuários não podem ser excluídas" "household-delete-note": "Domicílios com usuários não podem ser excluídos"
}, },
"profile": { "profile": {
"welcome-user": "👋 Bem-vindo(a), {0}!", "welcome-user": "👋 Bem-vindo(a), {0}!",
@@ -1346,26 +1351,26 @@
"get-public-link": "Obter link público", "get-public-link": "Obter link público",
"account-summary": "Resumo da conta", "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": "Estatísticas do grupo",
"group-statistics-description": "Suas Estatísticas em Grupo fornecem algumas informações sobre como você está usando o Mealie.", "group-statistics-description": "Suas Estatísticas em Grupo fornecem algumas informações sobre como você está usando o Mealie.",
"household-statistics": "Estatísticas da Família", "household-statistics": "Estatísticas do domicílio",
"household-statistics-description": "Suas Estatísticas da Família fornecem algumas dicas de como você está usando o Mealie.", "household-statistics-description": "Suas estatísticas do domicílio fornecem algumas dicas de como você está usando o Mealie.",
"storage-capacity": "Capacidade de armazenamento", "storage-capacity": "Capacidade de armazenamento",
"storage-capacity-description": "Sua capacidade de armazenamento é um cálculo das imagens e arquivos que você carregou.", "storage-capacity-description": "Sua capacidade de armazenamento é um cálculo das imagens e arquivos que você carregou.",
"personal": "Pessoal", "personal": "Pessoal",
"personal-description": "Estas configurações são pessoais. Mudanças aqui não afetarão outros usuários.", "personal-description": "Estas configurações são pessoais. Mudanças aqui não afetarão outros usuários.",
"user-settings": "Configurações de Usuário", "user-settings": "Configurações do usuário",
"user-settings-description": "Gerencie suas preferências, altere sua senha, e atualize seu e-mail.", "user-settings-description": "Gerencie suas preferências, altere sua senha, e atualize seu e-mail.",
"api-tokens-description": "Gerencie seus Tokens de API para acessar de aplicações externas.", "api-tokens-description": "Gerencie seus Tokens de API para acessar de aplicações externas.",
"group-description": "Esses itens são compartilhados dentro do seu grupo. Ao editar um deles vai mudá-lo para todo o grupo!", "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": "Configurações do grupo",
"group-settings-description": "Gerencie suas configurações comuns de grupo, como configurações de privacidade.", "group-settings-description": "Gerencie suas configurações comuns de grupo, como configurações de privacidade.",
"household-description": "Esses itens são compartilhados dentro de sua família. Editar um deles irá alterá-lo para toda a família!", "household-description": "Esses itens são compartilhados dentro do seu domicílio. Editar um deles irá alterá-lo para todo o domicílio!",
"household-settings": "Configurações da Família", "household-settings": "Configurações do domicílio",
"household-settings-description": "Gerencie suas configurações familiares, como planos de refeição e configurações de privacidade.", "household-settings-description": "Gerencie suas configurações domiciliares, como planos de refeição e configurações de privacidade.",
"cookbooks-description": "Gerencie uma coleção de categorias de receita e gere páginas para elas.", "cookbooks-description": "Gerencie uma coleção de categorias de receita e gere páginas para elas.",
"members": "Membros", "members": "Membros",
"members-description": "Ver quem está na sua família e gerenciar suas permissões.", "members-description": "Ver quem está no seu domicílio e gerenciar suas permissões.",
"webhooks-description": "Setup webhooks that trigger on days that you have have mealplan scheduled.", "webhooks-description": "Setup webhooks that trigger on days that you have have mealplan scheduled.",
"notifiers": "Notificadores", "notifiers": "Notificadores",
"notifiers-description": "Configure e-mails e notificações push que desencadeiam eventos específicos.", "notifiers-description": "Configure e-mails e notificações push que desencadeiam eventos específicos.",
@@ -1379,20 +1384,20 @@
"preferences": "Preferências", "preferences": "Preferências",
"show-advanced-description": "Mostrar recursos avançados (Chaves de API, Webhooks, e Gerenciamento de Dados)", "show-advanced-description": "Mostrar recursos avançados (Chaves de API, Webhooks, e Gerenciamento de Dados)",
"back-to-profile": "Voltar para o perfil", "back-to-profile": "Voltar para o perfil",
"looking-for-privacy-settings": "Procurando por Configurações de Privacidade?", "looking-for-privacy-settings": "Procurando por configurações de privacidade?",
"manage-your-api-tokens": "Gerenciar seus tokens de API", "manage-your-api-tokens": "Gerenciar seus tokens de API",
"manage-user-profile": "Gerenciar perfil de usuário", "manage-user-profile": "Gerenciar perfil de usuário",
"manage-cookbooks": "Gerenciar Livros de Receita", "manage-cookbooks": "Gerenciar livros de receita",
"manage-members": "Gerenciar Membros", "manage-members": "Gerenciar membros",
"manage-webhooks": "Gerenciar Webhooks", "manage-webhooks": "Gerenciar webhooks",
"manage-notifiers": "Gerenciar Notificadores", "manage-notifiers": "Gerenciar notificadores",
"manage-data-migrations": "Gerenciar Migrações de Dados" "manage-data-migrations": "Gerenciar migrações de dados"
}, },
"cookbook": { "cookbook": {
"cookbooks": "Livros de Receita", "cookbooks": "Livros de Receita",
"description": "Livros de receitas são outra maneira de criar sessões cruzadas de receitas, organizadores e outros filtros. Criar um livro de receitas adicionará um acesso à barra lateral e todas as receitas com filtros selecionados serão exibidos no livro de receitas.", "description": "Livros de receitas são outra maneira de criar sessões cruzadas de receitas, organizadores e outros filtros. Criar um livro de receitas adicionará um acesso à barra lateral e todas as receitas com filtros selecionados serão exibidos no livro de receitas.",
"hide-cookbooks-from-other-households": "Ocultar Livros de Receitas de Outras Famílias", "hide-cookbooks-from-other-households": "Ocultar livros de receitas de outros domicílios",
"hide-cookbooks-from-other-households-description": "Quando ativo, apenas livros de receitas da sua família aparecerão na barra lateral", "hide-cookbooks-from-other-households-description": "Quando ativo, apenas livros de receitas do seu domicílio aparecerão na barra lateral",
"public-cookbook": "Livro de Receitas público", "public-cookbook": "Livro de Receitas público",
"public-cookbook-description": "Cookbooks públicos podem ser compartilhados com usuários que não sejam não-mealiee serão exibidos na sua página de grupos.", "public-cookbook-description": "Cookbooks públicos podem ser compartilhados com usuários que não sejam não-mealiee serão exibidos na sua página de grupos.",
"filter-options": "Opções de filtro", "filter-options": "Opções de filtro",
@@ -1402,7 +1407,7 @@
"require-all-tools": "Exigir todas as ferramentas", "require-all-tools": "Exigir todas as ferramentas",
"cookbook-name": "Nome do Livro de Receitas", "cookbook-name": "Nome do Livro de Receitas",
"cookbook-with-name": "Livro de Receitas {0}", "cookbook-with-name": "Livro de Receitas {0}",
"household-cookbook-name": "{0} Livro de Receitas {1}", "household-cookbook-name": "{0} Livro de receitas {1}",
"create-a-cookbook": "Criar um Livro de Receitas", "create-a-cookbook": "Criar um Livro de Receitas",
"cookbook": "Livro de Receitas" "cookbook": "Livro de Receitas"
}, },
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "Este campo é obrigatório",
"invalid-email": "Email Must Be Valid", "invalid-email": "O e-mail deve ser válido",
"invalid-url": "Must Be A Valid URL", "invalid-url": "Precisa ser uma URL válida",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "Nenhum espaço em branco é permitido",
"min-length": "Must Be At Least {min} Characters", "min-length": "Precisa ter pelo menos {min} caracteres",
"max-length": "Must Be At Most {max} Characters" "max-length": "Pode ter até {max} caracteres"
} }
} }

View File

@@ -212,6 +212,8 @@
"upload-file": "Carregar ficheiro", "upload-file": "Carregar ficheiro",
"created-on-date": "Criado em: {0}", "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.", "unsaved-changes": "Tem alterações por gravar. Quer gravar antes de sair? OK para gravar, Cancelar para descartar alterações.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Erro ao copiar para a área de transferência.", "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", "organizers": "Organizadores",
@@ -343,8 +345,8 @@
"lunch": "Almoço", "lunch": "Almoço",
"dinner": "Jantar", "dinner": "Jantar",
"snack": "Snack", "snack": "Snack",
"drink": "Drink", "drink": "Bebida",
"dessert": "Dessert", "dessert": "Sobremesa",
"type-any": "Qualquer", "type-any": "Qualquer",
"day-any": "Qualquer", "day-any": "Qualquer",
"editor": "Editor", "editor": "Editor",
@@ -367,7 +369,9 @@
"recipe-rules": "Regras das receitas", "recipe-rules": "Regras das receitas",
"applies-to-all-days": "Aplica-se a todos os dias", "applies-to-all-days": "Aplica-se a todos os dias",
"applies-on-days": "Aplica-se em {0}s", "applies-on-days": "Aplica-se em {0}s",
"meal-plan-settings": "Definições do Plano de Refeições" "meal-plan-settings": "Definições do Plano de Refeições",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Dados de migração removidos", "migration-data-removed": "Dados de migração removidos",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Enviar uma Receita", "upload-a-recipe": "Enviar uma Receita",
"upload-individual-zip-file": "Carregar um ficheiro .zip individual, exportado de outra instância do Mealie.", "upload-individual-zip-file": "Carregar um ficheiro .zip individual, exportado de outra instância do Mealie.",
"url-form-hint": "Copie e cole um link do seu site de receitas favorito", "url-form-hint": "Copie e cole um link do seu site de receitas favorito",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Copie e cole o URL de origem dos seus dados (opcional)",
"view-scraped-data": "Ver dados recolhidos", "view-scraped-data": "Ver dados recolhidos",
"trim-whitespace-description": "Eliminar os espaços em branco no início e no fim, bem como as linhas em branco", "trim-whitespace-description": "Eliminar os espaços em branco no início e no fim, bem como as linhas em branco",
"trim-prefix-description": "Apagar o primeiro caractere de cada linha", "trim-prefix-description": "Apagar o primeiro caractere de cada linha",
@@ -637,9 +641,10 @@
"scrape-recipe-suggest-bulk-importer": "Experimente o importador em massa", "scrape-recipe-suggest-bulk-importer": "Experimente o importador em massa",
"scrape-recipe-have-raw-html-or-json-data": "Tem dados HTML ou JSON em bruto?", "scrape-recipe-have-raw-html-or-json-data": "Tem dados HTML ou JSON em bruto?",
"scrape-recipe-you-can-import-from-raw-data-directly": "É possível importar diretamente a partir de dados em bruto", "scrape-recipe-you-can-import-from-raw-data-directly": "É possível importar diretamente a partir de dados em bruto",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "O site está bloqueado?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Tente importar o HTML bruto em vez disso.",
"import-original-keywords-as-tags": "Importar palavras-chave originais como etiquetas", "import-original-keywords-as-tags": "Importar palavras-chave originais como etiquetas",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Permanecer no modo de edição", "stay-in-edit-mode": "Permanecer no modo de edição",
"parse-recipe-ingredients-after-import": "Analisar ingredientes da receita após a importação", "parse-recipe-ingredients-after-import": "Analisar ingredientes da receita após a importação",
"import-from-zip": "Importar de Zip", "import-from-zip": "Importar de Zip",
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "Este campo é obrigatório",
"invalid-email": "Email Must Be Valid", "invalid-email": "O Email deve ser válido",
"invalid-url": "Must Be A Valid URL", "invalid-url": "O URL deve ser válido",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "Não são permitidos espaços em branco",
"min-length": "Must Be At Least {min} Characters", "min-length": "Deve ter pelo menos {min} caracteres",
"max-length": "Must Be At Most {max} Characters" "max-length": "Deve ter no máximo {max} caracteres"
} }
} }

View File

@@ -212,6 +212,8 @@
"upload-file": "Încărcă fișier", "upload-file": "Încărcă fișier",
"created-on-date": "Creat pe {0}", "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.", "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.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Copierea în clipboard a eșuat.", "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": "Organizatori", "organizers": "Organizatori",
@@ -342,9 +344,9 @@
"breakfast": "Mic dejun", "breakfast": "Mic dejun",
"lunch": "Prânz", "lunch": "Prânz",
"dinner": "Cină", "dinner": "Cină",
"snack": "Snack", "snack": "Gustare",
"drink": "Drink", "drink": "Băutură",
"dessert": "Dessert", "dessert": "Desert",
"type-any": "Oricare", "type-any": "Oricare",
"day-any": "Oricare", "day-any": "Oricare",
"editor": "Editor", "editor": "Editor",
@@ -367,7 +369,9 @@
"recipe-rules": "Reguli rețetă", "recipe-rules": "Reguli rețetă",
"applies-to-all-days": "Se aplică pentru toate zilele", "applies-to-all-days": "Se aplică pentru toate zilele",
"applies-on-days": "Aplică pe {0}s", "applies-on-days": "Aplică pe {0}s",
"meal-plan-settings": "Setările Planului de Masă" "meal-plan-settings": "Setările Planului de Masă",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Datele migrării au fost șterse", "migration-data-removed": "Datele migrării au fost șterse",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Încarcă o rețetă", "upload-a-recipe": "Încarcă o rețetă",
"upload-individual-zip-file": "Încărcaţi un fişier individual .zip exportat dintr-o altă instanţă de Mealie.", "upload-individual-zip-file": "Încărcaţi un fişier individual .zip exportat dintr-o altă instanţă de Mealie.",
"url-form-hint": "Copiază și lipește un link de pe site-ul tău web preferat de rețete", "url-form-hint": "Copiază și lipește un link de pe site-ul tău web preferat de rețete",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Copiați și lipiți adresa URL sursă a datelor dvs. (opțional)",
"view-scraped-data": "Vezi datele colectate", "view-scraped-data": "Vezi datele colectate",
"trim-whitespace-description": "Elimină spațiile albe de la început și sfârșit precum și liniile goale", "trim-whitespace-description": "Elimină spațiile albe de la început și sfârșit precum și liniile goale",
"trim-prefix-description": "Elimină primul caracter din fiecare linie", "trim-prefix-description": "Elimină primul caracter din fiecare linie",
@@ -637,9 +641,10 @@
"scrape-recipe-suggest-bulk-importer": "Încearcă importatorul în bulk", "scrape-recipe-suggest-bulk-importer": "Încearcă importatorul în bulk",
"scrape-recipe-have-raw-html-or-json-data": "Ai date de tip HTML sau JSON?", "scrape-recipe-have-raw-html-or-json-data": "Ai date de tip HTML sau JSON?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Poți importa datele direct", "scrape-recipe-you-can-import-from-raw-data-directly": "Poți importa datele direct",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Site-ul este blocat?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Încercați în schimb să importați HTML-ul brut.",
"import-original-keywords-as-tags": "Importă cuvintele cheie originale ca tag-uri", "import-original-keywords-as-tags": "Importă cuvintele cheie originale ca tag-uri",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Rămâi în modul Editare", "stay-in-edit-mode": "Rămâi în modul Editare",
"parse-recipe-ingredients-after-import": "Analizează ingredientele rețetei după import", "parse-recipe-ingredients-after-import": "Analizează ingredientele rețetei după import",
"import-from-zip": "Importă din zip", "import-from-zip": "Importă din zip",
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "Acest Câmp Este Obligatoriu",
"invalid-email": "Email Must Be Valid", "invalid-email": "E-mailul Trebuie Să Fie Valid",
"invalid-url": "Must Be A Valid URL", "invalid-url": "Trebuie Să Fie Un URL Valid",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "Niciun Spațiu Alb Permis",
"min-length": "Must Be At Least {min} Characters", "min-length": "Trebuie Să Aibă Cel Puțin {min} Caractere",
"max-length": "Must Be At Most {max} Characters" "max-length": "Trebuie Să Aibă Cel Mult {max} Caractere"
} }
} }

View File

@@ -212,6 +212,8 @@
"upload-file": "Загрузить файл", "upload-file": "Загрузить файл",
"created-on-date": "Создано: {0}", "created-on-date": "Создано: {0}",
"unsaved-changes": "У вас есть несохраненные изменения. Вы хотите сохранить их перед выходом?", "unsaved-changes": "У вас есть несохраненные изменения. Вы хотите сохранить их перед выходом?",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Не удалось скопировать текст.", "clipboard-copy-failure": "Не удалось скопировать текст.",
"confirm-delete-generic-items": "Вы уверены, что хотите удалить следующие элементы?", "confirm-delete-generic-items": "Вы уверены, что хотите удалить следующие элементы?",
"organizers": "Органайзеры", "organizers": "Органайзеры",
@@ -367,7 +369,9 @@
"recipe-rules": "Правила рецептов", "recipe-rules": "Правила рецептов",
"applies-to-all-days": "Применяется к всем дням", "applies-to-all-days": "Применяется к всем дням",
"applies-on-days": "Применяется по {0}", "applies-on-days": "Применяется по {0}",
"meal-plan-settings": "Настройки плана питания" "meal-plan-settings": "Настройки плана питания",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Данные миграции удалены", "migration-data-removed": "Данные миграции удалены",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Сайт заблокирован?", "scrape-recipe-website-being-blocked": "Сайт заблокирован?",
"scrape-recipe-try-importing-raw-html-instead": "Попробуйте импортировать необработанный HTML файл.", "scrape-recipe-try-importing-raw-html-instead": "Попробуйте импортировать необработанный HTML файл.",
"import-original-keywords-as-tags": "Импортировать исходные ключевые слова как теги", "import-original-keywords-as-tags": "Импортировать исходные ключевые слова как теги",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Остаться в режиме редактирования", "stay-in-edit-mode": "Остаться в режиме редактирования",
"parse-recipe-ingredients-after-import": "Распознавание ингредиентов рецепта после импорта", "parse-recipe-ingredients-after-import": "Распознавание ингредиентов рецепта после импорта",
"import-from-zip": "Импорт из архива", "import-from-zip": "Импорт из архива",
@@ -1433,7 +1438,7 @@
"required": "This Field is Required", "required": "This Field is Required",
"invalid-email": "Email Must Be Valid", "invalid-email": "Email Must Be Valid",
"invalid-url": "Must Be A Valid URL", "invalid-url": "Must Be A Valid URL",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "Без пробелов",
"min-length": "Must Be At Least {min} Characters", "min-length": "Must Be At Least {min} Characters",
"max-length": "Must Be At Most {max} Characters" "max-length": "Must Be At Most {max} Characters"
} }

View File

@@ -6,7 +6,7 @@
"api-port": "API port", "api-port": "API port",
"application-mode": "Režim aplikácie", "application-mode": "Režim aplikácie",
"database-type": "Typ databázy", "database-type": "Typ databázy",
"database-url": "Link databázy", "database-url": "URL databázy",
"default-group": "Predvolená skupina", "default-group": "Predvolená skupina",
"default-household": "Predvolená domácnosť", "default-household": "Predvolená domácnosť",
"demo": "Demo", "demo": "Demo",
@@ -212,6 +212,8 @@
"upload-file": "Nahrať súbor", "upload-file": "Nahrať súbor",
"created-on-date": "Vytvorené: {0}", "created-on-date": "Vytvorené: {0}",
"unsaved-changes": "Posledne vykonané zmeny nie sú uložené. Želáte si ich uložiť alebo zrušiť?", "unsaved-changes": "Posledne vykonané zmeny nie sú uložené. Želáte si ich uložiť alebo zrušiť?",
"discard-changes": "Zahodiť zmeny",
"discard-changes-description": "Máte neuložené zmeny, naozaj ich chcete zahodiť?",
"clipboard-copy-failure": "Skopírovanie do schránky zlyhalo.", "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": "Organizéry", "organizers": "Organizéry",
@@ -342,9 +344,9 @@
"breakfast": "Raňajky", "breakfast": "Raňajky",
"lunch": "Obed", "lunch": "Obed",
"dinner": "Večera", "dinner": "Večera",
"snack": "Snack", "snack": "Pochutina",
"drink": "Drink", "drink": "Nápoj",
"dessert": "Dessert", "dessert": "Dezert",
"type-any": "Ľubovoľný", "type-any": "Ľubovoľný",
"day-any": "Ľubovoľný", "day-any": "Ľubovoľný",
"editor": "Editor", "editor": "Editor",
@@ -367,7 +369,9 @@
"recipe-rules": "Pravidlá receptov", "recipe-rules": "Pravidlá receptov",
"applies-to-all-days": "Platí pre všetky dni", "applies-to-all-days": "Platí pre všetky dni",
"applies-on-days": "Platí v {0}", "applies-on-days": "Platí v {0}",
"meal-plan-settings": "Nastavenia jedálnička" "meal-plan-settings": "Nastavenia jedálnička",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Prenesené dáta odstránené", "migration-data-removed": "Prenesené dáta odstránené",
@@ -403,7 +407,7 @@
"title": "Tandoor recepty" "title": "Tandoor recepty"
}, },
"cookn": { "cookn": {
"description-long": "Mealie can import recipes from DVO Cook'n X3. Export a cookbook or menu in the \"Cook'n\" format, rename the export extension to .zip, then upload the .zip below.", "description-long": "Mealie môže importovať recepty z DVO Cook'n X3. Exportujte kuchársku knihu alebo menu vo formáte „Cook'n“, premenujte exportnú príponu na .zip a potom nahrajte súbor .zip nižšie.",
"title": "DVO Cook'n X3" "title": "DVO Cook'n X3"
}, },
"recipe-data-migrations": "Migrácie dát receptov", "recipe-data-migrations": "Migrácie dát receptov",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Nahrať recept", "upload-a-recipe": "Nahrať recept",
"upload-individual-zip-file": "Nahrať súbor .zip exportovaný z inej Mealie inštalácie.", "upload-individual-zip-file": "Nahrať súbor .zip exportovaný z inej Mealie inštalácie.",
"url-form-hint": "Okopírujte a zložte odkaz z vašej obľúbenej webstránky", "url-form-hint": "Okopírujte a zložte odkaz z vašej obľúbenej webstránky",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Skopírujte a vložte zdrojovú URL adresu vašich údajov (voliteľné)",
"view-scraped-data": "Náhľad získaných údajov", "view-scraped-data": "Náhľad získaných údajov",
"trim-whitespace-description": "Vymazať medzery a prázdne riadky na začiatku a na konci", "trim-whitespace-description": "Vymazať medzery a prázdne riadky na začiatku a na konci",
"trim-prefix-description": "Vymazať prvé písmeno z každého riadku", "trim-prefix-description": "Vymazať prvé písmeno z každého riadku",
@@ -453,8 +457,8 @@
"import-by-url": "Importovať recept z URL", "import-by-url": "Importovať recept z URL",
"create-manually": "Vytvoriť recept manuálne", "create-manually": "Vytvoriť recept manuálne",
"make-recipe-image": "Nastaviť ako obrázok receptu", "make-recipe-image": "Nastaviť ako obrázok receptu",
"add-food": "Add Food", "add-food": "Pridať Jedlo",
"add-recipe": "Add Recipe" "add-recipe": "Pridať Recept"
}, },
"page": { "page": {
"404-page-not-found": "Chyba 404 - Stránka nenájdená", "404-page-not-found": "Chyba 404 - Stránka nenájdená",
@@ -521,9 +525,9 @@
"recipe-deleted": "Recept bol odstránený", "recipe-deleted": "Recept bol odstránený",
"recipe-image": "Obrázok receptu", "recipe-image": "Obrázok receptu",
"recipe-image-updated": "Obrázok receptu aktualizovaný", "recipe-image-updated": "Obrázok receptu aktualizovaný",
"delete-image": "Delete Recipe Image", "delete-image": "Zmazať obrázok receptu",
"delete-image-confirmation": "Are you sure you want to delete this recipe image?", "delete-image-confirmation": "Ste si istý že chcete zmazať tento obrázok receptu?",
"recipe-image-deleted": "Recipe image deleted", "recipe-image-deleted": "Obrázok receptu zmazaný",
"recipe-name": "Názov receptu", "recipe-name": "Názov receptu",
"recipe-settings": "Nastavenia receptu", "recipe-settings": "Nastavenia receptu",
"recipe-update-failed": "Aktualizácia receptu zlyhala", "recipe-update-failed": "Aktualizácia receptu zlyhala",
@@ -569,7 +573,7 @@
"choose-unit": "Vyberte jednotku", "choose-unit": "Vyberte jednotku",
"press-enter-to-create": "Stlačte Enter pre vytvorenie", "press-enter-to-create": "Stlačte Enter pre vytvorenie",
"choose-food": "Vyberte potravinu", "choose-food": "Vyberte potravinu",
"choose-recipe": "Choose Recipe", "choose-recipe": "Zvoľte Recept",
"notes": "Poznámky", "notes": "Poznámky",
"toggle-section": "Prepnúť sekciu", "toggle-section": "Prepnúť sekciu",
"see-original-text": "Pozrieť pôvodný text", "see-original-text": "Pozrieť pôvodný text",
@@ -597,7 +601,7 @@
"made-this": "Toto som uvaril", "made-this": "Toto som uvaril",
"how-did-it-turn-out": "Ako to dopadlo?", "how-did-it-turn-out": "Ako to dopadlo?",
"user-made-this": "{user} toto uvaril(a)", "user-made-this": "{user} toto uvaril(a)",
"made-for-recipe": "Made for {recipe}", "made-for-recipe": "Vytvorené pre {recipe}",
"added-to-timeline": "Pridané na časovú os", "added-to-timeline": "Pridané na časovú os",
"failed-to-add-to-timeline": "Pridanie na časovú os skončilo chybou", "failed-to-add-to-timeline": "Pridanie na časovú os skončilo chybou",
"failed-to-update-recipe": "Recept sa nepodarilo aktualizovať", "failed-to-update-recipe": "Recept sa nepodarilo aktualizovať",
@@ -637,9 +641,10 @@
"scrape-recipe-suggest-bulk-importer": "Vyskúšajte hromadný importér", "scrape-recipe-suggest-bulk-importer": "Vyskúšajte hromadný importér",
"scrape-recipe-have-raw-html-or-json-data": "Máte surové údaje HTML alebo JSON?", "scrape-recipe-have-raw-html-or-json-data": "Máte surové údaje HTML alebo JSON?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Môžete importovať priamo nespracované údaje", "scrape-recipe-you-can-import-from-raw-data-directly": "Môžete importovať priamo nespracované údaje",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Webstránka je blokovaná?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Skúste miesto toho naimportovať čisté HTML.",
"import-original-keywords-as-tags": "Importovať pôvodné kľúčové slová ako štítky", "import-original-keywords-as-tags": "Importovať pôvodné kľúčové slová ako štítky",
"import-original-categories": "Importovať pôvodné kategórie",
"stay-in-edit-mode": "Zostať v režime editovania", "stay-in-edit-mode": "Zostať v režime editovania",
"parse-recipe-ingredients-after-import": "Analyzovať ingrediencie po importe", "parse-recipe-ingredients-after-import": "Analyzovať ingrediencie po importe",
"import-from-zip": "Importovať zo Zip-súboru", "import-from-zip": "Importovať zo Zip-súboru",
@@ -702,9 +707,9 @@
"upload-more-images": "Nahrať ďalšie obrázky", "upload-more-images": "Nahrať ďalšie obrázky",
"set-as-cover-image": "Nastaviť ako titulný obrázok receptu", "set-as-cover-image": "Nastaviť ako titulný obrázok receptu",
"cover-image": "Titulný obrázok", "cover-image": "Titulný obrázok",
"include-linked-recipes": "Include Linked Recipes", "include-linked-recipes": "Zahrnúť prepojené Recepty",
"include-linked-recipe-ingredients": "Include Linked Recipe Ingredients", "include-linked-recipe-ingredients": "Zahrnúť Prísady prepojených receptov",
"toggle-recipe": "Toggle Recipe" "toggle-recipe": "Prepnúť recept"
}, },
"recipe-finder": { "recipe-finder": {
"recipe-finder": "Hľadač receptov", "recipe-finder": "Hľadač receptov",
@@ -742,7 +747,7 @@
"advanced": "Rozšírené", "advanced": "Rozšírené",
"auto-search": "Automatické vyhľadávanie", "auto-search": "Automatické vyhľadávanie",
"no-results": "Nenašli sa žiadne výsledky", "no-results": "Nenašli sa žiadne výsledky",
"type-to-search": "Type to search..." "type-to-search": "Napíšte pre vyhľadanie..."
}, },
"settings": { "settings": {
"add-a-new-theme": "Pridať nový motív", "add-a-new-theme": "Pridať nový motív",
@@ -1081,8 +1086,8 @@
"forgot-password": "Zabudnuté heslo", "forgot-password": "Zabudnuté heslo",
"forgot-password-text": "Prosím zadajte svoju e-mailovú adresu a my vám zašleme odkaz, ktorý vám umožní heslo obnoviť.", "forgot-password-text": "Prosím zadajte svoju e-mailovú adresu a my vám zašleme odkaz, ktorý vám umožní heslo obnoviť.",
"changes-reflected-immediately": "Zmeny týkajúce sa tohto používateľa budú vykonané okamžite.", "changes-reflected-immediately": "Zmeny týkajúce sa tohto používateľa budú vykonané okamžite.",
"default-activity": "Default Activity", "default-activity": "Predvolená aktivita",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device" "default-activity-hint": "Vyberte na ktorú štránku chcete byť nasmerovaný po prihlásení z tohto zariadenia"
}, },
"language-dialog": { "language-dialog": {
"translated": "preložené", "translated": "preložené",
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "Toto pole je požadované",
"invalid-email": "Email Must Be Valid", "invalid-email": "Email musí byť platný",
"invalid-url": "Must Be A Valid URL", "invalid-url": "Musí byť platná URL",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "Prázdne znaky nepovolené",
"min-length": "Must Be At Least {min} Characters", "min-length": "Musí mať aspoň {min} znakov",
"max-length": "Must Be At Most {max} Characters" "max-length": "Musí mať najviac {max} znakov"
} }
} }

View File

@@ -212,6 +212,8 @@
"upload-file": "Naloži datoteko", "upload-file": "Naloži datoteko",
"created-on-date": "Ustvarjeno dne: {0}", "created-on-date": "Ustvarjeno dne: {0}",
"unsaved-changes": "Imate neohranjene spremembe. Ali želite shraniti pred odhodom? V redu, če želite shraniti, Prekliči, če želite zavreči spremembe.", "unsaved-changes": "Imate neohranjene spremembe. Ali želite shraniti pred odhodom? V redu, če želite shraniti, Prekliči, če želite zavreči spremembe.",
"discard-changes": "Zavrzi spremembe",
"discard-changes-description": "Imate neshranjene spremembe. Ste prepričani, da jih želite zavreči?",
"clipboard-copy-failure": "Kopiranje na odložišče ni bilo uspešno.", "clipboard-copy-failure": "Kopiranje na odložišče ni bilo uspešno.",
"confirm-delete-generic-items": "Ali ste prepričani, da želite izbrisati izbrane elemente?", "confirm-delete-generic-items": "Ali ste prepričani, da želite izbrisati izbrane elemente?",
"organizers": "Organizatorji", "organizers": "Organizatorji",
@@ -367,7 +369,9 @@
"recipe-rules": "Pravila za recepte", "recipe-rules": "Pravila za recepte",
"applies-to-all-days": "Velja za vse dneve", "applies-to-all-days": "Velja za vse dneve",
"applies-on-days": "Velja za {0}", "applies-on-days": "Velja za {0}",
"meal-plan-settings": "Nastavitve jedilnika" "meal-plan-settings": "Nastavitve jedilnika",
"add-all-to-list": "Dodaj vse na seznam",
"add-day-to-list": "Dodaj dan na seznam"
}, },
"migration": { "migration": {
"migration-data-removed": "Migrirani podatki so odstranjeni", "migration-data-removed": "Migrirani podatki so odstranjeni",
@@ -494,7 +498,7 @@
"edit-scale": "Uredi stran", "edit-scale": "Uredi stran",
"fat-content": "Maščoba", "fat-content": "Maščoba",
"fiber-content": "Vlakna", "fiber-content": "Vlakna",
"grams": "grami", "grams": "gramov",
"ingredient": "Sestavina", "ingredient": "Sestavina",
"ingredients": "Sestavine", "ingredients": "Sestavine",
"insert-ingredient": "Dodaj sestavino", "insert-ingredient": "Dodaj sestavino",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Je spletna stran blokirana?", "scrape-recipe-website-being-blocked": "Je spletna stran blokirana?",
"scrape-recipe-try-importing-raw-html-instead": "Poskusite namesto tega uvoziti surovi HTML.", "scrape-recipe-try-importing-raw-html-instead": "Poskusite namesto tega uvoziti surovi HTML.",
"import-original-keywords-as-tags": "Uvozi izvorne ključne besede kot značke", "import-original-keywords-as-tags": "Uvozi izvorne ključne besede kot značke",
"import-original-categories": "Uvozi izvirne kategorije",
"stay-in-edit-mode": "Urejaj naprej", "stay-in-edit-mode": "Urejaj naprej",
"parse-recipe-ingredients-after-import": "Razčlenitev sestavin recepta po uvozu", "parse-recipe-ingredients-after-import": "Razčlenitev sestavin recepta po uvozu",
"import-from-zip": "Uvozi z Zip", "import-from-zip": "Uvozi z Zip",

View File

@@ -212,6 +212,8 @@
"upload-file": "Учитај датотеку", "upload-file": "Учитај датотеку",
"created-on-date": "Крерирано: {0}", "created-on-date": "Крерирано: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.", "unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Failed to copy to the clipboard.", "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", "organizers": "Organizers",
@@ -367,7 +369,9 @@
"recipe-rules": "Правила за рецепт", "recipe-rules": "Правила за рецепт",
"applies-to-all-days": "Applies to all days", "applies-to-all-days": "Applies to all days",
"applies-on-days": "Applies on {0}s", "applies-on-days": "Applies on {0}s",
"meal-plan-settings": "Meal Plan Settings" "meal-plan-settings": "Meal Plan Settings",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Migration data removed", "migration-data-removed": "Migration data removed",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "Увези оригиналне кључне речи као ознаке", "import-original-keywords-as-tags": "Увези оригиналне кључне речи као ознаке",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Stay in Edit mode", "stay-in-edit-mode": "Stay in Edit mode",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"import-from-zip": "Увези из Zip архиве", "import-from-zip": "Увези из Zip архиве",

View File

@@ -62,7 +62,7 @@
"notification": "Notifiering", "notification": "Notifiering",
"refresh": "Uppdatera", "refresh": "Uppdatera",
"scheduled": "Schemalagd", "scheduled": "Schemalagd",
"something-went-wrong": "Någonting gick fel", "something-went-wrong": "Någonting gick fel!",
"subscribed-events": "Prenumererade händelser", "subscribed-events": "Prenumererade händelser",
"test-message-sent": "Testmeddelande Skickat", "test-message-sent": "Testmeddelande Skickat",
"message-sent": "Meddelandet skickat", "message-sent": "Meddelandet skickat",
@@ -212,6 +212,8 @@
"upload-file": "Ladda upp fil", "upload-file": "Ladda upp fil",
"created-on-date": "Skapad {0}", "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.", "unsaved-changes": "Du har osparade ändringar. Vill du spara innan du lämnar? Tryck Okej att spara, Avbryt för att ignorera ändringar.",
"discard-changes": "Överge ändringar",
"discard-changes-description": "Du har osparade ändringar. Är du säker på att du vill överge dem?",
"clipboard-copy-failure": "Det gick inte att kopiera till urklipp.", "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": "Organisatörer", "organizers": "Organisatörer",
@@ -367,7 +369,9 @@
"recipe-rules": "Receptregler", "recipe-rules": "Receptregler",
"applies-to-all-days": "Gäller för alla dagar", "applies-to-all-days": "Gäller för alla dagar",
"applies-on-days": "Gäller på {0}s", "applies-on-days": "Gäller på {0}s",
"meal-plan-settings": "Inställningar för måltidsplanering" "meal-plan-settings": "Inställningar för måltidsplanering",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Importerad data borttagen", "migration-data-removed": "Importerad data borttagen",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Ladda upp ett recept", "upload-a-recipe": "Ladda upp ett recept",
"upload-individual-zip-file": "Ladda upp en individuell .zip-fil som exporteras från en annan Mealie-instans.", "upload-individual-zip-file": "Ladda upp en individuell .zip-fil som exporteras från en annan Mealie-instans.",
"url-form-hint": "Kopiera och klistra in en länk från din favorit recept webbplats", "url-form-hint": "Kopiera och klistra in en länk från din favorit recept webbplats",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Kopiera och klistra in länk för din data (frivilligt)",
"view-scraped-data": "Visa skrapade data", "view-scraped-data": "Visa skrapade data",
"trim-whitespace-description": "Ta bort inledande och avslutande blanksteg samt tomma rader", "trim-whitespace-description": "Ta bort inledande och avslutande blanksteg samt tomma rader",
"trim-prefix-description": "Ta bort första tecknet från varje rad", "trim-prefix-description": "Ta bort första tecknet från varje rad",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Är websidan blockerad?", "scrape-recipe-website-being-blocked": "Är websidan blockerad?",
"scrape-recipe-try-importing-raw-html-instead": "Prova att importera HTML istället.", "scrape-recipe-try-importing-raw-html-instead": "Prova att importera HTML istället.",
"import-original-keywords-as-tags": "Importera ursprungliga sökord som taggar", "import-original-keywords-as-tags": "Importera ursprungliga sökord som taggar",
"import-original-categories": "Importera ursprungliga kategorier",
"stay-in-edit-mode": "Stanna kvar i redigeringsläge", "stay-in-edit-mode": "Stanna kvar i redigeringsläge",
"parse-recipe-ingredients-after-import": "Tolka receptingredienser efter import", "parse-recipe-ingredients-after-import": "Tolka receptingredienser efter import",
"import-from-zip": "Importera från zip", "import-from-zip": "Importera från zip",
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "Detta Fält Krävs",
"invalid-email": "Email Must Be Valid", "invalid-email": "E-post Måste Vara Giltig",
"invalid-url": "Must Be A Valid URL", "invalid-url": "Måste var en giltig länk",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "Ingen blanksteg tillåten",
"min-length": "Must Be At Least {min} Characters", "min-length": "Måste vara minst {min} tecken",
"max-length": "Must Be At Most {max} Characters" "max-length": "Måste vara som mest {max} tecken"
} }
} }

View File

@@ -21,7 +21,7 @@
"portfolio": "Portföy", "portfolio": "Portföy",
"production": "Üretim", "production": "Üretim",
"support": "Destek", "support": "Destek",
"version": "Versiyon", "version": "Sürüm",
"unknown-version": "bilinmeyen", "unknown-version": "bilinmeyen",
"sponsor": "Sponsor" "sponsor": "Sponsor"
}, },
@@ -29,7 +29,7 @@
"assets": "Malzemeler", "assets": "Malzemeler",
"code": "Kod", "code": "Kod",
"file": "Dosya", "file": "Dosya",
"image": "Resim", "image": "Görüntü",
"new-asset": "Yeni Malzeme", "new-asset": "Yeni Malzeme",
"pdf": "PDF", "pdf": "PDF",
"recipe": "Tarif", "recipe": "Tarif",
@@ -69,7 +69,7 @@
"new-notification": "Yeni bildirim", "new-notification": "Yeni bildirim",
"event-notifiers": "Etkinlik Bildirimleri", "event-notifiers": "Etkinlik Bildirimleri",
"apprise-url-skipped-if-blank": "Apprise URL'si (boşsa geçilir)", "apprise-url-skipped-if-blank": "Apprise URL'si (boşsa geçilir)",
"apprise-url-is-left-intentionally-blank": "Since Apprise URLs typically contain sensitive information, this field is left intentionally blank while editing. If you wish to update the URL, please enter the new one here, otherwise leave it blank to keep the current URL.", "apprise-url-is-left-intentionally-blank": "Apprise URL'leri genellikle hassas bilgiler içerdiğinden, bu alan düzenleme sırasında kasıtlı olarak boş bırakılır. URL'yi güncellemek isterseniz, lütfen yeni URL'yi buraya girin, aksi takdirde mevcut URL'yi korumak için boş bırakın.",
"enable-notifier": "Bildiriciyi Etkinleştir", "enable-notifier": "Bildiriciyi Etkinleştir",
"what-events": "Bu bildirimci hangi olaylara abone olmalıdır?", "what-events": "Bu bildirimci hangi olaylara abone olmalıdır?",
"user-events": "Kullanıcı Etkinlikleri", "user-events": "Kullanıcı Etkinlikleri",
@@ -109,7 +109,7 @@
"field-required": "Zorunlu Alan", "field-required": "Zorunlu Alan",
"file-folder-not-found": "Dosya/dizin bulunamadı", "file-folder-not-found": "Dosya/dizin bulunamadı",
"file-uploaded": "Dosya yüklendi", "file-uploaded": "Dosya yüklendi",
"filter": "Filtre", "filter": "Süzgeç",
"friday": "Cuma", "friday": "Cuma",
"general": "Genel", "general": "Genel",
"get": "Al", "get": "Al",
@@ -189,7 +189,7 @@
"none": "Yok", "none": "Yok",
"run": "Çalıştır", "run": "Çalıştır",
"menu": "Menü", "menu": "Menü",
"a-name-is-required": "Bir İsim Gerekli", "a-name-is-required": "Bir ad gerekli",
"delete-with-name": "Sil {name}", "delete-with-name": "Sil {name}",
"confirm-delete-generic-with-name": "{name}'i silmek istediğine emin misin?", "confirm-delete-generic-with-name": "{name}'i silmek istediğine emin misin?",
"confirm-delete-own-admin-account": "Lütfen kendi yönetici hesabınızı silmeye çalıştığınızı unutmayın! Bu işlem geri alınamaz ve hesabınızı kalıcı olarak siler.", "confirm-delete-own-admin-account": "Lütfen kendi yönetici hesabınızı silmeye çalıştığınızı unutmayın! Bu işlem geri alınamaz ve hesabınızı kalıcı olarak siler.",
@@ -212,6 +212,8 @@
"upload-file": "Dosya Yükle", "upload-file": "Dosya Yükle",
"created-on-date": "{0} tarihinde oluşturuldu", "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.", "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.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Panoya kopyalanamadı.", "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", "organizers": "Organizatörler",
@@ -342,9 +344,9 @@
"breakfast": "Kahvaltı", "breakfast": "Kahvaltı",
"lunch": "Öğle Yemeği", "lunch": "Öğle Yemeği",
"dinner": "Akşam Yemeği", "dinner": "Akşam Yemeği",
"snack": "Snack", "snack": "Atıştırmalık",
"drink": "Drink", "drink": "İçecek",
"dessert": "Dessert", "dessert": "Tatlı",
"type-any": "Herhangi", "type-any": "Herhangi",
"day-any": "Herhangi", "day-any": "Herhangi",
"editor": "Editör", "editor": "Editör",
@@ -367,7 +369,9 @@
"recipe-rules": "Tarif Kuralları", "recipe-rules": "Tarif Kuralları",
"applies-to-all-days": "Tüm günler için geçerlidir", "applies-to-all-days": "Tüm günler için geçerlidir",
"applies-on-days": "{0} günlerine geçerlidir", "applies-on-days": "{0} günlerine geçerlidir",
"meal-plan-settings": "Öğün Planı Ayarları" "meal-plan-settings": "Öğün Planı Ayarları",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Taşıma verileri kaldırıldı", "migration-data-removed": "Taşıma verileri kaldırıldı",
@@ -453,8 +457,8 @@
"import-by-url": "Tarifi URL'den içe aktar", "import-by-url": "Tarifi URL'den içe aktar",
"create-manually": "Manuel olarak tarif oluştur", "create-manually": "Manuel olarak tarif oluştur",
"make-recipe-image": "Bunu tarif resmi yap", "make-recipe-image": "Bunu tarif resmi yap",
"add-food": "Add Food", "add-food": "Yiyecek ekle",
"add-recipe": "Add Recipe" "add-recipe": "Tarif ekle"
}, },
"page": { "page": {
"404-page-not-found": "404 Sayfa bulunamadı", "404-page-not-found": "404 Sayfa bulunamadı",
@@ -484,7 +488,7 @@
"comment": "Yorum", "comment": "Yorum",
"comments": "Yorumlar", "comments": "Yorumlar",
"delete-confirmation": "Bu tarifi silmek istediğinizden emin misiniz?", "delete-confirmation": "Bu tarifi silmek istediğinizden emin misiniz?",
"admin-delete-confirmation": "You're about to delete a recipe that isn't yours using admin permissions. Are you sure?", "admin-delete-confirmation": "Size ait olmayan bir tarifi yönetici izinleriyle silmek üzeresiniz. Emin misiniz?",
"delete-recipe": "Tarifi Sil", "delete-recipe": "Tarifi Sil",
"description": "Açıklama", "description": "Açıklama",
"disable-amount": "Malzeme Miktarlarını Devre Dışı Bırak", "disable-amount": "Malzeme Miktarlarını Devre Dışı Bırak",
@@ -521,9 +525,9 @@
"recipe-deleted": "Tarif silindi", "recipe-deleted": "Tarif silindi",
"recipe-image": "Tarif Resmi", "recipe-image": "Tarif Resmi",
"recipe-image-updated": "Tarif resmi güncellendi", "recipe-image-updated": "Tarif resmi güncellendi",
"delete-image": "Delete Recipe Image", "delete-image": "Tarif Resmini Sil",
"delete-image-confirmation": "Are you sure you want to delete this recipe image?", "delete-image-confirmation": "Bu tarif görselini silmek istediğinizden emin misiniz?",
"recipe-image-deleted": "Recipe image deleted", "recipe-image-deleted": "Tarif Resmi Silindi",
"recipe-name": "Tarif Adı", "recipe-name": "Tarif Adı",
"recipe-settings": "Tarif Ayarları", "recipe-settings": "Tarif Ayarları",
"recipe-update-failed": "Tarifi güncellerken hata oluştu", "recipe-update-failed": "Tarifi güncellerken hata oluştu",
@@ -569,13 +573,13 @@
"choose-unit": "Birim Seçin", "choose-unit": "Birim Seçin",
"press-enter-to-create": "Oluşturmak İçin Enter'a Basın", "press-enter-to-create": "Oluşturmak İçin Enter'a Basın",
"choose-food": "Yemek Seç", "choose-food": "Yemek Seç",
"choose-recipe": "Choose Recipe", "choose-recipe": "Tarif Seç",
"notes": "Notlar", "notes": "Notlar",
"toggle-section": "Bölümü Görünürlüğünü Değiştir", "toggle-section": "Bölümü Görünürlüğünü Değiştir",
"see-original-text": "Orijinal Metni Göster", "see-original-text": "Orijinal Metni Göster",
"original-text-with-value": "Orijinal Metin: {originalText}", "original-text-with-value": "Orijinal Metin: {originalText}",
"ingredient-linker": "Malzeme Bağlayıcı", "ingredient-linker": "Malzeme Bağlayıcı",
"unlinked": "Not linked yet", "unlinked": "Henüz bağlanmadı",
"linked-to-other-step": "Başka bir adıma bağlı", "linked-to-other-step": "Başka bir adıma bağlı",
"auto": "Otomatik", "auto": "Otomatik",
"cook-mode": "Pişirme Modu", "cook-mode": "Pişirme Modu",
@@ -591,7 +595,7 @@
"edit-timeline-event": "Zaman Çizelgesi Etkinliğini Düzenle", "edit-timeline-event": "Zaman Çizelgesi Etkinliğini Düzenle",
"timeline": "Zaman çizelgesi", "timeline": "Zaman çizelgesi",
"timeline-is-empty": "Zaman çizelgesinde henüz bir şey yok. Bu tarifi yapmayı deneyin!", "timeline-is-empty": "Zaman çizelgesinde henüz bir şey yok. Bu tarifi yapmayı deneyin!",
"timeline-no-events-found-try-adjusting-filters": "Hiçbir etkinlik bulunamadı. Arama filtrelerinizi ayarlamayı deneyin.", "timeline-no-events-found-try-adjusting-filters": "Hiçbir etkinlik bulunamadı. Arama süzgeçlerinizi ayarlamayı deneyin.",
"group-global-timeline": "{groupName} Küresel Zaman Çizelgesi", "group-global-timeline": "{groupName} Küresel Zaman Çizelgesi",
"open-timeline": "Zaman Çizelgesini Aç", "open-timeline": "Zaman Çizelgesini Aç",
"made-this": "Bunu ben yaptım", "made-this": "Bunu ben yaptım",
@@ -600,12 +604,12 @@
"made-for-recipe": "Made for {recipe}", "made-for-recipe": "Made for {recipe}",
"added-to-timeline": "Added to timeline", "added-to-timeline": "Added to timeline",
"failed-to-add-to-timeline": "Failed to add to timeline", "failed-to-add-to-timeline": "Failed to add to timeline",
"failed-to-update-recipe": "Failed to update recipe", "failed-to-update-recipe": "Tarif yenileme başarısız",
"added-to-timeline-but-failed-to-add-image": "Added to timeline, but failed to add image", "added-to-timeline-but-failed-to-add-image": "Added to timeline, but failed to add image",
"api-extras-description": "Tarif ekstraları Mealie API'nin önemli bir özelliğidir. Üçüncü taraf uygulamalardan referans almak üzere bir tarif içinde özel JSON anahtar/değer çiftleri oluşturmanıza olanak tanır. Bu tuşları, örneğin otomasyonları tetiklemek veya istediğiniz cihaza iletilecek özel mesajları bilgi sağlamak için kullanabilirsiniz.", "api-extras-description": "Tarif ekstraları Mealie API'nin önemli bir özelliğidir. Üçüncü taraf uygulamalardan referans almak üzere bir tarif içinde özel JSON anahtar/değer çiftleri oluşturmanıza olanak tanır. Bu tuşları, örneğin otomasyonları tetiklemek veya istediğiniz cihaza iletilecek özel mesajları bilgi sağlamak için kullanabilirsiniz.",
"message-key": "İleti Anahtarı", "message-key": "İleti Anahtarı",
"parse": "Ayrıştırma", "parse": "Ayrıştırma",
"ingredients-not-parsed-description": "It looks like your ingredients aren't parsed yet. Click the \"{parse}\" button below to parse your ingredients into structured foods.", "ingredients-not-parsed-description": "Görünüşe göre içerikleriniz henüz analiz edilmemiş. Aşağıdaki \"{parse}\" butonuna tıklayarak içeriklerinizi yapılandırılmış yiyeceklere ayırabilirsiniz.",
"attach-images-hint": "Düzenleyiciye sürükleyip bırakarak görselleri ekleyin", "attach-images-hint": "Düzenleyiciye sürükleyip bırakarak görselleri ekleyin",
"drop-image": "Yüklenecek resimi sürükleyip bırakın", "drop-image": "Yüklenecek resimi sürükleyip bırakın",
"enable-ingredient-amounts-to-use-this-feature": "Bu özelliği kullanabilmek için malzeme miktarlarını etkinleştirin", "enable-ingredient-amounts-to-use-this-feature": "Bu özelliği kullanabilmek için malzeme miktarlarını etkinleştirin",
@@ -623,13 +627,13 @@
"create-recipe-from-an-image": "Görüntüden yemek tarifi oluştur", "create-recipe-from-an-image": "Görüntüden yemek tarifi oluştur",
"create-recipe-from-an-image-description": "Bir görsel yükleyerek yemek tarifi oluşturun. Mealie, yapay zekâ kullanarak görseldeki bilgileri çekip yemek tarifini oluşturmaya çalışacaktır.", "create-recipe-from-an-image-description": "Bir görsel yükleyerek yemek tarifi oluşturun. Mealie, yapay zekâ kullanarak görseldeki bilgileri çekip yemek tarifini oluşturmaya çalışacaktır.",
"crop-and-rotate-the-image": "Resmi sadece yazılar gözükecek şekilde kesin ve döndürün, ayrıca doğru yönde durduğuna emin olun.", "crop-and-rotate-the-image": "Resmi sadece yazılar gözükecek şekilde kesin ve döndürün, ayrıca doğru yönde durduğuna emin olun.",
"create-from-images": "Create from Images", "create-from-images": "Resimden Oluştur",
"should-translate-description": "Tarifi kendi dilime çevir", "should-translate-description": "Tarifi kendi dilime çevir",
"please-wait-image-procesing": "Görsel işlenirken lütfen bekleyin. Bu, biraz zaman alabilir.", "please-wait-image-procesing": "Görsel işlenirken lütfen bekleyin. Bu, biraz zaman alabilir.",
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.", "please-wait-images-processing": "Lütfen bekleyin, görüntüler işleniyor. Bu biraz zaman alabilir.",
"bulk-url-import": "Toplu URL İçe Aktarma", "bulk-url-import": "Toplu URL İçe Aktarma",
"debug-scraper": "Veri Kazıma Hata Ayıklayıcı", "debug-scraper": "Veri Kazıma Hata Ayıklayıcı",
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "İsim vererek bir tarif oluşturun. Tüm tariflerin benzersiz isimleri olması gerekiyor.", "create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Oluşturmak için tarifi adlandırın. Tüm tariflerin benzersiz adları olmalı.",
"new-recipe-names-must-be-unique": "Yeni tarif ismi benzersiz olmalı", "new-recipe-names-must-be-unique": "Yeni tarif ismi benzersiz olmalı",
"scrape-recipe": "Tarifi Kazı", "scrape-recipe": "Tarifi Kazı",
"scrape-recipe-description": "Url'den bir tarif kazıyın. Kazımak istediğiniz sitenin url'sini verin ve Mealie, tarifi o siteden alıp koleksiyonunuza eklemeye çalışacaktır.", "scrape-recipe-description": "Url'den bir tarif kazıyın. Kazımak istediğiniz sitenin url'sini verin ve Mealie, tarifi o siteden alıp koleksiyonunuza eklemeye çalışacaktır.",
@@ -637,16 +641,17 @@
"scrape-recipe-suggest-bulk-importer": "Toplu ithalatçıyı deneyin", "scrape-recipe-suggest-bulk-importer": "Toplu ithalatçıyı deneyin",
"scrape-recipe-have-raw-html-or-json-data": "Ham HTML veya JSON verileriniz mi var?", "scrape-recipe-have-raw-html-or-json-data": "Ham HTML veya JSON verileriniz mi var?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Ham veriden doğrudan içe aktarabilirsiniz", "scrape-recipe-you-can-import-from-raw-data-directly": "Ham veriden doğrudan içe aktarabilirsiniz",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Web sitesi engelleniyor?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "Orijinal anahtar kelimeleri etiket olarak içe aktar", "import-original-keywords-as-tags": "Orijinal anahtar kelimeleri etiket olarak içe aktar",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Düzenleme modunda kalın", "stay-in-edit-mode": "Düzenleme modunda kalın",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"import-from-zip": "Zip'ten içeri aktar", "import-from-zip": "Zip'ten içeri aktar",
"import-from-zip-description": "Başka bir Mealie örneğinden dışa aktarılmış tek bir tarifi içe aktarın.", "import-from-zip-description": "Başka bir Mealie örneğinden dışa aktarılmış tek bir tarifi içe aktarın.",
"import-from-html-or-json": "HTML veya JSON veriden içe aktar", "import-from-html-or-json": "HTML veya JSON veriden içe aktar",
"import-from-html-or-json-description": "Ham HTML veya JSON'dan tek bir tarif içe aktar. Bu, Mealie'nin normalde veri çekemediği bir siteden ya da başka bir dış kaynaktan bir tarifin varsa faydalıdır.", "import-from-html-or-json-description": "Ham HTML veya JSON'dan tek bir tarif içe aktar. Bu, Mealie'nin normalde veri çekemediği bir siteden ya da başka bir dış kaynaktan bir tarifin varsa faydalıdır.",
"json-import-format-description-colon": "To import via JSON, it must be in valid format:", "json-import-format-description-colon": "JSON'dan içe aktarmak için, geçerli formatta olmalıdır:",
"json-editor": "JSON Editör", "json-editor": "JSON Editör",
"zip-files-must-have-been-exported-from-mealie": ".zip dosyası Mealie'den dışa aktarılmış olmalıdır", "zip-files-must-have-been-exported-from-mealie": ".zip dosyası Mealie'den dışa aktarılmış olmalıdır",
"create-a-recipe-by-uploading-a-scan": "Bir tarama yükleyerek tarif oluşturun.", "create-a-recipe-by-uploading-a-scan": "Bir tarama yükleyerek tarif oluşturun.",
@@ -690,16 +695,16 @@
"no-food": "Gıda yok", "no-food": "Gıda yok",
"review-parsed-ingredients": "Review parsed ingredients", "review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score", "confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.", "ingredient-parser-description": "İçerikleriniz başarıyla ayrıştırıldı. Emin olmadığımız içerikleri lütfen gözden geçirin.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.", "ingredient-parser-final-review-description": "Tüm malzemeler incelendikten sonra, tarifinize değişiklikleri uygulamadan önce bir kez daha tüm malzemeleri inceleme şansınız olur.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}", "add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item" "delete-item": "Ögeyi sil"
}, },
"reset-servings-count": "Reset Servings Count", "reset-servings-count": "Reset Servings Count",
"not-linked-ingredients": "Ek Malzemeler", "not-linked-ingredients": "Ek Malzemeler",
"upload-another-image": "Upload another image", "upload-another-image": "Başka görsel yükle",
"upload-images": "Upload images", "upload-images": "Görsel yükle",
"upload-more-images": "Upload more images", "upload-more-images": "Daha fazla görsel yükle",
"set-as-cover-image": "Set as recipe cover image", "set-as-cover-image": "Set as recipe cover image",
"cover-image": "Cover image", "cover-image": "Cover image",
"include-linked-recipes": "Include Linked Recipes", "include-linked-recipes": "Include Linked Recipes",
@@ -708,18 +713,18 @@
}, },
"recipe-finder": { "recipe-finder": {
"recipe-finder": "Tarif Bulucu", "recipe-finder": "Tarif Bulucu",
"recipe-finder-description": "Elinizdeki malzemelere göre tarif arayın. Ayrıca sahip olduğunuz araçlara göre filtreleme yapabilir ve eksik malzeme veya araç sayısı için bir üst sınır belirleyebilirsiniz.", "recipe-finder-description": "Elinizdeki malzemelere göre tarif arayın. Ayrıca sahip olduğunuz araçlara göre süzme yapabilir ve eksik malzeme veya araç sayısı için bir üst sınır belirleyebilirsiniz.",
"selected-ingredients": "Seçilen malzemeler", "selected-ingredients": "Seçilen malzemeler",
"no-ingredients-selected": "Hiçbir malzeme seçilmedi", "no-ingredients-selected": "Hiçbir malzeme seçilmedi",
"missing": "Eksik", "missing": "Eksik",
"no-recipes-found": "Herhangi bir tarif bulunamadı", "no-recipes-found": "Herhangi bir tarif bulunamadı",
"no-recipes-found-description": "Aramanıza daha fazla malzeme eklemeyi ya da filtrelerinizi ayarlamayı deneyin", "no-recipes-found-description": "Aramanıza daha fazla malzeme eklemeyi ya da süzgeçlerinizi ayarlamayı deneyin",
"include-ingredients-on-hand": "Elindeki Malzemeleri Dahil Et", "include-ingredients-on-hand": "Elindeki Malzemeleri Dahil Et",
"include-tools-on-hand": "Elindeki Araç Gereçleri Dahil Et", "include-tools-on-hand": "Elindeki Araç Gereçleri Dahil Et",
"max-missing-ingredients": "Maksimum Eksik Malzeme Sayısı", "max-missing-ingredients": "Maksimum Eksik Malzeme Sayısı",
"max-missing-tools": "Maksimum Eksik Araç Sayısı", "max-missing-tools": "Maksimum Eksik Araç Sayısı",
"selected-tools": "Seçilen Araçlar", "selected-tools": "Seçilen Araçlar",
"other-filters": "Diğer Filtreler", "other-filters": "Diğer süzgeçler",
"ready-to-make": "Yapmaya Hazır", "ready-to-make": "Yapmaya Hazır",
"almost-ready-to-make": "Yapmaya Neredeyse Hazır" "almost-ready-to-make": "Yapmaya Neredeyse Hazır"
}, },
@@ -737,12 +742,12 @@
"search": "Ara", "search": "Ara",
"search-mealie": "Mealie'de Ara (/ tuşuna basın)", "search-mealie": "Mealie'de Ara (/ tuşuna basın)",
"search-placeholder": "Ara...", "search-placeholder": "Ara...",
"tag-filter": "Etiket Filtresi", "tag-filter": "Etiket süzgeci",
"search-hint": "'/' Tuşuna Basın", "search-hint": "'/' Tuşuna Basın",
"advanced": "Gelişmiş", "advanced": "Gelişmiş",
"auto-search": "Otomatik Arama", "auto-search": "Otomatik Arama",
"no-results": "Sonuç bulunamadı", "no-results": "Sonuç bulunamadı",
"type-to-search": "Type to search..." "type-to-search": "Aramak için yaz..."
}, },
"settings": { "settings": {
"add-a-new-theme": "Yeni Tema Ekle", "add-a-new-theme": "Yeni Tema Ekle",
@@ -838,7 +843,7 @@
"toolbox": { "toolbox": {
"assign-all": "Tümünü Ata", "assign-all": "Tümünü Ata",
"bulk-assign": "Toplu Atama", "bulk-assign": "Toplu Atama",
"new-name": "Yeni İsim", "new-name": "Yeni ad",
"no-unused-items": "Kullanılmayan Öğe Yok", "no-unused-items": "Kullanılmayan Öğe Yok",
"recipes-affected": "Hiçbir Tarif Etkilenmedi|Bir Tarif Etkilendi|{count} Tarif Etkilendi", "recipes-affected": "Hiçbir Tarif Etkilenmedi|Bir Tarif Etkilendi|{count} Tarif Etkilendi",
"remove-unused": "Kullanılmayanları Kaldır", "remove-unused": "Kullanılmayanları Kaldır",
@@ -1001,7 +1006,7 @@
"email": "E-Posta", "email": "E-Posta",
"error-cannot-delete-super-user": "Hata! Süper Kullanıcı Silinemez", "error-cannot-delete-super-user": "Hata! Süper Kullanıcı Silinemez",
"existing-password-does-not-match": "Mevcut parola eşleşmiyor", "existing-password-does-not-match": "Mevcut parola eşleşmiyor",
"full-name": "İsim Soyisim", "full-name": "Ad Soyad",
"generate-password-reset-link": "Parola Sıfırlama Bağlantısı Oluştur", "generate-password-reset-link": "Parola Sıfırlama Bağlantısı Oluştur",
"invite-only": "Sadece Davetli", "invite-only": "Sadece Davetli",
"link-id": "Bağlantı kimliği", "link-id": "Bağlantı kimliği",
@@ -1081,7 +1086,7 @@
"forgot-password": "Şifreni mi Unuttun?", "forgot-password": "Şifreni mi Unuttun?",
"forgot-password-text": "Lütfen e-posta adresinizi girin, size şifrenizi sıfırlamanız için bir bağlantı göndereceğiz.", "forgot-password-text": "Lütfen e-posta adresinizi girin, size şifrenizi sıfırlamanız için bir bağlantı göndereceğiz.",
"changes-reflected-immediately": "Bu kullanıcıda yapılan değişiklikler hemen yansıtılacaktır.", "changes-reflected-immediately": "Bu kullanıcıda yapılan değişiklikler hemen yansıtılacaktır.",
"default-activity": "Default Activity", "default-activity": "Varsayılan Aktivite",
"default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device" "default-activity-hint": "Select which page you'd like to navigate to upon logging in from this device"
}, },
"language-dialog": { "language-dialog": {
@@ -1200,7 +1205,7 @@
"group-details": "Grup Detayları", "group-details": "Grup Detayları",
"group-details-description": "Hesap oluşturmadan önce bir grup oluşturmanız gerekir. Grubunuzda yalnızca siz yer alacaksınız ancak daha sonra başkalarını da davet edebileceksiniz. Grubunuzdaki üyeler yemek planlarını, alışveriş listelerini, tarifleri ve daha fazlasını paylaşabilir!", "group-details-description": "Hesap oluşturmadan önce bir grup oluşturmanız gerekir. Grubunuzda yalnızca siz yer alacaksınız ancak daha sonra başkalarını da davet edebileceksiniz. Grubunuzdaki üyeler yemek planlarını, alışveriş listelerini, tarifleri ve daha fazlasını paylaşabilir!",
"use-seed-data": "Tohum Verisi Kullan", "use-seed-data": "Tohum Verisi Kullan",
"use-seed-data-description": "Mealie ships with a collection of Foods, Units, and Labels that can be used to populate your group with helpful data for organizing your recipes. These are translated into the language you currently have selected. You can always add to or modify this data later.", "use-seed-data-description": "Mealie, tariflerinizi düzenlemek için grubunuzu faydalı verilerle doldurmak için kullanılabilecek yiyecek, birim ve etiket koleksiyonuyla birlikte geliyor. Bunlar şu anda seçtiğiniz dile çevriliyor. Bu veriyi daha sonra ekleyebilir veya değiştirebilirsiniz.",
"account-details": "Hesap Detayları" "account-details": "Hesap Detayları"
}, },
"validation": { "validation": {
@@ -1390,12 +1395,12 @@
}, },
"cookbook": { "cookbook": {
"cookbooks": "Tarif Kitapları", "cookbooks": "Tarif Kitapları",
"description": "Cookbooks are another way to organize recipes by creating cross sections of recipes, organizers, and other filters. Creating a cookbook will add an entry to the side-bar and all the recipes with the filters chosen will be displayed in the cookbook.", "description": "Yemek kitapları, tarifler, düzenleyiciler ve diğer süzgeçlerin kesitlerini oluşturarak tarifleri düzenlemenin başka bir yoludur. Bir yemek kitabı oluşturmak, yan çubukta bir giriş ekler ve seçilmiş süzgeçlerle birlikte tüm tarifler yemek kitabında gösterilir.",
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households", "hide-cookbooks-from-other-households": "Diğer evlerin yemek kitaplarını gizle",
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar", "hide-cookbooks-from-other-households-description": "Etkinleştirildiğinde, yan panelde sadece evinizin yemek kitapları görünecektir",
"public-cookbook": "Herkese Açık Tarif Kitabı", "public-cookbook": "Herkese Açık Tarif Kitabı",
"public-cookbook-description": "Herkese Açık Tarif Kitapları, mealie kullanıcısı olmayanlarla paylaşılabilir ve grup sayfanızda görüntülenir.", "public-cookbook-description": "Herkese Açık Tarif Kitapları, mealie kullanıcısı olmayanlarla paylaşılabilir ve grup sayfanızda görüntülenir.",
"filter-options": "Filtre Seçenekleri", "filter-options": "Süzme seçenekleri",
"filter-options-description": "Tümünü gerektir seçildiğinde tarif kitabı yalnızca tüm öğelerin seçili olduğu tarifleri içerecektir. Bu, seçilen öğelerin bir kesiti için değil, seçicilerin her bir alt kümesi için geçerlidir.", "filter-options-description": "Tümünü gerektir seçildiğinde tarif kitabı yalnızca tüm öğelerin seçili olduğu tarifleri içerecektir. Bu, seçilen öğelerin bir kesiti için değil, seçicilerin her bir alt kümesi için geçerlidir.",
"require-all-categories": "Tüm Kategorileri Gerektir", "require-all-categories": "Tüm Kategorileri Gerektir",
"require-all-tags": "Tüm Etiketleri Gerektir", "require-all-tags": "Tüm Etiketleri Gerektir",
@@ -1416,25 +1421,25 @@
"does-not-equal": "eşit değildir", "does-not-equal": "eşit değildir",
"is-greater-than": "daha büyük", "is-greater-than": "daha büyük",
"is-greater-than-or-equal-to": "daha büyük veya eşit", "is-greater-than-or-equal-to": "daha büyük veya eşit",
"is-less-than": "is less than", "is-less-than": "daha mı az",
"is-less-than-or-equal-to": "is less than or equal to" "is-less-than-or-equal-to": "daha az veya eşit mi"
}, },
"relational-keywords": { "relational-keywords": {
"is": "is", "is": "is",
"is-not": "is not", "is-not": "değil mi",
"is-one-of": "is one of", "is-one-of": "is one of",
"is-not-one-of": "is not one of", "is-not-one-of": "is not one of",
"contains-all-of": "contains all of", "contains-all-of": "hepsini içeriyor mu",
"is-like": "is like", "is-like": "is like",
"is-not-like": "is not like" "is-not-like": "is not like"
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "Bu Alan Gereklidir",
"invalid-email": "Email Must Be Valid", "invalid-email": "E-posta Geçerli Olmalıdır",
"invalid-url": "Must Be A Valid URL", "invalid-url": "Geçerli Bir URL Olmalıdır",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "No Whitespace Allowed",
"min-length": "Must Be At Least {min} Characters", "min-length": "En Az {min} Karakter Olmalıdır",
"max-length": "Must Be At Most {max} Characters" "max-length": "En Fazla {max} Karakter Olmalıdır"
} }
} }

View File

@@ -212,6 +212,8 @@
"upload-file": "Завантажити файл", "upload-file": "Завантажити файл",
"created-on-date": "Створено: {0}", "created-on-date": "Створено: {0}",
"unsaved-changes": "У вас є незбережені зміни. Ви хочете зберегти їх перед виходом? Гаразд, щоб зберегти, Скасувати, щоб скасувати.", "unsaved-changes": "У вас є незбережені зміни. Ви хочете зберегти їх перед виходом? Гаразд, щоб зберегти, Скасувати, щоб скасувати.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Не вдалося скопіювати до буфера обміну.", "clipboard-copy-failure": "Не вдалося скопіювати до буфера обміну.",
"confirm-delete-generic-items": "Ви впевнені, що хочете видалити вибрані елементи?", "confirm-delete-generic-items": "Ви впевнені, що хочете видалити вибрані елементи?",
"organizers": "Органайзери", "organizers": "Органайзери",
@@ -342,9 +344,9 @@
"breakfast": "Сніданок", "breakfast": "Сніданок",
"lunch": "Обід", "lunch": "Обід",
"dinner": "Вечеря", "dinner": "Вечеря",
"snack": "Snack", "snack": "Закуска",
"drink": "Drink", "drink": "Напій",
"dessert": "Dessert", "dessert": "Десерт",
"type-any": "Будь-який", "type-any": "Будь-який",
"day-any": "Будь-який", "day-any": "Будь-який",
"editor": "Редактор", "editor": "Редактор",
@@ -367,7 +369,9 @@
"recipe-rules": "Правила рецептів", "recipe-rules": "Правила рецептів",
"applies-to-all-days": "Застосовується до всіх днів", "applies-to-all-days": "Застосовується до всіх днів",
"applies-on-days": "Застосовується на {0}сек", "applies-on-days": "Застосовується на {0}сек",
"meal-plan-settings": "Налаштування меню" "meal-plan-settings": "Налаштування меню",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Дані міграції видалені", "migration-data-removed": "Дані міграції видалені",
@@ -445,7 +449,7 @@
"upload-a-recipe": "Завантажити рецепт", "upload-a-recipe": "Завантажити рецепт",
"upload-individual-zip-file": "Завантажити окремий .zip файл, експортований з іншого Mealie.", "upload-individual-zip-file": "Завантажити окремий .zip файл, експортований з іншого Mealie.",
"url-form-hint": "Скопіюйте та вставте посилання з вашого улюбленого кулінарного веб-сайту", "url-form-hint": "Скопіюйте та вставте посилання з вашого улюбленого кулінарного веб-сайту",
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)", "copy-and-paste-the-source-url-of-your-data-optional": "Скопіюйте та вставте URL-адресу ваших даних (необов'язково)",
"view-scraped-data": "Переглянути зібрані дані", "view-scraped-data": "Переглянути зібрані дані",
"trim-whitespace-description": "Обрізати початкові та кінцеву пробілів і порожні лінії", "trim-whitespace-description": "Обрізати початкові та кінцеву пробілів і порожні лінії",
"trim-prefix-description": "Обрізати перший символ з кожного рядка", "trim-prefix-description": "Обрізати перший символ з кожного рядка",
@@ -637,9 +641,10 @@
"scrape-recipe-suggest-bulk-importer": "Спробуйте масовий розпізнавач", "scrape-recipe-suggest-bulk-importer": "Спробуйте масовий розпізнавач",
"scrape-recipe-have-raw-html-or-json-data": "Маєте необроблені дані HTML або JSON?", "scrape-recipe-have-raw-html-or-json-data": "Маєте необроблені дані HTML або JSON?",
"scrape-recipe-you-can-import-from-raw-data-directly": "Ви можете імпортувати необроблені дані", "scrape-recipe-you-can-import-from-raw-data-directly": "Ви можете імпортувати необроблені дані",
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Заблокований сайт?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Спробуйте імпортувати вихідний HTML натомість.",
"import-original-keywords-as-tags": "Імпортувати оригінальні ключові слова як теги", "import-original-keywords-as-tags": "Імпортувати оригінальні ключові слова як теги",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Залишитися в режимі редактора", "stay-in-edit-mode": "Залишитися в режимі редактора",
"parse-recipe-ingredients-after-import": "Розпізнавання інгредієнтів рецепту після імпорту", "parse-recipe-ingredients-after-import": "Розпізнавання інгредієнтів рецепту після імпорту",
"import-from-zip": "Імпортувати з Zip", "import-from-zip": "Імпортувати з Zip",
@@ -1430,11 +1435,11 @@
} }
}, },
"validators": { "validators": {
"required": "This Field is Required", "required": "Це поле обовʼязкове",
"invalid-email": "Email Must Be Valid", "invalid-email": "Електронна адреса повинна бути дійсною",
"invalid-url": "Must Be A Valid URL", "invalid-url": "Має бути дійсною URL-адресою",
"no-whitespace": "No Whitespace Allowed", "no-whitespace": "Пробіли заборонені",
"min-length": "Must Be At Least {min} Characters", "min-length": "Повинно бути не менше ніж {min} символів ",
"max-length": "Must Be At Most {max} Characters" "max-length": "Повинно бути не більше ніж {max} символів"
} }
} }

View File

@@ -7,29 +7,29 @@
"application-mode": "Application Mode", "application-mode": "Application Mode",
"database-type": "Loại cơ sở dữ liệu", "database-type": "Loại cơ sở dữ liệu",
"database-url": "Database URL", "database-url": "Database URL",
"default-group": "Default Group", "default-group": "Nhóm mặc định",
"default-household": "Default Household", "default-household": "Default Household",
"demo": "Bản thử nghiệm", "demo": "Bản thử nghiệm",
"demo-status": "Demo Status", "demo-status": "Demo Status",
"development": "Development", "development": "Phát Triển",
"docs": "Docs", "docs": "Tài liệu",
"download-log": "Download Log", "download-log": "Nhật kí tải xuống",
"download-recipe-json": "Last Scraped JSON", "download-recipe-json": "Last Scraped JSON",
"github": "GitHub", "github": "GitHub",
"log-lines": "Log Lines", "log-lines": "Log Lines",
"not-demo": "Not Demo", "not-demo": "Not Demo",
"portfolio": "Portfolio", "portfolio": "Danh mục",
"production": "Production", "production": "Production",
"support": "Support", "support": "Hỗ trợ",
"version": "Version", "version": "Phiên bản",
"unknown-version": "unknown", "unknown-version": "unknown",
"sponsor": "Sponsor" "sponsor": "Nhà Tài Trợ"
}, },
"asset": { "asset": {
"assets": "Assets", "assets": "Assets",
"code": "Code", "code": "Code",
"file": "File", "file": "File",
"image": "Image", "image": "Hình ảnh",
"new-asset": "New Asset", "new-asset": "New Asset",
"pdf": "PDF", "pdf": "PDF",
"recipe": "Recipe", "recipe": "Recipe",
@@ -212,6 +212,8 @@
"upload-file": "Upload File", "upload-file": "Upload File",
"created-on-date": "Created on: {0}", "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.", "unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Failed to copy to the clipboard.", "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", "organizers": "Organizers",
@@ -367,7 +369,9 @@
"recipe-rules": "Recipe Rules", "recipe-rules": "Recipe Rules",
"applies-to-all-days": "Applies to all days", "applies-to-all-days": "Applies to all days",
"applies-on-days": "Applies on {0}s", "applies-on-days": "Applies on {0}s",
"meal-plan-settings": "Meal Plan Settings" "meal-plan-settings": "Meal Plan Settings",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "Migration data removed", "migration-data-removed": "Migration data removed",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "Import original keywords as tags", "import-original-keywords-as-tags": "Import original keywords as tags",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Stay in Edit mode", "stay-in-edit-mode": "Stay in Edit mode",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"import-from-zip": "Import from Zip", "import-from-zip": "Import from Zip",

View File

@@ -212,6 +212,8 @@
"upload-file": "上传文件", "upload-file": "上传文件",
"created-on-date": "创建于: {0}", "created-on-date": "创建于: {0}",
"unsaved-changes": "你有未保存的更改。你希望现在离开前保存吗?保存选择“是”,不保存选择“取消”。", "unsaved-changes": "你有未保存的更改。你希望现在离开前保存吗?保存选择“是”,不保存选择“取消”。",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "未能复制到剪切板。", "clipboard-copy-failure": "未能复制到剪切板。",
"confirm-delete-generic-items": "你确定删除以下条目吗?", "confirm-delete-generic-items": "你确定删除以下条目吗?",
"organizers": "管理器", "organizers": "管理器",
@@ -367,7 +369,9 @@
"recipe-rules": "食谱规则", "recipe-rules": "食谱规则",
"applies-to-all-days": "应用到所有日期", "applies-to-all-days": "应用到所有日期",
"applies-on-days": "应用于{0}", "applies-on-days": "应用于{0}",
"meal-plan-settings": "饮食计划设置" "meal-plan-settings": "饮食计划设置",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "已删除迁移数据", "migration-data-removed": "已删除迁移数据",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "导入原始关键字作为标签", "import-original-keywords-as-tags": "导入原始关键字作为标签",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "留在编辑模式", "stay-in-edit-mode": "留在编辑模式",
"parse-recipe-ingredients-after-import": "导入后解析食材", "parse-recipe-ingredients-after-import": "导入后解析食材",
"import-from-zip": "从Zip压缩包导入", "import-from-zip": "从Zip压缩包导入",

View File

@@ -212,6 +212,8 @@
"upload-file": "上傳文件", "upload-file": "上傳文件",
"created-on-date": "Created on: {0}", "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.", "unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"discard-changes": "Discard Changes",
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
"clipboard-copy-failure": "Failed to copy to the clipboard.", "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", "organizers": "Organizers",
@@ -367,7 +369,9 @@
"recipe-rules": "Recipe Rules", "recipe-rules": "Recipe Rules",
"applies-to-all-days": "Applies to all days", "applies-to-all-days": "Applies to all days",
"applies-on-days": "Applies on {0}s", "applies-on-days": "Applies on {0}s",
"meal-plan-settings": "Meal Plan Settings" "meal-plan-settings": "Meal Plan Settings",
"add-all-to-list": "Add All to List",
"add-day-to-list": "Add Day to List"
}, },
"migration": { "migration": {
"migration-data-removed": "遷移數據已刪除", "migration-data-removed": "遷移數據已刪除",
@@ -640,6 +644,7 @@
"scrape-recipe-website-being-blocked": "Website being blocked?", "scrape-recipe-website-being-blocked": "Website being blocked?",
"scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.", "scrape-recipe-try-importing-raw-html-instead": "Try importing the raw HTML instead.",
"import-original-keywords-as-tags": "Import original keywords as tags", "import-original-keywords-as-tags": "Import original keywords as tags",
"import-original-categories": "Import original categories",
"stay-in-edit-mode": "Stay in Edit mode", "stay-in-edit-mode": "Stay in Edit mode",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import", "parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"import-from-zip": "Import from Zip", "import-from-zip": "Import from Zip",

View File

@@ -44,6 +44,7 @@ export interface QueryFilterJSONPart {
attributeName?: string | null; attributeName?: string | null;
relationalOperator?: RelationalKeyword | RelationalOperator | null; relationalOperator?: RelationalKeyword | RelationalOperator | null;
value?: string | string[] | null; value?: string | string[] | null;
[k: string]: unknown;
} }
export interface SaveCookBook { export interface SaveCookBook {
name: string; name: string;

View File

@@ -53,6 +53,7 @@ export interface QueryFilterJSONPart {
attributeName?: string | null; attributeName?: string | null;
relationalOperator?: RelationalKeyword | RelationalOperator | null; relationalOperator?: RelationalKeyword | RelationalOperator | null;
value?: string | string[] | null; value?: string | string[] | null;
[k: string]: unknown;
} }
export interface PlanRulesSave { export interface PlanRulesSave {
day?: PlanRulesDay; day?: PlanRulesDay;

View File

@@ -40,3 +40,20 @@ export enum Organizer {
Household = "households", Household = "households",
User = "users", User = "users",
} }
export type LogicalOperator = "AND" | "OR";
export type RelationalKeyword = "IS" | "IS NOT" | "IN" | "NOT IN" | "CONTAINS ALL" | "LIKE" | "NOT LIKE";
export type RelationalOperator = "=" | "<>" | ">" | "<" | ">=" | "<=";
export interface QueryFilterJSON {
parts?: QueryFilterJSONPart[];
}
export interface QueryFilterJSONPart {
leftParenthesis?: string | null;
rightParenthesis?: string | null;
logicalOperator?: LogicalOperator | null;
attributeName?: string | null;
relationalOperator?: RelationalKeyword | RelationalOperator | null;
value?: string | string[] | null;
}

View File

@@ -16,7 +16,7 @@ export interface OpenAIIngredients {
} }
export interface OpenAIRecipe { export interface OpenAIRecipe {
name: string; name: string;
description: string | null; description?: string | null;
recipe_yield?: string | null; recipe_yield?: string | null;
total_time?: string | null; total_time?: string | null;
prep_time?: string | null; prep_time?: string | null;
@@ -37,4 +37,7 @@ export interface OpenAIRecipeNotes {
title?: string | null; title?: string | null;
text: string; text: string;
} }
export interface OpenAIText {
text: string;
}
export interface OpenAIBase {} export interface OpenAIBase {}

View File

@@ -502,13 +502,16 @@ export interface SaveIngredientUnit {
} }
export interface ScrapeRecipe { export interface ScrapeRecipe {
includeTags?: boolean; includeTags?: boolean;
includeCategories?: boolean;
url: string; url: string;
} }
export interface ScrapeRecipeBase { export interface ScrapeRecipeBase {
includeTags?: boolean; includeTags?: boolean;
includeCategories?: boolean;
} }
export interface ScrapeRecipeData { export interface ScrapeRecipeData {
includeTags?: boolean; includeTags?: boolean;
includeCategories?: boolean;
data: string; data: string;
url?: string | null; url?: string | null;
} }

View File

@@ -7,9 +7,6 @@
export type OrderByNullPosition = "first" | "last"; export type OrderByNullPosition = "first" | "last";
export type OrderDirection = "asc" | "desc"; export type OrderDirection = "asc" | "desc";
export type LogicalOperator = "AND" | "OR";
export type RelationalKeyword = "IS" | "IS NOT" | "IN" | "NOT IN" | "CONTAINS ALL" | "LIKE" | "NOT LIKE";
export type RelationalOperator = "=" | "<>" | ">" | "<" | ">=" | "<=";
export interface ErrorResponse { export interface ErrorResponse {
message: string; message: string;
@@ -28,17 +25,6 @@ export interface PaginationQuery {
page?: number; page?: number;
perPage?: number; perPage?: number;
} }
export interface QueryFilterJSON {
parts?: QueryFilterJSONPart[];
}
export interface QueryFilterJSONPart {
leftParenthesis?: string | null;
rightParenthesis?: string | null;
logicalOperator?: LogicalOperator | null;
attributeName?: string | null;
relationalOperator?: RelationalKeyword | RelationalOperator | null;
value?: string | string[] | null;
}
export interface RecipeSearchQuery { export interface RecipeSearchQuery {
cookbook?: string | null; cookbook?: string | null;
requireAllCategories?: boolean; requireAllCategories?: boolean;

View File

@@ -146,12 +146,12 @@ export class RecipeAPI extends BaseCRUDAPI<CreateRecipe, Recipe, Recipe> {
return await this.requests.post<Recipe | null>(routes.recipesTestScrapeUrl, { url, useOpenAI }); return await this.requests.post<Recipe | null>(routes.recipesTestScrapeUrl, { url, useOpenAI });
} }
async createOneByHtmlOrJson(data: string, includeTags: boolean, url: string | null = null) { async createOneByHtmlOrJson(data: string, includeTags: boolean, includeCategories: boolean, url: string | null = null) {
return await this.requests.post<string>(routes.recipesCreateFromHtmlOrJson, { data, includeTags, url }); return await this.requests.post<string>(routes.recipesCreateFromHtmlOrJson, { data, includeTags, includeCategories, url });
} }
async createOneByUrl(url: string, includeTags: boolean) { async createOneByUrl(url: string, includeTags: boolean, includeCategories: boolean) {
return await this.requests.post<string>(routes.recipesCreateUrl, { url, includeTags }); return await this.requests.post<string>(routes.recipesCreateUrl, { url, includeTags, includeCategories });
} }
async createManyByUrl(payload: CreateRecipeByUrlBulk) { async createManyByUrl(payload: CreateRecipeByUrlBulk) {

View File

@@ -24,8 +24,9 @@ export default defineNuxtConfig({
devtools: { devtools: {
enabled: false, enabled: false,
}, },
app: { app: {
baseURL: process.env.SUB_PATH || "", baseURL: process.env.SUB_PATH || "/",
head: { head: {
title: "Mealie", title: "Mealie",
@@ -219,6 +220,7 @@ export default defineNuxtConfig({
workbox: { workbox: {
navigateFallback: "/", navigateFallback: "/",
globPatterns: ["**/*.{js,css,html,png,svg,ico}"], globPatterns: ["**/*.{js,css,html,png,svg,ico}"],
globIgnores: ["404.html", "200.html"],
cleanupOutdatedCaches: true, cleanupOutdatedCaches: true,
skipWaiting: true, skipWaiting: true,
clientsClaim: true, clientsClaim: true,
@@ -389,6 +391,23 @@ export default defineNuxtConfig({
locale: "en-US", locale: "en-US",
fallback: "en-US", fallback: "en-US",
}, },
defaults: {
VOverlay: {
scrollStrategy: "close",
},
VMenu: {
scrollStrategy: "close",
},
VAutocomplete: {
scrollStrategy: "close",
},
VCombobox: {
scrollStrategy: "close",
},
VSelect: {
scrollStrategy: "close",
},
},
}, },
}, },
}); });

View File

@@ -1,6 +1,6 @@
{ {
"name": "mealie", "name": "mealie",
"version": "3.9.1", "version": "3.10.1",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "nuxt dev", "dev": "nuxt dev",

View File

@@ -35,6 +35,7 @@
{{ $t("general.create") }} {{ $t("general.create") }}
</BaseButton> </BaseButton>
<BaseButton <BaseButton
v-if="$appInfo.allowPasswordLogin"
class="mr-2" class="mr-2"
color="info" color="info"
:icon="$globals.icons.link" :icon="$globals.icons.link"

View File

@@ -1,7 +1,7 @@
<template> <template>
<v-form <v-form
ref="domUrlForm" ref="domUrlForm"
@submit.prevent="createFromHtmlOrJson(newRecipeData, importKeywordsAsTags, newRecipeUrl)" @submit.prevent="createFromHtmlOrJson(newRecipeData, importKeywordsAsTags, importCategories, newRecipeUrl)"
> >
<div> <div>
<v-card-title class="headline"> <v-card-title class="headline">
@@ -63,6 +63,12 @@
hide-details hide-details
:label="$t('recipe.import-original-keywords-as-tags')" :label="$t('recipe.import-original-keywords-as-tags')"
/> />
<v-checkbox
v-model="importCategories"
color="primary"
hide-details
:label="$t('recipe.import-original-categories')"
/>
<v-checkbox <v-checkbox
v-model="stayInEditMode" v-model="stayInEditMode"
color="primary" color="primary"
@@ -116,6 +122,7 @@ export default defineNuxtComponent({
const { const {
importKeywordsAsTags, importKeywordsAsTags,
importCategories,
stayInEditMode, stayInEditMode,
parseRecipe, parseRecipe,
navigateToRecipe, navigateToRecipe,
@@ -160,7 +167,7 @@ export default defineNuxtComponent({
} }
handleIsEditJson(); handleIsEditJson();
async function createFromHtmlOrJson(htmlOrJsonData: string | object | null, importKeywordsAsTags: boolean, url: string | null = null) { async function createFromHtmlOrJson(htmlOrJsonData: string | object | null, importKeywordsAsTags: boolean, importCategories: boolean, url: string | null = null) {
if (!htmlOrJsonData) { if (!htmlOrJsonData) {
return; return;
} }
@@ -179,7 +186,7 @@ export default defineNuxtComponent({
} }
state.loading = true; state.loading = true;
const { response } = await api.recipes.createOneByHtmlOrJson(dataString, importKeywordsAsTags, url); const { response } = await api.recipes.createOneByHtmlOrJson(dataString, importKeywordsAsTags, importCategories, url);
handleResponse(response, importKeywordsAsTags); handleResponse(response, importKeywordsAsTags);
} }
@@ -188,6 +195,7 @@ export default defineNuxtComponent({
importKeywordsAsTags, importKeywordsAsTags,
stayInEditMode, stayInEditMode,
parseRecipe, parseRecipe,
importCategories,
newRecipeData, newRecipeData,
newRecipeUrl, newRecipeUrl,
handleIsEditJson, handleIsEditJson,

View File

@@ -2,7 +2,7 @@
<div> <div>
<v-form <v-form
ref="domUrlForm" ref="domUrlForm"
@submit.prevent="createByUrl(recipeUrl, importKeywordsAsTags)" @submit.prevent="createByUrl(recipeUrl, importKeywordsAsTags, importCategories)"
> >
<div> <div>
<v-card-title class="headline"> <v-card-title class="headline">
@@ -38,6 +38,12 @@
hide-details hide-details
:label="$t('recipe.import-original-keywords-as-tags')" :label="$t('recipe.import-original-keywords-as-tags')"
/> />
<v-checkbox
v-model="importCategories"
color="primary"
hide-details
:label="$t('recipe.import-original-categories')"
/>
<v-checkbox <v-checkbox
v-model="stayInEditMode" v-model="stayInEditMode"
color="primary" color="primary"
@@ -148,6 +154,7 @@ export default defineNuxtComponent({
const { const {
importKeywordsAsTags, importKeywordsAsTags,
importCategories,
stayInEditMode, stayInEditMode,
parseRecipe, parseRecipe,
navigateToRecipe, navigateToRecipe,
@@ -219,7 +226,7 @@ export default defineNuxtComponent({
router.replace({ query: undefined }).then(() => router.push(to)); router.replace({ query: undefined }).then(() => router.push(to));
}); });
async function createByUrl(url: string | null, importKeywordsAsTags: boolean) { async function createByUrl(url: string | null, importKeywordsAsTags: boolean, importCategories: boolean) {
if (url === null) { if (url === null) {
return; return;
} }
@@ -229,7 +236,7 @@ export default defineNuxtComponent({
return; return;
} }
state.loading = true; state.loading = true;
const { response } = await api.recipes.createOneByUrl(url, importKeywordsAsTags); const { response } = await api.recipes.createOneByUrl(url, importKeywordsAsTags, importCategories);
handleResponse(response, importKeywordsAsTags); handleResponse(response, importKeywordsAsTags);
} }
@@ -238,6 +245,7 @@ export default defineNuxtComponent({
htmlOrJsonImporterTarget, htmlOrJsonImporterTarget,
recipeUrl, recipeUrl,
importKeywordsAsTags, importKeywordsAsTags,
importCategories: importCategories,
stayInEditMode, stayInEditMode,
parseRecipe, parseRecipe,
domUrlForm, domUrlForm,

View File

@@ -422,7 +422,7 @@ import { Organizer } from "~/lib/api/types/non-generated";
import QueryFilterBuilder from "~/components/Domain/QueryFilterBuilder.vue"; import QueryFilterBuilder from "~/components/Domain/QueryFilterBuilder.vue";
import RecipeSuggestion from "~/components/Domain/Recipe/RecipeSuggestion.vue"; import RecipeSuggestion from "~/components/Domain/Recipe/RecipeSuggestion.vue";
import SearchFilter from "~/components/Domain/SearchFilter.vue"; import SearchFilter from "~/components/Domain/SearchFilter.vue";
import type { QueryFilterJSON } from "~/lib/api/types/response"; import type { QueryFilterJSON } from "~/lib/api/types/non-generated";
import type { FieldDefinition } from "~/composables/use-query-filter-builder"; import type { FieldDefinition } from "~/composables/use-query-filter-builder";
import { useRecipeFinderPreferences } from "~/composables/use-users/preferences"; import { useRecipeFinderPreferences } from "~/composables/use-users/preferences";

View File

@@ -25,8 +25,9 @@
v-model="state.editDialog" v-model="state.editDialog"
:icon="$globals.icons.tags" :icon="$globals.icons.tags"
:title="$t('data-pages.tags.edit-tag')" :title="$t('data-pages.tags.edit-tag')"
:submit-icon="$globals.icons.save"
:submit-text="$t('general.save')" :submit-text="$t('general.save')"
can-confirm can-submit
@submit="editSaveTag" @submit="editSaveTag"
> >
<v-card-text v-if="editTarget"> <v-card-text v-if="editTarget">

View File

@@ -1,5 +1,11 @@
<template> <template>
<v-container> <v-container>
<RecipeDialogAddToShoppingList
v-if="shoppingLists"
v-model="state.shoppingListDialog"
:recipes="weekRecipesWithScales"
:shopping-lists="shoppingLists"
/>
<v-menu <v-menu
v-model="state.picker" v-model="state.picker"
:close-on-content-click="false" :close-on-content-click="false"
@@ -45,13 +51,23 @@
<div class="d-flex flex-wrap align-center justify-space-between mb-2"> <div class="d-flex flex-wrap align-center justify-space-between mb-2">
<v-tabs style="width: fit-content;"> <v-tabs style="width: fit-content;">
<v-tab :to="{ name: 'household-mealplan-planner-view', query: route.query }"> <v-tab :to="{ name: TABS.view, query: route.query }">
{{ $t('meal-plan.meal-planner') }} {{ $t('meal-plan.meal-planner') }}
</v-tab> </v-tab>
<v-tab :to="{ name: 'household-mealplan-planner-edit', query: route.query }"> <v-tab :to="{ name: TABS.edit, query: route.query }">
{{ $t('general.edit') }} {{ $t('general.edit') }}
</v-tab> </v-tab>
</v-tabs> </v-tabs>
<BaseButton
v-if="route.name === TABS.view"
color="info"
:icon="$globals.icons.cartCheck"
:text="$t('meal-plan.add-all-to-list')"
:disabled="!hasRecipes"
:loading="state.addAllLoading"
class="ml-auto mr-4"
@click="addAllToList"
/>
<ButtonLink <ButtonLink
:icon="$globals.icons.calendar" :icon="$globals.icons.calendar"
:to="`/household/mealplan/settings`" :to="`/household/mealplan/settings`"
@@ -72,15 +88,27 @@
<script lang="ts"> <script lang="ts">
import { isSameDay, addDays, parseISO, format, isValid } from "date-fns"; import { isSameDay, addDays, parseISO, format, isValid } from "date-fns";
import RecipeDialogAddToShoppingList from "~/components/Domain/Recipe/RecipeDialogAddToShoppingList.vue";
import { useHouseholdSelf } from "~/composables/use-households"; import { useHouseholdSelf } from "~/composables/use-households";
import { useMealplans } from "~/composables/use-group-mealplan"; import { useMealplans } from "~/composables/use-group-mealplan";
import { useUserMealPlanPreferences } from "~/composables/use-users/preferences"; import { useUserMealPlanPreferences } from "~/composables/use-users/preferences";
import type { ShoppingListSummary } from "~/lib/api/types/household";
import { useUserApi } from "~/composables/api";
export default defineNuxtComponent({ export default defineNuxtComponent({
components: {
RecipeDialogAddToShoppingList,
},
setup() { setup() {
const TABS = {
view: "household-mealplan-planner-view",
edit: "household-mealplan-planner-edit",
};
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
const i18n = useI18n(); const i18n = useI18n();
const api = useUserApi();
const { household } = useHouseholdSelf(); const { household } = useHouseholdSelf();
useSeoMeta({ useSeoMeta({
@@ -96,7 +124,7 @@ export default defineNuxtComponent({
// Force to /view if current route is /planner // Force to /view if current route is /planner
if (route.path === "/household/mealplan/planner") { if (route.path === "/household/mealplan/planner") {
router.push({ router.push({
name: "household-mealplan-planner-view", name: TABS.view,
query: route.query, query: route.query,
}); });
} }
@@ -120,8 +148,12 @@ export default defineNuxtComponent({
start: initialStartDate, start: initialStartDate,
picker: false, picker: false,
end: initialEndDate, end: initialEndDate,
shoppingListDialog: false,
addAllLoading: false,
}); });
const shoppingLists = ref<ShoppingListSummary[]>();
const firstDayOfWeek = computed(() => { const firstDayOfWeek = computed(() => {
return household.value?.preferences?.firstDayOfWeek || 0; return household.value?.preferences?.firstDayOfWeek || 0;
}); });
@@ -145,7 +177,7 @@ export default defineNuxtComponent({
watch(weekRange, (newRange) => { watch(weekRange, (newRange) => {
// Keep current route name and params, just update the query // Keep current route name and params, just update the query
router.replace({ router.replace({
name: route.name || "household-mealplan-planner-view", name: route.name || TABS.view,
params: route.params, params: route.params,
query: { query: {
...route.query, ...route.query,
@@ -193,7 +225,41 @@ export default defineNuxtComponent({
}); });
}); });
const hasRecipes = computed(() => {
return mealsByDate.value.some(day => day.meals.some(meal => meal.recipe));
});
const weekRecipesWithScales = computed(() => {
const allRecipes: any[] = [];
for (const day of mealsByDate.value) {
for (const meal of day.meals) {
if (meal.recipe) {
allRecipes.push(meal.recipe);
}
}
}
return allRecipes.map(recipe => ({
scale: 1,
...recipe,
}));
});
async function getShoppingLists() {
const { data } = await api.shopping.lists.getAll(1, -1, { orderBy: "name", orderDirection: "asc" });
if (data) {
shoppingLists.value = data.items as ShoppingListSummary[] ?? [];
}
}
async function addAllToList() {
state.value.addAllLoading = true;
await getShoppingLists();
state.value.shoppingListDialog = true;
state.value.addAllLoading = false;
}
return { return {
TABS,
route, route,
state, state,
actions, actions,
@@ -201,6 +267,10 @@ export default defineNuxtComponent({
weekRange, weekRange,
firstDayOfWeek, firstDayOfWeek,
numberOfDays, numberOfDays,
hasRecipes,
shoppingLists,
weekRecipesWithScales,
addAllToList,
}; };
}, },
}); });

View File

@@ -26,7 +26,7 @@
<ToggleState tag="article"> <ToggleState tag="article">
<template #activator="{ toggle, state }"> <template #activator="{ toggle, state }">
<v-btn <v-btn
v-if="!state" v-if="!state && $appInfo.allowPasswordLogin"
color="info" color="info"
class="mt-2 mb-n3" class="mt-2 mb-n3"
@click="toggle" @click="toggle"
@@ -37,7 +37,7 @@
{{ $t("settings.change-password") }} {{ $t("settings.change-password") }}
</v-btn> </v-btn>
<v-btn <v-btn
v-else v-else-if="$appInfo.allowPasswordLogin"
color="info" color="info"
class="mt-2 mb-n3" class="mt-2 mb-n3"
@click="toggle" @click="toggle"
@@ -111,7 +111,7 @@
class="mt-10" class="mt-10"
:title="$t('settings.change-password')" :title="$t('settings.change-password')"
/> />
<v-card variant="outlined"> <v-card variant="outlined" style="border-color: lightgrey;">
<v-card-text class="pb-0"> <v-card-text class="pb-0">
<v-form ref="passChange"> <v-form ref="passChange">
<v-text-field <v-text-field

View File

@@ -295,6 +295,7 @@ export default defineNuxtComponent({
async setup() { async setup() {
const i18n = useI18n(); const i18n = useI18n();
const $auth = useMealieAuth(); const $auth = useMealieAuth();
const { $appInfo } = useNuxtApp();
const route = useRoute(); const route = useRoute();
const groupSlug = computed(() => route.params.groupSlug || $auth.user.value?.groupSlug || ""); const groupSlug = computed(() => route.params.groupSlug || $auth.user.value?.groupSlug || "");
@@ -302,7 +303,18 @@ export default defineNuxtComponent({
title: i18n.t("settings.profile"), title: i18n.t("settings.profile"),
}); });
const user = computed<UserOut | null>(() => $auth.user.value); const user = computed<UserOut | null>(() => {
const authUser = $auth.user.value;
if (!authUser) return null;
// Override canInvite if password login is disabled
const canInvite = !$appInfo.allowPasswordLogin ? false : authUser.canInvite;
return {
...authUser,
canInvite,
};
});
const inviteDialog = ref(false); const inviteDialog = ref(false);
const api = useUserApi(); const api = useUserApi();

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More