Compare commits

..

37 Commits

Author SHA1 Message Date
Michael Genson
b7b191a5ee fix: Truncate Long Passwords (>72 bytes) (#6335) 2025-10-09 23:46:06 +00:00
Hayden
5620370ade chore(l10n): New Crowdin updates (#6320) 2025-10-09 16:30:31 +00:00
renovate[bot]
d333d47e34 chore(deps): update dependency ruff to ^0.14.0 (#6334)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-07 18:49:52 +00:00
Brian Choromanski
b34b1c9be3 feat: Added url to current version release (#6308) 2025-10-07 09:31:55 +00:00
Michael Genson
8c5010148d fix: Translate log-out string (#6332) 2025-10-06 17:14:51 -05:00
Michael Genson
a17b0e329e fix: No Redirect On Valid Token (#6327) 2025-10-06 13:02:25 -05:00
Arsène Reymond
8ab69a7d7a fix: Remove unused next-auth dependency (#6328) 2025-10-06 12:43:13 -05:00
github-actions[bot]
f4ecf74b91 chore(auto): Update pre-commit hooks (#6324)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2025-10-06 15:09:13 +00:00
renovate[bot]
ba9d816f64 chore(deps): update dependency pylint to v3.3.9 (#6321)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-06 09:57:17 -05:00
Michael Genson
6895b49543 fix: Re-write Nuxt auth backend and get rid of sidebase auth (#6322) 2025-10-05 20:43:38 -05:00
github-actions[bot]
fffe7b05e0 chore(l10n): Crowdin locale sync (#6318)
Co-authored-by: GitHub Action <action@github.com>
2025-10-05 02:56:21 +00:00
Hayden
1271e0e49b chore(l10n): New Crowdin updates (#6317) 2025-10-04 21:45:57 -05:00
Hayden
478054b724 chore(l10n): New Crowdin updates (#6313) 2025-10-04 11:30:21 -05:00
Hayden
57d259a7a3 chore(l10n): New Crowdin updates (#6309) 2025-10-04 21:34:09 +10:00
Hayden
a4a6d4dfb1 chore(l10n): New Crowdin updates (#6273) 2025-10-03 17:24:33 +00:00
github-actions[bot]
f7b4f79312 chore(l10n): Crowdin locale sync (#6268)
Co-authored-by: GitHub Action <action@github.com>
2025-10-03 17:03:14 +00:00
renovate[bot]
434d312f7c chore(deps): update dependency openai to v2.1.0 (#6302)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-03 11:50:06 -05:00
renovate[bot]
bda460b49e chore(deps): update dependency ruff to v0.13.3 (#6301)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-03 16:17:53 +00:00
renovate[bot]
d3e1c48655 chore(deps): update dependency authlib to v1.6.5 (#6299)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-03 11:05:13 -05:00
github-actions[bot]
b2a3430f2c docs(auto): Update image tag, for release v3.3.1 (#6300)
Co-authored-by: michael-genson <71845777+michael-genson@users.noreply.github.com>
2025-10-02 18:26:51 +00:00
renovate[bot]
3d792d9333 chore(deps): update dependency openai to v2.0.1 (#6296)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-02 17:22:38 +00:00
renovate[bot]
2e028d7e12 chore(deps): update node.js to 2bb201f (#6295)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-02 12:11:00 -05:00
Brian Choromanski
c63932e8b3 fix: Updated pwa orientation to any (#6298) 2025-10-01 20:51:15 -05:00
renovate[bot]
3ba2227bc7 chore(deps): update dependency mkdocs-material to v9.6.21 (#6293)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-01 04:45:41 +00:00
renovate[bot]
67af391c6b chore(deps): update dependency pillow-heif to v1.1.1 (#6291)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 23:33:14 -05:00
renovate[bot]
70ae0dac25 chore(deps): update node.js to d367fd3 (#6292)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-01 03:19:44 +00:00
renovate[bot]
e15a9c3c9f chore(deps): update dependency apprise to v1.9.5 (#6290)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 22:07:31 -05:00
renovate[bot]
9d40d60b3b fix(deps): update dependency openai to v2 (#6294)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 21:40:14 -05:00
renovate[bot]
e2760f7247 chore(deps): update dependency tzdata to v2025 (#6287) 2025-09-29 17:18:19 -05:00
Michael Genson
83bf21b947 fix: Restore recipe meta for non-logged-in users (#6286) 2025-09-29 10:33:18 -05:00
Michael Genson
d1824affff fix: Default to "0" qty when creating ingredients everywhere (#6285) 2025-09-29 10:19:37 -05:00
renovate[bot]
4827e1092f chore(deps): update dependency beautifulsoup4 to v4.14.2 (#6283)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-29 09:49:54 -05:00
github-actions[bot]
7db767b075 chore(auto): Update pre-commit hooks (#6282)
Co-authored-by: boc-the-git <3479092+boc-the-git@users.noreply.github.com>
2025-09-29 14:36:01 +00:00
renovate[bot]
afdd0b15dc fix(deps): update dependency fastapi to ^0.118.0 (#6281)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-29 09:24:37 -05:00
Michael Genson
37c9166a77 docs: Update TOKEN_TIME docs to include max (#6279) 2025-09-28 22:05:15 -05:00
github-actions[bot]
ba0b9d4cd9 docs(auto): Update image tag, for release v3.3.0 (#6267)
Co-authored-by: michael-genson <71845777+michael-genson@users.noreply.github.com>
2025-09-28 01:13:15 +00:00
renovate[bot]
9fd99a86b8 chore(deps): update dependency beautifulsoup4 to v4.14.0 (#6260)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-27 20:02:31 -05:00
117 changed files with 2241 additions and 2133 deletions

View File

@@ -77,7 +77,7 @@ jobs:
sed -i 's/:v[0-9]*.[0-9]*.[0-9]*/:v${{ env.VERSION_NUM }}/' docs/docs/documentation/getting-started/installation/sqlite.md
sed -i 's/:v[0-9]*.[0-9]*.[0-9]*/:v${{ env.VERSION_NUM }}/' docs/docs/documentation/getting-started/installation/postgres.md
sed -i 's/^version = "[^"]*"/version = "${{ env.VERSION_NUM }}"/' pyproject.toml
sed -i 's/^\s*"version": "[^"]*"/"version": "${{ env.VERSION_NUM }}"/' frontend/package.json
sed -i 's/\("version": "\)[^"]*"/\1${{ env.VERSION_NUM }}"/' frontend/package.json
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6

View File

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

View File

@@ -1,7 +1,7 @@
###############################################
# Frontend Build
###############################################
FROM node:22@sha256:4973262386dc1cb70f7d6fc48a855027d8f12d2d3b1fe559b9db9a4fcb74668f \
FROM node:22@sha256:2bb201f33898d2c0ce638505b426f4dd038cc00e5b2b4cbba17b069f0fff1496 \
AS frontend-builder
WORKDIR /frontend

View File

@@ -11,7 +11,7 @@
| DEFAULT_GROUP | Home | The default group for users |
| DEFAULT_HOUSEHOLD | Family | The default household for users in each group |
| BASE_URL | http://localhost:8080 | Used for Notifications |
| TOKEN_TIME | 48 | The time in hours that a login/auth token is valid |
| TOKEN_TIME | 48 | The time in hours that a login/auth token is valid. Must be <= 87600 (10 years, in hours). |
| API_PORT | 9000 | The port exposed by backend API. **Do not change this if you're running in Docker** |
| API_DOCS | True | Turns on/off access to the API documentation locally |
| TZ | UTC | Must be set to get correct date/time on the server |

View File

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

View File

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

View File

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

View File

@@ -127,7 +127,7 @@ function addIngredient(ingredients: Array<string> | null = null) {
note: x,
unit: undefined,
food: undefined,
quantity: 1,
quantity: 0,
};
});
@@ -145,7 +145,7 @@ function addIngredient(ingredients: Array<string> | null = null) {
unit: undefined,
// @ts-expect-error - prop can be null-type by NoUndefinedField type forces it to be set
food: undefined,
quantity: 1,
quantity: 0,
});
}
}
@@ -159,7 +159,7 @@ function insertNewIngredient(dest: number) {
unit: undefined,
// @ts-expect-error - prop can be null-type by NoUndefinedField type forces it to be set
food: undefined,
quantity: 1,
quantity: 0,
});
}
</script>

View File

@@ -523,7 +523,7 @@ function insertNewIngredient(index: number) {
input: "",
confidence: {},
ingredient: {
quantity: 1.0,
quantity: 0,
referenceId: uuid4(),
},
} as ParsedIngredient;

View File

@@ -128,7 +128,7 @@ export default defineNuxtComponent({
async function logout() {
try {
await $auth.signOut({ callbackUrl: "/login?direct=1" });
await $auth.signOut("/login?direct=1");
}
catch (e) {
console.error(e);

View File

@@ -21,7 +21,7 @@ export const LOCALES = [
{
name: "Українська (Ukrainian)",
value: "uk-UA",
progress: 44,
progress: 55,
dir: "ltr",
},
{
@@ -33,7 +33,7 @@ export const LOCALES = [
{
name: "Svenska (Swedish)",
value: "sv-SE",
progress: 52,
progress: 53,
dir: "ltr",
},
{
@@ -57,7 +57,7 @@ export const LOCALES = [
{
name: "Pусский (Russian)",
value: "ru-RU",
progress: 40,
progress: 41,
dir: "ltr",
},
{
@@ -75,7 +75,7 @@ export const LOCALES = [
{
name: "Português do Brasil (Brazilian Portuguese)",
value: "pt-BR",
progress: 45,
progress: 46,
dir: "ltr",
},
{
@@ -87,13 +87,13 @@ export const LOCALES = [
{
name: "Norsk (Norwegian)",
value: "no-NO",
progress: 39,
progress: 40,
dir: "ltr",
},
{
name: "Nederlands (Dutch)",
value: "nl-NL",
progress: 49,
progress: 52,
dir: "ltr",
},
{
@@ -123,13 +123,13 @@ export const LOCALES = [
{
name: "Italiano (Italian)",
value: "it-IT",
progress: 41,
progress: 43,
dir: "ltr",
},
{
name: "Íslenska (Icelandic)",
value: "is-IS",
progress: 3,
progress: 10,
dir: "ltr",
},
{
@@ -159,7 +159,7 @@ export const LOCALES = [
{
name: "Français (French)",
value: "fr-FR",
progress: 66,
progress: 67,
dir: "ltr",
},
{
@@ -189,7 +189,7 @@ export const LOCALES = [
{
name: "Español (Spanish)",
value: "es-ES",
progress: 42,
progress: 45,
dir: "ltr",
},
{
@@ -207,19 +207,19 @@ export const LOCALES = [
{
name: "Ελληνικά (Greek)",
value: "el-GR",
progress: 40,
progress: 41,
dir: "ltr",
},
{
name: "Deutsch (German)",
value: "de-DE",
progress: 78,
progress: 80,
dir: "ltr",
},
{
name: "Dansk (Danish)",
value: "da-DK",
progress: 40,
progress: 43,
dir: "ltr",
},
{
@@ -231,7 +231,7 @@ export const LOCALES = [
{
name: "Català (Catalan)",
value: "ca-ES",
progress: 38,
progress: 37,
dir: "ltr",
},
{

View File

@@ -0,0 +1,151 @@
import { ref, computed } from "vue";
import type { UserOut } from "~/lib/api/types/user";
interface AuthData {
value: UserOut | null;
}
interface AuthStatus {
value: "loading" | "authenticated" | "unauthenticated";
}
interface AuthState {
data: AuthData;
status: AuthStatus;
signIn: (credentials: FormData, options?: { redirect?: boolean }) => Promise<void>;
signOut: (callbackUrl?: string) => Promise<void>;
refresh: () => Promise<void>;
getSession: () => Promise<void>;
setToken: (token: string | null) => void;
}
const authUser = ref<UserOut | null>(null);
const authStatus = ref<"loading" | "authenticated" | "unauthenticated">("loading");
export const useAuthBackend = function (): AuthState {
const { $axios } = useNuxtApp();
const router = useRouter();
const tokenName = useRuntimeConfig().public.AUTH_TOKEN;
const tokenCookie = useCookie(tokenName);
function setToken(token: string | null) {
tokenCookie.value = token;
}
function handleAuthError(error: any, redirect = false) {
// Only clear token on auth errors, not network errors
if (error?.response?.status === 401) {
setToken(null);
authUser.value = null;
authStatus.value = "unauthenticated";
if (redirect) {
router.push("/login");
}
}
}
async function getSession(): Promise<void> {
if (!tokenCookie.value) {
authUser.value = null;
authStatus.value = "unauthenticated";
return;
}
authStatus.value = "loading";
try {
const { data } = await $axios.get<UserOut>("/api/users/self");
authUser.value = data;
authStatus.value = "authenticated";
}
catch (error: any) {
console.error("Failed to fetch user session:", error);
handleAuthError(error);
authStatus.value = "unauthenticated";
}
}
async function signIn(credentials: FormData): Promise<void> {
authStatus.value = "loading";
try {
const response = await $axios.post("/api/auth/token", credentials, {
headers: {
"Content-Type": "multipart/form-data",
},
});
const { access_token } = response.data;
setToken(access_token);
await getSession();
}
catch (error) {
authStatus.value = "unauthenticated";
throw error;
}
}
async function signOut(callbackUrl: string = ""): Promise<void> {
try {
await $axios.post("/api/auth/logout");
}
catch (error) {
// Continue with logout even if API call fails
console.warn("Logout API call failed:", error);
}
finally {
setToken(null);
authUser.value = null;
authStatus.value = "unauthenticated";
await router.push(callbackUrl || "/login");
}
}
async function refresh(): Promise<void> {
if (!tokenCookie.value) return;
try {
const response = await $axios.get("/api/auth/refresh");
const { access_token } = response.data;
setToken(access_token);
await getSession();
}
catch (error: any) {
handleAuthError(error, true);
throw error;
}
}
// Auto-refresh user data periodically when authenticated
if (import.meta.client) {
let refreshInterval: NodeJS.Timeout | null = null;
watch(() => authStatus.value, (status) => {
if (status === "authenticated") {
refreshInterval = setInterval(() => {
if (tokenCookie.value) {
getSession().catch(() => {
// Ignore errors in background refresh
});
}
}, 5 * 60 * 1000); // 5 minutes
}
else {
// Clear interval when not authenticated
if (refreshInterval) {
clearInterval(refreshInterval);
refreshInterval = null;
}
}
}, { immediate: true });
}
return {
data: computed(() => authUser.value),
status: computed(() => authStatus.value),
signIn,
signOut,
refresh,
getSession,
setToken,
};
};

View File

@@ -1,9 +1,9 @@
import { ref, watch, computed } from "vue";
import { useAuthBackend } from "~/composables/useAuthBackend";
import type { UserOut } from "~/lib/api/types/user";
export const useMealieAuth = function () {
const auth = useAuth();
const { setToken } = useAuthState();
const auth = useAuthBackend();
const { $axios } = useNuxtApp();
// User Management
@@ -40,7 +40,7 @@ export const useMealieAuth = function () {
async function oauthSignIn() {
const params = new URLSearchParams(window.location.search);
const { data: token } = await $axios.get<{ access_token: string; token_type: "bearer" }>("/api/auth/oauth/callback", { params });
setToken(token.access_token);
auth.setToken(token.access_token);
await auth.getSession();
}
@@ -49,7 +49,6 @@ export const useMealieAuth = function () {
loggedIn,
signIn: auth.signIn,
signOut: auth.signOut,
signUp: auth.signUp,
refresh: auth.refresh,
oauthSignIn,
};

View File

@@ -676,7 +676,7 @@
"ingredient-parser-description": "Deine Zutaten wurden erfolgreich geparst. Bitte überprüfe die Zutaten, bei denen wir uns nicht sicher sind.",
"ingredient-parser-final-review-description": "Sobald alle Zutaten überprüft wurden, kannst du nochmal alle Zutaten kontrollieren, bevor die Änderungen ins Rezept übernommen werden.",
"add-text-as-alias-for-item": "Füge \"{text}\" als Alias für {item} hinzu",
"delete-item": "Delete Item"
"delete-item": "Element löschen"
},
"reset-servings-count": "Portionen zurücksetzen",
"not-linked-ingredients": "Zusätzliche Zutaten",

View File

@@ -676,7 +676,7 @@
"ingredient-parser-description": "Τα συστατικά σας έχουν αναλυθεί επιτυχώς. Παρακαλούμε ελέγξτε τα συστατικά για τα οποία δεν είμαστε σίγουροι.",
"ingredient-parser-final-review-description": "Μόλις εξεταστούν όλα τα συστατικά, θα έχετε μία ακόμη ευκαιρία να επανεξετάσετε όλα τα συστατικά πριν εφαρμόσετε τις αλλαγές στη συνταγή σας.",
"add-text-as-alias-for-item": "Προσθήκη \"{text}\" ως ψευδώνυμο για το {item}",
"delete-item": "Delete Item"
"delete-item": "Διαγραφή αντικειμένου"
},
"reset-servings-count": "Επαναφορά μέτρησης μερίδων",
"not-linked-ingredients": "Πρόσθετα συστατικά",

View File

@@ -18,7 +18,7 @@
"github": "GitHub",
"log-lines": "Líneas de registro",
"not-demo": "No Demo",
"portfolio": "Portfolio",
"portfolio": "Portafolio",
"production": "Producción",
"support": "Soporte",
"version": "Versión",
@@ -561,7 +561,7 @@
"see-original-text": "Mostrar Texto Original",
"original-text-with-value": "Texto original: {originalText}",
"ingredient-linker": "Vincular ingredientes",
"unlinked": "Not linked yet",
"unlinked": "Aún no vinculado",
"linked-to-other-step": "Enlazado a otro paso",
"auto": "Auto",
"cook-mode": "Modo Cocinar",
@@ -624,7 +624,7 @@
"scrape-recipe-you-can-import-from-raw-data-directly": "Puede importar directamente desde datos brutos",
"import-original-keywords-as-tags": "Importar palabras clave originales como etiquetas",
"stay-in-edit-mode": "Permanecer en modo edición",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Analizar los ingredientes de la receta después de importarla",
"import-from-zip": "Importar desde zip",
"import-from-zip-description": "Importa una receta única que fue exportada desde otra instancia de Mealie.",
"import-from-html-or-json": "Importar desde HTML o JSON",
@@ -671,12 +671,12 @@
"this-unit-could-not-be-parsed-automatically": "Esta unidad no pudo ser procesada automáticamente",
"this-food-could-not-be-parsed-automatically": "Esta comida no pudo ser procesada automáticamente",
"no-food": "Sin Comida",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Revisar los ingredientes analizados",
"confidence-score": "Puntuación de confianza",
"ingredient-parser-description": "Tus ingredientes se han analizado correctamente. Revisa los ingredientes que no nos convencen.",
"ingredient-parser-final-review-description": "Una vez que se hayan revisado todos los ingredientes, tendrás una oportunidad más de revisarlos todos antes de aplicar los cambios a tu receta.",
"add-text-as-alias-for-item": "Añadir \"{text}\" como alias para {item}",
"delete-item": "Borrar elemento"
},
"reset-servings-count": "Restablecer contador de porciones",
"not-linked-ingredients": "Ingredientes adicionales",

View File

@@ -676,7 +676,7 @@
"ingredient-parser-description": "Sikeresen feldolgoztuk a hozzávalókat. Kérljük, nézze át azokat, amelyekben nem vagyunk teljesen biztosak.",
"ingredient-parser-final-review-description": "Miután az összes hozzávalót átnézte, még egyszer átnézheti az összes hozzávalót, mielőtt a változtatásokat átvezeti a receptbe.",
"add-text-as-alias-for-item": "Adja hozzá a „{text}” nevet {item} aliasaként",
"delete-item": "Delete Item"
"delete-item": "Elem törlése"
},
"reset-servings-count": "Adagok számának visszaállítása",
"not-linked-ingredients": "Kiegészítő hozzávalók",
@@ -1273,7 +1273,7 @@
"action-clean-temporary-files-description": "Minden fájl és mappa eltávolítása a .temp könyvtárból",
"action-clean-images-name": "Képek tisztítása",
"action-clean-images-description": "Minden nem .webp kiterjesztésű kép eltávolítása",
"actions-description": "A karbantartási műveletek {destructive_in_bold} és óvatosan használandók. Ezen műveletek bármelyikének végrehajtása {irreversible_in_bold}.",
"actions-description": "A karbantartási műveletek {destructive_in_bold} jellegűek, ezért óvatosan kell alkalmazni őket. Ezen műveletek végrehajtása {irreversible_in_bold}.",
"actions-description-destructive": "romboló",
"actions-description-irreversible": "visszafordíthatatlan",
"logs-action-refresh": "Logok frissítése",

View File

@@ -12,7 +12,7 @@
"demo": "Kynning",
"demo-status": "Kynningarstaða",
"development": "Þróun",
"docs": "Skjöl",
"docs": "Upplýsingar",
"download-log": "Sækja atvikaskrá",
"download-recipe-json": "Síðast sótt JSON",
"github": "GitHub",
@@ -73,7 +73,7 @@
"enable-notifier": "Virkja tilkynningar",
"what-events": "Hvaða viðburði ætti þessi tilkynnir að vera áskrifandi að?",
"user-events": "Notenda viðburðir",
"mealplan-events": "Mataráætlunar viðburðir",
"mealplan-events": "Matarplan viðburðir",
"when-a-user-in-your-group-creates-a-new-mealplan": "Þegar notandi í þínum hópi býr til nýtt matarplan",
"shopping-list-events": "Innkaupslista viðburðir",
"cookbook-events": "Matreiðslubóks viðburðir",
@@ -99,7 +99,7 @@
"delete": "Eyða",
"disabled": "Afvirkjað",
"download": "Sækja",
"duplicate": "Tvöfalda",
"duplicate": "Afrita",
"edit": "Breyta",
"enabled": "Leyft",
"exception": "Undantekningar",
@@ -161,14 +161,14 @@
"sunday": "Sunnudagur",
"system": "Kerfi",
"templates": "Sniðmót:",
"test": "Próf",
"test": "Prufa",
"themes": "Þema",
"thursday": "Fimmtudagur",
"title": "Titill",
"token": "Tóki",
"tuesday": "Þriðjudagur",
"type": "Tegund",
"update": "Uppfærsla",
"update": "Uppfæra",
"updated": "Uppfært",
"upload": "Hlaða upp",
"url": "URL",
@@ -192,7 +192,7 @@
"a-name-is-required": "Nafn er krafist",
"delete-with-name": "Eyða út {name}",
"confirm-delete-generic-with-name": "Ertu viss um að þú viljir eyða út {name}?",
"confirm-delete-own-admin-account": "Please note that you are trying to delete your own admin account! This action cannot be undone and will permanently delete your account?",
"confirm-delete-own-admin-account": "Athugið! Þú ert að reyna að eyða eigin admin aðgangi! Þessa aðgerð er ekki hægt að draga til baka og aðganginum verður varanalega eytt.",
"organizer": "Skipuleggjari",
"transfer": "Færa",
"copy": "Afrita",
@@ -200,53 +200,53 @@
"timestamp": "Tímastimpill",
"last-made": "Síðast gert",
"learn-more": "Læra meira",
"this-feature-is-currently-inactive": "This feature is currently inactive",
"clipboard-not-supported": "Clipboard not supported",
"copied-to-clipboard": "Copied to clipboard",
"your-browser-does-not-support-clipboard": "Your browser does not support clipboard",
"copied-items-to-clipboard": "No item copied to clipboard|One item copied to clipboard|Copied {count} items to clipboard",
"this-feature-is-currently-inactive": "Þessi eiginleiki er nú óvirkur",
"clipboard-not-supported": "Klippispjald er ekki stutt",
"copied-to-clipboard": "Afritað á klippispjald",
"your-browser-does-not-support-clipboard": "Vafrinn þinn styður ekki klippispjald",
"copied-items-to-clipboard": "Ekkert afritað á klippispjaldið|Eitt atriði afritað á klippisjaldið|{count} atriði afrituð á klippispjaldið",
"actions": "Aðgerðir",
"selected-count": "Valið: {count}",
"export-all": "Export All",
"export-all": "Flytja allt út",
"refresh": "Endurhlaða",
"upload-file": "Hlaða upp skrá",
"created-on-date": "Búið til: {0}",
"unsaved-changes": "You have unsaved changes. Do you want to save before leaving? Okay to save, Cancel to discard changes.",
"clipboard-copy-failure": "Failed to copy to the clipboard.",
"confirm-delete-generic-items": "Are you sure you want to delete the following items?",
"unsaved-changes": "Þú hefur ekki vistað breytingar. Viltu vista áður en þú ferð? Ýttu á \"Í lagi\" til að vista, \"Hætta við\" til að henda breytingum.",
"clipboard-copy-failure": "Mistókst að afrita klippispjaldið.",
"confirm-delete-generic-items": "Ertu viss um að þú viljir eyða eftirfylgjandi atriðum?",
"organizers": "Skipuleggjarar",
"caution": "Varúð",
"show-advanced": "Show Advanced",
"show-advanced": "Ítarlegar stillingar",
"add-field": "Bæta við dálk",
"date-created": "Date Created",
"date-created": "Búið til",
"date-updated": "Dagsetning uppfærð"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Ertu viss um að þú viljir eyða <b>{groupName}<b/>?",
"cannot-delete-default-group": "Ekki hægt að eyða sjálfvöldum hóp",
"cannot-delete-group-with-users": "Cannot delete group with users",
"confirm-group-deletion": "Confirm Group Deletion",
"cannot-delete-group-with-users": "Get ekki eytt hóp sem inniheldur notendur",
"confirm-group-deletion": "Staðfestu að eyða hópnum",
"create-group": "Búa til hóp",
"error-updating-group": "Villa í að uppfæra hóp",
"group": "Hópur",
"group-deleted": "Hóp eytt",
"group-deletion-failed": "Villa í að eyða hóp",
"group-id-with-value": "Group ID: {groupID}",
"group-id-with-value": "p ID: {groupID}",
"group-name": "Nafn hóps",
"group-not-found": "Fann ekki hóp",
"group-token": "Group Token",
"group-with-value": "Group: {groupID}",
"group-token": "p token",
"group-with-value": "Hópur: {groupID}",
"groups": "Hópar",
"manage-groups": "Umsjá hópa",
"user-group": "Notendahópur",
"user-group-created": "Notendahópur búinn til",
"user-group-creation-failed": "User Group Creation Failed",
"user-group-creation-failed": "Mistókst að stofna notenda hóp",
"settings": {
"keep-my-recipes-private": "Keep My Recipes Private",
"keep-my-recipes-private-description": "Sets your group and all recipes defaults to private. You can always change this later."
"keep-my-recipes-private": "Ekki deila mínum uppskriftum",
"keep-my-recipes-private-description": "Hafa sjálfgefið að hópar og uppskriftir sé ekki deilt. Það er hægt að breyta þessu síðar."
},
"manage-members": "Umsjá meðlima",
"manage-members-description": "Manage the permissions of the members in your household. {manage} allows the user to access the data-management page, and {invite} allows the user to generate invitation links for other users. Group owners cannot change their own permissions.",
"manage-members-description": "Stjórnaðu aðgangsheimildum annarra í heimilinu. {manage} opnar gagnastjórnunarsíðu og {invite} býr til boðtengla fyrir aðra. Stjórnendur hópa geta ekki breytt eigin heimildum.",
"manage": "Umsjá",
"manage-household": "Umsjá heimilis",
"invite": "Bjóða",
@@ -257,109 +257,109 @@
"private-group": "Lokaður hópur",
"private-group-description": "Ef þú stillir hópinn þinn sem lokaðan hóp lokast á alla almennan aðgang. Þessi stilling hefur forgang fram yfir einstakar stillingar fyrir almenna sýn",
"enable-public-access": "Virkja almennan aðgang",
"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": "Allow users outside of your group to see your recipes",
"allow-users-outside-of-your-group-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 group or with a pre-generated private link",
"enable-public-access-description": "Gera uppskriftir innan hópa aðgengar öllum og leyfa gestum að skoða þær án þess að skrá sig inn",
"allow-users-outside-of-your-group-to-see-your-recipes": "Leyfa notendum utan þíns hóps að sjá þínar uppskriftir",
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Sé þetta virkt getur þú deilt uppskriftum með tengli án þess notandi þurfi að stofna aðgang. Sé þetta óvirkt, er bara hægt að deila uppskriftum innan þíns hóps eða með tilbúnum tengli",
"show-nutrition-information": "Sýna næringargildi innihalds",
"show-nutrition-information-description": "When enabled the nutrition information will be shown on the recipe if available. If there is no nutrition information available, the nutrition information will not be shown",
"show-nutrition-information-description": "Sé þetta virkt eru næringargildi sýnileg. Ef það er engar upplýsingar um næringargildi þá koma þau ekki fram",
"show-recipe-assets": "Sýna skrár og efni uppskriftar",
"show-recipe-assets-description": "When enabled the recipe assets will be shown on the recipe if available",
"default-to-landscape-view": "Default to landscape view",
"default-to-landscape-view-description": "When enabled the recipe header section will be shown in landscape view",
"disable-users-from-commenting-on-recipes": "Disable users from commenting on recipes",
"disable-users-from-commenting-on-recipes-description": "Hides the comment section on the recipe page and disables commenting",
"disable-organizing-recipe-ingredients-by-units-and-food": "Disable organizing recipe ingredients by units and food",
"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",
"show-recipe-assets-description": "Ef virkt munu þær skrár sem hafa verið settar inn með uppskriftinni vera sýnilegar með uppskriftinni",
"default-to-landscape-view": "Gera lárétt snið sjálfgefið",
"default-to-landscape-view-description": "Ef virkt verður hausinn á uppskriftinni sýndur í láréttu sniði",
"disable-users-from-commenting-on-recipes": "Slökkva á að notendur geti skrifað athugasemdir við uppskriftir",
"disable-users-from-commenting-on-recipes-description": "Felur möguleikann á að skrifa og sjá athugasemdir við uppskriftir",
"disable-organizing-recipe-ingredients-by-units-and-food": "Óvirkja röðun innihaldi uppskrifta eftir einingum og matvælum",
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Felur matvörur, einingar og magn fyrir innihaldsefni og meðhöndlar innihald sem venjulegan texta reit",
"general-preferences": "Almenni valmöguleikar",
"group-recipe-preferences": "Group Recipe Preferences",
"group-recipe-preferences": "Stillingar fyrir hóp uppskriftir",
"report": "Skýrsla",
"report-with-id": "Report ID: {id}",
"group-management": "Group Management",
"admin-group-management": "Admin Group Management",
"admin-group-management-text": "Changes to this group will be reflected immediately.",
"group-id-value": "Group Id: {0}",
"total-households": "Total Households",
"you-must-select-a-group-before-selecting-a-household": "You must select a group before selecting a household"
"report-with-id": "Skýrslu ID: {id}",
"group-management": "Hópastjórnun",
"admin-group-management": "Hópastjórnun",
"admin-group-management-text": "Breytingar á þessum hóp koma strax fram.",
"group-id-value": "p ID: {0}",
"total-households": "Fjöldi heimila",
"you-must-select-a-group-before-selecting-a-household": "Þú verður að velja hóp áður en þú velur heimili"
},
"household": {
"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"
"household": "Heimili",
"households": "Heimili",
"user-household": "Heimilishópur notanda",
"create-household": "Stofna heimili",
"household-name": "Heiti heimilis",
"household-group": "Hópur heimilis",
"household-management": "Umsjá heimilis",
"manage-households": "Umsjá heimilis",
"admin-household-management": "Umsjá heimilis",
"admin-household-management-text": "Breytingar á þessu heimili koma strax fram.",
"household-id-value": "Heimilis ID: {0}",
"private-household": "Einka heimili",
"private-household-description": "Ef þú stillir hópinn þinn sem lokaðan hóp lokast á alla almennan aðgang. Þessi stilling hefur forgang fram yfir einstakar stillingar fyrir almenna sýn",
"lock-recipe-edits-from-other-households": "Loka fyrir að önnur heimili geti breytt uppskriftum",
"lock-recipe-edits-from-other-households-description": "Þegar virkt þá geta bara notendur í þínu heimili breytt uppskriftum sem er settar inn af þínu heimili",
"household-recipe-preferences": "Stillingar fyrir heimilis uppskriftir",
"default-recipe-preferences-description": "Þetta eru sjálfgefnar stillingar þegar nýjar uppskriftir eru settar inn í þínu heimili. Þeim er hægt að breyta fyrir hverja uppskrift í stillingum fyrir uppskriftina.",
"allow-users-outside-of-your-household-to-see-your-recipes": "Leyfa notendum utan þíns heimilis að sjá ykkar uppskriftir",
"allow-users-outside-of-your-household-to-see-your-recipes-description": "Sé þetta virkt getur þú deilt uppskriftum með tengli án þess notandi þurfi að stofna aðgang. Sé þetta óvirkt, er bara hægt að deila uppskriftum innan þíns hóps eða með tilbúnum tengli",
"household-preferences": "Stillingar heimilis"
},
"meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan",
"update-this-meal-plan": "Update this Meal Plan",
"dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT",
"edit-meal-plan": "Edit Meal Plan",
"end-date": "End Date",
"group": "Group (Beta)",
"create-a-new-meal-plan": "Búa til nýtt matarplan",
"update-this-meal-plan": "Uppfæra matarplan",
"dinner-this-week": "Kvöldmaturinn í þessari viku",
"dinner-today": "Kvöldmaturinn í dag",
"dinner-tonight": "KVÖLDMATUR Í KVÖLD",
"edit-meal-plan": "Breyta matarplani",
"end-date": "Loka dagsetning",
"group": "Hópur (Beta)",
"main": "Main",
"meal-planner": "Meal Planner",
"meal-plans": "Meal Plans",
"mealplan-categories": "MEALPLAN CATEGORIES",
"mealplan-created": "Mealplan created",
"mealplan-creation-failed": "Mealplan creation failed",
"mealplan-deleted": "Mealplan Deleted",
"mealplan-deletion-failed": "Mealplan deletion failed",
"mealplan-settings": "Mealplan Settings",
"mealplan-update-failed": "Mealplan update failed",
"mealplan-updated": "Mealplan Updated",
"mealplan-households-description": "If no household is selected, recipes can be added from any household",
"any-category": "Any Category",
"any-tag": "Any Tag",
"any-household": "Any Household",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"numberOfDays-hint": "Number of days on page load",
"numberOfDays-label": "Default Days",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planner",
"meal-planner": "Matarplan",
"meal-plans": "Matarplön",
"mealplan-categories": "MATARPLANS HÓPAR",
"mealplan-created": "Matarplan útbúið",
"mealplan-creation-failed": "Mistókst að búa til matarplan",
"mealplan-deleted": "Matarplani eytt",
"mealplan-deletion-failed": "Mistókst að eyða matarplani",
"mealplan-settings": "Stillingar matarplans",
"mealplan-update-failed": "Mistókst að uppfæra matarplan",
"mealplan-updated": "Matarplan uppfært",
"mealplan-households-description": "Ef ekkert heimili er valið er hægt að bæta við uppskriftum frá öllum heimilimum",
"any-category": "Allir flokkar",
"any-tag": "Allir flokkar",
"any-household": "Öll heimili",
"no-meal-plan-defined-yet": "Ekkert matarplan hefur verið skilgreint",
"no-meal-planned-for-today": "Ekkert matarplan skipulagt í dag",
"numberOfDays-hint": "Fjöldi daga við síðuhleðslu",
"numberOfDays-label": "Sjálfgefnir dagar",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Aðeins uppskriftir í þessum flokkum verða notaðir í matarplan",
"planner": "Matarplan",
"quick-week": "Quick Week",
"side": "Side",
"sides": "Sides",
"start-date": "Start Date",
"rule-day": "Rule Day",
"meal-type": "Meal Type",
"breakfast": "Breakfast",
"lunch": "Lunch",
"dinner": "Dinner",
"type-any": "Any",
"day-any": "Any",
"editor": "Editor",
"meal-recipe": "Meal Recipe",
"meal-title": "Meal Title",
"meal-note": "Meal Note",
"note-only": "Note Only",
"random-meal": "Random Meal",
"random-dinner": "Random Dinner",
"random-side": "Random Side",
"this-rule-will-apply": "This rule will apply {dayCriteria} {mealTypeCriteria}.",
"to-all-days": "to all days",
"on-days": "on {0}s",
"for-all-meal-types": "for all meal types",
"for-type-meal-types": "for {0} meal types",
"meal-plan-rules": "Meal Plan Rules",
"new-rule": "New Rule",
"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.",
"side": "Meðlæti",
"sides": "Meðlæti",
"start-date": "Upphafsdagsetning",
"rule-day": "Regla fyrir dag",
"meal-type": "Hvernig matur",
"breakfast": "Morgunverður",
"lunch": "Hádegisverður",
"dinner": "Kvöldverður",
"type-any": "Allir",
"day-any": "Alla",
"editor": "Ritill",
"meal-recipe": "Uppskrift",
"meal-title": "Heiti máltíðar",
"meal-note": "Athugasemdir",
"note-only": "Bara athugasemd",
"random-meal": "Handahófskennd máltíð",
"random-dinner": "Handahófskenndur kvöldverður",
"random-side": "Handahófskennt meðlæti",
"this-rule-will-apply": "Þessi regla gildir {dayCriteria} {mealTypeCriteria}.",
"to-all-days": "alla daga",
"on-days": "á {0}",
"for-all-meal-types": "um allar tegundir máltíða",
"for-type-meal-types": "um {0} ",
"meal-plan-rules": "Reglur fyrir máltíðar skipulag",
"new-rule": "Ný regla",
"meal-plan-rules-description": "Þú getur búið til reglur til að velja sjálfvirkt uppskriftir fyrir máltíðar skipulagið. Þessar reglur eru notaðar af kerfinu til að ákvarða hvaða uppskriftir koma til greina þegar máltíðaplön eru búin til af handahófi. Athugaðu að ef reglur hafa sömu skilyrði fyrir dag eða tegund máltíðar, verða síurnar í reglunum sameinaðar. Í reynd er óþarfi að búa til tvítekna reglur, þó það sé mögulegt.",
"new-rule-description": "When creating a new rule for a meal plan you can restrict the rule to be applicable for a specific day of the week and/or a specific type of meal. To apply a rule to all days or all meal types you can set the rule to \"Any\" which will apply it to all the possible values for the day and/or meal type.",
"recipe-rules": "Recipe Rules",
"applies-to-all-days": "Applies to all days",
@@ -468,7 +468,7 @@
"calories": "Calories",
"calories-suffix": "calories",
"carbohydrate-content": "Carbohydrate",
"categories": "Categories",
"categories": "Flokkar",
"cholesterol-content": "Cholesterol",
"comment-action": "Comment",
"comment": "Comment",
@@ -479,22 +479,22 @@
"description": "Description",
"disable-amount": "Disable Ingredient Amounts",
"disable-comments": "Disable Comments",
"duplicate": "Duplicate recipe",
"duplicate-name": "Name of the new recipe",
"duplicate": "Afrita uppskrift",
"duplicate-name": "Nafn á nýju uppskriftinni",
"edit-scale": "Edit Scale",
"fat-content": "Fat",
"fiber-content": "Fiber",
"grams": "grams",
"ingredient": "Ingredient",
"ingredients": "Ingredients",
"grams": "grömm",
"ingredient": "Innihald",
"ingredients": "Innihald",
"insert-ingredient": "Insert Ingredient",
"insert-section": "Insert Section",
"insert-above": "Insert Above",
"insert-below": "Insert Below",
"instructions": "Instructions",
"instructions": "Aðferð",
"key-name-required": "Key Name Required",
"landscape-view-coming-soon": "Landscape View",
"milligrams": "milligrams",
"milligrams": "milligrömm",
"new-key-name": "New Key Name",
"no-white-space-allowed": "No White Space Allowed",
"note": "Note",
@@ -525,8 +525,8 @@
"share-recipe-message": "I wanted to share my {0} recipe with you.",
"show-nutrition-values": "Show Nutrition Values",
"sodium-content": "Sodium",
"step-index": "Step: {step}",
"sugar-content": "Sugar",
"step-index": "Skref {step}",
"sugar-content": "Sykur",
"title": "Title",
"total-time": "Total Time",
"trans-fat-content": "Trans-fat",
@@ -535,7 +535,7 @@
"no-recipe": "No Recipe",
"locked-by-owner": "Locked by Owner",
"join-the-conversation": "Join the Conversation",
"add-recipe-to-mealplan": "Add Recipe to Mealplan",
"add-recipe-to-mealplan": "Bæta uppskrift við matarplan",
"entry-type": "Entry Type",
"date-format-hint": "MM/DD/YYYY format",
"date-format-hint-yyyy-mm-dd": "YYYY-MM-DD format",
@@ -545,9 +545,9 @@
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"successfully-added-to-list": "Successfully added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan",
"recipe-added-to-mealplan": "Uppskrift bætt við matarplan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan",
"failed-to-add-recipe-to-mealplan": "Mistókst að bæta uppskrift við matarplan",
"failed-to-add-to-list": "Failed to add to list",
"yield": "Yield",
"yields-amount-with-text": "Yields {amount} {text}",
@@ -560,12 +560,12 @@
"toggle-section": "Toggle Section",
"see-original-text": "See Original Text",
"original-text-with-value": "Original Text: {originalText}",
"ingredient-linker": "Ingredient Linker",
"ingredient-linker": "Tengja innihald",
"unlinked": "Not linked yet",
"linked-to-other-step": "Linked to other step",
"linked-to-other-step": "Tengt við önnur skref",
"auto": "Auto",
"cook-mode": "Cook Mode",
"link-ingredients": "Link Ingredients",
"link-ingredients": "Tengja við innihald",
"merge-above": "Merge Above",
"move-to-bottom": "Move To Bottom",
"move-to-top": "Move To Top",
@@ -654,7 +654,7 @@
"upload-image": "Upload image",
"screen-awake": "Keep Screen Awake",
"remove-image": "Remove image",
"nextStep": "Next step",
"nextStep": "Næsta skref",
"recipe-actions": "Recipe Actions",
"parser": {
"ingredient-parser": "Ingredient Parser",
@@ -725,7 +725,7 @@
},
"settings": {
"add-a-new-theme": "Add a New Theme",
"admin-settings": "Admin Settings",
"admin-settings": "Stjórnanda stillingar",
"backup": {
"backup-created": "Backup created successfully",
"backup-created-at-response-export_path": "Backup Created at {path}",
@@ -758,7 +758,7 @@
"first-day-of-week": "First day of the week",
"group-settings-updated": "Group Settings Updated",
"homepage": {
"all-categories": "All Categories",
"all-categories": "Allir flokkar",
"card-per-section": "Card Per Section",
"home-page": "Home Page",
"home-page-sections": "Home Page Sections",
@@ -774,11 +774,11 @@
"organize": "Organize",
"page-name": "Page Name",
"pages": "Pages",
"profile": "Profile",
"profile": "Prófíll",
"remove-existing-entries-matching-imported-entries": "Remove existing entries matching imported entries",
"set-new-time": "Set New Time",
"settings-update-failed": "Settings update failed",
"settings-updated": "Settings updated",
"settings-updated": "Stillingar uppfærðar",
"site-settings": "Site Settings",
"theme": {
"accent": "Accent",
@@ -799,7 +799,7 @@
"theme-name": "Theme Name",
"theme-name-is-required": "Theme Name is required.",
"theme-saved": "Theme Saved",
"theme-updated": "Theme updated",
"theme-updated": "Þema uppfært",
"warning": "Warning",
"light-mode": "Light Mode",
"dark-mode": "Dark Mode"
@@ -851,7 +851,7 @@
"not-ready": "Not Ready - Check Environmental Variables",
"succeeded": "Succeeded",
"failed": "Failed",
"general-about": "General About",
"general-about": "Upplýsingar",
"application-version": "Application Version",
"application-version-error-text": "Your current version ({0}) does not match the latest release. Considering updating to the latest version ({1}).",
"mealie-is-up-to-date": "Mealie is up to date",
@@ -884,7 +884,7 @@
"shopping-lists": "Innkaupalisti",
"food": "Food",
"note": "Note",
"label": "Label",
"label": "Merkingar",
"save-label": "Save Label",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food",
@@ -911,13 +911,13 @@
"sidebar": {
"all-recipes": "All Recipes",
"backups": "Backups",
"categories": "Categories",
"categories": "Flokkar",
"cookbooks": "Cookbooks",
"dashboard": "Dashboard",
"home-page": "Home Page",
"manage-users": "Manage Users",
"migrations": "Migrations",
"profile": "Profile",
"profile": "Prófíll",
"search": "Search",
"site-settings": "Site Settings",
"tags": "Tags",
@@ -964,7 +964,7 @@
"tool": "Tool"
},
"user": {
"admin": "Admin",
"admin": "Stjórnandi",
"are-you-sure-you-want-to-delete-the-link": "Are you sure you want to delete the link <b>{link}<b/>?",
"are-you-sure-you-want-to-delete-the-user": "Are you sure you want to delete the user <b>{activeName} ID: {activeId}<b/>?",
"auth-method": "Auth Method",
@@ -996,14 +996,14 @@
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
"password-must-match": "Password must match",
"password-reset-failed": "Password reset failed",
"password-updated": "Password updated",
"password-updated": "Lykilorð uppfært",
"password": "Password",
"password-strength": "Password is {strength}",
"please-enter-password": "Please enter your new password.",
"register": "Register",
"reset-password": "Reset Password",
"sign-in": "Sign in",
"total-mealplans": "Total MealPlans",
"total-mealplans": "Fjöldi matarplana",
"total-users": "Total Users",
"upload-photo": "Upload Photo",
"use-8-characters-or-more-for-your-password": "Use 8 characters or more for your password",
@@ -1015,9 +1015,9 @@
"user-password": "User Password",
"user-successfully-logged-in": "User Successfully Logged In",
"user-update-failed": "User update failed",
"user-updated": "User updated",
"user-updated": "Notandaupplýsingar uppfærðar",
"user": "User",
"username": "Username",
"username": "Notandanafn",
"users-header": "USERS",
"users": "Users",
"user-not-found": "User not found",
@@ -1028,7 +1028,7 @@
"enable-advanced-content": "Enable Advanced Content",
"enable-advanced-content-description": "Enables advanced features like Recipe Scaling, API keys, Webhooks, and Data Management. Don't worry, you can always change this later",
"favorite-recipes": "Favorite Recipes",
"email-or-username": "Email or Username",
"email-or-username": "Tölvupóstur eða notandanafn",
"remember-me": "Remember Me",
"please-enter-your-email-and-password": "Please enter your email and password",
"invalid-credentials": "Invalid Credentials",
@@ -1042,14 +1042,14 @@
},
"user-management": "User Management",
"reset-locked-users": "Reset Locked Users",
"admin-user-creation": "Admin User Creation",
"admin-user-management": "Admin User Management",
"admin-user-creation": "Búa til stjórnandaaðgang",
"admin-user-management": "Stjórna notendum",
"user-details": "User Details",
"user-name": "User Name",
"authentication-method": "Authentication Method",
"authentication-method-hint": "This specifies how a user will authenticate with Mealie. If you're not sure, choose 'Mealie'",
"permissions": "Permissions",
"administrator": "Administrator",
"administrator": "Stjórnandi",
"user-can-invite-other-to-group": "User can invite others to group",
"user-can-manage-group": "User can manage group",
"user-can-manage-household": "User can manage household",
@@ -1128,10 +1128,10 @@
"data-exports-description": "This section provides links to available exports that are ready to download. These exports do expire, so be sure to grab them while they're still available.",
"data-exports": "Data Exports",
"tag": "Tag",
"categorize": "Categorize",
"update-settings": "Update Settings",
"categorize": "Flokka",
"update-settings": "Uppfæra stillingar",
"tag-recipes": "Tag Recipes",
"categorize-recipes": "Categorize Recipes",
"categorize-recipes": "Flokka uppskriftir",
"export-recipes": "Export Recipes",
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
@@ -1153,8 +1153,8 @@
"columns": "Columns",
"combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"edit-category": "Breyta flokkum",
"new-category": "Nýr flokkur",
"category-data": "Category Data"
},
"tags": {
@@ -1182,7 +1182,7 @@
},
"validation": {
"group-name-is-taken": "Group name is taken",
"username-is-taken": "Username is taken",
"username-is-taken": "Notandanafn er þegar í notkun",
"email-is-taken": "Email is taken",
"this-field-is-required": "This Field is Required"
},
@@ -1212,7 +1212,7 @@
},
"demo": {
"info_message_with_version": "This is a Demo for version: {version}",
"demo_username": "Username: {username}",
"demo_username": "Notandi: {username}",
"demo_password": "Password: {password}"
},
"ocr-editor": {
@@ -1291,13 +1291,13 @@
"openai": "OpenAI",
"show-individual-confidence": "Show individual confidence",
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",
"average-confident": "{0} öryggi",
"try-an-example": "Try an example",
"parser": "Parser",
"background-tasks": "Background Tasks",
"background-tasks-description": "Here you can view all the running background tasks and their status",
"no-logs-found": "No Logs Found",
"tasks": "Tasks",
"tasks": "Verkefni",
"setup": {
"first-time-setup": "First Time Setup",
"welcome-to-mealie-get-started": "Welcome to Mealie! Let's get started",
@@ -1332,14 +1332,14 @@
"personal": "Personal",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
"user-settings": "User Settings",
"user-settings-description": "Manage your preferences, change your password, and update your email.",
"user-settings-description": "Breyta þínum stillingum, breyta lykilorði og breyta tölvupósti.",
"api-tokens-description": "Manage your API Tokens for access from external applications.",
"group-description": "These items are shared within your group. Editing one of them will change it for the whole group!",
"group-settings": "Group Settings",
"group-settings-description": "Manage your common group settings, like 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",
"household-settings-description": "Manage your household settings, like mealplan and privacy settings.",
"household-settings-description": "Stjórnaðu stillingum heimilis, eins og matarplani og persónuverndarstillingum.",
"cookbooks-description": "Manage a collection of recipe categories and generate pages for them.",
"members": "Members",
"members-description": "See who's in your household and manage their permissions.",
@@ -1355,7 +1355,7 @@
"personal-information": "Personal Information",
"preferences": "Preferences",
"show-advanced-description": "Show advanced features (API Keys, Webhooks, and Data Management)",
"back-to-profile": "Back to Profile",
"back-to-profile": "Til baka í prófíl",
"looking-for-privacy-settings": "Looking for Privacy Settings?",
"manage-your-api-tokens": "Manage Your API Tokens",
"manage-user-profile": "Manage User Profile",
@@ -1374,7 +1374,7 @@
"public-cookbook-description": "Public Cookbooks can be shared with non-mealie users and will be displayed on your groups page.",
"filter-options": "Filter Options",
"filter-options-description": "When require all is selected the cookbook will only include recipes that have all of the items selected. This applies to each subset of selectors and not a cross section of the selected items.",
"require-all-categories": "Require All Categories",
"require-all-categories": "Þarf alla flokka",
"require-all-tags": "Require All Tags",
"require-all-tools": "Require All Tools",
"cookbook-name": "Cookbook Name",

View File

@@ -69,7 +69,7 @@
"new-notification": "Nytt varsel",
"event-notifiers": "Hendelsesvarsler",
"apprise-url-skipped-if-blank": "Apprise-URL (hoppes over hvis tom)",
"apprise-url-is-left-intentionally-blank": "Since Apprise URLs typically contain sensitive information, this field is left intentionally blank while editing. If you wish to update the URL, please enter the new one here, otherwise leave it blank to keep the current URL.",
"apprise-url-is-left-intentionally-blank": "Siden Apprise URL-er vanligvis inneholder sensitiv informasjon, må dette feltet ikke være tomt mens du redigerer. Hvis du vil oppdatere URL, skriv inn den nye her, ellers la den være tom for å beholde den gjeldende URL.",
"enable-notifier": "Aktiver varslingsagenten",
"what-events": "Hvilke hendelser skal denne varslingsagenten abonnere på?",
"user-events": "Brukerhendelser",
@@ -81,7 +81,7 @@
"category-events": "Kategorihendelser",
"when-a-new-user-joins-your-group": "Når en ny bruker blir med i gruppen din",
"recipe-events": "Oppskriftshendelser",
"label-events": "Label Events"
"label-events": "Merk hendelser"
},
"general": {
"add": "Legg til",
@@ -561,7 +561,7 @@
"see-original-text": "Se opprinnelig tekst",
"original-text-with-value": "Opprinnelig tekst: {originalText}",
"ingredient-linker": "Tilknytt ingredienser",
"unlinked": "Not linked yet",
"unlinked": "Ingen lenke enda",
"linked-to-other-step": "Tilknyttet et annet steg",
"auto": "Automatisk",
"cook-mode": "Tilberedelsesmodus",
@@ -590,7 +590,7 @@
"api-extras-description": "Ekstramaterialer til oppskrifter er en viktig funksjon i Mealie API-en. De lar deg opprette egendefinerte JSON-nøkkel/verdi-par innenfor en oppskrift for å referere fra tredjepartsapplikasjoner. Du kan bruke disse nøklene til å gi informasjon for eksempel for å utløse automatiseringer eller egendefinerte meldinger som skal videreformidles til ønsket enhet.",
"message-key": "Meldingsnøkkel",
"parse": "Analyser",
"ingredients-not-parsed-description": "It looks like your ingredients aren't parsed yet. Click the \"{parse}\" button below to parse your ingredients into structured foods.",
"ingredients-not-parsed-description": "Det ser ut som ingridensene ikke har blitt analysert enda. Klikk\"{parse}\"-knappen under for å analysere ingrediensese som strukturert matvarer.",
"attach-images-hint": "Fest bilder ved å dra og slippe dem inn i redigereringsverktøyet",
"drop-image": "Slipp bilde",
"enable-ingredient-amounts-to-use-this-feature": "Aktiver ingrediensmengder for å bruke denne funksjonen",
@@ -624,7 +624,7 @@
"scrape-recipe-you-can-import-from-raw-data-directly": "Du kan importere fra rådata direkte",
"import-original-keywords-as-tags": "Importer originale søkeord som emneord",
"stay-in-edit-mode": "Forbli i redigeringsmodus",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Analyser oppskriftens ingredienser etter at importen er fullført",
"import-from-zip": "Importer fra zip-fil",
"import-from-zip-description": "Importer en enkelt oppskrift som ble eksportert fra en annen Mealie-instans.",
"import-from-html-or-json": "Importer fra HTML eller JSON",
@@ -668,15 +668,15 @@
"no-unit": "Ingen enhet",
"missing-unit": "Opprett manglende enhet: {unit}",
"missing-food": "Opprett manglende mat: {food}",
"this-unit-could-not-be-parsed-automatically": "This unit could not be parsed automatically",
"this-unit-could-not-be-parsed-automatically": "Denne enheten kunne ikke analyseres automatisk",
"this-food-could-not-be-parsed-automatically": "Denne maten kunne ikke leses automatisk",
"no-food": "Ingen matvarer",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Gjennomgå de analyserte ingrediensene",
"confidence-score": "Tillit score",
"ingredient-parser-description": "Ingrediensene har blitt analysert. Venligst gjennomgå ingrediensene vi ikke er sikkre på.",
"ingredient-parser-final-review-description": "Når alle ingredienser er gjennomgått, har du en siste sjanse til å gjennomgå alle ingrediensene før du tar i bruk endringene på oppskriften din.",
"add-text-as-alias-for-item": "Legg til \"{text}\" som kallenavn for {item}",
"delete-item": "Slett gjenstanden"
},
"reset-servings-count": "Nullstill antall porsjoner",
"not-linked-ingredients": "Tilleggsingredienser",
@@ -1177,7 +1177,7 @@
"group-details": "Gruppedetaljer",
"group-details-description": "Før du oppretter en konto må du opprette en gruppe. Gruppen din vil bare inneholde deg, men du vil kunne invitere andre senere. Medlemmer i gruppen din kan dele måltider, handlelister, oppskrifter med mer!",
"use-seed-data": "Bruk tilføringsdata",
"use-seed-data-description": "Mealie ships with a collection of Foods, Units, and Labels that can be used to populate your group with helpful data for organizing your recipes. These are translated into the language you currently have selected. You can always add to or modify this data later.",
"use-seed-data-description": "Mealie leveres med en kolleksjon av matvarer, enheter og etiketter, som can bli brukt til å utfylle gruppen med hjelpsom data for organisering av oppskrifter. Disse er oversatt over til språket du har valgt. Du kan alltid legge til eller modifisere denne dataen senere.",
"account-details": "Kontodetaljer"
},
"validation": {

View File

@@ -624,7 +624,7 @@
"scrape-recipe-you-can-import-from-raw-data-directly": "Możesz zaimportować bezpośrednio z surowych danych",
"import-original-keywords-as-tags": "Importuj oryginalne słowa kluczowe jako tagi",
"stay-in-edit-mode": "Pozostań w trybie edycji",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Analizuj składniki receptury po zaimportowaniu",
"import-from-zip": "Importuj z pliku Zip",
"import-from-zip-description": "Importuj pojedynczy przepis, który został wyeksportowany z innej instancji Mealie.",
"import-from-html-or-json": "Importuj z HTML lub JSON",
@@ -671,12 +671,12 @@
"this-unit-could-not-be-parsed-automatically": "Nie można przetworzyć tej jednostki automatycznie",
"this-food-could-not-be-parsed-automatically": "Nie można przetworzyć tego jedzenia automatycznie",
"no-food": "Brak potrawy",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"review-parsed-ingredients": "Przejrzyj przeanalizowane składniki",
"confidence-score": "Wskaźnik pewności",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"delete-item": "Usuń przedmiot"
},
"reset-servings-count": "Zresetuj liczbę porcji",
"not-linked-ingredients": "Dodatkowe składniki",

View File

@@ -671,12 +671,12 @@
"this-unit-could-not-be-parsed-automatically": "Esta unidade não pôde ser analisada automaticamente",
"this-food-could-not-be-parsed-automatically": "Este alimento não pôde ser analisado automaticamente",
"no-food": "Sem Comida",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Revisar ingredientes analisados",
"confidence-score": "Nota de Confiança",
"ingredient-parser-description": "Seus ingredientes foram analisados com sucesso. Por favor, verifique os ingredientes que não temos certeza.",
"ingredient-parser-final-review-description": "Depois que todos os ingredientes forem revisados, você terá mais uma chance de revisar todos os ingredientes antes de aplicar as mudanças em sua receita.",
"add-text-as-alias-for-item": "Adicionar \"{text}\" como apelido para {item}",
"delete-item": "Excluir item"
},
"reset-servings-count": "Redefinir Contagem de Porções",
"not-linked-ingredients": "Ingredientes adicionais",

View File

@@ -549,7 +549,7 @@
"failed-to-add-recipes-to-list": "Pridanie receptu do zoznamu zlyhalo",
"failed-to-add-recipe-to-mealplan": "Pridanie receptu do stravovacieho plánu zlyhalo",
"failed-to-add-to-list": "Pridanie do zoznamu zlyhalo",
"yield": "Počet porcií",
"yield": "Množstvo",
"yields-amount-with-text": "Pre {amount} {text}",
"yield-text": "Jednotka množstva",
"quantity": "Množstvo",
@@ -590,7 +590,7 @@
"api-extras-description": "API dolnky receptov sú kľúčovou funkcionalitou Mealie API. Umožňujú používateľom vytvárať vlastné JSON páry kľúč/hodnota v rámci receptu, a využiť v aplikáciách tretích strán. Údaje uložené pod jednotlivými kľúčmi je možné využiť napríklad ako spúšťač automatizovaných procesov, či pri zasielaní vlastných správ do vami zvolených zariadení.",
"message-key": "Kľúč správy",
"parse": "Analyzovať",
"ingredients-not-parsed-description": "",
"ingredients-not-parsed-description": "Zdá sa, že vaše suroviny neboli zatiaľ analyzované. Kliknite na tlačidlo \"{parse}\" nižšie, aby ste rozložili ingrediencie do štrukturovaných potravín.",
"attach-images-hint": "Pridaj obrázky ich potiahnutím a pustením na editor",
"drop-image": "Odstrániť obrázok",
"enable-ingredient-amounts-to-use-this-feature": "Povoľ množstvám prísad využívať túto vlastnosť",
@@ -624,7 +624,7 @@
"scrape-recipe-you-can-import-from-raw-data-directly": "Môžete importovať priamo nespracované údaje",
"import-original-keywords-as-tags": "Importovať pôvodné kľúčové slová ako štítky",
"stay-in-edit-mode": "Zostať v režime editovania",
"parse-recipe-ingredients-after-import": "Parse recipe ingredients after import",
"parse-recipe-ingredients-after-import": "Analyzovať ingrediencie po importe",
"import-from-zip": "Importovať zo Zip-súboru",
"import-from-zip-description": "Importovať recept exportovaný z inej Mealie inštalácie.",
"import-from-html-or-json": "Importovať z HTML alebo JSONu",
@@ -671,12 +671,12 @@
"this-unit-could-not-be-parsed-automatically": "Túto jednotku nebolo možné parsovať automaticky",
"this-food-could-not-be-parsed-automatically": "Toto jedlo nebolo možné parsovať automaticky",
"no-food": "Žiadne suroviny",
"review-parsed-ingredients": "Review parsed ingredients",
"confidence-score": "Confidence Score",
"ingredient-parser-description": "Your ingredients have been successfully parsed. Please review the ingredients we're not sure about.",
"ingredient-parser-final-review-description": "Once all ingredients have been reviewed, you'll have one more chance to review all ingredients before applying the changes to your recipe.",
"add-text-as-alias-for-item": "Add \"{text}\" as alias for {item}",
"delete-item": "Delete Item"
"review-parsed-ingredients": "Skontrolovať analyzované ingrediencie",
"confidence-score": "Skóre istoty",
"ingredient-parser-description": "Vaše ingrediencie boli úspešne zanalyzované. Prosím prekontrolujte ingrediencie pri ktorých nemáme istotu.",
"ingredient-parser-final-review-description": "Keď skontrolujete všetky ingrediencie, budete mať ešte jednu možnosť skontrolovať ich pred tým než uložíte zmeny vo svojom recepte.",
"add-text-as-alias-for-item": "Pridať \"{text}\" ako alias pre {item}",
"delete-item": "Zmazať položku"
},
"reset-servings-count": "Resetovať počet porcií",
"not-linked-ingredients": "Ďalšie suroviny",
@@ -1072,7 +1072,7 @@
"foods": {
"merge-dialog-text": "Kombináciou vybraných potravín sa zdrojové jedlo a cieľové jedlo zlúčia do jedného jedla. Zdrojové jedlo bude vymazané a všetky odkazy na zdrojové jedlo budú aktualizované tak, aby ukazovali na cieľové jedlo.",
"merge-food-example": "Zlučujem {food1} do {food2}",
"seed-dialog-text": "Naplňte databázu potravinami vo vašom jazyku. Tým vytvoríte viac ako 200 bežných potravín, ktoré môžete použiť na organizovanie vašej databáze. Potraviny sú preložené vďaka úsiliu komunity.",
"seed-dialog-text": "Naplňte databázu potravinami vo vašom jazyku. Tým vytvoríte viac ako 2700 bežných potravín, ktoré môžete použiť na organizovanie vašej databáze. Potraviny sú preložené vďaka úsiliu komunity.",
"seed-dialog-warning": "V databáze už máte nejaké údaje. Táto akcia neodstráni duplicitné položky, budete ich musieť odstrániť ručne.",
"combine-food": "Kombinované jedlo",
"source-food": "Zdrojové jedlo",
@@ -1177,7 +1177,7 @@
"group-details": "Podrobnosti o skupine",
"group-details-description": "Pred vytvorením účtu musíte vytvoriť skupinu. Vaša skupina bude obsahovať iba vás, ale neskôr budete môcť pozvať ostatných. Členovia vašej skupiny môžu zdieľať stravovacie plány, nákupné zoznamy, recepty a ďalšie!",
"use-seed-data": "Použiť predvolené dáta",
"use-seed-data-description": "Mealie sa dodáva so zbierkou ingrediencií, jednotiek a označení. Môžete ich použiť vo vašej skupine pre lepšiu organizáciu vašich receptov. Tieto sú preložené do jazyka, ktorý ste si práve zvolili. Tieto dáta môžete kedykoľvek doplniť alebo zmeniť.",
"use-seed-data-description": "Mealie sa dodáva so zbierkou potravín, jednotiek a označení, ktorými môžete naplniť vašu skupinu užitočnými dátami pre lepšiu organizáciu vašich receptov. Tieto sú preložené do jazyka, ktorý ste si práve zvolili. Tieto dáta môžete kedykoľvek doplniť alebo zmeniť.",
"account-details": "Detaily účtu"
},
"validation": {
@@ -1347,7 +1347,7 @@
"notifiers": "Notifikátory",
"notifiers-description": "Nastaviť e-mail a push notifikácie, ktoré sa spúšťajú pri špecifických udalostiach.",
"manage-data": "Spravovať dáta",
"manage-data-description": "Spravujte svoje údaje, jedlá, jednotky, kategórie, štítky a ďalšie.",
"manage-data-description": "Spravujte svoje údaje, potraviny, jednotky, kategórie, štítky a ďalšie.",
"data-migrations": "Migrácie dát",
"data-migrations-description": "Migrujte svoje existujúce údaje z iných aplikácií, ako sú Nextcloud Recipes a Chowdown.",
"email-sent": "E-mail Odoslaný",

View File

@@ -9,7 +9,6 @@ export default defineNuxtConfig({
modules: [
"@vite-pwa/nuxt",
"@nuxtjs/i18n",
"@sidebase/nuxt-auth",
"@nuxt/fonts",
"vuetify-nuxt-module",
"@nuxt/eslint",
@@ -126,29 +125,6 @@ export default defineNuxtConfig({
baseURL: process.env.SUB_PATH || "",
},
auth: {
isEnabled: true,
// disableServerSideAuth: true,
originEnvKey: "AUTH_ORIGIN",
baseURL: "/api",
provider: {
type: "local",
endpoints: {
signIn: { path: "/auth/token", method: "post" },
signOut: { path: "/auth/logout", method: "post" },
getSession: { path: "/users/self", method: "get" },
},
token: {
signInResponseTokenPointer: "/access_token",
type: "Bearer",
cookieName: AUTH_TOKEN,
},
pages: {
login: "/login",
},
},
},
// eslint rules
eslint: {
config: {
@@ -269,7 +245,7 @@ export default defineNuxtConfig({
"browser",
"window-controls-overlay",
],
orientation: "portrait-primary",
orientation: "any",
categories: ["food", "lifestyle"],
prefer_related_applications: false,
handle_links: "preferred",

View File

@@ -1,6 +1,6 @@
{
"name": "mealie",
"version": "3.2.1",
"version": "3.3.1",
"private": true,
"scripts": {
"dev": "nuxt dev",
@@ -21,7 +21,6 @@
"@mdi/js": "^7.4.47",
"@nuxt/fonts": "^0.11.4",
"@nuxtjs/i18n": "^9.2.1",
"@sidebase/nuxt-auth": "^1.1.0",
"@vite-pwa/nuxt": "^0.10.6",
"@vueuse/core": "^12.7.0",
"axios": "^1.8.1",
@@ -30,7 +29,6 @@
"isomorphic-dompurify": "^2.28.0",
"json-editor-vue": "^0.18.1",
"marked": "^15.0.12",
"next-auth": "~4.24.0",
"nuxt": "^3.19.2",
"vite": "^6.2.0",
"vue-advanced-cropper": "^2.8.9",

View File

@@ -1,6 +1,6 @@
<script setup lang="ts">
definePageMeta({
middleware: ["sidebase-auth", "admin-only"],
middleware: ["admin-only"],
});
</script>

View File

@@ -244,6 +244,7 @@ import UserRegistrationForm from "~/components/Domain/User/UserRegistrationForm.
definePageMeta({
layout: "blank",
middleware: ["admin-only"],
});
// ================================================================
@@ -264,13 +265,6 @@ useSeoMeta({
title: i18n.t("admin.setup.first-time-setup"),
});
if (!$auth.loggedIn.value) {
router.push("/login");
}
else if (!$auth.user.value?.admin) {
router.push(groupSlug.value ? `/g/${groupSlug.value}` : "/login");
}
enum Pages {
LANDING = 0,
USER_INFO = 1,

View File

@@ -194,6 +194,16 @@
</a>
</v-list-item-subtitle>
</template>
<template v-else-if="property.slot === 'version' && property.value !== 'develop' && property.value !== 'nightly'">
<v-list-item-subtitle>
<a
target="_blank"
:href="`https://github.com/mealie-recipes/mealie/releases/tag/${property.value}`"
>
{{ property.value }}
</a>
</v-list-item-subtitle>
</template>
<template v-else>
<v-list-item-subtitle>
{{ property.value }}
@@ -400,6 +410,7 @@ export default defineNuxtComponent({
rawAppInfo.value.versionLatest = data.versionLatest;
const prettyInfo = [
{
slot: "version",
name: i18n.t("about.version"),
icon: $globals.icons.information,
value: data.version,

View File

@@ -145,7 +145,7 @@ import { useCookbookPreferences } from "~/composables/use-users/preferences";
export default defineNuxtComponent({
components: { CookbookEditor, VueDraggable },
middleware: ["sidebase-auth", "group-only"],
middleware: ["group-only"],
setup() {
const dialogStates = reactive({
create: false,

View File

@@ -19,20 +19,21 @@ import type { Recipe } from "~/lib/api/types/recipe";
const $auth = useMealieAuth();
const { isOwnGroup } = useLoggedInState();
const route = useRoute();
const title = ref(route.meta?.title ?? "");
const title = ref(route.meta?.title as string || "");
useSeoMeta({ title });
const router = useRouter();
const slug = route.params.slug as string;
const recipe = ref<Recipe | null>(null);
if (isOwnGroup.value) {
function loadRecipe() {
const { recipe: data } = useRecipe(slug);
watch(data, (value) => {
recipe.value = value;
});
}
else {
async function loadPublicRecipe() {
const groupSlug = computed(() => route.params.groupSlug as string || $auth.user.value?.groupSlug || "");
const api = usePublicExploreApi(groupSlug.value);
const { data } = await useAsyncData(useAsyncKey(), async () => {
@@ -47,6 +48,13 @@ else {
recipe.value = data.value;
}
if (isOwnGroup.value) {
loadRecipe();
}
else {
onMounted(loadPublicRecipe);
}
whenever(
() => recipe.value,
() => {

View File

@@ -49,7 +49,7 @@ import AdvancedOnly from "~/components/global/AdvancedOnly.vue";
export default defineNuxtComponent({
components: { AdvancedOnly },
middleware: ["sidebase-auth", "group-only"],
middleware: ["group-only"],
setup() {
const i18n = useI18n();
const $auth = useMealieAuth();

View File

@@ -23,7 +23,7 @@ export default defineNuxtComponent({
components: {
RecipeOrganizerPage,
},
middleware: ["sidebase-auth", "group-only"],
middleware: ["group-only"],
setup() {
const { store, actions } = useCategoryStore();
const i18n = useI18n();

View File

@@ -23,7 +23,7 @@ export default defineNuxtComponent({
components: {
RecipeOrganizerPage,
},
middleware: ["sidebase-auth", "group-only"],
middleware: ["group-only"],
setup() {
const { store, actions } = useTagStore();
const i18n = useI18n();

View File

@@ -36,7 +36,7 @@ import RecipeTimeline from "~/components/Domain/Recipe/RecipeTimeline.vue";
export default defineNuxtComponent({
components: { RecipeTimeline },
middleware: ["sidebase-auth", "group-only"],
middleware: ["group-only"],
setup() {
const i18n = useI18n();
const api = useUserApi();

View File

@@ -28,7 +28,7 @@ export default defineNuxtComponent({
components: {
RecipeOrganizerPage,
},
middleware: ["sidebase-auth", "group-only"],
middleware: ["group-only"],
setup() {
const $auth = useMealieAuth();
const toolStore = useToolStore();

View File

@@ -25,7 +25,7 @@ const router = useRouter();
const recipeId = route.params.id as string;
const api = usePublicApi();
const title = ref(route.meta?.title ?? "");
const title = ref(route.meta?.title as string ?? "");
useSeoMeta({
title,
});

View File

@@ -36,7 +36,7 @@
<script lang="ts">
export default defineNuxtComponent({
middleware: ["sidebase-auth", "can-organize-only"],
middleware: ["can-organize-only"],
setup() {
const i18n = useI18n();
const buttonLookup: { [key: string]: string } = {

View File

@@ -47,7 +47,7 @@
import { useGroupSelf } from "~/composables/use-groups";
export default defineNuxtComponent({
middleware: ["sidebase-auth", "can-manage-only"],
middleware: ["can-manage-only"],
setup() {
const { group, actions: groupActions } = useGroupSelf();
const i18n = useI18n();

View File

@@ -127,7 +127,7 @@ const MIGRATIONS = {
};
export default defineNuxtComponent({
middleware: ["sidebase-auth", "advanced-only"],
middleware: ["advanced-only"],
setup() {
const i18n = useI18n();
const { $globals } = useNuxtApp();

View File

@@ -52,7 +52,6 @@ import { useUserApi } from "~/composables/api";
import type { ReportOut } from "~/lib/api/types/reports";
export default defineNuxtComponent({
middleware: "sidebase-auth",
setup() {
const route = useRoute();
const id = route.params.id as string;

View File

@@ -43,7 +43,7 @@ export default defineNuxtComponent({
components: {
HouseholdPreferencesEditor,
},
middleware: ["sidebase-auth", "can-manage-household-only"],
middleware: ["can-manage-household-only"],
setup() {
const { household, actions: householdActions } = useHouseholdSelf();
const i18n = useI18n();

View File

@@ -75,7 +75,6 @@ import { useMealplans } from "~/composables/use-group-mealplan";
import { useUserMealPlanPreferences } from "~/composables/use-users/preferences";
export default defineNuxtComponent({
middleware: ["sidebase-auth"],
setup() {
const route = useRoute();
const router = useRouter();

View File

@@ -183,7 +183,6 @@ export default defineNuxtComponent({
GroupMealPlanRuleForm,
RecipeChips,
},
middleware: ["sidebase-auth"],
props: {
modelValue: {
type: Boolean,

View File

@@ -124,7 +124,6 @@ export default defineNuxtComponent({
components: {
UserAvatar,
},
middleware: ["sidebase-auth"],
setup() {
const $auth = useMealieAuth();
const api = useUserApi();

View File

@@ -199,7 +199,7 @@ interface OptionSection {
}
export default defineNuxtComponent({
middleware: ["sidebase-auth", "advanced-only"],
middleware: ["advanced-only"],
setup() {
const api = useUserApi();
const i18n = useI18n();

View File

@@ -75,7 +75,7 @@ import { alert } from "~/composables/use-toast";
export default defineNuxtComponent({
components: { GroupWebhookEditor },
middleware: ["sidebase-auth", "advanced-only"],
middleware: ["advanced-only"],
setup() {
const i18n = useI18n();
const { actions, webhooks } = useGroupWebhooks();

View File

@@ -304,7 +304,6 @@ export default defineNuxtComponent({
oidcLoggingIn.value = true;
try {
await $auth.oauthSignIn();
window.location.href = "/"; // Reload the app to get the new user
}
catch (error) {
await router.replace("/login?direct=1");
@@ -330,8 +329,7 @@ export default defineNuxtComponent({
formData.append("remember_me", String(form.remember));
try {
await $auth.signIn(formData, { redirect: false });
window.location.href = "/"; // Reload the app to get the new user
await $auth.signIn(formData);
}
catch (error) {
console.log(error);

View File

@@ -131,7 +131,6 @@ import { useShoppingListPreferences } from "~/composables/use-users/preferences"
import type { UserOut } from "~/lib/api/types/user";
export default defineNuxtComponent({
middleware: "sidebase-auth",
setup() {
const $auth = useMealieAuth();
const i18n = useI18n();

View File

@@ -21,7 +21,6 @@ import { useLoggedInState } from "~/composables/use-logged-in-state";
export default defineNuxtComponent({
components: { RecipeCardSection },
middleware: "sidebase-auth",
setup() {
const route = useRoute();
const i18n = useI18n();

View File

@@ -111,7 +111,7 @@ import { useUserApi } from "~/composables/api";
import type { VForm } from "~/types/auto-forms";
export default defineNuxtComponent({
middleware: ["sidebase-auth", "advanced-only"],
middleware: ["advanced-only"],
setup() {
const i18n = useI18n();
const $auth = useMealieAuth();

View File

@@ -213,7 +213,6 @@ export default defineNuxtComponent({
UserAvatar,
UserPasswordStrength,
},
middleware: "sidebase-auth",
setup() {
const i18n = useI18n();
const $auth = useMealieAuth();

View File

@@ -291,7 +291,6 @@ export default defineNuxtComponent({
UserAvatar,
StatsCards,
},
middleware: "sidebase-auth",
scrollToTop: true,
async setup() {
const i18n = useI18n();

View File

@@ -0,0 +1,9 @@
export default defineNuxtPlugin({
async setup() {
const auth = useAuthBackend();
console.debug("Initializing auth plugin");
await auth.getSession();
console.debug("Auth plugin initialized");
},
});

View File

@@ -835,7 +835,7 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
"@babel/runtime@^7.11.2", "@babel/runtime@^7.20.13":
"@babel/runtime@^7.11.2":
version "7.28.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326"
integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==
@@ -1989,7 +1989,7 @@
unplugin "^2.3.3"
unstorage "^1.16.0"
"@nuxt/kit@3.19.2", "@nuxt/kit@^3.12.4", "@nuxt/kit@^3.15.4", "@nuxt/kit@^3.17.2", "@nuxt/kit@^3.17.3", "@nuxt/kit@^3.17.6", "@nuxt/kit@^3.19.2", "@nuxt/kit@^3.5.0", "@nuxt/kit@^3.9.0":
"@nuxt/kit@3.19.2", "@nuxt/kit@^3.12.4", "@nuxt/kit@^3.15.4", "@nuxt/kit@^3.17.2", "@nuxt/kit@^3.17.3", "@nuxt/kit@^3.19.2", "@nuxt/kit@^3.5.0", "@nuxt/kit@^3.9.0":
version "3.19.2"
resolved "https://registry.yarnpkg.com/@nuxt/kit/-/kit-3.19.2.tgz#e49bd5e6672fdf21289f24603151e42a77b97e51"
integrity sha512-+QiqO0WcIxsKLUqXdVn3m4rzTRm2fO9MZgd330utCAaagGmHsgiMJp67kE14boJEPutnikfz3qOmrzBnDIHUUg==
@@ -2529,11 +2529,6 @@
resolved "https://registry.yarnpkg.com/@oxc-transform/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.87.0.tgz#798fd95ab7425be75a0a69b40f92ffef8610e32c"
integrity sha512-jG/MhMjfSdyj5KyhnwNWr4mnAlAsz+gNUYpjQ+UXWsfsoB3f8HqbsTkG02RBtNa/IuVQYvYYVf1eIimNN3gBEQ==
"@panva/hkdf@^1.0.2":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.2.1.tgz#cb0d111ef700136f4580349ff0226bf25c853f23"
integrity sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==
"@parcel/watcher-android-arm64@2.5.1":
version "2.5.1"
resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1"
@@ -2927,20 +2922,6 @@
resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8"
integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==
"@sidebase/nuxt-auth@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@sidebase/nuxt-auth/-/nuxt-auth-1.1.0.tgz#c5ad29d5703f8a75503761120f9817314eb3d807"
integrity sha512-2Lj8dmlWE1tIA2CdGlekQsVUpgy2W56jaN9WDukJWxmuSDZRNK+CqxSXReYEHF+gb2tDRLMdhmyk0JUPfnRANg==
dependencies:
"@nuxt/kit" "^3.17.6"
defu "^6.1.4"
h3 "^1.15.3"
knitwork "^1.2.0"
nitropack "^2.11.13"
requrl "^3.0.2"
scule "^1.3.0"
ufo "^1.6.1"
"@sinclair/typebox@^0.27.8":
version "0.27.8"
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
@@ -4800,11 +4781,6 @@ cookie-es@^2.0.0:
resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-2.0.0.tgz#ca6163d7ef8686ea6bbdd551f1de575569c1ed69"
integrity sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==
cookie@^0.7.0:
version "0.7.2"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7"
integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==
cookie@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.0.2.tgz#27360701532116bd3f1f9416929d176afe1e4610"
@@ -7249,11 +7225,6 @@ jmespath@^0.16.0:
resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076"
integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==
jose@^4.15.5, jose@^4.15.9:
version "4.15.9"
resolved "https://registry.yarnpkg.com/jose/-/jose-4.15.9.tgz#9b68eda29e9a0614c042fa29387196c7dd800100"
integrity sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==
js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -7671,13 +7642,6 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
dependencies:
yallist "^4.0.0"
magic-regexp@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/magic-regexp/-/magic-regexp-0.10.0.tgz#78b4421a50d2b7a67129bf2c424a333927c3a0e5"
@@ -7942,22 +7906,7 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
next-auth@~4.24.0:
version "4.24.11"
resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.24.11.tgz#16eeb76d37fbc8fe887561b454f8167f490c381f"
integrity sha512-pCFXzIDQX7xmHFs4KVH4luCjaCbuPRtZ9oBUjUhOk84mZ9WVPf94n87TxYI4rSRf9HmfHEF8Yep3JrYDVOo3Cw==
dependencies:
"@babel/runtime" "^7.20.13"
"@panva/hkdf" "^1.0.2"
cookie "^0.7.0"
jose "^4.15.5"
oauth "^0.9.15"
openid-client "^5.4.0"
preact "^10.6.3"
preact-render-to-string "^5.1.19"
uuid "^8.3.2"
nitropack@^2.11.13, nitropack@^2.12.5:
nitropack@^2.12.5:
version "2.12.6"
resolved "https://registry.yarnpkg.com/nitropack/-/nitropack-2.12.6.tgz#7743f88c2c9710347f982341c356a4bf56cbce6d"
integrity sha512-DEq31s0SP4/Z5DIoVBRo9DbWFPWwIoYD4cQMEz7eE+iJMiAP+1k9A3B9kcc6Ihc0jDJmfUcHYyh6h2XlynCx6g==
@@ -8199,16 +8148,6 @@ nypm@^0.6.0, nypm@^0.6.1, nypm@^0.6.2:
pkg-types "^2.3.0"
tinyexec "^1.0.1"
oauth@^0.9.15:
version "0.9.15"
resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1"
integrity sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==
object-hash@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5"
integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==
object-inspect@^1.13.3, object-inspect@^1.13.4:
version "1.13.4"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
@@ -8274,11 +8213,6 @@ ohash@^2.0.0, ohash@^2.0.11:
resolved "https://registry.yarnpkg.com/ohash/-/ohash-2.0.11.tgz#60b11e8cff62ca9dee88d13747a5baa145f5900b"
integrity sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==
oidc-token-hash@^5.0.3:
version "5.1.1"
resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.1.1.tgz#d35e31ca26d3a26678f5e9bda100b095ab58011f"
integrity sha512-D7EmwxJV6DsEB6vOFLrBM2OzsVgQzgPWyHlV2OOAVj772n+WTXpudC9e9u5BVKQnYwaD30Ivhi9b+4UeBcGu9g==
on-change@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/on-change/-/on-change-5.0.1.tgz#ced60d262211eee41043e7479515b4875d1744ef"
@@ -8331,16 +8265,6 @@ open@^8.0.0:
is-docker "^2.1.1"
is-wsl "^2.2.0"
openid-client@^5.4.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.7.1.tgz#34cace862a3e6472ed7d0a8616ef73b7fb85a9c3"
integrity sha512-jDBPgSVfTnkIh71Hg9pRvtJc6wTwqjRkN88+gCFtYWrlP4Yx2Dsrow8uPi3qLr/aeymPF3o2+dS+wOpglK04ew==
dependencies:
jose "^4.15.9"
lru-cache "^6.0.0"
object-hash "^2.2.0"
oidc-token-hash "^5.0.3"
optionator@^0.9.3:
version "0.9.4"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
@@ -8929,18 +8853,6 @@ postcss@^8.5.3, postcss@^8.5.6:
picocolors "^1.1.1"
source-map-js "^1.2.1"
preact-render-to-string@^5.1.19:
version "5.2.6"
resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz#0ff0c86cd118d30affb825193f18e92bd59d0604"
integrity sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==
dependencies:
pretty-format "^3.8.0"
preact@^10.6.3:
version "10.27.2"
resolved "https://registry.yarnpkg.com/preact/-/preact-10.27.2.tgz#19b9009c1be801a76a0aaf0fe5ba665985a09312"
integrity sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -8973,11 +8885,6 @@ pretty-bytes@^7.0.1:
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-7.1.0.tgz#d788c9906241dbdcd4defab51b6d7470243db9bd"
integrity sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==
pretty-format@^3.8.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385"
integrity sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@@ -9224,11 +9131,6 @@ require-from-string@^2.0.2:
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
requrl@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/requrl/-/requrl-3.0.2.tgz#d376104193b02a2d874dde68454c2db2dfeb0fac"
integrity sha512-f3gjR6d8MhOpn46PP+DSJywbmxi95fxQm3coXBFwognjFLla9X6tr8BdNyaIKNOEkaRbRcm0/zYAqN19N1oyhg==
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
@@ -10842,11 +10744,6 @@ util-deprecate@^1.0.2, util-deprecate@~1.0.1:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
validate-npm-package-license@^3.0.1:
version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
@@ -11566,11 +11463,6 @@ yallist@^3.0.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yallist@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533"

View File

@@ -21,13 +21,16 @@ class FakeHasher:
class BcryptHasher:
def _get_password_bytes(self, password: str) -> bytes:
return password.encode("utf-8")[:72]
def hash(self, password: str) -> str:
password_bytes = password.encode("utf-8")
password_bytes = self._get_password_bytes(password)
hashed = bcrypt.hashpw(password_bytes, bcrypt.gensalt())
return hashed.decode("utf-8")
def verify(self, password: str, hashed: str) -> bool:
password_bytes = password.encode("utf-8")
password_bytes = self._get_password_bytes(password)
hashed_bytes = hashed.encode("utf-8")
return bcrypt.checkpw(password_bytes, hashed_bytes)

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} is geskep, {url}",
"generic-updated-with-url": "{name} is opgedateer, {url}",
"generic-duplicated": "{name} is gekopieer",
"generic-deleted": "{name} is verwyder"
"generic-deleted": "{name} is verwyder",
"logged-out": "Logged out"
},
"datetime": {
"year": "year|years",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "تم إنشاء {name}، {url}",
"generic-updated-with-url": "{name} تم تحديثه، {url}",
"generic-duplicated": "تم تكرار {name}",
"generic-deleted": "تم حذف {name}"
"generic-deleted": "تم حذف {name}",
"logged-out": "Logged out"
},
"datetime": {
"year": "سنة|سنوات",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} беше създадено, {url}",
"generic-updated-with-url": "{name} беше актуализирано, {url}",
"generic-duplicated": "{name} е дублирано",
"generic-deleted": "{name} беше изтрито"
"generic-deleted": "{name} беше изтрито",
"logged-out": "Logged out"
},
"datetime": {
"year": "година|години",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} ha estat creat, {url}",
"generic-updated-with-url": "{name} ha estat actualitzat, {url}",
"generic-duplicated": "S'ha duplicat {name}",
"generic-deleted": "{name} ha estat eliminat"
"generic-deleted": "{name} ha estat eliminat",
"logged-out": "Logged out"
},
"datetime": {
"year": "any|anys",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} byl vytvořen, {url}",
"generic-updated-with-url": "{name} byl aktualizován, {url}",
"generic-duplicated": "{name} byl duplikován",
"generic-deleted": "{name} byl odstraněn"
"generic-deleted": "{name} byl odstraněn",
"logged-out": "Logged out"
},
"datetime": {
"year": "rok|roky",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} er oprettet, {url}",
"generic-updated-with-url": "{name} er blevet opdateret, {url}",
"generic-duplicated": "{name} er blevet duplikeret",
"generic-deleted": "{name} er blevet slettet"
"generic-deleted": "{name} er blevet slettet",
"logged-out": "Logged out"
},
"datetime": {
"year": "år|år",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} wurde erstellt, {url}",
"generic-updated-with-url": "{name} wurde aktualisiert, {url}",
"generic-duplicated": "{name} wurde dupliziert",
"generic-deleted": "{name} wurde gelöscht"
"generic-deleted": "{name} wurde gelöscht",
"logged-out": "Abgemeldet"
},
"datetime": {
"year": "Jahr|Jahre",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "Το {name} δημιουργήθηκε, {url}",
"generic-updated-with-url": "Το {name} ενημερώθηκε, {url}",
"generic-duplicated": "Δημιουργήθηκε διπλότυπο του {name}",
"generic-deleted": "Το {name} διαγράφηκε"
"generic-deleted": "Το {name} διαγράφηκε",
"logged-out": "Logged out"
},
"datetime": {
"year": "χρόνος | χρόνια",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} has been created, {url}",
"generic-updated-with-url": "{name} has been updated, {url}",
"generic-duplicated": "{name} has been duplicated",
"generic-deleted": "{name} has been deleted"
"generic-deleted": "{name} has been deleted",
"logged-out": "Logged out"
},
"datetime": {
"year": "year|years",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} has been created, {url}",
"generic-updated-with-url": "{name} has been updated, {url}",
"generic-duplicated": "{name} has been duplicated",
"generic-deleted": "{name} has been deleted"
"generic-deleted": "{name} has been deleted",
"logged-out": "Logged out"
},
"datetime": {
"year": "year|years",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "Se ha creado {name}, {url}",
"generic-updated-with-url": "Se ha actualizado {name}, {url}",
"generic-duplicated": "Se ha duplicado {name}",
"generic-deleted": "Se ha eliminado {name}"
"generic-deleted": "Se ha eliminado {name}",
"logged-out": "Logged out"
},
"datetime": {
"year": "año|años",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} loodud, {url}",
"generic-updated-with-url": "{name} uuendatud, {url}",
"generic-duplicated": "{name} on duplitseeritud",
"generic-deleted": "{name} kustutatud"
"generic-deleted": "{name} kustutatud",
"logged-out": "Logged out"
},
"datetime": {
"year": "aasta|aastad",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} on luotu, {url}",
"generic-updated-with-url": "{name} on päivitetty, {url}",
"generic-duplicated": "{name} on kahdennettu",
"generic-deleted": "{name} on poistettu"
"generic-deleted": "{name} on poistettu",
"logged-out": "Logged out"
},
"datetime": {
"year": "vuosi|vuotta",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} a été créé, {url}",
"generic-updated-with-url": "{name} a été mis à jour, {url}",
"generic-duplicated": "{name} a été dupliqué",
"generic-deleted": "{name} a été supprimé"
"generic-deleted": "{name} a été supprimé",
"logged-out": "Logged out"
},
"datetime": {
"year": "année|années",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} a été créé, {url}",
"generic-updated-with-url": "{name} a été mis à jour, {url}",
"generic-duplicated": "{name} a été dupliqué",
"generic-deleted": "{name} a été supprimé"
"generic-deleted": "{name} a été supprimé",
"logged-out": "Logged out"
},
"datetime": {
"year": "année|années",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} a été créé, {url}",
"generic-updated-with-url": "{name} a été mis à jour, {url}",
"generic-duplicated": "{name} a été dupliqué",
"generic-deleted": "{name} a été supprimé"
"generic-deleted": "{name} a été supprimé",
"logged-out": "Logged out"
},
"datetime": {
"year": "année|années",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} foi creado, {url}",
"generic-updated-with-url": "{name} foi atualizado, {url}",
"generic-duplicated": "{name} foi duplicado",
"generic-deleted": "{name} foi eliminado"
"generic-deleted": "{name} foi eliminado",
"logged-out": "Logged out"
},
"datetime": {
"year": "ano|anos",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} נוצר, {url}",
"generic-updated-with-url": "{name} עודכן, {url}",
"generic-duplicated": "{name} שוכפל",
"generic-deleted": "{name} נמחק"
"generic-deleted": "{name} נמחק",
"logged-out": "Logged out"
},
"datetime": {
"year": "שנה|שנים",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} je kreiran, {url}",
"generic-updated-with-url": "{name} je ažuriran, {url}",
"generic-duplicated": "{name} je dupliciran",
"generic-deleted": "{name} je obrisan"
"generic-deleted": "{name} je obrisan",
"logged-out": "Logged out"
},
"datetime": {
"year": "year|years",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} létrehozva, {url}",
"generic-updated-with-url": "{name} frissítve, {url}",
"generic-duplicated": "{name} duplikálva",
"generic-deleted": "{name} törölve lett"
"generic-deleted": "{name} törölve lett",
"logged-out": "Kijelentkezett"
},
"datetime": {
"year": "év",

View File

@@ -1,80 +1,81 @@
{
"generic": {
"server-error": "An unexpected error occurred"
"server-error": "Óvænt villa kom upp"
},
"recipe": {
"unique-name-error": "Recipe names must be unique",
"recipe-created": "Recipe Created",
"unique-name-error": "Nöfn uppskrifta þurfa að vera einstök",
"recipe-created": "Uppskrift stofnuð",
"recipe-defaults": {
"ingredient-note": "1 Cup Flour",
"step-text": "Recipe steps as well as other fields in the recipe page support markdown syntax.\n\n**Add a link**\n\n[My Link](https://demo.mealie.io)\n"
"ingredient-note": "1 bolli hveiti",
"step-text": "Hægt er að nota markdown málskipan (syntax) í uppskriftinni og öðrum reitum.\n\n**Bæta við tengli**\n\n[Minn tengill](https://demo.mealie.io)\n"
},
"servings-text": {
"makes": "Makes",
"serves": "Serves",
"serving": "Serving",
"servings": "Servings",
"yield": "Yield",
"yields": "Yields"
"makes": "Framkvæmir",
"serves": "Skammtar",
"serving": "Skammtur",
"servings": "Skammtar",
"yield": "Skilar",
"yields": "Skilar"
}
},
"mealplan": {
"no-recipes-match-your-rules": "No recipes match your rules"
"no-recipes-match-your-rules": "Eingin uppskrift passar við settar reglur"
},
"user": {
"user-updated": "User updated",
"password-updated": "Password updated",
"invalid-current-password": "Invalid current password",
"ldap-update-password-unavailable": "Unable to update password, user is controlled by LDAP"
"user-updated": "Notandaupplýsingar uppfærðar",
"password-updated": "Lykilorð uppfært",
"invalid-current-password": "Núverandi lykilorð er rangt",
"ldap-update-password-unavailable": "Ekki var hægt að uppfæra lykilorð, notanda er stjórnað af LDAP"
},
"group": {
"report-deleted": "Report deleted."
"report-deleted": "Skýrslu eytt."
},
"exceptions": {
"permission_denied": "You do not have permission to perform this action",
"no-entry-found": "The requested resource was not found",
"integrity-error": "Database integrity error",
"username-conflict-error": "This username is already taken",
"email-conflict-error": "This email is already in use"
"permission_denied": "Þú hefur ekki réttindi til að framkvæma þessa aðgerð",
"no-entry-found": "Umbeðin síða fannst ekki",
"integrity-error": "Villa í gagnagrunni",
"username-conflict-error": "Notandanafn er þegar í notkun",
"email-conflict-error": "Tölvupóstur er þegar í notkun"
},
"notifications": {
"generic-created": "{name} was created",
"generic-updated": "{name} was updated",
"generic-created-with-url": "{name} has been created, {url}",
"generic-updated-with-url": "{name} has been updated, {url}",
"generic-duplicated": "{name} has been duplicated",
"generic-deleted": "{name} has been deleted"
"generic-created": "{name} var stofnað",
"generic-updated": "{name} var uppfært",
"generic-created-with-url": "{name} hefur verið stofnað, {url}",
"generic-updated-with-url": "{name} hefur verið uppfært, {url}",
"generic-duplicated": "{name} hefur verið afritað",
"generic-deleted": "{name} hefur verið eytt",
"logged-out": "Logged out"
},
"datetime": {
"year": "year|years",
"day": "day|days",
"hour": "hour|hours",
"minute": "minute|minutes",
"second": "second|seconds",
"millisecond": "millisecond|milliseconds",
"microsecond": "microsecond|microseconds"
"year": "ár",
"day": "dagur|dagar",
"hour": "klukkustund|klukkustundir",
"minute": "mínluta|mínútur",
"second": "senda|sekúndur",
"millisecond": "millisenda|millisekúndur",
"microsecond": "míkrósekúnda|míkrósekúndur"
},
"emails": {
"password": {
"subject": "Mealie Forgot Password",
"header_text": "Forgot Password",
"message_top": "You have requested to reset your password.",
"message_bottom": "Please click the button above to reset your password.",
"button_text": "Reset Password"
"subject": "Mealie Gleymt Lykilorð",
"header_text": "Gleymt Lykilorð",
"message_top": "Þú hefur óskað eftir að endursetja lykilorðið þitt.",
"message_bottom": "Vinsamlegast smelltu á hnappinn hér að ofan til að endursetja lykilorðið þitt.",
"button_text": "Endursetja lykilorð"
},
"invitation": {
"subject": "Invitation to join Mealie",
"header_text": "You're Invited!",
"message_top": "You have been invited to join Mealie.",
"message_bottom": "Please click the button above to accept the invitation.",
"button_text": "Accept Invitation"
"subject": "Boð um að skoða Mealie",
"header_text": "Þér er boðið!",
"message_top": "Þér hefur verið boðið að skoða Mealie.",
"message_bottom": "Vinsamlegast ýttu á takkann hér að ofan til að samþykkja boðið.",
"button_text": "Samþykkja boð"
},
"test": {
"subject": "Mealie Test Email",
"header_text": "Test Email",
"message_top": "This is a test email.",
"message_bottom": "Please click the button above to test the email.",
"button_text": "Open Mealie"
"subject": "Mealie prufupóstur",
"header_text": "Prufupóstur",
"message_top": "Þetta er prufupóstur.",
"message_bottom": "Vinsamlegast ýttu á takkan hér fyrir ofan til að prófa póstinn.",
"button_text": "Opna Mealie"
}
}
}

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} è stato creato, {url}",
"generic-updated-with-url": "{name} è stato aggiornato, {url}",
"generic-duplicated": "{name} è stato duplicato",
"generic-deleted": "{name} è stato eliminato"
"generic-deleted": "{name} è stato eliminato",
"logged-out": "Disconnesso"
},
"datetime": {
"year": "anno|anni",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} が作成されました: {url}",
"generic-updated-with-url": "{name} が更新されました: {url}",
"generic-duplicated": "{name} が複製されました",
"generic-deleted": "{name} が削除されました"
"generic-deleted": "{name} が削除されました",
"logged-out": "Logged out"
},
"datetime": {
"year": "年",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} has been created, {url}",
"generic-updated-with-url": "{name} has been updated, {url}",
"generic-duplicated": "{name} has been duplicated",
"generic-deleted": "{name} has been deleted"
"generic-deleted": "{name} has been deleted",
"logged-out": "Logged out"
},
"datetime": {
"year": "year|years",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} sukurtas, {url}",
"generic-updated-with-url": "{name} atnaujintas, {url}",
"generic-duplicated": "{name} buvo nukopijuotas",
"generic-deleted": "{name} ištrintas"
"generic-deleted": "{name} ištrintas",
"logged-out": "Logged out"
},
"datetime": {
"year": "metai|metai",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} tika izveidots, {url}",
"generic-updated-with-url": "{name} tika atjaunots, {url}",
"generic-duplicated": "{name} tika dublicēts",
"generic-deleted": "{name} tika dzēsts"
"generic-deleted": "{name} tika dzēsts",
"logged-out": "Logged out"
},
"datetime": {
"year": "gads|gadi",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} is aangemaakt, {url}",
"generic-updated-with-url": "{name} is bijgewerkt, {url}",
"generic-duplicated": "{name} is gekopieerd",
"generic-deleted": "{name} is verwijderd"
"generic-deleted": "{name} is verwijderd",
"logged-out": ""
},
"datetime": {
"year": "jaar|jaren",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} har blitt opprettet, {url}",
"generic-updated-with-url": "{name} har blitt oppdatert, {url}",
"generic-duplicated": "{name} har blitt duplisert",
"generic-deleted": "{name} har blitt slettet"
"generic-deleted": "{name} har blitt slettet",
"logged-out": "Logged out"
},
"datetime": {
"year": "år|år",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "Stworzono {name}, {url}",
"generic-updated-with-url": "Zaktualizowano {name}, {url}",
"generic-duplicated": "Zduplikowano {name}",
"generic-deleted": "Usunięto {name}"
"generic-deleted": "Usunięto {name}",
"logged-out": "Wylogowano"
},
"datetime": {
"year": "rok|lat",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} foi criado, {url}",
"generic-updated-with-url": "{name} foi atualizado, {url}",
"generic-duplicated": "{name} foi duplicada",
"generic-deleted": "{name} foi excluído"
"generic-deleted": "{name} foi excluído",
"logged-out": "Logged out"
},
"datetime": {
"year": "ano|anos",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} foi criado, {url}",
"generic-updated-with-url": "{name} foi atualizado, {url}",
"generic-duplicated": "{name} foi duplicado",
"generic-deleted": "{name} foi removido"
"generic-deleted": "{name} foi removido",
"logged-out": "Logged out"
},
"datetime": {
"year": "ano|anos",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} a fost creat, {url}",
"generic-updated-with-url": "{name} a fost actualizat, {url}",
"generic-duplicated": "{name} a fost duplicat",
"generic-deleted": "{name} a fost șters"
"generic-deleted": "{name} a fost șters",
"logged-out": "Logged out"
},
"datetime": {
"year": "an|ani",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} был создан, {url}",
"generic-updated-with-url": "{name} был обновлен, {url}",
"generic-duplicated": "Копия {name} была создана",
"generic-deleted": "{name} был удален"
"generic-deleted": "{name} был удален",
"logged-out": "Logged out"
},
"datetime": {
"year": "год|лет",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} bol vytvorený, {url}",
"generic-updated-with-url": "{name} bol aktualizovaný, {url}",
"generic-duplicated": "{name} bol duplikovaný",
"generic-deleted": "{name} bol vymazaný"
"generic-deleted": "{name} bol vymazaný",
"logged-out": "Logged out"
},
"datetime": {
"year": "rok|roky",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} je bil narejen, {url}",
"generic-updated-with-url": "{name} je bil posodobljen, {url}",
"generic-duplicated": "{name} je bilo podvojeno",
"generic-deleted": "{name} je bil izbrisan"
"generic-deleted": "{name} je bil izbrisan",
"logged-out": "Logged out"
},
"datetime": {
"year": "leto|let",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} је направљено, {url}",
"generic-updated-with-url": "{name} је ажурирано, {url}",
"generic-duplicated": "{name} је дуплиран",
"generic-deleted": "{name} је обрисан"
"generic-deleted": "{name} је обрисан",
"logged-out": "Logged out"
},
"datetime": {
"year": "year|years",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} har skapats, {url}",
"generic-updated-with-url": "{name} har uppdaterats, {url}",
"generic-duplicated": "{name} har duplicerats",
"generic-deleted": "{name} har tagits bort"
"generic-deleted": "{name} har tagits bort",
"logged-out": "Utloggad"
},
"datetime": {
"year": "år|år",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} oluşturuldu, {url}",
"generic-updated-with-url": "{name} güncellendi, {url}",
"generic-duplicated": "{name} yinelendi",
"generic-deleted": "{name} silindi"
"generic-deleted": "{name} silindi",
"logged-out": "Logged out"
},
"datetime": {
"year": "yıl|yıl",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} створено, {url}",
"generic-updated-with-url": "{name} оновлено, {url}",
"generic-duplicated": "{name} дубльовано",
"generic-deleted": "{name} видалено"
"generic-deleted": "{name} видалено",
"logged-out": "Вихід із системи"
},
"datetime": {
"year": "рік|роки",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} has been created, {url}",
"generic-updated-with-url": "{name} has been updated, {url}",
"generic-duplicated": "{name} has been duplicated",
"generic-deleted": "{name} has been deleted"
"generic-deleted": "{name} has been deleted",
"logged-out": "Logged out"
},
"datetime": {
"year": "year|years",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} 已创建, {url}",
"generic-updated-with-url": "{name} 已创建, {url}",
"generic-duplicated": "{name} 已复制",
"generic-deleted": "{name} 已删除"
"generic-deleted": "{name} 已删除",
"logged-out": "Logged out"
},
"datetime": {
"year": "年|年",

View File

@@ -43,7 +43,8 @@
"generic-created-with-url": "{name} has been created, {url}",
"generic-updated-with-url": "{name} has been updated, {url}",
"generic-duplicated": "{name} has been duplicated",
"generic-deleted": "{name} has been deleted"
"generic-deleted": "{name} has been deleted",
"logged-out": "Logged out"
},
"datetime": {
"year": "year|years",

View File

@@ -695,7 +695,7 @@
"coconut": {
"aliases": [],
"description": "",
"name": "coconut",
"name": "kokosnød",
"plural_name": "kokosnødder"
},
"craisin": {
@@ -7908,8 +7908,8 @@
"potato starch": {
"aliases": [],
"description": "",
"name": "potato starch",
"plural_name": "potato starches"
"name": "kartoffelstivelse",
"plural_name": "kartoffelstivelse"
},
"jello": {
"aliases": [],
@@ -8040,8 +8040,8 @@
"potato flake": {
"aliases": [],
"description": "",
"name": "potato flake",
"plural_name": "potato flakes"
"name": "kartoffel flager",
"plural_name": "kartoffel flager"
},
"masa harina": {
"aliases": [],
@@ -8250,8 +8250,8 @@
"potato flour": {
"aliases": [],
"description": "",
"name": "potato flour",
"plural_name": "potato flours"
"name": "kartoffelmel",
"plural_name": "kartoffelmel"
},
"ready-made icing": {
"aliases": [],
@@ -9764,8 +9764,8 @@
"sweet potato noodle": {
"aliases": [],
"description": "",
"name": "sweet potato noodle",
"plural_name": "sweet potato noodles"
"name": "sød kartoffel nudel",
"plural_name": "sød kartoffel nudler"
},
"acini di pepe": {
"aliases": [],
@@ -10162,8 +10162,8 @@
"potato chip": {
"aliases": [],
"description": "",
"name": "potato chip",
"plural_name": "potato chips"
"name": "kartoffel chip",
"plural_name": "kartoffelchips"
},
"naan": {
"aliases": [],
@@ -10258,8 +10258,8 @@
"potato bread": {
"aliases": [],
"description": "",
"name": "potato bread",
"plural_name": "potato breads"
"name": "kartoffel brød",
"plural_name": "kartoffel brød"
},
"muffin": {
"aliases": [],
@@ -10348,8 +10348,8 @@
"sweet potato fry": {
"aliases": [],
"description": "",
"name": "sweet potato fry",
"plural_name": "sweet potato fries"
"name": "sødekartoffel fritter",
"plural_name": "sødekartoffel fritter"
},
"sev": {
"aliases": [],
@@ -10618,8 +10618,8 @@
"potato waffle": {
"aliases": [],
"description": "",
"name": "potato waffle",
"plural_name": "potato waffles"
"name": "kartoffelvaffel",
"plural_name": "kartoffelvafler"
},
"tartlet shell": {
"aliases": [],
@@ -12454,8 +12454,8 @@
"canned sweet potato": {
"aliases": [],
"description": "",
"name": "canned sweet potato",
"plural_name": "canned sweet potatoes"
"name": "søde kartofel på dåse",
"plural_name": "søde kartofler på dåse"
},
"canned pear": {
"aliases": [],
@@ -12652,8 +12652,8 @@
"canned potato": {
"aliases": [],
"description": "",
"name": "canned potato",
"plural_name": "canned potatoes"
"name": "kartoffel på dåse",
"plural_name": "kartofler på dåse"
},
"okra pickle": {
"aliases": [],
@@ -13466,8 +13466,8 @@
"cream of potato": {
"aliases": [],
"description": "",
"name": "cream of potato",
"plural_name": "cream of potato"
"name": "kartoffelcreme",
"plural_name": "kartoffelcreme"
},
"golden mushroom soup": {
"aliases": [],
@@ -13808,8 +13808,8 @@
"potato soup mix": {
"aliases": [],
"description": "",
"name": "potato soup mix",
"plural_name": "potato soup mixes"
"name": "kartoffelsuppeblanding",
"plural_name": "kartoffelsuppeblandinger"
},
"callaloo": {
"aliases": [],

View File

@@ -6012,7 +6012,7 @@
"aliases": [],
"description": "",
"name": "Senfsaat",
"plural_name": "Senfsaat"
"plural_name": "Senfsaaten"
},
"white pepper": {
"aliases": [],
@@ -8506,8 +8506,8 @@
"egg wrap": {
"aliases": [],
"description": "",
"name": "egg wrap",
"plural_name": "egg wraps"
"name": "Eier-Wrap",
"plural_name": "Eier-Wraps"
},
"samosa sheet": {
"aliases": [],
@@ -8524,7 +8524,7 @@
"brick pastry": {
"aliases": [],
"description": "",
"name": "brick pastry",
"name": "Brik-Teig",
"plural_name": "brick pastries"
}
}
@@ -11527,7 +11527,7 @@
"aliases": [],
"description": "",
"name": "Senf",
"plural_name": "mustards"
"plural_name": "Senf"
},
"fish sauce": {
"aliases": [],
@@ -11581,7 +11581,7 @@
"aliases": [],
"description": "",
"name": "brown mustard",
"plural_name": "brown mustards"
"plural_name": "brauner Senf"
},
"wing sauce": {
"aliases": [],
@@ -11671,7 +11671,7 @@
"aliases": [],
"description": "",
"name": "Honigsenf",
"plural_name": "honey mustards"
"plural_name": "Honigsenf"
},
"mango chutney": {
"aliases": [],
@@ -11683,7 +11683,7 @@
"aliases": [],
"description": "",
"name": "english mustard",
"plural_name": "english mustards"
"plural_name": "englischer Senf"
},
"sambal oelek": {
"aliases": [],
@@ -16300,7 +16300,7 @@
"aliases": [],
"description": "",
"name": "Maltodextrin",
"plural_name": "maltodextrins"
"plural_name": "Maltodextrin"
}
}
}

View File

@@ -419,8 +419,8 @@
"corn cob": {
"aliases": [],
"description": "",
"name": "corn cob",
"plural_name": "corn cobs"
"name": "καλαμπόκι",
"plural_name": "καλαμπόκια"
},
"radicchio": {
"aliases": [],
@@ -2063,8 +2063,8 @@
"blue cheese": {
"aliases": [],
"description": "",
"name": "ροκφόρ τυρί ",
"plural_name": "ροκφόρ τυριά"
"name": "ροκφόρ τυρί",
"plural_name": "ροκφόρ τυρί"
},
"goat cheese": {
"aliases": [],
@@ -2649,14 +2649,14 @@
"yogurt": {
"aliases": [],
"description": "",
"name": "yogurt",
"plural_name": "yogurts"
"name": "γιαούρτι",
"plural_name": "γιαούρτια"
},
"greek yogurt": {
"aliases": [],
"description": "",
"name": "greek yogurt",
"plural_name": "greek yogurts"
"name": "γιαούρτι",
"plural_name": "γιαούρτια"
},
"cream": {
"aliases": [],
@@ -2819,8 +2819,8 @@
"frozen yogurt": {
"aliases": [],
"description": "",
"name": "frozen yogurt",
"plural_name": "frozen yogurts"
"name": "παγωμένο γιαούρτι",
"plural_name": "παγωμένα γιαούρτια"
},
"khoya": {
"aliases": [],
@@ -10444,8 +10444,8 @@
"frozen onion ring": {
"aliases": [],
"description": "",
"name": "frozen onion ring",
"plural_name": "frozen onion rings"
"name": "κατεψυγμένο onion ring",
"plural_name": "κατεψυγμένα onion rings"
},
"corn muffin": {
"aliases": [],
@@ -10634,7 +10634,7 @@
"olive oil": {
"aliases": [],
"description": "",
"name": "olive oil",
"name": "ελαιόλαδο",
"plural_name": "olive oils"
},
"vegetable oil": {
@@ -10646,7 +10646,7 @@
"extra virgin olive oil": {
"aliases": [],
"description": "",
"name": "extra virgin olive oil",
"name": "έξτρα παρθένο ελαιόλαδο",
"plural_name": "extra virgin olive oils"
},
"canola oil": {
@@ -12112,8 +12112,8 @@
"green olive": {
"aliases": [],
"description": "",
"name": "green olive",
"plural_name": "green olives"
"name": "πράσινη ελιά",
"plural_name": "πράσινες ελιές"
},
"canned chickpea": {
"aliases": [],
@@ -12124,8 +12124,8 @@
"black olive": {
"aliases": [],
"description": "",
"name": "black olive",
"plural_name": "black olives"
"name": "μαύρη ελιά",
"plural_name": "μαύρες ελιές"
},
"canned black bean": {
"aliases": [],

View File

@@ -5856,7 +5856,7 @@
"aliases": [],
"description": "",
"name": "garlic powder",
"plural_name": "garlic powders"
"plural_name": "garlic powder"
},
"oregano": {
"aliases": [],

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