mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-24 16:53:12 -05:00
Compare commits
2 Commits
v3.0.0
...
auto-local
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9d4bb320b7 | ||
|
|
e417a2001d |
6
.github/workflows/locale-sync.yml
vendored
6
.github/workflows/locale-sync.yml
vendored
@@ -105,7 +105,11 @@ jobs:
|
||||
|
||||
## Changes
|
||||
- Updated frontend locale files
|
||||
- Generated from latest translation sources" \
|
||||
- Generated from latest translation sources
|
||||
|
||||
## Test plan
|
||||
- [ ] Verify locale files are properly formatted
|
||||
- [ ] Test that translations load correctly in the frontend" \
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ repos:
|
||||
exclude: ^tests/data/
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.12.2
|
||||
rev: v0.12.1
|
||||
hooks:
|
||||
- id: ruff
|
||||
- id: ruff-format
|
||||
|
||||
@@ -76,7 +76,7 @@ export const LOCALES = [{% for locale in locales %}
|
||||
progress: {{ locale.progress }},
|
||||
dir: "{{ locale.dir }}",
|
||||
},{% endfor %}
|
||||
];
|
||||
]
|
||||
|
||||
"""
|
||||
|
||||
|
||||
24
dev/data/templates/recipes.md
Normal file
24
dev/data/templates/recipes.md
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
|
||||

|
||||
|
||||
# {{ recipe.name }}
|
||||
{{ recipe.description }}
|
||||
|
||||
## Ingredients
|
||||
{% for ingredient in recipe.recipeIngredient %}
|
||||
- [ ] {{ ingredient }} {% endfor %}
|
||||
|
||||
## Instructions
|
||||
{% for step in recipe.recipeInstructions %}
|
||||
- [ ] {{ step.text }} {% endfor %}
|
||||
|
||||
{% for note in recipe.notes %}
|
||||
**{{ note.title }}:** {{ note.text }}
|
||||
{% endfor %}
|
||||
|
||||
---
|
||||
|
||||
Tags: {{ recipe.tags }}
|
||||
Categories: {{ recipe.categories }}
|
||||
Original URL: {{ recipe.orgURL }}
|
||||
@@ -20,7 +20,7 @@ RUN yarn generate
|
||||
###############################################
|
||||
# Base Image - Python
|
||||
###############################################
|
||||
FROM python:3.12-slim AS python-base
|
||||
FROM python:3.12-slim as python-base
|
||||
|
||||
ENV MEALIE_HOME="/app"
|
||||
|
||||
@@ -119,7 +119,7 @@ RUN . $VENV_PATH/bin/activate \
|
||||
###############################################
|
||||
# Production Image
|
||||
###############################################
|
||||
FROM python-base AS production
|
||||
FROM python-base as production
|
||||
LABEL org.opencontainers.image.source="https://github.com/mealie-recipes/mealie"
|
||||
ENV PRODUCTION=true
|
||||
ENV TESTING=false
|
||||
|
||||
390
frontend/assets/css/fonts.css
Normal file
390
frontend/assets/css/fonts.css
Normal file
@@ -0,0 +1,390 @@
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 100;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-100-cyrillic-ext1.woff2") format("woff2");
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 100;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-100-cyrillic2.woff2") format("woff2");
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 100;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-100-greek-ext3.woff2") format("woff2");
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 100;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-100-greek4.woff2") format("woff2");
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 100;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-100-vietnamese5.woff2") format("woff2");
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 100;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-100-latin-ext6.woff2") format("woff2");
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 100;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-100-latin7.woff2") format("woff2");
|
||||
unicode-range:
|
||||
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
||||
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-300-cyrillic-ext8.woff2") format("woff2");
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-300-cyrillic9.woff2") format("woff2");
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-300-greek-ext10.woff2") format("woff2");
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-300-greek11.woff2") format("woff2");
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-300-vietnamese12.woff2") format("woff2");
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-300-latin-ext13.woff2") format("woff2");
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-300-latin14.woff2") format("woff2");
|
||||
unicode-range:
|
||||
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
||||
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-400-cyrillic-ext15.woff2") format("woff2");
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-400-cyrillic16.woff2") format("woff2");
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-400-greek-ext17.woff2") format("woff2");
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-400-greek18.woff2") format("woff2");
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-400-vietnamese19.woff2") format("woff2");
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-400-latin-ext20.woff2") format("woff2");
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-400-latin21.woff2") format("woff2");
|
||||
unicode-range:
|
||||
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
||||
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-500-cyrillic-ext22.woff2") format("woff2");
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-500-cyrillic23.woff2") format("woff2");
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-500-greek-ext24.woff2") format("woff2");
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-500-greek25.woff2") format("woff2");
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-500-vietnamese26.woff2") format("woff2");
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-500-latin-ext27.woff2") format("woff2");
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-500-latin28.woff2") format("woff2");
|
||||
unicode-range:
|
||||
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
||||
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-700-cyrillic-ext29.woff2") format("woff2");
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-700-cyrillic30.woff2") format("woff2");
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-700-greek-ext31.woff2") format("woff2");
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-700-greek32.woff2") format("woff2");
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-700-vietnamese33.woff2") format("woff2");
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-700-latin-ext34.woff2") format("woff2");
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-700-latin35.woff2") format("woff2");
|
||||
unicode-range:
|
||||
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
||||
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-900-cyrillic-ext36.woff2") format("woff2");
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-900-cyrillic37.woff2") format("woff2");
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-900-greek-ext38.woff2") format("woff2");
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-900-greek39.woff2") format("woff2");
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-900-vietnamese40.woff2") format("woff2");
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-900-latin-ext41.woff2") format("woff2");
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: swap;
|
||||
src: url("~assets/fonts/Roboto-900-latin42.woff2") format("woff2");
|
||||
unicode-range:
|
||||
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
||||
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
BIN
frontend/assets/fonts/Roboto-100-cyrillic-ext1.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-100-cyrillic-ext1.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-100-cyrillic2.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-100-cyrillic2.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-100-greek-ext3.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-100-greek-ext3.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-100-greek4.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-100-greek4.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-100-latin-ext6.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-100-latin-ext6.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-100-latin7.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-100-latin7.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-100-vietnamese5.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-100-vietnamese5.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-300-cyrillic-ext8.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-300-cyrillic-ext8.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-300-cyrillic9.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-300-cyrillic9.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-300-greek-ext10.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-300-greek-ext10.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-300-greek11.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-300-greek11.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-300-latin-ext13.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-300-latin-ext13.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-300-latin14.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-300-latin14.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-300-vietnamese12.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-300-vietnamese12.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-400-cyrillic-ext15.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-400-cyrillic-ext15.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-400-cyrillic16.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-400-cyrillic16.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-400-greek-ext17.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-400-greek-ext17.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-400-greek18.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-400-greek18.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-400-latin-ext20.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-400-latin-ext20.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-400-latin21.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-400-latin21.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-400-vietnamese19.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-400-vietnamese19.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-500-cyrillic-ext22.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-500-cyrillic-ext22.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-500-cyrillic23.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-500-cyrillic23.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-500-greek-ext24.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-500-greek-ext24.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-500-greek25.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-500-greek25.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-500-latin-ext27.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-500-latin-ext27.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-500-latin28.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-500-latin28.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-500-vietnamese26.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-500-vietnamese26.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-700-cyrillic-ext29.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-700-cyrillic-ext29.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-700-cyrillic30.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-700-cyrillic30.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-700-greek-ext31.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-700-greek-ext31.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-700-greek32.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-700-greek32.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-700-latin-ext34.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-700-latin-ext34.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-700-latin35.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-700-latin35.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-700-vietnamese33.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-700-vietnamese33.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-900-cyrillic-ext36.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-900-cyrillic-ext36.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-900-cyrillic37.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-900-cyrillic37.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-900-greek-ext38.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-900-greek-ext38.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-900-greek39.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-900-greek39.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-900-latin-ext41.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-900-latin-ext41.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-900-latin42.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-900-latin42.woff2
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/Roboto-900-vietnamese40.woff2
Normal file
BIN
frontend/assets/fonts/Roboto-900-vietnamese40.woff2
Normal file
Binary file not shown.
@@ -1,23 +1,23 @@
|
||||
<template>
|
||||
<div v-if="model.length > 0 || edit">
|
||||
<div v-if="value.length > 0 || edit">
|
||||
<v-card class="mt-4">
|
||||
<v-card-title class="py-2">
|
||||
{{ $t("asset.assets") }}
|
||||
</v-card-title>
|
||||
<v-divider class="mx-2" />
|
||||
<v-list
|
||||
v-if="model.length > 0"
|
||||
v-if="value.length > 0"
|
||||
:flat="!edit"
|
||||
>
|
||||
<v-list-item
|
||||
v-for="(item, i) in model"
|
||||
v-for="(item, i) in value"
|
||||
:key="i"
|
||||
>
|
||||
<template #prepend>
|
||||
<div class="ma-auto">
|
||||
<v-tooltip bottom>
|
||||
<template #activator="{ props: tooltipProps }">
|
||||
<v-icon v-bind="tooltipProps">
|
||||
<template #activator="{ props }">
|
||||
<v-icon v-bind="props">
|
||||
{{ getIconDefinition(item.icon).icon }}
|
||||
</v-icon>
|
||||
</template>
|
||||
@@ -44,7 +44,7 @@
|
||||
color="error"
|
||||
icon
|
||||
top
|
||||
@click="model.splice(i, 1)"
|
||||
@click="value.splice(i, 1)"
|
||||
>
|
||||
<v-icon>{{ $globals.icons.delete }}</v-icon>
|
||||
</v-btn>
|
||||
@@ -113,109 +113,124 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
<script lang="ts">
|
||||
import { useStaticRoutes, useUserApi } from "~/composables/api";
|
||||
import { alert } from "~/composables/use-toast";
|
||||
import type { RecipeAsset } from "~/lib/api/types/recipe";
|
||||
|
||||
const props = defineProps({
|
||||
slug: {
|
||||
type: String,
|
||||
required: true,
|
||||
export default defineNuxtComponent({
|
||||
props: {
|
||||
slug: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
recipeId: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
modelValue: {
|
||||
type: Array as () => RecipeAsset[],
|
||||
required: true,
|
||||
},
|
||||
edit: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
},
|
||||
recipeId: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
edit: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
emits: ["update:modelValue"],
|
||||
setup(props, context) {
|
||||
const api = useUserApi();
|
||||
|
||||
const state = reactive({
|
||||
newAssetDialog: false,
|
||||
fileObject: {} as File,
|
||||
newAsset: {
|
||||
name: "",
|
||||
icon: "mdi-file",
|
||||
},
|
||||
});
|
||||
|
||||
const i18n = useI18n();
|
||||
const { $globals } = useNuxtApp();
|
||||
|
||||
const iconOptions = [
|
||||
{
|
||||
name: "mdi-file",
|
||||
title: i18n.t("asset.file"),
|
||||
icon: $globals.icons.file,
|
||||
},
|
||||
{
|
||||
name: "mdi-file-pdf-box",
|
||||
title: i18n.t("asset.pdf"),
|
||||
icon: $globals.icons.filePDF,
|
||||
},
|
||||
{
|
||||
name: "mdi-file-image",
|
||||
title: i18n.t("asset.image"),
|
||||
icon: $globals.icons.fileImage,
|
||||
},
|
||||
{
|
||||
name: "mdi-code-json",
|
||||
title: i18n.t("asset.code"),
|
||||
icon: $globals.icons.codeJson,
|
||||
},
|
||||
{
|
||||
name: "mdi-silverware-fork-knife",
|
||||
title: i18n.t("asset.recipe"),
|
||||
icon: $globals.icons.primary,
|
||||
},
|
||||
];
|
||||
|
||||
const serverBase = useRequestURL().origin;
|
||||
|
||||
function getIconDefinition(icon: string) {
|
||||
return iconOptions.find(item => item.name === icon) || iconOptions[0];
|
||||
}
|
||||
|
||||
const { recipeAssetPath } = useStaticRoutes();
|
||||
function assetURL(assetName: string) {
|
||||
return recipeAssetPath(props.recipeId, assetName);
|
||||
}
|
||||
|
||||
function assetEmbed(name: string) {
|
||||
return `<img src="${serverBase}${assetURL(name)}" height="100%" width="100%"> </img>`;
|
||||
}
|
||||
|
||||
function setFileObject(fileObject: File) {
|
||||
state.fileObject = fileObject;
|
||||
}
|
||||
|
||||
function validFields() {
|
||||
return state.newAsset.name.length > 0 && state.fileObject.name.length > 0;
|
||||
}
|
||||
|
||||
async function addAsset() {
|
||||
if (!validFields()) {
|
||||
alert.error(i18n.t("asset.error-submitting-form") as string);
|
||||
return;
|
||||
}
|
||||
|
||||
const { data } = await api.recipes.createAsset(props.slug, {
|
||||
name: state.newAsset.name,
|
||||
icon: state.newAsset.icon,
|
||||
file: state.fileObject,
|
||||
extension: state.fileObject.name.split(".").pop() || "",
|
||||
});
|
||||
|
||||
context.emit("update:modelValue", [...props.modelValue, data]);
|
||||
state.newAsset = { name: "", icon: "mdi-file" };
|
||||
state.fileObject = {} as File;
|
||||
}
|
||||
|
||||
return {
|
||||
state,
|
||||
addAsset,
|
||||
assetURL,
|
||||
assetEmbed,
|
||||
getIconDefinition,
|
||||
iconOptions,
|
||||
setFileObject,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
const model = defineModel<RecipeAsset[]>({ required: true });
|
||||
|
||||
const api = useUserApi();
|
||||
|
||||
const state = reactive({
|
||||
newAssetDialog: false,
|
||||
fileObject: {} as File,
|
||||
newAsset: {
|
||||
name: "",
|
||||
icon: "mdi-file",
|
||||
},
|
||||
});
|
||||
|
||||
const i18n = useI18n();
|
||||
const { $globals } = useNuxtApp();
|
||||
|
||||
const iconOptions = [
|
||||
{
|
||||
name: "mdi-file",
|
||||
title: i18n.t("asset.file"),
|
||||
icon: $globals.icons.file,
|
||||
},
|
||||
{
|
||||
name: "mdi-file-pdf-box",
|
||||
title: i18n.t("asset.pdf"),
|
||||
icon: $globals.icons.filePDF,
|
||||
},
|
||||
{
|
||||
name: "mdi-file-image",
|
||||
title: i18n.t("asset.image"),
|
||||
icon: $globals.icons.fileImage,
|
||||
},
|
||||
{
|
||||
name: "mdi-code-json",
|
||||
title: i18n.t("asset.code"),
|
||||
icon: $globals.icons.codeJson,
|
||||
},
|
||||
{
|
||||
name: "mdi-silverware-fork-knife",
|
||||
title: i18n.t("asset.recipe"),
|
||||
icon: $globals.icons.primary,
|
||||
},
|
||||
];
|
||||
|
||||
const serverBase = useRequestURL().origin;
|
||||
|
||||
function getIconDefinition(icon: string) {
|
||||
return iconOptions.find(item => item.name === icon) || iconOptions[0];
|
||||
}
|
||||
|
||||
const { recipeAssetPath } = useStaticRoutes();
|
||||
function assetURL(assetName: string) {
|
||||
return recipeAssetPath(props.recipeId, assetName);
|
||||
}
|
||||
|
||||
function assetEmbed(name: string) {
|
||||
return `<img src="${serverBase}${assetURL(name)}" height="100%" width="100%"> </img>`;
|
||||
}
|
||||
|
||||
function setFileObject(fileObject: File) {
|
||||
state.fileObject = fileObject;
|
||||
}
|
||||
|
||||
function validFields() {
|
||||
return state.newAsset.name.length > 0 && state.fileObject.name.length > 0;
|
||||
}
|
||||
|
||||
async function addAsset() {
|
||||
if (!validFields()) {
|
||||
alert.error(i18n.t("asset.error-submitting-form") as string);
|
||||
return;
|
||||
}
|
||||
|
||||
const { data } = await api.recipes.createAsset(props.slug, {
|
||||
name: state.newAsset.name,
|
||||
icon: state.newAsset.icon,
|
||||
file: state.fileObject,
|
||||
extension: state.fileObject.name.split(".").pop() || "",
|
||||
});
|
||||
if (data) {
|
||||
model.value = [...model.value, data];
|
||||
}
|
||||
state.newAsset = { name: "", icon: "mdi-file" };
|
||||
state.fileObject = {} as File;
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
:suffix="labels[key].suffix"
|
||||
type="number"
|
||||
autocomplete="off"
|
||||
variant="underlined"
|
||||
@update:model-value="updateValue(key, $event)"
|
||||
/>
|
||||
</div>
|
||||
@@ -32,13 +31,15 @@
|
||||
:key="index"
|
||||
style="min-height: 25px"
|
||||
>
|
||||
<v-list-item-title class="pl-2 d-flex">
|
||||
<div>{{ item.label }}</div>
|
||||
<div class="ml-auto mr-1">
|
||||
{{ item.value }}
|
||||
</div>
|
||||
<div>{{ item.suffix }}</div>
|
||||
</v-list-item-title>
|
||||
<div>
|
||||
<v-list-item-title class="pl-4 caption flex row">
|
||||
<div>{{ item.label }}</div>
|
||||
<div class="ml-auto mr-1">
|
||||
{{ item.value }}
|
||||
</div>
|
||||
<div>{{ item.suffix }}</div>
|
||||
</v-list-item-title>
|
||||
</div>
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</v-card>
|
||||
|
||||
@@ -42,8 +42,6 @@ export default defineNuxtComponent({
|
||||
|
||||
.v-main {
|
||||
display: block;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.v-main__wrap {
|
||||
|
||||
@@ -23,17 +23,18 @@
|
||||
</v-icon>
|
||||
{{ recipe.name }}
|
||||
</v-card-title>
|
||||
<div
|
||||
v-if="recipeYield"
|
||||
class="d-flex justify-space-between align-center pb-6"
|
||||
<div v-if="recipeYield"
|
||||
class="d-flex justify-space-between align-center px-4 pb-2"
|
||||
>
|
||||
<div>
|
||||
<v-chip :size="$vuetify.display.smAndDown ? 'small' : undefined"
|
||||
label
|
||||
>
|
||||
<v-icon start>
|
||||
{{ $globals.icons.potSteam }}
|
||||
</v-icon>
|
||||
<!-- eslint-disable-next-line vue/no-v-html -->
|
||||
<span v-html="recipeYield" />
|
||||
</div>
|
||||
</v-chip>
|
||||
</div>
|
||||
<v-row class="d-flex justify-start">
|
||||
<RecipeTimeCard :prep-time="recipe.prepTime"
|
||||
|
||||
@@ -138,48 +138,14 @@ export default defineNuxtComponent({
|
||||
const groupSlug = computed(() => route.params.groupSlug as string || $auth.user.value?.groupSlug || "");
|
||||
|
||||
const cookbookPreferences = useCookbookPreferences();
|
||||
|
||||
const ownCookbookStore = useCookbookStore(i18n);
|
||||
const ownHouseholdStore = useHouseholdStore(i18n);
|
||||
|
||||
const publicCookbookStoreCache = ref<Record<string, ReturnType<typeof usePublicCookbookStore>>>({});
|
||||
const publicHouseholdStoreCache = ref<Record<string, ReturnType<typeof usePublicHouseholdStore>>>({});
|
||||
|
||||
function getPublicCookbookStore(slug: string) {
|
||||
if (!publicCookbookStoreCache.value[slug]) {
|
||||
publicCookbookStoreCache.value[slug] = usePublicCookbookStore(slug, i18n);
|
||||
const { store: cookbooks, actions: cookbooksActions } = isOwnGroup.value ? useCookbookStore() : usePublicCookbookStore(groupSlug.value || "");
|
||||
onMounted(() => {
|
||||
if (!cookbooks.value.length) {
|
||||
cookbooksActions.refresh();
|
||||
}
|
||||
return publicCookbookStoreCache.value[slug];
|
||||
}
|
||||
|
||||
function getPublicHouseholdStore(slug: string) {
|
||||
if (!publicHouseholdStoreCache.value[slug]) {
|
||||
publicHouseholdStoreCache.value[slug] = usePublicHouseholdStore(slug, i18n);
|
||||
}
|
||||
return publicHouseholdStoreCache.value[slug];
|
||||
}
|
||||
|
||||
const cookbooks = computed(() => {
|
||||
if (isOwnGroup.value) {
|
||||
return ownCookbookStore.store.value;
|
||||
}
|
||||
else if (groupSlug.value) {
|
||||
const publicStore = getPublicCookbookStore(groupSlug.value);
|
||||
return unref(publicStore.store);
|
||||
}
|
||||
return [];
|
||||
});
|
||||
|
||||
const households = computed(() => {
|
||||
if (isOwnGroup.value) {
|
||||
return ownHouseholdStore.store.value;
|
||||
}
|
||||
else if (groupSlug.value) {
|
||||
const publicStore = getPublicHouseholdStore(groupSlug.value);
|
||||
return unref(publicStore.store);
|
||||
}
|
||||
return [];
|
||||
});
|
||||
const { store: households } = isOwnGroup.value ? useHouseholdStore() : usePublicHouseholdStore(groupSlug.value || "");
|
||||
|
||||
const householdsById = computed(() => {
|
||||
return households.value.reduce((acc, household) => {
|
||||
@@ -212,10 +178,6 @@ export default defineNuxtComponent({
|
||||
|
||||
const currentUserHouseholdId = computed(() => $auth.user.value?.householdId);
|
||||
const cookbookLinks = computed<SideBarLink[]>(() => {
|
||||
if (!cookbooks.value?.length) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const sortedCookbooks = [...cookbooks.value].sort((a, b) => (a.position || 0) - (b.position || 0));
|
||||
|
||||
const ownLinks: SideBarLink[] = [];
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<v-tooltip
|
||||
ref="copyToolTip"
|
||||
v-model="show"
|
||||
:color="copied? 'success-lighten-1' : 'red-lighten-1'"
|
||||
top
|
||||
:open-on-hover="false"
|
||||
:open-on-click="true"
|
||||
@@ -23,12 +24,15 @@
|
||||
{{ icon ? "" : $t("general.copy") }}
|
||||
</v-btn>
|
||||
</template>
|
||||
<span v-if="!isSupported || copiedSuccess !== null">
|
||||
<v-icon start>
|
||||
<span>
|
||||
<v-icon
|
||||
start
|
||||
dark
|
||||
>
|
||||
{{ $globals.icons.clipboardCheck }}
|
||||
</v-icon>
|
||||
<slot v-if="!isSupported"> {{ $t("general.your-browser-does-not-support-clipboard") }} </slot>
|
||||
<slot v-else> {{ copiedSuccess ? $t("general.copied_message") : $t("general.clipboard-copy-failure") }} </slot>
|
||||
<slot v-else> {{ copied ? $t("general.copied_message") : $t("general.clipboard-copy-failure") }} </slot>
|
||||
</span>
|
||||
</v-tooltip>
|
||||
</template>
|
||||
@@ -59,18 +63,19 @@ export default defineNuxtComponent({
|
||||
const { copy, copied, isSupported } = useClipboard();
|
||||
const show = ref(false);
|
||||
const copyToolTip = ref<VTooltip | null>(null);
|
||||
const copiedSuccess = ref<boolean | null>(null);
|
||||
|
||||
function toggleBlur() {
|
||||
copyToolTip.value?.deactivate();
|
||||
}
|
||||
|
||||
async function textToClipboard() {
|
||||
if (isSupported.value) {
|
||||
await copy(props.copyText);
|
||||
if (copied.value) {
|
||||
copiedSuccess.value = true;
|
||||
console.info(`Copied\n${props.copyText}`);
|
||||
console.log(`Copied\n${props.copyText}`);
|
||||
}
|
||||
else {
|
||||
copiedSuccess.value = false;
|
||||
console.error("Copy failed: ", copied.value);
|
||||
console.warn("Copy failed: ", copied.value);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -79,8 +84,8 @@ export default defineNuxtComponent({
|
||||
|
||||
show.value = true;
|
||||
setTimeout(() => {
|
||||
show.value = false;
|
||||
}, 3000);
|
||||
toggleBlur();
|
||||
}, 500);
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -89,7 +94,6 @@ export default defineNuxtComponent({
|
||||
textToClipboard,
|
||||
copied,
|
||||
isSupported,
|
||||
copiedSuccess,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import type { AxiosInstance, AxiosResponse, AxiosRequestConfig } from "axios";
|
||||
import type { Composer } from "vue-i18n";
|
||||
import type { ApiRequestInstance, RequestResponse } from "~/lib/api/types/non-generated";
|
||||
import { AdminAPI, PublicApi, UserApi } from "~/lib/api";
|
||||
import { PublicExploreApi } from "~/lib/api/client-public";
|
||||
@@ -53,34 +52,31 @@ function getRequests(axiosInstance: AxiosInstance): ApiRequestInstance {
|
||||
};
|
||||
}
|
||||
|
||||
export const useRequests = function (i18n?: Composer): ApiRequestInstance {
|
||||
export const useRequests = function (): ApiRequestInstance {
|
||||
const i18n = useI18n();
|
||||
const { $axios } = useNuxtApp();
|
||||
if (!i18n) {
|
||||
// Only works in a setup block
|
||||
i18n = useI18n();
|
||||
}
|
||||
|
||||
$axios.defaults.headers.common["Accept-Language"] = i18n.locale.value;
|
||||
|
||||
return getRequests($axios);
|
||||
};
|
||||
|
||||
export const useAdminApi = function (i18n?: Composer): AdminAPI {
|
||||
const requests = useRequests(i18n);
|
||||
export const useAdminApi = function (): AdminAPI {
|
||||
const requests = useRequests();
|
||||
return new AdminAPI(requests);
|
||||
};
|
||||
|
||||
export const useUserApi = function (i18n?: Composer): UserApi {
|
||||
const requests = useRequests(i18n);
|
||||
export const useUserApi = function (): UserApi {
|
||||
const requests = useRequests();
|
||||
return new UserApi(requests);
|
||||
};
|
||||
|
||||
export const usePublicApi = function (i18n?: Composer): PublicApi {
|
||||
const requests = useRequests(i18n);
|
||||
export const usePublicApi = function (): PublicApi {
|
||||
const requests = useRequests();
|
||||
return new PublicApi(requests);
|
||||
};
|
||||
|
||||
export const usePublicExploreApi = function (groupSlug: string, i18n?: Composer): PublicExploreApi {
|
||||
const requests = useRequests(i18n);
|
||||
export const usePublicExploreApi = function (groupSlug: string): PublicExploreApi {
|
||||
const requests = useRequests();
|
||||
return new PublicExploreApi(requests, groupSlug);
|
||||
};
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { Composer } from "vue-i18n";
|
||||
import { useData, useReadOnlyStore, useStore } from "../partials/use-store-factory";
|
||||
import type { RecipeCategory } from "~/lib/api/types/recipe";
|
||||
import { usePublicExploreApi, useUserApi } from "~/composables/api";
|
||||
@@ -15,12 +14,12 @@ export const useCategoryData = function () {
|
||||
});
|
||||
};
|
||||
|
||||
export const useCategoryStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
export const useCategoryStore = function () {
|
||||
const api = useUserApi();
|
||||
return useStore<RecipeCategory>(store, loading, api.categories);
|
||||
};
|
||||
|
||||
export const usePublicCategoryStore = function (groupSlug: string, i18n?: Composer) {
|
||||
const api = usePublicExploreApi(groupSlug, i18n).explore;
|
||||
export const usePublicCategoryStore = function (groupSlug: string) {
|
||||
const api = usePublicExploreApi(groupSlug).explore;
|
||||
return useReadOnlyStore<RecipeCategory>(store, publicLoading, api.categories);
|
||||
};
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { Composer } from "vue-i18n";
|
||||
import { useReadOnlyStore, useStore } from "../partials/use-store-factory";
|
||||
import type { RecipeCookBook } from "~/lib/api/types/cookbook";
|
||||
import { usePublicExploreApi, useUserApi } from "~/composables/api";
|
||||
@@ -7,12 +6,12 @@ const store: Ref<RecipeCookBook[]> = ref([]);
|
||||
const loading = ref(false);
|
||||
const publicLoading = ref(false);
|
||||
|
||||
export const useCookbookStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
export const useCookbookStore = function () {
|
||||
const api = useUserApi();
|
||||
return useStore<RecipeCookBook>(store, loading, api.cookbooks);
|
||||
};
|
||||
|
||||
export const usePublicCookbookStore = function (groupSlug: string, i18n?: Composer) {
|
||||
const api = usePublicExploreApi(groupSlug, i18n).explore;
|
||||
export const usePublicCookbookStore = function (groupSlug: string) {
|
||||
const api = usePublicExploreApi(groupSlug).explore;
|
||||
return useReadOnlyStore<RecipeCookBook>(store, publicLoading, api.cookbooks);
|
||||
};
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { Composer } from "vue-i18n";
|
||||
import { useData, useReadOnlyStore, useStore } from "../partials/use-store-factory";
|
||||
import type { IngredientFood } from "~/lib/api/types/recipe";
|
||||
import { usePublicExploreApi, useUserApi } from "~/composables/api";
|
||||
@@ -16,12 +15,12 @@ export const useFoodData = function () {
|
||||
});
|
||||
};
|
||||
|
||||
export const useFoodStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
export const useFoodStore = function () {
|
||||
const api = useUserApi();
|
||||
return useStore<IngredientFood>(store, loading, api.foods);
|
||||
};
|
||||
|
||||
export const usePublicFoodStore = function (groupSlug: string, i18n?: Composer) {
|
||||
const api = usePublicExploreApi(groupSlug, i18n).explore;
|
||||
export const usePublicFoodStore = function (groupSlug: string) {
|
||||
const api = usePublicExploreApi(groupSlug).explore;
|
||||
return useReadOnlyStore<IngredientFood>(store, publicLoading, api.foods);
|
||||
};
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { Composer } from "vue-i18n";
|
||||
import { useReadOnlyStore } from "../partials/use-store-factory";
|
||||
import type { HouseholdSummary } from "~/lib/api/types/household";
|
||||
import { usePublicExploreApi, useUserApi } from "~/composables/api";
|
||||
@@ -7,12 +6,12 @@ const store: Ref<HouseholdSummary[]> = ref([]);
|
||||
const loading = ref(false);
|
||||
const publicLoading = ref(false);
|
||||
|
||||
export const useHouseholdStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
export const useHouseholdStore = function () {
|
||||
const api = useUserApi();
|
||||
return useReadOnlyStore<HouseholdSummary>(store, loading, api.households);
|
||||
};
|
||||
|
||||
export const usePublicHouseholdStore = function (groupSlug: string, i18n?: Composer) {
|
||||
const api = usePublicExploreApi(groupSlug, i18n).explore;
|
||||
export const usePublicHouseholdStore = function (groupSlug: string) {
|
||||
const api = usePublicExploreApi(groupSlug).explore;
|
||||
return useReadOnlyStore<HouseholdSummary>(store, publicLoading, api.households);
|
||||
};
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { Composer } from "vue-i18n";
|
||||
import { useData, useStore } from "../partials/use-store-factory";
|
||||
import type { MultiPurposeLabelOut } from "~/lib/api/types/labels";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
@@ -15,7 +14,7 @@ export const useLabelData = function () {
|
||||
});
|
||||
};
|
||||
|
||||
export const useLabelStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
export const useLabelStore = function () {
|
||||
const api = useUserApi();
|
||||
return useStore<MultiPurposeLabelOut>(store, loading, api.multiPurposeLabels);
|
||||
};
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { Composer } from "vue-i18n";
|
||||
import { useData, useReadOnlyStore, useStore } from "../partials/use-store-factory";
|
||||
import type { RecipeTag } from "~/lib/api/types/recipe";
|
||||
import { usePublicExploreApi, useUserApi } from "~/composables/api";
|
||||
@@ -15,12 +14,12 @@ export const useTagData = function () {
|
||||
});
|
||||
};
|
||||
|
||||
export const useTagStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
export const useTagStore = function () {
|
||||
const api = useUserApi();
|
||||
return useStore<RecipeTag>(store, loading, api.tags);
|
||||
};
|
||||
|
||||
export const usePublicTagStore = function (groupSlug: string, i18n?: Composer) {
|
||||
const api = usePublicExploreApi(groupSlug, i18n).explore;
|
||||
export const usePublicTagStore = function (groupSlug: string) {
|
||||
const api = usePublicExploreApi(groupSlug).explore;
|
||||
return useReadOnlyStore<RecipeTag>(store, publicLoading, api.tags);
|
||||
};
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { Composer } from "vue-i18n";
|
||||
import { useData, useReadOnlyStore, useStore } from "../partials/use-store-factory";
|
||||
import type { RecipeTool } from "~/lib/api/types/recipe";
|
||||
import { usePublicExploreApi, useUserApi } from "~/composables/api";
|
||||
@@ -21,12 +20,12 @@ export const useToolData = function () {
|
||||
});
|
||||
};
|
||||
|
||||
export const useToolStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
export const useToolStore = function () {
|
||||
const api = useUserApi();
|
||||
return useStore<RecipeTool>(store, loading, api.tools);
|
||||
};
|
||||
|
||||
export const usePublicToolStore = function (groupSlug: string, i18n?: Composer) {
|
||||
const api = usePublicExploreApi(groupSlug, i18n).explore;
|
||||
export const usePublicToolStore = function (groupSlug: string) {
|
||||
const api = usePublicExploreApi(groupSlug).explore;
|
||||
return useReadOnlyStore<RecipeTool>(store, publicLoading, api.tools);
|
||||
};
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { Composer } from "vue-i18n";
|
||||
import { useData, useStore } from "../partials/use-store-factory";
|
||||
import type { IngredientUnit } from "~/lib/api/types/recipe";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
@@ -16,7 +15,7 @@ export const useUnitData = function () {
|
||||
});
|
||||
};
|
||||
|
||||
export const useUnitStore = function (i18n?: Composer) {
|
||||
const api = useUserApi(i18n);
|
||||
export const useUnitStore = function () {
|
||||
const api = useUserApi();
|
||||
return useStore<IngredientUnit>(store, loading, api.units);
|
||||
};
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { Composer } from "vue-i18n";
|
||||
import { useReadOnlyStore } from "../partials/use-store-factory";
|
||||
import { useRequests } from "../api/api-client";
|
||||
import type { UserSummary } from "~/lib/api/types/user";
|
||||
@@ -12,8 +11,8 @@ class GroupUserAPIReadOnly extends BaseCRUDAPIReadOnly<UserSummary> {
|
||||
itemRoute = (idOrUsername: string | number) => `/groups/members/${idOrUsername}`;
|
||||
}
|
||||
|
||||
export const useUserStore = function (i18n?: Composer) {
|
||||
const requests = useRequests(i18n);
|
||||
export const useUserStore = function () {
|
||||
const requests = useRequests();
|
||||
const api = new GroupUserAPIReadOnly(requests);
|
||||
|
||||
return useReadOnlyStore<UserSummary>(store, loading, api, { orderBy: "full_name" });
|
||||
|
||||
@@ -9,7 +9,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "简体中文 (Chinese simplified)",
|
||||
value: "zh-CN",
|
||||
progress: 33,
|
||||
progress: 32,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -33,7 +33,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Svenska (Swedish)",
|
||||
value: "sv-SE",
|
||||
progress: 39,
|
||||
progress: 37,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -45,7 +45,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Slovenščina (Slovenian)",
|
||||
value: "sl-SI",
|
||||
progress: 39,
|
||||
progress: 37,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -93,7 +93,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Nederlands (Dutch)",
|
||||
value: "nl-NL",
|
||||
progress: 39,
|
||||
progress: 37,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -159,7 +159,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Français (French)",
|
||||
value: "fr-FR",
|
||||
progress: 38,
|
||||
progress: 37,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -213,7 +213,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Deutsch (German)",
|
||||
value: "de-DE",
|
||||
progress: 46,
|
||||
progress: 37,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
@@ -252,4 +252,4 @@ export const LOCALES = [
|
||||
progress: 26,
|
||||
dir: "ltr",
|
||||
},
|
||||
];
|
||||
]
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"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.",
|
||||
"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-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Grootmaat-URL-invoer",
|
||||
"debug-scraper": "Debug skraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Skep 'n resep deur dit 'n naam te gee. Alle resepte moet unieke name hê.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "No Food"
|
||||
},
|
||||
"reset-servings-count": "Reset Servings Count",
|
||||
"not-linked-ingredients": "Additional Ingredients",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recipe Finder",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"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.",
|
||||
"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-image": "إنشاء عن طريق صورة",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "الاستيراد باستخدام أكثر من URL ",
|
||||
"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.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "لا يوجد طعام"
|
||||
},
|
||||
"reset-servings-count": "إعادة تعيين عدد الحصص",
|
||||
"not-linked-ingredients": "مكونات إضافية",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "مكونات إضافية"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "البحث عن الوصفات",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"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.",
|
||||
"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-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Импортиране на рецепти от линк",
|
||||
"debug-scraper": "Отстраняване на грешки на скрейпъра",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Добави рецепта като предоставиш име. Всички рецепти трябва да имат уникални имена.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "No Food"
|
||||
},
|
||||
"reset-servings-count": "Reset Servings Count",
|
||||
"not-linked-ingredients": "Additional Ingredients",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recipe Finder",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Crear una recepta a partir d'una imatge",
|
||||
"create-recipe-from-an-image-description": "Crear una recepta pujant una imatge d'ella. Mealie intentarà extreure el text de la imatge mitjançant IA i crear-ne la recepta.",
|
||||
"crop-and-rotate-the-image": "Retalla i rota la imatge, per tal que només el text sigui visible, i estigui orientat correctament.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Crear des d'una imatge",
|
||||
"should-translate-description": "Tradueix la recepta a la meva llengua",
|
||||
"please-wait-image-procesing": "Si us plau, esperi, la imatge s'està processant. Això pot tardar un temps.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Importació d'URL en massa",
|
||||
"debug-scraper": "Rastrejador de depuració",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crea la recepta proporcionant-ne un nom. Totes les receptes han de tenir un nom únic.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Sense menjar"
|
||||
},
|
||||
"reset-servings-count": "Reiniciar racions servides",
|
||||
"not-linked-ingredients": "Ingredients addicionals",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Ingredients addicionals"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Cercador de receptes",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Vytvořit recept z obrázku",
|
||||
"create-recipe-from-an-image-description": "Vytvořte recept nahráním obrázku. Mealie se pokusí z obrázku extrahovat text pomocí AI a vytvořit z něj recept.",
|
||||
"crop-and-rotate-the-image": "Oříznout a otočit obrázek tak, aby byl viditelný pouze text a aby byl ve správné orientaci.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Vytvořit z obrázku",
|
||||
"should-translate-description": "Přeložit recept do mého jazyka",
|
||||
"please-wait-image-procesing": "Počkejte prosím, obrázek se zpracovává. Může to chvíli trvat.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Hromadný import adres URL",
|
||||
"debug-scraper": "Ladící Scraper",
|
||||
"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.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Žádné jídlo"
|
||||
},
|
||||
"reset-servings-count": "Resetovat počet porcí",
|
||||
"not-linked-ingredients": "Další ingredience",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Další ingredience"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Vyhledávač receptů",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Opret opskrift fra et billede",
|
||||
"create-recipe-from-an-image-description": "Opret en opskrift ved at overføre et billede af den. Mealie vil forsøge at udtrække teksten fra billedet med AI og oprette en opskrift fra det.",
|
||||
"crop-and-rotate-the-image": "Beskær og roter billedet, så kun teksten er synlig, og det vises i den rigtige retning.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Opret fra billede",
|
||||
"should-translate-description": "Oversæt opskriften til mit sprog",
|
||||
"please-wait-image-procesing": "Vent venligst, billedet behandles. Dette kan tage lidt tid.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Import fra flere URL-adresser",
|
||||
"debug-scraper": "Fejlsøg indlæser",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Opret en opskrift ved at angive navnet. Alle opskrifter skal have unikke navne.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Ingen fødevarer"
|
||||
},
|
||||
"reset-servings-count": "Nulstil antal serveringer",
|
||||
"not-linked-ingredients": "Yderligere ingredienser",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Yderligere ingredienser"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Opskriftssøger",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Rezept von einem Bild erstellen",
|
||||
"create-recipe-from-an-image-description": "Erstelle ein Rezept, indem du ein Bild hochlädst. Mealie wird versuchen, den Text aus dem Bild mit Hilfe von KI zu extrahieren und ein Rezept daraus zu erstellen.",
|
||||
"crop-and-rotate-the-image": "Beschneide und drehe das Bild so, dass nur der Text zu sehen ist und die Ausrichtung stimmt.",
|
||||
"create-from-images": "Aus Bildern erstellen",
|
||||
"create-from-image": "Vom Bild erstellen",
|
||||
"should-translate-description": "Übersetze das Rezept in meine Sprache",
|
||||
"please-wait-image-procesing": "Warte bitte, das Bild wird gerade bearbeitet. Dies kann einige Zeit dauern.",
|
||||
"please-wait-images-processing": "Bitte warten, die Bilder werden verarbeitet. Dies kann einige Zeit dauern.",
|
||||
"bulk-url-import": "URL Massenimport",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Erstelle ein Rezept, indem du den Namen angibst. Alle Rezepte müssen eindeutige Namen haben.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Kein Lebensmittel"
|
||||
},
|
||||
"reset-servings-count": "Portionen zurücksetzen",
|
||||
"not-linked-ingredients": "Zusätzliche Zutaten",
|
||||
"upload-another-image": "Weiteres Bild hochladen",
|
||||
"upload-images": "Bilder hochladen",
|
||||
"upload-more-images": "Weitere Bilder hochladen"
|
||||
"not-linked-ingredients": "Zusätzliche Zutaten"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Rezept-Suche",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Δημιουργία συνταγής από μια εικόνα",
|
||||
"create-recipe-from-an-image-description": "Δημιουργήστε μια συνταγή ανεβάζοντας μια εικόνα της. Το Mealie θα προσπαθήσει να εξάγει το κείμενο από την εικόνα χρησιμοποιώντας τεχνητή νοημοσύνη και να δημιουργήσει μια συνταγή από αυτό.",
|
||||
"crop-and-rotate-the-image": "Περικοπή και περιστροφή της εικόνας, έτσι ώστε να είναι μόνο το κείμενο ορατό και να είναι στο σωστό προσανατολισμό.",
|
||||
"create-from-images": "Δημιουργία από εικόνες",
|
||||
"create-from-image": "Δημιουργία από εικόνα",
|
||||
"should-translate-description": "Μετάφραση της συνταγής στη γλώσσα μου",
|
||||
"please-wait-image-procesing": "Παρακαλώ περιμένετε, η εικόνα είναι υπό επεξεργασία. Αυτό μπορεί να πάρει κάποιο χρόνο.",
|
||||
"please-wait-images-processing": "Παρακαλώ περιμένετε, οι εικόνες επεξεργάζονται. Αυτό μπορεί να πάρει κάποιο χρόνο.",
|
||||
"bulk-url-import": "Μαζική Εισαγωγή URL",
|
||||
"debug-scraper": "Εντοπισμός σφαλμάτων scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Δημιουργήστε μια συνταγή δίνοντας το όνομα. Ολες οι συνταγές πρέπει να έχουν μοναδικά ονόματα.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Χωρίς Τρόφιμο"
|
||||
},
|
||||
"reset-servings-count": "Επαναφορά μέτρησης μερίδων",
|
||||
"not-linked-ingredients": "Πρόσθετα συστατικά",
|
||||
"upload-another-image": "Ανέβασμα άλλης εικόνας",
|
||||
"upload-images": "Ανέβασμα εικόνων",
|
||||
"upload-more-images": "Ανέβασμα περισσότερων εικόνων"
|
||||
"not-linked-ingredients": "Πρόσθετα συστατικά"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Εύρεση συνταγών",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"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.",
|
||||
"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-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "No Food"
|
||||
},
|
||||
"reset-servings-count": "Reset Servings Count",
|
||||
"not-linked-ingredients": "Additional Ingredients",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recipe Finder",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Crear receta a partir de una imagen",
|
||||
"create-recipe-from-an-image-description": "Crea una receta cargando una imagen de ella. Mealie intentará extraer el texto de la imagen usando IA y crear una receta de ella.",
|
||||
"crop-and-rotate-the-image": "Recortar y rotar la imagen de manera que sólo el texto sea visible, y esté en la orientación correcta.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Crear desde imagen",
|
||||
"should-translate-description": "Traducir la receta a mi idioma",
|
||||
"please-wait-image-procesing": "Por favor, espere, la imagen se está procesando. Esto puede tardar un tiempo.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Importación masiva desde URL",
|
||||
"debug-scraper": "Depurar analizador",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crear una receta proporcionando el nombre. Todas las recetas deben tener nombres únicos.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Sin Comida"
|
||||
},
|
||||
"reset-servings-count": "Restablecer contador de porciones",
|
||||
"not-linked-ingredients": "Ingredientes adicionales",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Ingredientes adicionales"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Buscador de recetas",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Retsepti loomine pildist",
|
||||
"create-recipe-from-an-image-description": "Retsepti loomiseks lae üles selle pilt. Mealie üritab ekstraheerida pildil oleva teksti ning luua retsepti sellest kasutades AI-d.",
|
||||
"crop-and-rotate-the-image": "Kärpige ja pöörake pilti nii, et ainult tekst oleks nähtaval ja see oleks suunatud ülespoole.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Pildist loomine",
|
||||
"should-translate-description": "Tõlgi retsept minu keelde",
|
||||
"please-wait-image-procesing": "Palun oota, pilti töödeldakse veel. See võib võtta veidi aega.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Hulgiimport URL-ist",
|
||||
"debug-scraper": "Otsige Scraperis probleeme",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Loo retsept selle nime kasutades. Igal retseptil peab olema unikaalne nimi",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Toit puudub"
|
||||
},
|
||||
"reset-servings-count": "Lähtesta portsionite arv",
|
||||
"not-linked-ingredients": "Lisa-koostisosad",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Lisa-koostisosad"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Retsepti otsing",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Luo resepti kuvasta",
|
||||
"create-recipe-from-an-image-description": "Luo resepti tuomalla siitä kuva. Mealie pyrkii poimimaan tekstin kuvasta tekoälyllä ja luomaan siitä reseptin.",
|
||||
"crop-and-rotate-the-image": "Rajaa ja kierrä kuvaa niin, että vain teksti näkyy, ja että se on oikein päin.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Luo kuvasta",
|
||||
"should-translate-description": "Käännä resepti kielelleni",
|
||||
"please-wait-image-procesing": "Odota, että kuva käsitellään. Tämä voi kestää hetken.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Massa tuonti URL-osoitteesta",
|
||||
"debug-scraper": "Etsi ongelmia Scraperista",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Luo resepti antamalla nimi. Kaikilla resepteillä on oltava yksilölliset nimet.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Ei ruokaa"
|
||||
},
|
||||
"reset-servings-count": "Palauta Annoksien Määrä",
|
||||
"not-linked-ingredients": "Muut ainesosat",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Muut ainesosat"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Reseptin etsijä",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Créer une recette à partir d’une image",
|
||||
"create-recipe-from-an-image-description": "Créez une recette en téléchargeant une image de celle-ci. Mealie utilisera l’IA pour tenter d’extraire le texte et de créer une recette.",
|
||||
"crop-and-rotate-the-image": "Rogner et pivoter l’image pour que seul le texte soit visible, et qu’il soit dans la bonne orientation.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Créer à partir d’une image",
|
||||
"should-translate-description": "Traduire la recette dans ma langue",
|
||||
"please-wait-image-procesing": "Veuillez patienter, l’image est en cours de traitement. Cela peut prendre du temps.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Importation en masse d'URL",
|
||||
"debug-scraper": "Déboguer le récupérateur",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Créer une recette en fournissant le nom. Toutes les recettes doivent avoir des noms uniques.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Aucun aliment"
|
||||
},
|
||||
"reset-servings-count": "Réinitialiser le nombre de portions",
|
||||
"not-linked-ingredients": "Ingrédients supplémentaires",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Ingrédients supplémentaires"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recherche de recette",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Créer une recette à partir d’une image",
|
||||
"create-recipe-from-an-image-description": "Créez une recette en téléversant une image de celle-ci. Mealie utilisera l’IA pour tenter d’extraire le texte et de créer une recette.",
|
||||
"crop-and-rotate-the-image": "Rogner et pivoter l’image pour que seul le texte soit visible et qu’il soit dans la bonne orientation.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Créer à partir d’une image",
|
||||
"should-translate-description": "Traduire la recette dans ma langue",
|
||||
"please-wait-image-procesing": "Veuillez patienter, l'image est en cours de traitement. Cela peut prendre un certain temps.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Importation en masse d'URL",
|
||||
"debug-scraper": "Déboguer le récupérateur",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Créer une recette en fournissant le nom. Toutes les recettes doivent avoir des noms uniques.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Aucun aliment"
|
||||
},
|
||||
"reset-servings-count": "Réinitialiser le nombre de portions",
|
||||
"not-linked-ingredients": "Ingrédients supplémentaires",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Ingrédients supplémentaires"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recherche de recette",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Créer une recette à partir d’une image",
|
||||
"create-recipe-from-an-image-description": "Créez une recette en téléchargeant une image de celle-ci. Mealie utilisera l’IA pour tenter d’extraire le texte et de créer une recette.",
|
||||
"crop-and-rotate-the-image": "Rogner et pivoter l’image pour que seul le texte soit visible, et qu’il soit dans la bonne orientation.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Créer à partir d’une image",
|
||||
"should-translate-description": "Traduire la recette dans ma langue",
|
||||
"please-wait-image-procesing": "Veuillez patienter, l’image est en cours de traitement. Cela peut prendre du temps.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Importation en masse d'URL",
|
||||
"debug-scraper": "Déboguer le récupérateur",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Créer une recette en fournissant le nom. Toutes les recettes doivent avoir des noms uniques.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Aucun aliment"
|
||||
},
|
||||
"reset-servings-count": "Réinitialiser le nombre de portions",
|
||||
"not-linked-ingredients": "Ingrédients supplémentaires",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Ingrédients supplémentaires"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recherche de recette",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Crear receita a partir dunha imaxen",
|
||||
"create-recipe-from-an-image-description": "Cree unha receita cargando unha imaxen da mesma. O Mealie tentará extrair o texto da imaxen utilizando IA e creará unha receita a partir da mesma.",
|
||||
"crop-and-rotate-the-image": "Recorte e vire a imaxen de modo a que só o texto sexa visível e na orientación correta.",
|
||||
"create-from-images": "Crear a partir de imaxens",
|
||||
"create-from-image": "Crear a partir da imaxen",
|
||||
"should-translate-description": "Traducir a receita para a miña língua",
|
||||
"please-wait-image-procesing": "Por favor agarde, a imaxen está sendo procesada. Isto pode levar algun tempo.",
|
||||
"please-wait-images-processing": "Por favor agarde, as imaxens están a ser procesadas. Isto pode levar algún tempo.",
|
||||
"bulk-url-import": "Importación de URL en Masa",
|
||||
"debug-scraper": "Depurar Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Cree unha receita introducindo o nome. Todas as receitas deven ter nomes únicos.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Sen Comida"
|
||||
},
|
||||
"reset-servings-count": "Reiniciar Contador de Porcións",
|
||||
"not-linked-ingredients": "Ingredientes Adicionais",
|
||||
"upload-another-image": "Cargar outra imaxen",
|
||||
"upload-images": "Cargar imaxens",
|
||||
"upload-more-images": "Cargar mais imaxens"
|
||||
"not-linked-ingredients": "Ingredientes Adicionais"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Localizador de Receitas",
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
"category-filter": "סינון קטגוריות",
|
||||
"category-update-failed": "עדכון קטגוריה נכשל",
|
||||
"category-updated": "קטגוריה עודכנה",
|
||||
"uncategorized-count": "{count} לא קיבלו קטגוריה",
|
||||
"uncategorized-count": "{count} לא קוטלגו",
|
||||
"create-a-category": "יצירת קטגוריה",
|
||||
"category-name": "שם קטגוריה",
|
||||
"category": "קטגוריה"
|
||||
@@ -60,17 +60,17 @@
|
||||
"new-notification-form-description": "Mקשךןק עושה שימוש בספריה בשם Apprise לשליחת התראות. Apprise מציעה אפשרויות רבות עבור התראות לבעלי שירותים. פנה לאתר הWiki של Apprise להסבר מלא על יצירת לינקים לשירות שלך.",
|
||||
"new-version": "גרסה חדשה זמינה!",
|
||||
"notification": "התראה",
|
||||
"refresh": "רענון",
|
||||
"refresh": "רענן",
|
||||
"scheduled": "מתוזמן",
|
||||
"something-went-wrong": "משהו השתבש!",
|
||||
"subscribed-events": "אירועים שנרשמת אליהם",
|
||||
"test-message-sent": "הודעת בדיקה נשלחה",
|
||||
"message-sent": "ההודעה נשלחה",
|
||||
"new-notification": "התראה חדשה",
|
||||
"event-notifiers": "מנגנוני התרעה על אירועים",
|
||||
"event-notifiers": "אירועי נוטיפיקציות",
|
||||
"apprise-url-skipped-if-blank": "כתובת Apprise (דלג אם ריק)",
|
||||
"enable-notifier": "הפעלת מתריע",
|
||||
"what-events": "לאילו אירועים לרשום את מתריע זה?",
|
||||
"enable-notifier": "אישור נוטיפיקציות",
|
||||
"what-events": "לאילו אירועים להרשם בערוץ התראות זה?",
|
||||
"user-events": "אירועי משתמש",
|
||||
"mealplan-events": "אירועי תכנון ארוחות",
|
||||
"when-a-user-in-your-group-creates-a-new-mealplan": "כאשר משתמש בקבוצה שלך יוצר תכנון ארוחות חדש",
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "יצירת מתכון מתמונה",
|
||||
"create-recipe-from-an-image-description": "יצירת מתכון ע\"י העלאת תמונה שלו. Mealie תנסה לחלץ את הטקסט מהתמונה באמצעות AI ותייצר ממנו מתכון.",
|
||||
"crop-and-rotate-the-image": "נא לחתוך ולסובב את התמונה כך שרואים רק את הטקסט, והוא בכיוון הנכון.",
|
||||
"create-from-images": "יצירה מתמונה",
|
||||
"create-from-image": "יצירה מתמונה",
|
||||
"should-translate-description": "תרגום המתכון לשפה שלי",
|
||||
"please-wait-image-procesing": "נה להמתין, התמונה עוברת עיבוץ. זה יכול לקחת זמן.",
|
||||
"please-wait-images-processing": "נא להמתין, מנתח את התמונות. זה יכול לקחת זמן מה.",
|
||||
"bulk-url-import": "ייבוא מספר לינקים",
|
||||
"debug-scraper": "סורק לניפוי שגיאות",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "יצירת מתכון באמצעות שם. כל שמות המתכונים צריכים להיות שונים.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "אין אוכל"
|
||||
},
|
||||
"reset-servings-count": "איפוס מספר המנות",
|
||||
"not-linked-ingredients": "מרכיבים נוספים",
|
||||
"upload-another-image": "העלאת תמונה נוספת",
|
||||
"upload-images": "העלאת תמונות",
|
||||
"upload-more-images": "העלאת תמונות נוספות"
|
||||
"not-linked-ingredients": "מרכיבים נוספים"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "מצא מתכון",
|
||||
@@ -1342,7 +1338,7 @@
|
||||
"manage-cookbooks": "ניהול ספרי בישול",
|
||||
"manage-members": "ניהול משתמשים",
|
||||
"manage-webhooks": "ניהול Webhooks",
|
||||
"manage-notifiers": "ניהול מתריעים",
|
||||
"manage-notifiers": "ניהול ערוצי התראות",
|
||||
"manage-data-migrations": "ניהול מיגרציות מידע"
|
||||
},
|
||||
"cookbook": {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"docs": "Dokumenti",
|
||||
"download-log": "Preuzmi zapisnik",
|
||||
"download-recipe-json": "Posljednji prikupljeni JSON",
|
||||
"github": "Github",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Bilježi zapisnik",
|
||||
"not-demo": "Nije Demo",
|
||||
"portfolio": "Portfelj",
|
||||
@@ -253,9 +253,9 @@
|
||||
"default-recipe-preferences": "Zadane Postavke Recepata",
|
||||
"group-preferences": "Postavke Grupe",
|
||||
"private-group": "Privatna Grupa",
|
||||
"private-group-description": "Postavljanje tvoje grupe na privatni režim će onemogućiti sve opcije javnog prikaza. To će poništiti bilo koju pojedinačnu postavku za javni prikaz",
|
||||
"enable-public-access": "Dozvoli javni pristup",
|
||||
"enable-public-access-description": "Napravite grupne recepte javnim kao zadanu vrijednost i omogući posjetiteljima pregled recepata bez prijave",
|
||||
"private-group-description": "Setting your group to private will disable all public view options. This overrides any individual public view settings",
|
||||
"enable-public-access": "Enable Public Access",
|
||||
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes": "Dopustite korisnicima izvan vaše grupe da vide vaše recepte",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Kada je omogućeno, možete koristiti javnu povezncu dijeljene veze za dijeljenje određenih recepata bez autorizacije korisnika. Kada je onemogućeno, recepte možete dijeliti samo s korisnicima koji su u vašoj grupi ili s prethodno generiranom privatnom vezom",
|
||||
"show-nutrition-information": "Prikaži prehrambene vrijednosti",
|
||||
@@ -267,36 +267,36 @@
|
||||
"disable-users-from-commenting-on-recipes": "Onemogući korisnicima da komentiraju recepte",
|
||||
"disable-users-from-commenting-on-recipes-description": "Skriva sekciju komentara na stranici recepta i onemogućuje komentiranje",
|
||||
"disable-organizing-recipe-ingredients-by-units-and-food": "Onemogući organiziranje sastojaka recepata prema jedinicama i namirnicama",
|
||||
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Sakriva polja za Hranu, Jedinicu i Količinu za sastojke te tretira sastojke kao obična tekstualna polja",
|
||||
"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",
|
||||
"general-preferences": "Opće postavke",
|
||||
"group-recipe-preferences": "Postavke Recepata Grupe",
|
||||
"report": "Izvješće",
|
||||
"report-with-id": "ID Izvješća: {id}",
|
||||
"report-with-id": "Report ID: {id}",
|
||||
"group-management": "Upravljanje Grupom",
|
||||
"admin-group-management": "Upravljanje Grupom od strane Administratora",
|
||||
"admin-group-management-text": "Promjene u ovoj grupi će se odmah odraziti.",
|
||||
"group-id-value": "Id grupe: {0}",
|
||||
"total-households": "Ukupno kućanstava",
|
||||
"you-must-select-a-group-before-selecting-a-household": "Prije odabira kućanstva morate odabrati grupu"
|
||||
"total-households": "Total Households",
|
||||
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
|
||||
},
|
||||
"household": {
|
||||
"household": "Domaćinstvo",
|
||||
"households": "Domaćinstva",
|
||||
"user-household": "Korisničko domaćinstvo",
|
||||
"create-household": "Napravi domaćinstvo",
|
||||
"household-name": "Ime domaćinstva",
|
||||
"household-group": "Grupa domaćinstva",
|
||||
"household-management": "Upravitelji domaćinstva",
|
||||
"manage-households": "Upravljanje domaćinstvom",
|
||||
"admin-household-management": "Administratorsko upravljanje domaćinstvom",
|
||||
"admin-household-management-text": "Promjene u ovom domaćinstvo će se odraziti odmah.",
|
||||
"household-id-value": "ID domaćinstva: {0}",
|
||||
"private-household": "Privatno domaćinstvo",
|
||||
"private-household-description": "Postavljanje tvojeg domaćinstva na privatni režim će onemogućiti sve opcije javnog prikaza. To će poništiti bilo koju pojedinačnu postavku za javni prikaz",
|
||||
"lock-recipe-edits-from-other-households": "Onemogućite izmjene recepata iz drugih domaćinstva",
|
||||
"lock-recipe-edits-from-other-households-description": "Kada je omogućeno, samo korisnici u tvojem domaćinstvu mogu uređivati recepte izrađene u tvojem domaćinstvu",
|
||||
"household-recipe-preferences": "Postavke recepata u domaćinstvu",
|
||||
"default-recipe-preferences-description": "Ovo su zadane postavke, kada se u tvojem domaćinstvu izradi novi recept. Ove postavke se mogu promijeniti za pojedinačne recepte u izborniku postavki recepata.",
|
||||
"household": "Household",
|
||||
"households": "Households",
|
||||
"user-household": "User Household",
|
||||
"create-household": "Create Household",
|
||||
"household-name": "Household Name",
|
||||
"household-group": "Household Group",
|
||||
"household-management": "Household Management",
|
||||
"manage-households": "Manage Households",
|
||||
"admin-household-management": "Admin Household Management",
|
||||
"admin-household-management-text": "Changes to this household will be reflected immediately.",
|
||||
"household-id-value": "Household Id: {0}",
|
||||
"private-household": "Private Household",
|
||||
"private-household-description": "Setting your household to private will disable all public view options. This overrides any individual public view settings",
|
||||
"lock-recipe-edits-from-other-households": "Lock recipe edits from other households",
|
||||
"lock-recipe-edits-from-other-households-description": "When enabled only users in your household can edit recipes created by your household",
|
||||
"household-recipe-preferences": "Household Recipe Preferences",
|
||||
"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.",
|
||||
"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-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",
|
||||
"household-preferences": "Household Preferences"
|
||||
@@ -599,10 +599,9 @@
|
||||
"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.",
|
||||
"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-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Uvoz više URL-ova",
|
||||
"debug-scraper": "Debugiranje skraper-a",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Kreirajte recept pružajući naziv. Svi recepti moraju imati jedinstvena imena.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "No Food"
|
||||
},
|
||||
"reset-servings-count": "Reset Servings Count",
|
||||
"not-linked-ingredients": "Additional Ingredients",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recipe Finder",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Recept készítése képről",
|
||||
"create-recipe-from-an-image-description": "Hozzon létre egy receptet egy kép feltöltésével. A Mealie megpróbálja a kép szövegét mesterséges intelligencia segítségével kinyerni, és létrehozni belőle a receptet.",
|
||||
"crop-and-rotate-the-image": "Vágja ki és forgassa el a képet úgy, hogy csak a szöveg legyen látható, és megfelelő tájolásban legyen.",
|
||||
"create-from-images": "Létrehozás képekről",
|
||||
"create-from-image": "Létrehozás képről",
|
||||
"should-translate-description": "Fordítsa le a receptet a saját nyelvemre",
|
||||
"please-wait-image-procesing": "Kérjük várjon, a kép feldolgozása folyamatban van. Ez eltarthat egy ideig.",
|
||||
"please-wait-images-processing": "Kérjük várjon, a képek feldolgozása folyamatban van. Ez eltarthat egy ideig.",
|
||||
"bulk-url-import": "Tömeges URL importálás",
|
||||
"debug-scraper": "Hibakeresés az adatkinyerőben",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Hozzon létre egy receptet a név megadásával. Minden receptnek egyedi névvel kell rendelkeznie.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Élelmiszer nélküli"
|
||||
},
|
||||
"reset-servings-count": "Adagok számának visszaállítása",
|
||||
"not-linked-ingredients": "Kiegészítő hozzávalók",
|
||||
"upload-another-image": "Másik kép feltöltése",
|
||||
"upload-images": "Képek feltöltése",
|
||||
"upload-more-images": "További képek feltöltése"
|
||||
"not-linked-ingredients": "Kiegészítő hozzávalók"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Receptkereső",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"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.",
|
||||
"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-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "No Food"
|
||||
},
|
||||
"reset-servings-count": "Reset Servings Count",
|
||||
"not-linked-ingredients": "Additional Ingredients",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recipe Finder",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Crea ricetta da un'immagine",
|
||||
"create-recipe-from-an-image-description": "Crea una ricetta caricando un'immagine di essa. Mealie tenterà di estrarre il testo dall'immagine usando l'IA e creare una ricetta da esso.",
|
||||
"crop-and-rotate-the-image": "Ritaglia e ruota l'immagine in modo che solo il testo sia visibile e che sia orientato correttamente.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Crea da Immagine",
|
||||
"should-translate-description": "Traduci la ricetta nella mia lingua",
|
||||
"please-wait-image-procesing": "Attendere, l'immagine è in fase di elaborazione. Potrebbe volerci un po' di tempo.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Importazione multipla URL",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crea una ricetta fornendo il nome. Tutte le ricette devono avere nomi univoci.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Nessun Alimento"
|
||||
},
|
||||
"reset-servings-count": "Reimposta conteggio porzioni",
|
||||
"not-linked-ingredients": "Ingredienti Aggiuntivi",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Ingredienti Aggiuntivi"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Trova ricette",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "画像からレシピを作成",
|
||||
"create-recipe-from-an-image-description": "画像をアップロードしてレシピを作成します。 Mealieは、AIを使用して画像からテキストを抽出し、そこからレシピを作成しようとします。",
|
||||
"crop-and-rotate-the-image": "テキストのみが表示され、正しい方向になるように画像をトリミングして回転します。",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "画像から作成",
|
||||
"should-translate-description": "レシピを自分の言語に翻訳",
|
||||
"please-wait-image-procesing": "しばらくお待ちください。画像は処理中です。時間がかかる場合があります。",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "URL 一括インポート",
|
||||
"debug-scraper": "デバッグスクレーパー",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "名前を指定してレシピを作成します。すべてのレシピには固有の名前が必要です。",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "食材はありません"
|
||||
},
|
||||
"reset-servings-count": "サービング数をリセット",
|
||||
"not-linked-ingredients": "追加の材料",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "追加の材料"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "レシピ検索",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"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.",
|
||||
"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-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "No Food"
|
||||
},
|
||||
"reset-servings-count": "Reset Servings Count",
|
||||
"not-linked-ingredients": "Additional Ingredients",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recipe Finder",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"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.",
|
||||
"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-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Masinis URL importavimas",
|
||||
"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.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "No Food"
|
||||
},
|
||||
"reset-servings-count": "Reset Servings Count",
|
||||
"not-linked-ingredients": "Additional Ingredients",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recipe Finder",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Izveidojiet recepti no attēla",
|
||||
"create-recipe-from-an-image-description": "Izveidojiet recepti, augšupielādējot tās attēlu. Mealie mēģinās iegūt tekstu no attēla, izmantojot AI, un no tā izveidot recepti.",
|
||||
"crop-and-rotate-the-image": "Apgrieziet un pagrieziet attēlu tā, lai būtu redzams tikai teksts un tas būtu pareizajā orientācijā.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Izveidot no attēla",
|
||||
"should-translate-description": "Tulkojiet recepti manā valodā",
|
||||
"please-wait-image-procesing": "Lūdzu, pagaidiet, attēls tiek apstrādāts. Tas var aizņemt kādu laiku.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Lielapjoma URL importēšana",
|
||||
"debug-scraper": "Atkļūdošanas skrāpis",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Izveidojiet recepti, norādot nosaukumu. Visām receptēm jābūt unikāliem nosaukumiem.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Nav pārtikas"
|
||||
},
|
||||
"reset-servings-count": "Atiestatīt porciju skaitu",
|
||||
"not-linked-ingredients": "Additional Ingredients",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Additional Ingredients"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recipe Finder",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Maak recept van de tekst op een afbeelding",
|
||||
"create-recipe-from-an-image-description": "Maak een recept door een afbeelding ervan te uploaden. Mealie probeert de tekst met behulp van AI uit de afbeelding te halen en er een recept uit te maken.",
|
||||
"crop-and-rotate-the-image": "Snijd de afbeelding bij zodat alleen tekst zichtbaar is. En draai t plaatje zodat het leesbaar is.",
|
||||
"create-from-images": "Maak recept van een afbeelding",
|
||||
"create-from-image": "Maken vanuit afbeelding",
|
||||
"should-translate-description": "Vertaal het recept in mijn taal",
|
||||
"please-wait-image-procesing": "Even wachten. Mealie verwerkt de afbeelding. Dit kan even duren.",
|
||||
"please-wait-images-processing": "Even wachten. Mealie verwerkt de afbeelding. Dit kan even duren.",
|
||||
"bulk-url-import": "URL-import in bulk",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Maak een recept door het een naam te geven. Alle recepten moeten unieke namen hebben.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Geen levensmiddel"
|
||||
},
|
||||
"reset-servings-count": "Zet de teller van aantal keer gegeten op nul",
|
||||
"not-linked-ingredients": "Extra ingrediënten",
|
||||
"upload-another-image": "Een andere afbeelding uploaden",
|
||||
"upload-images": "Afbeelding uploaden",
|
||||
"upload-more-images": "Meer afbeeldingen uploaden"
|
||||
"not-linked-ingredients": "Extra ingrediënten"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Recept zoeker",
|
||||
|
||||
@@ -323,8 +323,8 @@
|
||||
"mealplan-updated": "Måltidsplan oppdatert",
|
||||
"mealplan-households-description": "Hvis ingen husholdning er valgt, kan oppskrifter legges til fra hvilken som helst husholdning",
|
||||
"any-category": "Enhver kategori",
|
||||
"any-tag": "Hvilken som helst emne",
|
||||
"any-household": "Hvilken som helst husholdning",
|
||||
"any-tag": "Any Tag",
|
||||
"any-household": "Any Household",
|
||||
"no-meal-plan-defined-yet": "Ingen måltidsplan er definert ennå",
|
||||
"no-meal-planned-for-today": "Ingen måltid planlagt i dag",
|
||||
"numberOfDays-hint": "Antall dager på sideinnlasting",
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Opprett oppskrift fra et bilde",
|
||||
"create-recipe-from-an-image-description": "Opprett en oppskrift ved å laste opp et bilde av den. Mealie vil forsøke å hente ut teksten fra bildet ved bruk av AI, og lage en ny oppskrift.",
|
||||
"crop-and-rotate-the-image": "Beskjær og roter bildet slik at bare teksten er synlig, og at det er i riktig retning.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Opprett fra bilde",
|
||||
"should-translate-description": "Oversett oppskriften til mitt språk",
|
||||
"please-wait-image-procesing": "Vent litt, bildet blir prosessert. Dette kan ta litt tid.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Importer flere nettadresser",
|
||||
"debug-scraper": "Feilsøk skraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Opprett en oppskrift ved å angi navnet. Alle oppskrifter må ha unike navn.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Ingen matvarer"
|
||||
},
|
||||
"reset-servings-count": "Nullstill antall porsjoner",
|
||||
"not-linked-ingredients": "Tilleggsingredienser",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Tilleggsingredienser"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Oppskriftsfinner",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Utwórz przepis z obrazu",
|
||||
"create-recipe-from-an-image-description": "Utwórz przepis poprzez przesłanie obrazka. Mealie spróbuje wyodrębnić tekst z obrazu za pomocą AI i utworzyć z niego przepis.",
|
||||
"crop-and-rotate-the-image": "Przytnij i obróć obraz, tak aby był w odpowiedniej orientacji i był widoczny tylko tekst.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Utwórz z obrazu",
|
||||
"should-translate-description": "Przetłumacz przepis na mój język",
|
||||
"please-wait-image-procesing": "Proszę czekać, obraz jest przetwarzany. To może chwilę potrwać.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Import Zbiorczy z URL",
|
||||
"debug-scraper": "Debuguj Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Utwórz przepis, podając nazwę. Wszystkie przepisy muszą mieć unikalne nazwy.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Brak potrawy"
|
||||
},
|
||||
"reset-servings-count": "Zresetuj liczbę porcji",
|
||||
"not-linked-ingredients": "Dodatkowe składniki",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Dodatkowe składniki"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Wyszukiwarka przepisów",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"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.",
|
||||
"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-image": "Criar a partir da imagem",
|
||||
"should-translate-description": "Traduza a receita para o meu idioma",
|
||||
"please-wait-image-procesing": "Por favor aguarde, a imagem está sendo processada. Isto pode levar algum tempo.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Importação de URL em massa",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crie uma receita fornecendo o nome. Todas as receitas devem ter nomes exclusivos.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Sem Comida"
|
||||
},
|
||||
"reset-servings-count": "Reset Servings Count",
|
||||
"not-linked-ingredients": "Ingredientes adicionais",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Ingredientes adicionais"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Localizador de Receitas",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Criar receita a partir de uma imagem",
|
||||
"create-recipe-from-an-image-description": "Crie uma receita carregando uma imagem da mesma. O Mealie tentará extrair o texto da imagem utilizando IA e criará uma receita a partir da mesma.",
|
||||
"crop-and-rotate-the-image": "Recorte e rode a imagem de modo a que apenas o texto seja visível e esteja na orientação correta.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Criar a partir de imagem",
|
||||
"should-translate-description": "Traduzir a receita para a minha língua",
|
||||
"please-wait-image-procesing": "Aguarde, a imagem está a ser processada. Isto pode demorar algum tempo.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Importação de URL em bloco",
|
||||
"debug-scraper": "Depurar Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crie uma receita fornecendo o nome. Todas as receitas devem ter nomes únicos.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Nenhum Ingrediente"
|
||||
},
|
||||
"reset-servings-count": "Reiniciar Contador de Doses",
|
||||
"not-linked-ingredients": "Ingredientes Adicionais",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Ingredientes Adicionais"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Localizador de Receitas",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Creează o rețetă dintr-o imagine",
|
||||
"create-recipe-from-an-image-description": "Creează o rețetă prin încărcarea unei imagini a acesteia. Mealie va încerca să extragă textul din imagine folosind AI și să creeze o rețetă din el.",
|
||||
"crop-and-rotate-the-image": "Decupați și rotiți imaginea astfel încât numai textul să fie vizibil, iar orientarea să fie corectă.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Creează din Imagine",
|
||||
"should-translate-description": "Tradu rețeta în limba mea",
|
||||
"please-wait-image-procesing": "Te rog așteaptă, imaginea este procesata. Acest lucru poate dura ceva timp.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Import URL în bulk",
|
||||
"debug-scraper": "Depanare funcție Importare",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Creează o rețetă furnizând numele. Toate rețetele trebuie să aibă nume unice.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Niciun aliment"
|
||||
},
|
||||
"reset-servings-count": "Resetează numărul de serviri",
|
||||
"not-linked-ingredients": "Ingrediente suplimentare",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Ingrediente suplimentare"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Căutător de rețete",
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"demo-status": "Демо-статус",
|
||||
"development": "В разработке",
|
||||
"docs": "Справка",
|
||||
"download-log": "Скачать журнал",
|
||||
"download-log": "Скачать лог",
|
||||
"download-recipe-json": "Последний распаршенный JSON",
|
||||
"github": "GitHub",
|
||||
"log-lines": "Строки журнала",
|
||||
@@ -22,7 +22,7 @@
|
||||
"production": "Production",
|
||||
"support": "Поддержка",
|
||||
"version": "Версия",
|
||||
"unknown-version": "неизвестно",
|
||||
"unknown-version": "неизвестный",
|
||||
"sponsor": "Спонсор"
|
||||
},
|
||||
"asset": {
|
||||
@@ -51,7 +51,7 @@
|
||||
"category": "Категория"
|
||||
},
|
||||
"events": {
|
||||
"apprise-url": "Apprise URL",
|
||||
"apprise-url": "URL-адрес",
|
||||
"database": "База данных",
|
||||
"delete-event": "Удалить событие",
|
||||
"event-delete-confirmation": "Вы уверены, что хотите удалить данное событие?",
|
||||
@@ -196,7 +196,7 @@
|
||||
"copy": "Копировать",
|
||||
"color": "Цвет",
|
||||
"timestamp": "Время",
|
||||
"last-made": "Последнее приготовление",
|
||||
"last-made": "Последний раз сделано",
|
||||
"learn-more": "Подробнее",
|
||||
"this-feature-is-currently-inactive": "Эта функция в настоящее время неактивна",
|
||||
"clipboard-not-supported": "Буфер обмена не поддерживается",
|
||||
@@ -212,7 +212,7 @@
|
||||
"unsaved-changes": "У вас есть несохраненные изменения. Вы хотите сохранить их перед выходом?",
|
||||
"clipboard-copy-failure": "Не удалось скопировать текст.",
|
||||
"confirm-delete-generic-items": "Вы уверены, что хотите удалить следующие элементы?",
|
||||
"organizers": "Органайзеры",
|
||||
"organizers": "Организаторы",
|
||||
"caution": "Внимание",
|
||||
"show-advanced": "Показать расширенные",
|
||||
"add-field": "Добавить поле",
|
||||
@@ -236,7 +236,7 @@
|
||||
"group-with-value": "Группа: {groupID}",
|
||||
"groups": "Группы",
|
||||
"manage-groups": "Настройки групп",
|
||||
"user-group": "Группа пользователя",
|
||||
"user-group": "Пользовательская группа",
|
||||
"user-group-created": "Пользовательская группа создана",
|
||||
"user-group-creation-failed": "Не удалось создать пользовательскую группу",
|
||||
"settings": {
|
||||
@@ -246,14 +246,14 @@
|
||||
"manage-members": "Настройки участников",
|
||||
"manage-members-description": "Пользователь",
|
||||
"manage": "Редактировать",
|
||||
"manage-household": "Управление Домом",
|
||||
"manage-household": "Manage Household",
|
||||
"invite": "Пригласить",
|
||||
"looking-to-update-your-profile": "Хотите обновить свой профиль?",
|
||||
"default-recipe-preferences-description": "Это настройки по умолчанию при создании нового рецепта в вашей группе. Они могут быть изменены для отдельных рецептов в меню настроек рецепта.",
|
||||
"default-recipe-preferences": "Настройки рецептов по умолчанию",
|
||||
"group-preferences": "Настройки группы",
|
||||
"private-group": "Частная группа",
|
||||
"private-group-description": "Установка для вашей группы в приватную отключит все опции общего просмотра. Это переопределит любые настройки публичного просмотра",
|
||||
"private-group": "Приватная группа",
|
||||
"private-group-description": "Setting your group to private will disable all public view options. This overrides any individual public view settings",
|
||||
"enable-public-access": "Включить публичный доступ",
|
||||
"enable-public-access-description": "Сделать группу рецептов доступными публично и разрешить посетителям просмотр рецептов без авторизации",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes": "Разрешить пользователям за пределами вашей группы видеть ваши рецепты",
|
||||
@@ -267,7 +267,7 @@
|
||||
"disable-users-from-commenting-on-recipes": "Запретить пользователям комментировать рецепты",
|
||||
"disable-users-from-commenting-on-recipes-description": "Скрывает раздел комментариев на странице рецепта и отключает комментирование",
|
||||
"disable-organizing-recipe-ingredients-by-units-and-food": "Отключить организацию ингредиентов рецептов по единицам измерения и продуктам",
|
||||
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Скрывает поля продуктов, единиц измерения и количества для ингредиентов и рассматривает ингредиенты как простые текстовые поля",
|
||||
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields",
|
||||
"general-preferences": "Общие настройки",
|
||||
"group-recipe-preferences": "Настройки для рецептов в группе",
|
||||
"report": "Отчет",
|
||||
@@ -276,30 +276,30 @@
|
||||
"admin-group-management": "Управление группой администраторов",
|
||||
"admin-group-management-text": "Изменения в этой группе будут отражены немедленно.",
|
||||
"group-id-value": "Id группы: {0}",
|
||||
"total-households": "Всего домохозяйств",
|
||||
"you-must-select-a-group-before-selecting-a-household": "Вы должны выбрать группу, прежде чем выбирать домохозяйство"
|
||||
"total-households": "Total Households",
|
||||
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
|
||||
},
|
||||
"household": {
|
||||
"household": "Домохозяйство",
|
||||
"households": "Домохозяйства",
|
||||
"user-household": "Домохозяйство пользователя",
|
||||
"create-household": "Создать домохозяйство",
|
||||
"household-name": "Название домохозяйства",
|
||||
"household-group": "Группа домохозяйства",
|
||||
"household-management": "Управление домохозяйствами",
|
||||
"manage-households": "Управление Домами",
|
||||
"household": "Household",
|
||||
"households": "Households",
|
||||
"user-household": "User Household",
|
||||
"create-household": "Create Household",
|
||||
"household-name": "Household Name",
|
||||
"household-group": "Household Group",
|
||||
"household-management": "Household Management",
|
||||
"manage-households": "Manage Households",
|
||||
"admin-household-management": "Admin Household Management",
|
||||
"admin-household-management-text": "Изменения в данном домохозяйстве будут отражены немедленно.",
|
||||
"household-id-value": "Id домохозяйства: {0}",
|
||||
"private-household": "Частное домохозяйство",
|
||||
"private-household-description": "Переключение домохозяйства в приватное отключит все настройки публичного доступа. Это так же переписывает все индивидуальные настройки публичного доступа",
|
||||
"lock-recipe-edits-from-other-households": "Заблокировать изменения рецепта от других домохозяйств",
|
||||
"lock-recipe-edits-from-other-households-description": "Если включено, только пользователи в вашем домашнем хозяйстве могут редактировать рецепты, созданные вашим домашним хозяйством",
|
||||
"household-recipe-preferences": "Предпочтения для рецептов домашнего хозяйства",
|
||||
"default-recipe-preferences-description": "Это настройки по умолчанию, когда в вашем домашнем хозяйстве создается новый рецепт. Они могут быть изменены для отдельных рецептов в меню настроек рецепта.",
|
||||
"allow-users-outside-of-your-household-to-see-your-recipes": "Разрешить пользователям вне вашего домохозяйства видеть ваши рецепты",
|
||||
"admin-household-management-text": "Changes to this household will be reflected immediately.",
|
||||
"household-id-value": "Household Id: {0}",
|
||||
"private-household": "Private Household",
|
||||
"private-household-description": "Setting your household to private will disable all public view options. This overrides any individual public view settings",
|
||||
"lock-recipe-edits-from-other-households": "Lock recipe edits from other households",
|
||||
"lock-recipe-edits-from-other-households-description": "When enabled only users in your household can edit recipes created by your household",
|
||||
"household-recipe-preferences": "Household Recipe Preferences",
|
||||
"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.",
|
||||
"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-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",
|
||||
"household-preferences": "Параметры домохозяйства"
|
||||
"household-preferences": "Household Preferences"
|
||||
},
|
||||
"meal-plan": {
|
||||
"create-a-new-meal-plan": "Создать новый план питания",
|
||||
@@ -321,10 +321,10 @@
|
||||
"mealplan-settings": "Настройки плана питания",
|
||||
"mealplan-update-failed": "Не удалось обновить план питания",
|
||||
"mealplan-updated": "План питания обновлен",
|
||||
"mealplan-households-description": "Если домохозяйство не выбрано, то рецепты могут быть добавлены из любого домашнего хозяйства",
|
||||
"mealplan-households-description": "If no household is selected, recipes can be added from any household",
|
||||
"any-category": "Любая категория",
|
||||
"any-tag": "Любая метка",
|
||||
"any-household": "Любое домохозяйство",
|
||||
"any-household": "Any Household",
|
||||
"no-meal-plan-defined-yet": "План питания еще не определен",
|
||||
"no-meal-planned-for-today": "На сегодня нет запланированных блюд",
|
||||
"numberOfDays-hint": "Количество дней при загрузке страницы",
|
||||
@@ -357,7 +357,7 @@
|
||||
"for-type-meal-types": "для типов блюд {0}",
|
||||
"meal-plan-rules": "Правила плана питания",
|
||||
"new-rule": "Новое правило",
|
||||
"meal-plan-rules-description": "Вы можете создавать правила авто выбора рецептов для ваших планов питания. Данные правила будут использованы сервером для определения случайного набора рецептов, из которого они будут выбраны при создании планов питания. Учтите, что при совпадении даты/вида ограничений у правил, их фильтры будут объединены. На практике, нет необходимости в создании дублирующихся правил, но такая возможность есть.",
|
||||
"meal-plan-rules-description": "You can create rules for auto selecting recipes for your meal plans. These rules are used by the server to determine the random pool of recipes to select from when creating meal plans. Note that if rules have the same day/type constraints then the rule filters will be merged. In practice, it's unnecessary to create duplicate rules, but it's possible to do so.",
|
||||
"new-rule-description": "При создании нового правила для плана питания вы можете ограничить действие правила для определенного дня недели и/или определенного типа питания. Чтобы применить правило ко всем дням или всем типам еды вы можете установить правило \"Любое\", которое применит его ко всем возможным значениям дня и/или питания.",
|
||||
"recipe-rules": "Правила рецептов",
|
||||
"applies-to-all-days": "Применяется к всем дням",
|
||||
@@ -369,15 +369,15 @@
|
||||
"new-migration": "Новая миграция",
|
||||
"no-file-selected": "Файл не выбран",
|
||||
"no-migration-data-available": "Данные о миграции отсутствуют",
|
||||
"previous-migrations": "Предыдущие переносы",
|
||||
"previous-migrations": "Предыдущие миграции",
|
||||
"recipe-migration": "Миграция рецепта",
|
||||
"chowdown": {
|
||||
"description": "Перенос данных из Chowdown",
|
||||
"description": "Миграция данных из Chowdown",
|
||||
"description-long": "Mealie поддерживает формат chowdown репозитория. Загрузите хранилище кода в формате .zip и загрузите его ниже.",
|
||||
"title": "Chowdown"
|
||||
},
|
||||
"nextcloud": {
|
||||
"description": "Перенос данных из Nextcloud Cookbook",
|
||||
"description": "Миграция данных из Nextcloud Cookbook",
|
||||
"description-long": "Рецепты Nextcloud могут быть импортированы из zip-файла c данными из Nextcloud. Смотрите пример структуры папок ниже, чтобы убедиться, что ваши рецепты могут быть импортированы.",
|
||||
"title": "Nextcloud Cookbook"
|
||||
},
|
||||
@@ -397,13 +397,13 @@
|
||||
"description-long": "Mealie может импортировать рецепты из Tandoor. Экспортируйте ваши данные в формате «По умолчанию», затем загрузите .zip ниже.",
|
||||
"title": "Рецепты Tandoor"
|
||||
},
|
||||
"recipe-data-migrations": "Перенос данных рецептов",
|
||||
"recipe-data-migrations": "Миграция данных рецепта",
|
||||
"recipe-data-migrations-explanation": "Рецепты могут быть перенесены из другого поддерживаемого приложения в Mealie. Это отличный способ начать работу с Mealie.",
|
||||
"coming-from-another-application-or-an-even-older-version-of-mealie": "Переходите из другого приложения или с более поздней версии Mealie? Проверьте \"миграции\", чтобы убедиться, что ваши данные могут быть перенесены.",
|
||||
"choose-migration-type": "Выберите тип переноса",
|
||||
"choose-migration-type": "Выберите тип миграции",
|
||||
"tag-all-recipes": "Отметить все рецепты тегом {tag-name}",
|
||||
"nextcloud-text": "Рецепты Nextcloud могут быть импортированы из zip-файла c данными из Nextcloud. Смотрите пример структуры папок ниже, чтобы убедиться, что ваши рецепты могут быть импортированы.",
|
||||
"chowdown-text": "Mealie нативно поддерживает формат репозитория chowdown. Скачайте репозиторий кода в виде .zip файла и загрузите его ниже.",
|
||||
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
|
||||
"recipe-1": "Рецепт 1",
|
||||
"recipe-2": "Рецепт 2",
|
||||
"paprika-text": "Mealie может импортировать рецепты из приложения Paprika. Экспортируйте рецепты из paprika, измените расширение для экспорта в .zip и загрузить его ниже.",
|
||||
@@ -414,11 +414,11 @@
|
||||
},
|
||||
"myrecipebox": {
|
||||
"title": "Мой ящик с рецептами",
|
||||
"description-long": "Mealie может импортировать рецепты из My Recipe Box. Экспортируйте ваши рецепты в формате CSV, а затем загрузите .csv ниже."
|
||||
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
|
||||
},
|
||||
"recipekeeper": {
|
||||
"title": "Хранитель рецептов",
|
||||
"description-long": "Mealie может импортировать рецепты из Recipe Keeper. Экспортируйте ваши рецепты в формате zip, а затем загрузите .zip ниже."
|
||||
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
|
||||
}
|
||||
},
|
||||
"new-recipe": {
|
||||
@@ -537,7 +537,7 @@
|
||||
"date-format-hint": "ДД/ММ/ГГГГ формат",
|
||||
"date-format-hint-yyyy-mm-dd": "ГГГГ-ММ-ДД формат",
|
||||
"add-to-list": "Добавить в список",
|
||||
"add-to-plan": "Добавить в план",
|
||||
"add-to-plan": "Добавить к плану",
|
||||
"add-to-timeline": "Добавить в историю",
|
||||
"recipe-added-to-list": "Рецепт добавлен в список",
|
||||
"recipes-added-to-list": "Рецепты добавлены в список",
|
||||
@@ -547,8 +547,8 @@
|
||||
"failed-to-add-recipe-to-mealplan": "Не удалось добавить рецепт в план питания",
|
||||
"failed-to-add-to-list": "Не удалось добавить в список",
|
||||
"yield": "Выход",
|
||||
"yields-amount-with-text": "На выходе {amount} {text}",
|
||||
"yield-text": "Название единицы полученного продукта",
|
||||
"yields-amount-with-text": "Yields {amount} {text}",
|
||||
"yield-text": "Yield Text",
|
||||
"quantity": "Количество",
|
||||
"choose-unit": "Выберите единицу измерения",
|
||||
"press-enter-to-create": "Нажмите Enter для создания",
|
||||
@@ -574,11 +574,11 @@
|
||||
"timeline": "История",
|
||||
"timeline-is-empty": "В истории пока ничего нет. Попробуйте сделать этот рецепт!",
|
||||
"timeline-no-events-found-try-adjusting-filters": "События не найдены. Проверьте фильтры поиска.",
|
||||
"group-global-timeline": "Глобальная история {groupName}",
|
||||
"group-global-timeline": "{groupName} глобальная история",
|
||||
"open-timeline": "Открыть историю",
|
||||
"made-this": "Я приготовил это",
|
||||
"made-this": "Я сделал это",
|
||||
"how-did-it-turn-out": "Что получилось?",
|
||||
"user-made-this": "{user} приготовил это",
|
||||
"user-made-this": "{user} сделал это",
|
||||
"api-extras-description": "Дополнения к рецептам являются ключевым элементом Mealie API. Они позволяют создавать пользовательские пары json ключ/значение в рецепте для ссылания на другие приложения. Вы можете использовать эти ключи, чтобы сохранить нужную информацию, например, для автоматизаций или уведомлений на ваши устройства.",
|
||||
"message-key": "Ключ сообщения",
|
||||
"parse": "Обработать",
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Создать рецепт из изображения",
|
||||
"create-recipe-from-an-image-description": "Создайте рецепт, загрузив изображение. Mealie попытается извлечь текст из изображения с помощью ИИ и создать рецепт из него.",
|
||||
"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-image": "Создать из изображения",
|
||||
"should-translate-description": "Перевести рецепт на мой язык",
|
||||
"please-wait-image-procesing": "Подождите, идет обработка изображения.",
|
||||
"please-wait-images-processing": "Пожалуйста, подождите, изображения обрабатываются. Это может занять некоторое время.",
|
||||
"bulk-url-import": "Массовый импорт по URL",
|
||||
"debug-scraper": "Отладка сканирования",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Создайте рецепт, указав имя. Все рецепты должны иметь уникальные имена.",
|
||||
@@ -612,13 +611,13 @@
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Хотите отсканировать несколько рецептов за раз?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Воспользуйтесь массовым импортом",
|
||||
"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": "You can import from raw data directly",
|
||||
"import-original-keywords-as-tags": "Импортировать исходные ключевые слова как теги",
|
||||
"stay-in-edit-mode": "Остаться в режиме редактирования",
|
||||
"import-from-zip": "Импорт из архива",
|
||||
"import-from-zip-description": "Импорт одного рецепта, который был экспортирован из другого экземпляра Mealie.",
|
||||
"import-from-html-or-json": "Импортировать из HTML или JSON",
|
||||
"import-from-html-or-json-description": "Импортировать один рецепт из необработанного HTML или JSON. Это может быть полезно, если он был взят с сайта, который Mealie не может нормально обработать, или из любого другого внешнего источника.",
|
||||
"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.",
|
||||
"json-import-format-description-colon": "Для импорта через JSON, он должен быть в правильном формате:",
|
||||
"json-editor": "Редактор JSON",
|
||||
"zip-files-must-have-been-exported-from-mealie": ".zip файлы должны быть экспортированы из Mealie",
|
||||
@@ -651,7 +650,7 @@
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Оповещение появится если подходящие продукты или единица измерения найдены, но не занесены в базу данных.",
|
||||
"select-parser": "Выбрать Разделитель",
|
||||
"natural-language-processor": "Обработчик естественного языка",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"openai-parser": "OpenAI Parser",
|
||||
"parse-all": "Обработать все",
|
||||
@@ -661,14 +660,11 @@
|
||||
"no-food": "Нет еды"
|
||||
},
|
||||
"reset-servings-count": "Сбросить количество порций",
|
||||
"not-linked-ingredients": "Дополнительные ингредиенты",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Загрузить изображения",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Дополнительные ингредиенты"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Поиск рецептов",
|
||||
"recipe-finder-description": "Поиск рецептов, основанный на ингредиентах, которые есть у вас в наличии. Вы также можете отфильтровать по имеемым инструментам и выставить максимальное количество отсутствующих ингредиентов или инструментов.",
|
||||
"recipe-finder-description": "Search for recipes based on ingredients you have on hand. You can also filter by tools you have available, and set a maximum number of missing ingredients or tools.",
|
||||
"selected-ingredients": "Выбранные ингредиенты",
|
||||
"no-ingredients-selected": "Нет выбранных ингредиентов",
|
||||
"missing": "Отсутствует",
|
||||
@@ -680,8 +676,8 @@
|
||||
"max-missing-tools": "Максимальное количество отсутствующих инструментов",
|
||||
"selected-tools": "Выбранные инструменты",
|
||||
"other-filters": "Другие фильтры",
|
||||
"ready-to-make": "Готово к приготовлению",
|
||||
"almost-ready-to-make": "Почти готово к приготовлению"
|
||||
"ready-to-make": "Готово к созданию",
|
||||
"almost-ready-to-make": "Почти готово к созданию"
|
||||
},
|
||||
"search": {
|
||||
"advanced-search": "Расширенный поиск",
|
||||
@@ -692,7 +688,7 @@
|
||||
"or": "Или",
|
||||
"has-any": "Включает любое",
|
||||
"has-all": "Включает все",
|
||||
"clear-selection": "Снять выделение",
|
||||
"clear-selection": "Очистить выделение",
|
||||
"results": "Результаты",
|
||||
"search": "Поиск",
|
||||
"search-mealie": "Поиск Mealie (нажмите /)",
|
||||
@@ -786,10 +782,10 @@
|
||||
},
|
||||
"token": {
|
||||
"active-tokens": "АКТИВНЫЕ ТОКЕНЫ",
|
||||
"api-token": "API-токен",
|
||||
"api-tokens": "API-токены",
|
||||
"api-token": "API токен",
|
||||
"api-tokens": "API токены",
|
||||
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Скопируйте этот токен для использования с внешним приложением. Этот токен не будет доступен для повторного просмотра.",
|
||||
"create-an-api-token": "Создать API-токен",
|
||||
"create-an-api-token": "Создать API токен",
|
||||
"token-name": "Название токена",
|
||||
"generate": "Сгенерировать",
|
||||
"you-have-token-count": "У вас нет активных токенов.|У вас есть один активный токен.|У вас есть {count} активных токенов."
|
||||
@@ -828,7 +824,7 @@
|
||||
"email-configured": "Email настроен",
|
||||
"email-test-results": "Результаты теста Email",
|
||||
"ready": "Готово",
|
||||
"not-ready": "Не готово: Проверьте переменные окружения",
|
||||
"not-ready": "Не готово - Проверьте переменные окружения",
|
||||
"succeeded": "Выполнено успешно",
|
||||
"failed": "Ошибка",
|
||||
"general-about": "Общая информация",
|
||||
@@ -841,16 +837,16 @@
|
||||
"server-side-base-url": "Базовый URL на стороне сервера",
|
||||
"server-side-base-url-error-text": "`BASE_URL` все еще является значением по умолчанию на сервере API. Это вызовет проблемы с уведомлениями, ссылками сгенерированными на сервере для электронной почты и т.д.",
|
||||
"server-side-base-url-success-text": "Серверный URL-адрес не соответствует значению по умолчанию",
|
||||
"ldap-ready": "LDAP готов",
|
||||
"ldap-ready": "LDAP настроен",
|
||||
"ldap-ready-error-text": "Не все значения для LDAP настроены. Это сообщение может быть проигнорировано, если вы не используете LDAP аутентификацию.",
|
||||
"ldap-ready-success-text": "Все требуемые переменные для LDAP установлены.",
|
||||
"build": "Сборка",
|
||||
"recipe-scraper-version": "Версия скрейпера рецептов",
|
||||
"oidc-ready": "OIDC Готов",
|
||||
"oidc-ready-error-text": "Не все значения OIDC настроены. Это может быть проигнорировано, если вы не используете OIDC аутентификацию.",
|
||||
"oidc-ready-error-text": "Not all OIDC Values are configured. This can be ignored if you are not using OIDC Authentication.",
|
||||
"oidc-ready-success-text": "Все требуемые переменные для OIDC установлены.",
|
||||
"openai-ready": "OpenAI Готов",
|
||||
"openai-ready-error-text": "Не все значения OpenAI настроены. Вы можете проигнорировать это, если вы не используете возможности OpenAI.",
|
||||
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
|
||||
"openai-ready-success-text": "Все требуемые переменные для OpenAI установлены."
|
||||
},
|
||||
"shopping-list": {
|
||||
@@ -882,10 +878,10 @@
|
||||
"no-label": "Без метки",
|
||||
"completed-on": "Выполнено в {date}",
|
||||
"you-are-offline": "Вы не в сети",
|
||||
"you-are-offline-description": "Не все возможности доступны при отсутствии сети. Вы всё ещё сможете добавлять, редактировать и удалять элементы, но вам не будет доступна синхронизация ваших изменения с сервером, пока вы не подключитесь снова.",
|
||||
"you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.",
|
||||
"are-you-sure-you-want-to-check-all-items": "Вы уверены, что хотите выбрать все элементы?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Вы уверены, что хотите снять отметку со всех элементов?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Вы уверены, что хотите удалить все отмеченные элементы?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Are you sure you want to uncheck all items?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Are you sure you want to delete all checked items?",
|
||||
"no-shopping-lists-found": "Списки покупок не найдены"
|
||||
},
|
||||
"sidebar": {
|
||||
@@ -960,7 +956,7 @@
|
||||
"email": "Адрес электронной почты",
|
||||
"error-cannot-delete-super-user": "Ошибка! Невозможно удалить суперпользователя",
|
||||
"existing-password-does-not-match": "Пароли не совпадают",
|
||||
"full-name": "Полное имя",
|
||||
"full-name": "Ф.И.О.",
|
||||
"generate-password-reset-link": "Сгенерировать ссылку для сброса пароля",
|
||||
"invite-only": "Только по приглашению",
|
||||
"link-id": "ID ссылки",
|
||||
@@ -1032,9 +1028,9 @@
|
||||
"administrator": "Администратор",
|
||||
"user-can-invite-other-to-group": "Пользователь может пригласить других в группу",
|
||||
"user-can-manage-group": "Пользователь может управлять группой",
|
||||
"user-can-manage-household": "Пользователь может управлять домохозяйством",
|
||||
"user-can-manage-household": "User can manage household",
|
||||
"user-can-organize-group-data": "Пользователь может менять групповые данные",
|
||||
"enable-advanced-features": "Включить дополнительные функции",
|
||||
"enable-advanced-features": "Включить доп. функции",
|
||||
"it-looks-like-this-is-your-first-time-logging-in": "Похоже, это ваш первый вход в систему.",
|
||||
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Больше не хотите видеть это сообщение? Не забудьте изменить адрес электронной почты в настройках пользователя!",
|
||||
"forgot-password": "Забыли Пароль",
|
||||
@@ -1063,7 +1059,7 @@
|
||||
"food-data": "Данные о продуктах",
|
||||
"example-food-singular": "пр. Луковица",
|
||||
"example-food-plural": "пр. Луковиц",
|
||||
"label-overwrite-warning": "Это назначит выбранную метку всем выбранным продуктам и потенциально перезапишет существующие метки.",
|
||||
"label-overwrite-warning": "This will assign the chosen label to all selected foods and potentially overwrite your existing labels.",
|
||||
"on-hand-checkbox-label": "Setting this flag will make this food unchecked by default when adding a recipe to a shopping list."
|
||||
},
|
||||
"units": {
|
||||
@@ -1246,16 +1242,16 @@
|
||||
"title-user-directory": "Каталог пользователя (user)"
|
||||
},
|
||||
"action-delete-log-files-name": "Удалить файлы логов",
|
||||
"action-delete-log-files-description": "Удаляет все файлы журнала",
|
||||
"action-delete-log-files-description": "Удаляет все лог файлы",
|
||||
"action-clean-directories-name": "Очистить каталоги",
|
||||
"action-clean-directories-description": "Удаляет все папки рецептов, не имеющие корректный UUID",
|
||||
"action-clean-directories-description": "Удаляет все папки рецептов, с не валидными UUID",
|
||||
"action-clean-temporary-files-name": "Очистить временные файлы",
|
||||
"action-clean-temporary-files-description": "Удаляет все файлы и папки в каталоге .temp",
|
||||
"action-clean-images-name": "Удалить изображения",
|
||||
"action-clean-images-description": "Удаляет все изображения, которые не заканчиваются на .webp",
|
||||
"actions-description": "Действия по техническому обслуживанию {destructive_in_bold} и должны применяться с осторожностью. Выполнение любого из этих действий {irreversible_in_bold}.",
|
||||
"actions-description": "Действия по техническому обслуживанию {destructive_in_bold} должны использоваться с осторожностью. Выполните любое из этих действий: {irreversible_in_bold}.",
|
||||
"actions-description-destructive": "разрушительны",
|
||||
"actions-description-irreversible": "необратимо",
|
||||
"actions-description-irreversible": "необратимы",
|
||||
"logs-action-refresh": "Обновить логи",
|
||||
"logs-page-title": "Логи Mealie",
|
||||
"logs-tail-lines-label": "Последние строки"
|
||||
@@ -1299,10 +1295,10 @@
|
||||
"welcome-user": "👋 Добро пожаловать, {0}!",
|
||||
"description": "Управление настройками профиля, рецептов и группы.",
|
||||
"invite-link": "Ссылка-приглашение",
|
||||
"get-invite-link": "Получить пригласительную ссылку",
|
||||
"get-invite-link": "Получить ссылку для приглашения",
|
||||
"get-public-link": "Получить публичную ссылку",
|
||||
"account-summary": "Cведения об учетной записи",
|
||||
"account-summary-description": "Вот сводка информации о вашей группе.",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Статистика группы",
|
||||
"group-statistics-description": "Статистика вашей группы дает некоторую информацию о том, как вы используете Mealie.",
|
||||
"household-statistics": "Household Statistics",
|
||||
@@ -1312,43 +1308,43 @@
|
||||
"personal": "Личное",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "Настройки пользователя",
|
||||
"user-settings-description": "Управляйте вашими настройками, меняйте пароль и обновляйте адрес электронной почты.",
|
||||
"api-tokens-description": "Управляйте вашими API-токенами для доступа сторонних приложений.",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "Эти элементы доступны внутри вашей группы. Редактирование одного из них изменит их для всей группы!",
|
||||
"group-settings": "Настройки группы",
|
||||
"group-settings-description": "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-settings": "Настройки домохозяйства",
|
||||
"household-settings-description": "Управляйте настройками вашего домохозяйства, такими как настройки плана питания и конфиденциальности.",
|
||||
"household-settings": "Household Settings",
|
||||
"household-settings-description": "Manage your household settings, like mealplan and privacy settings.",
|
||||
"cookbooks-description": "Управление коллекцией категорий рецептов и созданием страниц для них.",
|
||||
"members": "Участники",
|
||||
"members-description": "Узнайте, кто состоит в вашем домохозяйстве и управляйте их правами.",
|
||||
"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.",
|
||||
"notifiers": "Уведомления",
|
||||
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
|
||||
"manage-data": "Настройки хранилища данных",
|
||||
"manage-data-description": "Управляйте вашими данными в Mealie: продукты, единицы измерения, категории, теги и многое другое.",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Перенос данных",
|
||||
"data-migrations-description": "Перенесите ваши существующие данные из других приложений, таких как Nextcloud Recipes и Chowdown.",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "Отправленные письма",
|
||||
"error-sending-email": "Ошибка при отправке письма",
|
||||
"personal-information": "Личные данные",
|
||||
"preferences": "Настройки",
|
||||
"show-advanced-description": "Показать продвинутые возможности (API-ключи, Webhook'и, а также управление данными)",
|
||||
"show-advanced-description": "Показать расширенные функции (API ключи, Webhook'и, и управление данными)",
|
||||
"back-to-profile": "Вернуться к профилю",
|
||||
"looking-for-privacy-settings": "Ищете настройки приватности?",
|
||||
"manage-your-api-tokens": "Управление API-токенами",
|
||||
"manage-your-api-tokens": "Управление API ключами",
|
||||
"manage-user-profile": "Настройки профиля",
|
||||
"manage-cookbooks": "Настройки книгами рецептов",
|
||||
"manage-members": "Настройки пользователей",
|
||||
"manage-webhooks": "Настройки Webhook'ов",
|
||||
"manage-notifiers": "Настройки уведомлений",
|
||||
"manage-data-migrations": "Настройка переноса данных"
|
||||
"manage-data-migrations": "Настройка миграций данных"
|
||||
},
|
||||
"cookbook": {
|
||||
"cookbooks": "Книги рецептов",
|
||||
"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.",
|
||||
"hide-cookbooks-from-other-households": "Скрыть книги рецептов от других домохозяйств",
|
||||
"hide-cookbooks-from-other-households": "Hide Cookbooks from Other Households",
|
||||
"hide-cookbooks-from-other-households-description": "When enabled, only cookbooks from your household will appear on the sidebar",
|
||||
"public-cookbook": "Публичные книги рецептов",
|
||||
"public-cookbook-description": "Публичными книгами рецептов можно делиться с людьми без аккаунта в Mealie, и они будут отображаться на странице вашей группы.",
|
||||
@@ -1359,29 +1355,29 @@
|
||||
"require-all-tools": "Требовать все инструменты",
|
||||
"cookbook-name": "Название книги рецептов",
|
||||
"cookbook-with-name": "Книга рецептов {0}",
|
||||
"household-cookbook-name": "Книга рецептов {0} {1}",
|
||||
"household-cookbook-name": "{0} Cookbook {1}",
|
||||
"create-a-cookbook": "Создать книгу рецептов",
|
||||
"cookbook": "Книга рецептов"
|
||||
},
|
||||
"query-filter": {
|
||||
"logical-operators": {
|
||||
"and": "И",
|
||||
"or": "ИЛИ"
|
||||
"and": "AND",
|
||||
"or": "OR"
|
||||
},
|
||||
"relational-operators": {
|
||||
"equals": "равно",
|
||||
"does-not-equal": "не равно",
|
||||
"is-greater-than": "больше чем",
|
||||
"is-greater-than-or-equal-to": "больше или равно",
|
||||
"is-less-than": "меньше чем",
|
||||
"is-less-than-or-equal-to": "меньше или равно"
|
||||
"equals": "equals",
|
||||
"does-not-equal": "does not equal",
|
||||
"is-greater-than": "is greater than",
|
||||
"is-greater-than-or-equal-to": "is greater than or equal to",
|
||||
"is-less-than": "is less than",
|
||||
"is-less-than-or-equal-to": "is less than or equal to"
|
||||
},
|
||||
"relational-keywords": {
|
||||
"is": "is",
|
||||
"is-not": "is not",
|
||||
"is-one-of": "один из",
|
||||
"is-not-one-of": "не один из",
|
||||
"contains-all-of": "содержит все",
|
||||
"is-one-of": "is one of",
|
||||
"is-not-one-of": "is not one of",
|
||||
"contains-all-of": "contains all of",
|
||||
"is-like": "is like",
|
||||
"is-not-like": "is not like"
|
||||
}
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Vytvoriť recept z obrázka",
|
||||
"create-recipe-from-an-image-description": "Vytvoriť recept nahraním fotografie jedla. Mealie sa pokúsi previesť obrázok na text pomocou AI a vytvorí k nemu recept.",
|
||||
"crop-and-rotate-the-image": "Orežte a otočte obrázok tak, aby bol viditeľný iba text a aby mal správnu orientáciu.",
|
||||
"create-from-images": "Create from Images",
|
||||
"create-from-image": "Vytvoriť z obrázka",
|
||||
"should-translate-description": "Preložiť recept do môjho jazyka",
|
||||
"please-wait-image-procesing": "Čakajte, prosím. Obrázok sa spracováva. Môže to chvíľku trvať.",
|
||||
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
|
||||
"bulk-url-import": "Hromadný URL import",
|
||||
"debug-scraper": "Ladiť scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Vytvoriť recept zadaním názvu. Všetky recepty musia mať jedinečné názvy.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Žiadne suroviny"
|
||||
},
|
||||
"reset-servings-count": "Resetovať počet porcií",
|
||||
"not-linked-ingredients": "Ďalšie suroviny",
|
||||
"upload-another-image": "Upload another image",
|
||||
"upload-images": "Upload images",
|
||||
"upload-more-images": "Upload more images"
|
||||
"not-linked-ingredients": "Ďalšie suroviny"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Hľadač receptov",
|
||||
|
||||
@@ -599,10 +599,9 @@
|
||||
"create-recipe-from-an-image": "Ustvari recept iz slike",
|
||||
"create-recipe-from-an-image-description": "Ustvarite recept tako, da naložite njegovo sliko. Mealie bo s pomočjo umetne inteligence poskušal izluščiti besedilo iz slike in iz njega ustvariti recept.",
|
||||
"crop-and-rotate-the-image": "Obrežite in zasukajte sliko, tako da bo vidno samo besedilo in da bo v pravilnem položaju.",
|
||||
"create-from-images": "Ustvari iz slik",
|
||||
"create-from-image": "Ustvari iz slike",
|
||||
"should-translate-description": "Prevedi recept v moj jezik",
|
||||
"please-wait-image-procesing": "Počakajte, slika je v obdelavi. To lahko traja nekaj časa.",
|
||||
"please-wait-images-processing": "Počakajte, slike se obdelujejo. To lahko traja nekaj časa.",
|
||||
"bulk-url-import": "Masovno uvozi preko URLja",
|
||||
"debug-scraper": "Odpravljanje težav s strgalnikom",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Ustvari recept z izbranim imenom. Vsi recepti morajo imeti unikatna imena.",
|
||||
@@ -661,10 +660,7 @@
|
||||
"no-food": "Ni živila"
|
||||
},
|
||||
"reset-servings-count": "Ponastavi števec obrokov",
|
||||
"not-linked-ingredients": "Dodatne sestavine",
|
||||
"upload-another-image": "Naloži drugo sliko",
|
||||
"upload-images": "Naloži slike",
|
||||
"upload-more-images": "Naloži več slik"
|
||||
"not-linked-ingredients": "Dodatne sestavine"
|
||||
},
|
||||
"recipe-finder": {
|
||||
"recipe-finder": "Iskalnik receptov",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user