mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-04-24 05:45:36 -04:00
Compare commits
47 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1969f50ee6 | ||
|
|
ff7d23d6d4 | ||
|
|
5e239be6fa | ||
|
|
e5520b08e5 | ||
|
|
fce0b47e2c | ||
|
|
e00d2a6e83 | ||
|
|
948914df50 | ||
|
|
0c7d9341bf | ||
|
|
b94b24640b | ||
|
|
c303198857 | ||
|
|
9424858985 | ||
|
|
3711154c44 | ||
|
|
cc12d07576 | ||
|
|
3e96bf7f43 | ||
|
|
ee550f4fe3 | ||
|
|
60d4a62f0a | ||
|
|
69d740e100 | ||
|
|
c4fdab4e05 | ||
|
|
04dd514e6a | ||
|
|
ad5d4b5aba | ||
|
|
b948314c6b | ||
|
|
2568015941 | ||
|
|
235a1f1931 | ||
|
|
8c23fd922a | ||
|
|
537f5ae1dd | ||
|
|
9372f51000 | ||
|
|
1bdb3ce54c | ||
|
|
16e8e8a877 | ||
|
|
6a3b38a31e | ||
|
|
8189416495 | ||
|
|
589c6de053 | ||
|
|
d3d339a4aa | ||
|
|
5c2bbea09b | ||
|
|
f6ca4bb29a | ||
|
|
ddc30fc65f | ||
|
|
a4d1e0a440 | ||
|
|
86b72f4d5b | ||
|
|
1344f1674d | ||
|
|
5a223aa92d | ||
|
|
845637c988 | ||
|
|
b5c089f58c | ||
|
|
96597915ff | ||
|
|
98c555fd20 | ||
|
|
118274ad9d | ||
|
|
50ea601683 | ||
|
|
7cc9010143 | ||
|
|
1f196cf10f |
@@ -21,6 +21,7 @@ RUN apt-get update \
|
||||
&& apt-get install --no-install-recommends -y \
|
||||
curl \
|
||||
build-essential \
|
||||
ffmpeg \
|
||||
libpq-dev \
|
||||
libwebp-dev \
|
||||
libsasl2-dev libldap2-dev libssl-dev \
|
||||
|
||||
@@ -12,7 +12,10 @@ repos:
|
||||
exclude: ^tests/data/
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.15.4
|
||||
rev: v0.15.6
|
||||
hooks:
|
||||
- id: ruff
|
||||
# Linter
|
||||
- id: ruff-check
|
||||
args: [ --fix ]
|
||||
# Formatter
|
||||
- id: ruff-format
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
###############################################
|
||||
# Frontend Build
|
||||
###############################################
|
||||
FROM node:24@sha256:3a09aa6354567619221ef6c45a5051b671f953f0a1924d1f819ffb236e520e6b \
|
||||
FROM node:24@sha256:5a593d74b632d1c6f816457477b6819760e13624455d587eef0fa418c8d0777b \
|
||||
AS frontend-builder
|
||||
|
||||
WORKDIR /frontend
|
||||
@@ -91,6 +91,7 @@ RUN apt-get update \
|
||||
build-essential \
|
||||
libpq-dev \
|
||||
libwebp-dev \
|
||||
ffmpeg \
|
||||
# LDAP Dependencies
|
||||
libsasl2-dev libldap2-dev libssl-dev \
|
||||
gnupg gnupg2 gnupg1 \
|
||||
@@ -120,6 +121,7 @@ ENV GIT_COMMIT_HASH=$COMMIT
|
||||
RUN apt-get update \
|
||||
&& apt-get install --no-install-recommends -y \
|
||||
curl \
|
||||
ffmpeg \
|
||||
gosu \
|
||||
iproute2 \
|
||||
libldap-common \
|
||||
|
||||
@@ -5,9 +5,11 @@
|
||||
## Recipes
|
||||
|
||||
### Creating Recipes
|
||||
|
||||
Mealie offers two main ways to create recipes. You can use the integrated recipe-scraper to create recipes from hundreds of websites, or you can create recipes manually using the recipe editor.
|
||||
|
||||
Mealie offers several ways to create recipes:
|
||||
- **Recipe Scraper:** Create recipes from hundreds of websites by simply providing a URL.
|
||||
- **Image Import:** Upload an image of a written or typed recipe and Mealie will use OCR to import it.
|
||||
- **Video URL Import:** Provide a video URL (e.g., YouTube) and Mealie will transcribe the audio and parse the recipe.
|
||||
- **Manual Editor:** Create recipes from scratch using the integrated editor.
|
||||
[Creation Demo](https://demo.mealie.io/g/home/r/create/url){ .md-button .md-button--primary .align-right }
|
||||
|
||||
### Importing Recipes
|
||||
|
||||
@@ -122,18 +122,19 @@ For usage, see [Usage - OpenID Connect](../authentication/oidc-v2.md)
|
||||
Mealie supports various integrations using OpenAI. For more information, check out our [OpenAI documentation](./open-ai.md).
|
||||
For custom mapping variables (e.g. OPENAI_CUSTOM_HEADERS) you should pass values as JSON encoded strings (e.g. `OPENAI_CUSTOM_PARAMS='{"k1": "v1", "k2": "v2"}'`)
|
||||
|
||||
| Variables | Default | Description |
|
||||
|---------------------------------------------------|:-------:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| OPENAI_BASE_URL<super>[†][secrets]</super> | None | The base URL for the OpenAI API. If you're not sure, leave this empty to use the standard OpenAI platform |
|
||||
| OPENAI_API_KEY<super>[†][secrets]</super> | None | Your OpenAI API Key. Enables OpenAI-related features |
|
||||
| OPENAI_MODEL | gpt-4o | Which OpenAI model to use. If you're not sure, leave this empty |
|
||||
| OPENAI_CUSTOM_HEADERS <br/> :octicons-tag-24: v2.0.0 | None | Custom HTTP headers to add to all OpenAI requests. This should generally be left empty unless your custom service requires them |
|
||||
| OPENAI_CUSTOM_PARAMS <br/> :octicons-tag-24: v2.0.0 | None | Custom HTTP query params to add to all OpenAI requests. This should generally be left empty unless your custom service requires them |
|
||||
| OPENAI_ENABLE_IMAGE_SERVICES <br/> :octicons-tag-24: v1.12.0 | True | Whether to enable OpenAI image services, such as creating recipes via image. Leave this enabled unless your custom model doesn't support it, or you want to reduce costs |
|
||||
| OPENAI_WORKERS | 2 | Number of OpenAI workers per request. Higher values may increase processing speed, but will incur additional API costs |
|
||||
| OPENAI_SEND_DATABASE_DATA | True | Whether to send Mealie data to OpenAI to improve request accuracy. This will incur additional API costs |
|
||||
| OPENAI_REQUEST_TIMEOUT | 300 | The number of seconds to wait for an OpenAI request to complete before cancelling the request. Leave this empty unless you're running into timeout issues on slower hardware |
|
||||
| OPENAI_CUSTOM_PROMPT_DIR <br/> :octicons-tag-24: v3.10.0 | None | Path to custom prompt files. Only existing files in your custom directory will override the defaults; any missing or empty custom files will automatically fall back to the system defaults. See https://github.com/mealie-recipes/mealie/tree/mealie-next/mealie/services/openai/prompts for expected file names. |
|
||||
| Variables | Default | Description |
|
||||
|-------------------------------------------------------------------------|:-------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| OPENAI_BASE_URL<super>[†][secrets]</super> | None | The base URL for the OpenAI API. If you're not sure, leave this empty to use the standard OpenAI platform |
|
||||
| OPENAI_API_KEY<super>[†][secrets]</super> | None | Your OpenAI API Key. Enables OpenAI-related features |
|
||||
| OPENAI_MODEL | gpt-4o | Which OpenAI model to use. If you're not sure, leave this empty |
|
||||
| OPENAI_CUSTOM_HEADERS <br/> :octicons-tag-24: v2.0.0 | None | Custom HTTP headers to add to all OpenAI requests. This should generally be left empty unless your custom service requires them |
|
||||
| OPENAI_CUSTOM_PARAMS <br/> :octicons-tag-24: v2.0.0 | None | Custom HTTP query params to add to all OpenAI requests. This should generally be left empty unless your custom service requires them |
|
||||
| OPENAI_ENABLE_IMAGE_SERVICES <br/> :octicons-tag-24: v1.12.0 | True | Whether to enable OpenAI image services, such as creating recipes via image. Leave this enabled unless your custom model doesn't support it, or you want to reduce costs |
|
||||
| OPENAI_ENABLE_TRANSCRIPTION_SERVICES <br/> :octicons-tag-24: v3.13.0 | True | Whether to enable OpenAI transcription services, such as creating recipes via video URL. Leave this enabled unless your custom model doesn't support it, or you want to reduce costs |
|
||||
| OPENAI_WORKERS | 2 | Number of OpenAI workers per request. Higher values may increase processing speed, but will incur additional API costs |
|
||||
| OPENAI_SEND_DATABASE_DATA | True | Whether to send Mealie data to OpenAI to improve request accuracy. This will incur additional API costs |
|
||||
| OPENAI_REQUEST_TIMEOUT | 300 | The number of seconds to wait for an OpenAI request to complete before cancelling the request. Leave this empty unless you're running into timeout issues on slower hardware |
|
||||
| OPENAI_CUSTOM_PROMPT_DIR <br/> :octicons-tag-24: v3.10.0 | None | Path to custom prompt files. Only existing files in your custom directory will override the defaults; any missing or empty custom files will automatically fall back to the system defaults. See https://github.com/mealie-recipes/mealie/tree/mealie-next/mealie/services/openai/prompts for expected file names. |
|
||||
|
||||
### Theming
|
||||
|
||||
|
||||
@@ -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.12.0`
|
||||
2. Replace the image for the API container with `ghcr.io/mealie-recipes/mealie:v3.13.0`
|
||||
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
|
||||
|
||||
|
||||
@@ -10,9 +10,15 @@ For most users, supplying the OpenAI API key is all you need to do; you will use
|
||||
|
||||
Alternatively, if you have another service you'd like to use in-place of OpenAI, you can configure Mealie to use that instead, as long as it has an OpenAI-compatible API. For instance, a common self-hosted alternative to OpenAI is [Ollama](https://ollama.com/). To use Ollama with Mealie, change your `OPENAI_BASE_URL` to `http://localhost:11434/v1` (where `http://localhost:11434` is wherever you're hosting Ollama, and `/v1` enables the OpenAI-compatible endpoints). Note that you *must* provide an API key, even though it is ultimately ignored by Ollama.
|
||||
|
||||
If you wish to disable image recognition features (to save costs, or because your custom model doesn't support them) you can set `OPENAI_ENABLE_IMAGE_SERVICES` to `False`. For more information on what configuration options are available, check out the [backend configuration](./backend-config.md#openai).
|
||||
If you wish to disable image recognition features (to save costs, or because your custom model doesn't support them) you can set `OPENAI_ENABLE_IMAGE_SERVICES` to `False`.
|
||||
If you wish to disable transcription features (to save costs, or because your custom model doesn't support them) you can set `OPENAI_ENABLE_TRANSCRIPTION_SERVICES` to `False`.
|
||||
|
||||
For more information on what configuration options are available, check out the [backend configuration](./backend-config.md#openai).
|
||||
|
||||
|
||||
|
||||
## OpenAI Features
|
||||
- The OpenAI Ingredient Parser can be used as an alternative to the NLP and Brute Force parsers. Simply choose the OpenAI parser while parsing ingredients (:octicons-tag-24: v1.7.0)
|
||||
- When importing a recipe via URL, if the default recipe scraper is unable to read the recipe data from a webpage, the webpage contents will be parsed by OpenAI (:octicons-tag-24: v1.9.0)
|
||||
- You can import an image of a written recipe, which is sent to OpenAI and imported into Mealie. The recipe can be hand-written or typed, as long as the text is in the picture. You can also optionally have OpenAI translate the recipe into your own language (:octicons-tag-24: v1.12.0)
|
||||
- You can import a recipe via a video URL (e.g., a YouTube link). The video is transcribed using OpenAI's Whisper model, and the transcription is parsed into a recipe (:octicons-tag-24: v3.13.0)
|
||||
|
||||
@@ -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.12.0 # (3)
|
||||
image: ghcr.io/mealie-recipes/mealie:v3.13.0 # (3)
|
||||
container_name: mealie
|
||||
restart: always
|
||||
ports:
|
||||
|
||||
@@ -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.12.0 # (3)
|
||||
image: ghcr.io/mealie-recipes/mealie:v3.13.0 # (3)
|
||||
container_name: mealie
|
||||
restart: always
|
||||
ports:
|
||||
|
||||
@@ -86,6 +86,19 @@
|
||||
class="text-center"
|
||||
>
|
||||
{{ recipeSection.recipeName }}
|
||||
<v-tooltip v-if="recipeSection.parentRecipe?.name" location="top">
|
||||
<template #activator="{ props: tooltipProps }">
|
||||
<v-icon
|
||||
v-bind="tooltipProps"
|
||||
size="tiny"
|
||||
class="mb-2 ml-2"
|
||||
style="cursor: pointer"
|
||||
>
|
||||
{{ $globals.icons.potSteam }}
|
||||
</v-icon>
|
||||
</template>
|
||||
<span>{{ $t("shopping-list.ingredient-of-recipe", { recipe: recipeSection.parentRecipe.name }) }}</span>
|
||||
</v-tooltip>
|
||||
</v-col>
|
||||
</v-row>
|
||||
<v-row
|
||||
@@ -203,6 +216,7 @@ export interface ShoppingListRecipeIngredientSection {
|
||||
recipeName: string;
|
||||
recipeScale: number;
|
||||
ingredientSections: ShoppingListIngredientSection[];
|
||||
parentRecipe?: Recipe;
|
||||
}
|
||||
|
||||
interface Props {
|
||||
@@ -258,8 +272,71 @@ watch([dialog, () => preferences.value.viewAllLists], () => {
|
||||
}
|
||||
});
|
||||
|
||||
function buildIngredientSections(ingredients: ShoppingListIngredient[]): ShoppingListIngredientSection[] {
|
||||
let currentTitle = "";
|
||||
const onHandIngs: ShoppingListIngredient[] = [];
|
||||
const sections = ingredients.reduce((acc, ing) => {
|
||||
if (ing.ingredient.title) {
|
||||
currentTitle = ing.ingredient.title;
|
||||
}
|
||||
|
||||
if (!acc.length || currentTitle !== acc[acc.length - 1].sectionName) {
|
||||
if (acc.length) {
|
||||
acc[acc.length - 1].ingredients.push(...onHandIngs);
|
||||
onHandIngs.length = 0;
|
||||
}
|
||||
acc.push({ sectionName: currentTitle, ingredients: [] });
|
||||
}
|
||||
|
||||
const householdsWithFood = ing.ingredient?.food?.householdsWithIngredientFood || [];
|
||||
if (householdsWithFood.includes(currentHouseholdSlug.value)) {
|
||||
onHandIngs.push(ing);
|
||||
return acc;
|
||||
}
|
||||
|
||||
acc[acc.length - 1].ingredients.push(ing);
|
||||
return acc;
|
||||
}, [] as ShoppingListIngredientSection[]);
|
||||
|
||||
if (sections.length) {
|
||||
sections[sections.length - 1].ingredients.push(...onHandIngs);
|
||||
}
|
||||
return sections;
|
||||
}
|
||||
|
||||
async function consolidateRecipesIntoSections(recipes: RecipeWithScale[]) {
|
||||
const recipeSectionMap = new Map<string, ShoppingListRecipeIngredientSection>();
|
||||
|
||||
function addSubRecipeToMap(ing: RecipeIngredient, parentQuantity: number, parentScale: number, parentRecipe: Recipe) {
|
||||
const ref = ing.referencedRecipe!;
|
||||
const key = ref.id || ref.slug || "";
|
||||
const ownIngs: ShoppingListIngredient[] = [];
|
||||
const subRefIngs: RecipeIngredient[] = [];
|
||||
|
||||
for (const subIng of ref.recipeIngredient ?? []) {
|
||||
if (subIng.referencedRecipe) {
|
||||
subRefIngs.push(subIng);
|
||||
}
|
||||
else {
|
||||
const householdsWithFood = subIng.food?.householdsWithIngredientFood || [];
|
||||
ownIngs.push({
|
||||
checked: !householdsWithFood.includes(currentHouseholdSlug.value),
|
||||
ingredient: { ...subIng, quantity: (ing.quantity || 1) * (subIng.quantity || 1) },
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
recipeSectionMap.set(key, {
|
||||
recipeId: ref.id || "",
|
||||
recipeName: ref.name || "",
|
||||
recipeScale: parentQuantity * parentScale,
|
||||
ingredientSections: buildIngredientSections(ownIngs),
|
||||
parentRecipe,
|
||||
});
|
||||
|
||||
subRefIngs.forEach(subIng => addSubRecipeToMap(subIng, (ing.quantity || 1) * (subIng.quantity || 1), parentScale, ref));
|
||||
}
|
||||
|
||||
for (const recipe of recipes) {
|
||||
if (!recipe.slug) {
|
||||
continue;
|
||||
@@ -291,81 +368,29 @@ async function consolidateRecipesIntoSections(recipes: RecipeWithScale[]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const shoppingListIngredients: ShoppingListIngredient[] = [];
|
||||
function flattenRecipeIngredients(ing: RecipeIngredient, parentTitle = ""): ShoppingListIngredient[] {
|
||||
const ownIngs: ShoppingListIngredient[] = [];
|
||||
const subRefIngs: RecipeIngredient[] = [];
|
||||
recipeData.recipeIngredient.forEach((ing) => {
|
||||
if (ing.referencedRecipe) {
|
||||
// Recursively flatten all ingredients in the referenced recipe
|
||||
return (ing.referencedRecipe.recipeIngredient ?? []).flatMap((subIng) => {
|
||||
const calculatedQty = (ing.quantity || 1) * (subIng.quantity || 1);
|
||||
// Pass the referenced recipe name as the section title
|
||||
return flattenRecipeIngredients(
|
||||
{ ...subIng, quantity: calculatedQty },
|
||||
"",
|
||||
);
|
||||
});
|
||||
subRefIngs.push(ing);
|
||||
}
|
||||
else {
|
||||
// Regular ingredient
|
||||
const householdsWithFood = ing.food?.householdsWithIngredientFood || [];
|
||||
return [{
|
||||
ownIngs.push({
|
||||
checked: !householdsWithFood.includes(currentHouseholdSlug.value),
|
||||
ingredient: {
|
||||
...ing,
|
||||
title: ing.title || parentTitle,
|
||||
},
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
recipeData.recipeIngredient.forEach((ing) => {
|
||||
const flattened = flattenRecipeIngredients(ing, "");
|
||||
shoppingListIngredients.push(...flattened);
|
||||
});
|
||||
|
||||
let currentTitle = "";
|
||||
const onHandIngs: ShoppingListIngredient[] = [];
|
||||
const shoppingListIngredientSections = shoppingListIngredients.reduce((sections, ing) => {
|
||||
if (ing.ingredient.title) {
|
||||
currentTitle = ing.ingredient.title;
|
||||
}
|
||||
else if (ing.ingredient.referencedRecipe?.name) {
|
||||
currentTitle = ing.ingredient.referencedRecipe.name;
|
||||
}
|
||||
|
||||
// If this is the first item in the section, create a new section
|
||||
if (sections.length === 0 || currentTitle !== sections[sections.length - 1].sectionName) {
|
||||
if (sections.length) {
|
||||
// Add the on-hand ingredients to the previous section
|
||||
sections[sections.length - 1].ingredients.push(...onHandIngs);
|
||||
onHandIngs.length = 0;
|
||||
}
|
||||
sections.push({
|
||||
sectionName: currentTitle,
|
||||
ingredients: [],
|
||||
ingredient: ing,
|
||||
});
|
||||
}
|
||||
|
||||
// Store the on-hand ingredients for later
|
||||
const householdsWithFood = (ing.ingredient?.food?.householdsWithIngredientFood || []);
|
||||
if (householdsWithFood.includes(currentHouseholdSlug.value)) {
|
||||
onHandIngs.push(ing);
|
||||
return sections;
|
||||
}
|
||||
|
||||
// Add the ingredient to previous section
|
||||
sections[sections.length - 1].ingredients.push(ing);
|
||||
return sections;
|
||||
}, [] as ShoppingListIngredientSection[]);
|
||||
|
||||
// Add remaining on-hand ingredients to the previous section
|
||||
shoppingListIngredientSections[shoppingListIngredientSections.length - 1].ingredients.push(...onHandIngs);
|
||||
});
|
||||
|
||||
recipeSectionMap.set(recipe.slug, {
|
||||
recipeId: recipeData.id,
|
||||
recipeName: recipeData.name,
|
||||
recipeScale: recipeData.scale,
|
||||
ingredientSections: shoppingListIngredientSections,
|
||||
ingredientSections: buildIngredientSections(ownIngs),
|
||||
});
|
||||
|
||||
subRefIngs.forEach(ing => addSubRecipeToMap(ing, ing.quantity || 1, recipeData.scale, recipeData));
|
||||
}
|
||||
|
||||
recipeIngredientSections.value = Array.from(recipeSectionMap.values());
|
||||
|
||||
@@ -44,9 +44,8 @@
|
||||
</v-number-input>
|
||||
</v-col>
|
||||
<v-col
|
||||
v-if="!state.isRecipe"
|
||||
sm="12"
|
||||
md="3"
|
||||
md="2"
|
||||
cols="12"
|
||||
>
|
||||
<v-autocomplete
|
||||
@@ -104,7 +103,7 @@
|
||||
<v-col
|
||||
v-if="!state.isRecipe"
|
||||
m="12"
|
||||
md="3"
|
||||
md="4"
|
||||
cols="12"
|
||||
class=""
|
||||
>
|
||||
@@ -162,7 +161,7 @@
|
||||
<v-col
|
||||
v-if="state.isRecipe"
|
||||
m="12"
|
||||
md="6"
|
||||
md="4"
|
||||
cols="12"
|
||||
class=""
|
||||
>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
</v-card-title>
|
||||
<RecipeRating
|
||||
:key="recipe.slug"
|
||||
:value="recipe.rating"
|
||||
:model-value="recipe.rating"
|
||||
:recipe-id="recipe.id"
|
||||
:slug="recipe.slug"
|
||||
/>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<template>
|
||||
<div @click.prevent>
|
||||
<!-- User Rating -->
|
||||
<v-hover v-slot="{ isHovering, props }">
|
||||
<v-hover v-slot="{ isHovering, props: hoverProps }">
|
||||
<v-rating
|
||||
v-if="isOwnGroup && (userRating || isHovering || !ratingsLoaded)"
|
||||
v-bind="props"
|
||||
v-bind="hoverProps"
|
||||
:model-value="userRating"
|
||||
active-color="secondary"
|
||||
color="secondary-lighten-3"
|
||||
@@ -18,7 +18,7 @@
|
||||
<!-- Group Rating -->
|
||||
<v-rating
|
||||
v-else
|
||||
v-bind="props"
|
||||
v-bind="hoverProps"
|
||||
:model-value="groupRating"
|
||||
:half-increments="true"
|
||||
active-color="grey-darken-1"
|
||||
@@ -32,81 +32,62 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
<script setup lang="ts">
|
||||
import { useLoggedInState } from "~/composables/use-logged-in-state";
|
||||
import { useUserSelfRatings } from "~/composables/use-users";
|
||||
|
||||
export default defineNuxtComponent({
|
||||
props: {
|
||||
emitOnly: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
recipeId: {
|
||||
type: String,
|
||||
default: "",
|
||||
},
|
||||
slug: {
|
||||
type: String,
|
||||
default: "",
|
||||
},
|
||||
modelValue: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
},
|
||||
small: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
emits: ["update:modelValue"],
|
||||
setup(props, context) {
|
||||
const { isOwnGroup } = useLoggedInState();
|
||||
const { userRatings, setRating, ready: ratingsLoaded } = useUserSelfRatings();
|
||||
interface Props {
|
||||
emitOnly?: boolean;
|
||||
recipeId?: string;
|
||||
slug?: string;
|
||||
small?: boolean;
|
||||
}
|
||||
|
||||
const userRating = computed(() => {
|
||||
return userRatings.value.find(r => r.recipeId === props.recipeId)?.rating ?? undefined;
|
||||
});
|
||||
|
||||
// if a user unsets their rating, we don't want to fall back to the group rating since it's out of sync
|
||||
const hideGroupRating = ref(!!userRating.value);
|
||||
watch(
|
||||
() => userRating.value,
|
||||
() => {
|
||||
if (userRating.value) {
|
||||
hideGroupRating.value = true;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const groupRating = computed(() => {
|
||||
return hideGroupRating.value ? 0 : props.modelValue;
|
||||
});
|
||||
|
||||
function updateRating(val?: number) {
|
||||
if (!isOwnGroup.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (val === userRating.value) {
|
||||
val = 0;
|
||||
}
|
||||
|
||||
if (!props.emitOnly) {
|
||||
setRating(props.slug, val || 0, null);
|
||||
}
|
||||
context.emit("update:modelValue", val);
|
||||
}
|
||||
|
||||
return {
|
||||
isOwnGroup,
|
||||
ratingsLoaded,
|
||||
groupRating,
|
||||
userRating,
|
||||
updateRating,
|
||||
};
|
||||
},
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
emitOnly: false,
|
||||
recipeId: "",
|
||||
slug: "",
|
||||
small: false,
|
||||
});
|
||||
|
||||
const modelValue = defineModel<number>({ default: 0 });
|
||||
|
||||
const { isOwnGroup } = useLoggedInState();
|
||||
const { userRatings, setRating, ready: ratingsLoaded } = useUserSelfRatings();
|
||||
|
||||
const userRating = computed(() => {
|
||||
return userRatings.value.find(r => r.recipeId === props.recipeId)?.rating ?? undefined;
|
||||
});
|
||||
|
||||
// if a user unsets their rating, we don't want to fall back to the group rating since it's out of sync
|
||||
const hideGroupRating = ref(!!userRating.value);
|
||||
watch(
|
||||
() => userRating.value,
|
||||
() => {
|
||||
if (userRating.value) {
|
||||
hideGroupRating.value = true;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const groupRating = computed(() => {
|
||||
return hideGroupRating.value ? 0 : modelValue.value;
|
||||
});
|
||||
|
||||
function updateRating(val?: number) {
|
||||
if (!isOwnGroup.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (val === userRating.value) {
|
||||
val = 0;
|
||||
}
|
||||
|
||||
if (!props.emitOnly) {
|
||||
setRating(props.slug, val || 0, null);
|
||||
}
|
||||
modelValue.value = val ?? 0;
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
|
||||
@@ -88,6 +88,25 @@
|
||||
validate-on="input"
|
||||
/>
|
||||
|
||||
<!-- Number Input -->
|
||||
<v-number-input
|
||||
v-else-if="inputField.type === fieldTypes.NUMBER"
|
||||
v-model="model[inputField.varName]"
|
||||
variant="underlined"
|
||||
:control-variant="inputField.numberInputConfig?.controlVariant"
|
||||
density="comfortable"
|
||||
:label="inputField.label"
|
||||
:name="inputField.varName"
|
||||
:min="inputField.numberInputConfig?.min"
|
||||
:max="inputField.numberInputConfig?.max"
|
||||
:precision="inputField.numberInputConfig?.precision"
|
||||
:hint="inputField.hint"
|
||||
:hide-details="!inputField.hint"
|
||||
:persistent-hint="!!inputField.hint"
|
||||
:rules="!(inputField.disableUpdate && updateMode) ? inputField.rules || [] : []"
|
||||
validate-on="input"
|
||||
/>
|
||||
|
||||
<!-- Option Select -->
|
||||
<v-select
|
||||
v-else-if="inputField.type === fieldTypes.SELECT"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
export const fieldTypes = {
|
||||
TEXT: "text",
|
||||
TEXT_AREA: "textarea",
|
||||
NUMBER: "number",
|
||||
SELECT: "select",
|
||||
BOOLEAN: "boolean",
|
||||
PASSWORD: "password",
|
||||
|
||||
@@ -13,6 +13,7 @@ interface AuthStatus {
|
||||
interface AuthState {
|
||||
data: AuthData;
|
||||
status: AuthStatus;
|
||||
token: { readonly value: string | null | undefined };
|
||||
signIn: (credentials: FormData, options?: { redirect?: boolean }) => Promise<void>;
|
||||
signOut: (callbackUrl?: string) => Promise<void>;
|
||||
refresh: () => Promise<void>;
|
||||
@@ -131,6 +132,7 @@ export const useAuthBackend = function (): AuthState {
|
||||
return {
|
||||
data: computed(() => authUser.value),
|
||||
status: computed(() => authStatus.value),
|
||||
token: computed(() => tokenCookie.value),
|
||||
signIn,
|
||||
signOut,
|
||||
refresh,
|
||||
|
||||
@@ -10,7 +10,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "简体中文 (Chinese simplified)",
|
||||
value: "zh-CN",
|
||||
progress: 38,
|
||||
progress: 37,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "never",
|
||||
},
|
||||
@@ -31,14 +31,14 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Türkçe (Turkish)",
|
||||
value: "tr-TR",
|
||||
progress: 40,
|
||||
progress: 39,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "never",
|
||||
},
|
||||
{
|
||||
name: "Svenska (Swedish)",
|
||||
value: "sv-SE",
|
||||
progress: 61,
|
||||
progress: 62,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "always",
|
||||
},
|
||||
@@ -52,7 +52,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Slovenščina (Slovenian)",
|
||||
value: "sl-SI",
|
||||
progress: 40,
|
||||
progress: 41,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "always",
|
||||
},
|
||||
@@ -80,7 +80,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Português (Portuguese)",
|
||||
value: "pt-PT",
|
||||
progress: 40,
|
||||
progress: 42,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "always",
|
||||
},
|
||||
@@ -94,7 +94,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Polski (Polish)",
|
||||
value: "pl-PL",
|
||||
progress: 50,
|
||||
progress: 49,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "always",
|
||||
},
|
||||
@@ -108,7 +108,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Nederlands (Dutch)",
|
||||
value: "nl-NL",
|
||||
progress: 64,
|
||||
progress: 65,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "always",
|
||||
},
|
||||
@@ -143,14 +143,14 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Italiano (Italian)",
|
||||
value: "it-IT",
|
||||
progress: 59,
|
||||
progress: 58,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "always",
|
||||
},
|
||||
{
|
||||
name: "Íslenska (Icelandic)",
|
||||
value: "is-IS",
|
||||
progress: 44,
|
||||
progress: 43,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "always",
|
||||
},
|
||||
@@ -192,7 +192,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Français canadien (Canadian French)",
|
||||
value: "fr-CA",
|
||||
progress: 83,
|
||||
progress: 82,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "always",
|
||||
},
|
||||
@@ -213,7 +213,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Eesti (Estonian)",
|
||||
value: "et-EE",
|
||||
progress: 45,
|
||||
progress: 44,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "always",
|
||||
},
|
||||
@@ -248,7 +248,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Deutsch (German)",
|
||||
value: "de-DE",
|
||||
progress: 87,
|
||||
progress: 89,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "always",
|
||||
},
|
||||
@@ -262,7 +262,7 @@ export const LOCALES = [
|
||||
{
|
||||
name: "Čeština (Czech)",
|
||||
value: "cs-CZ",
|
||||
progress: 44,
|
||||
progress: 43,
|
||||
dir: "ltr",
|
||||
pluralFoodHandling: "always",
|
||||
},
|
||||
|
||||
@@ -47,6 +47,7 @@ export const useMealieAuth = function () {
|
||||
return {
|
||||
user,
|
||||
loggedIn,
|
||||
token: auth.token,
|
||||
signIn: auth.signIn,
|
||||
signOut: auth.signOut,
|
||||
refresh: auth.refresh,
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Skep 'n resep deur dit 'n naam te gee. Alle resepte moet unieke name hê.",
|
||||
"new-recipe-names-must-be-unique": "Nuwe resepname moet uniek wees",
|
||||
"scrape-recipe": "Skraap resep",
|
||||
"scrape-recipe-description": "Voeg 'n resep by via 'n url. Voer die url van die webwerf in wat jy vir 'n resep wil skandeer, Mealie sal probeer om die resep vanaf daardie plek te skandeer en by jou versameling te voeg.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Alle lyste",
|
||||
"create-shopping-list": "Nuwe inkopielys",
|
||||
"from-recipe": "Vanaf resep",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Lys naam",
|
||||
"new-list": "Nuwe lys",
|
||||
"quantity": "Hoeveelheid: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Tablespoon",
|
||||
"example-unit-plural": "ex: Tablespoons",
|
||||
"example-unit-abbreviation-singular": "ex: Tbsp",
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Vul die databasis met algemene etikette gebaseer op jou plaaslike taal.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "قم بإنشاء وصفة عن طريق تقديم الاسم. يجب أن يكون لجميع الوصفات أسماء فريدة.",
|
||||
"new-recipe-names-must-be-unique": "يجب أن تكون أسماء الوصفات فريدة",
|
||||
"scrape-recipe": "تحليل الوصفة",
|
||||
"scrape-recipe-description": "أضف الوصفة عن طريق الرابط. قم بتوفير عنوان الURL للموقع الذي تريد أخذ الوصفة منه، وسيحاول Mealie إستخراج الوصفة من ذلك الموقع وإضافتها إلى مجموعتك.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "هل لديك الكثير من الوصفات التي تريد أن تحللها في نفس الوقت؟",
|
||||
"scrape-recipe-suggest-bulk-importer": "جرب الإضافة بالجملة",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "هل لديك بيانات HTML أو JSON خام؟",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "جميع القوائم",
|
||||
"create-shopping-list": "إنشاء قائمة تسوق",
|
||||
"from-recipe": "من الوصفة",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "اسم القائمة",
|
||||
"new-list": "قائمة جديدة",
|
||||
"quantity": "الكَمّيَّة: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "مثال: ملعقة",
|
||||
"example-unit-plural": "مثال: ملاعق",
|
||||
"example-unit-abbreviation-singular": "ex: Tbsp",
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Seed the database with common labels based on your local language.",
|
||||
|
||||
@@ -637,6 +637,7 @@
|
||||
"new-recipe-names-must-be-unique": "Името на рецептата трябва да бъде уникално",
|
||||
"scrape-recipe": "Обхождане на рецепта",
|
||||
"scrape-recipe-description": "Обходи рецепта по линк. Предоставете линк за сайт, който искате да бъде обходен. Mealie ще опита да обходи рецептата от този сайт и да я добави във Вашата колекция.",
|
||||
"scrape-recipe-description-transcription": "Можете също да предоставите URL адреса на видеоклип и Mealie ще се опита да го транскрибира в рецепта.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Имате много рецепти, които искате да обходите наведнъж?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Пробвайте масовото импорторане",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Имате ли сурови HTML или JSON данни?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Всички списъци",
|
||||
"create-shopping-list": "Създаване на списък",
|
||||
"from-recipe": "От рецепта",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Име на списъка",
|
||||
"new-list": "Нов списък",
|
||||
"quantity": "Количество: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "пример: Чаена лъжичка",
|
||||
"example-unit-plural": "пример: Чаени лъжички",
|
||||
"example-unit-abbreviation-singular": "пример: ч.л.",
|
||||
"example-unit-abbreviation-plural": "пример: ч.л.-ки"
|
||||
"example-unit-abbreviation-plural": "пример: ч.л.-ки",
|
||||
"standardization": "Стандартизация",
|
||||
"standardization-description": "Как тази единица може да бъде представена като стандартна единица. Това позволява функции за преобразуване на единици, като например обединяване на съвместими единици в списъци за пазаруване.",
|
||||
"standard-unit": "Стандартна мерна единица",
|
||||
"standard-quantity": "Стандартно количество",
|
||||
"unit-conversion": "Преобразуване на единици",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "течни унции",
|
||||
"cup": "чаена чаша",
|
||||
"ounce": "унция",
|
||||
"pound": "паунд",
|
||||
"milliliter": "милилитър",
|
||||
"liter": "литър",
|
||||
"gram": "грам",
|
||||
"kilogram": "килограм"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Заредете базата данни с етикети на Вашия местен език.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crea la recepta proporcionant-ne un nom. Totes les receptes han de tenir un nom únic.",
|
||||
"new-recipe-names-must-be-unique": "Els noms de les noves receptes han de ser únics",
|
||||
"scrape-recipe": "Rastrejar recepta",
|
||||
"scrape-recipe-description": "Rastrejar recepta des de l'Url. Proporciona un Url del lloc que vols rastrejar i Mealie intentarà analitzar la recepta del lloc web i afegir-la a la teva col·lecció.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Tens moltes receptes a processar alhora?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Prova l'importador a granel",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Teniu dades HTML o JSON pla?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Totes les llistes",
|
||||
"create-shopping-list": "Crea una llista de la compra",
|
||||
"from-recipe": "Des de la recepta",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Nom de la llista",
|
||||
"new-list": "Llista nova",
|
||||
"quantity": "Quantitat: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Cullerada sopera",
|
||||
"example-unit-plural": "ex: Cullerades soperes",
|
||||
"example-unit-abbreviation-singular": "ex: Tbsp",
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Afegeix a la base de dades etiquetes comunes en el vostre idioma.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Vytvořte recept zadáním názvu. Všechny recepty musí mít jedinečná jména.",
|
||||
"new-recipe-names-must-be-unique": "Názvy receptů musí být jedinečné",
|
||||
"scrape-recipe": "Zpracovat recept",
|
||||
"scrape-recipe-description": "Zpracovat recept z URL. Uveďte adresu URL pro stránku, kterou chcete zpracovat a Mealie se pokusí zpracovat recept z tohoto webu a přidat jej do vaší sbírky.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Máte spoustu receptů, které chcete zpracovat najednou?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Vyzkoušejte hromadný import",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Máte surová data HTML nebo JSON?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Všechny seznamy",
|
||||
"create-shopping-list": "Vytvořit nákupní seznam",
|
||||
"from-recipe": "Z receptu",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Název seznamu",
|
||||
"new-list": "Nový seznam",
|
||||
"quantity": "Množství: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "např.: Čajová lžička",
|
||||
"example-unit-plural": "např.: Čajové lžičky",
|
||||
"example-unit-abbreviation-singular": "např.: čl",
|
||||
"example-unit-abbreviation-plural": "např.: čl"
|
||||
"example-unit-abbreviation-plural": "např.: čl",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Naplnit databázi s běžnými popisky používanými ve vašem jazyce.",
|
||||
@@ -1171,7 +1188,7 @@
|
||||
"action-type": "Typ akce",
|
||||
"action-types": {
|
||||
"link": "Link",
|
||||
"post": "Post"
|
||||
"post": "Publikovat"
|
||||
}
|
||||
},
|
||||
"create-alias": "Vytvořit alias",
|
||||
@@ -1427,8 +1444,8 @@
|
||||
"is-greater-than-or-equal-to": "je větší než nebo rovno",
|
||||
"is-less-than": "je menší než",
|
||||
"is-less-than-or-equal-to": "je menší než nebo rovno",
|
||||
"is-older-than": "is older than",
|
||||
"is-newer-than": "is newer than"
|
||||
"is-older-than": "je starší než",
|
||||
"is-newer-than": "je novější než"
|
||||
},
|
||||
"relational-keywords": {
|
||||
"is": "je",
|
||||
@@ -1440,7 +1457,7 @@
|
||||
"is-not-like": "není jako"
|
||||
},
|
||||
"dates": {
|
||||
"days-ago": "days ago|day ago|days ago"
|
||||
"days-ago": "před dny|dnem|před dny"
|
||||
}
|
||||
},
|
||||
"validators": {
|
||||
@@ -1449,6 +1466,6 @@
|
||||
"invalid-url": "Musí být platná URL adresa",
|
||||
"no-whitespace": "Mezery nejsou povoleny",
|
||||
"min-length": "Musí být alespoň {min} znaků",
|
||||
"max-length": "Must Be At Most {max} Character|Must Be At Most {max} Characters"
|
||||
"max-length": "Musí být maximálně {max} znak|Musí být na většině {max} znaků"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Opret en opskrift ved at angive navnet. Alle opskrifter skal have unikke navne.",
|
||||
"new-recipe-names-must-be-unique": "Opskriftsnavnet er allerede i brug",
|
||||
"scrape-recipe": "Hent opskrift",
|
||||
"scrape-recipe-description": "Hent en opskrift fra en hjemmeside. Angiv URL'en til den hjemmeside, du vil hente data fra og Mealie vil forsøge at hente opskriften, samt tilføje den til din samling.",
|
||||
"scrape-recipe-description": "Hent en opskrift fra en hjemmeside. Angiv URL'en til den hjemmeside, du vil hente data fra og Mealie vil forsøge at hente opskriften, og tilføje den til din samling.",
|
||||
"scrape-recipe-description-transcription": "Du kan også angive en URL til en video, hvorefter Mealie vil forsøge at transskribere den, og tilføje den til din samling.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Har du en masse opskrifter, du ønsker at hente på én gang?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Prøv masseimport",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Har rå HTML- eller JSON-data?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Alle lister",
|
||||
"create-shopping-list": "Lav indkøbsliste",
|
||||
"from-recipe": "Fra opskrift",
|
||||
"ingredient-of-recipe": "Ingrediens i {recipe}",
|
||||
"list-name": "Listenavn",
|
||||
"new-list": "Ny liste",
|
||||
"quantity": "Antal: {0}",
|
||||
@@ -1109,8 +1111,8 @@
|
||||
"food-label": "Etiket på fødevare",
|
||||
"edit-food": "Redigér fødevare",
|
||||
"food-data": "Oplysninger om fødevare",
|
||||
"example-food-singular": "fx.: grøntsag",
|
||||
"example-food-plural": "fx.: grøntsager",
|
||||
"example-food-singular": "f.eks.: Løg",
|
||||
"example-food-plural": "f.eks.: Løg",
|
||||
"label-overwrite-warning": "Dette vil tildele den valgte etiket til alle udvalgte fødevarer og potentielt overskrive dine eksisterende etiketter.",
|
||||
"on-hand-checkbox-label": "Ændring af dette flag ændrer markeringen, så denne fødevare ikke er markeret som standard, når du tilføjer en opskrift til en indkøbsliste."
|
||||
},
|
||||
@@ -1131,10 +1133,25 @@
|
||||
"unit-data": "Enhedsoplysninger",
|
||||
"use-abbv": "Anvend forkortelse",
|
||||
"fraction": "Brøkdel",
|
||||
"example-unit-singular": "fx.: teske",
|
||||
"example-unit-plural": "fx.: teskeer",
|
||||
"example-unit-abbreviation-singular": "fx.: tsk",
|
||||
"example-unit-abbreviation-plural": "fx.: tsk"
|
||||
"example-unit-singular": "f.eks.: Spiseske",
|
||||
"example-unit-plural": "f.eks.: Spiseskeer",
|
||||
"example-unit-abbreviation-singular": "f.eks.: Tsk",
|
||||
"example-unit-abbreviation-plural": "f.eks.: Tsk",
|
||||
"standardization": "Standardisering",
|
||||
"standardization-description": "Hvordan denne enhed kan repræsenteres som en standard-enhed. Dette muliggør enhedsomregning, såsom sammenfletning af kompatible enheder i indkøbslister.",
|
||||
"standard-unit": "Standardenhed",
|
||||
"standard-quantity": "Standardmængde",
|
||||
"unit-conversion": "Enhedsomregning",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "flydende ounce",
|
||||
"cup": "kop",
|
||||
"ounce": "ounce",
|
||||
"pound": "pund",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Opret standard etiketter på dit sprog.",
|
||||
|
||||
@@ -637,6 +637,7 @@
|
||||
"new-recipe-names-must-be-unique": "Neue Rezeptnamen müssen eindeutig sein",
|
||||
"scrape-recipe": "Rezept einlesen",
|
||||
"scrape-recipe-description": "Importiere ein Rezept mit der URL. Gib die URL für die Seite an, die du importieren möchtest und Mealie wird versuchen, das Rezept von dieser Seite einzulesen und deiner Sammlung hinzuzufügen.",
|
||||
"scrape-recipe-description-transcription": "Sie können die Url zu einem Video weitergeben und Mealie wird versuchen, dieses in ein Rezept zu übertragen.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Hast Du viele Rezepte, die Du auf einmal einlesen willst?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Probiere den Massenimporter aus",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Hast du Roh-HTML oder JSON Daten?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Alle Listen",
|
||||
"create-shopping-list": "Einkaufsliste erstellen",
|
||||
"from-recipe": "Vom Rezept",
|
||||
"ingredient-of-recipe": "Zutat von {recipe}",
|
||||
"list-name": "Listenname",
|
||||
"new-list": "Neue Liste",
|
||||
"quantity": "Menge: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "z.B. gehäufter Teelöffel",
|
||||
"example-unit-plural": "z.B. gehäufte Teelöffel",
|
||||
"example-unit-abbreviation-singular": "z.B. EL",
|
||||
"example-unit-abbreviation-plural": "z.B. EL"
|
||||
"example-unit-abbreviation-plural": "z.B. EL",
|
||||
"standardization": "Standardisierung",
|
||||
"standardization-description": "Wie diese Einheit als Standardeinheit dargestellt werden kann. Dies ermöglicht die Umwandlung von Einheiten wie das Zusammenführen kompatibler Einheiten in Einkaufslisten.",
|
||||
"standard-unit": "Standardeinheit",
|
||||
"standard-quantity": "Standardmenge",
|
||||
"unit-conversion": "Einheiten-Konvertierung",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "Flüssigunze",
|
||||
"cup": "Tasse",
|
||||
"ounce": "Unze",
|
||||
"pound": "Pfund",
|
||||
"milliliter": "Milliliter",
|
||||
"liter": "Liter",
|
||||
"gram": "Gramm",
|
||||
"kilogram": "Kilogramm"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Füllt die Datenbank mit gängigen Kategorien basierend auf deiner Sprache.",
|
||||
@@ -1171,7 +1188,7 @@
|
||||
"action-type": "Aktionstyp",
|
||||
"action-types": {
|
||||
"link": "Link",
|
||||
"post": "Post"
|
||||
"post": "Posten"
|
||||
}
|
||||
},
|
||||
"create-alias": "Alias erstellen",
|
||||
@@ -1449,6 +1466,6 @@
|
||||
"invalid-url": "Muss eine gültige URL sein",
|
||||
"no-whitespace": "Kein Leerzeichen erlaubt",
|
||||
"min-length": "Muss mindestens {min} Zeichen haben",
|
||||
"max-length": "Must Be At Most {max} Character|Must Be At Most {max} Characters"
|
||||
"max-length": "Muss maximal {max} Zeichen haben|Muss maximal {max} Zeichen haben"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -637,6 +637,7 @@
|
||||
"new-recipe-names-must-be-unique": "Τα νέα ονόματα συνταγών πρέπει να είναι μοναδικά",
|
||||
"scrape-recipe": "Scrape συνταγής",
|
||||
"scrape-recipe-description": "Κάντε scrape μια συνταγή από μια διεύθυνση url. Δώστε τη διεύθυνση url για την ιστοσελίδα που θέλετε να κάνετε scrape, και το Mealie θα προσπαθήσει να εξάγει τη συνταγή από αυτή την ιστοσελίδα και να την προσθέσει στη συλλογή σας.",
|
||||
"scrape-recipe-description-transcription": "Μπορείτε επίσης να δώσετε το url προς ένα βίντεο και το Mealie θα προσπαθήσει να το απομαγνητοφωνήσει σε μια συνταγή.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Εχετε πολλές συνταγές που θέλετε να κάνετε scrape από ένα μέρος;",
|
||||
"scrape-recipe-suggest-bulk-importer": "Δοκιμάστε τον μαζικό εισαγωγέα συνταγών μας",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Εχουν ακατέργαστα δεδομένα HTML ή JSON;",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Όλες οι λίστες",
|
||||
"create-shopping-list": "Δημιουργία λίστας για ψώνια",
|
||||
"from-recipe": "Από Τη Συνταγή",
|
||||
"ingredient-of-recipe": "Συστατικό του {recipe}",
|
||||
"list-name": "Όνομα λίστας",
|
||||
"new-list": "Νέα λίστα",
|
||||
"quantity": "Ποσότητα: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "π.χ.: Κουταλιά της σούπας",
|
||||
"example-unit-plural": "π.χ.: Κουταλιές της σούπας",
|
||||
"example-unit-abbreviation-singular": "π.χ.: Κ. σ.",
|
||||
"example-unit-abbreviation-plural": "π.χ.: Κ. σ."
|
||||
"example-unit-abbreviation-plural": "π.χ.: Κ. σ.",
|
||||
"standardization": "Τυποποίηση",
|
||||
"standardization-description": "Πώς αυτή η μονάδα μπορεί να αναπαρασταθεί ως μια τυπική μονάδα. Αυτό επιτρέπει δυνατότητες μετατροπής μονάδας, όπως η συγχώνευση συμβατών μονάδων σε λίστες αγορών.",
|
||||
"standard-unit": "Τυπική μονάδα",
|
||||
"standard-quantity": "Τυπική ποσότητα",
|
||||
"unit-conversion": "Μετατροπή μονάδων",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "ρευστή ουγγιά",
|
||||
"cup": "φλιτζάνι",
|
||||
"ounce": "ουγγιά",
|
||||
"pound": "λίβρα",
|
||||
"milliliter": "χιλιοστόλιτρο",
|
||||
"liter": "λίτρο",
|
||||
"gram": "γραμμάριο",
|
||||
"kilogram": "κιλό"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Τροφοδοτήστε τη βάση δεδομένων με κοινές ετικέτες με βάση την τοπική σας γλώσσα.",
|
||||
@@ -1170,8 +1187,8 @@
|
||||
"edit-recipe-action": "Επεξεργασία Ενέργειας Συνταγής",
|
||||
"action-type": "Τύπος Ενέργειας",
|
||||
"action-types": {
|
||||
"link": "Link",
|
||||
"post": "Post"
|
||||
"link": "Σύνδεση",
|
||||
"post": "Δημοσίευση"
|
||||
}
|
||||
},
|
||||
"create-alias": "Δημιουργία ψευδώνυμου",
|
||||
|
||||
@@ -637,6 +637,7 @@
|
||||
"new-recipe-names-must-be-unique": "New recipe names must be unique",
|
||||
"scrape-recipe": "Scrape Recipe",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "All Lists",
|
||||
"create-shopping-list": "Create Shopping List",
|
||||
"from-recipe": "From Recipe",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "List Name",
|
||||
"new-list": "New List",
|
||||
"quantity": "Quantity: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Tablespoon",
|
||||
"example-unit-plural": "ex: Tablespoons",
|
||||
"example-unit-abbreviation-singular": "ex: Tbsp",
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Seed the database with common labels based on your local language.",
|
||||
|
||||
@@ -637,6 +637,7 @@
|
||||
"new-recipe-names-must-be-unique": "New recipe names must be unique",
|
||||
"scrape-recipe": "Scrape Recipe",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "All Lists",
|
||||
"create-shopping-list": "Create Shopping List",
|
||||
"from-recipe": "From Recipe",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "List Name",
|
||||
"new-list": "New List",
|
||||
"quantity": "Quantity: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Tablespoon",
|
||||
"example-unit-plural": "ex: Tablespoons",
|
||||
"example-unit-abbreviation-singular": "ex: Tbsp",
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Seed the database with common labels based on your local language.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crear una receta proporcionando el nombre. Todas las recetas deben tener nombres únicos.",
|
||||
"new-recipe-names-must-be-unique": "El nombre de la receta debe ser único",
|
||||
"scrape-recipe": "Analiza receta",
|
||||
"scrape-recipe-description": "Importa una receta por URL. Proporcione la URL para el sitio que desea importar, y Mealie intentará importar la receta de ese sitio y añadirla a su colección.",
|
||||
"scrape-recipe-description": "Importa una receta por URL. Proporcione la URL para el sitio que desea importar, y Mealie intentará extraer la receta de ese sitio y añadirla a su colección.",
|
||||
"scrape-recipe-description-transcription": "También puedes proporcionar la url a un video y Mealie intentará transcribirla a una receta.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "¿Tienes muchas recetas que quieres raspar a la vez?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Prueba el importador masivo",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "¿Tiene datos HTML o JSON?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Todas las listas",
|
||||
"create-shopping-list": "Crear lista de la compra",
|
||||
"from-recipe": "Desde receta",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Nombre de la lista",
|
||||
"new-list": "Nueva lista",
|
||||
"quantity": "Cantidad: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ej: Cucharada",
|
||||
"example-unit-plural": "ej: Cucharadas",
|
||||
"example-unit-abbreviation-singular": "ej: Cda",
|
||||
"example-unit-abbreviation-plural": "ej: Cdas"
|
||||
"example-unit-abbreviation-plural": "ej: Cdas",
|
||||
"standardization": "Estandarización",
|
||||
"standardization-description": "Cómo esta unidad puede ser representada como una unidad estándar. Esto permite características de conversión de unidades tales como la fusión de unidades compatibles en listas de compras.",
|
||||
"standard-unit": "Unidad Estándar",
|
||||
"standard-quantity": "Cantidad Estándar",
|
||||
"unit-conversion": "Conversión de Unidad",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "onza líquida",
|
||||
"cup": "taza",
|
||||
"ounce": "onza",
|
||||
"pound": "libra",
|
||||
"milliliter": "mililitro",
|
||||
"liter": "litro",
|
||||
"gram": "gramo",
|
||||
"kilogram": "kilogramo"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Añade a la base de datos etiquetas comunes basadas en su idioma local.",
|
||||
@@ -1449,6 +1466,6 @@
|
||||
"invalid-url": "Debe ser una URL válida",
|
||||
"no-whitespace": "No se permiten espacios en blanco",
|
||||
"min-length": "Debe tener como mínimo {min} caracteres",
|
||||
"max-length": "Must Be At Most {max} Character|Must Be At Most {max} Characters"
|
||||
"max-length": "Debe Ser Como Máximo {max} Carácter|Debe Ser Como Máximo {max} Caracteres"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Loo retsept selle nime kasutades. Igal retseptil peab olema unikaalne nimi",
|
||||
"new-recipe-names-must-be-unique": "Uue retsepti nimed peavad olema unikaalsed",
|
||||
"scrape-recipe": "Retsepti lugemine",
|
||||
"scrape-recipe-description": "Lugege retsept URL-i abil. Sisestage soovitud retsepti URL, ja Mealie proovib selle saidi retsepti jäädvustada ja lisada selle teie kogusse.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Sul on palju retsepte ja sa soovida lugeda kõik sisse üheaegselt?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Proovi hulgiimportimist.",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Sul on töötlemata HTMLi või JSONi andmed?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Kõik nimekirjad",
|
||||
"create-shopping-list": "Loo ostunimekiri",
|
||||
"from-recipe": "Retseptist",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Nimekirja nimi",
|
||||
"new-list": "Uus Nimekiri",
|
||||
"quantity": "Kogus: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "nt: Supilusikas",
|
||||
"example-unit-plural": "nt: Supilusikad",
|
||||
"example-unit-abbreviation-singular": "nt: sl",
|
||||
"example-unit-abbreviation-plural": "nt: sl"
|
||||
"example-unit-abbreviation-plural": "nt: sl",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Alusta andmebaasi täitmist tüüpiliste siltidega kohalikus keeles.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Luo resepti antamalla nimi. Kaikilla resepteillä on oltava yksilölliset nimet.",
|
||||
"new-recipe-names-must-be-unique": "Reseptin nimen on oltava yksilöllinen",
|
||||
"scrape-recipe": "Reseptin kaappain",
|
||||
"scrape-recipe-description": "Kaappaa resepti urlin avulla. Anna sen reseptin url-osoite, jonka haluat kaapata, ja Mealie yrittää kaapata reseptin kyseiseltä sivustolta ja lisätä sen kokoelmaasi.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Haluatko kerätä useamman reseptin kerralla?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Kokeile massasiirtotyökalua",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Onko sinulla raakaa HTML- tai JSON-dataa?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Kaikki ostoslistat",
|
||||
"create-shopping-list": "Luo ostoslista",
|
||||
"from-recipe": "Reseptistä",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Ostoslistan nimi",
|
||||
"new-list": "Uusi lista",
|
||||
"quantity": "Määrä: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "esim. ruokalusikka",
|
||||
"example-unit-plural": "esim. ruokalusikat",
|
||||
"example-unit-abbreviation-singular": "esim. rkl",
|
||||
"example-unit-abbreviation-plural": "esim. rkl"
|
||||
"example-unit-abbreviation-plural": "esim. rkl",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Lisää tietokantaan yleiset tunnisteet paikallisen kielen perusteella.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Créer une recette en fournissant le nom. Toutes les recettes doivent avoir des noms uniques.",
|
||||
"new-recipe-names-must-be-unique": "Les noms de nouvelles recettes doivent être uniques",
|
||||
"scrape-recipe": "Récupérer une recette",
|
||||
"scrape-recipe-description": "Récupérer une recette par URL. Fournissez l'URL de la page que vous voulez récupérer, et Mealie essaiera d'en extraire la recette pour l'ajouter à votre collection.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Vous avez un tas de recettes à récupérer d’un coup ?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Essayez l’importateur de masse",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Vous avez des données brutes en HTML ou JSON ?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Toutes les listes",
|
||||
"create-shopping-list": "Créer une liste de courses",
|
||||
"from-recipe": "À partir d’une recette",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Nom de la liste",
|
||||
"new-list": "Nouvelle liste",
|
||||
"quantity": "Quantité : {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex : Cuillère à soupe",
|
||||
"example-unit-plural": "ex : Cuillères à soupe",
|
||||
"example-unit-abbreviation-singular": "ex : CàS",
|
||||
"example-unit-abbreviation-plural": "ex : CàS"
|
||||
"example-unit-abbreviation-plural": "ex : CàS",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Initialisez la base de données avec des étiquettes communes basées sur votre langue locale.",
|
||||
@@ -1170,8 +1187,8 @@
|
||||
"edit-recipe-action": "Modifier l'action de recette",
|
||||
"action-type": "Type d'action",
|
||||
"action-types": {
|
||||
"link": "Link",
|
||||
"post": "Post"
|
||||
"link": "Lien",
|
||||
"post": "Publier"
|
||||
}
|
||||
},
|
||||
"create-alias": "Créer un alias",
|
||||
@@ -1449,6 +1466,6 @@
|
||||
"invalid-url": "Doit être une URL valide",
|
||||
"no-whitespace": "Aucun espace n'est autorisé",
|
||||
"min-length": "Doit contenir au moins {min} caractères",
|
||||
"max-length": "Must Be At Most {max} Character|Must Be At Most {max} Characters"
|
||||
"max-length": "Doit comporter au maximum {max} caractère|Doit comporter au maximum {max} caractères"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Créer une recette en fournissant le nom. Toutes les recettes doivent avoir des noms uniques.",
|
||||
"new-recipe-names-must-be-unique": "Les noms de nouvelles recettes doivent être uniques",
|
||||
"scrape-recipe": "Récupérer une recette",
|
||||
"scrape-recipe-description": "Récupérer une recette par URL. Fournissez l'URL de la page que vous voulez récupérer, et Mealie essaiera d'en extraire la recette pour l'ajouter à votre collection.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Vous avez un tas de recettes à récupérer d’un coup ?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Essayez l’importateur de masse",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Vous avez des données brutes en HTML ou JSON ?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Toutes les listes",
|
||||
"create-shopping-list": "Créer une liste d'épicerie",
|
||||
"from-recipe": "À partir d'une recette",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Nom de la liste",
|
||||
"new-list": "Nouvelle liste",
|
||||
"quantity": "Quantité : {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex : Cuillère à soupe",
|
||||
"example-unit-plural": "ex : Cuillères à soupe",
|
||||
"example-unit-abbreviation-singular": "ex : CàS",
|
||||
"example-unit-abbreviation-plural": "ex : CàS"
|
||||
"example-unit-abbreviation-plural": "ex : CàS",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Initialisez la base de données avec des étiquettes communes basées sur votre langue locale.",
|
||||
@@ -1170,8 +1187,8 @@
|
||||
"edit-recipe-action": "Modifier l'action de recette",
|
||||
"action-type": "Type d'action",
|
||||
"action-types": {
|
||||
"link": "Link",
|
||||
"post": "Post"
|
||||
"link": "Lien",
|
||||
"post": "Publier"
|
||||
}
|
||||
},
|
||||
"create-alias": "Créer un alias",
|
||||
@@ -1449,6 +1466,6 @@
|
||||
"invalid-url": "Doit être une URL valide",
|
||||
"no-whitespace": "Aucun espace n'est autorisé",
|
||||
"min-length": "",
|
||||
"max-length": "Must Be At Most {max} Character|Must Be At Most {max} Characters"
|
||||
"max-length": "Doit comporter au maximum {max} caractère|Doit comporter au maximum {max} caractères"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Créer une recette en fournissant le nom. Toutes les recettes doivent avoir des noms uniques.",
|
||||
"new-recipe-names-must-be-unique": "Les noms de nouvelles recettes doivent être uniques",
|
||||
"scrape-recipe": "Récupérer une recette",
|
||||
"scrape-recipe-description": "Récupérer une recette par URL. Fournissez l'URL de la page que vous voulez récupérer et Mealie essaiera d'en extraire la recette pour l'ajouter à votre collection.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Vous avez un tas de recettes à récupérer d’un coup ?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Essayez l’importateur de masse",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Vous avez des données brutes en HTML ou JSON ?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Toutes les listes",
|
||||
"create-shopping-list": "Créer une liste de courses",
|
||||
"from-recipe": "À partir d’une recette",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Nom de la liste",
|
||||
"new-list": "Nouvelle liste",
|
||||
"quantity": "Quantité : {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex : Cuillère à soupe",
|
||||
"example-unit-plural": "ex : Cuillères à soupe",
|
||||
"example-unit-abbreviation-singular": "ex : CàS",
|
||||
"example-unit-abbreviation-plural": "ex : CàS"
|
||||
"example-unit-abbreviation-plural": "ex : CàS",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Initialisez la base de données avec des étiquettes communes basées sur votre langue locale.",
|
||||
@@ -1170,8 +1187,8 @@
|
||||
"edit-recipe-action": "Modifier l'action de recette",
|
||||
"action-type": "Type d'action",
|
||||
"action-types": {
|
||||
"link": "Link",
|
||||
"post": "Post"
|
||||
"link": "Lien",
|
||||
"post": "Publier"
|
||||
}
|
||||
},
|
||||
"create-alias": "Créer un alias",
|
||||
@@ -1449,6 +1466,6 @@
|
||||
"invalid-url": "Doit être une URL valide",
|
||||
"no-whitespace": "Aucun espace n'est autorisé",
|
||||
"min-length": "Doit contenir au moins {min} caractères",
|
||||
"max-length": "Must Be At Most {max} Character|Must Be At Most {max} Characters"
|
||||
"max-length": "Doit comporter au maximum {max} caractère|Doit comporter au maximum {max} caractères"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Cree unha receita introducindo o nome. Todas as receitas deven ter nomes únicos.",
|
||||
"new-recipe-names-must-be-unique": "Os nomes de receitas deven ser únicos",
|
||||
"scrape-recipe": "Extrair receita (Scrape)",
|
||||
"scrape-recipe-description": "Extrair unha receita por url. Propercione o URL do site que pretende extrair, e o Mealie tentará extrair a receita dese site e adicionala à sua coleción.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Ten moitas receitas para procesar dunha vez?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Prove o importador en masa",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Ten datos HTML ou JSON en bruto?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Todas as Listas",
|
||||
"create-shopping-list": "Crear Lista de Compras",
|
||||
"from-recipe": "Da Receita",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Nome da Lista",
|
||||
"new-list": "Nova Lista",
|
||||
"quantity": "Cantidade: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Culler de Sopa",
|
||||
"example-unit-plural": "ex: Culleres de Sopa",
|
||||
"example-unit-abbreviation-singular": "ex: Cdsp",
|
||||
"example-unit-abbreviation-plural": "ex: Cdsps"
|
||||
"example-unit-abbreviation-plural": "ex: Cdsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Adicionar à base de datos rótulos comuns no seu idioma local.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "יצירת מתכון באמצעות שם. כל שמות המתכונים צריכים להיות שונים.",
|
||||
"new-recipe-names-must-be-unique": "שם מתכון חדש חייב להיות ייחודי",
|
||||
"scrape-recipe": "קריאת מתכון",
|
||||
"scrape-recipe-description": "קריאת מתכון בעזרת לינק. ספק את הלינק של האתר שברצונך לקרוא, ומילי תנסה לקרוא את המתכון מהאתר ולהוסיף אותו לאוסף.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "יש לך הרבה מתכונים שאתה רוצה לקרוא בבת אחת?",
|
||||
"scrape-recipe-suggest-bulk-importer": "נסה את יכולת קריאת רשימה",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "יש לך מידע גולמי ב-HTML או JSON?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "כל הרשימות",
|
||||
"create-shopping-list": "צור רשימת קניות",
|
||||
"from-recipe": "מתוך מתכון",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "שם רשימה",
|
||||
"new-list": "רשימה חדשה",
|
||||
"quantity": "כמות: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "דוגמא: כפית",
|
||||
"example-unit-plural": "דוגמא: כפיות",
|
||||
"example-unit-abbreviation-singular": "דוגמא: כף",
|
||||
"example-unit-abbreviation-plural": "דוגמא: כפות"
|
||||
"example-unit-abbreviation-plural": "דוגמא: כפות",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "אכלס את מסד הנתונים בתוויות נפוצות בהתאם לשפה המקומית שלך.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Kreirajte recept pružajući naziv. Svi recepti moraju imati jedinstvena imena.",
|
||||
"new-recipe-names-must-be-unique": "Naziv novog recepta mora imati jedinstveno ime",
|
||||
"scrape-recipe": "Prikupi (skraperaj) recept",
|
||||
"scrape-recipe-description": "Prikupi (skraperaj) recept putem URL-a. Priložite URL web stranice s koje želite prikupiti recept, a Mealie će pokušati prikupiti recept s te stranice i dodati ga u vašu kolekciju.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Imate puno recepata koje želite odjednom preuzeti?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Isprobajte masovni uvoz",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Imate neobrađene HTML ili JSON podatke?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Svi Popisi",
|
||||
"create-shopping-list": "Kreiraj Popis za Kupovinu",
|
||||
"from-recipe": "Iz Recepta",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Naziv Popisa",
|
||||
"new-list": "Novi Popis",
|
||||
"quantity": "Količina: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Tablespoon",
|
||||
"example-unit-plural": "ex: Tablespoons",
|
||||
"example-unit-abbreviation-singular": "ex: Tbsp",
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Popunite bazu podataka uobičajenim oznakama na temelju vašeg lokalnog jezika.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Hozzon létre egy receptet a név megadásával. Minden receptnek egyedi névvel kell rendelkeznie.",
|
||||
"new-recipe-names-must-be-unique": "Az új recept nevének egyedinek kell lennie",
|
||||
"scrape-recipe": "Recept kinyerése",
|
||||
"scrape-recipe-description": "Recept (adatok) kinyerése Url alapján. Adja meg a beolvasni kívánt oldal Url-címét, és Mealie megpróbálja beolvasni a receptet az adott oldalról, majd hozzáadja azt gyűjteményéhez.",
|
||||
"scrape-recipe-description": "Recept kinyerése URL alapján. Adja meg annak az oldalnak az URL‑jét, amelyről szeretné a receptet kinyerni, és a Mealie megpróbálja beolvasni a receptet, majd hozzáadja a gyűjteményéhez.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Sok receptje van, amit egyszerre szeretne átvenni?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Próbálja ki a tömeges importálót",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Nyers HTML vagy JSON adatai vannak?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Összes lista",
|
||||
"create-shopping-list": "Bevásárlólista készítése",
|
||||
"from-recipe": "Receptből",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Lista Neve",
|
||||
"new-list": "Új lista",
|
||||
"quantity": "Mennyiség: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "pl. Evőkanál",
|
||||
"example-unit-plural": "pl. Evőkanalak",
|
||||
"example-unit-abbreviation-singular": "pl. ek",
|
||||
"example-unit-abbreviation-plural": "pl. ek"
|
||||
"example-unit-abbreviation-plural": "pl. ek",
|
||||
"standardization": "Standardizálás",
|
||||
"standardization-description": "Hogyan jeleníthető meg ez az egység szabványos egységként. Ez lehetővé teszi az olyan funkciókat, mint a kompatibilis egységek összevonása a bevásárlólistákon.",
|
||||
"standard-unit": "Standard egység",
|
||||
"standard-quantity": "Standard mennyiség",
|
||||
"unit-conversion": "Mértékegység‑átváltás",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "folyadék uncia",
|
||||
"cup": "csésze",
|
||||
"ounce": "uncia",
|
||||
"pound": "font",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gramm",
|
||||
"kilogram": "kilogramm"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Töltse be az Ön nyelve szerinti közös címkélet tartalmazó adatbázist.",
|
||||
|
||||
@@ -539,7 +539,7 @@
|
||||
"section-title": "Skiptingar titill",
|
||||
"servings": "Skammtar",
|
||||
"serves-amount": "Fyrir {amount}",
|
||||
"share-recipe-message": "I wanted to share my {0} recipe with you.",
|
||||
"share-recipe-message": "Mig langar að deila með þér uppskriftinni {0}",
|
||||
"show-nutrition-values": "Sýna næringargildi",
|
||||
"sodium-content": "Natríum",
|
||||
"step-index": "Skref {step}",
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Stofnaðu uppskrift með því að gefa henni nafn, allar uppskriftir þurfa að hafa einstakt nafn.",
|
||||
"new-recipe-names-must-be-unique": "Nöfn uppskrifta þurfa að vera einstök",
|
||||
"scrape-recipe": "Vinna uppskrift",
|
||||
"scrape-recipe-description": "Sækja uppskrift af vefslóð. Settu inn vefslóð fyrir síðuna þar sem þú vilt sækja uppskrift og Mealie mun reyna að vinna uppskriftina þaðan og bæta henni við safnið þitt.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Ertu með margar uppskriftir sem þú villt setja inn í einu?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Prófaðu að setja inn margar uppskriftir í einu",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Ertu með hrá HTML eða JSON gögn?",
|
||||
@@ -662,7 +663,7 @@
|
||||
"bulk-imports": "Flytja inn margar uppskriftir",
|
||||
"bulk-import-process-has-started": "Vinnslan við að flytja inn margar uppskriftir í einu er byrjuð",
|
||||
"bulk-import-process-has-failed": "Vinnslan við að flytja inn margar uppskriftir í einu mistókst",
|
||||
"report-deletion-failed": "Report deletion failed",
|
||||
"report-deletion-failed": "Mistókst að eyða skýrslu",
|
||||
"recipe-debugger": "Yfirfara uppskrift",
|
||||
"recipe-debugger-description": "Náðu í slóðina af uppskriftinni sem þú villt yfirfara og límdu hana hér. Síðan með uppskriftinni verður greind með greiningarverkfærinu og þú munnt sjá niðurstöðuna. Ef þú sérð að engin gögn skila sér þá er slóðin sem þú ert að greina ekki studd af Mealie eða greiningarverkfærinu.",
|
||||
"use-openai": "Nota OpenAI",
|
||||
@@ -786,9 +787,9 @@
|
||||
"homepage": {
|
||||
"all-categories": "Allir flokkar",
|
||||
"card-per-section": "Card Per Section",
|
||||
"home-page": "Home Page",
|
||||
"home-page": "Heimasíða",
|
||||
"home-page-sections": "Home Page Sections",
|
||||
"show-recent": "Show Recent"
|
||||
"show-recent": "Sýna nýlegar færslur"
|
||||
},
|
||||
"language": "Tungumál",
|
||||
"latest": "Síðasta",
|
||||
@@ -844,12 +845,12 @@
|
||||
"assign-all": "Úthluta öllum",
|
||||
"bulk-assign": "Fjölda úthlutun",
|
||||
"new-name": "Nýtt nafn",
|
||||
"no-unused-items": "No Unused Items",
|
||||
"no-unused-items": "Engir ónotaðir hlutir",
|
||||
"recipes-affected": "No Recipes Affected|One Recipe Affected|{count} Recipes Affected",
|
||||
"remove-unused": "Remove Unused",
|
||||
"remove-unused": "Fjarlægja ónotaða",
|
||||
"title-case-all": "Title Case All",
|
||||
"toolbox": "Toolbox",
|
||||
"unorganized": "Unorganized"
|
||||
"toolbox": "Verkfærakista",
|
||||
"unorganized": "Óflokkað"
|
||||
},
|
||||
"webhooks": {
|
||||
"test-webhooks": "Test Webhooks",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Allir innkaupalistar",
|
||||
"create-shopping-list": "Búa til innkaupalista",
|
||||
"from-recipe": "Úr uppskrift",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "List Name",
|
||||
"new-list": "Nýr innkaupalisti",
|
||||
"quantity": "Fjöldi: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "t.d. matskeið",
|
||||
"example-unit-plural": "t.d. matskeiðar",
|
||||
"example-unit-abbreviation-singular": "t.d. msk",
|
||||
"example-unit-abbreviation-plural": "t.d. msk"
|
||||
"example-unit-abbreviation-plural": "t.d. msk",
|
||||
"standardization": "Samræming",
|
||||
"standardization-description": "Hvernig þessi eining er tengd við staðlaða einingu. Þetta gerir kleift að umbreyta einingum, til dæmis að sameina samhæfar einingar í innkaupalistum.",
|
||||
"standard-unit": "Viðmiðunareining",
|
||||
"standard-quantity": "Viðmiðunarmagn",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fljótandi únsa",
|
||||
"cup": "bolli",
|
||||
"ounce": "únsa",
|
||||
"pound": "pund",
|
||||
"milliliter": "millilíter",
|
||||
"liter": "líter",
|
||||
"gram": "gramm",
|
||||
"kilogram": "kílógramm"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Bæta algengum merkimiðum á þínu tungumáli við gagnarunninn.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crea una ricetta fornendo il nome. Tutte le ricette devono avere nomi univoci.",
|
||||
"new-recipe-names-must-be-unique": "I nuovi nomi delle ricette devono essere univoci",
|
||||
"scrape-recipe": "Recupera Ricetta",
|
||||
"scrape-recipe-description": "Recupera una ricetta da url. Fornire l'url per il sito che si desidera analizzare, e Mealie cercherà di recuperare la ricetta da quel sito e aggiungerlo alla vostra raccolta.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Hai un sacco di ricette che vuoi importare contemporaneamente?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Prova l'importatore massivo",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Hai dei dati grezzi HTML o JSON?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Tutte le Liste",
|
||||
"create-shopping-list": "Crea Lista della Spesa",
|
||||
"from-recipe": "Dalla Ricetta",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Nome Lista",
|
||||
"new-list": "Nuova Lista",
|
||||
"quantity": "Quantità: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "esempio: Cucchiaino",
|
||||
"example-unit-plural": "esempio: Cucchiaini",
|
||||
"example-unit-abbreviation-singular": "esempio: Ccno",
|
||||
"example-unit-abbreviation-plural": "esempio: Ccni"
|
||||
"example-unit-abbreviation-plural": "esempio: Ccni",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Riempie il database con etichette comuni basate sulla lingua.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "名前を指定してレシピを作成します。すべてのレシピには固有の名前が必要です。",
|
||||
"new-recipe-names-must-be-unique": "新しいレシピ名は固有のものでなければなりません",
|
||||
"scrape-recipe": "レシピをスクレイプ",
|
||||
"scrape-recipe-description": "URLからレシピをスクレイプします。 スクレイプしたいサイトのURLを入力してください。Mealieはそのサイトからレシピを抽出してコレクションに追加しようとします。",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "一度に読み込みたいレシピがたくさんありますか?",
|
||||
"scrape-recipe-suggest-bulk-importer": "一括インポートを試す",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "生の HTML または JSON データをお持ちですか?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "すべてのリスト",
|
||||
"create-shopping-list": "買い物リストの作成",
|
||||
"from-recipe": "レシピから",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "リスト名",
|
||||
"new-list": "新しいリスト",
|
||||
"quantity": "数量: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "例: 大さじ",
|
||||
"example-unit-plural": "例: 大さじ",
|
||||
"example-unit-abbreviation-singular": "例: Tbsp",
|
||||
"example-unit-abbreviation-plural": "例: Tbsp"
|
||||
"example-unit-abbreviation-plural": "例: Tbsp",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "ローカル言語に基づいた共通ラベルをデータベースにシードします。",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "이름을 입력하여 레시피를 생성하세요. 모든 레시피는 고유한 이름을 가져야 합니다.",
|
||||
"new-recipe-names-must-be-unique": "새로운 레시피 이름은 반드시 고유해야 합니다",
|
||||
"scrape-recipe": "레시피 스크랩하기",
|
||||
"scrape-recipe-description": "URL로 레시피를 스크랩하세요. 스크랩하려는 사이트의 URL을 제공하면, Mealie가 해당 사이트에서 레시피를 스크랩하여 여러분의 컬렉션에 추가합니다.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "한 번에 스크랩하고 싶은 레시피가 많으신가요?",
|
||||
"scrape-recipe-suggest-bulk-importer": "대량 가져오기 도구를 사용해 보세요",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "원본 HTML 또는 JSON 데이터를 가지고 계신가요?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "모든 목록",
|
||||
"create-shopping-list": "장보기 목록 생성",
|
||||
"from-recipe": "레시피로부터",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "목록 이름",
|
||||
"new-list": "새 목록",
|
||||
"quantity": "양: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "예: 큰술",
|
||||
"example-unit-plural": "예: 큰술",
|
||||
"example-unit-abbreviation-singular": "예: Tbsp",
|
||||
"example-unit-abbreviation-plural": "예: Tbsps"
|
||||
"example-unit-abbreviation-plural": "예: Tbsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "당신의 언어를 기반으로 한 일반적인 라벨을 데이터베이스에 설정하십시오.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Sukurti receptą įrašant pavadinimą. Visi receptai privalo turėti unikalius pavadinimus.",
|
||||
"new-recipe-names-must-be-unique": "Naujo recepto pavadinimas turi būti unikalus",
|
||||
"scrape-recipe": "Nuskaityti receptą",
|
||||
"scrape-recipe-description": "Nuskaityti receptą iš URL nuorodos. Pateikite recepto nuorodą, ir Mealie pabandys paimti recepto informaciją iš šios svetainės ir patalpinti ją jūsų kolekcijoje.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Turite daug receptų, kuriuos norite nuskaityti vienu metu?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Išbandykite masinį importavimą",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Turite neapdorotų HTML arba JSON duomenų?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Visi sąrašai",
|
||||
"create-shopping-list": "Sukurti pirkinių sąrašą",
|
||||
"from-recipe": "Iš recepto",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Sąrašo pavadinimas",
|
||||
"new-list": "Naujas sąrašas",
|
||||
"quantity": "Kiekis: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Tablespoon",
|
||||
"example-unit-plural": "ex: Tablespoons",
|
||||
"example-unit-abbreviation-singular": "ex: Tbsp",
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Įdėkite į duomenų bazę bendras žymas pagal jūsų kalbą.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Izveidojiet recepti, norādot nosaukumu. Visām receptēm jābūt unikāliem nosaukumiem.",
|
||||
"new-recipe-names-must-be-unique": "Jaunajiem recepšu nosaukumiem jābūt unikāliem",
|
||||
"scrape-recipe": "Sasmalcināšanas recepte",
|
||||
"scrape-recipe-description": "Noslaukiet recepti pēc url. Norādiet vietnes URL, kuru vēlaties nokasīt, un Mealie mēģinās nokasīt recepti no šīs vietnes un pievienot to savai kolekcijai.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Vai jums ir daudz recepšu, kuras vēlaties uzreiz nokasīt?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Izmēģiniet lielapjoma importētāju",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Vai jums ir neapstrādāti HTML vai JSON dati?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Visi saraksti",
|
||||
"create-shopping-list": "Izveidot iepirkumu sarakstu",
|
||||
"from-recipe": "No receptes",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Saraksta nosaukums",
|
||||
"new-list": "Jauns saraksts",
|
||||
"quantity": "Daudzums: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "piemēram: ēdamkarote",
|
||||
"example-unit-plural": "piemēram: ēdamkarotes",
|
||||
"example-unit-abbreviation-singular": "piemēram: ēdamkarote",
|
||||
"example-unit-abbreviation-plural": "piemēram: Tbsps"
|
||||
"example-unit-abbreviation-plural": "piemēram: Tbsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Izveidojiet datu bāzi ar kopējām etiķetēm, pamatojoties uz jūsu vietējo valodu.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Maak een recept door het een naam te geven. Alle recepten moeten unieke namen hebben.",
|
||||
"new-recipe-names-must-be-unique": "Nieuwe receptnamen moeten uniek zijn",
|
||||
"scrape-recipe": "Scrape recept",
|
||||
"scrape-recipe-description": "Voeg een recept toe via een URL. Geef de URL op van de site die je wil scannen voor een recept en Mealie zal proberen het recept vanaf die plek te scannen en aan je collectie toe te voegen.",
|
||||
"scrape-recipe-description": "Een recept ophalen via de url. Voer de url in van de website waarvan je het recept wilt ophalen en Mealie zal proberen het recept van die website op te halen en aan je verzameling toe te voegen.",
|
||||
"scrape-recipe-description-transcription": "Je kunt ook de url naar een video geven en Mealie zal proberen deze in een recept om te zetten.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Heb je veel recepten die je in één keer wil importeren?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Probeer importeren in bulk",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Heb je onbewerkte HTML of JSON gegevens?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Alle lijsten",
|
||||
"create-shopping-list": "Boodschappenlijst maken",
|
||||
"from-recipe": "Uit recept",
|
||||
"ingredient-of-recipe": "Ingrediënt van {recipe}",
|
||||
"list-name": "Lijstnaam",
|
||||
"new-list": "Nieuwe lijst",
|
||||
"quantity": "Hoeveelheid: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "Bv: eetlepel ",
|
||||
"example-unit-plural": "Bv: eetlepels ",
|
||||
"example-unit-abbreviation-singular": "Bv: el",
|
||||
"example-unit-abbreviation-plural": "bijv: els"
|
||||
"example-unit-abbreviation-plural": "bijv: els",
|
||||
"standardization": "Standaardisatie",
|
||||
"standardization-description": "Hoe deze eenheid kan worden weergegeven als een standaardeenheid. Dit maakt conversie per eenheid mogelijk, zoals het samenvoegen van compatibele eenheden in boodschappenlijsten.",
|
||||
"standard-unit": "Standaard eenheid",
|
||||
"standard-quantity": "Standaard hoeveelheid",
|
||||
"unit-conversion": "Eenheid conversie",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "vloeibare ons",
|
||||
"cup": "kop",
|
||||
"ounce": "ons",
|
||||
"pound": "pond",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Vul de database aan met veelvoorkomende labels, gebaseerd op je lokale taal.",
|
||||
@@ -1449,6 +1466,6 @@
|
||||
"invalid-url": "Moet een geldige URL zijn",
|
||||
"no-whitespace": "Geen spaties toegestaan",
|
||||
"min-length": "Moet minimaal {min} tekens bevatten",
|
||||
"max-length": "Must Be At Most {max} Character|Must Be At Most {max} Characters"
|
||||
"max-length": "Moet maximaal {max} tekens bevatten|Moet maximaal {max} tekens bevatten"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Opprett en oppskrift ved å angi navnet. Alle oppskrifter må ha unike navn.",
|
||||
"new-recipe-names-must-be-unique": "Navn på oppskrift må være unike",
|
||||
"scrape-recipe": "Skrap oppskrift",
|
||||
"scrape-recipe-description": "Skrap en oppskrift ved bruk av nettadresse. Oppgi nettadressen til nettstedet du vil skrape, så vil Mealie forsøke å skrape oppskriften fra den siden og legge den til i samlingen din.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Har du mange oppskrifter du ønsker å skrape samtidig?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Prøv masseimportering",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Har du HTML- eller JSON-rådata?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Alle lister",
|
||||
"create-shopping-list": "Opprett handleliste",
|
||||
"from-recipe": "Fra oppskrift",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Listenavn",
|
||||
"new-list": "Ny liste",
|
||||
"quantity": "Antall: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "f.eks: spiseskje",
|
||||
"example-unit-plural": "f.eks: spiseskjeer",
|
||||
"example-unit-abbreviation-singular": "f.eks: ss",
|
||||
"example-unit-abbreviation-plural": "f.eks: ss"
|
||||
"example-unit-abbreviation-plural": "f.eks: ss",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Tilfør typiske etiketter i databasen basert på ditt lokale språk.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Utwórz przepis, podając nazwę. Wszystkie przepisy muszą mieć unikalne nazwy.",
|
||||
"new-recipe-names-must-be-unique": "Nazwa przepisu musi być unikalna",
|
||||
"scrape-recipe": "Scrapuj Przepis",
|
||||
"scrape-recipe-description": "Wczytaj przepis przez URL. Podaj adres URL witryny z przepisem, który chcesz wczytać, a Mealie spróbuje wyodrębnić przepis z tej strony i dodać go do kolekcji.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Masz mnóstwo przepisów, które chcesz zescrapować naraz?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Wypróbuj importer zbiorczy",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Masz dane HTML bądź JSON?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Wszystkie listy",
|
||||
"create-shopping-list": "Utwórz listę zakupów",
|
||||
"from-recipe": "Z przepisu",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Nazwa listy",
|
||||
"new-list": "Nowa lista",
|
||||
"quantity": "Ilość: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "np. Łyżka stołowa",
|
||||
"example-unit-plural": "np. Łyżki stołowe",
|
||||
"example-unit-abbreviation-singular": "na przykład: Łyżka stołowa",
|
||||
"example-unit-abbreviation-plural": "na przykład: Łyżka stołowa"
|
||||
"example-unit-abbreviation-plural": "na przykład: Łyżka stołowa",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Wypełnij bazę zwyczajowymi etykietami dla wybranego języka.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crie uma receita fornecendo o nome. Todas as receitas devem ter nomes exclusivos.",
|
||||
"new-recipe-names-must-be-unique": "Novos nomes de receitas devem ser únicos",
|
||||
"scrape-recipe": "Extrair receita do site",
|
||||
"scrape-recipe-description": "Scrape uma receita por url. Forneça o Url para o site que você deseja scrape, e Mealie tentará raspar a receita desse site e adicioná-la à sua coleção.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Tem muitas receitas a extrair de uma vez?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Tente o importador em massa",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Tem dados HTML ou JSON brutos?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Todas as Listas",
|
||||
"create-shopping-list": "Criar lista de compras",
|
||||
"from-recipe": "Da Receita",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Nome da Lista",
|
||||
"new-list": "Nova lista",
|
||||
"quantity": "Quantidade: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Colher de Sopa",
|
||||
"example-unit-plural": "ex: Colheres de Sopa",
|
||||
"example-unit-abbreviation-singular": "ex: Clsp",
|
||||
"example-unit-abbreviation-plural": "ex: Clssp"
|
||||
"example-unit-abbreviation-plural": "ex: Clssp",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Semente o banco de dados com rótulos comuns baseados no seu idioma local.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crie uma receita fornecendo o nome. Todas as receitas devem ter nomes únicos.",
|
||||
"new-recipe-names-must-be-unique": "Os nomes de receitas devem ser únicos",
|
||||
"scrape-recipe": "Extrair receita (Scrape)",
|
||||
"scrape-recipe-description": "Extrair a receita por URL. Indique o URL da página da qual quer extrair e o Mealie tentará obter a receita dessa página e adicioná-la à sua coleção.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Tem muitas receitas para processar em simultâneo?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Experimente o importador em massa",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Tem dados HTML ou JSON em bruto?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Todas as Listas",
|
||||
"create-shopping-list": "Criar Lista de Compras",
|
||||
"from-recipe": "Da Receita",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Nome da Lista",
|
||||
"new-list": "Nova Lista",
|
||||
"quantity": "Quantidade: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Colher de Sopa",
|
||||
"example-unit-plural": "ex: Colheres de Sopa",
|
||||
"example-unit-abbreviation-singular": "ex: Cdsp",
|
||||
"example-unit-abbreviation-plural": "ex: Cdsps"
|
||||
"example-unit-abbreviation-plural": "ex: Cdsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Adicionar à base de dados rótulos comuns no seu idioma local.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Creează o rețetă furnizând numele. Toate rețetele trebuie să aibă nume unice.",
|
||||
"new-recipe-names-must-be-unique": "Numele rețetei trebuie să fie unic",
|
||||
"scrape-recipe": "Importare rețetă",
|
||||
"scrape-recipe-description": "Importa o rețetă prin url. Oferiți url-ul pentru site-ul pe care doriți să îl importați, și Mealie va încerca să importe rețeta de pe acel site și să o adauge la colecția ta.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Ai mai multe rețete pe care vrei să le imporți simultan?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Încearcă importatorul în bulk",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Ai date de tip HTML sau JSON?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Toate listele",
|
||||
"create-shopping-list": "Creează listă de cumpărături",
|
||||
"from-recipe": "Dintr-o rețetă",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Nume listă",
|
||||
"new-list": "Listă nouă",
|
||||
"quantity": "Cantitate: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Lingură",
|
||||
"example-unit-plural": "ex: Linguri",
|
||||
"example-unit-abbreviation-singular": "ex: Lg",
|
||||
"example-unit-abbreviation-plural": "ex: Lg"
|
||||
"example-unit-abbreviation-plural": "ex: Lg",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Populează baza de date cu unități comune în funcție de limba ta locală.",
|
||||
|
||||
@@ -212,8 +212,8 @@
|
||||
"upload-file": "Загрузить файл",
|
||||
"created-on-date": "Создано: {0}",
|
||||
"unsaved-changes": "У вас есть несохраненные изменения. Вы хотите сохранить их перед выходом?",
|
||||
"discard-changes": "Discard Changes",
|
||||
"discard-changes-description": "You have unsaved changes. Are you sure you want to discard them?",
|
||||
"discard-changes": "Отменить изменения",
|
||||
"discard-changes-description": "Имеются несохраненные изменения. Вы уверены, что хотите отменить их?",
|
||||
"clipboard-copy-failure": "Не удалось скопировать текст.",
|
||||
"confirm-delete-generic-items": "Вы уверены, что хотите удалить следующие элементы?",
|
||||
"organizers": "Органайзеры",
|
||||
@@ -370,8 +370,8 @@
|
||||
"applies-to-all-days": "Применяется к всем дням",
|
||||
"applies-on-days": "Применяется по {0}",
|
||||
"meal-plan-settings": "Настройки плана питания",
|
||||
"add-all-to-list": "Add All to List",
|
||||
"add-day-to-list": "Add Day to List"
|
||||
"add-all-to-list": "Добавить всё в список",
|
||||
"add-day-to-list": "Добавить день в список"
|
||||
},
|
||||
"migration": {
|
||||
"migration-data-removed": "Данные миграции удалены",
|
||||
@@ -449,7 +449,7 @@
|
||||
"upload-a-recipe": "Загрузить рецепт",
|
||||
"upload-individual-zip-file": "Загрузить отдельный .zip файл, экспортированный из другой Mealie.",
|
||||
"url-form-hint": "Скопируйте и вставьте ссылку из вашего любимого сайта рецептов",
|
||||
"copy-and-paste-the-source-url-of-your-data-optional": "Copy and paste the source URL of your data (optional)",
|
||||
"copy-and-paste-the-source-url-of-your-data-optional": "Скопируйте и вставьте исходный ЮРЛ ваших данных (необязательно)",
|
||||
"view-scraped-data": "Просмотр отсканированных данных",
|
||||
"trim-whitespace-description": "Обрезать ведущие и конечные пробелы, а также пустые строки",
|
||||
"trim-prefix-description": "Обрезать первый символ из каждой строки",
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Создайте рецепт, указав имя. Все рецепты должны иметь уникальные имена.",
|
||||
"new-recipe-names-must-be-unique": "Название рецепта должно быть уникальным",
|
||||
"scrape-recipe": "Отсканировать рецепт",
|
||||
"scrape-recipe-description": "Отсканировать рецепт по ссылке. Предоставьте ссылку на страницу, которую вы хотите отсканировать, и Mealie попытается вырезать рецепт с этого сайта и добавить его в свою коллекцию.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Хотите отсканировать несколько рецептов за раз?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Воспользуйтесь массовым импортом",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "У Вас есть данные HTML или JSON?",
|
||||
@@ -644,7 +645,7 @@
|
||||
"scrape-recipe-website-being-blocked": "Сайт заблокирован?",
|
||||
"scrape-recipe-try-importing-raw-html-instead": "Попробуйте импортировать необработанный HTML файл.",
|
||||
"import-original-keywords-as-tags": "Импортировать исходные ключевые слова как теги",
|
||||
"import-original-categories": "Import original categories",
|
||||
"import-original-categories": "Импортировать оригинальные категории",
|
||||
"stay-in-edit-mode": "Остаться в режиме редактирования",
|
||||
"parse-recipe-ingredients-after-import": "Распознавание ингредиентов рецепта после импорта",
|
||||
"import-from-zip": "Импорт из архива",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Все списки",
|
||||
"create-shopping-list": "Создать список покупок",
|
||||
"from-recipe": "Из рецепта",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Название списка",
|
||||
"new-list": "Новый список",
|
||||
"quantity": "Количество: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "пр. Столовая ложка",
|
||||
"example-unit-plural": "пр. Столовых ложек",
|
||||
"example-unit-abbreviation-singular": "пример: ст. л.",
|
||||
"example-unit-abbreviation-plural": "пример: ст. л."
|
||||
"example-unit-abbreviation-plural": "пример: ст. л.",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Дополнить базу данных типичными единицами измерений на основе выбранного языка.",
|
||||
@@ -1170,8 +1187,8 @@
|
||||
"edit-recipe-action": "Редактировать действие рецепта",
|
||||
"action-type": "Тип Действия",
|
||||
"action-types": {
|
||||
"link": "Link",
|
||||
"post": "Post"
|
||||
"link": "Ссылка",
|
||||
"post": "Пост"
|
||||
}
|
||||
},
|
||||
"create-alias": "Создать псевдоним",
|
||||
@@ -1427,8 +1444,8 @@
|
||||
"is-greater-than-or-equal-to": "больше или равно",
|
||||
"is-less-than": "меньше чем",
|
||||
"is-less-than-or-equal-to": "меньше или равно",
|
||||
"is-older-than": "is older than",
|
||||
"is-newer-than": "is newer than"
|
||||
"is-older-than": "старше чем",
|
||||
"is-newer-than": "новее, чем"
|
||||
},
|
||||
"relational-keywords": {
|
||||
"is": "соответствует",
|
||||
@@ -1440,15 +1457,15 @@
|
||||
"is-not-like": "не содержит"
|
||||
},
|
||||
"dates": {
|
||||
"days-ago": "days ago|day ago|days ago"
|
||||
"days-ago": "дней назад|день назад|дней назад"
|
||||
}
|
||||
},
|
||||
"validators": {
|
||||
"required": "This Field is Required",
|
||||
"invalid-email": "Email Must Be Valid",
|
||||
"invalid-url": "Must Be A Valid URL",
|
||||
"required": "Это поле обязательно для заполнения",
|
||||
"invalid-email": "Адрес электронной почты должен быть действительным",
|
||||
"invalid-url": "Должен быть действительным ЮРЛ",
|
||||
"no-whitespace": "Без пробелов",
|
||||
"min-length": "Must Be At Least {min} Characters",
|
||||
"max-length": "Must Be At Most {max} Character|Must Be At Most {max} Characters"
|
||||
"min-length": "Должно быть минимум {min} символов",
|
||||
"max-length": "Должно быть как минимум {max} знак|Должно быть больше {max} знаков"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Vytvoriť recept zadaním názvu. Všetky recepty musia mať jedinečné názvy.",
|
||||
"new-recipe-names-must-be-unique": "Názvy nových receptov musia byť jedinečné",
|
||||
"scrape-recipe": "Scrapovať recept",
|
||||
"scrape-recipe-description": "Stiahne recept zo zadanej adresy URL. Zadajte URL adresu stránky, z ktorej chcete stiahnuť recept, a Mealie sa pokúsi recept stiahnuť a vložiť do vašej zbierky.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Máte množstvo receptov, ktoré by ste chceli naraz zoscrapovať?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Vyskúšajte hromadný importér",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Máte surové údaje HTML alebo JSON?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Všetky zoznamy",
|
||||
"create-shopping-list": "Vytvoriť nákupný zoznam",
|
||||
"from-recipe": "Podľa receptu",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Názov zoznamu",
|
||||
"new-list": "Nový zoznam",
|
||||
"quantity": "Množstvo: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "napr.: polievková lyžica",
|
||||
"example-unit-plural": "napr.: polievkové lyžice",
|
||||
"example-unit-abbreviation-singular": "napr.: PL",
|
||||
"example-unit-abbreviation-plural": "napr.: PL"
|
||||
"example-unit-abbreviation-plural": "napr.: PL",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Naplniť databázu z bežnými štítkami podla vášho lokálneho jazyka.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Ustvari recept z izbranim imenom. Vsi recepti morajo imeti unikatna imena.",
|
||||
"new-recipe-names-must-be-unique": "Ime recepta mora biti unikatno",
|
||||
"scrape-recipe": "Postrgaj recept",
|
||||
"scrape-recipe-description": "Postrgaj recept preko povezave. Priskrbi povezavo do strani, ki jo želiš postrgati in Mealie bo poskusil uvoziti recept iz strani in ga dodati v tvojo zbirko.",
|
||||
"scrape-recipe-description": "Strganje recepta po URL-ju. Navedite URL spletnega mesta, s katerega želite strgati, in Mealie bo poskušal strgati recept s tega spletnega mesta in ga dodati v vašo zbirko.",
|
||||
"scrape-recipe-description-transcription": "Lahko pa navedete tudi URL videoposnetka in Mealie ga bo poskušal prepisati v recept.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Imaš veliko receptov, ki jih želiš naenkrat postrgati s spleta?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Preizkusi masovni uvoz",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Imaš surove HTML ali JSON podatke?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Vsi seznami",
|
||||
"create-shopping-list": "Ustvarite nakupovalni seznam",
|
||||
"from-recipe": "Iz recepta",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Ime seznama",
|
||||
"new-list": "Nov seznam",
|
||||
"quantity": "Količina: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "npr: tablespoon",
|
||||
"example-unit-plural": "npr: tablespoons",
|
||||
"example-unit-abbreviation-singular": "npr: tbsp",
|
||||
"example-unit-abbreviation-plural": "npr: tbsps"
|
||||
"example-unit-abbreviation-plural": "npr: tbsps",
|
||||
"standardization": "Standardizacija",
|
||||
"standardization-description": "Kako je mogoče to enoto predstaviti kot standardno enoto. To omogoča funkcije pretvorbe enot, kot je združevanje združljivih enot na nakupovalnih seznamih.",
|
||||
"standard-unit": "Standardna enota",
|
||||
"standard-quantity": "Standardna količina",
|
||||
"unit-conversion": "Pretvorba enot",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "tekoča unča",
|
||||
"cup": "skodelica",
|
||||
"ounce": "unča",
|
||||
"pound": "funt",
|
||||
"milliliter": "mililiter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Napolni podatkovno bazi s običajnimi oznakami, glede na vaš lokalni jezik.",
|
||||
|
||||
@@ -637,6 +637,7 @@
|
||||
"new-recipe-names-must-be-unique": "New recipe names must be unique",
|
||||
"scrape-recipe": "Scrape Recipe",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Сви спискови",
|
||||
"create-shopping-list": "Направи списак за куповину",
|
||||
"from-recipe": "From Recipe",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "List Name",
|
||||
"new-list": "Нови списак",
|
||||
"quantity": "Quantity: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Tablespoon",
|
||||
"example-unit-plural": "ex: Tablespoons",
|
||||
"example-unit-abbreviation-singular": "ex: Tbsp",
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Seed the database with common labels based on your local language.",
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes": "Tillåt användare utanför din grupp att se dina recept",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Om aktiverad kan du dela en publik länk för specifika recept utan att användaren behöver auktorisera sig. Om avaktiverad kan du bara dela med användare i din grupp eller med en systemskapad länk",
|
||||
"show-nutrition-information": "Visa näringsinnehåll",
|
||||
"show-nutrition-information-description": "Om aktiverad kommer näringsvärde att visas vid receptet om tillgängligt.. Om det inte finns något näringsvärde kommer den informationen inte att visas",
|
||||
"show-nutrition-information-description": "Om aktiverad kommer näringsvärde att visas vid receptet om tillgängligt. Om det inte finns något näringsvärde kommer den informationen inte att visas",
|
||||
"show-recipe-assets": "Visa receptinnehåll",
|
||||
"show-recipe-assets-description": "När aktiverad kommer receptinnehåll att visas vid receptet, om tillgängligt",
|
||||
"default-to-landscape-view": "Sätt liggande vy som standard",
|
||||
@@ -292,7 +292,7 @@
|
||||
"household-group": "Hushållsgrupp",
|
||||
"household-management": "Hantering av hushåll",
|
||||
"manage-households": "Hantera hushåll",
|
||||
"admin-household-management": "Hushållsstyrning för admin",
|
||||
"admin-household-management": "Hushållsstyrning för administratör",
|
||||
"admin-household-management-text": "Ändringar i detta hushåll kommer att verkställas omedelbart.",
|
||||
"household-id-value": "Hushållets Id: {0}",
|
||||
"private-household": "Privat hushåll",
|
||||
@@ -334,7 +334,7 @@
|
||||
"numberOfDays-hint": "Antal dagar vid sidhämtning",
|
||||
"numberOfDays-label": "Förvalda dagar",
|
||||
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Endast recept med dessa kategorier kommer att användas i måltidsplaner",
|
||||
"planner": "Planeringkalender",
|
||||
"planner": "Planeringskalender",
|
||||
"quick-week": "Snabb vecka",
|
||||
"side": "Sidorätt",
|
||||
"sides": "Sidorätter",
|
||||
@@ -386,7 +386,7 @@
|
||||
"title": "Chowdown"
|
||||
},
|
||||
"nextcloud": {
|
||||
"description": "Importera data från Nextcloud Cookbook instans",
|
||||
"description": "Importera data från en Nextcloud Cookbook instans",
|
||||
"description-long": "Nextcloud-recept kan importeras från en zip-fil som innehåller datan som lagras i Nextcloud. Se exempel på mappstrukturen nedan för att säkerställa att dina recept kan importeras.",
|
||||
"title": "Nextcloud Cookbook"
|
||||
},
|
||||
@@ -538,7 +538,7 @@
|
||||
"save-recipe-before-use": "Spara recept innan användning",
|
||||
"section-title": "Avdelningens rubrik",
|
||||
"servings": "Portioner",
|
||||
"serves-amount": "{amount} portioner",
|
||||
"serves-amount": "{amount} Portioner",
|
||||
"share-recipe-message": "Jag vill dela mitt {0} recept med dig.",
|
||||
"show-nutrition-values": "Visa näringsvärde",
|
||||
"sodium-content": "Natrium",
|
||||
@@ -567,8 +567,8 @@
|
||||
"failed-to-add-recipe-to-mealplan": "Det gick inte att lägga till recept i måltidsplanen",
|
||||
"failed-to-add-to-list": "Misslyckades att lägga till listan",
|
||||
"yield": "Ger",
|
||||
"yields-amount-with-text": "Ger {amount} {text}",
|
||||
"yield-text": "Vad som ges",
|
||||
"yields-amount-with-text": "Blir {amount} {text}",
|
||||
"yield-text": "Mängdenhet",
|
||||
"quantity": "Antal",
|
||||
"choose-unit": "Välj enhet",
|
||||
"press-enter-to-create": "Tryck Enter för att skapa",
|
||||
@@ -637,6 +637,7 @@
|
||||
"new-recipe-names-must-be-unique": "Nya receptnamn måste vara unika",
|
||||
"scrape-recipe": "Skrapa Recept",
|
||||
"scrape-recipe-description": "Hämta ett recept med webbadress. Ange URL:en för webbplatsen du vill hämta, och Mealie kommer att försöka hämta receptet från den webbplatsen och lägga till det i din samling.",
|
||||
"scrape-recipe-description-transcription": "Du kan också ge URL: en till en video och Mealie kommer att försöka transkribera det till ett recept.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Har du många recept som du vill skrapa på en gång?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Testa massimportören",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Har rå HTML eller JSON-data?",
|
||||
@@ -669,9 +670,9 @@
|
||||
"recipe-debugger-use-openai-description": "Använd OpenAI för att tolka resultaten istället för att förlita sig på skrapans bibliotek. När du skapar ett recept via URL görs detta automatiskt om skrapbiblioteket misslyckas, men du kan testa det manuellt här.",
|
||||
"debug": "Felsök",
|
||||
"tree-view": "Trädvy",
|
||||
"recipe-servings": "Recept portioner",
|
||||
"recipe-yield": "Recept ger",
|
||||
"recipe-yield-text": "Recept ger",
|
||||
"recipe-servings": "Portioner",
|
||||
"recipe-yield": "Blir",
|
||||
"recipe-yield-text": "Beskrivning",
|
||||
"unit": "Måttenhet",
|
||||
"upload-image": "Ladda upp bild",
|
||||
"screen-awake": "Håll skärmen vaken",
|
||||
@@ -684,7 +685,7 @@
|
||||
"alerts-explainer": "Varning kommer visas om en matchande ingrediens eller enhet hittas, men inte existerar i databasen.",
|
||||
"select-parser": "Välj tolk",
|
||||
"natural-language-processor": "Naturlig språkbehandlare",
|
||||
"brute-parser": "Brute Parser",
|
||||
"brute-parser": "Brute parser",
|
||||
"openai-parser": "OpenAI Parser",
|
||||
"parse-all": "Analysera allt",
|
||||
"no-unit": "Ingen enhet",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Visa alla listor",
|
||||
"create-shopping-list": "Skapa inköpslista",
|
||||
"from-recipe": "Från recept",
|
||||
"ingredient-of-recipe": "Ingrediens i {recipe}",
|
||||
"list-name": "Listnamn",
|
||||
"new-list": "Ny lista",
|
||||
"quantity": "Antal {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Matsked",
|
||||
"example-unit-plural": "ex: matskedar",
|
||||
"example-unit-abbreviation-singular": "ex: msk",
|
||||
"example-unit-abbreviation-plural": "ex: msk"
|
||||
"example-unit-abbreviation-plural": "ex: msk",
|
||||
"standardization": "Standardisering",
|
||||
"standardization-description": "Hur denna enhet kan representeras som en standardenhet. Detta möjliggör konvertering av enheter såsom sammanslagning av kompatibla enheter i inköpslistor.",
|
||||
"standard-unit": "Standardenhet",
|
||||
"standard-quantity": "Standardantal",
|
||||
"unit-conversion": "Enhetsomvandling",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "kopp",
|
||||
"ounce": "ounce",
|
||||
"pound": "pund",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilo"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Fyll databasen med vanliga etiketter baserade på ditt språk.",
|
||||
@@ -1170,7 +1187,7 @@
|
||||
"edit-recipe-action": "Redigera receptåtgärd",
|
||||
"action-type": "Åtgärdstyp",
|
||||
"action-types": {
|
||||
"link": "Link",
|
||||
"link": "Länk",
|
||||
"post": "Post"
|
||||
}
|
||||
},
|
||||
@@ -1427,8 +1444,8 @@
|
||||
"is-greater-than-or-equal-to": "är större än eller lika med",
|
||||
"is-less-than": "är mindre än",
|
||||
"is-less-than-or-equal-to": "är mindre eller lika med",
|
||||
"is-older-than": "is older than",
|
||||
"is-newer-than": "is newer than"
|
||||
"is-older-than": "är äldre än",
|
||||
"is-newer-than": "är nyare än"
|
||||
},
|
||||
"relational-keywords": {
|
||||
"is": "är",
|
||||
@@ -1440,7 +1457,7 @@
|
||||
"is-not-like": "är inte som"
|
||||
},
|
||||
"dates": {
|
||||
"days-ago": "days ago|day ago|days ago"
|
||||
"days-ago": "dagar sedan|dagar sedan|dagar sedan"
|
||||
}
|
||||
},
|
||||
"validators": {
|
||||
@@ -1449,6 +1466,6 @@
|
||||
"invalid-url": "Måste var en giltig länk",
|
||||
"no-whitespace": "Ingen blanksteg tillåten",
|
||||
"min-length": "Måste vara minst {min} tecken",
|
||||
"max-length": "Must Be At Most {max} Character|Must Be At Most {max} Characters"
|
||||
"max-length": "Måste Vara Som Mest {max} Tecken|Måste Vara Som Mest {max} Tecken"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Oluşturmak için tarifi adlandırın. Tüm tariflerin benzersiz adları olmalı.",
|
||||
"new-recipe-names-must-be-unique": "Yeni tarif ismi benzersiz olmalı",
|
||||
"scrape-recipe": "Tarifi Kazı",
|
||||
"scrape-recipe-description": "Url'den bir tarif kazıyın. Kazımak istediğiniz sitenin url'sini verin ve Mealie, tarifi o siteden alıp koleksiyonunuza eklemeye çalışacaktır.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Aynı anda kazımak istediğiniz birçok tarifiniz mi var?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Toplu ithalatçıyı deneyin",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Ham HTML veya JSON verileriniz mi var?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Tüm Listeler",
|
||||
"create-shopping-list": "Alışveriş Listesi Oluştur",
|
||||
"from-recipe": "Tariften",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Liste Adı",
|
||||
"new-list": "Yeni Liste",
|
||||
"quantity": "Miktar: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "örn: Yemek kaşığı",
|
||||
"example-unit-plural": "örn: Yemek kaşığı",
|
||||
"example-unit-abbreviation-singular": "örn: Yk",
|
||||
"example-unit-abbreviation-plural": "örn: Yk"
|
||||
"example-unit-abbreviation-plural": "örn: Yk",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Veritabanını yerel dilinize göre yaygın etiketlerle tohumlayın.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Створіть рецепт, надавши назву. Усі рецепти повинні мати унікальні назви.",
|
||||
"new-recipe-names-must-be-unique": "Назви нового рецепту має бути унікальна",
|
||||
"scrape-recipe": "Розпізнати рецепт",
|
||||
"scrape-recipe-description": "Розпізнати рецепт за посиланням. Вкажіть посилання на рецепт який ви хочете розпізнати й Mealie спробує розпізнати його і додати в вашу колекцію.",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Багато рецептів, які ви хочете розпізнати відразу?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Спробуйте масовий розпізнавач",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Маєте необроблені дані HTML або JSON?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "Всі списки",
|
||||
"create-shopping-list": "Сторити список покупок",
|
||||
"from-recipe": "З рецепту",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "Назва списку",
|
||||
"new-list": "Новий список",
|
||||
"quantity": "Кількість: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "приклад: Столова ложка",
|
||||
"example-unit-plural": "приклад: Столові ложки",
|
||||
"example-unit-abbreviation-singular": "приклад: ст. л",
|
||||
"example-unit-abbreviation-plural": "приклад: ст. л"
|
||||
"example-unit-abbreviation-plural": "приклад: ст. л",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Заповнити базу даних розповсюдженими категоріями що відповідають мові.",
|
||||
|
||||
@@ -637,6 +637,7 @@
|
||||
"new-recipe-names-must-be-unique": "New recipe names must be unique",
|
||||
"scrape-recipe": "Scrape Recipe",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "All Lists",
|
||||
"create-shopping-list": "Create Shopping List",
|
||||
"from-recipe": "From Recipe",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "List Name",
|
||||
"new-list": "New List",
|
||||
"quantity": "Quantity: {0}",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "ex: Tablespoon",
|
||||
"example-unit-plural": "ex: Tablespoons",
|
||||
"example-unit-abbreviation-singular": "ex: Tbsp",
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Seed the database with common labels based on your local language.",
|
||||
|
||||
@@ -636,7 +636,8 @@
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "通过名称创建食谱,食谱不可重名。",
|
||||
"new-recipe-names-must-be-unique": "新食谱名必须唯一",
|
||||
"scrape-recipe": "刮削食谱",
|
||||
"scrape-recipe-description": "通过URL刮削食谱。提供你想要刮削网址的URL,Mealie会尝试从该网址刮削食谱并添加到你的收藏中。",
|
||||
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
|
||||
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
|
||||
"scrape-recipe-have-a-lot-of-recipes": "你想要一次刮削多个食谱吗?",
|
||||
"scrape-recipe-suggest-bulk-importer": "试试批量导入器",
|
||||
"scrape-recipe-have-raw-html-or-json-data": "有原始 HTML 或 JSON 数据?",
|
||||
@@ -903,6 +904,7 @@
|
||||
"all-lists": "所有购物清单",
|
||||
"create-shopping-list": "创建购物清单",
|
||||
"from-recipe": "从食谱创建",
|
||||
"ingredient-of-recipe": "Ingredient of {recipe}",
|
||||
"list-name": "购物清单名称",
|
||||
"new-list": "创建购物清单",
|
||||
"quantity": "数量: {0} 个",
|
||||
@@ -1134,7 +1136,22 @@
|
||||
"example-unit-singular": "例如:茶匙",
|
||||
"example-unit-plural": "中文用户可忽略",
|
||||
"example-unit-abbreviation-singular": "例如:勺",
|
||||
"example-unit-abbreviation-plural": "中文用户可忽略"
|
||||
"example-unit-abbreviation-plural": "中文用户可忽略",
|
||||
"standardization": "Standardization",
|
||||
"standardization-description": "How this unit can be represented as a standard unit. This enables unit conversion features such as merging compatible units in shopping lists.",
|
||||
"standard-unit": "Standard Unit",
|
||||
"standard-quantity": "Standard Quantity",
|
||||
"unit-conversion": "Unit Conversion",
|
||||
"standard-unit-labels": {
|
||||
"fluid-ounce": "fluid ounce",
|
||||
"cup": "cup",
|
||||
"ounce": "ounce",
|
||||
"pound": "pound",
|
||||
"milliliter": "milliliter",
|
||||
"liter": "liter",
|
||||
"gram": "gram",
|
||||
"kilogram": "kilogram"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "基于你的本地语言,将一些常见标注添加到数据库。",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -18,6 +18,7 @@ export interface AdminAboutInfo {
|
||||
oidcProviderName: string;
|
||||
enableOpenai: boolean;
|
||||
enableOpenaiImageServices: boolean;
|
||||
enableOpenaiTranscriptionServices: boolean;
|
||||
tokenTime: number;
|
||||
versionLatest: string;
|
||||
apiPort: number;
|
||||
@@ -51,6 +52,7 @@ export interface AppInfo {
|
||||
oidcProviderName: string;
|
||||
enableOpenai: boolean;
|
||||
enableOpenaiImageServices: boolean;
|
||||
enableOpenaiTranscriptionServices: boolean;
|
||||
tokenTime: number;
|
||||
}
|
||||
export interface AppStartupInfo {
|
||||
|
||||
@@ -329,6 +329,8 @@ export interface IngredientUnit {
|
||||
pluralAbbreviation?: string | null;
|
||||
useAbbreviation?: boolean;
|
||||
aliases?: IngredientUnitAlias[];
|
||||
standardQuantity?: number | null;
|
||||
standardUnit?: string | null;
|
||||
createdAt?: string | null;
|
||||
updatedAt?: string | null;
|
||||
}
|
||||
@@ -348,6 +350,8 @@ export interface CreateIngredientUnit {
|
||||
pluralAbbreviation?: string | null;
|
||||
useAbbreviation?: boolean;
|
||||
aliases?: CreateIngredientUnitAlias[];
|
||||
standardQuantity?: number | null;
|
||||
standardUnit?: string | null;
|
||||
}
|
||||
export interface CreateIngredientUnitAlias {
|
||||
name: string;
|
||||
|
||||
@@ -41,6 +41,12 @@ export enum Organizer {
|
||||
User = "users",
|
||||
}
|
||||
|
||||
export enum SSEDataEventStatus {
|
||||
Progress = "progress",
|
||||
Done = "done",
|
||||
Error = "error",
|
||||
}
|
||||
|
||||
export type PlaceholderKeyword = "$NOW";
|
||||
export type RelationalKeyword = "IS" | "IS NOT" | "IN" | "NOT IN" | "CONTAINS ALL" | "LIKE" | "NOT LIKE";
|
||||
export type LogicalOperator = "AND" | "OR";
|
||||
@@ -58,3 +64,13 @@ export interface QueryFilterJSONPart {
|
||||
relationalOperator?: RelationalKeyword | RelationalOperator | null;
|
||||
value?: string | string[] | null;
|
||||
}
|
||||
|
||||
export type StandardizedUnitType
|
||||
= | "fluid_ounce"
|
||||
| "cup"
|
||||
| "ounce"
|
||||
| "pound"
|
||||
| "milliliter"
|
||||
| "liter"
|
||||
| "gram"
|
||||
| "kilogram";
|
||||
|
||||
@@ -85,6 +85,8 @@ export interface CreateIngredientUnit {
|
||||
pluralAbbreviation?: string | null;
|
||||
useAbbreviation?: boolean;
|
||||
aliases?: CreateIngredientUnitAlias[];
|
||||
standardQuantity?: number | null;
|
||||
standardUnit?: string | null;
|
||||
}
|
||||
export interface CreateIngredientUnitAlias {
|
||||
name: string;
|
||||
@@ -174,6 +176,8 @@ export interface IngredientUnit {
|
||||
pluralAbbreviation?: string | null;
|
||||
useAbbreviation?: boolean;
|
||||
aliases?: IngredientUnitAlias[];
|
||||
standardQuantity?: number | null;
|
||||
standardUnit?: string | null;
|
||||
createdAt?: string | null;
|
||||
updatedAt?: string | null;
|
||||
}
|
||||
@@ -498,6 +502,8 @@ export interface SaveIngredientUnit {
|
||||
pluralAbbreviation?: string | null;
|
||||
useAbbreviation?: boolean;
|
||||
aliases?: CreateIngredientUnitAlias[];
|
||||
standardQuantity?: number | null;
|
||||
standardUnit?: string | null;
|
||||
groupId: string;
|
||||
}
|
||||
export interface ScrapeRecipe {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* tslint:disable */
|
||||
|
||||
/* eslint-disable */
|
||||
/**
|
||||
/* This file was automatically generated from pydantic models by running pydantic2ts.
|
||||
/* Do not modify it by hand - just update the pydantic models and then re-run the script
|
||||
@@ -40,6 +40,13 @@ export interface RequestQuery {
|
||||
queryFilter?: string | null;
|
||||
paginationSeed?: string | null;
|
||||
}
|
||||
export interface SSEDataEventBase {}
|
||||
export interface SSEDataEventDone {
|
||||
slug: string;
|
||||
}
|
||||
export interface SSEDataEventMessage {
|
||||
message: string;
|
||||
}
|
||||
export interface SuccessResponse {
|
||||
message: string;
|
||||
error?: boolean;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { SSE } from "sse.js";
|
||||
import type { SSEvent } from "sse.js";
|
||||
import { BaseCRUDAPI } from "../../base/base-clients";
|
||||
import { route } from "../../base";
|
||||
import { CommentsApi } from "./recipe-comments";
|
||||
@@ -16,7 +18,9 @@ import type {
|
||||
RecipeTimelineEventOut,
|
||||
RecipeTimelineEventUpdate,
|
||||
} from "~/lib/api/types/recipe";
|
||||
import type { ApiRequestInstance, PaginationData } from "~/lib/api/types/non-generated";
|
||||
import type { SSEDataEventDone, SSEDataEventMessage } from "~/lib/api/types/response";
|
||||
import type { ApiRequestInstance, PaginationData, RequestResponse } from "~/lib/api/types/non-generated";
|
||||
import { SSEDataEventStatus } from "~/lib/api/types/non-generated";
|
||||
|
||||
export type Parser = "nlp" | "brute" | "openai";
|
||||
|
||||
@@ -34,11 +38,11 @@ const routes = {
|
||||
recipesBase: `${prefix}/recipes`,
|
||||
recipesSuggestions: `${prefix}/recipes/suggestions`,
|
||||
recipesTestScrapeUrl: `${prefix}/recipes/test-scrape-url`,
|
||||
recipesCreateUrl: `${prefix}/recipes/create/url`,
|
||||
recipesCreateUrl: `${prefix}/recipes/create/url/stream`,
|
||||
recipesCreateUrlBulk: `${prefix}/recipes/create/url/bulk`,
|
||||
recipesCreateFromZip: `${prefix}/recipes/create/zip`,
|
||||
recipesCreateFromImage: `${prefix}/recipes/create/image`,
|
||||
recipesCreateFromHtmlOrJson: `${prefix}/recipes/create/html-or-json`,
|
||||
recipesCreateFromHtmlOrJson: `${prefix}/recipes/create/html-or-json/stream`,
|
||||
recipesCategory: `${prefix}/recipes/category`,
|
||||
recipesParseIngredient: `${prefix}/parser/ingredient`,
|
||||
recipesParseIngredients: `${prefix}/parser/ingredients`,
|
||||
@@ -146,12 +150,65 @@ export class RecipeAPI extends BaseCRUDAPI<CreateRecipe, Recipe, Recipe> {
|
||||
return await this.requests.post<Recipe | null>(routes.recipesTestScrapeUrl, { url, useOpenAI });
|
||||
}
|
||||
|
||||
async createOneByHtmlOrJson(data: string, includeTags: boolean, includeCategories: boolean, url: string | null = null) {
|
||||
return await this.requests.post<string>(routes.recipesCreateFromHtmlOrJson, { data, includeTags, includeCategories, url });
|
||||
private streamRecipeCreate(streamRoute: string, payload: object, onProgress?: (message: string) => void): Promise<RequestResponse<string>> {
|
||||
return new Promise((resolve) => {
|
||||
const { token } = useMealieAuth();
|
||||
|
||||
const sse = new SSE(streamRoute, {
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
...(token.value ? { Authorization: `Bearer ${token.value}` } : {}),
|
||||
},
|
||||
payload: JSON.stringify(payload),
|
||||
withCredentials: true,
|
||||
autoReconnect: false,
|
||||
});
|
||||
|
||||
if (onProgress) {
|
||||
sse.addEventListener(SSEDataEventStatus.Progress, (e: SSEvent) => {
|
||||
const { message } = JSON.parse(e.data) as SSEDataEventMessage;
|
||||
onProgress(message);
|
||||
});
|
||||
}
|
||||
|
||||
sse.addEventListener(SSEDataEventStatus.Done, (e: SSEvent) => {
|
||||
const { slug } = JSON.parse(e.data) as SSEDataEventDone;
|
||||
sse.close();
|
||||
resolve({ response: { status: 201, data: slug } as any, data: slug, error: null });
|
||||
});
|
||||
|
||||
sse.addEventListener(SSEDataEventStatus.Error, (e: SSEvent) => {
|
||||
try {
|
||||
const { message } = JSON.parse(e.data) as SSEDataEventMessage;
|
||||
sse.close();
|
||||
resolve({ response: null, data: null, error: new Error(message) });
|
||||
}
|
||||
catch {
|
||||
// Not a backend error payload (e.g. XHR connection-close event); ignore
|
||||
}
|
||||
});
|
||||
|
||||
sse.stream();
|
||||
});
|
||||
}
|
||||
|
||||
async createOneByUrl(url: string, includeTags: boolean, includeCategories: boolean) {
|
||||
return await this.requests.post<string>(routes.recipesCreateUrl, { url, includeTags, includeCategories });
|
||||
async createOneByHtmlOrJson(
|
||||
data: string,
|
||||
includeTags: boolean,
|
||||
includeCategories: boolean,
|
||||
url: string | null = null,
|
||||
onProgress?: (message: string) => void,
|
||||
): Promise<RequestResponse<string>> {
|
||||
return this.streamRecipeCreate(routes.recipesCreateFromHtmlOrJson, { data, includeTags, includeCategories, url }, onProgress);
|
||||
}
|
||||
|
||||
async createOneByUrl(
|
||||
url: string,
|
||||
includeTags: boolean,
|
||||
includeCategories: boolean,
|
||||
onProgress?: (message: string) => void,
|
||||
): Promise<RequestResponse<string>> {
|
||||
return this.streamRecipeCreate(routes.recipesCreateUrl, { url, includeTags, includeCategories }, onProgress);
|
||||
}
|
||||
|
||||
async createManyByUrl(payload: CreateRecipeByUrlBulk) {
|
||||
|
||||
@@ -221,7 +221,7 @@ export default defineNuxtConfig({
|
||||
navigateFallback: "/",
|
||||
navigateFallbackAllowlist: [/^(?!\/api|\/docs)/],
|
||||
globPatterns: ["**/*.{js,css,html,png,svg,ico}"],
|
||||
globIgnores: ["404.html", "200.html"],
|
||||
globIgnores: ["404.html", "200.html", "index.html"],
|
||||
cleanupOutdatedCaches: true,
|
||||
skipWaiting: true,
|
||||
clientsClaim: true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "mealie",
|
||||
"version": "3.12.0",
|
||||
"version": "3.13.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "nuxt dev",
|
||||
@@ -30,6 +30,7 @@
|
||||
"json-editor-vue": "^0.18.1",
|
||||
"marked": "^15.0.12",
|
||||
"nuxt": "^3.19.2",
|
||||
"sse.js": "^2.8.0",
|
||||
"vite": "^7.0.0",
|
||||
"vue-advanced-cropper": "^2.8.9",
|
||||
"vue-draggable-plus": "^0.6.0",
|
||||
|
||||
@@ -83,14 +83,20 @@
|
||||
/>
|
||||
</v-card-text>
|
||||
<v-card-actions class="justify-center">
|
||||
<div style="width: 250px">
|
||||
<BaseButton
|
||||
:disabled="!newRecipeData"
|
||||
rounded
|
||||
block
|
||||
type="submit"
|
||||
:loading="loading"
|
||||
/>
|
||||
<div style="width: 100%" class="text-center">
|
||||
<div style="width: 250px; margin: 0 auto">
|
||||
<BaseButton
|
||||
:disabled="!newRecipeData"
|
||||
rounded
|
||||
block
|
||||
type="submit"
|
||||
:loading="loading"
|
||||
/>
|
||||
</div>
|
||||
<v-card-text class="py-2">
|
||||
<!-- render to maintain layout -->
|
||||
{{ createStatus }}
|
||||
</v-card-text>
|
||||
</div>
|
||||
</v-card-actions>
|
||||
</div>
|
||||
@@ -167,6 +173,7 @@ export default defineNuxtComponent({
|
||||
}
|
||||
handleIsEditJson();
|
||||
|
||||
const createStatus = ref<string | null>(null);
|
||||
async function createFromHtmlOrJson(htmlOrJsonData: string | object | null, importKeywordsAsTags: boolean, importCategories: boolean, url: string | null = null) {
|
||||
if (!htmlOrJsonData) {
|
||||
return;
|
||||
@@ -186,7 +193,14 @@ export default defineNuxtComponent({
|
||||
}
|
||||
|
||||
state.loading = true;
|
||||
const { response } = await api.recipes.createOneByHtmlOrJson(dataString, importKeywordsAsTags, importCategories, url);
|
||||
const { response } = await api.recipes.createOneByHtmlOrJson(
|
||||
dataString,
|
||||
importKeywordsAsTags,
|
||||
importCategories,
|
||||
url,
|
||||
(message: string) => createStatus.value = message,
|
||||
);
|
||||
createStatus.value = null;
|
||||
handleResponse(response, importKeywordsAsTags);
|
||||
}
|
||||
|
||||
@@ -199,6 +213,7 @@ export default defineNuxtComponent({
|
||||
newRecipeData,
|
||||
newRecipeUrl,
|
||||
handleIsEditJson,
|
||||
createStatus,
|
||||
createFromHtmlOrJson,
|
||||
...toRefs(state),
|
||||
validators,
|
||||
|
||||
@@ -9,14 +9,22 @@
|
||||
{{ $t('recipe.scrape-recipe') }}
|
||||
</v-card-title>
|
||||
<v-card-text>
|
||||
<p>{{ $t('recipe.scrape-recipe-description') }}</p>
|
||||
<p>
|
||||
{{ $t('recipe.scrape-recipe-have-a-lot-of-recipes') }}
|
||||
<router-link :to="bulkImporterTarget">{{ $t('recipe.scrape-recipe-suggest-bulk-importer') }}</router-link>.
|
||||
<br>
|
||||
{{ $t('recipe.scrape-recipe-have-raw-html-or-json-data') }}
|
||||
<router-link :to="htmlOrJsonImporterTarget">{{ $t('recipe.scrape-recipe-you-can-import-from-raw-data-directly') }}</router-link>.
|
||||
</p>
|
||||
<v-card-text class="pa-0">
|
||||
<p>{{ $t('recipe.scrape-recipe-description') }}</p>
|
||||
<p v-if="$appInfo.enableOpenaiTranscriptionServices">
|
||||
{{ $t('recipe.scrape-recipe-description-transcription') }}
|
||||
</p>
|
||||
</v-card-text>
|
||||
<v-card-text class="px-0">
|
||||
<p>
|
||||
{{ $t('recipe.scrape-recipe-have-a-lot-of-recipes') }}
|
||||
<router-link :to="bulkImporterTarget">{{ $t('recipe.scrape-recipe-suggest-bulk-importer') }}</router-link>.
|
||||
</p>
|
||||
<p>
|
||||
{{ $t('recipe.scrape-recipe-have-raw-html-or-json-data') }}
|
||||
<router-link :to="htmlOrJsonImporterTarget">{{ $t('recipe.scrape-recipe-you-can-import-from-raw-data-directly') }}</router-link>.
|
||||
</p>
|
||||
</v-card-text>
|
||||
<v-text-field
|
||||
v-model="recipeUrl"
|
||||
:label="$t('new-recipe.recipe-url')"
|
||||
@@ -57,14 +65,20 @@
|
||||
:label="$t('recipe.parse-recipe-ingredients-after-import')"
|
||||
/>
|
||||
<v-card-actions class="justify-center">
|
||||
<div style="width: 250px">
|
||||
<BaseButton
|
||||
:disabled="recipeUrl === null"
|
||||
rounded
|
||||
block
|
||||
type="submit"
|
||||
:loading="loading"
|
||||
/>
|
||||
<div style="width: 100%" class="text-center">
|
||||
<div style="width: 250px; margin: 0 auto">
|
||||
<BaseButton
|
||||
:disabled="recipeUrl === null"
|
||||
rounded
|
||||
block
|
||||
type="submit"
|
||||
:loading="loading"
|
||||
/>
|
||||
</div>
|
||||
<v-card-text class="py-2">
|
||||
<!-- render to maintain layout -->
|
||||
{{ createStatus }}
|
||||
</v-card-text>
|
||||
</div>
|
||||
</v-card-actions>
|
||||
</div>
|
||||
@@ -209,7 +223,7 @@ export default defineNuxtComponent({
|
||||
stayInEditMode.value = false;
|
||||
}
|
||||
|
||||
createByUrl(recipeUrl.value, importKeywordsAsTags.value);
|
||||
createByUrl(recipeUrl.value, importKeywordsAsTags.value, false);
|
||||
return;
|
||||
}
|
||||
});
|
||||
@@ -226,6 +240,7 @@ export default defineNuxtComponent({
|
||||
router.replace({ query: undefined }).then(() => router.push(to));
|
||||
});
|
||||
|
||||
const createStatus = ref<string | null>(null);
|
||||
async function createByUrl(url: string | null, importKeywordsAsTags: boolean, importCategories: boolean) {
|
||||
if (url === null) {
|
||||
return;
|
||||
@@ -236,7 +251,13 @@ export default defineNuxtComponent({
|
||||
return;
|
||||
}
|
||||
state.loading = true;
|
||||
const { response } = await api.recipes.createOneByUrl(url, importKeywordsAsTags, importCategories);
|
||||
const { response } = await api.recipes.createOneByUrl(
|
||||
url,
|
||||
importKeywordsAsTags,
|
||||
importCategories,
|
||||
(message: string) => createStatus.value = message,
|
||||
);
|
||||
createStatus.value = null;
|
||||
handleResponse(response, importKeywordsAsTags);
|
||||
}
|
||||
|
||||
@@ -249,6 +270,7 @@ export default defineNuxtComponent({
|
||||
stayInEditMode,
|
||||
parseRecipe,
|
||||
domUrlForm,
|
||||
createStatus,
|
||||
createByUrl,
|
||||
...toRefs(state),
|
||||
validators,
|
||||
|
||||
@@ -158,6 +158,7 @@ import RecipeDataAliasManagerDialog from "~/components/Domain/Recipe/RecipeDataA
|
||||
import { validators } from "~/composables/use-validators";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import type { CreateIngredientUnit, IngredientUnit, IngredientUnitAlias } from "~/lib/api/types/recipe";
|
||||
import type { StandardizedUnitType } from "~/lib/api/types/non-generated";
|
||||
import { useLocales } from "~/composables/use-locales";
|
||||
import { normalizeFilter } from "~/composables/use-utils";
|
||||
import { useUnitStore } from "~/composables/store";
|
||||
@@ -219,6 +220,16 @@ const tableHeaders: TableHeaders[] = [
|
||||
show: true,
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
text: i18n.t("data-pages.units.standard-quantity"),
|
||||
value: "standardQuantity",
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
text: i18n.t("data-pages.units.standard-unit"),
|
||||
value: "standardUnit",
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
text: i18n.t("general.date-added"),
|
||||
value: "createdAt",
|
||||
@@ -231,7 +242,12 @@ const { store: unitStore, actions: unitActions } = useUnitStore();
|
||||
|
||||
// ============================================================
|
||||
// Form items (shared)
|
||||
const formItems: AutoFormItems = [
|
||||
type StandardizedUnitTypeOption = {
|
||||
text: string;
|
||||
value: StandardizedUnitType;
|
||||
};
|
||||
|
||||
const formItems = computed<AutoFormItems>(() => [
|
||||
{
|
||||
cols: 8,
|
||||
label: i18n.t("general.name"),
|
||||
@@ -262,6 +278,59 @@ const formItems: AutoFormItems = [
|
||||
varName: "description",
|
||||
type: fieldTypes.TEXT,
|
||||
},
|
||||
{
|
||||
section: i18n.t("data-pages.units.standardization"),
|
||||
sectionDetails: i18n.t("data-pages.units.standardization-description"),
|
||||
cols: 2,
|
||||
varName: "standardQuantity",
|
||||
type: fieldTypes.NUMBER,
|
||||
numberInputConfig: {
|
||||
min: 0,
|
||||
max: undefined,
|
||||
precision: null,
|
||||
controlVariant: "hidden",
|
||||
},
|
||||
},
|
||||
{
|
||||
cols: 10,
|
||||
varName: "standardUnit",
|
||||
type: fieldTypes.SELECT,
|
||||
selectReturnValue: "value",
|
||||
options: [
|
||||
{
|
||||
text: i18n.t("data-pages.units.standard-unit-labels.fluid-ounce"),
|
||||
value: "fluid_ounce",
|
||||
},
|
||||
{
|
||||
text: i18n.t("data-pages.units.standard-unit-labels.cup"),
|
||||
value: "cup",
|
||||
},
|
||||
{
|
||||
text: i18n.t("data-pages.units.standard-unit-labels.ounce"),
|
||||
value: "ounce",
|
||||
},
|
||||
{
|
||||
text: i18n.t("data-pages.units.standard-unit-labels.pound"),
|
||||
value: "pound",
|
||||
},
|
||||
{
|
||||
text: i18n.t("data-pages.units.standard-unit-labels.milliliter"),
|
||||
value: "milliliter",
|
||||
},
|
||||
{
|
||||
text: i18n.t("data-pages.units.standard-unit-labels.liter"),
|
||||
value: "liter",
|
||||
},
|
||||
{
|
||||
text: i18n.t("data-pages.units.standard-unit-labels.gram"),
|
||||
value: "gram",
|
||||
},
|
||||
{
|
||||
text: i18n.t("data-pages.units.standard-unit-labels.kilogram"),
|
||||
value: "kilogram",
|
||||
},
|
||||
] as StandardizedUnitTypeOption[],
|
||||
},
|
||||
{
|
||||
section: i18n.t("general.settings"),
|
||||
cols: 4,
|
||||
@@ -275,7 +344,7 @@ const formItems: AutoFormItems = [
|
||||
varName: "fraction",
|
||||
type: fieldTypes.BOOLEAN,
|
||||
},
|
||||
];
|
||||
]);
|
||||
|
||||
// ============================================================
|
||||
// Create
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
import type { VForm as VuetifyForm } from "vuetify/components/VForm";
|
||||
|
||||
type FormFieldType = "text" | "textarea" | "list" | "select" | "object" | "boolean" | "color" | "password";
|
||||
type FormFieldType
|
||||
= | "text"
|
||||
| "textarea"
|
||||
| "number"
|
||||
| "list"
|
||||
| "select"
|
||||
| "object"
|
||||
| "boolean"
|
||||
| "color"
|
||||
| "password";
|
||||
|
||||
export type FormValidationRule = (value: any) => boolean | string;
|
||||
|
||||
@@ -9,6 +18,13 @@ export interface FormSelectOption {
|
||||
value?: string;
|
||||
}
|
||||
|
||||
export interface FormFieldNumberInputConfig {
|
||||
min?: number;
|
||||
max?: number;
|
||||
precision?: number;
|
||||
controlVariant?: "split" | "default" | "hidden" | "stacked";
|
||||
}
|
||||
|
||||
export interface FormField {
|
||||
section?: string;
|
||||
sectionDetails?: string;
|
||||
@@ -20,6 +36,7 @@ export interface FormField {
|
||||
rules?: FormValidationRule[];
|
||||
disableUpdate?: boolean;
|
||||
disableCreate?: boolean;
|
||||
numberInputConfig?: FormFieldNumberInputConfig;
|
||||
options?: FormSelectOption[];
|
||||
selectReturnValue?: "text" | "value";
|
||||
}
|
||||
|
||||
@@ -9940,6 +9940,11 @@ srvx@^0.8.9:
|
||||
resolved "https://registry.yarnpkg.com/srvx/-/srvx-0.8.16.tgz#f2582bd747351b5b0a1c65bce8179bae83e8b2a6"
|
||||
integrity sha512-hmcGW4CgroeSmzgF1Ihwgl+Ths0JqAJ7HwjP2X7e3JzY7u4IydLMcdnlqGQiQGUswz+PO9oh/KtCpOISIvs9QQ==
|
||||
|
||||
sse.js@^2.8.0:
|
||||
version "2.8.0"
|
||||
resolved "https://registry.yarnpkg.com/sse.js/-/sse.js-2.8.0.tgz#28e922720ef41f0de3312e33d23183682bec4b1e"
|
||||
integrity sha512-35RyyFYpzzHZgMw9D5GxwADbL6gnntSwW/rKXcuIy1KkYCPjW6oia0moNdNRhs34oVHU1Sjgovj3l7uIEZjrKA==
|
||||
|
||||
stable-hash-x@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/stable-hash-x/-/stable-hash-x-0.2.0.tgz#dfd76bfa5d839a7470125c6a6b3c8b22061793e9"
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
"""add unit standardization fields
|
||||
|
||||
Revision ID: a39c7f1826e3
|
||||
Revises: 1d9a002d7234
|
||||
Create Date: 2026-02-21 17:59:01.161812
|
||||
|
||||
"""
|
||||
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
from alembic import op
|
||||
from mealie.repos.repository_units import RepositoryUnit
|
||||
from mealie.core.root_logger import get_logger
|
||||
from mealie.db.models._model_utils.guid import GUID
|
||||
from mealie.repos.seed.seeders import IngredientUnitsSeeder
|
||||
from mealie.lang.locale_config import LOCALE_CONFIG
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "a39c7f1826e3"
|
||||
down_revision: str | None = "1d9a002d7234"
|
||||
branch_labels: str | tuple[str, ...] | None = None
|
||||
depends_on: str | tuple[str, ...] | None = None
|
||||
|
||||
logger = get_logger()
|
||||
|
||||
|
||||
class SqlAlchemyBase(orm.DeclarativeBase): ...
|
||||
|
||||
|
||||
class IngredientUnitModel(SqlAlchemyBase):
|
||||
__tablename__ = "ingredient_units"
|
||||
|
||||
id: orm.Mapped[GUID] = orm.mapped_column(GUID, primary_key=True, default=GUID.generate)
|
||||
name: orm.Mapped[str | None] = orm.mapped_column(sa.String)
|
||||
plural_name: orm.Mapped[str | None] = orm.mapped_column(sa.String)
|
||||
abbreviation: orm.Mapped[str | None] = orm.mapped_column(sa.String)
|
||||
plural_abbreviation: orm.Mapped[str | None] = orm.mapped_column(sa.String)
|
||||
standard_quantity: orm.Mapped[float | None] = orm.mapped_column(sa.Float)
|
||||
standard_unit: orm.Mapped[str | None] = orm.mapped_column(sa.String)
|
||||
|
||||
|
||||
def populate_standards() -> None:
|
||||
bind = op.get_bind()
|
||||
|
||||
session = orm.Session(bind)
|
||||
|
||||
# We aren't using most of the functionality of this class, so we pass dummy args
|
||||
repo = RepositoryUnit(None, None, None, None, group_id=None) # type: ignore
|
||||
|
||||
stmt = sa.select(IngredientUnitModel)
|
||||
units = session.execute(stmt).scalars().all()
|
||||
if not units:
|
||||
return
|
||||
|
||||
# Manually build repo._standardized_unit_map with all locales
|
||||
repo._standardized_unit_map = {}
|
||||
for locale in LOCALE_CONFIG:
|
||||
locale_file = IngredientUnitsSeeder.get_file(locale)
|
||||
for unit_key, unit in IngredientUnitsSeeder.load_file(locale_file).items():
|
||||
for prop in ["name", "plural_name", "abbreviation"]:
|
||||
val = unit.get(prop)
|
||||
if val and isinstance(val, str):
|
||||
repo._standardized_unit_map[val.strip().lower()] = unit_key
|
||||
|
||||
for unit in units:
|
||||
unit_data = {
|
||||
"name": unit.name,
|
||||
"plural_name": unit.plural_name,
|
||||
"abbreviation": unit.abbreviation,
|
||||
"plural_abbreviation": unit.plural_abbreviation,
|
||||
}
|
||||
|
||||
standardized_data = repo._add_standardized_unit(unit_data)
|
||||
std_q = standardized_data.get("standard_quantity")
|
||||
std_u = standardized_data.get("standard_unit")
|
||||
if std_q and std_u:
|
||||
logger.info(f"Found unit '{unit.name}', which is standardized as '{std_q} * {std_u}'")
|
||||
unit.standard_quantity = std_q
|
||||
unit.standard_unit = std_u
|
||||
|
||||
session.commit()
|
||||
session.close()
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
with op.batch_alter_table("ingredient_units", schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column("standard_quantity", sa.Float(), nullable=True))
|
||||
batch_op.add_column(sa.Column("standard_unit", sa.String(), nullable=True))
|
||||
|
||||
# ### end Alembic commands ###
|
||||
|
||||
# Populate standardized units for existing records
|
||||
try:
|
||||
populate_standards()
|
||||
except Exception:
|
||||
logger.exception("Failed to populate unit standards, skipping...")
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
with op.batch_alter_table("ingredient_units", schema=None) as batch_op:
|
||||
batch_op.drop_column("standard_unit")
|
||||
batch_op.drop_column("standard_quantity")
|
||||
|
||||
# ### end Alembic commands ###
|
||||
@@ -46,6 +46,30 @@ class NoEntryFound(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class OpenAIServiceError(Exception):
|
||||
"""
|
||||
This exception is raised when there is an error communicating with OpenAI services.
|
||||
"""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class RateLimitError(Exception):
|
||||
"""
|
||||
This exception is raised when an external API returns a rate limit (429) error.
|
||||
"""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class VideoDownloadError(Exception):
|
||||
"""
|
||||
This exception is raised when there is an error downloading or processing a video.
|
||||
"""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
def mealie_registered_exceptions(t: Translator) -> dict:
|
||||
"""
|
||||
This function returns a dictionary of all the globally registered exceptions in the Mealie application.
|
||||
|
||||
@@ -393,12 +393,16 @@ class AppSettings(AppLoggingSettings):
|
||||
"""Your OpenAI API key. Required to enable OpenAI features"""
|
||||
OPENAI_MODEL: str = "gpt-4o"
|
||||
"""Which OpenAI model to send requests to. Leave this unset for most usecases"""
|
||||
OPENAI_AUDIO_MODEL: str = "whisper-1"
|
||||
"""Which OpenAI model to use for audio transcription. Leave this unset for most usecases"""
|
||||
OPENAI_CUSTOM_HEADERS: dict[str, str] = {}
|
||||
"""Custom HTTP headers to send with each OpenAI request"""
|
||||
OPENAI_CUSTOM_PARAMS: dict[str, Any] = {}
|
||||
"""Custom HTTP parameters to send with each OpenAI request"""
|
||||
OPENAI_ENABLE_IMAGE_SERVICES: bool = True
|
||||
"""Whether to enable image-related features in OpenAI"""
|
||||
OPENAI_ENABLE_TRANSCRIPTION_SERVICES: bool = True
|
||||
"""Whether to enable audio transcription features in OpenAI"""
|
||||
OPENAI_WORKERS: int = 2
|
||||
"""
|
||||
Number of OpenAI workers per request. Higher values may increase
|
||||
|
||||
@@ -52,6 +52,10 @@ class IngredientUnitModel(SqlAlchemyBase, BaseMixins):
|
||||
cascade="all, delete, delete-orphan",
|
||||
)
|
||||
|
||||
# Standardization
|
||||
standard_quantity: Mapped[float | None] = mapped_column(Float)
|
||||
standard_unit: Mapped[str | None] = mapped_column(String)
|
||||
|
||||
# Automatically updated by sqlalchemy event, do not write to this manually
|
||||
name_normalized: Mapped[str | None] = mapped_column(sa.String, index=True)
|
||||
plural_name_normalized: Mapped[str | None] = mapped_column(sa.String, index=True)
|
||||
|
||||
@@ -15,52 +15,63 @@ class LocalePluralFoodHandling(StrEnum):
|
||||
|
||||
@dataclass
|
||||
class LocaleConfig:
|
||||
key: str
|
||||
name: str
|
||||
dir: LocaleTextDirection = LocaleTextDirection.LTR
|
||||
plural_food_handling: LocalePluralFoodHandling = LocalePluralFoodHandling.ALWAYS
|
||||
|
||||
|
||||
LOCALE_CONFIG: dict[str, LocaleConfig] = {
|
||||
"af-ZA": LocaleConfig(name="Afrikaans (Afrikaans)"),
|
||||
"ar-SA": LocaleConfig(name="العربية (Arabic)", dir=LocaleTextDirection.RTL),
|
||||
"bg-BG": LocaleConfig(name="Български (Bulgarian)"),
|
||||
"ca-ES": LocaleConfig(name="Català (Catalan)"),
|
||||
"cs-CZ": LocaleConfig(name="Čeština (Czech)"),
|
||||
"da-DK": LocaleConfig(name="Dansk (Danish)"),
|
||||
"de-DE": LocaleConfig(name="Deutsch (German)"),
|
||||
"el-GR": LocaleConfig(name="Ελληνικά (Greek)"),
|
||||
"en-GB": LocaleConfig(name="British English", plural_food_handling=LocalePluralFoodHandling.WITHOUT_UNIT),
|
||||
"en-US": LocaleConfig(name="American English", plural_food_handling=LocalePluralFoodHandling.WITHOUT_UNIT),
|
||||
"es-ES": LocaleConfig(name="Español (Spanish)"),
|
||||
"et-EE": LocaleConfig(name="Eesti (Estonian)"),
|
||||
"fi-FI": LocaleConfig(name="Suomi (Finnish)"),
|
||||
"fr-BE": LocaleConfig(name="Belge (Belgian)"),
|
||||
"fr-CA": LocaleConfig(name="Français canadien (Canadian French)"),
|
||||
"fr-FR": LocaleConfig(name="Français (French)"),
|
||||
"gl-ES": LocaleConfig(name="Galego (Galician)"),
|
||||
"he-IL": LocaleConfig(name="עברית (Hebrew)", dir=LocaleTextDirection.RTL),
|
||||
"hr-HR": LocaleConfig(name="Hrvatski (Croatian)"),
|
||||
"hu-HU": LocaleConfig(name="Magyar (Hungarian)"),
|
||||
"is-IS": LocaleConfig(name="Íslenska (Icelandic)"),
|
||||
"it-IT": LocaleConfig(name="Italiano (Italian)"),
|
||||
"ja-JP": LocaleConfig(name="日本語 (Japanese)", plural_food_handling=LocalePluralFoodHandling.NEVER),
|
||||
"ko-KR": LocaleConfig(name="한국어 (Korean)", plural_food_handling=LocalePluralFoodHandling.NEVER),
|
||||
"lt-LT": LocaleConfig(name="Lietuvių (Lithuanian)"),
|
||||
"lv-LV": LocaleConfig(name="Latviešu (Latvian)"),
|
||||
"nl-NL": LocaleConfig(name="Nederlands (Dutch)"),
|
||||
"no-NO": LocaleConfig(name="Norsk (Norwegian)"),
|
||||
"pl-PL": LocaleConfig(name="Polski (Polish)"),
|
||||
"pt-BR": LocaleConfig(name="Português do Brasil (Brazilian Portuguese)"),
|
||||
"pt-PT": LocaleConfig(name="Português (Portuguese)"),
|
||||
"ro-RO": LocaleConfig(name="Română (Romanian)"),
|
||||
"ru-RU": LocaleConfig(name="Pусский (Russian)"),
|
||||
"sk-SK": LocaleConfig(name="Slovenčina (Slovak)"),
|
||||
"sl-SI": LocaleConfig(name="Slovenščina (Slovenian)"),
|
||||
"sr-SP": LocaleConfig(name="српски (Serbian)"),
|
||||
"sv-SE": LocaleConfig(name="Svenska (Swedish)"),
|
||||
"tr-TR": LocaleConfig(name="Türkçe (Turkish)", plural_food_handling=LocalePluralFoodHandling.NEVER),
|
||||
"uk-UA": LocaleConfig(name="Українська (Ukrainian)"),
|
||||
"vi-VN": LocaleConfig(name="Tiếng Việt (Vietnamese)", plural_food_handling=LocalePluralFoodHandling.NEVER),
|
||||
"zh-CN": LocaleConfig(name="简体中文 (Chinese simplified)", plural_food_handling=LocalePluralFoodHandling.NEVER),
|
||||
"zh-TW": LocaleConfig(name="繁體中文 (Chinese traditional)", plural_food_handling=LocalePluralFoodHandling.NEVER),
|
||||
"af-ZA": LocaleConfig(key="af-ZA", name="Afrikaans (Afrikaans)"),
|
||||
"ar-SA": LocaleConfig(key="ar-SA", name="العربية (Arabic)", dir=LocaleTextDirection.RTL),
|
||||
"bg-BG": LocaleConfig(key="bg-BG", name="Български (Bulgarian)"),
|
||||
"ca-ES": LocaleConfig(key="ca-ES", name="Català (Catalan)"),
|
||||
"cs-CZ": LocaleConfig(key="cs-CZ", name="Čeština (Czech)"),
|
||||
"da-DK": LocaleConfig(key="da-DK", name="Dansk (Danish)"),
|
||||
"de-DE": LocaleConfig(key="de-DE", name="Deutsch (German)"),
|
||||
"el-GR": LocaleConfig(key="el-GR", name="Ελληνικά (Greek)"),
|
||||
"en-GB": LocaleConfig(
|
||||
key="en-GB", name="British English", plural_food_handling=LocalePluralFoodHandling.WITHOUT_UNIT
|
||||
),
|
||||
"en-US": LocaleConfig(
|
||||
key="en-US", name="American English", plural_food_handling=LocalePluralFoodHandling.WITHOUT_UNIT
|
||||
),
|
||||
"es-ES": LocaleConfig(key="es-ES", name="Español (Spanish)"),
|
||||
"et-EE": LocaleConfig(key="et-EE", name="Eesti (Estonian)"),
|
||||
"fi-FI": LocaleConfig(key="fi-FI", name="Suomi (Finnish)"),
|
||||
"fr-BE": LocaleConfig(key="fr-BE", name="Belge (Belgian)"),
|
||||
"fr-CA": LocaleConfig(key="fr-CA", name="Français canadien (Canadian French)"),
|
||||
"fr-FR": LocaleConfig(key="fr-FR", name="Français (French)"),
|
||||
"gl-ES": LocaleConfig(key="gl-ES", name="Galego (Galician)"),
|
||||
"he-IL": LocaleConfig(key="he-IL", name="עברית (Hebrew)", dir=LocaleTextDirection.RTL),
|
||||
"hr-HR": LocaleConfig(key="hr-HR", name="Hrvatski (Croatian)"),
|
||||
"hu-HU": LocaleConfig(key="hu-HU", name="Magyar (Hungarian)"),
|
||||
"is-IS": LocaleConfig(key="is-IS", name="Íslenska (Icelandic)"),
|
||||
"it-IT": LocaleConfig(key="it-IT", name="Italiano (Italian)"),
|
||||
"ja-JP": LocaleConfig(key="ja-JP", name="日本語 (Japanese)", plural_food_handling=LocalePluralFoodHandling.NEVER),
|
||||
"ko-KR": LocaleConfig(key="ko-KR", name="한국어 (Korean)", plural_food_handling=LocalePluralFoodHandling.NEVER),
|
||||
"lt-LT": LocaleConfig(key="lt-LT", name="Lietuvių (Lithuanian)"),
|
||||
"lv-LV": LocaleConfig(key="lv-LV", name="Latviešu (Latvian)"),
|
||||
"nl-NL": LocaleConfig(key="nl-NL", name="Nederlands (Dutch)"),
|
||||
"no-NO": LocaleConfig(key="no-NO", name="Norsk (Norwegian)"),
|
||||
"pl-PL": LocaleConfig(key="pl-PL", name="Polski (Polish)"),
|
||||
"pt-BR": LocaleConfig(key="pt-BR", name="Português do Brasil (Brazilian Portuguese)"),
|
||||
"pt-PT": LocaleConfig(key="pt-PT", name="Português (Portuguese)"),
|
||||
"ro-RO": LocaleConfig(key="ro-RO", name="Română (Romanian)"),
|
||||
"ru-RU": LocaleConfig(key="ru-RU", name="Pусский (Russian)"),
|
||||
"sk-SK": LocaleConfig(key="sk-SK", name="Slovenčina (Slovak)"),
|
||||
"sl-SI": LocaleConfig(key="sl-SI", name="Slovenščina (Slovenian)"),
|
||||
"sr-SP": LocaleConfig(key="sr-SP", name="српски (Serbian)"),
|
||||
"sv-SE": LocaleConfig(key="sv-SE", name="Svenska (Swedish)"),
|
||||
"tr-TR": LocaleConfig(key="tr-TR", name="Türkçe (Turkish)", plural_food_handling=LocalePluralFoodHandling.NEVER),
|
||||
"uk-UA": LocaleConfig(key="uk-UA", name="Українська (Ukrainian)"),
|
||||
"vi-VN": LocaleConfig(
|
||||
key="vi-VN", name="Tiếng Việt (Vietnamese)", plural_food_handling=LocalePluralFoodHandling.NEVER
|
||||
),
|
||||
"zh-CN": LocaleConfig(
|
||||
key="zh-CN", name="简体中文 (Chinese simplified)", plural_food_handling=LocalePluralFoodHandling.NEVER
|
||||
),
|
||||
"zh-TW": LocaleConfig(
|
||||
key="zh-TW", name="繁體中文 (Chinese traditional)", plural_food_handling=LocalePluralFoodHandling.NEVER
|
||||
),
|
||||
}
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Yields"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"or-ingredient": "or {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Geen resepte voldoen aan jou reëls nie"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "العائد"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"or-ingredient": "or {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "لا توجد وصفات تتطابق مع المرشحات الخاصة بك"
|
||||
|
||||
@@ -18,8 +18,18 @@
|
||||
"yield": "Порции",
|
||||
"yields": "Порции"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"and-amount": "и {amount}",
|
||||
"or-ingredient": "или {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Няма рецепти отговарящи на Вашите критерии"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Racions"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"or-ingredient": "or {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Cap recepta coincideix amb les teves regles"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Výnosy"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"or-ingredient": "or {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Žádné recepty neodpovídají vašim pravidlům"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Mængde"
|
||||
},
|
||||
"and-amount": "og {amount}",
|
||||
"or-ingredient": "eller {ingredient}"
|
||||
"or-ingredient": "eller {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Opretter opskrift med kunstig intelligens...",
|
||||
"creating-recipe-from-transcript-with-ai": "Transskriberer og opretter opskrift med kunstig intelligens...",
|
||||
"creating-recipe-from-webpage-data": "Opretter opskrift fra data på hjemmeside...",
|
||||
"downloading-image": "Downloader billede...",
|
||||
"downloading-video": "Downloader video...",
|
||||
"extracting-recipe-data": "Udtrækker opskriftsdata...",
|
||||
"fetching-webpage": "Henter hjemmeside...",
|
||||
"transcribing-audio-with-ai": "Transskriberer lyd med kunstig intelligens..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Ingen opskrifter matcher dine regler"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"recipe": {
|
||||
"unique-name-error": "Rezeptnamen müssen einzigartig sein",
|
||||
"recipe-created": "Rezept erstellt",
|
||||
"recipe-image-deleted": "Rezeptbild gelöscht",
|
||||
"recipe-image-deleted": "Bild gelöscht",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "250 g Mehl",
|
||||
"step-text": "Zubereitungs-Schritte und andere Felder der Rezeptseite unterstützen Markdown Syntax.\n\n**Füge einen Link hinzu**\n\n[Mein Link](https://demo.mealie.io)\n"
|
||||
@@ -18,8 +18,18 @@
|
||||
"yield": "Ergibt",
|
||||
"yields": "Ergibt"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"and-amount": "und {amount}",
|
||||
"or-ingredient": "oder {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Erstelle Rezept mit KI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Erstelle Rezept aus Transkript mit KI...",
|
||||
"creating-recipe-from-webpage-data": "Erstelle Rezept aus Website-Daten...",
|
||||
"downloading-image": "Bild wird heruntergeladen...",
|
||||
"downloading-video": "Video wird heruntergeladen...",
|
||||
"extracting-recipe-data": "Entpacken von Rezeptdaten...",
|
||||
"fetching-webpage": "Webseite wird abgerufen...",
|
||||
"transcribing-audio-with-ai": "Transkribiere Audio mit KI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Keine Rezepte entsprechen deinen Regeln"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Ποσότητα"
|
||||
},
|
||||
"and-amount": "και {amount}",
|
||||
"or-ingredient": "ή {ingredient}"
|
||||
"or-ingredient": "ή {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Δημιουργία συνταγής με AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Δημιουργία συνταγής από απομαγνητοφώνηση με AI...",
|
||||
"creating-recipe-from-webpage-data": "Δημιουργία συνταγής από δεδομένα ιστοσελίδας...",
|
||||
"downloading-image": "Λήψη εικόνας...",
|
||||
"downloading-video": "Λήψη βίντεο...",
|
||||
"extracting-recipe-data": "Εξαγωγή δεδομένων συνταγής...",
|
||||
"fetching-webpage": "Λήψη ιστοσελίδας...",
|
||||
"transcribing-audio-with-ai": "Μεταγραφή ήχου με AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Καμία συνταγή δεν ταιριάζει στα κριτήρια αναζήτησης"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Yields"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"or-ingredient": "or {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "No recipes match your rules"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Yields"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"or-ingredient": "or {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "No recipes match your rules"
|
||||
|
||||
@@ -18,8 +18,18 @@
|
||||
"yield": "Ración",
|
||||
"yields": "Raciones"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"and-amount": "y {amount}",
|
||||
"or-ingredient": "o {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "No hay recetas que coincidan con tus reglas"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Annab saagiks"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"or-ingredient": "or {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Ükski retsept ei vasta sinu reeglitele"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Tuottaa"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"or-ingredient": "or {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Määritysten mukaisia reseptejä ei löytynyt"
|
||||
|
||||
@@ -18,8 +18,18 @@
|
||||
"yield": "Quantité",
|
||||
"yields": "Produit"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"and-amount": "et {amount}",
|
||||
"or-ingredient": "ou {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Aucune recette ne correspond à vos règles"
|
||||
|
||||
@@ -18,8 +18,18 @@
|
||||
"yield": "Rendement",
|
||||
"yields": "Rendements"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"and-amount": "et {amount}",
|
||||
"or-ingredient": "ou {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Aucune recette ne correspond à vos règles"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Produit"
|
||||
},
|
||||
"and-amount": "et {amount}",
|
||||
"or-ingredient": "ou {ingredient}"
|
||||
"or-ingredient": "ou {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Aucune recette ne correspond à vos filtres"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Rendimentos"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"or-ingredient": "or {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Nengunha receita corresponde às suas regras"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "כמויות"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"or-ingredient": "or {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "אין מתכון מתאים לחוקים שלך"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Yields"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"or-ingredient": "or {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Nema recepata koji odgovaraju vašim pravilima"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Késleltetve"
|
||||
},
|
||||
"and-amount": "és {amount}",
|
||||
"or-ingredient": "vagy {ingredient}"
|
||||
"or-ingredient": "vagy {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Recept létrehozás AI-val...",
|
||||
"creating-recipe-from-transcript-with-ai": "Recept készítése beszédfelvételből AI-val...",
|
||||
"creating-recipe-from-webpage-data": "Recept készítése a weboldal adataiból...",
|
||||
"downloading-image": "Kép letöltése...",
|
||||
"downloading-video": "Videó letöltése...",
|
||||
"extracting-recipe-data": "Recept adatok kibontása...",
|
||||
"fetching-webpage": "A weboldal betöltése folyamatban...",
|
||||
"transcribing-audio-with-ai": "Hanganyagok átírása AI-val..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Nem található recept a beállítottt szabályok alapján"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Skilar"
|
||||
},
|
||||
"and-amount": "og {amount}",
|
||||
"or-ingredient": "eða {ingredient}"
|
||||
"or-ingredient": "eða {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Eingin uppskrift passar við settar reglur"
|
||||
|
||||
@@ -19,7 +19,17 @@
|
||||
"yields": "Porzioni"
|
||||
},
|
||||
"and-amount": "and {amount}",
|
||||
"or-ingredient": "or {ingredient}"
|
||||
"or-ingredient": "or {ingredient}",
|
||||
"create-progress": {
|
||||
"creating-recipe-with-ai": "Creating recipe with AI...",
|
||||
"creating-recipe-from-transcript-with-ai": "Creating recipe from transcript with AI...",
|
||||
"creating-recipe-from-webpage-data": "Creating recipe from webpage data...",
|
||||
"downloading-image": "Downloading image...",
|
||||
"downloading-video": "Downloading video...",
|
||||
"extracting-recipe-data": "Extracting recipe data...",
|
||||
"fetching-webpage": "Fetching webpage...",
|
||||
"transcribing-audio-with-ai": "Transcribing audio with AI..."
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Nessuna ricetta corrisponde alle tue regole"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user