mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-24 00:33:14 -05:00
Compare commits
56 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0d06494bbf | ||
|
|
9c04950948 | ||
|
|
34c37a2bee | ||
|
|
2cd1e0ad37 | ||
|
|
828afe6674 | ||
|
|
6a705b7352 | ||
|
|
3fa931466e | ||
|
|
4ba8269ff1 | ||
|
|
581310b57d | ||
|
|
ace18ab4aa | ||
|
|
abae973454 | ||
|
|
08bc29ca8a | ||
|
|
9d7ef1837b | ||
|
|
8a15f400e1 | ||
|
|
3d921cb677 | ||
|
|
f0e065efa4 | ||
|
|
d06589b31b | ||
|
|
3405bc4eb6 | ||
|
|
a75eb07a47 | ||
|
|
432914e310 | ||
|
|
65ece35966 | ||
|
|
f11af52d30 | ||
|
|
b4da5c3d5a | ||
|
|
a4e416cabc | ||
|
|
26173704aa | ||
|
|
5876c1ecf7 | ||
|
|
c4a339ed36 | ||
|
|
2967eca819 | ||
|
|
66b19eecfb | ||
|
|
37d93d4e4b | ||
|
|
656d46e9cb | ||
|
|
169d659b72 | ||
|
|
f92a9afbe5 | ||
|
|
d53f81cdfb | ||
|
|
bd4f858ba7 | ||
|
|
ce3a95f38a | ||
|
|
e3ffa03ffd | ||
|
|
79910deb8a | ||
|
|
e0c532ab94 | ||
|
|
73c09ab138 | ||
|
|
7edf0ee3cc | ||
|
|
48381fe897 | ||
|
|
e68300037c | ||
|
|
c643f24a72 | ||
|
|
7820ddc8f7 | ||
|
|
ca3cb2447c | ||
|
|
a55fdb634d | ||
|
|
8b0c607712 | ||
|
|
8c990a5dd2 | ||
|
|
abf5cf0116 | ||
|
|
84069bf9df | ||
|
|
059e5b7ea2 | ||
|
|
3677d04b56 | ||
|
|
05c034fca2 | ||
|
|
17d1cd26dc | ||
|
|
c9bbae6f77 |
@@ -12,6 +12,7 @@ repos:
|
||||
exclude: ^tests/data/
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.5.5
|
||||
rev: v0.6.1
|
||||
hooks:
|
||||
- id: ruff
|
||||
- id: ruff-format
|
||||
|
||||
@@ -6,9 +6,6 @@ Create Date: 2023-02-10 21:18:32.405130
|
||||
|
||||
"""
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
import mealie.db.migration_types
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
|
||||
@@ -11,7 +11,6 @@ from sqlalchemy import orm, select
|
||||
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
||||
from text_unidecode import unidecode
|
||||
|
||||
import mealie.db.migration_types
|
||||
from alembic import op
|
||||
from mealie.db.models._model_utils.guid import GUID
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ Create Date: 2023-02-22 21:45:52.900964
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
import mealie.db.migration_types
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
|
||||
@@ -6,12 +6,7 @@ Create Date: 2023-04-13 06:47:04.617131
|
||||
|
||||
"""
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
import mealie.db.migration_types
|
||||
from alembic import op
|
||||
import alembic.context as context
|
||||
from mealie.core.config import get_app_settings
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "b3dbb554ba53"
|
||||
|
||||
@@ -66,7 +66,7 @@ def populate_shopping_list_users():
|
||||
user_id = find_user_id_for_group(group_id)
|
||||
if user_id:
|
||||
session.execute(
|
||||
sa.text(f"UPDATE shopping_lists SET user_id=:user_id WHERE id=:id").bindparams(
|
||||
sa.text("UPDATE shopping_lists SET user_id=:user_id WHERE id=:id").bindparams(
|
||||
user_id=user_id, id=list_id
|
||||
)
|
||||
)
|
||||
@@ -74,7 +74,7 @@ def populate_shopping_list_users():
|
||||
logger.warning(
|
||||
f"No user found for shopping list {list_id} with group {group_id}; deleting shopping list"
|
||||
)
|
||||
session.execute(sa.text(f"DELETE FROM shopping_lists WHERE id=:id").bindparams(id=list_id))
|
||||
session.execute(sa.text("DELETE FROM shopping_lists WHERE id=:id").bindparams(id=list_id))
|
||||
|
||||
|
||||
def upgrade():
|
||||
|
||||
@@ -6,9 +6,6 @@ Create Date: 2024-03-10 05:08:32.397027
|
||||
|
||||
"""
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
import mealie.db.migration_types
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
|
||||
@@ -32,7 +32,7 @@ def new_user_rating(user_id: Any, recipe_id: Any, rating: float | None = None, i
|
||||
if is_postgres():
|
||||
id = str(uuid4())
|
||||
else:
|
||||
id = "%.32x" % uuid4().int
|
||||
id = "%.32x" % uuid4().int # noqa: UP031
|
||||
|
||||
now = datetime.now(timezone.utc).isoformat()
|
||||
return {
|
||||
|
||||
@@ -4,7 +4,7 @@ from pathlib import Path
|
||||
from fastapi import FastAPI
|
||||
from jinja2 import Template
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
from utils import PROJECT_DIR, CodeTemplates, HTTPRequest, RouteObject, RequestType
|
||||
from utils import PROJECT_DIR, CodeTemplates, HTTPRequest, RouteObject
|
||||
|
||||
CWD = Path(__file__).parent
|
||||
|
||||
@@ -17,9 +17,16 @@ class PathObject(BaseModel):
|
||||
http_verbs: list[HTTPRequest]
|
||||
|
||||
|
||||
def get_path_objects(app: FastAPI):
|
||||
paths = []
|
||||
def force_include_in_schema(app: FastAPI):
|
||||
# clear schema cache
|
||||
app.openapi_schema = None
|
||||
for route in app.routes:
|
||||
route.include_in_schema = True
|
||||
|
||||
|
||||
def get_path_objects(app: FastAPI):
|
||||
force_include_in_schema(app)
|
||||
paths = []
|
||||
for key, value in app.openapi().items():
|
||||
if key == "paths":
|
||||
for key, value2 in value.items():
|
||||
|
||||
@@ -35,6 +35,7 @@ LOCALE_DATA: dict[str, LocaleData] = {
|
||||
"es-ES": LocaleData(name="Español (Spanish)"),
|
||||
"fi-FI": LocaleData(name="Suomi (Finnish)"),
|
||||
"fr-FR": LocaleData(name="Français (French)"),
|
||||
"fr-BE": LocaleData(name="Belge (Belgian)"),
|
||||
"gl-ES": LocaleData(name="Galego (Galician)"),
|
||||
"he-IL": LocaleData(name="עברית (Hebrew)", dir="rtl"),
|
||||
"hr-HR": LocaleData(name="Hrvatski (Croatian)"),
|
||||
|
||||
@@ -18,7 +18,7 @@ Create an API token from Mealie's User Settings page (https://hay-kot.github.io/
|
||||
#### 2. Create Home Assistant Sensors
|
||||
|
||||
Create REST sensors in home assistant to get the details of today's meal.
|
||||
We will create sensors to get the name and ID of the first meal in today's meal plan (note that this may not be what is wanted if there is more than one meal planned for the day). We need the ID as well as the name to be able to retreive the image for the meal.
|
||||
We will create sensors to get the name and ID of the first meal in today's meal plan (note that this may not be what is wanted if there is more than one meal planned for the day). We need the ID as well as the name to be able to retrieve the image for the meal.
|
||||
|
||||
Make sure the url and port (`http://mealie:9000` ) matches your installation's address and _API_ port.
|
||||
|
||||
|
||||
@@ -7,7 +7,9 @@ You can use bookmarklets to generate a bookmark that will take your current loca
|
||||
You can use a [bookmarklet generator site](https://caiorss.github.io/bookmarklet-maker/) and the code below to generate a bookmark for your site. Just change the `http://localhost:8080` to your sites web address and follow the instructions.
|
||||
|
||||
```js
|
||||
var url = document.URL;
|
||||
var url = document.URL.endsWith('/') ?
|
||||
document.URL.slice(0, -1) :
|
||||
document.URL;
|
||||
var mealie = "http://localhost:8080";
|
||||
var group_slug = "home" // Change this to your group slug. You can obtain this from your URL after logging-in to Mealie
|
||||
var use_keywords= "&use_keywords=1" // Optional - use keywords from recipe - update to "" if you don't want that
|
||||
|
||||
@@ -106,14 +106,15 @@ For usage, see [Usage - OpenID Connect](../authentication/oidc.md)
|
||||
|
||||
Mealie supports various integrations using OpenAI. To enable OpenAI, [you must provide your OpenAI API key](https://platform.openai.com/api-keys). You can tweak how OpenAI is used using these backend settings. Please note that while OpenAI usage is optimized to reduce API costs, you're unlikely to be able to use OpenAI features with the free tier limits.
|
||||
|
||||
| Variables | Default | Description |
|
||||
| ------------------------- | :-----: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| OPENAI_BASE_URL | 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 | 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_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 | 10 | 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 |
|
||||
| Variables | Default | Description |
|
||||
| ---------------------------- | :-----: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| OPENAI_BASE_URL | 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 | 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_ENABLE_IMAGE_SERVICES | 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 | 60 | 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 |
|
||||
|
||||
### Themeing
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ PostgreSQL might be considered if you need to support many concurrent users. In
|
||||
```yaml
|
||||
services:
|
||||
mealie:
|
||||
image: ghcr.io/mealie-recipes/mealie:v1.10.2 # (3)
|
||||
image: ghcr.io/mealie-recipes/mealie:v1.11.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:v1.10.2 # (3)
|
||||
image: ghcr.io/mealie-recipes/mealie:v1.11.0 # (3)
|
||||
container_name: mealie
|
||||
restart: always
|
||||
ports:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div v-if="dialog">
|
||||
<BaseDialog v-if="shoppingListDialog" v-model="dialog" :title="$t('recipe.add-to-list')" :icon="$globals.icons.cartCheck">
|
||||
<BaseDialog v-if="shoppingListDialog && ready" v-model="dialog" :title="$t('recipe.add-to-list')" :icon="$globals.icons.cartCheck">
|
||||
<v-card-text>
|
||||
<v-card
|
||||
v-for="list in shoppingListChoices"
|
||||
@@ -23,7 +23,7 @@
|
||||
{{ $t("general.cancel") }}
|
||||
</v-btn>
|
||||
<div class="d-flex justify-end" style="width: 100%;">
|
||||
<v-checkbox v-model="preferences.viewAllLists" hide-details :label="$tc('general.show-all')" class="my-auto mr-4" />
|
||||
<v-checkbox v-model="preferences.viewAllLists" hide-details :label="$tc('general.show-all')" class="my-auto mr-4" @click="setShowAllToggled()" />
|
||||
</div>
|
||||
</template>
|
||||
</BaseDialog>
|
||||
@@ -127,14 +127,14 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { computed, defineComponent, reactive, ref, useContext } from "@nuxtjs/composition-api";
|
||||
import { toRefs } from "@vueuse/core";
|
||||
import RecipeIngredientListItem from "./RecipeIngredientListItem.vue";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { alert } from "~/composables/use-toast";
|
||||
import { useShoppingListPreferences } from "~/composables/use-users/preferences";
|
||||
import { ShoppingListSummary } from "~/lib/api/types/group";
|
||||
import { Recipe, RecipeIngredient } from "~/lib/api/types/recipe";
|
||||
import { computed, defineComponent, reactive, ref, useContext, watchEffect } from "@nuxtjs/composition-api"
|
||||
import { toRefs } from "@vueuse/core"
|
||||
import RecipeIngredientListItem from "./RecipeIngredientListItem.vue"
|
||||
import { useUserApi } from "~/composables/api"
|
||||
import { alert } from "~/composables/use-toast"
|
||||
import { useShoppingListPreferences } from "~/composables/use-users/preferences"
|
||||
import { ShoppingListSummary } from "~/lib/api/types/group"
|
||||
import { Recipe, RecipeIngredient } from "~/lib/api/types/recipe"
|
||||
|
||||
export interface RecipeWithScale extends Recipe {
|
||||
scale: number;
|
||||
@@ -180,6 +180,7 @@ export default defineComponent({
|
||||
const { $auth, i18n } = useContext();
|
||||
const api = useUserApi();
|
||||
const preferences = useShoppingListPreferences();
|
||||
const ready = ref(false);
|
||||
|
||||
// v-model support
|
||||
const dialog = computed({
|
||||
@@ -195,6 +196,7 @@ export default defineComponent({
|
||||
const state = reactive({
|
||||
shoppingListDialog: true,
|
||||
shoppingListIngredientDialog: false,
|
||||
shoppingListShowAllToggled: false,
|
||||
});
|
||||
|
||||
const shoppingListChoices = computed(() => {
|
||||
@@ -204,6 +206,16 @@ export default defineComponent({
|
||||
const recipeIngredientSections = ref<ShoppingListRecipeIngredientSection[]>([]);
|
||||
const selectedShoppingList = ref<ShoppingListSummary | null>(null);
|
||||
|
||||
watchEffect(
|
||||
() => {
|
||||
if (shoppingListChoices.value.length === 1 && !state.shoppingListShowAllToggled) {
|
||||
openShoppingListIngredientDialog(shoppingListChoices.value[0]);
|
||||
} else {
|
||||
ready.value = true;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
async function consolidateRecipesIntoSections(recipes: RecipeWithScale[]) {
|
||||
const recipeSectionMap = new Map<string, ShoppingListRecipeIngredientSection>();
|
||||
for (const recipe of recipes) {
|
||||
@@ -285,6 +297,7 @@ export default defineComponent({
|
||||
function initState() {
|
||||
state.shoppingListDialog = true;
|
||||
state.shoppingListIngredientDialog = false;
|
||||
state.shoppingListShowAllToggled = false;
|
||||
recipeIngredientSections.value = [];
|
||||
selectedShoppingList.value = null;
|
||||
}
|
||||
@@ -302,6 +315,10 @@ export default defineComponent({
|
||||
state.shoppingListIngredientDialog = true;
|
||||
}
|
||||
|
||||
function setShowAllToggled() {
|
||||
state.shoppingListShowAllToggled = true;
|
||||
}
|
||||
|
||||
function bulkCheckIngredients(value = true) {
|
||||
recipeIngredientSections.value.forEach((recipeSection) => {
|
||||
recipeSection.ingredientSections.forEach((ingSection) => {
|
||||
@@ -363,11 +380,13 @@ export default defineComponent({
|
||||
return {
|
||||
dialog,
|
||||
preferences,
|
||||
ready,
|
||||
shoppingListChoices,
|
||||
...toRefs(state),
|
||||
addRecipesToList,
|
||||
bulkCheckIngredients,
|
||||
openShoppingListIngredientDialog,
|
||||
setShowAllToggled,
|
||||
recipeIngredientSections,
|
||||
selectedShoppingList,
|
||||
}
|
||||
|
||||
@@ -1,25 +1,26 @@
|
||||
<template>
|
||||
<v-app dark>
|
||||
<TheSnackbar />
|
||||
<v-app dark>
|
||||
<TheSnackbar />
|
||||
|
||||
<AppSidebar
|
||||
v-model="sidebar"
|
||||
absolute
|
||||
:top-link="topLinks"
|
||||
:secondary-links="cookbookLinks || []"
|
||||
:bottom-links="isAdmin ? bottomLinks : []"
|
||||
>
|
||||
<v-menu offset-y nudge-bottom="5" close-delay="50" nudge-right="15">
|
||||
<template #activator="{ on, attrs }">
|
||||
<v-btn v-if="isOwnGroup" rounded large class="ml-2 mt-3" v-bind="attrs" v-on="on">
|
||||
<v-icon left large color="primary">
|
||||
{{ $globals.icons.createAlt }}
|
||||
</v-icon>
|
||||
{{ $t("general.create") }}
|
||||
</v-btn>
|
||||
</template>
|
||||
<v-list dense class="my-0 py-0">
|
||||
<template v-for="(item, index) in createLinks">
|
||||
<AppSidebar
|
||||
v-model="sidebar"
|
||||
absolute
|
||||
:top-link="topLinks"
|
||||
:secondary-links="cookbookLinks || []"
|
||||
:bottom-links="isAdmin ? bottomLinks : []"
|
||||
>
|
||||
<v-menu offset-y nudge-bottom="5" close-delay="50" nudge-right="15">
|
||||
<template #activator="{ on, attrs }">
|
||||
<v-btn v-if="isOwnGroup" rounded large class="ml-2 mt-3" v-bind="attrs" v-on="on">
|
||||
<v-icon left large color="primary">
|
||||
{{ $globals.icons.createAlt }}
|
||||
</v-icon>
|
||||
{{ $t("general.create") }}
|
||||
</v-btn>
|
||||
</template>
|
||||
<v-list dense class="my-0 py-0">
|
||||
<template v-for="(item, index) in createLinks">
|
||||
<div v-if="!item.hide" :key="item.title">
|
||||
<v-divider v-if="item.insertDivider" :key="index" class="mx-2"></v-divider>
|
||||
<v-list-item v-if="!item.restricted || isOwnGroup" :key="item.title" :to="item.to" exact>
|
||||
<v-list-item-avatar>
|
||||
@@ -36,195 +37,212 @@
|
||||
</v-list-item-subtitle>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
</template>
|
||||
</v-list>
|
||||
</v-menu>
|
||||
<template #bottom>
|
||||
<v-list-item @click.stop="languageDialog = true">
|
||||
<v-list-item-icon>
|
||||
<v-icon>{{ $globals.icons.translate }}</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{ $t("sidebar.language") }}</v-list-item-title>
|
||||
<LanguageDialog v-model="languageDialog" />
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<v-list-item @click="toggleDark">
|
||||
<v-list-item-icon>
|
||||
<v-icon>
|
||||
{{ $vuetify.theme.dark ? $globals.icons.weatherSunny : $globals.icons.weatherNight }}
|
||||
</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-title>
|
||||
{{ $vuetify.theme.dark ? $t("settings.theme.light-mode") : $t("settings.theme.dark-mode") }}
|
||||
</v-list-item-title>
|
||||
</v-list-item>
|
||||
</template>
|
||||
</AppSidebar>
|
||||
</div>
|
||||
</template>
|
||||
</v-list>
|
||||
</v-menu>
|
||||
<template #bottom>
|
||||
<v-list-item @click.stop="languageDialog = true">
|
||||
<v-list-item-icon>
|
||||
<v-icon>{{ $globals.icons.translate }}</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{ $t("sidebar.language") }}</v-list-item-title>
|
||||
<LanguageDialog v-model="languageDialog" />
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<v-list-item @click="toggleDark">
|
||||
<v-list-item-icon>
|
||||
<v-icon>
|
||||
{{ $vuetify.theme.dark ? $globals.icons.weatherSunny : $globals.icons.weatherNight }}
|
||||
</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-title>
|
||||
{{ $vuetify.theme.dark ? $t("settings.theme.light-mode") : $t("settings.theme.dark-mode") }}
|
||||
</v-list-item-title>
|
||||
</v-list-item>
|
||||
</template>
|
||||
</AppSidebar>
|
||||
|
||||
<AppHeader>
|
||||
<v-btn icon @click.stop="sidebar = !sidebar">
|
||||
<v-icon> {{ $globals.icons.menu }}</v-icon>
|
||||
</v-btn>
|
||||
</AppHeader>
|
||||
<v-main>
|
||||
<v-scroll-x-transition>
|
||||
<Nuxt />
|
||||
</v-scroll-x-transition>
|
||||
</v-main>
|
||||
</v-app>
|
||||
</template>
|
||||
<AppHeader>
|
||||
<v-btn icon @click.stop="sidebar = !sidebar">
|
||||
<v-icon> {{ $globals.icons.menu }}</v-icon>
|
||||
</v-btn>
|
||||
</AppHeader>
|
||||
<v-main>
|
||||
<v-scroll-x-transition>
|
||||
<Nuxt />
|
||||
</v-scroll-x-transition>
|
||||
</v-main>
|
||||
</v-app>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { computed, defineComponent, onMounted, ref, useContext, useRoute } from "@nuxtjs/composition-api";
|
||||
import { useLoggedInState } from "~/composables/use-logged-in-state";
|
||||
import AppHeader from "@/components/Layout/LayoutParts/AppHeader.vue";
|
||||
import AppSidebar from "@/components/Layout/LayoutParts/AppSidebar.vue";
|
||||
import { SidebarLinks } from "~/types/application-types";
|
||||
import LanguageDialog from "~/components/global/LanguageDialog.vue";
|
||||
import TheSnackbar from "@/components/Layout/LayoutParts/TheSnackbar.vue";
|
||||
import { useCookbooks, usePublicCookbooks } from "~/composables/use-group-cookbooks";
|
||||
import { useToggleDarkMode } from "~/composables/use-utils";
|
||||
<script lang="ts">
|
||||
import { computed, defineComponent, onMounted, ref, useContext, useRoute } from "@nuxtjs/composition-api";
|
||||
import { useLoggedInState } from "~/composables/use-logged-in-state";
|
||||
import AppHeader from "@/components/Layout/LayoutParts/AppHeader.vue";
|
||||
import AppSidebar from "@/components/Layout/LayoutParts/AppSidebar.vue";
|
||||
import { SidebarLinks } from "~/types/application-types";
|
||||
import LanguageDialog from "~/components/global/LanguageDialog.vue";
|
||||
import TheSnackbar from "@/components/Layout/LayoutParts/TheSnackbar.vue";
|
||||
import { useAppInfo } from "~/composables/api";
|
||||
import { useCookbooks, usePublicCookbooks } from "~/composables/use-group-cookbooks";
|
||||
import { useToggleDarkMode } from "~/composables/use-utils";
|
||||
|
||||
export default defineComponent({
|
||||
components: { AppHeader, AppSidebar, LanguageDialog, TheSnackbar },
|
||||
setup() {
|
||||
const { $globals, $auth, $vuetify, i18n } = useContext();
|
||||
const { isOwnGroup } = useLoggedInState();
|
||||
export default defineComponent({
|
||||
components: { AppHeader, AppSidebar, LanguageDialog, TheSnackbar },
|
||||
setup() {
|
||||
const { $globals, $auth, $vuetify, i18n } = useContext();
|
||||
const { isOwnGroup } = useLoggedInState();
|
||||
|
||||
const isAdmin = computed(() => $auth.user?.admin);
|
||||
const route = useRoute();
|
||||
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "");
|
||||
const { cookbooks } = isOwnGroup.value ? useCookbooks() : usePublicCookbooks(groupSlug.value || "");
|
||||
const isAdmin = computed(() => $auth.user?.admin);
|
||||
const route = useRoute();
|
||||
const groupSlug = computed(() => route.value.params.groupSlug || $auth.user?.groupSlug || "");
|
||||
const { cookbooks } = isOwnGroup.value ? useCookbooks() : usePublicCookbooks(groupSlug.value || "");
|
||||
|
||||
const toggleDark = useToggleDarkMode();
|
||||
const appInfo = useAppInfo();
|
||||
const showImageImport = computed(() => appInfo.value?.enableOpenaiImageServices);
|
||||
|
||||
const languageDialog = ref<boolean>(false);
|
||||
const toggleDark = useToggleDarkMode();
|
||||
|
||||
const sidebar = ref<boolean | null>(null);
|
||||
const languageDialog = ref<boolean>(false);
|
||||
|
||||
onMounted(() => {
|
||||
sidebar.value = !$vuetify.breakpoint.md;
|
||||
const sidebar = ref<boolean | null>(null);
|
||||
|
||||
onMounted(() => {
|
||||
sidebar.value = !$vuetify.breakpoint.md;
|
||||
});
|
||||
|
||||
const cookbookLinks = computed(() => {
|
||||
if (!cookbooks.value) return [];
|
||||
return cookbooks.value.map((cookbook) => {
|
||||
return {
|
||||
icon: $globals.icons.pages,
|
||||
title: cookbook.name,
|
||||
to: `/g/${groupSlug.value}/cookbooks/${cookbook.slug as string}`,
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
const cookbookLinks = computed(() => {
|
||||
if (!cookbooks.value) return [];
|
||||
return cookbooks.value.map((cookbook) => {
|
||||
return {
|
||||
icon: $globals.icons.pages,
|
||||
title: cookbook.name,
|
||||
to: `/g/${groupSlug.value}/cookbooks/${cookbook.slug as string}`,
|
||||
};
|
||||
});
|
||||
});
|
||||
interface Link {
|
||||
insertDivider: boolean;
|
||||
icon: string;
|
||||
title: string;
|
||||
subtitle: string | null;
|
||||
to: string;
|
||||
restricted: boolean;
|
||||
hide: boolean;
|
||||
}
|
||||
|
||||
interface Link {
|
||||
insertDivider: boolean;
|
||||
icon: string;
|
||||
title: string;
|
||||
subtitle: string | null;
|
||||
to: string;
|
||||
restricted: boolean;
|
||||
}
|
||||
const createLinks = computed<Link[]>(() => [
|
||||
{
|
||||
insertDivider: false,
|
||||
icon: $globals.icons.link,
|
||||
title: i18n.tc("general.import"),
|
||||
subtitle: i18n.tc("new-recipe.import-by-url"),
|
||||
to: `/g/${groupSlug.value}/r/create/url`,
|
||||
restricted: true,
|
||||
hide: false,
|
||||
},
|
||||
{
|
||||
insertDivider: false,
|
||||
icon: $globals.icons.fileImage,
|
||||
title: i18n.tc("recipe.create-from-image"),
|
||||
subtitle: i18n.tc("recipe.create-recipe-from-an-image"),
|
||||
to: `/g/${groupSlug.value}/r/create/image`,
|
||||
restricted: true,
|
||||
hide: !showImageImport.value,
|
||||
},
|
||||
{
|
||||
insertDivider: true,
|
||||
icon: $globals.icons.edit,
|
||||
title: i18n.tc("general.create"),
|
||||
subtitle: i18n.tc("new-recipe.create-manually"),
|
||||
to: `/g/${groupSlug.value}/r/create/new`,
|
||||
restricted: true,
|
||||
hide: false,
|
||||
},
|
||||
]);
|
||||
|
||||
const createLinks = computed<Link[]>(() => [
|
||||
{
|
||||
insertDivider: false,
|
||||
icon: $globals.icons.link,
|
||||
title: i18n.tc("general.import"),
|
||||
subtitle: i18n.tc("new-recipe.import-by-url"),
|
||||
to: `/g/${groupSlug.value}/r/create/url`,
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
insertDivider: true,
|
||||
icon: $globals.icons.edit,
|
||||
title: i18n.tc("general.create"),
|
||||
subtitle: i18n.tc("new-recipe.create-manually"),
|
||||
to: `/g/${groupSlug.value}/r/create/new`,
|
||||
restricted: true,
|
||||
},
|
||||
]);
|
||||
const bottomLinks = computed<SidebarLinks>(() => [
|
||||
{
|
||||
icon: $globals.icons.cog,
|
||||
title: i18n.tc("general.settings"),
|
||||
to: "/admin/site-settings",
|
||||
restricted: true,
|
||||
},
|
||||
]);
|
||||
|
||||
const bottomLinks = computed<SidebarLinks>(() => [
|
||||
{
|
||||
icon: $globals.icons.cog,
|
||||
title: i18n.tc("general.settings"),
|
||||
to: "/admin/site-settings",
|
||||
restricted: true,
|
||||
},
|
||||
]);
|
||||
const topLinks = computed<SidebarLinks>(() => [
|
||||
{
|
||||
icon: $globals.icons.silverwareForkKnife,
|
||||
to: `/g/${groupSlug.value}`,
|
||||
title: i18n.tc("general.recipes"),
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.calendarMultiselect,
|
||||
title: i18n.tc("meal-plan.meal-planner"),
|
||||
to: "/group/mealplan/planner/view",
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.formatListCheck,
|
||||
title: i18n.tc("shopping-list.shopping-lists"),
|
||||
to: "/shopping-lists",
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.timelineText,
|
||||
title: i18n.tc("recipe.timeline"),
|
||||
to: `/g/${groupSlug.value}/recipes/timeline`,
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.book,
|
||||
to: `/g/${groupSlug.value}/cookbooks`,
|
||||
title: i18n.tc("cookbook.cookbooks"),
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.organizers,
|
||||
title: i18n.tc("general.organizers"),
|
||||
restricted: true,
|
||||
children: [
|
||||
{
|
||||
icon: $globals.icons.categories,
|
||||
to: `/g/${groupSlug.value}/recipes/categories`,
|
||||
title: i18n.tc("sidebar.categories"),
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.tags,
|
||||
to: `/g/${groupSlug.value}/recipes/tags`,
|
||||
title: i18n.tc("sidebar.tags"),
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.potSteam,
|
||||
to: `/g/${groupSlug.value}/recipes/tools`,
|
||||
title: i18n.tc("tool.tools"),
|
||||
restricted: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
]);
|
||||
|
||||
const topLinks = computed<SidebarLinks>(() => [
|
||||
{
|
||||
icon: $globals.icons.silverwareForkKnife,
|
||||
to: `/g/${groupSlug.value}`,
|
||||
title: i18n.tc("general.recipes"),
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.calendarMultiselect,
|
||||
title: i18n.tc("meal-plan.meal-planner"),
|
||||
to: "/group/mealplan/planner/view",
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.formatListCheck,
|
||||
title: i18n.tc("shopping-list.shopping-lists"),
|
||||
to: "/shopping-lists",
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.timelineText,
|
||||
title: i18n.tc("recipe.timeline"),
|
||||
to: `/g/${groupSlug.value}/recipes/timeline`,
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.book,
|
||||
to: `/g/${groupSlug.value}/cookbooks`,
|
||||
title: i18n.tc("cookbook.cookbooks"),
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.organizers,
|
||||
title: i18n.tc("general.organizers"),
|
||||
restricted: true,
|
||||
children: [
|
||||
{
|
||||
icon: $globals.icons.categories,
|
||||
to: `/g/${groupSlug.value}/recipes/categories`,
|
||||
title: i18n.tc("sidebar.categories"),
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.tags,
|
||||
to: `/g/${groupSlug.value}/recipes/tags`,
|
||||
title: i18n.tc("sidebar.tags"),
|
||||
restricted: true,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.potSteam,
|
||||
to: `/g/${groupSlug.value}/recipes/tools`,
|
||||
title: i18n.tc("tool.tools"),
|
||||
restricted: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
]);
|
||||
|
||||
return {
|
||||
groupSlug,
|
||||
cookbookLinks,
|
||||
createLinks,
|
||||
bottomLinks,
|
||||
topLinks,
|
||||
isAdmin,
|
||||
isOwnGroup,
|
||||
languageDialog,
|
||||
toggleDark,
|
||||
sidebar,
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
return {
|
||||
groupSlug,
|
||||
cookbookLinks,
|
||||
createLinks,
|
||||
bottomLinks,
|
||||
topLinks,
|
||||
isAdmin,
|
||||
isOwnGroup,
|
||||
languageDialog,
|
||||
toggleDark,
|
||||
sidebar,
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1,6 +1,16 @@
|
||||
<template>
|
||||
<v-container class="pa-0">
|
||||
<v-row no-gutters>
|
||||
<v-col cols="8" align-self="center">
|
||||
<Cropper
|
||||
ref="cropper"
|
||||
class="cropper"
|
||||
:src="img"
|
||||
:default-size="defaultSize"
|
||||
:style="`height: ${cropperHeight}; width: ${cropperWidth};`"
|
||||
/>
|
||||
</v-col>
|
||||
<v-spacer />
|
||||
<v-col cols="2" align-self="center">
|
||||
<v-container class="pa-0 mx-0">
|
||||
<v-row v-for="(row, keyRow) in controls" :key="keyRow">
|
||||
@@ -17,16 +27,6 @@
|
||||
</v-row>
|
||||
</v-container>
|
||||
</v-col>
|
||||
<v-spacer />
|
||||
<v-col cols="8" align-self="center">
|
||||
<Cropper
|
||||
ref="cropper"
|
||||
class="cropper"
|
||||
:src="img"
|
||||
:default-size="defaultSize"
|
||||
:style="`height: ${cropperHeight}; width: ${cropperWidth};`"
|
||||
/>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
@@ -162,6 +162,12 @@ export const LOCALES = [
|
||||
progress: 100,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "Belge (Belgian)",
|
||||
value: "fr-BE",
|
||||
progress: 100,
|
||||
dir: "ltr",
|
||||
},
|
||||
{
|
||||
name: "French, Canada",
|
||||
value: "fr-CA",
|
||||
|
||||
21
frontend/lang/dateTimeFormats/fr-BE.json
Normal file
21
frontend/lang/dateTimeFormats/fr-BE.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"short": {
|
||||
"month": "short",
|
||||
"day": "numeric",
|
||||
"weekday": "long"
|
||||
},
|
||||
"medium": {
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"year": "numeric"
|
||||
},
|
||||
"long": {
|
||||
"year": "numeric",
|
||||
"month": "long",
|
||||
"day": "numeric",
|
||||
"weekday": "long",
|
||||
"hour": "numeric",
|
||||
"minute": "numeric"
|
||||
}
|
||||
}
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Voer in met .zip",
|
||||
"create-recipe-from-an-image": "Skep 'n resep vanaf 'n foto",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Grootmaat-URL-invoer",
|
||||
"debug-scraper": "Debug skraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Skep 'n resep deur dit 'n naam te gee. Alle resepte moet unieke name hê.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Import with .zip",
|
||||
"create-recipe-from-an-image": "Create recipe from an image",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Създайте нова рецепта от чернова.",
|
||||
"create-recipes": "Създайте рецепти",
|
||||
"import-with-zip": "Импортирай от .zip",
|
||||
"create-recipe-from-an-image": "Добави рецепта от снимка",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Импортиране на рецепти от линк",
|
||||
"debug-scraper": "Отстраняване на грешки на скрейпъра",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Добави рецепта като предоставиш име. Всички рецепти трябва да имат уникални имена.",
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
"clear": "Neteja",
|
||||
"close": "Tanca",
|
||||
"confirm": "Confirma",
|
||||
"confirm-how-does-everything-look": "How does everything look?",
|
||||
"confirm-how-does-everything-look": "Com es veu tot això?",
|
||||
"confirm-delete-generic": "Esteu segur de voler suprimir-lo?",
|
||||
"copied_message": "S'ha copiat!",
|
||||
"create": "Crea",
|
||||
@@ -248,7 +248,7 @@
|
||||
"private-group": "Grup privat",
|
||||
"private-group-description": "Marcar el grup com a privat afectarà a totes les opcions de visualització pública per defecte. Podeu canviar-les individualment en les opcions de visualització de cada recepta.",
|
||||
"enable-public-access": "Permetre l'accés públic",
|
||||
"enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in",
|
||||
"enable-public-access-description": "Fes les receptes en grup públiques per defecte, i permet a visitants veure receptes sense registrar-se",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes": "Permeteu als usuaris d'altres grups, visualitzar les vostres receptes",
|
||||
"allow-users-outside-of-your-group-to-see-your-recipes-description": "Si ho habiliteu, podreu compartir enllaços públics de receptes específiques sense autoritzar l'usuari. Si està deshabilitat, només podreu compartir amb usuaris del vostre grup o generant enllaços privats",
|
||||
"show-nutrition-information": "Mostra la informació nutricional",
|
||||
@@ -292,7 +292,7 @@
|
||||
"mealplan-updated": "S'ha actualitzat el menú",
|
||||
"no-meal-plan-defined-yet": "No hi ha cap menú planificat",
|
||||
"no-meal-planned-for-today": "No hi han cap menú per a hui",
|
||||
"numberOfDays-hint": "Number of days on page load",
|
||||
"numberOfDays-hint": "Nombre de dies en carregar la pàgina",
|
||||
"numberOfDays-label": "Dies per defecte",
|
||||
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Només s'utilitzaran aquestes categories per als menús",
|
||||
"planner": "Planificador",
|
||||
@@ -323,7 +323,7 @@
|
||||
"meal-plan-rules": "Normes del planificador de menús",
|
||||
"new-rule": "Nova norma",
|
||||
"meal-plan-rules-description": "Podeu crear regles per a la selecció automàtica de receptes per als vostres plans d'àpats. El servidor utilitza aquestes regles per determinar el conjunt aleatori de receptes per seleccionar quan es creen plans d'àpats. Tingueu en compte que si les regles tenen les mateixes restriccions de dia/tipus, les categories de les regles es fusionaran. A la pràctica, no és necessari crear regles duplicades, però és possible fer-ho.",
|
||||
"new-rule-description": "When creating a new rule for a meal plan you can restrict the rule to be applicable for a specific day of the week and/or a specific type of meal. To apply a rule to all days or all meal types you can set the rule to \"Any\" which will apply it to all the possible values for the day and/or meal type.",
|
||||
"new-rule-description": "Quan creis una nova norma per una planificació d'àpats, pots restringir la norma per a què s'apliqui un dia específic de la setmana i/o un tipus d'àpat específic. Per aplicar la norma a tots els dies o a tots els tipus d'àpats, pots configurar la norma a \"Qualsevol\" que l'aplicarà a tots els valors possibles pel dia i/o tipus d'àpat.",
|
||||
"recipe-rules": "Normes per la recepta",
|
||||
"applies-to-all-days": "Aplica a tots els dies",
|
||||
"applies-on-days": "S'aplicarà en {0}s",
|
||||
@@ -364,7 +364,7 @@
|
||||
},
|
||||
"recipe-data-migrations": "Migració de receptes",
|
||||
"recipe-data-migrations-explanation": "Les receptes es poden migrar des d'una altra aplicació suportada cap a Mealie. És una manera genial de començar a utilitzar el Mealie.",
|
||||
"coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.",
|
||||
"coming-from-another-application-or-an-even-older-version-of-mealie": "Véns d'una altra aplicació o una versió més antiga de Mealia? Fés un cop d'ull a migracions i mira si pots importar les teves dades.",
|
||||
"choose-migration-type": "Elegeix un tipus de migració",
|
||||
"tag-all-recipes": "Etiqueta totes les receptes amb {tag-name}",
|
||||
"nextcloud-text": "Les receptes de Nextcloud poden ser importades d'un fitxer ZIP que contingui les dades emmagatzemades en Nextcloud. Segueix l'exemple d'estructura de directori de sota per assegurar que les receptes podran ser importades.",
|
||||
@@ -379,11 +379,11 @@
|
||||
},
|
||||
"myrecipebox": {
|
||||
"title": "La Meva Caixa de Receptes",
|
||||
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
|
||||
"description-long": "Mealie pot importar receptes de My Recipe Box. Exporta les teves receptes en format CSV, després puja el fitxer .csv aquí sota."
|
||||
},
|
||||
"recipekeeper": {
|
||||
"title": "Recipe Keeper",
|
||||
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
|
||||
"description-long": "Mealie pot importar receptes de RecipeKeeper. Exporta les teves receptes en format zip, després puja el fitxer .zip aquí sota."
|
||||
}
|
||||
},
|
||||
"new-recipe": {
|
||||
@@ -449,8 +449,8 @@
|
||||
"ingredients": "Ingredients",
|
||||
"insert-ingredient": "Afegiu ingredient",
|
||||
"insert-section": "Insereix una secció",
|
||||
"insert-above": "Insert Above",
|
||||
"insert-below": "Insert Below",
|
||||
"insert-above": "Insereix a sobre",
|
||||
"insert-below": "Insereix a sota",
|
||||
"instructions": "Instruccions",
|
||||
"key-name-required": "Es requereix un nom de clau",
|
||||
"landscape-view-coming-soon": "Vista apaïsada (aviat)",
|
||||
@@ -500,11 +500,11 @@
|
||||
"add-to-timeline": "Afegir a la cronologia",
|
||||
"recipe-added-to-list": "Recepta afegida a la llista",
|
||||
"recipes-added-to-list": "Receptes afegides a la llista",
|
||||
"successfully-added-to-list": "Successfully added to list",
|
||||
"successfully-added-to-list": "Exitosament afegit a la llista",
|
||||
"recipe-added-to-mealplan": "Recepta afegida al menú",
|
||||
"failed-to-add-recipes-to-list": "S'ha produït un error al intentar afegir la recepta a la llista",
|
||||
"failed-to-add-recipe-to-mealplan": "S'ha produït un error afegint la recepta al menú",
|
||||
"failed-to-add-to-list": "Failed to add to list",
|
||||
"failed-to-add-to-list": "No s'ha pogut afegir a la llista",
|
||||
"yield": "Racions",
|
||||
"quantity": "Quantitat",
|
||||
"choose-unit": "Tria el tipus d'unitat",
|
||||
@@ -537,14 +537,14 @@
|
||||
"edit-timeline-event": "Edita l'esdeveniment de la cronologia",
|
||||
"timeline": "Cronologia",
|
||||
"timeline-is-empty": "Encara no hi ha res a la cronologia. Prova de fer aquesta recepta!",
|
||||
"timeline-no-events-found-try-adjusting-filters": "No events found. Try adjusting your search filters.",
|
||||
"group-global-timeline": "{groupName} Global Timeline",
|
||||
"timeline-no-events-found-try-adjusting-filters": "No s'han trobat esdeveniments. Prova a ajustar els filtres de cerca.",
|
||||
"group-global-timeline": "Cronologia global de {groupName}",
|
||||
"open-timeline": "Obrir la cronologia",
|
||||
"made-this": "Ho he fet",
|
||||
"how-did-it-turn-out": "Com ha sortit?",
|
||||
"user-made-this": "{user} ha fet això",
|
||||
"last-made-date": "Última vegada feta {date}",
|
||||
"api-extras-description": "Recipes extras are a key feature of the Mealie API. They allow you to create custom JSON key/value pairs within a recipe, to reference from 3rd party applications. You can use these keys to provide information, for example to trigger automations or custom messages to relay to your desired device.",
|
||||
"api-extras-description": "Els extres de receptes són una funcionalitat clau de l'API de Mealie. Permeten crear parells clau/valor JSON personalitzats dins una recepta, per referenciar-los des d'aplicacions de tercers. Pots emprar aquestes claus per proveir informació, per exemple per a desencadenar automatitzacions o missatges personlitzats per a propagar al teu dispositiu desitjat.",
|
||||
"message-key": "Clau del missatge",
|
||||
"parse": "Analitzar",
|
||||
"attach-images-hint": "Afegeix imatges arrossegant i deixant anar la imatge a l'editor",
|
||||
@@ -561,15 +561,20 @@
|
||||
"create-recipe-description": "Crea una nova recepta des de zero.",
|
||||
"create-recipes": "Crea Receptes",
|
||||
"import-with-zip": "Importar amb un .zip",
|
||||
"create-recipe-from-an-image": "Crea la recepta a partir d'una imatge",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Importació d'URL en massa",
|
||||
"debug-scraper": "Rastrejador de depuració",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crea la recepta proporcionant-ne un nom. Totes les receptes han de tenir un nom únic.",
|
||||
"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-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-a-lot-of-recipes": "Tens moltes receptes a processar alhora?",
|
||||
"scrape-recipe-suggest-bulk-importer": "Prova l'importador a granel",
|
||||
"import-original-keywords-as-tags": "Importa les paraules clau originals com a tags",
|
||||
"stay-in-edit-mode": "Segueix en el mode d'edició",
|
||||
"import-from-zip": "Importa des d'un ZIP",
|
||||
@@ -586,8 +591,8 @@
|
||||
"report-deletion-failed": "No s'ha pogut suprimir l'informe",
|
||||
"recipe-debugger": "Depuradora de receptes",
|
||||
"recipe-debugger-description": "Agafa l'URL de la recepta que vols depurar i enganxa-la aquí. L'URL serà reastrejada pel rastrejador de receptes i es mostraran els resultats. Si no veieu cap dada retornada, el lloc que esteu provant de rastrejar no és compatible amb Mealie ni la seva biblioteca de rastreig.",
|
||||
"use-openai": "Use OpenAI",
|
||||
"recipe-debugger-use-openai-description": "Use OpenAI to parse the results instead of relying on the scraper library. When creating a recipe via URL, this is done automatically if the scraper library fails, but you may test it manually here.",
|
||||
"use-openai": "Fes servir OpenAI",
|
||||
"recipe-debugger-use-openai-description": "Fes servir OpenAI per processar els resultats en comptes d'emprar la llibreria de processat. Quan creis una recepta via URL, es fa automàticament si la llibreria falla, però ho pots provar manualment aquí.",
|
||||
"debug": "Depuració",
|
||||
"tree-view": "Vista en arbre",
|
||||
"recipe-yield": "Rendiment de la recepta",
|
||||
@@ -598,19 +603,19 @@
|
||||
"nextStep": "Següent pas",
|
||||
"recipe-actions": "Accions de la Recepta",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"experimental-alert-text": "Mealie fa servir processament de llenguatge natural per processar i crear unitats i elements de menjar pels ingredients de la teva recepta. Aquesta funcionalitat és experimental i pot no funcionar com s'espera. Si prefereixes no fer servir els resultats processats, pots seleccionar \"Cancel·la\" i els canvis no es guardaran.",
|
||||
"ingredient-parser": "Processador d'ingredients",
|
||||
"explanation": "Per fer servir el processador d'aliments, clica el botó \"Processa tot\" per començar el procés. Un cop els ingredients processats estiguin disponibles, pots revisar-los per comprovar que s'hagin processat degudament. La confiança del model és mostrada a la dreta del títol de l'element. Aquesta puntuació es la mitja de totes les puntuacions individuals i pot no ser del tot precisa.",
|
||||
"alerts-explainer": "Es mostraran alertes si un menjar o unitat coincident es troben però no existeixen a la base de dades.",
|
||||
"select-parser": "Selecciona processador",
|
||||
"natural-language-processor": "Processador de llenguatge natural",
|
||||
"brute-parser": "Processador brut",
|
||||
"openai-parser": "Analitzador d'OpenAI",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
"parse-all": "Processa tot",
|
||||
"no-unit": "Sense unitat",
|
||||
"missing-unit": "Crear unitat que manca: {unit}",
|
||||
"missing-food": "Crear menjar que manca: {food}",
|
||||
"no-food": "Sense menjar"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
@@ -640,7 +645,7 @@
|
||||
"backup-created-at-response-export_path": "S'ha creat una còpia de seguretat a {path}",
|
||||
"backup-deleted": "Còpia de seguretat suprimida",
|
||||
"restore-success": "La restauració s'ha dut a terme correctament",
|
||||
"restore-fail": "Restore failed. Check your server logs for more details",
|
||||
"restore-fail": "Restauració fallida. Comprova els logs del servidor per més detalls",
|
||||
"backup-tag": "Etiqueta de la còpia de seguretat",
|
||||
"create-heading": "Crea una còpia de seguretat",
|
||||
"delete-backup": "Esborra la còpia de seguretat",
|
||||
@@ -649,7 +654,7 @@
|
||||
"import-summary": "Resum de la importació",
|
||||
"partial-backup": "Còpia de seguretat parcial",
|
||||
"unable-to-delete-backup": "No s'ha pogut suprimir la còpia.",
|
||||
"experimental-description": "Backups are total snapshots of the database and data directory of the site. This includes all data and cannot be set to exclude subsets of data. You can think of this as a snapshot of Mealie at a specific time. These serve as a database agnostic way to export and import data, or back up the site to an external location.",
|
||||
"experimental-description": "Les còpies de seguretat són captures instantànies totals de la base de dades i el directori de dades de la pàgina. Això inclou totes les dades i no es pot configurar per excloure subconjunts de dades. Pots conceptualiztar-ho com una captura de Mealie en un moment concret. Permeten poder exportar i importar dades d'una manera agnòstica de bases de dades, o per fer còpies de seguretat de la pàgina a localitzacions externes.",
|
||||
"backup-restore": "Restaura la còpia de seguretat",
|
||||
"back-restore-description": "Restaurar aquesta còpia de seguretat sobreescriurà totes les dades actuals de la teva base de dades i qualsevol directori i els substituirà amb el contingut d'aquesta còpia de seguretat. {cannot-be-undone} Si la restauració es duu a terme correctament, se us tancarà la sessió.",
|
||||
"cannot-be-undone": "Aquesta acció no es pot desfer. Utilitza-la amb precaució.",
|
||||
@@ -744,18 +749,18 @@
|
||||
"description": "Els webhooks definits a sota s'executaran quan es defineixi un menú pel dia. En un temps estipulat, els webhooks s'enviaran amb les dades de la recepta que estigui programada pel dia. L'execució dels webhooks no és exacta. Els webhooks s'executen en un interval de 5 minuts, és a dir, que s'executaran en un interval de +/- 5 minuts del temps estipulat."
|
||||
},
|
||||
"bug-report": "Informe d'errors",
|
||||
"bug-report-information": "Use this information to report a bug. Providing details of your instance to developers is the best way to get your issues resolved quickly.",
|
||||
"bug-report-information": "Fes servir aquesta informació per reportar un bug. Proporcionar detalls de la teva instància als desenvolupadors és la millor manera de resoldre't els problemes ràpidament.",
|
||||
"tracker": "Tracker",
|
||||
"configuration": "Configuració",
|
||||
"docker-volume": "Volum de Docker",
|
||||
"docker-volume-help": "Mealie requires that the frontend container and the backend share the same docker volume or storage. This ensures that the frontend container can properly access the images and assets stored on disk.",
|
||||
"volumes-are-misconfigured": "Volumes are misconfigured.",
|
||||
"volumes-are-configured-correctly": "Volumes are configured correctly.",
|
||||
"status-unknown-try-running-a-validation": "Status Unknown. Try running a validation.",
|
||||
"validate": "Validate",
|
||||
"docker-volume-help": "Mealie requereix que els contenidors del frontend i del backend comparteixin el mateix volum docker o emmagatzematge. Això assegura que el contenidor del frontend pot accedir correctament les imatges i béns guardats en disc.",
|
||||
"volumes-are-misconfigured": "Els volums no estan ben configurats.",
|
||||
"volumes-are-configured-correctly": "Els volums estan ben configurats.",
|
||||
"status-unknown-try-running-a-validation": "Estat desconegut. Prova a executar una validació.",
|
||||
"validate": "Valida",
|
||||
"email-configuration-status": "Estat de la configuració del correu electrònic",
|
||||
"email-configured": "Correu electrònic configurat",
|
||||
"email-test-results": "Email Test Results",
|
||||
"email-test-results": "Resultats de la prova de correu electrònic",
|
||||
"ready": "Llest",
|
||||
"not-ready": "No està llest - Comprova les variables d'entorn",
|
||||
"succeeded": "Va tenir èxit",
|
||||
@@ -767,14 +772,14 @@
|
||||
"secure-site": "Web Segur",
|
||||
"secure-site-error-text": "Allotja mitjançant localhost o assegura amb https. És possible que el porta-retalls i API addicionals del navegador no funcionin.",
|
||||
"secure-site-success-text": "El web és accedit amb localhost o https",
|
||||
"server-side-base-url": "Server Side Base URL",
|
||||
"server-side-base-url-error-text": "`BASE_URL` is still the default value on API Server. This will cause issues with notifications links generated on the server for emails, etc.",
|
||||
"server-side-base-url-success-text": "Server Side URL does not match the default",
|
||||
"ldap-ready": "LDAP Ready",
|
||||
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
|
||||
"server-side-base-url": "URL base de part del servidor",
|
||||
"server-side-base-url-error-text": "'BASE_URL' és encara el valor per defecte a l'API de servidor. Això causarà errors amb enllaços de notificació generats al servidor per correus electrònics, etc.",
|
||||
"server-side-base-url-success-text": "L'URL de part del servidor no correspon amb el predeterminat",
|
||||
"ldap-ready": "LDAP a punt",
|
||||
"ldap-ready-error-text": "No tots els valors LDAP estan configurats. Això es pot ignorar si no es fa servir autentificació LDAP.",
|
||||
"ldap-ready-success-text": "Les variables requerides per LDAP estan establertes.",
|
||||
"build": "Versió de compilació",
|
||||
"recipe-scraper-version": "Recipe Scraper Version",
|
||||
"recipe-scraper-version": "Versió de processador de receptes",
|
||||
"oidc-ready": "OIDC Llest",
|
||||
"oidc-ready-error-text": "No tots els valors d'OIDC estan configurats. Es pot ignorar si no s'està utilitzant l'autenticació d'OIDC.",
|
||||
"oidc-ready-success-text": "Les variables requerides per OICD estan establertes.",
|
||||
@@ -806,15 +811,15 @@
|
||||
"reorder-labels": "Canvia d'ordre les etiquetes",
|
||||
"uncheck-all-items": "Desselecciona tots els ítems",
|
||||
"check-all-items": "Selecciona tots els ítems",
|
||||
"linked-recipes-count": "No Linked Recipes|One Linked Recipe|{count} Linked Recipes",
|
||||
"items-checked-count": "No items checked|One item checked|{count} items checked",
|
||||
"linked-recipes-count": "Cap recepta enllaçada|Una recepta enllaçada|{count} receptes enllaçades",
|
||||
"items-checked-count": "Cap element marcat|Un element marcat|{count} elements marcats",
|
||||
"no-label": "Sense etiqueta",
|
||||
"completed-on": "Completat el {date}",
|
||||
"you-are-offline": "You are offline",
|
||||
"you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.",
|
||||
"are-you-sure-you-want-to-check-all-items": "Are you sure you want to check all items?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Are you sure you want to uncheck all items?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Are you sure you want to delete all checked items?"
|
||||
"you-are-offline": "Estàs desconnectat",
|
||||
"you-are-offline-description": "No totes les funcionalitats són disponibles desconnectat. Encara pots afegir, modificar i eliminar elements, però no podràs sincronitzar els teus canvis amb el servidor fins que et tornis a connectar.",
|
||||
"are-you-sure-you-want-to-check-all-items": "Estàs segur que vols marcar tots els elements?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Estàs segur que vols desmarcar tots els elements?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Estàs segur que vols eliminar tots els elements marcats?"
|
||||
},
|
||||
"sidebar": {
|
||||
"all-recipes": "Receptes",
|
||||
@@ -898,7 +903,7 @@
|
||||
"or": "o",
|
||||
"logout": "Tanca la sessió",
|
||||
"manage-users": "Gestionar usuaris",
|
||||
"manage-users-description": "Create and manage users.",
|
||||
"manage-users-description": "Crea i gestiona usuaris.",
|
||||
"new-password": "Nova contrasenya",
|
||||
"new-user": "Nou Usuari",
|
||||
"password-has-been-reset-to-the-default-password": "S'ha restablert la contrasenya al seu valor per defecte",
|
||||
@@ -951,21 +956,21 @@
|
||||
"user-management": "Gestió d'usuaris",
|
||||
"reset-locked-users": "Reinicia els usuaris bloquejats",
|
||||
"admin-user-creation": "Creació d'un usuari administrador",
|
||||
"admin-user-management": "Admin User Management",
|
||||
"admin-user-management": "Gestió d'usuari administrador",
|
||||
"user-details": "Detalls de l'usuari",
|
||||
"user-name": "Nom de l'usuari",
|
||||
"authentication-method": "Authentication Method",
|
||||
"authentication-method": "Mètode d'autentificació",
|
||||
"authentication-method-hint": "This specifies how a user will authenticate with Mealie. If you're not sure, choose 'Mealie",
|
||||
"permissions": "Permisos",
|
||||
"administrator": "Administrador",
|
||||
"user-can-invite-other-to-group": "User can invite others to group",
|
||||
"user-can-manage-group": "User can manage group",
|
||||
"user-can-organize-group-data": "User can organize group data",
|
||||
"enable-advanced-features": "Enable advanced features",
|
||||
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
|
||||
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!",
|
||||
"user-can-invite-other-to-group": "L'usuari pot convidar a altres al grup",
|
||||
"user-can-manage-group": "L'usuari pot gestionar el grup",
|
||||
"user-can-organize-group-data": "L'usuari pot organitzar dades del grup",
|
||||
"enable-advanced-features": "Activa funcionalitats avançades",
|
||||
"it-looks-like-this-is-your-first-time-logging-in": "Sembla que és el primer cop que et registres.",
|
||||
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "No vols tornar a veure això? Assegura't de canviar el teu correu electrònic a les configuracions del teu usuari!",
|
||||
"forgot-password": "Contrasenya oblidada",
|
||||
"forgot-password-text": "Please enter your email address and we will send you a link to reset your password.",
|
||||
"forgot-password-text": "Introdueix siusplau la teva adreça de correu electrònic i t'enviarem un enllaç per restablir la teva contrassenya.",
|
||||
"changes-reflected-immediately": "Els canvis en aquest usuari s'actualitzaran immediatament."
|
||||
},
|
||||
"language-dialog": {
|
||||
@@ -985,21 +990,21 @@
|
||||
"source-food": "Aliment d'Origen",
|
||||
"target-food": "Aliment de Destí",
|
||||
"create-food": "Crear Aliment",
|
||||
"food-label": "Food Label",
|
||||
"food-label": "Etiqueta de menjar",
|
||||
"edit-food": "Editar Aliment",
|
||||
"food-data": "Food Data",
|
||||
"food-data": "Dades de menjar",
|
||||
"example-food-singular": "p. ex.: Ceba",
|
||||
"example-food-plural": "p. ex.: Cebes",
|
||||
"label-overwrite-warning": "This will assign the chosen label to all selected foods and potentially overwrite your existing labels.",
|
||||
"on-hand-checkbox-label": "Setting this flag will make this food unchecked by default when adding a recipe to a shopping list."
|
||||
"label-overwrite-warning": "Això assignarà l'etiqueta escollida als menjars seleccionats i pot sobreescriure potencialment etiquetes ja existents.",
|
||||
"on-hand-checkbox-label": "Aplicar aquest atribut farà que aquest menjar no es marqui per defecte quan afegeixis una recepta a la llista de la compra."
|
||||
},
|
||||
"units": {
|
||||
"seed-dialog-text": "Afegeix a la base de dades les unitats més comunes en el vostre idioma.",
|
||||
"combine-unit-description": "Combining the selected units will merge the Source Unit and Target Unit into a single unit. The {source-unit-will-be-deleted} and all of the references to the Source Unit will be updated to point to the Target Unit.",
|
||||
"combine-unit-description": "Combinar les unitats seleccionades ajuntarà la Unitat Origen amb la Unitat Objectiu en una sola unitat. La {source-unit-will-be-deleted} i totes les referències a la Unitat Origen s'actualitzaran per referir a la Unitat Objectiu.",
|
||||
"combine-unit": "Combina Unitats",
|
||||
"source-unit": "Unitat Origen",
|
||||
"target-unit": "Unitat Destí",
|
||||
"merging-unit-into-unit": "Merging {0} into {1}",
|
||||
"merging-unit-into-unit": "Fusionant {0} a {1}",
|
||||
"create-unit": "Crea la unitat",
|
||||
"abbreviation": "Abreviatura",
|
||||
"plural-abbreviation": "Abreviatura del Plural",
|
||||
@@ -1007,77 +1012,77 @@
|
||||
"display-as-fraction": "Mostra com una Fracció",
|
||||
"use-abbreviation": "Utilitza Abreviatura",
|
||||
"edit-unit": "Editar Unitat",
|
||||
"unit-data": "Unit Data",
|
||||
"use-abbv": "Use Abbv.",
|
||||
"fraction": "Fraction",
|
||||
"example-unit-singular": "ex: Tablespoon",
|
||||
"example-unit-plural": "ex: Tablespoons",
|
||||
"unit-data": "Dades d'unitat",
|
||||
"use-abbv": "Fes servir abreviació",
|
||||
"fraction": "Fracció",
|
||||
"example-unit-singular": "ex: Cullerada sopera",
|
||||
"example-unit-plural": "ex: Cullerades soperes",
|
||||
"example-unit-abbreviation-singular": "ex: Tbsp",
|
||||
"example-unit-abbreviation-plural": "ex: Tbsps"
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Afegeix a la base de dades etiquetes comunes en el vostre idioma.",
|
||||
"edit-label": "Edit Label",
|
||||
"new-label": "New Label",
|
||||
"labels": "Labels",
|
||||
"edit-label": "Edita etiqueta",
|
||||
"new-label": "Nova etiqueta",
|
||||
"labels": "Etiquetes",
|
||||
"assign-label": "Assigna L'etiqueta"
|
||||
},
|
||||
"recipes": {
|
||||
"purge-exports": "Purge Exports",
|
||||
"are-you-sure-you-want-to-delete-all-export-data": "Are you sure you want to delete all export data?",
|
||||
"confirm-delete-recipes": "Are you sure you want to delete the following recipes? This action cannot be undone.",
|
||||
"the-following-recipes-selected-length-will-be-exported": "The following recipes ({0}) will be exported.",
|
||||
"settings-chosen-explanation": "Settings chosen here, excluding the locked option, will be applied to all selected recipes.",
|
||||
"selected-length-recipe-s-settings-will-be-updated": "{count} recipe(s) settings will be updated.",
|
||||
"recipe-data": "Recipe Data",
|
||||
"recipe-data-description": "Use this section to manage the data associated with your recipes. You can perform several bulk actions on your recipes including exporting, deleting, tagging, and assigning categories.",
|
||||
"recipe-columns": "Recipe Columns",
|
||||
"data-exports-description": "This section provides links to available exports that are ready to download. These exports do expire, so be sure to grab them while they're still available.",
|
||||
"data-exports": "Data Exports",
|
||||
"tag": "Tag",
|
||||
"categorize": "Categorize",
|
||||
"update-settings": "Update Settings",
|
||||
"tag-recipes": "Tag Recipes",
|
||||
"categorize-recipes": "Categorize Recipes",
|
||||
"export-recipes": "Export Recipes",
|
||||
"delete-recipes": "Delete Recipes",
|
||||
"source-unit-will-be-deleted": "Source Unit will be deleted"
|
||||
"purge-exports": "Purga exportacions",
|
||||
"are-you-sure-you-want-to-delete-all-export-data": "Estàs segur que vols esborrar totes les dades d'exportació?",
|
||||
"confirm-delete-recipes": "Estàs segur que vols esborrar les següents receptes? Aquesta acció no es pot desfer.",
|
||||
"the-following-recipes-selected-length-will-be-exported": "Les següents receptes ({0}) seran exportades.",
|
||||
"settings-chosen-explanation": "Configuracions escollides aquí, excloent la opció bloquejada, s'aplicaran a totes les receptes seleccionades.",
|
||||
"selected-length-recipe-s-settings-will-be-updated": "{count} configuració(ns) de recepte(s) seran actualitzades.",
|
||||
"recipe-data": "Dades de recepta",
|
||||
"recipe-data-description": "Empra aquesta secció per gestionar les dades associades a les teves receptes. Pots fer diverses accions en lot a les teves receptes, inclosos exportar, esborrar, etiquetar i assignar categories.",
|
||||
"recipe-columns": "Columnes de recepta",
|
||||
"data-exports-description": "Aquesta secció ofereix enllaços a exportacions disponibles ja preparades per a descarregar. Aquestes exportacions caduquen, així que assegura't agafar-les quan encara estan disponibles.",
|
||||
"data-exports": "Exportacions de dades",
|
||||
"tag": "Etiqueta",
|
||||
"categorize": "Categoritza",
|
||||
"update-settings": "Actualitza configuracions",
|
||||
"tag-recipes": "Etiqueta receptes",
|
||||
"categorize-recipes": "Categoritza receptes",
|
||||
"export-recipes": "Exporta receptes",
|
||||
"delete-recipes": "Esborra receptes",
|
||||
"source-unit-will-be-deleted": "Unitat Origen serà eliminada"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
"recipe-actions-data": "Dades d'accions de receptes",
|
||||
"new-recipe-action": "Nova acció de receptes",
|
||||
"edit-recipe-action": "Edita acció de receptes",
|
||||
"action-type": "Tipus d'acció"
|
||||
},
|
||||
"create-alias": "Create Alias",
|
||||
"manage-aliases": "Manage Aliases",
|
||||
"create-alias": "Crea un àlies",
|
||||
"manage-aliases": "Gestiona els àlies",
|
||||
"seed-data": "Dades d'exemple",
|
||||
"seed": "Seed",
|
||||
"data-management": "Data Management",
|
||||
"data-management-description": "Select which data set you want to make changes to.",
|
||||
"select-data": "Select Data",
|
||||
"select-language": "Select Language",
|
||||
"columns": "Columns",
|
||||
"combine": "Combine",
|
||||
"seed": "Llavor",
|
||||
"data-management": "Gestió de dades",
|
||||
"data-management-description": "Selecciona a quin conjunt de dades hi vols fer canvis.",
|
||||
"select-data": "Selecciona dades",
|
||||
"select-language": "Selecciona l'idioma",
|
||||
"columns": "Columnes",
|
||||
"combine": "Combina",
|
||||
"categories": {
|
||||
"edit-category": "Edit Category",
|
||||
"new-category": "New Category",
|
||||
"category-data": "Category Data"
|
||||
"edit-category": "Edita categoria",
|
||||
"new-category": "Nova categoria",
|
||||
"category-data": "Dades de categoria"
|
||||
},
|
||||
"tags": {
|
||||
"new-tag": "New Tag",
|
||||
"edit-tag": "Edit Tag",
|
||||
"tag-data": "Tag Data"
|
||||
"new-tag": "Nova etiqueta",
|
||||
"edit-tag": "Edita etiqueta",
|
||||
"tag-data": "Dades d'etiqueta"
|
||||
},
|
||||
"tools": {
|
||||
"new-tool": "New Tool",
|
||||
"edit-tool": "Edit Tool",
|
||||
"tool-data": "Tool Data"
|
||||
"new-tool": "Nova eina",
|
||||
"edit-tool": "Edita eina",
|
||||
"tool-data": "Dades d'eina"
|
||||
}
|
||||
},
|
||||
"user-registration": {
|
||||
"user-registration": "Registre d'usuari",
|
||||
"registration-success": "Registration Success",
|
||||
"registration-success": "Registre exitós",
|
||||
"join-a-group": "Uneix-te a un grup",
|
||||
"create-a-new-group": "Crea un grup nou",
|
||||
"provide-registration-token-description": "Per favor, proporciona el token associat al grup al qual voleu afegir-vos. Podeu obtindre'l d'un altre membre del grup.",
|
||||
@@ -1091,7 +1096,7 @@
|
||||
"group-name-is-taken": "Aquest nom ja existeix per a un altre grup",
|
||||
"username-is-taken": "Aquest nom ja existeix per a un altre usuari",
|
||||
"email-is-taken": "Aquest email ja existeix per a un altre usuari",
|
||||
"this-field-is-required": "This Field is Required"
|
||||
"this-field-is-required": "Aquest camp és obligatori"
|
||||
},
|
||||
"export": {
|
||||
"export": "Exporta",
|
||||
@@ -1124,134 +1129,134 @@
|
||||
},
|
||||
"ocr-editor": {
|
||||
"ocr-editor": "Editor OCR",
|
||||
"toolbar": "Toolbar",
|
||||
"toolbar": "Barra d'eines",
|
||||
"selection-mode": "Mode de selecció",
|
||||
"pan-and-zoom-picture": "Amplia la imatge",
|
||||
"split-text": "Divideix el text",
|
||||
"preserve-line-breaks": "Preserveu els salts de línia originals",
|
||||
"split-by-block": "Dividiu per blocs de text",
|
||||
"flatten": "Flatten regardless of original formating",
|
||||
"flatten": "Aplana sense considerar el format original",
|
||||
"help": {
|
||||
"help": "Help",
|
||||
"mouse-modes": "Mouse modes",
|
||||
"help": "Ajuda",
|
||||
"mouse-modes": "Modes de ratolí",
|
||||
"selection-mode": "Mode de selecció (predeterminat)",
|
||||
"selection-mode-desc": "The selection mode is the main mode that can be used to enter data:",
|
||||
"selection-mode-desc": "El mode de selecció és el principal mode a fer servir per introduïr dades:",
|
||||
"selection-mode-steps": {
|
||||
"draw": "Draw a rectangle on the text you want to select.",
|
||||
"click": "Click on any field on the right and then click back on the rectangle above the image.",
|
||||
"result": "The selected text will appear inside the previously selected field."
|
||||
"draw": "Dibuixa un rectangle al text que vulguis seleccionar.",
|
||||
"click": "Clica a qualsevol camp a la dreta i després clica al rectangle de sobre la imatge.",
|
||||
"result": "El text seleccionat apareixerà dins del camp prèviament seleccionat."
|
||||
},
|
||||
"pan-and-zoom-mode": "Pan and Zoom Mode",
|
||||
"pan-and-zoom-desc": "Select pan and zoom by clicking the icon. This mode allows to zoom inside the image and move around to make using big images easier.",
|
||||
"split-text-mode": "Split Text modes",
|
||||
"pan-and-zoom-mode": "Mode Pan i Zoom",
|
||||
"pan-and-zoom-desc": "Selecciona Pan i Zoom clicant-ne la icona. Aquest mode et permet fer zoom dins la imatge i moure-t'hi per facilitar l'ús d'imatges grosses.",
|
||||
"split-text-mode": "Modes de text partit",
|
||||
"split-modes": {
|
||||
"line-mode": "Line mode (default)",
|
||||
"line-mode-desc": "In line mode, the text will be propagated by keeping the original line breaks. This mode is useful when using bulk add on a list of ingredients where one ingredient is one line.",
|
||||
"block-mode": "Block mode",
|
||||
"block-mode-desc": "In block mode, the text will be split in blocks. This mode is useful when bulk adding instructions that are usually written in paragraphs.",
|
||||
"flat-mode": "Flat mode",
|
||||
"flat-mode-desc": "In flat mode, the text will be added to the selected recipe field with no line breaks."
|
||||
"line-mode": "Mode línia (per defecte)",
|
||||
"line-mode-desc": "En mode línia, el text es propagarà mantenint els salts de línia originals. Aquest mode és útil afegint a lots a llistes d'ingredients on cada ingredient és a una línia.",
|
||||
"block-mode": "Mode bloc",
|
||||
"block-mode-desc": "En mode bloc, el text es partirà en blocs. Aquest mode és útil afegint instruccions en lot normalment escrites en paràgrafs.",
|
||||
"flat-mode": "Mode pla",
|
||||
"flat-mode-desc": "En mode pla, el text s'afegirà al camp seleccionat de la recepta sense salts de línia."
|
||||
}
|
||||
}
|
||||
},
|
||||
"admin": {
|
||||
"maintenance": {
|
||||
"storage-details": "Storage Details",
|
||||
"page-title": "Site Maintenance",
|
||||
"summary-title": "Summary",
|
||||
"button-label-get-summary": "Get Summary",
|
||||
"button-label-open-details": "Details",
|
||||
"info-description-data-dir-size": "Data Directory Size",
|
||||
"info-description-log-file-size": "Log File Size",
|
||||
"info-description-cleanable-directories": "Cleanable Directories",
|
||||
"info-description-cleanable-images": "Cleanable Images",
|
||||
"storage-details": "Detalls d'emmagatzematge",
|
||||
"page-title": "Manteniment de la pàgina",
|
||||
"summary-title": "Resum",
|
||||
"button-label-get-summary": "Obtenir resum",
|
||||
"button-label-open-details": "Detalls",
|
||||
"info-description-data-dir-size": "Tamany del directori de dades",
|
||||
"info-description-log-file-size": "Tamany del fitxer de log",
|
||||
"info-description-cleanable-directories": "Directoris netejables",
|
||||
"info-description-cleanable-images": "Imatges netejables",
|
||||
"storage": {
|
||||
"title-temporary-directory": "Temporary Directory (.temp)",
|
||||
"title-backups-directory": "Backups Directory (backups)",
|
||||
"title-groups-directory": "Groups Directory (groups)",
|
||||
"title-recipes-directory": "Recipes Directory (recipes)",
|
||||
"title-user-directory": "User Directory (user)"
|
||||
"title-temporary-directory": "Directori temporal (.temp)",
|
||||
"title-backups-directory": "Directori de còpies de seguretat (backups)",
|
||||
"title-groups-directory": "Directori de grups (groups)",
|
||||
"title-recipes-directory": "Directori de receptes (recipes)",
|
||||
"title-user-directory": "Direcori d'usuari (user)"
|
||||
},
|
||||
"action-delete-log-files-name": "Delete Log Files",
|
||||
"action-delete-log-files-description": "Deletes all the log files",
|
||||
"action-clean-directories-name": "Clean Directories",
|
||||
"action-clean-directories-description": "Removes all the recipe folders that are not valid UUIDs",
|
||||
"action-clean-temporary-files-name": "Clean Temporary Files",
|
||||
"action-clean-temporary-files-description": "Removes all files and folders in the .temp directory",
|
||||
"action-clean-images-name": "Clean Images",
|
||||
"action-clean-images-description": "Removes all the images that don't end with .webp",
|
||||
"actions-description": "Maintenance actions are {destructive_in_bold} and should be used with caution. Performing any of these actions is {irreversible_in_bold}.",
|
||||
"actions-description-destructive": "destructive",
|
||||
"action-delete-log-files-name": "Esborra fitxers log",
|
||||
"action-delete-log-files-description": "Esborra tots els fitxers log",
|
||||
"action-clean-directories-name": "Neteja directoris",
|
||||
"action-clean-directories-description": "Esborra totes les carpetes de receptes que no són UUIDs vàlids",
|
||||
"action-clean-temporary-files-name": "Esborra fitxers temporals",
|
||||
"action-clean-temporary-files-description": "Esborra tots els fitxers i carpetes del directori .temp",
|
||||
"action-clean-images-name": "Neteja imatges",
|
||||
"action-clean-images-description": "Esborra totes les imatges que no acaben en .webp",
|
||||
"actions-description": "Les accions de manteniment són {destructive_in_bold} i s'han d'emprar amb cautela. Fer qualsevol d'aquestes accions és {irreversible_in_bold}.",
|
||||
"actions-description-destructive": "destructiu",
|
||||
"actions-description-irreversible": "irreversible",
|
||||
"logs-action-refresh": "Refresh Logs",
|
||||
"logs-page-title": "Mealie Logs",
|
||||
"logs-tail-lines-label": "Tail Lines"
|
||||
"logs-action-refresh": "Actualitza logs",
|
||||
"logs-page-title": "Logs de Mealie",
|
||||
"logs-tail-lines-label": "Línies de la cua"
|
||||
},
|
||||
"mainentance": {
|
||||
"actions-title": "Actions"
|
||||
"actions-title": "Accions"
|
||||
},
|
||||
"ingredients-natural-language-processor": "Ingredients Natural Language Processor",
|
||||
"ingredients-natural-language-processor-explanation": "Mealie uses Conditional Random Fields (CRFs) for parsing and processing ingredients. The model used for ingredients is based off a data set of over 100,000 ingredients from a dataset compiled by the New York Times. Note that as the model is trained in English only, you may have varied results when using the model in other languages. This page is a playground for testing the model.",
|
||||
"ingredients-natural-language-processor-explanation-2": "It's not perfect, but it yields great results in general and is a good starting point for manually parsing ingredients into individual fields. Alternatively, you can also use the \"Brute\" processor that uses a pattern matching technique to identify ingredients.",
|
||||
"ingredients-natural-language-processor": "Processador de llenguatge natural d'ingredients",
|
||||
"ingredients-natural-language-processor-explanation": "Mealie fa servir Camps Condicionals Aleatoris (CRFs) per processar ingredients. El model emprat es basa en un conjunt de dades de més de 100.000 ingredients d'un conjunt de dades compilat pel New York Times. Noti's que aquest model s'ha entrenat només en anglès, pots tenir resultats variats fent-lo servir en altres idiomes. Aquesta pàgina és un espai de joc per provar el model.",
|
||||
"ingredients-natural-language-processor-explanation-2": "No és perfecte, però ofereix bons resultats en general i és un bon punt de partida per processar manualment ingredients a camps individuals. Alternativament, també pots fer servir el processador \"brut\" que fa servir una tècnica de reconeixement de patrons per identificar ingredients.",
|
||||
"nlp": "NLP",
|
||||
"brute": "Brute",
|
||||
"brute": "Brut",
|
||||
"openai": "OpenAI",
|
||||
"show-individual-confidence": "Show individual confidence",
|
||||
"ingredient-text": "Ingredient Text",
|
||||
"average-confident": "{0} Confident",
|
||||
"try-an-example": "Try an example",
|
||||
"parser": "Parser",
|
||||
"background-tasks": "Background Tasks",
|
||||
"background-tasks-description": "Here you can view all the running background tasks and their status",
|
||||
"no-logs-found": "No Logs Found",
|
||||
"tasks": "Tasks",
|
||||
"show-individual-confidence": "Mostra confiança individual",
|
||||
"ingredient-text": "Text d'ingredient",
|
||||
"average-confident": "{0} confiança",
|
||||
"try-an-example": "Prova un exemple",
|
||||
"parser": "Processador",
|
||||
"background-tasks": "Tasques en segon pla",
|
||||
"background-tasks-description": "Aquí pots revisar les tasques en segon pla en execució i els seus estats",
|
||||
"no-logs-found": "No s'han trobat logs",
|
||||
"tasks": "Tasques",
|
||||
"setup": {
|
||||
"first-time-setup": "First Time Setup",
|
||||
"welcome-to-mealie-get-started": "Welcome to Mealie! Let's get started",
|
||||
"already-set-up-bring-to-homepage": "I'm already set up, just bring me to the homepage",
|
||||
"common-settings-for-new-sites": "Here are some common settings for new sites",
|
||||
"setup-complete": "Setup Complete!",
|
||||
"here-are-a-few-things-to-help-you-get-started": "Here are a few things to help you get started with Mealie",
|
||||
"restore-from-v1-backup": "Have a backup from a previous instance of Mealie v1? You can restore it here.",
|
||||
"manage-profile-or-get-invite-link": "Manage your own profile, or grab an invite link to share with others."
|
||||
"first-time-setup": "Configuració de primer cop",
|
||||
"welcome-to-mealie-get-started": "Benvingut/da a Mealie! Anem per feina",
|
||||
"already-set-up-bring-to-homepage": "Ja ho tinc configurat, porta'm a la pàgina principal",
|
||||
"common-settings-for-new-sites": "Aquí hi ha algunes configuracions comunes per noves pàgines",
|
||||
"setup-complete": "Configuració completada!",
|
||||
"here-are-a-few-things-to-help-you-get-started": "Aquí hi ha unes quantes coses per ajudar-te a posar Mealie en marxa",
|
||||
"restore-from-v1-backup": "Tens una còpia de seguretat d'una instància prèvia de Mealie v1? Pots restaurar-la aquí.",
|
||||
"manage-profile-or-get-invite-link": "Gestiona el teu propi perfil, o agafa un enllaç d'invitació per compartir amb altres."
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"description": "Manage your profile, recipes, and group settings.",
|
||||
"get-invite-link": "Get Invite Link",
|
||||
"welcome-user": "👋 Benvingut/Benvinguda, {0}!",
|
||||
"description": "Gestiona el teu perfil, receptes i configuracions de grup.",
|
||||
"get-invite-link": "Obtén enllaç d'invitacio",
|
||||
"get-public-link": "Enllaç públic",
|
||||
"account-summary": "Account Summary",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"group-statistics": "Group Statistics",
|
||||
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
|
||||
"storage-capacity": "Storage Capacity",
|
||||
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
|
||||
"account-summary": "Resum del compte",
|
||||
"account-summary-description": "Aquí tens un resum de la informació del teu grup.",
|
||||
"group-statistics": "Estadístiques del grup",
|
||||
"group-statistics-description": "Les estadístiques del grup ofereixen certa visió de com feu servir Mealie.",
|
||||
"storage-capacity": "Capacitat d'emmagatzematge",
|
||||
"storage-capacity-description": "La teva capacitat d'emmagatzematge és un càlcul de les imatges i béns que has pujat.",
|
||||
"personal": "Personal",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"user-settings": "User Settings",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"group-description": "These items are shared within your group. Editing one of them will change it for the whole group!",
|
||||
"group-settings": "Group Settings",
|
||||
"group-settings-description": "Manage your common group settings like mealplan and privacy settings.",
|
||||
"cookbooks-description": "Manage a collection of recipe categories and generate pages for them.",
|
||||
"members": "Members",
|
||||
"members-description": "See who's in your group and manage their permissions.",
|
||||
"personal-description": "Aquestes configuracions són personals a tu. Canvis aquí no afectaran a altres usuaris.",
|
||||
"user-settings": "Configuracions d'usuari",
|
||||
"user-settings-description": "Gestiona les teves preferències, canvia la contrassenya, i actualitza la teva direcció de correu electrònic.",
|
||||
"api-tokens-description": "Gestiona les claus d'API per accés des d'aplicacions externes.",
|
||||
"group-description": "Aquests elements són compartits dins del teu grup. Editar-ne un ho canviarà per tot el grup!",
|
||||
"group-settings": "Configuracions de grup",
|
||||
"group-settings-description": "Gestiona configuracions comunes de grup com planificació d'apats i configuracions de privadesa.",
|
||||
"cookbooks-description": "Gestiona una col·lecció de categories de receptes i genera'n pàgines.",
|
||||
"members": "Membres",
|
||||
"members-description": "Veu qui hi ha al teu grup i gestiona'n els permisos.",
|
||||
"webhooks-description": "Setup webhooks that trigger on days that you have have mealplan scheduled.",
|
||||
"notifiers": "Notifiers",
|
||||
"notifiers": "Notificadors",
|
||||
"notifiers-description": "Setup email and push notifications that trigger on specific events.",
|
||||
"manage-data": "Manage Data",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"data-migrations": "Data Migrations",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"email-sent": "Email Sent",
|
||||
"error-sending-email": "Error Sending Email",
|
||||
"personal-information": "Personal Information",
|
||||
"preferences": "Preferences",
|
||||
"show-advanced-description": "Show advanced features (API Keys, Webhooks, and Data Management)",
|
||||
"back-to-profile": "Back to Profile",
|
||||
"looking-for-privacy-settings": "Looking for Privacy Settings?",
|
||||
"manage-data": "Gestiona dades",
|
||||
"manage-data-description": "Gestiona es teves dades de Mealie: Menjars, unitats, categories, etiquetes i més.",
|
||||
"data-migrations": "Migracions de dades",
|
||||
"data-migrations-description": "Migra les teves dades ja existents des d'altres aplicacions com Nextcloud Recipes i Chowdown.",
|
||||
"email-sent": "Correu electrònic enviat",
|
||||
"error-sending-email": "Error enviant correu electrònic",
|
||||
"personal-information": "Informació personal",
|
||||
"preferences": "Preferències",
|
||||
"show-advanced-description": "Mostra funcionalitat avançada (claus d'API, webhooks, i gestió de dades)",
|
||||
"back-to-profile": "Torna al perfil",
|
||||
"looking-for-privacy-settings": "Busques les configuracions de privadesa?",
|
||||
"manage-your-api-tokens": "Gestionar les claus API",
|
||||
"manage-user-profile": "Gestionar perfil d'usuari",
|
||||
"manage-cookbooks": "Gestionar receptaris",
|
||||
@@ -1272,7 +1277,7 @@
|
||||
"require-all-tools": "Requereix tots els utensilis",
|
||||
"cookbook-name": "Nom del receptari",
|
||||
"cookbook-with-name": "Receptari {0}",
|
||||
"create-a-cookbook": "Create a Cookbook",
|
||||
"cookbook": "Cookbook"
|
||||
"create-a-cookbook": "Crea un receptari",
|
||||
"cookbook": "Receptari"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Importovat pomocí .zip",
|
||||
"create-recipe-from-an-image": "Vytvořit recept z obrázku",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Opret ny opskrift fra bunden.",
|
||||
"create-recipes": "Opret opskrift",
|
||||
"import-with-zip": "Importér fra ZIP-fil",
|
||||
"create-recipe-from-an-image": "Opret opskrift ud fra et billede",
|
||||
"create-recipe-from-an-image": "Opret opskrift fra et billede",
|
||||
"create-recipe-from-an-image-description": "Opret en opskrift ved at overføre et billede af den. Mealie vil forsøge at udtrække teksten fra billedet med AI og oprette en opskrift fra det.",
|
||||
"crop-and-rotate-the-image": "Beskær og roter billedet, så kun teksten er synlig, og det vises i den rigtige retning.",
|
||||
"create-from-image": "Opret fra billede",
|
||||
"should-translate-description": "Oversæt opskriften til mit sprog",
|
||||
"please-wait-image-procesing": "Vent venligst, billedet behandles. Dette kan tage lidt tid.",
|
||||
"bulk-url-import": "Import fra flere URL-adresser",
|
||||
"debug-scraper": "Fejlsøg Scraper",
|
||||
"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.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Erstelle ein neues Rezept von Grund auf.",
|
||||
"create-recipes": "Rezepte erstellen",
|
||||
"import-with-zip": "Von .zip importieren",
|
||||
"create-recipe-from-an-image": "Rezept von Foto erstellen",
|
||||
"create-recipe-from-an-image": "Rezept von einem Bild erstellen",
|
||||
"create-recipe-from-an-image-description": "Erstelle ein Rezept, indem du ein Bild hochlädst. Mealie wird versuchen, den Text aus dem Bild mit Hilfe von KI zu extrahieren und ein Rezept daraus zu erstellen.",
|
||||
"crop-and-rotate-the-image": "Beschneide und drehe das Bild so, dass nur der Text zu sehen ist und die Ausrichtung stimmt.",
|
||||
"create-from-image": "Vom Bild erstellen",
|
||||
"should-translate-description": "Übersetze das Rezept in meine Sprache",
|
||||
"please-wait-image-procesing": "Warte bitte, das Bild wird gerade bearbeitet. Dies kann einige Zeit dauern.",
|
||||
"bulk-url-import": "URL Massenimport",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Erstelle ein Rezept, indem du den Namen angibst. Alle Rezepte müssen eindeutige Namen haben.",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Import with .zip",
|
||||
"create-recipe-from-an-image": "Create recipe from an image",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Import with .zip",
|
||||
"create-recipe-from-an-image": "Create recipe from an image",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Crear nueva receta desde cero.",
|
||||
"create-recipes": "Crear Recetas",
|
||||
"import-with-zip": "Importar desde .zip",
|
||||
"create-recipe-from-an-image": "Crear receta a partir de una imagen",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Importación masiva desde URL",
|
||||
"debug-scraper": "Depurar analizador",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crear una receta proporcionando el nombre. Todas las recetas deben tener nombres únicos.",
|
||||
@@ -958,7 +963,7 @@
|
||||
"authentication-method-hint": "This specifies how a user will authenticate with Mealie. If you're not sure, choose 'Mealie",
|
||||
"permissions": "Permisos",
|
||||
"administrator": "Administrador",
|
||||
"user-can-invite-other-to-group": "User can invite others to group",
|
||||
"user-can-invite-other-to-group": "El usuario puede invitar a otros al grupo",
|
||||
"user-can-manage-group": "El usuario puede administrar el grupo",
|
||||
"user-can-organize-group-data": "El usuario puede organizar los datos del grupo",
|
||||
"enable-advanced-features": "Habilitar Características Avanzadas",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Luo resepti alusta.",
|
||||
"create-recipes": "Luo reseptejä",
|
||||
"import-with-zip": "Tuo .zip:llä",
|
||||
"create-recipe-from-an-image": "Luo resepti kuvasta",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Massa tuonti URL-osoitteesta",
|
||||
"debug-scraper": "Etsi ongelmia Scraperista",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Luo resepti antamalla nimi. Kaikilla resepteillä on oltava yksilölliset nimet.",
|
||||
|
||||
1283
frontend/lang/messages/fr-BE.json
Normal file
1283
frontend/lang/messages/fr-BE.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Créer une nouvelle recette à partir de zéro.",
|
||||
"create-recipes": "Créer des recettes",
|
||||
"import-with-zip": "Importer un .zip",
|
||||
"create-recipe-from-an-image": "Créer une recette à partir d'une image",
|
||||
"create-recipe-from-an-image": "Créer une recette à partir d’une image",
|
||||
"create-recipe-from-an-image-description": "Créez une recette en téléchargeant une image de celle-ci. Mealie utilisera l’IA pour tenter d’extraire le texte et de créer une recette.",
|
||||
"crop-and-rotate-the-image": "Rogner et pivoter l’image pour que seul le texte soit visible, et qu’il soit dans la bonne orientation.",
|
||||
"create-from-image": "Créer à partir d’une image",
|
||||
"should-translate-description": "Traduire la recette dans ma langue",
|
||||
"please-wait-image-procesing": "Veuillez patienter, l’image est en cours de traitement. Cela peut prendre du temps.",
|
||||
"bulk-url-import": "Importation en masse d'URL",
|
||||
"debug-scraper": "Déboguer le récupérateur",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Créer une recette en fournissant le nom. Toutes les recettes doivent avoir des noms uniques.",
|
||||
@@ -958,7 +963,7 @@
|
||||
"authentication-method-hint": "Ceci infique comment un utilisateur va s'authentifier sur Mealie. Si vous n'êtes pas sûr, choisissez 'Mealie'",
|
||||
"permissions": "Autorisations",
|
||||
"administrator": "Administrateur",
|
||||
"user-can-invite-other-to-group": "User can invite others to group",
|
||||
"user-can-invite-other-to-group": "L’utilisateur peut inviter d’autres personnes dans le groupe",
|
||||
"user-can-manage-group": "L'utilisateur peut gérer le groupe",
|
||||
"user-can-organize-group-data": "L'utilisateur peut organiser des données de groupe",
|
||||
"enable-advanced-features": "Activer les fonctions avancées",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Créer une nouvelle recette de zéro.",
|
||||
"create-recipes": "Créer des recettes",
|
||||
"import-with-zip": "Importer un .zip",
|
||||
"create-recipe-from-an-image": "Créer une recette à partir d'une image",
|
||||
"create-recipe-from-an-image": "Créer une recette à partir d’une image",
|
||||
"create-recipe-from-an-image-description": "Créez une recette en téléchargeant une image de celle-ci. Mealie utilisera l’IA pour tenter d’extraire le texte et de créer une recette.",
|
||||
"crop-and-rotate-the-image": "Rogner et pivoter l’image pour que seul le texte soit visible, et qu’il soit dans la bonne orientation.",
|
||||
"create-from-image": "Créer à partir d’une image",
|
||||
"should-translate-description": "Traduire la recette dans ma langue",
|
||||
"please-wait-image-procesing": "Veuillez patienter, l’image est en cours de traitement. Cela peut prendre du temps.",
|
||||
"bulk-url-import": "Importation en masse d'URL",
|
||||
"debug-scraper": "Déboguer le récupérateur",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Créer une recette en fournissant le nom. Toutes les recettes doivent avoir des noms uniques.",
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
"clipboard-copy-failure": "Produciuse un erro ao copiar contido no portapapeis.",
|
||||
"confirm-delete-generic-items": "Estás seguro de que queres eliminar os seguintes elementos?",
|
||||
"organizers": "Organizadores",
|
||||
"caution": "Caution"
|
||||
"caution": "Coidado"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Estás seguro de que queres eliminar <b>{groupName}<b/>?",
|
||||
@@ -342,13 +342,13 @@
|
||||
"title": "Chowdown"
|
||||
},
|
||||
"nextcloud": {
|
||||
"description": "Migrate data from a Nextcloud Cookbook instance",
|
||||
"description-long": "Nextcloud recipes can be imported from a zip file that contains the data stored in Nextcloud. See the example folder structure below to ensure your recipes are able to be imported.",
|
||||
"description": "Migrar datos dunha instancia de Nextcloud Cookbook",
|
||||
"description-long": "As receitas poden ser importadas dun ficheiro zip que contén os datos almacenados en Nextcloud. Revise a estrutura de cartafoles de abaixo como exemplo para asegurar que as túas receitas pódense importar.",
|
||||
"title": "Nextcloud Cookbook"
|
||||
},
|
||||
"copymethat": {
|
||||
"description-long": "Mealie can import recipes from Copy Me That. Export your recipes in HTML format, then upload the .zip below.",
|
||||
"title": "Copy Me That Recipe Manager"
|
||||
"description-long": "Mealie pode importar receitas de Copy Me That. Exporta as túas receitas en formato HTML e sube aquí embaixo o zip.",
|
||||
"title": "Xestor de Receitas Copy Me That"
|
||||
},
|
||||
"paprika": {
|
||||
"description-long": "Mealie can import recipes from the Paprika application. Export your recipes from paprika, rename the export extension to .zip and upload it below.",
|
||||
@@ -412,8 +412,8 @@
|
||||
"404-page-not-found": "404 Page not found",
|
||||
"all-recipes": "All Recipes",
|
||||
"new-page-created": "New page created",
|
||||
"page": "Page",
|
||||
"page-creation-failed": "Page creation failed",
|
||||
"page": "Páxina",
|
||||
"page-creation-failed": "Produciuse un erro ao creala páxina",
|
||||
"page-deleted": "Páxina eliminada",
|
||||
"page-deletion-failed": "Produciuse un erro ao eliminar a páxina",
|
||||
"page-update-failed": "Produciuse un erro na actualización da páxina",
|
||||
@@ -438,10 +438,10 @@
|
||||
"delete-recipe": "Eliminar Receita",
|
||||
"description": "Descrición",
|
||||
"disable-amount": "Desactivar as Cantidades de Ingredientes",
|
||||
"disable-comments": "Disable Comments",
|
||||
"disable-comments": "Desactivar comentarios",
|
||||
"duplicate": "Duplicar a receita",
|
||||
"duplicate-name": "Nome da nova receita",
|
||||
"edit-scale": "Edit Scale",
|
||||
"edit-scale": "Editar escala",
|
||||
"fat-content": "Graxa",
|
||||
"fiber-content": "Fibra",
|
||||
"grams": "gramos",
|
||||
@@ -449,8 +449,8 @@
|
||||
"ingredients": "Ingredientes",
|
||||
"insert-ingredient": "Inserir Ingrediente",
|
||||
"insert-section": "Inserir Sección",
|
||||
"insert-above": "Insert Above",
|
||||
"insert-below": "Insert Below",
|
||||
"insert-above": "Inserir enriba",
|
||||
"insert-below": "Inserir enbaixo",
|
||||
"instructions": "Instrucións",
|
||||
"key-name-required": "Nome da Chave Obrigatorio",
|
||||
"landscape-view-coming-soon": "Vista Horizontal",
|
||||
@@ -493,7 +493,7 @@
|
||||
"join-the-conversation": "Únete á Conversa",
|
||||
"add-recipe-to-mealplan": "Add Recipe to Mealplan",
|
||||
"entry-type": "Entry Type",
|
||||
"date-format-hint": "MM/DD/YYYY format",
|
||||
"date-format-hint": "Formato MM/DD/YYYY",
|
||||
"date-format-hint-yyyy-mm-dd": "YYYY-MM-DD format",
|
||||
"add-to-list": "Add to List",
|
||||
"add-to-plan": "Add to Plan",
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Import with .zip",
|
||||
"create-recipe-from-an-image": "Create recipe from an image",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "ייבא באמצעות zip",
|
||||
"create-recipe-from-an-image": "יצירת מתכון באמצעות תמונה",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "ייבוא מספר לינקים",
|
||||
"debug-scraper": "דיבאג סקרייפר",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "יצירת מתכון באמצעות שם. כל שמות המתכונים צריכים להיות שונים.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Učitaj pomoću .zip-a",
|
||||
"create-recipe-from-an-image": "Kreiraj recept iz slike",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Uvoz više URL-ova",
|
||||
"debug-scraper": "Debugiranje skraper-a",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Kreirajte recept pružajući naziv. Svi recepti moraju imati jedinstvena imena.",
|
||||
|
||||
@@ -297,8 +297,8 @@
|
||||
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "A menütervekben csak a következő kategóriához tartozó receptek kerülnek felhasználásra",
|
||||
"planner": "Tervező",
|
||||
"quick-week": "Gyors hét",
|
||||
"side": "Köret",
|
||||
"sides": "Köretek",
|
||||
"side": "Kisétkezés",
|
||||
"sides": "Kisétkezések",
|
||||
"start-date": "Kezdő dátum",
|
||||
"rule-day": "Szabály Napja",
|
||||
"meal-type": "Étel típusa",
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Adj hozzá egy új receptet a nulláról kezdve.",
|
||||
"create-recipes": "Receptek létrehozása",
|
||||
"import-with-zip": "Importálás .zip formátummal",
|
||||
"create-recipe-from-an-image": "Recept létrehozása fotóról",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Tömeges URL importálás",
|
||||
"debug-scraper": "Hibakeresés az adatkinyerőben",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Hozzon létre egy receptet a név megadásával. Minden receptnek egyedi névvel kell rendelkeznie.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Import with .zip",
|
||||
"create-recipe-from-an-image": "Create recipe from an image",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
|
||||
@@ -562,6 +562,11 @@
|
||||
"create-recipes": "Crea Ricette",
|
||||
"import-with-zip": "Importa da .zip",
|
||||
"create-recipe-from-an-image": "Crea ricetta da un'immagine",
|
||||
"create-recipe-from-an-image-description": "Crea una ricetta caricando un'immagine di essa. Mealie tenterà di estrarre il testo dall'immagine usando l'IA e creare una ricetta da esso.",
|
||||
"crop-and-rotate-the-image": "Ritaglia e ruota l'immagine in modo che solo il testo sia visibile e che sia orientato correttamente.",
|
||||
"create-from-image": "Crea da Immagine",
|
||||
"should-translate-description": "Traduci la ricetta nella mia lingua",
|
||||
"please-wait-image-procesing": "Attendere, l'immagine è in fase di elaborazione. Potrebbe volerci un po' di tempo.",
|
||||
"bulk-url-import": "Importazione multipla URL",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crea una ricetta fornendo il nome. Tutte le ricette devono avere nomi univoci.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "新しいレシピを一から作成します。",
|
||||
"create-recipes": "レシピを作成する",
|
||||
"import-with-zip": ".zip でインポート",
|
||||
"create-recipe-from-an-image": "画像からレシピを作成",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "URL 一括インポート",
|
||||
"debug-scraper": "デバッグスクレーパー",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "名前を指定してレシピを作成します。すべてのレシピには固有の名前が必要です。",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Import with .zip",
|
||||
"create-recipe-from-an-image": "Create recipe from an image",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Įkelti naudojant .zip failus",
|
||||
"create-recipe-from-an-image": "Sukurti receptą iš nuotraukos",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Masinis URL importavimas",
|
||||
"debug-scraper": "Ieškoti nuskaitymo klaidų",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Sukurti receptą įrašant pavadinimą. Visi receptai privalo turėti unikalius pavadinimus.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Import with .zip",
|
||||
"create-recipe-from-an-image": "Create recipe from an image",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Maak een nieuw recept.",
|
||||
"create-recipes": "Recepten aanmaken",
|
||||
"import-with-zip": "Importeer met .zip",
|
||||
"create-recipe-from-an-image": "Maak recept van een afbeelding",
|
||||
"create-recipe-from-an-image": "Maak recept van de tekst op een afbeelding",
|
||||
"create-recipe-from-an-image-description": "Maak een recept door een afbeelding ervan te uploaden. Mealie probeert de tekst met behulp van AI uit de afbeelding te halen en er een recept uit te maken.",
|
||||
"crop-and-rotate-the-image": "Snijd de afbeelding bij zodat alleen tekst zichtbaar is. En draai t plaatje zodat het leesbaar is.",
|
||||
"create-from-image": "Maken vanuit afbeelding",
|
||||
"should-translate-description": "Vertaal het recept in mijn taal",
|
||||
"please-wait-image-procesing": "Even wachten. Mealie verwerkt de afbeelding. Dit kan even duren.",
|
||||
"bulk-url-import": "URL-import in bulk",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Maak een recept door het een naam te geven. Alle recepten moeten unieke namen hebben.",
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
"clipboard-copy-failure": "Kunne ikke kopiere til utklippstavlen.",
|
||||
"confirm-delete-generic-items": "Er du sikker på at du vil følgende elementer?",
|
||||
"organizers": "Organisatorer",
|
||||
"caution": "Caution"
|
||||
"caution": "Forsiktig"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Er du sikker på at du vil slette <b>{groupName}<b/>?",
|
||||
@@ -292,8 +292,8 @@
|
||||
"mealplan-updated": "Måltidsplan oppdatert",
|
||||
"no-meal-plan-defined-yet": "Ingen måltidsplan er definert ennå",
|
||||
"no-meal-planned-for-today": "Ingen måltid planlagt i dag",
|
||||
"numberOfDays-hint": "Number of days on page load",
|
||||
"numberOfDays-label": "Default Days",
|
||||
"numberOfDays-hint": "Antall dager på sideinnlasting",
|
||||
"numberOfDays-label": "Standard antall dager",
|
||||
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Kun oppskrifter med disse kategoriene vil bli brukt i måltidsplaner",
|
||||
"planner": "Planlegger",
|
||||
"quick-week": "Hurtigplan",
|
||||
@@ -383,7 +383,7 @@
|
||||
},
|
||||
"recipekeeper": {
|
||||
"title": "Recipe Keeper",
|
||||
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
|
||||
"description-long": "Meali kan importere oppskrifter fra Recipe Keeper. Eksporter oppskrifter i zip-format, og last deretter opp .zip-filen nedenfor."
|
||||
}
|
||||
},
|
||||
"new-recipe": {
|
||||
@@ -449,8 +449,8 @@
|
||||
"ingredients": "Ingredienser",
|
||||
"insert-ingredient": "Sett inn ingrediens",
|
||||
"insert-section": "Sett inn avsnitt",
|
||||
"insert-above": "Insert Above",
|
||||
"insert-below": "Insert Below",
|
||||
"insert-above": "Sett inn over",
|
||||
"insert-below": "Sett inn under",
|
||||
"instructions": "Instruksjoner",
|
||||
"key-name-required": "Navn på nøkkel er påkrevd",
|
||||
"landscape-view-coming-soon": "Landskapsvisning",
|
||||
@@ -562,6 +562,11 @@
|
||||
"create-recipes": "Opprett oppskrifter",
|
||||
"import-with-zip": "Importer fra .zip-fil",
|
||||
"create-recipe-from-an-image": "Opprett oppskrift fra et bilde",
|
||||
"create-recipe-from-an-image-description": "Opprett en oppskrift ved å laste opp et bilde av den. Mealie vil forsøke å hente ut teksten fra bildet ved bruk av AI, og lage en ny oppskrift.",
|
||||
"crop-and-rotate-the-image": "Beskjær og roter bildet slik at bare teksten er synlig, og at det er i riktig retning.",
|
||||
"create-from-image": "Opprett fra bilde",
|
||||
"should-translate-description": "Oversett oppskriften til mitt språk",
|
||||
"please-wait-image-procesing": "Vent litt, bildet blir prosessert. Dette kan ta litt tid.",
|
||||
"bulk-url-import": "Importer flere nettadresser",
|
||||
"debug-scraper": "Feilsøk skraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Opprett en oppskrift ved å angi navnet. Alle oppskrifter må ha unike navn.",
|
||||
@@ -586,8 +591,8 @@
|
||||
"report-deletion-failed": "Sletting av rapport mislyktes",
|
||||
"recipe-debugger": "Oppskriftsfeilsøker",
|
||||
"recipe-debugger-description": "Hent nettadressen til oppskriften du vil feilsøke og lim den inn her. Nettsiden vil bli skrapt og resultatene vil bli vist. Hvis du ikke ser noen data returnert, er ikke nettstedet du prøver å skrape støttet av Mealie eller skraper-biblioteket.",
|
||||
"use-openai": "Use OpenAI",
|
||||
"recipe-debugger-use-openai-description": "Use OpenAI to parse the results instead of relying on the scraper library. When creating a recipe via URL, this is done automatically if the scraper library fails, but you may test it manually here.",
|
||||
"use-openai": "Bruk OpenAI",
|
||||
"recipe-debugger-use-openai-description": "Bruke OpenAI til å analysere resultatene i stedet for å basere seg på scraper-biblioteket. Når du oppretter en oppskrift via URL, blir dette gjort automatisk hvis scraper-biblioteket mislykkes, men du kan teste det manuelt her.",
|
||||
"debug": "Feilsøk",
|
||||
"tree-view": "Trevisning",
|
||||
"recipe-yield": "Utbytte av oppskrift",
|
||||
@@ -598,19 +603,19 @@
|
||||
"nextStep": "Neste trinn",
|
||||
"recipe-actions": "Oppskriftshandlinger",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"experimental-alert-text": "Mealie bruker naturlig språkbehandling til å analysere og lage enheter og matvarer til oppskriftsingrediensene dine. Denne funksjonen er eksperimentell og fungerer kanskje ikke som forventet. Hvis du foretrekker ikke å bruke de foreslåtte resultatene, kan du velge 'Avbryt', og endringene dine vil ikke bli lagret.",
|
||||
"ingredient-parser": "Ingrediens-parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"openai-parser": "OpenAI Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
"explanation": "For å bruke ingrediens-forslag, klikk på 'Analyser alle' for å starte prosessen. Når de prosesserte ingrediensene er tilgjengelige, kan du se gjennom elementene og kontrollere at de er sjekket korrekt. Modellens tillitsverdi vises på høyre side av elementet. Denne scoren er et gjennomsnitt av alle de individuelle poengene og alltid er ikke helt nøyaktige.",
|
||||
"alerts-explainer": "Varsler vil bli vist dersom en matchende matvare eller enhet blir funnet, men ikke finnes i databasen.",
|
||||
"select-parser": "Velg analyserer",
|
||||
"natural-language-processor": "Prosessor for naturlig språk",
|
||||
"brute-parser": "Enkel analyse",
|
||||
"openai-parser": "OpenAI-analyse",
|
||||
"parse-all": "Analyser alle",
|
||||
"no-unit": "Ingen enhet",
|
||||
"missing-unit": "Opprett manglende enhet: {unit}",
|
||||
"missing-food": "Opprett manglende mat: {food}",
|
||||
"no-food": "Ingen matvarer"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
@@ -640,7 +645,7 @@
|
||||
"backup-created-at-response-export_path": "Sikkerhetskopi opprettet i {path}",
|
||||
"backup-deleted": "Sikkerhetskopi slettet",
|
||||
"restore-success": "Gjenopprettingen var vellykket",
|
||||
"restore-fail": "Restore failed. Check your server logs for more details",
|
||||
"restore-fail": "Gjenoppretting mislyktes. Sjekk serverloggene for flere detaljer",
|
||||
"backup-tag": "Emneord for sikkerhetskopi",
|
||||
"create-heading": "Opprett en sikkerhetskopi",
|
||||
"delete-backup": "Slett sikkerhetskopi",
|
||||
@@ -778,9 +783,9 @@
|
||||
"oidc-ready": "OIDC klar",
|
||||
"oidc-ready-error-text": "Ikke alle OIDC-verdier er konfigurert. Dette kan ignoreres hvis du ikke bruker OIDC-autentisering.",
|
||||
"oidc-ready-success-text": "Alle obligratoriske OIDC-variabler er satt.",
|
||||
"openai-ready": "OpenAI Ready",
|
||||
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
|
||||
"openai-ready-success-text": "Required OpenAI variables are all set."
|
||||
"openai-ready": "OpenAI klar",
|
||||
"openai-ready-error-text": "Ikke alle OpenAI-verdier er konfigurert. Dette kan ignoreres hvis du ikke bruker OpenAI-funksjoner.",
|
||||
"openai-ready-success-text": "Alle påkrevde OpenAI-variabler er satt."
|
||||
},
|
||||
"shopping-list": {
|
||||
"all-lists": "Alle lister",
|
||||
@@ -794,7 +799,7 @@
|
||||
"food": "Matvare",
|
||||
"note": "Notat",
|
||||
"label": "Etikett",
|
||||
"save-label": "Save Label",
|
||||
"save-label": "Lagre etikett",
|
||||
"linked-item-warning": "Dette elementet er koblet til én eller flere oppskrifter. Å endre enheter eller matvarer vil føre til uventede resultater når oppskriften legges til eller fjernes fra denne listen.",
|
||||
"toggle-food": "Vis/skjul matvare",
|
||||
"manage-labels": "Administrer etiketter",
|
||||
@@ -810,11 +815,11 @@
|
||||
"items-checked-count": "Ingen elementer krysset av|Ett element krysset av|{count} elementer krysset av",
|
||||
"no-label": "Ingen etikett",
|
||||
"completed-on": "Fullført den {date}",
|
||||
"you-are-offline": "You are offline",
|
||||
"you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.",
|
||||
"are-you-sure-you-want-to-check-all-items": "Are you sure you want to check all items?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Are you sure you want to uncheck all items?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Are you sure you want to delete all checked items?"
|
||||
"you-are-offline": "Du er offline",
|
||||
"you-are-offline-description": "Ikke alle funksjoner er tilgjengelige i frakoblet modus. Du kan fremdeles legge til, endre og fjerne elementer. men du vil ikke kunne synkronisere endringene dine med serveren før du er logget på igjen.",
|
||||
"are-you-sure-you-want-to-check-all-items": "Er du sikker på at du vil velge alle elementer?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Er du sikker på at du vil fjerne valg av alle elementer?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Er du sikker på at du vil slette alle valgte elementer?"
|
||||
},
|
||||
"sidebar": {
|
||||
"all-recipes": "Alle oppskrifter",
|
||||
@@ -958,7 +963,7 @@
|
||||
"authentication-method-hint": "This specifies how a user will authenticate with Mealie. If you're not sure, choose 'Mealie",
|
||||
"permissions": "Rettigheter",
|
||||
"administrator": "Administrator",
|
||||
"user-can-invite-other-to-group": "User can invite others to group",
|
||||
"user-can-invite-other-to-group": "Bruker kan invitere andre til gruppe",
|
||||
"user-can-manage-group": "Brukeren kan administrere gruppe",
|
||||
"user-can-organize-group-data": "Brukeren kan organisere gruppedata",
|
||||
"enable-advanced-features": "Aktiver avanserte funksjoner",
|
||||
@@ -990,8 +995,8 @@
|
||||
"food-data": "Matvaredata",
|
||||
"example-food-singular": "f.eks: tomat",
|
||||
"example-food-plural": "f.eks: tomater",
|
||||
"label-overwrite-warning": "This will assign the chosen label to all selected foods and potentially overwrite your existing labels.",
|
||||
"on-hand-checkbox-label": "Setting this flag will make this food unchecked by default when adding a recipe to a shopping list."
|
||||
"label-overwrite-warning": "Dette vil tildele den valgte etiketten til alle valgte matvarer og potensielt overskrive dine eksisterende etiketter.",
|
||||
"on-hand-checkbox-label": "Ved å angi dette flagget blir ikke maten valgt som standard når du legger til en oppskrift på en handleliste."
|
||||
},
|
||||
"units": {
|
||||
"seed-dialog-text": "Tilfør typiske enheter i databasen basert på ditt lokale språk.",
|
||||
@@ -1020,7 +1025,7 @@
|
||||
"edit-label": "Rediger etikett",
|
||||
"new-label": "Ny etikett",
|
||||
"labels": "Etiketter",
|
||||
"assign-label": "Assign Label"
|
||||
"assign-label": "Tilordne etikett"
|
||||
},
|
||||
"recipes": {
|
||||
"purge-exports": "Fjern eksporter",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Importuj z pliku .zip",
|
||||
"create-recipe-from-an-image": "Utwórz przepis z obrazka",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Import Zbiorczy z URL",
|
||||
"debug-scraper": "Debuguj Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Utwórz przepis, podając nazwę. Wszystkie przepisy muszą mieć unikalne nazwy.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Criar uma receita do zero.",
|
||||
"create-recipes": "Criar Receitas",
|
||||
"import-with-zip": "Importar a partir de .zip",
|
||||
"create-recipe-from-an-image": "Criar Receita a partir de uma imagem",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Importação de URL em massa",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crie uma receita fornecendo o nome. Todas as receitas devem ter nomes exclusivos.",
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
"clipboard-copy-failure": "Erro ao copiar para a área de transferência.",
|
||||
"confirm-delete-generic-items": "Tem a certeza de que deseja eliminar os seguintes itens?",
|
||||
"organizers": "Organizadores",
|
||||
"caution": "Caution"
|
||||
"caution": "Cuidado"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Tem a certeza que quer eliminar <b>{groupName}<b/>?",
|
||||
@@ -449,8 +449,8 @@
|
||||
"ingredients": "Ingredientes",
|
||||
"insert-ingredient": "Inserir Ingrediente",
|
||||
"insert-section": "Inserir Secção",
|
||||
"insert-above": "Insert Above",
|
||||
"insert-below": "Insert Below",
|
||||
"insert-above": "Inserir Acima",
|
||||
"insert-below": "Inserir Abaixo",
|
||||
"instructions": "Instruções",
|
||||
"key-name-required": "Nome da Chave é Obrigatório",
|
||||
"landscape-view-coming-soon": "Modo paisagem",
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Criar uma receita em branco.",
|
||||
"create-recipes": "Criar Receitas",
|
||||
"import-with-zip": "Importar com .zip",
|
||||
"create-recipe-from-an-image": "Criar receita a partir de uma imagem",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Importação de URL em bloco",
|
||||
"debug-scraper": "Depurar Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crie uma receita fornecendo o nome. Todas as receitas devem ter nomes únicos.",
|
||||
@@ -810,11 +815,11 @@
|
||||
"items-checked-count": "Sem itens selecionados|Um item selecionado|{count} itens selecionados",
|
||||
"no-label": "Sem Rótulo",
|
||||
"completed-on": "Concluída em {date}",
|
||||
"you-are-offline": "You are offline",
|
||||
"you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.",
|
||||
"are-you-sure-you-want-to-check-all-items": "Are you sure you want to check all items?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Are you sure you want to uncheck all items?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Are you sure you want to delete all checked items?"
|
||||
"you-are-offline": "Está offline",
|
||||
"you-are-offline-description": "Nem todas as funcionalidades estão disponíveis enquanto estiver offline. Continua a poder adicionar, modificar e remover itens, mas não poderá sincronizar as suas alterações com o servidor até estar novamente online.",
|
||||
"are-you-sure-you-want-to-check-all-items": "Tem a certeza de que pretende selecionar todos os itens?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Tem a certeza de que pretende desmarcar todos os itens?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Tem a certeza de que pretende eliminar todos os itens selecionados?"
|
||||
},
|
||||
"sidebar": {
|
||||
"all-recipes": "Todas as Receitas",
|
||||
@@ -958,7 +963,7 @@
|
||||
"authentication-method-hint": "This specifies how a user will authenticate with Mealie. If you're not sure, choose 'Mealie",
|
||||
"permissions": "Permissões",
|
||||
"administrator": "Administrador",
|
||||
"user-can-invite-other-to-group": "User can invite others to group",
|
||||
"user-can-invite-other-to-group": "O utilizador pode convidar outros para o grupo",
|
||||
"user-can-manage-group": "O utilizador pode gerir o grupo",
|
||||
"user-can-organize-group-data": "O utilizador pode organizar dados do grupo",
|
||||
"enable-advanced-features": "Habilitar recursos avançados",
|
||||
@@ -990,8 +995,8 @@
|
||||
"food-data": "Dados do Alimento",
|
||||
"example-food-singular": "ex: Cebola",
|
||||
"example-food-plural": "ex: Cebolas",
|
||||
"label-overwrite-warning": "This will assign the chosen label to all selected foods and potentially overwrite your existing labels.",
|
||||
"on-hand-checkbox-label": "Setting this flag will make this food unchecked by default when adding a recipe to a shopping list."
|
||||
"label-overwrite-warning": "Isto irá atribuir o rótulo escolhido a todos os alimentos selecionados e, eventualmente, substituir os rótulos existentes.",
|
||||
"on-hand-checkbox-label": "A ativação deste sinalizador fará com que este alimento seja desmarcado por defeito ao adicionar uma receita a uma lista de compras."
|
||||
},
|
||||
"units": {
|
||||
"seed-dialog-text": "Popule a base de dados com unidades comuns no seu idioma.",
|
||||
@@ -1020,7 +1025,7 @@
|
||||
"edit-label": "Editar Rótulo",
|
||||
"new-label": "Novo rótulo",
|
||||
"labels": "Rótulos",
|
||||
"assign-label": "Assign Label"
|
||||
"assign-label": "Atribuir Rótulo"
|
||||
},
|
||||
"recipes": {
|
||||
"purge-exports": "Limpar exportações",
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
"clipboard-copy-failure": "Copierea în clipboard a eșuat.",
|
||||
"confirm-delete-generic-items": "Sunteți sigur că doriți să ștergeți următoarele?",
|
||||
"organizers": "Organizatori",
|
||||
"caution": "Caution"
|
||||
"caution": "Atenție"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Sunteți sigur că doriți să ștergeți <b>{groupName}<b/>?",
|
||||
@@ -292,8 +292,8 @@
|
||||
"mealplan-updated": "Plan de mese actualizat",
|
||||
"no-meal-plan-defined-yet": "Nici un plan de mese definit încă",
|
||||
"no-meal-planned-for-today": "Nicio masă planificată pentru astăzi",
|
||||
"numberOfDays-hint": "Number of days on page load",
|
||||
"numberOfDays-label": "Default Days",
|
||||
"numberOfDays-hint": "Număr de zile pe pagină încărcată",
|
||||
"numberOfDays-label": "Zile implicite",
|
||||
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Numai rețetele cu aceste categorii vor fi utilizate în Planurile de mese",
|
||||
"planner": "Planificator",
|
||||
"quick-week": "Săptămână rapidă",
|
||||
@@ -379,10 +379,10 @@
|
||||
},
|
||||
"myrecipebox": {
|
||||
"title": "Cutia mea de rețete",
|
||||
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
|
||||
"description-long": "Mealie poate importa rețete din Cutia mea de rețete. Exportă rețetele în format CSV, apoi încarcă fișierul .csv de mai jos."
|
||||
},
|
||||
"recipekeeper": {
|
||||
"title": "Recipe Keeper",
|
||||
"title": "Oraganizator de rețete",
|
||||
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
|
||||
}
|
||||
},
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Creează o rețetă nouă de la zero.",
|
||||
"create-recipes": "Crează rețetă",
|
||||
"import-with-zip": "Importă cu .zip",
|
||||
"create-recipe-from-an-image": "Creează o rețetă dintr-o imagine",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Import URL în bulk",
|
||||
"debug-scraper": "Depanare funcție Importare",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Creează o rețetă furnizând numele. Toate rețetele trebuie să aibă nume unice.",
|
||||
@@ -699,7 +704,7 @@
|
||||
"error-updating-theme": "Error updating theme",
|
||||
"info": "Info",
|
||||
"light": "Light",
|
||||
"primary": "Primary",
|
||||
"primary": "Primară",
|
||||
"secondary": "Secondary",
|
||||
"success": "Succes",
|
||||
"switch-to-dark-mode": "Switch to dark mode",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Создать новый рецепт с нуля.",
|
||||
"create-recipes": "Создать Рецепт",
|
||||
"import-with-zip": "Импорт из .zip",
|
||||
"create-recipe-from-an-image": "Создать рецепт из изображения",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Массовый импорт по URL",
|
||||
"debug-scraper": "Отладка сканирования",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Создайте рецепт, указав имя. Все рецепты должны иметь уникальные имена.",
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
"something-went-wrong": "Vyskytla sa chyba",
|
||||
"subscribed-events": "Prihlásené akcie",
|
||||
"test-message-sent": "Testovacia správa bola odoslaná",
|
||||
"message-sent": "Message Sent",
|
||||
"message-sent": "Správa odoslaná",
|
||||
"new-notification": "Nové upozornenie",
|
||||
"event-notifiers": "Upozornenia udalostí",
|
||||
"apprise-url-skipped-if-blank": "Informačná URL (preskočená, ak je prázdna)",
|
||||
@@ -161,7 +161,7 @@
|
||||
"test": "Otestovať",
|
||||
"themes": "Motívy",
|
||||
"thursday": "Štvrtok",
|
||||
"title": "Title",
|
||||
"title": "Názov",
|
||||
"token": "Token",
|
||||
"tuesday": "Utorok",
|
||||
"type": "Typ",
|
||||
@@ -210,8 +210,8 @@
|
||||
"unsaved-changes": "Posledne vykonané zmeny nie sú uložené. Želáte si ich uložiť alebo zrušiť?",
|
||||
"clipboard-copy-failure": "Skopírovanie do schránky zlyhalo.",
|
||||
"confirm-delete-generic-items": "Ste si istý, že chcete odstrániť nasledujúce položky?",
|
||||
"organizers": "Organizers",
|
||||
"caution": "Caution"
|
||||
"organizers": "Organizátori",
|
||||
"caution": "Výstraha"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "Naozaj chcete odstrániť <b>{groupName}<b/>?",
|
||||
@@ -292,8 +292,8 @@
|
||||
"mealplan-updated": "Jedálniček aktualizovaný",
|
||||
"no-meal-plan-defined-yet": "Nebol vytvorený žiadny jedálniček",
|
||||
"no-meal-planned-for-today": "Pre dnešok žiadne jedlo v jedálničku",
|
||||
"numberOfDays-hint": "Number of days on page load",
|
||||
"numberOfDays-label": "Default Days",
|
||||
"numberOfDays-hint": "Počet dní na stránke",
|
||||
"numberOfDays-label": "Predvolený počet dní",
|
||||
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "V jedálničkoch budú použité iba recepty z nasledovných kategórií",
|
||||
"planner": "Plánovač",
|
||||
"quick-week": "Rýchly návrh týždňa",
|
||||
@@ -368,7 +368,7 @@
|
||||
"choose-migration-type": "Vyberte spôsob migrácie",
|
||||
"tag-all-recipes": "Označte všetky recepty štítkom {tag-name}",
|
||||
"nextcloud-text": "Recepty z Nextcloud-u je možné importovať priamo zo zip-súboru, ktorý obsahuje dáta uložené na Nextcloud-e. Pozrite sa nižšie na príklad adresárovej štruktúry, aby ste sa uistili, že je možné vaše recepty importovať.",
|
||||
"chowdown-text": "Mealie natively supports the chowdown repository format. Download the code repository as a .zip file and upload it below.",
|
||||
"chowdown-text": "Mealie natívne podporuje formát úložiska chowdown. Stiahnite si repozitár ako súbor .zip a nahrajte ho nižšie.",
|
||||
"recipe-1": "Recept 1",
|
||||
"recipe-2": "Recept 2",
|
||||
"paprika-text": "Mealie dokáže importovať recepty z aplikácie Paprika. Exportujte vaše recepty z Papriky, premenujte príponu exportovaného súboru na .zip a nahrajte ho nižšie.",
|
||||
@@ -378,12 +378,12 @@
|
||||
"description-long": "Mealie dokáže importovať recepty z Plan To Eat."
|
||||
},
|
||||
"myrecipebox": {
|
||||
"title": "My Recipe Box",
|
||||
"description-long": "Mealie can import recipes from My Recipe Box. Export your recipes in CSV format, then upload the .csv file below."
|
||||
"title": "Môj receptár",
|
||||
"description-long": "Mealie dokáže importovať recepty z My Recipe Box. Exportujte recepty vo formáte CSV a nižšie nahrajte csv súbor."
|
||||
},
|
||||
"recipekeeper": {
|
||||
"title": "Recipe Keeper",
|
||||
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
|
||||
"title": "Strážca receptov",
|
||||
"description-long": "Mealie dokáže importovať recepty z Recipe Keeper. Exportujte recepty vo formáte Zip a nižšie nahrajte zip súbor."
|
||||
}
|
||||
},
|
||||
"new-recipe": {
|
||||
@@ -449,8 +449,8 @@
|
||||
"ingredients": "Suroviny",
|
||||
"insert-ingredient": "Vložiť prísadu",
|
||||
"insert-section": "Vložiť sekciu",
|
||||
"insert-above": "Insert Above",
|
||||
"insert-below": "Insert Below",
|
||||
"insert-above": "Vložte vyššie",
|
||||
"insert-below": "Vložte nižšie",
|
||||
"instructions": "Postup",
|
||||
"key-name-required": "Názov kľúča je povinným údajom",
|
||||
"landscape-view-coming-soon": "Orientácia na šírku (čoskoro)",
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Vytvoriť nový recept od začiatku.",
|
||||
"create-recipes": "Vytvoriť recept",
|
||||
"import-with-zip": "Importovať .zip súbor",
|
||||
"create-recipe-from-an-image": "Vytvoriť recept z obrázku",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Hromadný URL import",
|
||||
"debug-scraper": "Debugovať scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Vytvoriť recept zadaním názvu. Všetky recepty musia mať jedinečné názvy.",
|
||||
@@ -586,8 +591,8 @@
|
||||
"report-deletion-failed": "Vymazanie reportov zlyhalo",
|
||||
"recipe-debugger": "Debugger receptov",
|
||||
"recipe-debugger-description": "Vezmite URL odkaz receptu, ktorý chcete opraviť a vložte ju sem. Recept bude stiahnutý z URL odkazu pomocou scrapera receptov a zobrazí sa výsledok sťahovania. V prípade, ak nevidíte žiadne zobrazené dáta, stránka z URL odkazu nie je podporovaná Mealie alebo jej scrapovacou knižnicou.",
|
||||
"use-openai": "Use OpenAI",
|
||||
"recipe-debugger-use-openai-description": "Use OpenAI to parse the results instead of relying on the scraper library. When creating a recipe via URL, this is done automatically if the scraper library fails, but you may test it manually here.",
|
||||
"use-openai": "Použite OpenAI",
|
||||
"recipe-debugger-use-openai-description": "Použite OpenAI na analýzu výsledkov namiesto spoliehania sa na knižnicu scraper. Pri vytváraní receptu cez URL sa to vykoná automaticky, ak knižnica scraper zlyhá, ale tu to môžete otestovať manuálne.",
|
||||
"debug": "Debugovať",
|
||||
"tree-view": "Stromový pohľad",
|
||||
"recipe-yield": "Počet porcií",
|
||||
@@ -596,21 +601,21 @@
|
||||
"screen-awake": "Ponechať obrazovku stále zapnutú",
|
||||
"remove-image": "Odstrániť obrázok",
|
||||
"nextStep": "Ďalší krok",
|
||||
"recipe-actions": "Recipe Actions",
|
||||
"recipe-actions": "Akcie s receptom",
|
||||
"parser": {
|
||||
"experimental-alert-text": "Mealie uses natural language processing to parse and create units and food items for your recipe ingredients. This feature is experimental and may not always work as expected. If you prefer not to use the parsed results, you can select 'Cancel' and your changes will not be saved.",
|
||||
"ingredient-parser": "Ingredient Parser",
|
||||
"explanation": "To use the ingredient parser, click the 'Parse All' button to start the process. Once the processed ingredients are available, you can review the items and verify that they were parsed correctly. The model's confidence score is displayed on the right of the item title. This score is an average of all the individual scores and may not always be completely accurate.",
|
||||
"alerts-explainer": "Alerts will be displayed if a matching foods or unit is found but does not exists in the database.",
|
||||
"select-parser": "Select Parser",
|
||||
"natural-language-processor": "Natural Language Processor",
|
||||
"brute-parser": "Brute Parser",
|
||||
"openai-parser": "OpenAI Parser",
|
||||
"parse-all": "Parse All",
|
||||
"no-unit": "No unit",
|
||||
"missing-unit": "Create missing unit: {unit}",
|
||||
"missing-food": "Create missing food: {food}",
|
||||
"no-food": "No Food"
|
||||
"experimental-alert-text": "Mealie používa spracovanie prirodzeného jazyka na analýzu a vytváranie jednotiek a potravín pre ingrediencie vášho receptu. Táto funkcia je experimentálna a nemusí vždy fungovať podľa očakávania. Ak nechcete použiť analyzované výsledky, môžete vybrať možnosť „Zrušiť“ a vaše zmeny sa neuložia.",
|
||||
"ingredient-parser": "Parser ingrediencií",
|
||||
"explanation": "Ak chcete použiť parser ingrediencií, kliknutím na tlačidlo „Spracovať všetko“ spustite proces parsovania. Keď budú spracované ingrediencie k dispozícii, môžete položky skontrolovať a overiť, či boli správne analyzované. Skóre spoľahlivosti modelu sa zobrazuje napravo od názvu položky. Toto skóre je priemerom všetkých individuálnych skóre a nemusí byť vždy úplne presné.",
|
||||
"alerts-explainer": "Upozornenia sa zobrazia, ak sa nájde zodpovedajúce jedlo alebo jednotka, ktoré v databáze ešte neexistuje.",
|
||||
"select-parser": "Vyber si parser",
|
||||
"natural-language-processor": "Spracovanie prirodzeného jazyka",
|
||||
"brute-parser": "Parsovanie hrubou silou",
|
||||
"openai-parser": "OpenAI parser",
|
||||
"parse-all": "Spracovať všetko",
|
||||
"no-unit": "Bez jednotky",
|
||||
"missing-unit": "Vytvoriť chýbajúcu jednotku: {unit}",
|
||||
"missing-food": "Vytvoriť chýbajúcu surovinu: {food}",
|
||||
"no-food": "Žiadne suroviny"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
@@ -640,7 +645,7 @@
|
||||
"backup-created-at-response-export_path": "Záloha vytvorená v {path}",
|
||||
"backup-deleted": "Záloha bola odstránená",
|
||||
"restore-success": "Obnovenie bolo úspešné",
|
||||
"restore-fail": "Restore failed. Check your server logs for more details",
|
||||
"restore-fail": "Obnovenie zlyhalo. Ďalšie podrobnosti nájdete v denníkoch servera",
|
||||
"backup-tag": "Označenie zálohy",
|
||||
"create-heading": "Vytvoriť zálohu",
|
||||
"delete-backup": "Odstrániť zálohu",
|
||||
@@ -778,9 +783,9 @@
|
||||
"oidc-ready": "OIDC pripravené",
|
||||
"oidc-ready-error-text": "Niektoré z OIDC hodnôt nie sú nakonfigurované. Toto varovanie je možné ignorovať, ak nepoužívate OIDC autentifikáciu.",
|
||||
"oidc-ready-success-text": "Všetky potrebné OIDC premenné sú nastavené.",
|
||||
"openai-ready": "OpenAI Ready",
|
||||
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
|
||||
"openai-ready-success-text": "Required OpenAI variables are all set."
|
||||
"openai-ready": "OpenAI pripravené",
|
||||
"openai-ready-error-text": "Nie všetky hodnoty pre OpenAI sú nakonfigurované. Toto môžete ignorovať, ak nepoužívate funkcie OpenAI.",
|
||||
"openai-ready-success-text": "Všetky požadované premenné pre OpenAI sú nastavené."
|
||||
},
|
||||
"shopping-list": {
|
||||
"all-lists": "Všetky zoznamy",
|
||||
@@ -794,7 +799,7 @@
|
||||
"food": "Jedlo",
|
||||
"note": "Poznámka",
|
||||
"label": "Štítok",
|
||||
"save-label": "Save Label",
|
||||
"save-label": "Uložiť štítok",
|
||||
"linked-item-warning": "Táto položka je prepojená s jedným alebo viacerými receptami. Zmena jednotiek alebo jedál bude viesť k neželaným zmenám pri pridávaní alebo odoberaní receptov z tohto zoznamu.",
|
||||
"toggle-food": "Prepnúť jedlo",
|
||||
"manage-labels": "Spravovať štítky",
|
||||
@@ -810,11 +815,11 @@
|
||||
"items-checked-count": "Nie sú označené žiadne položky|Jedna označená položka|{count} označených položiek",
|
||||
"no-label": "Žiadny štítok",
|
||||
"completed-on": "Ukončené {date}",
|
||||
"you-are-offline": "You are offline",
|
||||
"you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.",
|
||||
"are-you-sure-you-want-to-check-all-items": "Are you sure you want to check all items?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Are you sure you want to uncheck all items?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Are you sure you want to delete all checked items?"
|
||||
"you-are-offline": "Nemáte prístup k internetu",
|
||||
"you-are-offline-description": "V režime offline nie sú dostupné všetky funkcie. Stále môžete pridávať, upravovať a odstraňovať položky, ale nebudete môcť synchronizovať svoje zmeny so serverom, kým nebudete opäť online.",
|
||||
"are-you-sure-you-want-to-check-all-items": "Naozaj chcete označiť všetky položky?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Naozaj chcete zrušiť označenie všetkých položiek?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Naozaj chcete odstrániť všetky označené položky?"
|
||||
},
|
||||
"sidebar": {
|
||||
"all-recipes": "Všetky recepty",
|
||||
@@ -958,7 +963,7 @@
|
||||
"authentication-method-hint": "Toto určuje ako bude overený užívateľ. Ak si nie ste istý, zvoľte 'Mealie'",
|
||||
"permissions": "Povolenia",
|
||||
"administrator": "Administrátor",
|
||||
"user-can-invite-other-to-group": "User can invite others to group",
|
||||
"user-can-invite-other-to-group": "Používateľ môže pozvať ostatných do skupiny",
|
||||
"user-can-manage-group": "Užívateľ môže spravovať skupinu",
|
||||
"user-can-organize-group-data": "Užívateľ môže spravovať údaje skupiny",
|
||||
"enable-advanced-features": "Povoliť pokročilé funkcie",
|
||||
@@ -985,13 +990,13 @@
|
||||
"source-food": "Zdrojové jedlo",
|
||||
"target-food": "Cieľové jedlo",
|
||||
"create-food": "Vytvoriť jedlo",
|
||||
"food-label": "Značka jedla",
|
||||
"food-label": "Štítok jedla",
|
||||
"edit-food": "Upraviť jedlo",
|
||||
"food-data": "Údaje o jedle",
|
||||
"example-food-singular": "napr.: cibuľa",
|
||||
"example-food-plural": "napr.: cibule",
|
||||
"label-overwrite-warning": "This will assign the chosen label to all selected foods and potentially overwrite your existing labels.",
|
||||
"on-hand-checkbox-label": "Setting this flag will make this food unchecked by default when adding a recipe to a shopping list."
|
||||
"label-overwrite-warning": "Toto priradí zvolený štítok všetkým vybraným potravinám a potenciálne prepíše vaše existujúce štítky.",
|
||||
"on-hand-checkbox-label": "Nastavením tohto príznaku bude táto surovina, pri pridávaní receptu do nákupného zoznamu, predvolene nezačiarknutá."
|
||||
},
|
||||
"units": {
|
||||
"seed-dialog-text": "Naplniť databázu z bežnými štítkami podla vášho lokálneho jazyka.",
|
||||
@@ -1017,10 +1022,10 @@
|
||||
},
|
||||
"labels": {
|
||||
"seed-dialog-text": "Naplniť databázu z bežnými štítkami podla vášho lokálneho jazyka.",
|
||||
"edit-label": "Upraviť značku",
|
||||
"new-label": "Nová značka",
|
||||
"labels": "Značky",
|
||||
"assign-label": "Assign Label"
|
||||
"edit-label": "Upraviť štítok",
|
||||
"new-label": "Nový štítok",
|
||||
"labels": "Štítky",
|
||||
"assign-label": "Priradiť štítok"
|
||||
},
|
||||
"recipes": {
|
||||
"purge-exports": "Vyčistiť exporty",
|
||||
@@ -1044,10 +1049,10 @@
|
||||
"source-unit-will-be-deleted": "Zdroj bude vymazaný"
|
||||
},
|
||||
"recipe-actions": {
|
||||
"recipe-actions-data": "Recipe Actions Data",
|
||||
"new-recipe-action": "New Recipe Action",
|
||||
"edit-recipe-action": "Edit Recipe Action",
|
||||
"action-type": "Action Type"
|
||||
"recipe-actions-data": "Dáta akcií receptu",
|
||||
"new-recipe-action": "Nová akcia receptu",
|
||||
"edit-recipe-action": "Upraviť akciu receptu",
|
||||
"action-type": "Typ akcie"
|
||||
},
|
||||
"create-alias": "Vytvoriť alias",
|
||||
"manage-aliases": "Spravovať aliasy",
|
||||
@@ -1217,21 +1222,21 @@
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"welcome-user": "👋 Welcome, {0}!",
|
||||
"welcome-user": "👋 Vitajte, {0}!",
|
||||
"description": "Spravujte svoj profil, recepty a nastavenia skupín.",
|
||||
"get-invite-link": "Odkaz s pozvánkou",
|
||||
"get-public-link": "Vytvoriť verejný odkaz",
|
||||
"account-summary": "Zhrnutie účtu",
|
||||
"account-summary-description": "Here's a summary of your group's information.",
|
||||
"account-summary-description": "Tu je súhrn informácií o vašej skupine.",
|
||||
"group-statistics": "Štatistiky skupiny",
|
||||
"group-statistics-description": "Štatistiky vašej skupiny poskytujú ďalší pohľad na to, ako využívate Mealie.",
|
||||
"storage-capacity": "Kapacita úložiska",
|
||||
"storage-capacity-description": "Kapacita vášho úložiska sa počíta ako celkový objem obrázkov a príloh, ktoré máte nahraté.",
|
||||
"personal": "Osobné",
|
||||
"personal-description": "These are settings that are personal to you. Changes here won't affect other users.",
|
||||
"personal-description": "Toto sú vaše osobné nastavenia. Zmeny týchto nastavení neovplyvnia ostatných používateľov.",
|
||||
"user-settings": "Užívateľské nastavenia",
|
||||
"user-settings-description": "Manage your preferences, change your password, and update your email.",
|
||||
"api-tokens-description": "Manage your API Tokens for access from external applications.",
|
||||
"user-settings-description": "Spravujte svoje preferencie, zmeňte svoje heslo a aktualizujte svoj e-mail.",
|
||||
"api-tokens-description": "Spravujte svoje API tokeny pre prístup z externých aplikácií.",
|
||||
"group-description": "Tieto položky sú zdieľané v rámci vašej skupiny. Zmena ktorejkoľvek z nich sa prejaví v celej skupine!",
|
||||
"group-settings": "Nastavenia skupiny",
|
||||
"group-settings-description": "Spravujte bežné nastavenia vašej skupiny ako napr. jedálniček, či nastavenia súkromia.",
|
||||
@@ -1242,9 +1247,9 @@
|
||||
"notifiers": "Notifikátory",
|
||||
"notifiers-description": "Nastaviť e-mail a push notifikácie, ktoré sa spúšťajú pri špecifických udalostiach.",
|
||||
"manage-data": "Spravovať dáta",
|
||||
"manage-data-description": "Manage your Mealie data; Foods, Units, Categories, Tags and more.",
|
||||
"manage-data-description": "Spravujte svoje údaje, jedlá, jednotky, kategórie, štítky a ďalšie.",
|
||||
"data-migrations": "Migrácie dát",
|
||||
"data-migrations-description": "Migrate your existing data from other applications like Nextcloud Recipes and Chowdown.",
|
||||
"data-migrations-description": "Migrujte svoje existujúce údaje z iných aplikácií, ako sú Nextcloud Recipes a Chowdown.",
|
||||
"email-sent": "E-mail Odoslaný",
|
||||
"error-sending-email": "Chyba pri odosielaní e-mailu",
|
||||
"personal-information": "Osobné údaje",
|
||||
|
||||
@@ -292,8 +292,8 @@
|
||||
"mealplan-updated": "Jedilnik je posodobljen",
|
||||
"no-meal-plan-defined-yet": "Za danes ni definiranjega načrta obroka",
|
||||
"no-meal-planned-for-today": "Za danes ni planiranega načrta obroka",
|
||||
"numberOfDays-hint": "Number of days on page load",
|
||||
"numberOfDays-label": "Default Days",
|
||||
"numberOfDays-hint": "Število dni na začetni strani",
|
||||
"numberOfDays-label": "Privzeto dni",
|
||||
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Samo recepti v teh kategorija bodo uporabljeni v načrtu obroka",
|
||||
"planner": "Načrtovalec",
|
||||
"quick-week": "Hiter pogled tedna",
|
||||
@@ -383,7 +383,7 @@
|
||||
},
|
||||
"recipekeeper": {
|
||||
"title": "Recipe Keeper",
|
||||
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
|
||||
"description-long": "Mealie lahko uvozi recepte iz Recipe Keeper. Izvozi svoje recepte v .zip formatu, nato spodaj naloži .zip datoteko."
|
||||
}
|
||||
},
|
||||
"new-recipe": {
|
||||
@@ -562,6 +562,11 @@
|
||||
"create-recipes": "Ustvari recepte",
|
||||
"import-with-zip": "Uvozi z .zip",
|
||||
"create-recipe-from-an-image": "Ustvari recept iz slike",
|
||||
"create-recipe-from-an-image-description": "Ustvarite recept tako, da naložite njegovo sliko. Mealie bo s pomočjo umetne inteligence poskušal izluščiti besedilo iz slike in iz njega ustvariti recept.",
|
||||
"crop-and-rotate-the-image": "Obrežite in zasukajte sliko, tako da bo vidno samo besedilo in da bo v pravilnem položaju.",
|
||||
"create-from-image": "Ustvari iz slike",
|
||||
"should-translate-description": "Prevedi recept v moj jezik",
|
||||
"please-wait-image-procesing": "Počakajte, slika je v obdelavi. To lahko traja nekaj časa.",
|
||||
"bulk-url-import": "Masovno uvozi preko URLja",
|
||||
"debug-scraper": "Odpravljanje težav s strgalnikom",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Ustvari recept z izbranim imenom. Vsi recepti morajo imeti unikatna imena.",
|
||||
@@ -587,7 +592,7 @@
|
||||
"recipe-debugger": "Odpravljanje težav v strganju recepta",
|
||||
"recipe-debugger-description": "Prilepi povezavo do recepta, ki ga želiš postrgati. Strgalnik receptov bo postrgal spletno stran in prikazal rezultate. Če ne vidiš nobenih podatkov, potem spletna stran, ki jo želiš strgati ni podprta v Mealie oz. v strgalniku, ki ga uporablja.",
|
||||
"use-openai": "Uporabi OpenAI",
|
||||
"recipe-debugger-use-openai-description": "Use OpenAI to parse the results instead of relying on the scraper library. When creating a recipe via URL, this is done automatically if the scraper library fails, but you may test it manually here.",
|
||||
"recipe-debugger-use-openai-description": "Za razčlenitev rezultatov uporabite OpenAI, namesto da se zanašate na knjižnico strgala. Ko ustvarjate recept prek URL-ja, se to izvede samodejno, če knjižnica strgala odpove, vendar ga lahko tukaj preizkusite ročno.",
|
||||
"debug": "Debug",
|
||||
"tree-view": "Drevesni prikaz",
|
||||
"recipe-yield": "Število porcij",
|
||||
@@ -604,8 +609,8 @@
|
||||
"alerts-explainer": "Opozorila bodo prikazana v primeru, da obstaja ujemajoče živilo ali enota, ampak še ne obstaja v podatkovni bazi.",
|
||||
"select-parser": "Izberi razčlenjevalnik",
|
||||
"natural-language-processor": "Procesor naravnega jezika",
|
||||
"brute-parser": "Brute Parser",
|
||||
"openai-parser": "OpenAI Parser",
|
||||
"brute-parser": "Surov razčlenjevalnik",
|
||||
"openai-parser": "Razčlenjevalnik OpenAI",
|
||||
"parse-all": "Razčleni vse",
|
||||
"no-unit": "Ni enote",
|
||||
"missing-unit": "Ustvari manjkajočo enoto: {unit}",
|
||||
@@ -640,7 +645,7 @@
|
||||
"backup-created-at-response-export_path": "Varnostna kopija ustvarjena v {path}",
|
||||
"backup-deleted": "Varnostna kopija je izbrisana",
|
||||
"restore-success": "Obnovitev uspešna",
|
||||
"restore-fail": "Restore failed. Check your server logs for more details",
|
||||
"restore-fail": "Obnovitev ni uspela. Za več podrobnosti preverite dnevnike strežnika",
|
||||
"backup-tag": "Oznaka varnostne kopije",
|
||||
"create-heading": "Izdelaj varnostno kopijo",
|
||||
"delete-backup": "Izbriši varnostno kopijo",
|
||||
@@ -748,9 +753,9 @@
|
||||
"tracker": "Tracker",
|
||||
"configuration": "Nastavitve",
|
||||
"docker-volume": "Docker Volume",
|
||||
"docker-volume-help": "Mealie requires that the frontend container and the backend share the same docker volume or storage. This ensures that the frontend container can properly access the images and assets stored on disk.",
|
||||
"volumes-are-misconfigured": "Volumes are misconfigured.",
|
||||
"volumes-are-configured-correctly": "Volumes are configured correctly.",
|
||||
"docker-volume-help": "Mealie zahteva, da vsebnik sprednjega dela in zadnji del delita isto mapo ali shrambo priklopne postaje. To zagotavlja, da lahko sprednji vsebnik pravilno dostopa do slik in sredstev, shranjenih na disku.",
|
||||
"volumes-are-misconfigured": "Mape so napačno nastavljene.",
|
||||
"volumes-are-configured-correctly": "Mape so nastavljene pravilno.",
|
||||
"status-unknown-try-running-a-validation": "Status ni znan. Poženi validacijo.",
|
||||
"validate": "Validiraj",
|
||||
"email-configuration-status": "Email status",
|
||||
@@ -778,9 +783,9 @@
|
||||
"oidc-ready": "OIDC Ready",
|
||||
"oidc-ready-error-text": "Nekatere OIDC vrednosti niso nastavljene. To lahko ignoriraš, če ne uporabljaš OIDC avtentikacije.",
|
||||
"oidc-ready-success-text": "Vse zahtevane OIDC spremenljivke so nastavljene.",
|
||||
"openai-ready": "OpenAI Ready",
|
||||
"openai-ready-error-text": "Not all OpenAI Values are configured. This can be ignored if you are not using OpenAI features.",
|
||||
"openai-ready-success-text": "Required OpenAI variables are all set."
|
||||
"openai-ready": "OpenAI pripravljen",
|
||||
"openai-ready-error-text": "Niso nastavljene vse OpenAI vrednosti. To lahko prezrete, če ne uporabljate OpenAi funkcij.",
|
||||
"openai-ready-success-text": "Vse zahtevane spremenljivke OpenAI so nastavljene."
|
||||
},
|
||||
"shopping-list": {
|
||||
"all-lists": "Vsi seznami",
|
||||
@@ -794,7 +799,7 @@
|
||||
"food": "Živilo",
|
||||
"note": "Opomba",
|
||||
"label": "Oznaka",
|
||||
"save-label": "Save Label",
|
||||
"save-label": "Shranite oznako",
|
||||
"linked-item-warning": "Ta sestavina je povezana na en ali več receptov. Če spremenite enote količin, se lahko kaj podre, ko dodajate ali odstranjujete iz seznama.",
|
||||
"toggle-food": "Preklopi med hrano",
|
||||
"manage-labels": "Upravljanje oznak",
|
||||
@@ -810,11 +815,11 @@
|
||||
"items-checked-count": "Nobena postavka ni izbrana|Ena postavka izbrana|{count} postavk izbranih",
|
||||
"no-label": "Brez oznake",
|
||||
"completed-on": "Zaključena {date}",
|
||||
"you-are-offline": "You are offline",
|
||||
"you-are-offline-description": "Not all features are available while offline. You can still add, modify, and remove items, but you will not be able to sync your changes to the server until you are back online.",
|
||||
"are-you-sure-you-want-to-check-all-items": "Are you sure you want to check all items?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Are you sure you want to uncheck all items?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Are you sure you want to delete all checked items?"
|
||||
"you-are-offline": "Niste povezani",
|
||||
"you-are-offline-description": "V načinu brez povezave niso na voljo vse funkcije. Še vedno lahko dodajate, spreminjate in odstranjujete elemente, vendar ne boste mogli sinhronizirati svojih sprememb s strežnikom, dokler ne boste spet povezani.",
|
||||
"are-you-sure-you-want-to-check-all-items": "Ali res želite izbrati vse elemente?",
|
||||
"are-you-sure-you-want-to-uncheck-all-items": "Ali res ne želite izbrati vseh elementov?",
|
||||
"are-you-sure-you-want-to-delete-checked-items": "Ali ste prepričani, da želite izbrisati vse izbrane elemente?"
|
||||
},
|
||||
"sidebar": {
|
||||
"all-recipes": "Vsi recepti",
|
||||
@@ -958,7 +963,7 @@
|
||||
"authentication-method-hint": "This specifies how a user will authenticate with Mealie. If you're not sure, choose 'Mealie",
|
||||
"permissions": "Dovoljenja",
|
||||
"administrator": "Administrator",
|
||||
"user-can-invite-other-to-group": "User can invite others to group",
|
||||
"user-can-invite-other-to-group": "Uporabnih lahko povabi druge v skupino",
|
||||
"user-can-manage-group": "Uporabnik lahko upravlja s skupino",
|
||||
"user-can-organize-group-data": "Uporabnik lahko organizira podatke skupine",
|
||||
"enable-advanced-features": "Vključi napredne funkcije",
|
||||
@@ -990,8 +995,8 @@
|
||||
"food-data": "Podatki o živilih",
|
||||
"example-food-singular": "npr: Čebula",
|
||||
"example-food-plural": "npr: Čebule",
|
||||
"label-overwrite-warning": "This will assign the chosen label to all selected foods and potentially overwrite your existing labels.",
|
||||
"on-hand-checkbox-label": "Setting this flag will make this food unchecked by default when adding a recipe to a shopping list."
|
||||
"label-overwrite-warning": "S tem boste izbrano oznako dodelili vsem izbranim živilom in morda prepisali vaše obstoječe oznake.",
|
||||
"on-hand-checkbox-label": "Če nastavite to zastavico, bo to živilo privzeto odstranjeno, ko dodate recept na nakupovalni seznam."
|
||||
},
|
||||
"units": {
|
||||
"seed-dialog-text": "Napolni podatkovno bazo z običajnimi enotami, glede na vaš lokalni jezik.",
|
||||
@@ -1020,7 +1025,7 @@
|
||||
"edit-label": "Uredi oznako",
|
||||
"new-label": "Nova oznaka",
|
||||
"labels": "Oznake",
|
||||
"assign-label": "Assign Label"
|
||||
"assign-label": "Dodeli oznako"
|
||||
},
|
||||
"recipes": {
|
||||
"purge-exports": "Počisti izvoze",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Увези помоћу .zip архиве",
|
||||
"create-recipe-from-an-image": "Направи рецепт са слике",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Масовни увоз помоћу URL",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Направи рецепт додајући име. Сви рецепти морају имати јединствена имена.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Skapa nytt recept från grunden.",
|
||||
"create-recipes": "Skapa recept",
|
||||
"import-with-zip": "Importera från .zip",
|
||||
"create-recipe-from-an-image": "Skapa recept från en bild",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Massimport från URL",
|
||||
"debug-scraper": "Felsökningsskrapa",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Skapa ett recept genom att ange namnet. Alla recept måste ha unika namn.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Sıfırdan yeni bir tarif oluşturun.",
|
||||
"create-recipes": "Tarif Oluştur",
|
||||
"import-with-zip": ".zip ile içe aktar",
|
||||
"create-recipe-from-an-image": "Görüntüden yemek tarifi oluştur",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Toplu URL İçe Aktarma",
|
||||
"debug-scraper": "Veri Kazıma Hata Ayıklayıcı",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "İsim vererek bir tarif oluşturun. Tüm tariflerin benzersiz isimleri olması gerekiyor.",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Створити новий рецепт з нуля.",
|
||||
"create-recipes": "Створити рецепти",
|
||||
"import-with-zip": "Імпорт з .zip",
|
||||
"create-recipe-from-an-image": "Створити рецепт із зображення",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Масовий URL імпорт",
|
||||
"debug-scraper": "Дебажити розпізнавач",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Створіть рецепт, надавши назву. Усі рецепти повинні мати унікальні назви.",
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"about": {
|
||||
"about": "About",
|
||||
"about-mealie": "About Mealie",
|
||||
"about": "Giới thiệu",
|
||||
"about-mealie": "Giới thiệu Mealie",
|
||||
"api-docs": "API Docs",
|
||||
"api-port": "API Port",
|
||||
"application-mode": "Application Mode",
|
||||
"database-type": "Database Type",
|
||||
"database-type": "Loại cơ sở dữ liệu",
|
||||
"database-url": "Database URL",
|
||||
"default-group": "Default Group",
|
||||
"demo": "Demo",
|
||||
"demo": "Bản thử nghiệm",
|
||||
"demo-status": "Demo Status",
|
||||
"development": "Development",
|
||||
"docs": "Docs",
|
||||
@@ -59,13 +59,13 @@
|
||||
"new-notification-form-description": "Mealie uses the Apprise library to generate notifications. They offer many options for services to use for notifications. Refer to their wiki for a comprehensive guide on how to create the URL for your service. If available, selecting the type of your notification may include extra features.",
|
||||
"new-version": "New version available!",
|
||||
"notification": "Notification",
|
||||
"refresh": "Refresh",
|
||||
"refresh": "Làm mới",
|
||||
"scheduled": "Scheduled",
|
||||
"something-went-wrong": "Something Went Wrong!",
|
||||
"subscribed-events": "Subscribed Events",
|
||||
"test-message-sent": "Test Message Sent",
|
||||
"message-sent": "Message Sent",
|
||||
"new-notification": "New Notification",
|
||||
"test-message-sent": "Đã gửi thử tin nhắn",
|
||||
"message-sent": "Đã gửi tin nhắn",
|
||||
"new-notification": "Thông báo mới",
|
||||
"event-notifiers": "Event Notifiers",
|
||||
"apprise-url-skipped-if-blank": "Apprise URL (skipped if blank)",
|
||||
"enable-notifier": "Enable Notifier",
|
||||
@@ -81,39 +81,39 @@
|
||||
"recipe-events": "Recipe Events"
|
||||
},
|
||||
"general": {
|
||||
"add": "Add",
|
||||
"cancel": "Cancel",
|
||||
"clear": "Clear",
|
||||
"close": "Close",
|
||||
"confirm": "Confirm",
|
||||
"add": "Thêm",
|
||||
"cancel": "Hủy",
|
||||
"clear": "Xóa",
|
||||
"close": "Đóng",
|
||||
"confirm": "Xác nhận",
|
||||
"confirm-how-does-everything-look": "How does everything look?",
|
||||
"confirm-delete-generic": "Are you sure you want to delete this?",
|
||||
"copied_message": "Copied!",
|
||||
"create": "Create",
|
||||
"created": "Created",
|
||||
"custom": "Custom",
|
||||
"dashboard": "Dashboard",
|
||||
"delete": "Delete",
|
||||
"disabled": "Disabled",
|
||||
"download": "Download",
|
||||
"duplicate": "Duplicate",
|
||||
"edit": "Edit",
|
||||
"enabled": "Enabled",
|
||||
"exception": "Exception",
|
||||
"failed-count": "Failed: {count}",
|
||||
"failure-uploading-file": "Failure uploading file",
|
||||
"favorites": "Favorites",
|
||||
"field-required": "Field Required",
|
||||
"file-folder-not-found": "File/folder not found",
|
||||
"file-uploaded": "File uploaded",
|
||||
"filter": "Filter",
|
||||
"friday": "Friday",
|
||||
"general": "General",
|
||||
"confirm-delete-generic": "Bạn có chắc muốn xoá?",
|
||||
"copied_message": "Đã sao chép!",
|
||||
"create": "Tạo mới",
|
||||
"created": "Đã tạo",
|
||||
"custom": "Tuỳ chỉnh",
|
||||
"dashboard": "Bảng điều khiển",
|
||||
"delete": "Xóa",
|
||||
"disabled": "Đã vô hiệu",
|
||||
"download": "Tải xuống",
|
||||
"duplicate": "Tạo bản sao",
|
||||
"edit": "Chỉnh sửa",
|
||||
"enabled": "Đã kích hoạt",
|
||||
"exception": "Lỗi",
|
||||
"failed-count": "Thất bại: {count}",
|
||||
"failure-uploading-file": "Không thể tải file lên",
|
||||
"favorites": "Yêu thích",
|
||||
"field-required": "Bắt buộc",
|
||||
"file-folder-not-found": "File hoặc thư mục không tồn tại",
|
||||
"file-uploaded": "Đã tải file lên",
|
||||
"filter": "Bộ lọc",
|
||||
"friday": "Thứ 6",
|
||||
"general": "Chung",
|
||||
"get": "Get",
|
||||
"home": "Home",
|
||||
"image": "Image",
|
||||
"image-upload-failed": "Image upload failed",
|
||||
"import": "Import",
|
||||
"home": "Trang chủ",
|
||||
"image": "Hình ảnh",
|
||||
"image-upload-failed": "Tải ảnh không thành công",
|
||||
"import": "Nhập dữ liệu",
|
||||
"json": "JSON",
|
||||
"keyword": "Keyword",
|
||||
"link-copied": "Link Copied",
|
||||
@@ -150,53 +150,53 @@
|
||||
"sort": "Sort",
|
||||
"sort-ascending": "Sort Ascending",
|
||||
"sort-descending": "Sort Descending",
|
||||
"sort-alphabetically": "Alphabetical",
|
||||
"status": "Status",
|
||||
"subject": "Subject",
|
||||
"submit": "Submit",
|
||||
"success-count": "Success: {count}",
|
||||
"sunday": "Sunday",
|
||||
"system": "System",
|
||||
"templates": "Templates:",
|
||||
"test": "Test",
|
||||
"themes": "Themes",
|
||||
"thursday": "Thursday",
|
||||
"title": "Title",
|
||||
"sort-alphabetically": "Thứ tự bảng chữ cái",
|
||||
"status": "Trạng thái",
|
||||
"subject": "Chủ đề",
|
||||
"submit": "Gửi",
|
||||
"success-count": "Thành công: {count}",
|
||||
"sunday": "Chủ Nhật",
|
||||
"system": "Hệ thống",
|
||||
"templates": "Mẫu:",
|
||||
"test": "Chạy thử",
|
||||
"themes": "Giao diện",
|
||||
"thursday": "Thứ 5",
|
||||
"title": "Tiêu đề",
|
||||
"token": "Token",
|
||||
"tuesday": "Tuesday",
|
||||
"type": "Type",
|
||||
"update": "Update",
|
||||
"updated": "Updated",
|
||||
"upload": "Upload",
|
||||
"tuesday": "Thứ 3",
|
||||
"type": "Loại",
|
||||
"update": "Cập nhật",
|
||||
"updated": "Đã cập nhật",
|
||||
"upload": "Tải lên",
|
||||
"url": "URL",
|
||||
"view": "View",
|
||||
"wednesday": "Wednesday",
|
||||
"yes": "Yes",
|
||||
"foods": "Foods",
|
||||
"units": "Units",
|
||||
"back": "Back",
|
||||
"next": "Next",
|
||||
"start": "Start",
|
||||
"toggle-view": "Toggle View",
|
||||
"date": "Date",
|
||||
"view": "Xem",
|
||||
"wednesday": "Thứ 4",
|
||||
"yes": "Đồng ý",
|
||||
"foods": "Thức ăn",
|
||||
"units": "Đơn vị",
|
||||
"back": "Trở lại",
|
||||
"next": "Tiếp tục",
|
||||
"start": "Bắt đầu",
|
||||
"toggle-view": "Chuyển đổi chế độ xem",
|
||||
"date": "Ngày",
|
||||
"id": "Id",
|
||||
"owner": "Owner",
|
||||
"date-added": "Date Added",
|
||||
"none": "None",
|
||||
"run": "Run",
|
||||
"owner": "Người sở hữu",
|
||||
"date-added": "Ngày thêm",
|
||||
"none": "Trống",
|
||||
"run": "Chạy",
|
||||
"menu": "Menu",
|
||||
"a-name-is-required": "A Name is Required",
|
||||
"delete-with-name": "Delete {name}",
|
||||
"confirm-delete-generic-with-name": "Are you sure you want to delete this {name}?",
|
||||
"confirm-delete-own-admin-account": "Please note that you are trying to delete your own admin account! This action cannot be undone and will permanently delete your account?",
|
||||
"organizer": "Organizer",
|
||||
"transfer": "Transfer",
|
||||
"copy": "Copy",
|
||||
"color": "Color",
|
||||
"timestamp": "Timestamp",
|
||||
"a-name-is-required": "Yêu cầu nhập tên",
|
||||
"delete-with-name": "Xoá {name}",
|
||||
"confirm-delete-generic-with-name": "Bạn có chắc chắn muốn xóa {name} không?",
|
||||
"confirm-delete-own-admin-account": "Lưu ý, bạn đang xóa tài khoản admin của bản thân! Hành động này không thể được khôi phục?",
|
||||
"organizer": "Quản lý",
|
||||
"transfer": "Chuyển",
|
||||
"copy": "Sao chép",
|
||||
"color": "Màu",
|
||||
"timestamp": "Thời gian",
|
||||
"last-made": "Last Made",
|
||||
"learn-more": "Learn More",
|
||||
"this-feature-is-currently-inactive": "This feature is currently inactive",
|
||||
"learn-more": "Tìm hiểu thêm",
|
||||
"this-feature-is-currently-inactive": "Tính năng này chưa được bật",
|
||||
"clipboard-not-supported": "Clipboard not supported",
|
||||
"copied-to-clipboard": "Copied to clipboard",
|
||||
"your-browser-does-not-support-clipboard": "Your browser does not support clipboard",
|
||||
@@ -297,10 +297,10 @@
|
||||
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
|
||||
"planner": "Planner",
|
||||
"quick-week": "Quick Week",
|
||||
"side": "Side",
|
||||
"sides": "Sides",
|
||||
"start-date": "Start Date",
|
||||
"rule-day": "Rule Day",
|
||||
"side": "Món ăn kèm",
|
||||
"sides": "Món ăn kèm",
|
||||
"start-date": "Ngày bắt đầu",
|
||||
"rule-day": "Ngày",
|
||||
"meal-type": "Meal Type",
|
||||
"breakfast": "Breakfast",
|
||||
"lunch": "Lunch",
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Import with .zip",
|
||||
"create-recipe-from-an-image": "Create recipe from an image",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
"clipboard-copy-failure": "未能复制到剪切板。",
|
||||
"confirm-delete-generic-items": "你确定删除以下条目吗?",
|
||||
"organizers": "管理器",
|
||||
"caution": "Caution"
|
||||
"caution": "注意!"
|
||||
},
|
||||
"group": {
|
||||
"are-you-sure-you-want-to-delete-the-group": "您确定要删除<b>{groupName}<b/>吗?",
|
||||
@@ -382,7 +382,7 @@
|
||||
"description-long": "Mealie可以从“My Recipe Box\"导入食谱。把你的食谱导出为CSV模式,然后在下面上传.csv文件。"
|
||||
},
|
||||
"recipekeeper": {
|
||||
"title": "Recipe Keeper",
|
||||
"title": "食谱保存者",
|
||||
"description-long": "Mealie can import recipes from Recipe Keeper. Export your recipes in zip format, then upload the .zip file below."
|
||||
}
|
||||
},
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "从头创建一个新食谱。",
|
||||
"create-recipes": "创建食谱",
|
||||
"import-with-zip": "使用 .zip 导入",
|
||||
"create-recipe-from-an-image": "用图片创建食谱",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "批量URL导入",
|
||||
"debug-scraper": "调试刮削器",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "通过名称创建食谱,食谱不可重名。",
|
||||
|
||||
@@ -561,7 +561,12 @@
|
||||
"create-recipe-description": "Create a new recipe from scratch.",
|
||||
"create-recipes": "Create Recipes",
|
||||
"import-with-zip": "Import with .zip",
|
||||
"create-recipe-from-an-image": "Create recipe from an image",
|
||||
"create-recipe-from-an-image": "Create Recipe from an Image",
|
||||
"create-recipe-from-an-image-description": "Create a recipe by uploading an image of it. Mealie will attempt to extract the text from the image using AI and create a recipe from it.",
|
||||
"crop-and-rotate-the-image": "Crop and rotate the image so that only the text is visible, and it's in the correct orientation.",
|
||||
"create-from-image": "Create from Image",
|
||||
"should-translate-description": "Translate the recipe into my language",
|
||||
"please-wait-image-procesing": "Please wait, the image is processing. This may take some time.",
|
||||
"bulk-url-import": "Bulk URL Import",
|
||||
"debug-scraper": "Debug Scraper",
|
||||
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
|
||||
|
||||
@@ -42,6 +42,7 @@ export interface AppInfo {
|
||||
oidcRedirect: boolean;
|
||||
oidcProviderName: string;
|
||||
enableOpenai: boolean;
|
||||
enableOpenaiImageServices: boolean;
|
||||
}
|
||||
export interface AppStartupInfo {
|
||||
isFirstLogin: boolean;
|
||||
|
||||
@@ -35,6 +35,7 @@ const routes = {
|
||||
recipesCreateUrl: `${prefix}/recipes/create-url`,
|
||||
recipesCreateUrlBulk: `${prefix}/recipes/create-url/bulk`,
|
||||
recipesCreateFromZip: `${prefix}/recipes/create-from-zip`,
|
||||
recipesCreateFromImage: `${prefix}/recipes/create-from-image`,
|
||||
recipesCategory: `${prefix}/recipes/category`,
|
||||
recipesParseIngredient: `${prefix}/parser/ingredient`,
|
||||
recipesParseIngredients: `${prefix}/parser/ingredients`,
|
||||
@@ -140,6 +141,19 @@ export class RecipeAPI extends BaseCRUDAPI<CreateRecipe, Recipe, Recipe> {
|
||||
return await this.requests.post<string>(routes.recipesCreateUrlBulk, payload);
|
||||
}
|
||||
|
||||
async createOneFromImage(fileObject: Blob | File, fileName: string, translateLanguage: string | null = null) {
|
||||
const formData = new FormData();
|
||||
formData.append("images", fileObject);
|
||||
formData.append("extension", fileName.split(".").pop() ?? "");
|
||||
|
||||
let apiRoute = routes.recipesCreateFromImage
|
||||
if (translateLanguage) {
|
||||
apiRoute = `${apiRoute}?translateLanguage=${translateLanguage}`
|
||||
}
|
||||
|
||||
return await this.requests.post<string>(apiRoute, formData);
|
||||
}
|
||||
|
||||
async parseIngredients(parser: Parser, ingredients: Array<string>) {
|
||||
parser = parser || "nlp";
|
||||
return await this.requests.post<ParsedIngredient[]>(routes.recipesParseIngredients, { parser, ingredients });
|
||||
|
||||
@@ -203,6 +203,7 @@ export default {
|
||||
{ code: "cs-CZ", file: "cs-CZ.json" },
|
||||
{ code: "gl-ES", file: "gl-ES.json" },
|
||||
{ code: "fr-FR", file: "fr-FR.json" },
|
||||
{ code: "fr-BE", file: "fr-BE.json" },
|
||||
{ code: "zh-TW", file: "zh-TW.json" },
|
||||
{ code: "af-ZA", file: "af-ZA.json" },
|
||||
{ code: "is-IS", file: "is-IS.json" },
|
||||
@@ -252,6 +253,7 @@ export default {
|
||||
"sr-SP": require("./lang/dateTimeFormats/sr-SP.json"),
|
||||
"cs-CZ": require("./lang/dateTimeFormats/cs-CZ.json"),
|
||||
"fr-FR": require("./lang/dateTimeFormats/fr-FR.json"),
|
||||
"fr-BE": require("./lang/dateTimeFormats/fr-BE.json"),
|
||||
"zh-TW": require("./lang/dateTimeFormats/zh-TW.json"),
|
||||
"af-ZA": require("./lang/dateTimeFormats/af-ZA.json"),
|
||||
"ru-RU": require("./lang/dateTimeFormats/ru-RU.json"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "mealie",
|
||||
"version": "1.10.1",
|
||||
"version": "1.11.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "nuxt",
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, useRouter, useContext, computed, useRoute } from "@nuxtjs/composition-api";
|
||||
import { useAppInfo } from "~/composables/api";
|
||||
import { MenuItem } from "~/components/global/BaseOverflowButton.vue";
|
||||
import AdvancedOnly from "~/components/global/AdvancedOnly.vue";
|
||||
|
||||
@@ -37,7 +38,10 @@ export default defineComponent({
|
||||
setup() {
|
||||
const { $auth, $globals, i18n } = useContext();
|
||||
|
||||
const subpages: MenuItem[] = [
|
||||
const appInfo = useAppInfo();
|
||||
const enableOpenAIImages = computed(() => appInfo.value?.enableOpenaiImageServices);
|
||||
|
||||
const subpages = computed<MenuItem[]>(() => [
|
||||
{
|
||||
icon: $globals.icons.link,
|
||||
text: i18n.tc("recipe.import-with-url"),
|
||||
@@ -48,6 +52,12 @@ export default defineComponent({
|
||||
text: i18n.tc("recipe.bulk-url-import"),
|
||||
value: "bulk",
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.fileImage,
|
||||
text: i18n.tc("recipe.create-from-image"),
|
||||
value: "image",
|
||||
hide: !enableOpenAIImages.value,
|
||||
},
|
||||
{
|
||||
icon: $globals.icons.edit,
|
||||
text: i18n.tc("recipe.create-recipe"),
|
||||
@@ -63,7 +73,7 @@ export default defineComponent({
|
||||
text: i18n.tc("recipe.debug-scraper"),
|
||||
value: "debug",
|
||||
},
|
||||
];
|
||||
]);
|
||||
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
|
||||
161
frontend/pages/g/_groupSlug/r/create/image.vue
Normal file
161
frontend/pages/g/_groupSlug/r/create/image.vue
Normal file
@@ -0,0 +1,161 @@
|
||||
<template>
|
||||
<div>
|
||||
<v-form ref="domUrlForm" @submit.prevent="createRecipe">
|
||||
<div>
|
||||
<v-card-title class="headline"> {{ $t('recipe.create-recipe-from-an-image') }} </v-card-title>
|
||||
<v-card-text>
|
||||
<p>{{ $t('recipe.create-recipe-from-an-image-description') }}</p>
|
||||
<v-container class="pa-0">
|
||||
<v-row>
|
||||
<v-col cols="auto" align-self="center">
|
||||
<AppButtonUpload
|
||||
v-if="!uploadedImage"
|
||||
class="ml-auto"
|
||||
url="none"
|
||||
file-name="image"
|
||||
accept="image/*"
|
||||
:text="$i18n.tc('recipe.upload-image')"
|
||||
:text-btn="false"
|
||||
:post="false"
|
||||
@uploaded="uploadImage"
|
||||
/>
|
||||
<v-btn
|
||||
v-if="!!uploadedImage"
|
||||
color="error"
|
||||
@click="clearImage"
|
||||
>
|
||||
<v-icon left>{{ $globals.icons.close }}</v-icon>
|
||||
{{ $i18n.tc('recipe.remove-image') }}
|
||||
</v-btn>
|
||||
</v-col>
|
||||
<v-spacer />
|
||||
</v-row>
|
||||
|
||||
<div v-if="uploadedImage && uploadedImagePreviewUrl" class="mt-3">
|
||||
<v-row>
|
||||
<v-col cols="12" class="pb-0">
|
||||
<v-card-text class="pa-0">
|
||||
<p class="mb-0">
|
||||
{{ $t('recipe.crop-and-rotate-the-image') }}
|
||||
</p>
|
||||
</v-card-text>
|
||||
</v-col>
|
||||
</v-row>
|
||||
<v-row style="max-width: 600px;">
|
||||
<v-spacer />
|
||||
<v-col cols="12">
|
||||
<ImageCropper
|
||||
:img="uploadedImagePreviewUrl"
|
||||
cropper-height="50vh"
|
||||
cropper-width="100%"
|
||||
@save="updateUploadedImage"
|
||||
/>
|
||||
</v-col>
|
||||
<v-spacer />
|
||||
</v-row>
|
||||
</div>
|
||||
</v-container>
|
||||
</v-card-text>
|
||||
<v-card-actions v-if="uploadedImage">
|
||||
<div>
|
||||
<p style="width: 250px">
|
||||
<BaseButton rounded block type="submit" :loading="loading" />
|
||||
</p>
|
||||
<p>
|
||||
<v-checkbox
|
||||
v-model="shouldTranslate"
|
||||
hide-details
|
||||
:label="$t('recipe.should-translate-description')"
|
||||
:disabled="loading"
|
||||
/>
|
||||
</p>
|
||||
<p v-if="loading" class="mb-0">
|
||||
{{ $t('recipe.please-wait-image-procesing') }}
|
||||
</p>
|
||||
</div>
|
||||
</v-card-actions>
|
||||
</div>
|
||||
</v-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import {
|
||||
computed,
|
||||
defineComponent,
|
||||
reactive,
|
||||
ref,
|
||||
toRefs,
|
||||
useContext,
|
||||
useRoute,
|
||||
useRouter,
|
||||
} from "@nuxtjs/composition-api";
|
||||
import { useUserApi } from "~/composables/api";
|
||||
import { alert } from "~/composables/use-toast";
|
||||
import { VForm } from "~/types/vuetify";
|
||||
|
||||
export default defineComponent({
|
||||
setup() {
|
||||
const state = reactive({
|
||||
loading: false,
|
||||
});
|
||||
|
||||
const { i18n } = useContext();
|
||||
const api = useUserApi();
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const groupSlug = computed(() => route.value.params.groupSlug || "");
|
||||
|
||||
const domUrlForm = ref<VForm | null>(null);
|
||||
const uploadedImage = ref<Blob | File>();
|
||||
const uploadedImageName = ref<string>("");
|
||||
const uploadedImagePreviewUrl = ref<string>();
|
||||
const shouldTranslate = ref(true);
|
||||
|
||||
function uploadImage(fileObject: File) {
|
||||
uploadedImage.value = fileObject;
|
||||
uploadedImageName.value = fileObject.name;
|
||||
uploadedImagePreviewUrl.value = URL.createObjectURL(fileObject);
|
||||
}
|
||||
|
||||
function updateUploadedImage(fileObject: Blob) {
|
||||
uploadedImage.value = fileObject;
|
||||
uploadedImagePreviewUrl.value = URL.createObjectURL(fileObject);
|
||||
}
|
||||
|
||||
function clearImage() {
|
||||
uploadedImage.value = undefined;
|
||||
uploadedImageName.value = "";
|
||||
uploadedImagePreviewUrl.value = undefined;
|
||||
}
|
||||
|
||||
async function createRecipe() {
|
||||
if (!uploadedImage.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
state.loading = true;
|
||||
const translateLanguage = shouldTranslate.value ? i18n.locale : undefined;
|
||||
const { data, error } = await api.recipes.createOneFromImage(uploadedImage.value, uploadedImageName.value, translateLanguage);
|
||||
if (error || !data) {
|
||||
alert.error(i18n.tc("events.something-went-wrong"));
|
||||
state.loading = false;
|
||||
} else {
|
||||
router.push(`/g/${groupSlug.value}/r/${data}`);
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
domUrlForm,
|
||||
uploadedImage,
|
||||
uploadedImagePreviewUrl,
|
||||
shouldTranslate,
|
||||
uploadImage,
|
||||
updateUploadedImage,
|
||||
clearImage,
|
||||
createRecipe,
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
@@ -67,6 +67,7 @@ export default {
|
||||
"sr-SP": locale.srCyrl,
|
||||
"cs-CZ": locale.cs,
|
||||
"fr-FR": locale.fr,
|
||||
"fr-BE": locale.fr,
|
||||
"zh-TW": locale.zhHant,
|
||||
"af-ZA": locale.af,
|
||||
"sl-SI": locale.sl,
|
||||
|
||||
@@ -4,9 +4,12 @@ from pathlib import Path
|
||||
|
||||
import dotenv
|
||||
|
||||
from mealie.core.settings import app_settings_constructor
|
||||
|
||||
from .settings import AppDirectories, AppSettings
|
||||
from mealie.core.settings import (
|
||||
AppDirectories,
|
||||
AppLoggingSettings,
|
||||
AppSettings,
|
||||
app_settings_constructor,
|
||||
)
|
||||
|
||||
CWD = Path(__file__).parent
|
||||
BASE_DIR = CWD.parent.parent
|
||||
@@ -38,3 +41,8 @@ def get_app_dirs() -> AppDirectories:
|
||||
@lru_cache
|
||||
def get_app_settings() -> AppSettings:
|
||||
return app_settings_constructor(env_file=ENV, production=PRODUCTION, data_dir=determine_data_dir())
|
||||
|
||||
|
||||
@lru_cache
|
||||
def get_logging_settings() -> AppLoggingSettings:
|
||||
return AppLoggingSettings(PRODUCTION=PRODUCTION)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import logging
|
||||
|
||||
from .config import get_app_dirs, get_app_settings
|
||||
from .config import get_app_dirs, get_logging_settings
|
||||
from .logger.config import configured_logger
|
||||
|
||||
__root_logger: None | logging.Logger = None
|
||||
@@ -18,25 +18,25 @@ def get_logger(module=None) -> logging.Logger:
|
||||
global __root_logger
|
||||
|
||||
if __root_logger is None:
|
||||
app_settings = get_app_settings()
|
||||
app_logging_settings = get_logging_settings()
|
||||
|
||||
mode = "development"
|
||||
|
||||
if app_settings.TESTING:
|
||||
if app_logging_settings.TESTING:
|
||||
mode = "testing"
|
||||
elif app_settings.PRODUCTION:
|
||||
elif app_logging_settings.PRODUCTION:
|
||||
mode = "production"
|
||||
|
||||
dirs = get_app_dirs()
|
||||
|
||||
substitutions = {
|
||||
"DATA_DIR": dirs.DATA_DIR.as_posix(),
|
||||
"LOG_LEVEL": app_settings.LOG_LEVEL.upper(),
|
||||
"LOG_LEVEL": app_logging_settings.LOG_LEVEL.upper(),
|
||||
}
|
||||
|
||||
__root_logger = configured_logger(
|
||||
mode=mode,
|
||||
config_override=app_settings.LOG_CONFIG_OVERRIDE,
|
||||
config_override=app_logging_settings.LOG_CONFIG_OVERRIDE,
|
||||
substitutions=substitutions,
|
||||
)
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ class SQLiteProvider(AbstractDBProvider, BaseModel):
|
||||
|
||||
@property
|
||||
def db_url(self) -> str:
|
||||
return f"sqlite:///{str(self.db_path.absolute())}"
|
||||
return f"sqlite:///{self.db_path.absolute()!s}"
|
||||
|
||||
@property
|
||||
def db_url_public(self) -> str:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import logging
|
||||
import os
|
||||
import secrets
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
@@ -34,10 +35,54 @@ def determine_secrets(data_dir: Path, production: bool) -> str:
|
||||
return new_secret
|
||||
|
||||
|
||||
class AppSettings(BaseSettings):
|
||||
def get_secrets_dir() -> str | None:
|
||||
"""
|
||||
Returns a directory to load secret settings from, or `None` if the secrets
|
||||
directory does not exist or cannot be accessed.
|
||||
"""
|
||||
# Avoid a circular import by importing here instead of at the file's top-level.
|
||||
# get_logger -> AppSettings -> get_logger
|
||||
from mealie.core.root_logger import get_logger
|
||||
|
||||
logger = get_logger()
|
||||
|
||||
secrets_dir = "/run/secrets"
|
||||
|
||||
# Check that the secrets directory exists.
|
||||
if not os.path.exists(secrets_dir):
|
||||
logger.warning(f"Secrets directory '{secrets_dir}' does not exist")
|
||||
return None
|
||||
|
||||
# Likewise, check we have permission to read from the secrets directory.
|
||||
if not os.access(secrets_dir, os.R_OK):
|
||||
logger.warning(f"Secrets directory '{secrets_dir}' cannot be read from. Check permissions")
|
||||
return None
|
||||
|
||||
# The secrets directory exists and can be accessed.
|
||||
return secrets_dir
|
||||
|
||||
|
||||
class AppLoggingSettings(BaseSettings):
|
||||
"""
|
||||
Subset of AppSettings to only access logging-related settings.
|
||||
|
||||
This is separated out from AppSettings to allow logging during construction
|
||||
of AppSettings.
|
||||
"""
|
||||
|
||||
TESTING: bool = False
|
||||
PRODUCTION: bool
|
||||
|
||||
LOG_CONFIG_OVERRIDE: Path | None = None
|
||||
"""path to custom logging configuration file"""
|
||||
|
||||
LOG_LEVEL: str = "info"
|
||||
"""corresponds to standard Python log levels"""
|
||||
|
||||
|
||||
class AppSettings(AppLoggingSettings):
|
||||
theme: Theme = Theme()
|
||||
|
||||
PRODUCTION: bool
|
||||
BASE_URL: str = "http://localhost:8080"
|
||||
"""trailing slashes are trimmed (ex. `http://localhost:8080/` becomes ``http://localhost:8080`)"""
|
||||
|
||||
@@ -56,12 +101,6 @@ class AppSettings(BaseSettings):
|
||||
|
||||
SECRET: str
|
||||
|
||||
LOG_CONFIG_OVERRIDE: Path | None = None
|
||||
"""path to custom logging configuration file"""
|
||||
|
||||
LOG_LEVEL: str = "info"
|
||||
"""corresponds to standard Python log levels"""
|
||||
|
||||
GIT_COMMIT_HASH: str = "unknown"
|
||||
|
||||
ALLOW_SIGNUP: bool = False
|
||||
@@ -69,17 +108,13 @@ class AppSettings(BaseSettings):
|
||||
DAILY_SCHEDULE_TIME: str = "23:45"
|
||||
"""Local server time, in HH:MM format. See `DAILY_SCHEDULE_TIME_UTC` for the parsed UTC equivalent"""
|
||||
|
||||
_logger: logging.Logger | None = None
|
||||
|
||||
@property
|
||||
def logger(self) -> logging.Logger:
|
||||
if self._logger is None:
|
||||
# lazy load the logger, since get_logger depends on the settings being loaded
|
||||
from mealie.core.root_logger import get_logger
|
||||
# Avoid a circular import by importing here instead of at the file's top-level.
|
||||
# get_logger -> AppSettings -> get_logger
|
||||
from mealie.core.root_logger import get_logger
|
||||
|
||||
self._logger = get_logger()
|
||||
|
||||
return self._logger
|
||||
return get_logger()
|
||||
|
||||
@property
|
||||
def DAILY_SCHEDULE_TIME_UTC(self) -> ScheduleTime:
|
||||
@@ -269,6 +304,8 @@ class AppSettings(BaseSettings):
|
||||
"""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_ENABLE_IMAGE_SERVICES: bool = True
|
||||
"""Whether to enable image-related features in OpenAI"""
|
||||
OPENAI_WORKERS: int = 2
|
||||
"""
|
||||
Number of OpenAI workers per request. Higher values may increase
|
||||
@@ -279,8 +316,7 @@ class AppSettings(BaseSettings):
|
||||
Sending database data may increase accuracy in certain requests,
|
||||
but will incur additional API costs
|
||||
"""
|
||||
|
||||
OPENAI_REQUEST_TIMEOUT: int = 10
|
||||
OPENAI_REQUEST_TIMEOUT: int = 60
|
||||
"""
|
||||
The number of seconds to wait for an OpenAI request to complete before cancelling the request
|
||||
"""
|
||||
@@ -303,11 +339,7 @@ class AppSettings(BaseSettings):
|
||||
"""Validates OpenAI settings are all set"""
|
||||
return bool(self.OPENAI_API_KEY and self.OPENAI_MODEL)
|
||||
|
||||
# ===============================================
|
||||
# Testing Config
|
||||
|
||||
TESTING: bool = False
|
||||
model_config = SettingsConfigDict(arbitrary_types_allowed=True, extra="allow", secrets_dir="/run/secrets")
|
||||
model_config = SettingsConfigDict(arbitrary_types_allowed=True, extra="allow")
|
||||
|
||||
|
||||
def app_settings_constructor(data_dir: Path, production: bool, env_file: Path, env_encoding="utf-8") -> AppSettings:
|
||||
@@ -319,6 +351,9 @@ def app_settings_constructor(data_dir: Path, production: bool, env_file: Path, e
|
||||
app_settings = AppSettings(
|
||||
_env_file=env_file, # type: ignore
|
||||
_env_file_encoding=env_encoding, # type: ignore
|
||||
# `get_secrets_dir` must be called here rather than within `AppSettings`
|
||||
# to avoid a circular import.
|
||||
_secrets_dir=get_secrets_dir(), # type: ignore
|
||||
**{"SECRET": determine_secrets(data_dir, production)},
|
||||
)
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
"recipe": {
|
||||
"unique-name-error": "El nom de la recepta ha de ser únic",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "1 Cup Flour",
|
||||
"step-text": "Recipe steps as well as other fields in the recipe page support markdown syntax.\n\n**Add a link**\n\n[My Link](https://demo.mealie.io)\n"
|
||||
"ingredient-note": "1 tassa de farina",
|
||||
"step-text": "Passos de recepta i altres camps són compatibles amb sintaxi markdown.\n\n**Afegir un enllaç**\n\n[El meu enllaç](https://demo.mealie.io)\n"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
@@ -37,35 +37,35 @@
|
||||
"generic-deleted": "{name} ha estat eliminat"
|
||||
},
|
||||
"datetime": {
|
||||
"year": "year|years",
|
||||
"day": "day|days",
|
||||
"hour": "hour|hours",
|
||||
"minute": "minute|minutes",
|
||||
"second": "second|seconds",
|
||||
"millisecond": "millisecond|milliseconds",
|
||||
"microsecond": "microsecond|microseconds"
|
||||
"year": "any|anys",
|
||||
"day": "dia|dies",
|
||||
"hour": "hora|hores",
|
||||
"minute": "minut|minuts",
|
||||
"second": "segon|segons",
|
||||
"millisecond": "milisegon|milisegons",
|
||||
"microsecond": "microsegon|microsegons"
|
||||
},
|
||||
"emails": {
|
||||
"password": {
|
||||
"subject": "Mealie Forgot Password",
|
||||
"header_text": "Forgot Password",
|
||||
"message_top": "You have requested to reset your password.",
|
||||
"message_bottom": "Please click the button above to reset your password.",
|
||||
"button_text": "Reset Password"
|
||||
"subject": "Mealie Contrassenya Oblidada",
|
||||
"header_text": "Contrassenya Oblidada",
|
||||
"message_top": "Has demanat restablir la teva contrassenya.",
|
||||
"message_bottom": "Siusplau clica al botó de sobre per restablir la teva contrassenya.",
|
||||
"button_text": "Restablir contrassenya"
|
||||
},
|
||||
"invitation": {
|
||||
"subject": "Invitation to join Mealie",
|
||||
"header_text": "You're Invited!",
|
||||
"message_top": "You have been invited to join Mealie.",
|
||||
"message_bottom": "Please click the button above to accept the invitation.",
|
||||
"button_text": "Accept Invitation"
|
||||
"subject": "Invitació a unir-te a Mealie",
|
||||
"header_text": "Has estat convidat!",
|
||||
"message_top": "Has estat convidat a unir-te a Mealie.",
|
||||
"message_bottom": "Siusplau clica al botó de sobre per acceptar la invitació.",
|
||||
"button_text": "Acceptar invitació"
|
||||
},
|
||||
"test": {
|
||||
"subject": "Mealie Test Email",
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
"subject": "Mealie correu electrònic de prova",
|
||||
"header_text": "Correu electrònic de prova",
|
||||
"message_top": "Això és un correu electrònic de prova.",
|
||||
"message_bottom": "Siusplau clica al botó de sobre per provar el correu electrònic.",
|
||||
"button_text": "Obre Mealie"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
},
|
||||
"user": {
|
||||
"user-updated": "Χρήστης ενημερώθηκε",
|
||||
"password-updated": "Ο κωδικός ενημερώθηκε",
|
||||
"invalid-current-password": "Μη έγκυρος κωδικός",
|
||||
"password-updated": "Ο κωδικός πρόσβασης ενημερώθηκε",
|
||||
"invalid-current-password": "Μη έγκυρος κωδικός πρόσβασης",
|
||||
"ldap-update-password-unavailable": "Αδυναμία ενημέρωσης του κωδικού πρόσβασης, ο χρήστης ελέγχεται από LDAP"
|
||||
},
|
||||
"group": {
|
||||
@@ -31,9 +31,9 @@
|
||||
"notifications": {
|
||||
"generic-created": "Δημιουργήθηκε το {name}",
|
||||
"generic-updated": "Ενημερώθηκε το {name}",
|
||||
"generic-created-with-url": "{name} has been created, {url}",
|
||||
"generic-updated-with-url": "{name} has been updated, {url}",
|
||||
"generic-duplicated": "{name} has been duplicated",
|
||||
"generic-created-with-url": "Το {name} δημιουργήθηκε, {url}",
|
||||
"generic-updated-with-url": "Το {name} ενημερώθηκε, {url}",
|
||||
"generic-duplicated": "Δημιουργήθηκε διπλότυπο του {name}",
|
||||
"generic-deleted": "Το {name} διαγράφηκε"
|
||||
},
|
||||
"datetime": {
|
||||
@@ -48,7 +48,7 @@
|
||||
"emails": {
|
||||
"password": {
|
||||
"subject": "Mealie Ξέχασα τον κωδικό πρόσβασης",
|
||||
"header_text": "Ξεχάσατε τον κωδικό πρόσβασής σας;",
|
||||
"header_text": "Ξέχασα τον κωδικό πρόσβασης",
|
||||
"message_top": "Εχετε ζητήσει να επαναφέρετε τον κωδικό πρόσβασής σας.",
|
||||
"message_bottom": "Παρακαλώ κάντε κλικ στο παραπάνω κουμπί για να επαναφέρετε τον κωδικό πρόσβασής σας.",
|
||||
"button_text": "Επαναφορά κωδικού πρόσβασης"
|
||||
|
||||
@@ -47,25 +47,25 @@
|
||||
},
|
||||
"emails": {
|
||||
"password": {
|
||||
"subject": "Mealie Forgot Password",
|
||||
"header_text": "Forgot Password",
|
||||
"message_top": "You have requested to reset your password.",
|
||||
"message_bottom": "Please click the button above to reset your password.",
|
||||
"button_text": "Reset Password"
|
||||
"subject": "Mealie Olvidó la contraseña",
|
||||
"header_text": "Olvidé mi contraseña",
|
||||
"message_top": "Has solicitado restablecer tu contraseña.",
|
||||
"message_bottom": "Por favor, haz click en el botón de arriba para reestablecer tu contraseña.",
|
||||
"button_text": "Restablecer contraseña"
|
||||
},
|
||||
"invitation": {
|
||||
"subject": "Invitation to join Mealie",
|
||||
"header_text": "You're Invited!",
|
||||
"message_top": "You have been invited to join Mealie.",
|
||||
"message_bottom": "Please click the button above to accept the invitation.",
|
||||
"button_text": "Accept Invitation"
|
||||
"subject": "Invitación para unirse a Mealie",
|
||||
"header_text": "¡Estás invitado!",
|
||||
"message_top": "Has sido invitado a unirte a Mealie.",
|
||||
"message_bottom": "Por favor, haga clic en el botón de arriba para aceptar la invitación.",
|
||||
"button_text": "Aceptar invitación"
|
||||
},
|
||||
"test": {
|
||||
"subject": "Mealie Test Email",
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
"subject": "Mealie Correo de prueba",
|
||||
"header_text": "Correo de prueba",
|
||||
"message_top": "Este es un correo de prueba.",
|
||||
"message_bottom": "Por favor, haz clic en el botón de arriba para probar el correo.",
|
||||
"button_text": "Abrir Mealie"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
71
mealie/lang/messages/fr-BE.json
Normal file
71
mealie/lang/messages/fr-BE.json
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"generic": {
|
||||
"server-error": "Une erreur inattendue s’est produite"
|
||||
},
|
||||
"recipe": {
|
||||
"unique-name-error": "Les noms de recette doivent être uniques",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "100 g de farine",
|
||||
"step-text": "Les étapes de la recette ainsi que les autres champs de la page de recette supportent la syntaxe markdown.\n\n**Ajouter un lien**\n\n[Mon lien](https://demo.mealie.io)\n"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
"no-recipes-match-your-rules": "Aucune recette ne correspond à vos règles"
|
||||
},
|
||||
"user": {
|
||||
"user-updated": "Utilisateur mis à jour",
|
||||
"password-updated": "Mot de passe mis à jour",
|
||||
"invalid-current-password": "Mot de passe actuel non valide",
|
||||
"ldap-update-password-unavailable": "Impossible de mettre à jour le mot de passe, l'utilisateur est géré par LDAP"
|
||||
},
|
||||
"group": {
|
||||
"report-deleted": "Rapport supprimé."
|
||||
},
|
||||
"exceptions": {
|
||||
"permission_denied": "Vous n’avez pas la permission d’effectuer cette action",
|
||||
"no-entry-found": "La ressource demandée est introuvable",
|
||||
"integrity-error": "Erreur d’intégrité de la base de données",
|
||||
"username-conflict-error": "Ce nom d’utilisateur est déjà pris",
|
||||
"email-conflict-error": "Cette adresse e-mail est déjà utilisée"
|
||||
},
|
||||
"notifications": {
|
||||
"generic-created": "{name} a été créé",
|
||||
"generic-updated": "{name} a été mis à jour",
|
||||
"generic-created-with-url": "{name} a été créé, {url}",
|
||||
"generic-updated-with-url": "{name} a été mis à jour, {url}",
|
||||
"generic-duplicated": "{name} a été dupliqué",
|
||||
"generic-deleted": "{name} a été supprimé"
|
||||
},
|
||||
"datetime": {
|
||||
"year": "année|années",
|
||||
"day": "jour|jours",
|
||||
"hour": "heure|heures",
|
||||
"minute": "minute|minutes",
|
||||
"second": "seconde|secondes",
|
||||
"millisecond": "milliseconde|millisecondes",
|
||||
"microsecond": "microseconde|microsecondes"
|
||||
},
|
||||
"emails": {
|
||||
"password": {
|
||||
"subject": "Mot de passe oublié pour Mealie",
|
||||
"header_text": "Forgot Password",
|
||||
"message_top": "You have requested to reset your password.",
|
||||
"message_bottom": "Please click the button above to reset your password.",
|
||||
"button_text": "Reset Password"
|
||||
},
|
||||
"invitation": {
|
||||
"subject": "Invitation to join Mealie",
|
||||
"header_text": "You're Invited!",
|
||||
"message_top": "You have been invited to join Mealie.",
|
||||
"message_bottom": "Veuillez cliquer sur le bouton ci-dessus pour accepter l'invitation.",
|
||||
"button_text": "Accept Invitation"
|
||||
},
|
||||
"test": {
|
||||
"subject": "Mealie Test Email",
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -48,24 +48,24 @@
|
||||
"emails": {
|
||||
"password": {
|
||||
"subject": "Mot de passe oublié pour Mealie",
|
||||
"header_text": "Forgot Password",
|
||||
"message_top": "You have requested to reset your password.",
|
||||
"message_bottom": "Please click the button above to reset your password.",
|
||||
"button_text": "Reset Password"
|
||||
"header_text": "Mot de passe oublié",
|
||||
"message_top": "Vous avez demandé de réinitialiser votre mot de passe.",
|
||||
"message_bottom": "Veuillez cliquer sur le bouton ci-dessus pour réinitialiser votre mot de passe.",
|
||||
"button_text": "Réinitialiser le mot de passe"
|
||||
},
|
||||
"invitation": {
|
||||
"subject": "Invitation to join Mealie",
|
||||
"header_text": "You're Invited!",
|
||||
"message_top": "You have been invited to join Mealie.",
|
||||
"subject": "Invitation à rejoindre Mealie",
|
||||
"header_text": "Vous êtes invité !",
|
||||
"message_top": "Vous avez été invité à rejoindre Mealie.",
|
||||
"message_bottom": "Veuillez cliquer sur le bouton ci-dessus pour accepter l'invitation.",
|
||||
"button_text": "Accept Invitation"
|
||||
"button_text": "Accepter l'invitation"
|
||||
},
|
||||
"test": {
|
||||
"subject": "Mealie Test Email",
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
"subject": "E-mail de test Mealie",
|
||||
"header_text": "E-mail de test",
|
||||
"message_top": "Ceci est un mail de test.",
|
||||
"message_bottom": "Veuillez cliquer sur le bouton ci-dessus pour accepter l'invitation.",
|
||||
"button_text": "Ouvrir Mealie"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
"recipe": {
|
||||
"unique-name-error": "Oppskriftsnavn må være unike",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "1 Cup Flour",
|
||||
"step-text": "Recipe steps as well as other fields in the recipe page support markdown syntax.\n\n**Add a link**\n\n[My Link](https://demo.mealie.io)\n"
|
||||
"ingredient-note": "1 kopp mel",
|
||||
"step-text": "Steg i oppskrifter og andre felter på siden støtter markdown syntax.\n\n**Legg til en link**\n\n[Min link](https://demo.mealie.io)\n"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
@@ -47,25 +47,25 @@
|
||||
},
|
||||
"emails": {
|
||||
"password": {
|
||||
"subject": "Mealie Forgot Password",
|
||||
"header_text": "Forgot Password",
|
||||
"message_top": "You have requested to reset your password.",
|
||||
"message_bottom": "Please click the button above to reset your password.",
|
||||
"button_text": "Reset Password"
|
||||
"subject": "Mealie Glemt Passord",
|
||||
"header_text": "Glemt passord",
|
||||
"message_top": "Du har forespurt å resette passordet.",
|
||||
"message_bottom": "Klikk på knappen over for å tilbakestille passordet ditt.",
|
||||
"button_text": "Tilbakestill passord"
|
||||
},
|
||||
"invitation": {
|
||||
"subject": "Invitation to join Mealie",
|
||||
"header_text": "You're Invited!",
|
||||
"message_top": "You have been invited to join Mealie.",
|
||||
"message_bottom": "Please click the button above to accept the invitation.",
|
||||
"button_text": "Accept Invitation"
|
||||
"subject": "Invitasjon til å bli med i Mealie",
|
||||
"header_text": "Du er invitert!",
|
||||
"message_top": "Du er invitert til å bli med i Mealie.",
|
||||
"message_bottom": "Vennligst klikk på knappen over for å akseptere invitasjonen.",
|
||||
"button_text": "Aksepter invitasjon"
|
||||
},
|
||||
"test": {
|
||||
"subject": "Mealie Test Email",
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
"subject": "Mealie test-e-post",
|
||||
"header_text": "Test-e-post",
|
||||
"message_top": "Dette er en test-e-post.",
|
||||
"message_bottom": "Klikk på knappen over for å teste e-posten.",
|
||||
"button_text": "Åpne Mealie"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,10 +62,10 @@
|
||||
},
|
||||
"test": {
|
||||
"subject": "Mealie Test Email",
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
"header_text": "E-mail testowy",
|
||||
"message_top": "To jest e-mail testowy.",
|
||||
"message_bottom": "Kliknij przycisk powyżej, aby przetestować e-mail.",
|
||||
"button_text": "Otwórz Mealie"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,25 +47,25 @@
|
||||
},
|
||||
"emails": {
|
||||
"password": {
|
||||
"subject": "Mealie Forgot Password",
|
||||
"header_text": "Forgot Password",
|
||||
"message_top": "You have requested to reset your password.",
|
||||
"message_bottom": "Please click the button above to reset your password.",
|
||||
"button_text": "Reset Password"
|
||||
"subject": "Mealie Esqueceu-se da Palavra-passe",
|
||||
"header_text": "Esqueci-me da Palavra-passe",
|
||||
"message_top": "Solicitou a reposição da sua palavra-passe.",
|
||||
"message_bottom": "Clique no botão acima para redefinir a sua palavra-passe.",
|
||||
"button_text": "Repor Palavra-passe"
|
||||
},
|
||||
"invitation": {
|
||||
"subject": "Invitation to join Mealie",
|
||||
"header_text": "You're Invited!",
|
||||
"message_top": "You have been invited to join Mealie.",
|
||||
"message_bottom": "Please click the button above to accept the invitation.",
|
||||
"button_text": "Accept Invitation"
|
||||
"subject": "Convite para aderir ao Melie",
|
||||
"header_text": "Está convidado!",
|
||||
"message_top": "Foi convidado para aderir ao Mealie.",
|
||||
"message_bottom": "Clique no botão acima para aceitar o convite.",
|
||||
"button_text": "Aceitar Convite"
|
||||
},
|
||||
"test": {
|
||||
"subject": "Mealie Test Email",
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
"subject": "Email de testes do Mealie",
|
||||
"header_text": "Email de Teste",
|
||||
"message_top": "Este é um email de teste.",
|
||||
"message_bottom": "Clique no botão acima para testar o email.",
|
||||
"button_text": "Abrir o Mealie"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
"recipe": {
|
||||
"unique-name-error": "Názov receptu musí byť unikátny",
|
||||
"recipe-defaults": {
|
||||
"ingredient-note": "1 Cup Flour",
|
||||
"step-text": "Recipe steps as well as other fields in the recipe page support markdown syntax.\n\n**Add a link**\n\n[My Link](https://demo.mealie.io)\n"
|
||||
"ingredient-note": "1 šálka múky",
|
||||
"step-text": "Kroky receptu, ako aj ďalšie polia na stránke receptu podporujú markdown syntax.\n\n**Pridanie odkazu**\n\n[Môj odkaz](https://demo.mealie.io)\n"
|
||||
}
|
||||
},
|
||||
"mealplan": {
|
||||
@@ -47,25 +47,25 @@
|
||||
},
|
||||
"emails": {
|
||||
"password": {
|
||||
"subject": "Mealie Forgot Password",
|
||||
"header_text": "Forgot Password",
|
||||
"message_top": "You have requested to reset your password.",
|
||||
"message_bottom": "Please click the button above to reset your password.",
|
||||
"button_text": "Reset Password"
|
||||
"subject": "Mealie zabudnuté heslo",
|
||||
"header_text": "Zabudnuté heslo",
|
||||
"message_top": "Požiadali ste o obnovenie hesla.",
|
||||
"message_bottom": "Prosím stlačte tlačidlo vyššie, na obnovenie vášho hesla.",
|
||||
"button_text": "Obnovenie hesla"
|
||||
},
|
||||
"invitation": {
|
||||
"subject": "Invitation to join Mealie",
|
||||
"header_text": "You're Invited!",
|
||||
"message_top": "You have been invited to join Mealie.",
|
||||
"message_bottom": "Please click the button above to accept the invitation.",
|
||||
"button_text": "Accept Invitation"
|
||||
"subject": "Pozvanie na pripojenie k Mealie",
|
||||
"header_text": "Boli ste pozvaní!",
|
||||
"message_top": "Boli ste pozvaní na pripojenie k Mealie.",
|
||||
"message_bottom": "Prosím, kliknite na tlačidlo vyššie pre akceptáciu pozvánky.",
|
||||
"button_text": "Prijat pozvanie"
|
||||
},
|
||||
"test": {
|
||||
"subject": "Mealie Test Email",
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
"subject": "Testovací email Mealie",
|
||||
"header_text": "Testovací email",
|
||||
"message_top": "Toto je testovací email.",
|
||||
"message_bottom": "Prosím, kliknite na tlačidlo vyššie, aby ste otestovali email.",
|
||||
"button_text": "Otvoriť Mealie"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,25 +47,25 @@
|
||||
},
|
||||
"emails": {
|
||||
"password": {
|
||||
"subject": "Mealie Forgot Password",
|
||||
"header_text": "Forgot Password",
|
||||
"message_top": "You have requested to reset your password.",
|
||||
"message_bottom": "Please click the button above to reset your password.",
|
||||
"button_text": "Reset Password"
|
||||
"subject": "Mealie pozabljeno geslo",
|
||||
"header_text": "Pozabljeno geslo",
|
||||
"message_top": "Zahtevali ste ponastavitev gesla.",
|
||||
"message_bottom": "Prosim kliknite na zgornji gumb za ponastavitev gesla.",
|
||||
"button_text": "Ponastavitev gesla"
|
||||
},
|
||||
"invitation": {
|
||||
"subject": "Invitation to join Mealie",
|
||||
"header_text": "You're Invited!",
|
||||
"message_top": "You have been invited to join Mealie.",
|
||||
"message_bottom": "Please click the button above to accept the invitation.",
|
||||
"button_text": "Accept Invitation"
|
||||
"subject": "Povabilo za pridružitev na Mealie",
|
||||
"header_text": "Ste povabljeni!",
|
||||
"message_top": "Bili ste povabljeni za pridružitev na Mealie.",
|
||||
"message_bottom": "Prosim, da za sprejem povabila kliknite na zgornji gumb.",
|
||||
"button_text": "Spremite povabilo"
|
||||
},
|
||||
"test": {
|
||||
"subject": "Mealie Test Email",
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
"subject": "Mealie testni e-mail",
|
||||
"header_text": "Testni e-mail",
|
||||
"message_top": "To je testni e-mail.",
|
||||
"message_bottom": "Prosim, da za e-mail testiranje kliknite zgornji gumb.",
|
||||
"button_text": "Odpri Mealie"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
"year": "yıl|yıllar",
|
||||
"day": "gün|günler",
|
||||
"hour": "saat|saatler",
|
||||
"minute": "dakika|dakikalar",
|
||||
"minute": "dakika|dakika",
|
||||
"second": "saniye|saniyeler",
|
||||
"millisecond": "milisaniye|milisaniyeler",
|
||||
"microsecond": "mikrosaniye|mikrosaniyeler"
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
"header_text": "Test Email",
|
||||
"message_top": "This is a test email.",
|
||||
"message_bottom": "Please click the button above to test the email.",
|
||||
"button_text": "Open Mealie"
|
||||
"button_text": "打开Mealie"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
"avocado": "alvocat",
|
||||
"bacon": "cansalada",
|
||||
"baking-powder": "rent",
|
||||
"baking-soda": "rent químic (gaseosa)",
|
||||
"baking-sugar": "sucre glacé",
|
||||
"bar-sugar": "sucre",
|
||||
"baking-soda": "bicarbonat sòdic",
|
||||
"baking-sugar": "sucre blanc",
|
||||
"bar-sugar": "sucre de canya",
|
||||
"basil": "alfàbrega",
|
||||
"bell-peppers": "pebrot",
|
||||
"blackberries": "mores",
|
||||
@@ -31,7 +31,7 @@
|
||||
"bread": "pa",
|
||||
"breadfruit": "fruit del pa",
|
||||
"broad-beans": "faves",
|
||||
"brown-sugar": "sucre roig",
|
||||
"brown-sugar": "sucre morè",
|
||||
"butter": "mantega",
|
||||
"butternut-pumpkin": "carabassa de cacauet",
|
||||
"butternut-squash": "carabassa de cacauet",
|
||||
@@ -59,7 +59,7 @@
|
||||
"coconut": "coco",
|
||||
"coconut-milk": "llet de coco",
|
||||
"coffee": "cafè",
|
||||
"confectioners-sugar": "sucre",
|
||||
"confectioners-sugar": "sucre glacé",
|
||||
"coriander": "coriandre",
|
||||
"corn": "blat de moro",
|
||||
"corn-syrup": "xarop de dacsa",
|
||||
@@ -149,7 +149,7 @@
|
||||
"nutritional-yeast-flakes": "llevat nutricional",
|
||||
"nuts": "fruita de closca",
|
||||
"nanaimo-bar-mix": "nanaimo bar mix",
|
||||
"octopuses": "polp",
|
||||
"octopuses": "pops",
|
||||
"oils": "olis",
|
||||
"olive-oil": "oli d'oliva",
|
||||
"okra": "ocra",
|
||||
@@ -158,7 +158,7 @@
|
||||
"onion": "ceba",
|
||||
"scallion": "calçots",
|
||||
"shallot": "escalunya",
|
||||
"spring-onion": "cebeta",
|
||||
"spring-onion": "ceba tendra",
|
||||
"orange-blossom-water": "aigua de tarongina",
|
||||
"oysters": "ostres",
|
||||
"panch-puran": "panch puran",
|
||||
@@ -178,7 +178,7 @@
|
||||
"raw-sugar": "sucre integral",
|
||||
"refined-sugar": "sucre blanc",
|
||||
"rice-flour": "farina d'arròs",
|
||||
"rock-sugar": "sucre roig",
|
||||
"rock-sugar": "sucre candi",
|
||||
"rum": "rom",
|
||||
"salt": "sal",
|
||||
"seafood": "marisc",
|
||||
@@ -218,5 +218,5 @@
|
||||
"watercress": "creixen",
|
||||
"watermelon": "meló d'Alger/síndria",
|
||||
"xanthan-gum": "goma xantana",
|
||||
"yeast": "rent"
|
||||
"yeast": "llevat"
|
||||
}
|
||||
|
||||
@@ -18,28 +18,28 @@
|
||||
"blackberries": "βατόμουρα",
|
||||
"brassicas": "μπράσικες",
|
||||
"bok-choy": "bok choy",
|
||||
"broccoflower": "broccoflower",
|
||||
"broccoflower": "ρομανέσκο",
|
||||
"broccoli": "μπρόκολο",
|
||||
"broccolini": "broccolini",
|
||||
"broccoli-rabe": "broccoli rabe",
|
||||
"broccoli-rabe": "ραπίνι",
|
||||
"brussels-sprouts": "λαχανάκια Βρυξελλών",
|
||||
"cabbage": "λάχανο",
|
||||
"cauliflower": "κουνουπίδι",
|
||||
"chinese-leaves": "κινέζικα φύλλα",
|
||||
"collard-greens": "collard greens",
|
||||
"kohlrabi": "kohlrabi",
|
||||
"kohlrabi": "λαχανόριζα",
|
||||
"bread": "ψωμί",
|
||||
"breadfruit": "breadfruit",
|
||||
"breadfruit": "αρτόκαρπος",
|
||||
"broad-beans": "κουκιά",
|
||||
"brown-sugar": "καστανή ζάχαρη",
|
||||
"butter": "βούτυρο",
|
||||
"butternut-pumpkin": "butternut pumpkin",
|
||||
"butternut-squash": "butternut squash",
|
||||
"butternut-pumpkin": "κολοκύθα βουτυράτη",
|
||||
"butternut-squash": "κολοκύθα βουτυράτη",
|
||||
"cactus-edible": "κάκτος, βρώσιμος",
|
||||
"calabrese": "calabrese",
|
||||
"cannabis": "κάνναβη",
|
||||
"capsicum": "capsicum",
|
||||
"caraway": "caraway",
|
||||
"capsicum": "καψικόν",
|
||||
"caraway": "άγριο κύμινο",
|
||||
"carrot": "καρότο",
|
||||
"castor-sugar": "castor sugar",
|
||||
"cayenne-pepper": "πιπέρι καγιέν",
|
||||
@@ -47,54 +47,54 @@
|
||||
"celery": "σέλινο",
|
||||
"cereal-grains": "πίτουρο δημητριακών",
|
||||
"rice": "ρύζι",
|
||||
"chard": "chard",
|
||||
"chard": "σέσκουλο",
|
||||
"cheese": "τυρί",
|
||||
"chicory": "chicory",
|
||||
"chilli-peppers": "chilli peppers",
|
||||
"chives": "chives",
|
||||
"chicory": "ραδίκι",
|
||||
"chilli-peppers": "πιπεριές τσίλι",
|
||||
"chives": "σχοινόπρασο",
|
||||
"chocolate": "σοκολάτα",
|
||||
"cilantro": "κόλιανδρος",
|
||||
"cinnamon": "κανέλα",
|
||||
"clarified-butter": "clarified butter",
|
||||
"clarified-butter": "διαυγές βούτυρο",
|
||||
"coconut": "καρύδα",
|
||||
"coconut-milk": "γάλα καρύδας",
|
||||
"coffee": "καφές",
|
||||
"confectioners-sugar": "confectioners' sugar",
|
||||
"coriander": "κόλιανδρος",
|
||||
"corn": "καλαμπόκι",
|
||||
"corn-syrup": "corn syrup",
|
||||
"cottonseed-oil": "cottonseed oil",
|
||||
"corn-syrup": "σιρόπι καλαμποκιού",
|
||||
"cottonseed-oil": "βαμβακέλαιο",
|
||||
"courgette": "courgette",
|
||||
"cream-of-tartar": "cream of tartar",
|
||||
"cream-of-tartar": "κρέμα ταρτάρ",
|
||||
"cucumber": "αγγούρι",
|
||||
"cumin": "κύμινο",
|
||||
"daikon": "daikon",
|
||||
"dairy-products-and-dairy-substitutes": "dairy products and dairy substitutes",
|
||||
"eggs": "αυγά",
|
||||
"ghee": "ghee",
|
||||
"daikon": "νταϊκόν",
|
||||
"dairy-products-and-dairy-substitutes": "γαλακτοκομικά προϊόντα και υποκατάστατα γαλακτοκομικών προϊόντων",
|
||||
"eggs": "αβγά",
|
||||
"ghee": "γκι (βούτυρο)",
|
||||
"milk": "γάλα",
|
||||
"dandelion": "dandelion",
|
||||
"demerara-sugar": "demerara sugar",
|
||||
"demerara-sugar": "ζάχαρη demerara",
|
||||
"dough": "ζυμάρι",
|
||||
"edible-cactus": "edible cactus",
|
||||
"edible-cactus": "κάκτος που τρώγεται",
|
||||
"eggplant": "μελιτζάνα",
|
||||
"endive": "endive",
|
||||
"endive": "αντίδι",
|
||||
"fats": "λιπαρά",
|
||||
"speck": "speck",
|
||||
"fava-beans": "fava beans",
|
||||
"fava-beans": "κουκιά",
|
||||
"fiddlehead": "fiddlehead",
|
||||
"fish": "ψάρι",
|
||||
"catfish": "γατόψαρο ",
|
||||
"cod": "μπακαλιάρος",
|
||||
"salt-cod": "αλατισμένος μπακαλιάρος",
|
||||
"salmon": "σολομός",
|
||||
"skate": "skate",
|
||||
"skate": "σαλάχι",
|
||||
"stockfish": "ξηρός μπακαλάος",
|
||||
"trout": "trout",
|
||||
"trout": "πέστροφα",
|
||||
"tuna": "τόνος",
|
||||
"five-spice-powder": "σκόνη πέντε μπαχαρικών",
|
||||
"flour": "αλεύρι",
|
||||
"frisee": "frisee",
|
||||
"frisee": "κατσαρό αντίδι",
|
||||
"fructose": "φρουκτόζη",
|
||||
"fruit": "φρούτο",
|
||||
"apple": "μήλο",
|
||||
@@ -102,73 +102,73 @@
|
||||
"pear": "αχλάδι",
|
||||
"tomato": "ντομάτα",
|
||||
"fruit-sugar": "ζάχαρη φρούτων",
|
||||
"garam-masala": "garam masala",
|
||||
"garam-masala": "γκαράμ μασάλα",
|
||||
"garlic": "σκόρδο",
|
||||
"gem-squash": "gem squash",
|
||||
"ginger": "τζίντζερ",
|
||||
"giblets": "giblets",
|
||||
"grains": "grains",
|
||||
"giblets": "εντόσθια πουλερικών",
|
||||
"grains": "σιτηρά",
|
||||
"maize": "καλαμπόκι",
|
||||
"sweetcorn": "γλυκο καλαμποκι",
|
||||
"teff": "teff",
|
||||
"teff": "τεφ",
|
||||
"grape-seed-oil": "έλαιο από σταφύλια",
|
||||
"green-onion": "πράσινο κρεμμύδι",
|
||||
"heart-of-palm": "heart of palm",
|
||||
"hemp": "hemp",
|
||||
"heart-of-palm": "καρδιά φοίνικα",
|
||||
"hemp": "βιομηχανική κάνναβη",
|
||||
"herbs": "βότανα",
|
||||
"oregano": "ρίγανη",
|
||||
"parsley": "μαϊντανός",
|
||||
"honey": "μέλι",
|
||||
"icing-sugar": "icing sugar",
|
||||
"isomalt": "isomalt",
|
||||
"jackfruit": "jackfruit",
|
||||
"jaggery": "jaggery",
|
||||
"isomalt": "ισομαλτόζη",
|
||||
"jackfruit": "τζάκφρουτ",
|
||||
"jaggery": "ζάχαρη jaggery",
|
||||
"jams": "μαρμελάδα",
|
||||
"jellies": "ζελέδες",
|
||||
"jerusalem-artichoke": "jerusalem artichoke",
|
||||
"jicama": "jicama",
|
||||
"kale": "kale",
|
||||
"jerusalem-artichoke": "αγκινάρα της Ιερουσαλήμ",
|
||||
"jicama": "χίκαμα",
|
||||
"kale": "λαχανίδα",
|
||||
"kumara": "κούμαρα",
|
||||
"leavening-agents": "leavening agents",
|
||||
"leek": "πράσο",
|
||||
"legumes": "όσπρια ",
|
||||
"peas": "peas",
|
||||
"beans": "beans",
|
||||
"lentils": "lentils",
|
||||
"lemongrass": "lemongrass",
|
||||
"lettuce": "lettuce",
|
||||
"liver": "liver",
|
||||
"maple-syrup": "maple syrup",
|
||||
"meat": "meat",
|
||||
"mortadella": "mortadella",
|
||||
"mushroom": "mushroom",
|
||||
"peas": "αρακάς",
|
||||
"beans": "φασόλια",
|
||||
"lentils": "φακές",
|
||||
"lemongrass": "λεμονόχορτο",
|
||||
"lettuce": "μαρούλι",
|
||||
"liver": "συκώτι",
|
||||
"maple-syrup": "σιρόπι σφενδάμου",
|
||||
"meat": "κρέας",
|
||||
"mortadella": "μορταδέλα",
|
||||
"mushroom": "μανιτάρι",
|
||||
"white-mushroom": "white mushroom",
|
||||
"mussels": "mussels",
|
||||
"nori": "nori",
|
||||
"nutmeg": "nutmeg",
|
||||
"mussels": "μύδια",
|
||||
"nori": "νόρι",
|
||||
"nutmeg": "μοσχοκάρυδο",
|
||||
"nutritional-yeast-flakes": "nutritional yeast flakes",
|
||||
"nuts": "nuts",
|
||||
"nanaimo-bar-mix": "nanaimo bar mix",
|
||||
"octopuses": "octopuses",
|
||||
"oils": "oils",
|
||||
"olive-oil": "olive oil",
|
||||
"okra": "okra",
|
||||
"olive": "olive",
|
||||
"octopuses": "χταπόδια",
|
||||
"oils": "λάδια",
|
||||
"olive-oil": "ελαιόλαδο",
|
||||
"okra": "μπάμια",
|
||||
"olive": "ελιά",
|
||||
"onion-family": "onion family",
|
||||
"onion": "onion",
|
||||
"onion": "κρεμμύδι",
|
||||
"scallion": "scallion",
|
||||
"shallot": "shallot",
|
||||
"shallot": "εσαλότ",
|
||||
"spring-onion": "spring onion",
|
||||
"orange-blossom-water": "orange blossom water",
|
||||
"oysters": "oysters",
|
||||
"oysters": "στρείδια",
|
||||
"panch-puran": "panch puran",
|
||||
"paprika": "paprika",
|
||||
"parsnip": "parsnip",
|
||||
"paprika": "πάπρικα",
|
||||
"parsnip": "παστινάκι",
|
||||
"pepper": "πιπέρι",
|
||||
"peppers": "πιπέρια",
|
||||
"plantain": "plantain",
|
||||
"plantain": "μπανάνες Αντιλλών",
|
||||
"pineapple": "ανανάς",
|
||||
"poppy-seeds": "poppy seeds",
|
||||
"poppy-seeds": "παπαρουνόσπορος",
|
||||
"potatoes": "πατάτες",
|
||||
"poultry": "πουλερικά",
|
||||
"powdered-sugar": "ζάχαρη άχνη",
|
||||
@@ -188,7 +188,7 @@
|
||||
"soda": "σόδα",
|
||||
"soda-baking": "σόδα, μπέικιν",
|
||||
"soybean": "σόγια",
|
||||
"spaghetti-squash": "spaghetti squash",
|
||||
"spaghetti-squash": "μακαρόνια κολοκύθας",
|
||||
"spices": "μπαχαρικά",
|
||||
"spinach": "σπανάκι",
|
||||
"squash-family": "squash family",
|
||||
@@ -204,19 +204,19 @@
|
||||
"sweet-potato": "γλυκοπατάτα",
|
||||
"sweeteners": "γλυκαντικά",
|
||||
"cane-sugar": "ζάχαρη ζαχαροκαλάμου",
|
||||
"tahini": "ταχίνη",
|
||||
"tahini": "ταχίνι",
|
||||
"tubers": "βολβοί",
|
||||
"potato": "πατάτα",
|
||||
"sunchoke": "sunchoke",
|
||||
"taro": "taro",
|
||||
"yam": "yam",
|
||||
"taro": "κολοκασία (εδώδιμος)",
|
||||
"yam": "γιαμ",
|
||||
"turnip": "γογγύλι",
|
||||
"vanilla": "βανίλια",
|
||||
"vegetables": "λαχανικά",
|
||||
"fiddlehead-fern": "fiddlehead fern",
|
||||
"ful": "ful",
|
||||
"watercress": "watercress",
|
||||
"watermelon": "watermelon",
|
||||
"xanthan-gum": "xanthan gum",
|
||||
"yeast": "yeast"
|
||||
"watercress": "νεροκάρδαμο",
|
||||
"watermelon": "καρπούζι",
|
||||
"xanthan-gum": "ξανθάνη",
|
||||
"yeast": "μαγιά"
|
||||
}
|
||||
|
||||
222
mealie/repos/seed/resources/foods/locales/fr-BE.json
Normal file
222
mealie/repos/seed/resources/foods/locales/fr-BE.json
Normal file
@@ -0,0 +1,222 @@
|
||||
{
|
||||
"acorn-squash": "courge poivrée",
|
||||
"alfalfa-sprouts": "luzerne",
|
||||
"anchovies": "anchois",
|
||||
"apples": "pommes",
|
||||
"artichoke": "artichaut",
|
||||
"arugula": "roquette",
|
||||
"asparagus": "asperge",
|
||||
"aubergine": "aubergine",
|
||||
"avocado": "avocat",
|
||||
"bacon": "bacon",
|
||||
"baking-powder": "levure chimique",
|
||||
"baking-soda": "bicarbonate de soude",
|
||||
"baking-sugar": "sucre de cuisson",
|
||||
"bar-sugar": "barre de sucre",
|
||||
"basil": "basilic",
|
||||
"bell-peppers": "poivrons",
|
||||
"blackberries": "mûres",
|
||||
"brassicas": "choux",
|
||||
"bok-choy": "bok choy",
|
||||
"broccoflower": "chou-fleur",
|
||||
"broccoli": "brocoli",
|
||||
"broccolini": "brocolini",
|
||||
"broccoli-rabe": "brocoli-rave",
|
||||
"brussels-sprouts": "choux de Bruxelles",
|
||||
"cabbage": "chou",
|
||||
"cauliflower": "chou-fleur",
|
||||
"chinese-leaves": "chou chinois",
|
||||
"collard-greens": "chou cavalier",
|
||||
"kohlrabi": "chou-rave",
|
||||
"bread": "pain",
|
||||
"breadfruit": "fruit à pain",
|
||||
"broad-beans": "fèves",
|
||||
"brown-sugar": "cassonade",
|
||||
"butter": "beurre",
|
||||
"butternut-pumpkin": "courge butternut",
|
||||
"butternut-squash": "courge butternut",
|
||||
"cactus-edible": "cactus",
|
||||
"calabrese": "calabrese",
|
||||
"cannabis": "cannabis",
|
||||
"capsicum": "poivron",
|
||||
"caraway": "cumin",
|
||||
"carrot": "carotte",
|
||||
"castor-sugar": "sucre en poudre",
|
||||
"cayenne-pepper": "piment de cayenne",
|
||||
"celeriac": "céleri-rave",
|
||||
"celery": "céleri",
|
||||
"cereal-grains": "grains de céréales",
|
||||
"rice": "riz",
|
||||
"chard": "blette",
|
||||
"cheese": "fromage",
|
||||
"chicory": "chicorée",
|
||||
"chilli-peppers": "piment",
|
||||
"chives": "ciboulette",
|
||||
"chocolate": "chocolat",
|
||||
"cilantro": "coriandre",
|
||||
"cinnamon": "cannelle",
|
||||
"clarified-butter": "beurre clarifié",
|
||||
"coconut": "noix de coco",
|
||||
"coconut-milk": "lait de coco",
|
||||
"coffee": "café",
|
||||
"confectioners-sugar": "sucre des pâtissiers",
|
||||
"coriander": "coriandre",
|
||||
"corn": "maïs",
|
||||
"corn-syrup": "sirop de maïs",
|
||||
"cottonseed-oil": "huile de coton",
|
||||
"courgette": "courgette",
|
||||
"cream-of-tartar": "crème de tartre",
|
||||
"cucumber": "concombre",
|
||||
"cumin": "cumin",
|
||||
"daikon": "radis blanc",
|
||||
"dairy-products-and-dairy-substitutes": "produits laitiers et substituts laitiers",
|
||||
"eggs": "œufs",
|
||||
"ghee": "ghi",
|
||||
"milk": "lait",
|
||||
"dandelion": "pissenlit",
|
||||
"demerara-sugar": "sucre demerara",
|
||||
"dough": "pâte",
|
||||
"edible-cactus": "cactus",
|
||||
"eggplant": "aubergine",
|
||||
"endive": "endive",
|
||||
"fats": "matières grasses",
|
||||
"speck": "speck",
|
||||
"fava-beans": "fèves",
|
||||
"fiddlehead": "crosse de fougère",
|
||||
"fish": "poisson",
|
||||
"catfish": "poisson-chat",
|
||||
"cod": "morue",
|
||||
"salt-cod": "morue salée",
|
||||
"salmon": "saumon",
|
||||
"skate": "raie",
|
||||
"stockfish": "cabillaud",
|
||||
"trout": "truite",
|
||||
"tuna": "thon",
|
||||
"five-spice-powder": "mélange 5 épices",
|
||||
"flour": "farine",
|
||||
"frisee": "frisée",
|
||||
"fructose": "fructose",
|
||||
"fruit": "fruit",
|
||||
"apple": "pomme",
|
||||
"oranges": "oranges",
|
||||
"pear": "poire",
|
||||
"tomato": "tomate ",
|
||||
"fruit-sugar": "sucre de fruits",
|
||||
"garam-masala": "garam masala",
|
||||
"garlic": "ail",
|
||||
"gem-squash": "courge gem squash",
|
||||
"ginger": "gingembre",
|
||||
"giblets": "abats",
|
||||
"grains": "céréales",
|
||||
"maize": "maïs",
|
||||
"sweetcorn": "maïs doux",
|
||||
"teff": "teff",
|
||||
"grape-seed-oil": "huile de pépins de raisin",
|
||||
"green-onion": "oignon vert",
|
||||
"heart-of-palm": "cœur de palmier",
|
||||
"hemp": "chanvre",
|
||||
"herbs": "herbes",
|
||||
"oregano": "origan",
|
||||
"parsley": "persil",
|
||||
"honey": "miel",
|
||||
"icing-sugar": "sucre glace",
|
||||
"isomalt": "isomalt",
|
||||
"jackfruit": "pomme jacque",
|
||||
"jaggery": "gur",
|
||||
"jams": "confitures",
|
||||
"jellies": "gelées",
|
||||
"jerusalem-artichoke": "topinambour",
|
||||
"jicama": "igname",
|
||||
"kale": "chou frisé",
|
||||
"kumara": "kumara",
|
||||
"leavening-agents": "levure",
|
||||
"leek": "poireau",
|
||||
"legumes": "légumineuses ",
|
||||
"peas": "pois",
|
||||
"beans": "haricots",
|
||||
"lentils": "lentilles",
|
||||
"lemongrass": "citronnelle",
|
||||
"lettuce": "laitue",
|
||||
"liver": "foie",
|
||||
"maple-syrup": "sirop d’érable",
|
||||
"meat": "viande",
|
||||
"mortadella": "mortadelle",
|
||||
"mushroom": "champignon",
|
||||
"white-mushroom": "champignon blanc",
|
||||
"mussels": "moules",
|
||||
"nori": "algue",
|
||||
"nutmeg": "noix de muscade",
|
||||
"nutritional-yeast-flakes": "flocons de levure nutritionnelle",
|
||||
"nuts": "noix",
|
||||
"nanaimo-bar-mix": "mélange de barres nanaimo",
|
||||
"octopuses": "poulpe",
|
||||
"oils": "huiles",
|
||||
"olive-oil": "huile d’olive",
|
||||
"okra": "gombo",
|
||||
"olive": "olive",
|
||||
"onion-family": "oignons",
|
||||
"onion": "oignon",
|
||||
"scallion": "échalote",
|
||||
"shallot": "échalote",
|
||||
"spring-onion": "oignons de printemps",
|
||||
"orange-blossom-water": "eau de fleur d’oranger",
|
||||
"oysters": "huîtres",
|
||||
"panch-puran": "panch phoron",
|
||||
"paprika": "paprika",
|
||||
"parsnip": "panais",
|
||||
"pepper": "poivre",
|
||||
"peppers": "poivrons",
|
||||
"plantain": "plantain",
|
||||
"pineapple": "ananas",
|
||||
"poppy-seeds": "graines de pavot",
|
||||
"potatoes": "pommes de terre",
|
||||
"poultry": "volaille",
|
||||
"powdered-sugar": "sucre en poudre",
|
||||
"pumpkin": "citrouille",
|
||||
"pumpkin-seeds": "graines de courge",
|
||||
"radish": "radis",
|
||||
"raw-sugar": "sucre brut",
|
||||
"refined-sugar": "sucre raffiné",
|
||||
"rice-flour": "farine de riz",
|
||||
"rock-sugar": "sucre candi",
|
||||
"rum": "rhum",
|
||||
"salt": "sel",
|
||||
"seafood": "produits de la mer",
|
||||
"seeds": "graines",
|
||||
"sesame-seeds": "graines de sésame",
|
||||
"sunflower-seeds": "graines de tournesol",
|
||||
"soda": "bicarbonate de soude",
|
||||
"soda-baking": "bicarbonate de soude",
|
||||
"soybean": "soja",
|
||||
"spaghetti-squash": "courge spaghetti",
|
||||
"spices": "épices",
|
||||
"spinach": "épinard",
|
||||
"squash-family": "famille des courges",
|
||||
"squash": "courges",
|
||||
"zucchini": "courgette",
|
||||
"sugar": "sucre",
|
||||
"caster-sugar": "sucre semoule",
|
||||
"granulated-sugar": "sucre granulé",
|
||||
"superfine-sugar": "sucre superfin",
|
||||
"turbanado-sugar": "sucre brun",
|
||||
"unrefined-sugar": "sucre non raffiné",
|
||||
"white-sugar": "sucre blanc",
|
||||
"sweet-potato": "patate douce",
|
||||
"sweeteners": "édulcorant",
|
||||
"cane-sugar": "sucre de canne",
|
||||
"tahini": "tahini",
|
||||
"tubers": "tubercules",
|
||||
"potato": "patate",
|
||||
"sunchoke": "topinambours",
|
||||
"taro": "taro",
|
||||
"yam": "igname sauvage",
|
||||
"turnip": "navet",
|
||||
"vanilla": "vanille",
|
||||
"vegetables": "légumes",
|
||||
"fiddlehead-fern": "crosse de fougère",
|
||||
"ful": "plein",
|
||||
"watercress": "cresson de fontaine",
|
||||
"watermelon": "pastèque",
|
||||
"xanthan-gum": "gomme xanthane",
|
||||
"yeast": "levure"
|
||||
}
|
||||
@@ -46,61 +46,61 @@
|
||||
"celeriac": "celeriac",
|
||||
"celery": "celery",
|
||||
"cereal-grains": "cereal grains",
|
||||
"rice": "rice",
|
||||
"rice": "arroz",
|
||||
"chard": "chard",
|
||||
"cheese": "cheese",
|
||||
"cheese": "queixo",
|
||||
"chicory": "chicory",
|
||||
"chilli-peppers": "chilli peppers",
|
||||
"chives": "chives",
|
||||
"chocolate": "chocolate",
|
||||
"cilantro": "cilantro",
|
||||
"cinnamon": "cinnamon",
|
||||
"clarified-butter": "clarified butter",
|
||||
"coconut": "coconut",
|
||||
"coconut-milk": "coconut milk",
|
||||
"coffee": "coffee",
|
||||
"cilantro": "coandro",
|
||||
"cinnamon": "canela",
|
||||
"clarified-butter": "manteiga clarificada",
|
||||
"coconut": "coco",
|
||||
"coconut-milk": "leite de coco",
|
||||
"coffee": "café",
|
||||
"confectioners-sugar": "confectioners' sugar",
|
||||
"coriander": "coriander",
|
||||
"corn": "corn",
|
||||
"corn-syrup": "corn syrup",
|
||||
"corn": "millo",
|
||||
"corn-syrup": "xarope de millo",
|
||||
"cottonseed-oil": "cottonseed oil",
|
||||
"courgette": "courgette",
|
||||
"cream-of-tartar": "cream of tartar",
|
||||
"cucumber": "cucumber",
|
||||
"cucumber": "pepino",
|
||||
"cumin": "cumin",
|
||||
"daikon": "daikon",
|
||||
"dairy-products-and-dairy-substitutes": "dairy products and dairy substitutes",
|
||||
"eggs": "eggs",
|
||||
"eggs": "ovos",
|
||||
"ghee": "ghee",
|
||||
"milk": "milk",
|
||||
"dandelion": "dandelion",
|
||||
"milk": "leite",
|
||||
"dandelion": "dente de león",
|
||||
"demerara-sugar": "demerara sugar",
|
||||
"dough": "dough",
|
||||
"dough": "masa",
|
||||
"edible-cactus": "edible cactus",
|
||||
"eggplant": "eggplant",
|
||||
"eggplant": "berenxena",
|
||||
"endive": "endive",
|
||||
"fats": "fats",
|
||||
"fats": "graxas",
|
||||
"speck": "speck",
|
||||
"fava-beans": "fava beans",
|
||||
"fiddlehead": "fiddlehead",
|
||||
"fish": "fish",
|
||||
"fish": "peixe",
|
||||
"catfish": "catfish ",
|
||||
"cod": "cod",
|
||||
"salt-cod": "salt cod",
|
||||
"salmon": "salmon",
|
||||
"cod": "bacallau",
|
||||
"salt-cod": "bacallau en salgadura",
|
||||
"salmon": "salmón",
|
||||
"skate": "skate",
|
||||
"stockfish": "stockfish",
|
||||
"trout": "trout",
|
||||
"tuna": "tuna",
|
||||
"trout": "troita",
|
||||
"tuna": "bonito",
|
||||
"five-spice-powder": "five spice powder",
|
||||
"flour": "flour",
|
||||
"flour": "fariña",
|
||||
"frisee": "frisee",
|
||||
"fructose": "fructose",
|
||||
"fruit": "fruit",
|
||||
"apple": "apple",
|
||||
"oranges": "oranges",
|
||||
"pear": "pear",
|
||||
"tomato": "tomato ",
|
||||
"fructose": "frutosa",
|
||||
"fruit": "froita",
|
||||
"apple": "mazá",
|
||||
"oranges": "laranxas",
|
||||
"pear": "pera",
|
||||
"tomato": "tomate ",
|
||||
"fruit-sugar": "fruit sugar",
|
||||
"garam-masala": "garam masala",
|
||||
"garlic": "garlic",
|
||||
|
||||
@@ -82,19 +82,19 @@
|
||||
"fats": "gorduras",
|
||||
"speck": "presunto",
|
||||
"fava-beans": "feijão-fava",
|
||||
"fiddlehead": "fiddlehead",
|
||||
"fiddlehead": "Broto de Samambaia",
|
||||
"fish": "peixe",
|
||||
"catfish": "bagre ",
|
||||
"cod": "bacalhau",
|
||||
"salt-cod": "bacalhau salgado",
|
||||
"salmon": "salmão",
|
||||
"skate": "raia",
|
||||
"stockfish": "stockfish",
|
||||
"stockfish": "bacalhau seco",
|
||||
"trout": "truta",
|
||||
"tuna": "atum",
|
||||
"five-spice-powder": "five spice powder",
|
||||
"five-spice-powder": "pó de cinco especiarias",
|
||||
"flour": "farinha",
|
||||
"frisee": "frisee",
|
||||
"frisee": "chicória ondulada",
|
||||
"fructose": "frutose",
|
||||
"fruit": "fruta",
|
||||
"apple": "maçã",
|
||||
@@ -104,13 +104,13 @@
|
||||
"fruit-sugar": "açúcar de fruta",
|
||||
"garam-masala": "garam masala",
|
||||
"garlic": "alho",
|
||||
"gem-squash": "gem squash",
|
||||
"gem-squash": "abóbora coroa",
|
||||
"ginger": "gengibre",
|
||||
"giblets": "giblets",
|
||||
"giblets": "miúdos",
|
||||
"grains": "cereais",
|
||||
"maize": "milho",
|
||||
"sweetcorn": "milho-doce",
|
||||
"teff": "teff",
|
||||
"teff": "tefe",
|
||||
"grape-seed-oil": "óleo de semente de uva",
|
||||
"green-onion": "Cebola Verde",
|
||||
"heart-of-palm": "palmito",
|
||||
@@ -120,15 +120,15 @@
|
||||
"parsley": "salsinha",
|
||||
"honey": "mel",
|
||||
"icing-sugar": "açúcar de confeiteiro",
|
||||
"isomalt": "isomalt",
|
||||
"isomalt": "açúcar isomalte",
|
||||
"jackfruit": "jaca",
|
||||
"jaggery": "jaggery",
|
||||
"jaggery": "açúcar mascavo",
|
||||
"jams": "geléias",
|
||||
"jellies": "gelatinas",
|
||||
"jerusalem-artichoke": "jerusalem artichoke",
|
||||
"jerusalem-artichoke": "alcachofra de Jerusalém",
|
||||
"jicama": "jicama",
|
||||
"kale": "couve",
|
||||
"kumara": "kumara",
|
||||
"kumara": "batata doce kumara",
|
||||
"leavening-agents": "fermento químico",
|
||||
"leek": "alho-porró",
|
||||
"legumes": "leguminosas ",
|
||||
@@ -143,27 +143,27 @@
|
||||
"mortadella": "mortadela",
|
||||
"mushroom": "cogumelo",
|
||||
"white-mushroom": "cogumelo branco",
|
||||
"mussels": "mussels",
|
||||
"mussels": "mexilhões",
|
||||
"nori": "nori",
|
||||
"nutmeg": "noz-moscada",
|
||||
"nutritional-yeast-flakes": "levedura nutricional em flocos",
|
||||
"nuts": "nozes",
|
||||
"nanaimo-bar-mix": "nanaimo bar mix",
|
||||
"nanaimo-bar-mix": "açúcar mascavo",
|
||||
"octopuses": "polvos",
|
||||
"oils": "óleos",
|
||||
"olive-oil": "azeite de oliva",
|
||||
"okra": "quiabo",
|
||||
"olive": "azeitona",
|
||||
"onion-family": "onion family",
|
||||
"onion-family": "família das amarilidáceas",
|
||||
"onion": "cebola",
|
||||
"scallion": "cebolinha",
|
||||
"shallot": "chalota",
|
||||
"spring-onion": "cebolinha",
|
||||
"orange-blossom-water": "água de flor laranja",
|
||||
"oysters": "ostras",
|
||||
"panch-puran": "panch puran",
|
||||
"panch-puran": "mistura pronta de 5 especiarias indianas",
|
||||
"paprika": "páprica",
|
||||
"parsnip": "parsnip",
|
||||
"parsnip": "pastinaca ou cherovia",
|
||||
"pepper": "pimenta",
|
||||
"peppers": "pimentas",
|
||||
"plantain": "banana-da-terra",
|
||||
@@ -178,7 +178,7 @@
|
||||
"raw-sugar": "açúcar mascavo",
|
||||
"refined-sugar": "açúcar refinado",
|
||||
"rice-flour": "farinha de arroz",
|
||||
"rock-sugar": "rock sugar",
|
||||
"rock-sugar": "açúcar em cubo",
|
||||
"rum": "rum",
|
||||
"salt": "sal",
|
||||
"seafood": "frutos do mar",
|
||||
@@ -191,14 +191,14 @@
|
||||
"spaghetti-squash": "espaguete de abobrinha",
|
||||
"spices": "temperos",
|
||||
"spinach": "espinafre",
|
||||
"squash-family": "squash family",
|
||||
"squash": "squash",
|
||||
"squash-family": "família das abóboras",
|
||||
"squash": "abóbora",
|
||||
"zucchini": "abobrinha",
|
||||
"sugar": "açúcar",
|
||||
"caster-sugar": "açúcar refinado",
|
||||
"granulated-sugar": "açúcar cristal",
|
||||
"superfine-sugar": "açúcar refinado",
|
||||
"turbanado-sugar": "turbanado sugar",
|
||||
"turbanado-sugar": "açúcar mascavo não-processado",
|
||||
"unrefined-sugar": "açúcar não refinado",
|
||||
"white-sugar": "açúcar cristal",
|
||||
"sweet-potato": "batata doce",
|
||||
@@ -207,14 +207,14 @@
|
||||
"tahini": "tahine",
|
||||
"tubers": "tubérculos",
|
||||
"potato": "batata",
|
||||
"sunchoke": "sunchoke",
|
||||
"sunchoke": "Alcachofra de Jerusalém",
|
||||
"taro": "taro",
|
||||
"yam": "mandioca",
|
||||
"turnip": "nabo",
|
||||
"vanilla": "baunilha",
|
||||
"vegetables": "vegetais",
|
||||
"fiddlehead-fern": "fiddlehead fern",
|
||||
"ful": "ful",
|
||||
"fiddlehead-fern": "broto de samambaia",
|
||||
"ful": "flor de jasmim",
|
||||
"watercress": "agrião",
|
||||
"watermelon": "melancia",
|
||||
"xanthan-gum": "goma xantana",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[
|
||||
{
|
||||
"name": "Pasta i caldos"
|
||||
"name": "Producte fresc"
|
||||
},
|
||||
{
|
||||
"name": "Cereals"
|
||||
@@ -33,28 +33,28 @@
|
||||
"name": "Llepolies"
|
||||
},
|
||||
{
|
||||
"name": "Lactis i llets vegetals"
|
||||
"name": "Productes lactis"
|
||||
},
|
||||
{
|
||||
"name": "Congelats"
|
||||
},
|
||||
{
|
||||
"name": "Bio"
|
||||
"name": "Menjars saludables"
|
||||
},
|
||||
{
|
||||
"name": "Neteja"
|
||||
"name": "Llar"
|
||||
},
|
||||
{
|
||||
"name": "Carns"
|
||||
"name": "Productes càrnics"
|
||||
},
|
||||
{
|
||||
"name": "Snacks"
|
||||
"name": "Entremesos"
|
||||
},
|
||||
{
|
||||
"name": "Espècies"
|
||||
},
|
||||
{
|
||||
"name": "Sucre i dolços"
|
||||
"name": "Dolços"
|
||||
},
|
||||
{
|
||||
"name": "Celler"
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
"name": "Ποτά"
|
||||
},
|
||||
{
|
||||
"name": "Baked Goods"
|
||||
"name": "Αρτοσκευάσματα"
|
||||
},
|
||||
{
|
||||
"name": "Κονσερβοποιημένα Αγαθά"
|
||||
},
|
||||
{
|
||||
"name": "Condiments"
|
||||
"name": "Καρυκεύματα"
|
||||
},
|
||||
{
|
||||
"name": "Confectionary"
|
||||
@@ -36,16 +36,16 @@
|
||||
"name": "Γαλακτοκομικά"
|
||||
},
|
||||
{
|
||||
"name": "Κατεψυγμένα Φαγητά"
|
||||
"name": "Κατεψυγμένα Τρόφιμα"
|
||||
},
|
||||
{
|
||||
"name": "Health Foods"
|
||||
"name": "Υγιεινά τρόφιμα"
|
||||
},
|
||||
{
|
||||
"name": "Household"
|
||||
},
|
||||
{
|
||||
"name": "Meat Products"
|
||||
"name": "Κρεατικά"
|
||||
},
|
||||
{
|
||||
"name": "Σνακ"
|
||||
|
||||
65
mealie/repos/seed/resources/labels/locales/fr-BE.json
Normal file
65
mealie/repos/seed/resources/labels/locales/fr-BE.json
Normal file
@@ -0,0 +1,65 @@
|
||||
[
|
||||
{
|
||||
"name": "Produits"
|
||||
},
|
||||
{
|
||||
"name": "Céréales"
|
||||
},
|
||||
{
|
||||
"name": "Fruits"
|
||||
},
|
||||
{
|
||||
"name": "Légumes"
|
||||
},
|
||||
{
|
||||
"name": "Viande"
|
||||
},
|
||||
{
|
||||
"name": "Produits de la mer"
|
||||
},
|
||||
{
|
||||
"name": "Boissons"
|
||||
},
|
||||
{
|
||||
"name": "Produits cuisinés"
|
||||
},
|
||||
{
|
||||
"name": "Conserves"
|
||||
},
|
||||
{
|
||||
"name": "Condiments"
|
||||
},
|
||||
{
|
||||
"name": "Confiseries"
|
||||
},
|
||||
{
|
||||
"name": "Produits laitiers"
|
||||
},
|
||||
{
|
||||
"name": "Produits surgelés"
|
||||
},
|
||||
{
|
||||
"name": "Produits healthy"
|
||||
},
|
||||
{
|
||||
"name": "Foyer"
|
||||
},
|
||||
{
|
||||
"name": "Viandes"
|
||||
},
|
||||
{
|
||||
"name": "Collations"
|
||||
},
|
||||
{
|
||||
"name": "Épices"
|
||||
},
|
||||
{
|
||||
"name": "Sucrerie"
|
||||
},
|
||||
{
|
||||
"name": "Alcool"
|
||||
},
|
||||
{
|
||||
"name": "Autre"
|
||||
}
|
||||
]
|
||||
@@ -1,65 +1,65 @@
|
||||
[
|
||||
{
|
||||
"name": "Produce"
|
||||
"name": "Froitas e verduras"
|
||||
},
|
||||
{
|
||||
"name": "Grains"
|
||||
"name": "Grans"
|
||||
},
|
||||
{
|
||||
"name": "Fruits"
|
||||
"name": "Froitas"
|
||||
},
|
||||
{
|
||||
"name": "Vegetables"
|
||||
"name": "Vexetais"
|
||||
},
|
||||
{
|
||||
"name": "Meat"
|
||||
"name": "Carne"
|
||||
},
|
||||
{
|
||||
"name": "Seafood"
|
||||
"name": "Marisco"
|
||||
},
|
||||
{
|
||||
"name": "Beverages"
|
||||
"name": "Bebidas"
|
||||
},
|
||||
{
|
||||
"name": "Baked Goods"
|
||||
"name": "Padaría"
|
||||
},
|
||||
{
|
||||
"name": "Canned Goods"
|
||||
"name": "Latas"
|
||||
},
|
||||
{
|
||||
"name": "Condiments"
|
||||
"name": "Condimentos"
|
||||
},
|
||||
{
|
||||
"name": "Confectionary"
|
||||
"name": "Repostería"
|
||||
},
|
||||
{
|
||||
"name": "Dairy Products"
|
||||
"name": "Lácteos"
|
||||
},
|
||||
{
|
||||
"name": "Frozen Foods"
|
||||
"name": "Conxelados"
|
||||
},
|
||||
{
|
||||
"name": "Health Foods"
|
||||
"name": "Alimentos saudables"
|
||||
},
|
||||
{
|
||||
"name": "Household"
|
||||
"name": "Fogar"
|
||||
},
|
||||
{
|
||||
"name": "Meat Products"
|
||||
"name": "Produtos cárnicos"
|
||||
},
|
||||
{
|
||||
"name": "Snacks"
|
||||
"name": "Petiscos"
|
||||
},
|
||||
{
|
||||
"name": "Spices"
|
||||
"name": "Especias"
|
||||
},
|
||||
{
|
||||
"name": "Sweets"
|
||||
"name": "Doces"
|
||||
},
|
||||
{
|
||||
"name": "Alcohol"
|
||||
"name": "Alcol"
|
||||
},
|
||||
{
|
||||
"name": "Other"
|
||||
"name": "Outros"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,65 +1,65 @@
|
||||
[
|
||||
{
|
||||
"name": "Produce"
|
||||
"name": "Rau củ"
|
||||
},
|
||||
{
|
||||
"name": "Grains"
|
||||
"name": "Các loại hạt"
|
||||
},
|
||||
{
|
||||
"name": "Fruits"
|
||||
"name": "Trái cây"
|
||||
},
|
||||
{
|
||||
"name": "Vegetables"
|
||||
"name": "Rau củ"
|
||||
},
|
||||
{
|
||||
"name": "Meat"
|
||||
"name": "Thịt"
|
||||
},
|
||||
{
|
||||
"name": "Seafood"
|
||||
"name": "Hải sản"
|
||||
},
|
||||
{
|
||||
"name": "Beverages"
|
||||
"name": "Đồ uống"
|
||||
},
|
||||
{
|
||||
"name": "Baked Goods"
|
||||
"name": "Bánh"
|
||||
},
|
||||
{
|
||||
"name": "Canned Goods"
|
||||
"name": "Đồ hộp"
|
||||
},
|
||||
{
|
||||
"name": "Condiments"
|
||||
"name": "Đồ gia vị"
|
||||
},
|
||||
{
|
||||
"name": "Confectionary"
|
||||
"name": "Kẹo"
|
||||
},
|
||||
{
|
||||
"name": "Dairy Products"
|
||||
"name": "Sản phẩm từ sữa"
|
||||
},
|
||||
{
|
||||
"name": "Frozen Foods"
|
||||
"name": "Đồ đông lạnh"
|
||||
},
|
||||
{
|
||||
"name": "Health Foods"
|
||||
"name": "Đồ tốt cho sức khỏe"
|
||||
},
|
||||
{
|
||||
"name": "Household"
|
||||
"name": "Gia đình"
|
||||
},
|
||||
{
|
||||
"name": "Meat Products"
|
||||
"name": "Sản phẩm thịt"
|
||||
},
|
||||
{
|
||||
"name": "Snacks"
|
||||
"name": "Đồ ăn vặt"
|
||||
},
|
||||
{
|
||||
"name": "Spices"
|
||||
"name": "Gia vị"
|
||||
},
|
||||
{
|
||||
"name": "Sweets"
|
||||
"name": "Đồ ngọt"
|
||||
},
|
||||
{
|
||||
"name": "Alcohol"
|
||||
"name": "Cồn"
|
||||
},
|
||||
{
|
||||
"name": "Other"
|
||||
"name": "Khác"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,102 +1,141 @@
|
||||
{
|
||||
"teaspoon": {
|
||||
"name": "teelepel",
|
||||
"plural_name": "teaspoons",
|
||||
"description": "",
|
||||
"abbreviation": "tl"
|
||||
},
|
||||
"tablespoon": {
|
||||
"name": "eetlepel",
|
||||
"plural_name": "tablespoons",
|
||||
"description": "",
|
||||
"abbreviation": "el"
|
||||
},
|
||||
"cup": {
|
||||
"name": "koppie",
|
||||
"plural_name": "cups",
|
||||
"description": "",
|
||||
"abbreviation": "koppie"
|
||||
"abbreviation": "c"
|
||||
},
|
||||
"fluid-ounce": {
|
||||
"name": "vloeistofons",
|
||||
"plural_name": "fluid ounces",
|
||||
"description": "",
|
||||
"abbreviation": "fl oz"
|
||||
},
|
||||
"pint": {
|
||||
"name": "pint",
|
||||
"plural_name": "pints",
|
||||
"description": "",
|
||||
"abbreviation": "pt"
|
||||
},
|
||||
"quart": {
|
||||
"name": "kwart",
|
||||
"plural_name": "quarts",
|
||||
"description": "",
|
||||
"abbreviation": "qt"
|
||||
},
|
||||
"gallon": {
|
||||
"name": "gallon",
|
||||
"plural_name": "gallons",
|
||||
"description": "",
|
||||
"abbreviation": "gal"
|
||||
},
|
||||
"milliliter": {
|
||||
"name": "milliliter",
|
||||
"plural_name": "milliliters",
|
||||
"description": "",
|
||||
"abbreviation": "ml"
|
||||
},
|
||||
"liter": {
|
||||
"name": "liter",
|
||||
"plural_name": "liters",
|
||||
"description": "",
|
||||
"abbreviation": "l"
|
||||
},
|
||||
"pound": {
|
||||
"name": "pond",
|
||||
"plural_name": "pounds",
|
||||
"description": "",
|
||||
"abbreviation": "lb"
|
||||
"abbreviation": "lb",
|
||||
"plural_abbreviation": "lbs"
|
||||
},
|
||||
"ounce": {
|
||||
"name": "ons",
|
||||
"plural_name": "ounces",
|
||||
"description": "",
|
||||
"abbreviation": "oz"
|
||||
},
|
||||
"gram": {
|
||||
"name": "gram",
|
||||
"plural_name": "grams",
|
||||
"description": "",
|
||||
"abbreviation": "g"
|
||||
},
|
||||
"kilogram": {
|
||||
"name": "kilogram",
|
||||
"plural_name": "kilograms",
|
||||
"description": "",
|
||||
"abbreviation": "kg"
|
||||
},
|
||||
"milligram": {
|
||||
"name": "milligram",
|
||||
"plural_name": "milligrams",
|
||||
"description": "",
|
||||
"abbreviation": "mg"
|
||||
},
|
||||
"splash": {
|
||||
"name": "skeut",
|
||||
"plural_name": "splashes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"dash": {
|
||||
"name": "knippie",
|
||||
"plural_name": "dashes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"serving": {
|
||||
"name": "serving",
|
||||
"plural_name": "servings",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"head": {
|
||||
"name": "head",
|
||||
"plural_name": "heads",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"clove": {
|
||||
"name": "clove",
|
||||
"plural_name": "cloves",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"can": {
|
||||
"name": "can",
|
||||
"plural_name": "cans",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"bunch": {
|
||||
"name": "bunch",
|
||||
"plural_name": "bunches",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pack": {
|
||||
"name": "pack",
|
||||
"plural_name": "packs",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pinch": {
|
||||
"name": "pinch",
|
||||
"plural_name": "pinches",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,102 +1,141 @@
|
||||
{
|
||||
"teaspoon": {
|
||||
"name": "ملعقة صغيرة",
|
||||
"plural_name": "teaspoons",
|
||||
"description": "",
|
||||
"abbreviation": "ملعقة صغيرة"
|
||||
},
|
||||
"tablespoon": {
|
||||
"name": "ملعقة كبيرة",
|
||||
"plural_name": "tablespoons",
|
||||
"description": "",
|
||||
"abbreviation": "ملعقة كبيرة"
|
||||
},
|
||||
"cup": {
|
||||
"name": "كوب",
|
||||
"plural_name": "cups",
|
||||
"description": "",
|
||||
"abbreviation": "كوب"
|
||||
"abbreviation": "c"
|
||||
},
|
||||
"fluid-ounce": {
|
||||
"name": "أوقية 200gm",
|
||||
"plural_name": "fluid ounces",
|
||||
"description": "",
|
||||
"abbreviation": "أوقية 200gm"
|
||||
},
|
||||
"pint": {
|
||||
"name": "نصف لتر",
|
||||
"plural_name": "pints",
|
||||
"description": "",
|
||||
"abbreviation": "نصف لتر"
|
||||
},
|
||||
"quart": {
|
||||
"name": "الربع",
|
||||
"plural_name": "quarts",
|
||||
"description": "",
|
||||
"abbreviation": "الربع"
|
||||
},
|
||||
"gallon": {
|
||||
"name": "جالون",
|
||||
"plural_name": "gallons",
|
||||
"description": "",
|
||||
"abbreviation": "جالون"
|
||||
},
|
||||
"milliliter": {
|
||||
"name": "ميليلتر",
|
||||
"plural_name": "milliliters",
|
||||
"description": "",
|
||||
"abbreviation": "مل"
|
||||
},
|
||||
"liter": {
|
||||
"name": "لتر",
|
||||
"plural_name": "liters",
|
||||
"description": "",
|
||||
"abbreviation": "لتر"
|
||||
},
|
||||
"pound": {
|
||||
"name": "رطل",
|
||||
"plural_name": "pounds",
|
||||
"description": "",
|
||||
"abbreviation": "رطل"
|
||||
"abbreviation": "رطل",
|
||||
"plural_abbreviation": "lbs"
|
||||
},
|
||||
"ounce": {
|
||||
"name": "أوقية / ألأونضه",
|
||||
"plural_name": "ounces",
|
||||
"description": "",
|
||||
"abbreviation": "أونصة"
|
||||
},
|
||||
"gram": {
|
||||
"name": "جرام",
|
||||
"plural_name": "grams",
|
||||
"description": "",
|
||||
"abbreviation": "غرام"
|
||||
},
|
||||
"kilogram": {
|
||||
"name": "كيلوغرام",
|
||||
"plural_name": "kilograms",
|
||||
"description": "",
|
||||
"abbreviation": "كيلوغرام"
|
||||
},
|
||||
"milligram": {
|
||||
"name": "مليغرام",
|
||||
"plural_name": "milligrams",
|
||||
"description": "",
|
||||
"abbreviation": "مليغرام"
|
||||
},
|
||||
"splash": {
|
||||
"name": "دفقة",
|
||||
"plural_name": "splashes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"dash": {
|
||||
"name": "اندفاع",
|
||||
"plural_name": "dashes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"serving": {
|
||||
"name": "حصة الطعام",
|
||||
"plural_name": "servings",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"head": {
|
||||
"name": "رأس",
|
||||
"plural_name": "heads",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"clove": {
|
||||
"name": "القرنفل",
|
||||
"plural_name": "cloves",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"can": {
|
||||
"name": "يمكن",
|
||||
"plural_name": "cans",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"bunch": {
|
||||
"name": "bunch",
|
||||
"plural_name": "bunches",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pack": {
|
||||
"name": "pack",
|
||||
"plural_name": "packs",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pinch": {
|
||||
"name": "pinch",
|
||||
"plural_name": "pinches",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,102 +1,141 @@
|
||||
{
|
||||
"teaspoon": {
|
||||
"name": "чаена лъжичка",
|
||||
"plural_name": "teaspoons",
|
||||
"description": "",
|
||||
"abbreviation": "ч.л."
|
||||
},
|
||||
"tablespoon": {
|
||||
"name": "супена лъжица",
|
||||
"plural_name": "tablespoons",
|
||||
"description": "",
|
||||
"abbreviation": "с.л."
|
||||
},
|
||||
"cup": {
|
||||
"name": "чаена чаша",
|
||||
"plural_name": "cups",
|
||||
"description": "",
|
||||
"abbreviation": "cup"
|
||||
"abbreviation": "c"
|
||||
},
|
||||
"fluid-ounce": {
|
||||
"name": "fluid ounce",
|
||||
"plural_name": "fluid ounces",
|
||||
"description": "",
|
||||
"abbreviation": "fl oz"
|
||||
},
|
||||
"pint": {
|
||||
"name": "pint",
|
||||
"plural_name": "pints",
|
||||
"description": "",
|
||||
"abbreviation": "pt"
|
||||
},
|
||||
"quart": {
|
||||
"name": "quart",
|
||||
"plural_name": "quarts",
|
||||
"description": "",
|
||||
"abbreviation": "qt"
|
||||
},
|
||||
"gallon": {
|
||||
"name": "gallon",
|
||||
"plural_name": "gallons",
|
||||
"description": "",
|
||||
"abbreviation": "gal"
|
||||
},
|
||||
"milliliter": {
|
||||
"name": "милилитър",
|
||||
"plural_name": "milliliters",
|
||||
"description": "",
|
||||
"abbreviation": "ml"
|
||||
},
|
||||
"liter": {
|
||||
"name": "литър",
|
||||
"plural_name": "liters",
|
||||
"description": "",
|
||||
"abbreviation": "л"
|
||||
},
|
||||
"pound": {
|
||||
"name": "pound",
|
||||
"plural_name": "pounds",
|
||||
"description": "",
|
||||
"abbreviation": "lb"
|
||||
"abbreviation": "lb",
|
||||
"plural_abbreviation": "lbs"
|
||||
},
|
||||
"ounce": {
|
||||
"name": "ounce",
|
||||
"plural_name": "ounces",
|
||||
"description": "",
|
||||
"abbreviation": "oz"
|
||||
},
|
||||
"gram": {
|
||||
"name": "грам",
|
||||
"plural_name": "grams",
|
||||
"description": "",
|
||||
"abbreviation": "гр"
|
||||
},
|
||||
"kilogram": {
|
||||
"name": "килограм",
|
||||
"plural_name": "kilograms",
|
||||
"description": "",
|
||||
"abbreviation": "кг"
|
||||
},
|
||||
"milligram": {
|
||||
"name": "милиграм",
|
||||
"plural_name": "milligrams",
|
||||
"description": "",
|
||||
"abbreviation": "мг"
|
||||
},
|
||||
"splash": {
|
||||
"name": "1/2 ч.л.",
|
||||
"plural_name": "splashes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"dash": {
|
||||
"name": "щипка",
|
||||
"plural_name": "dashes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"serving": {
|
||||
"name": "порция|порции",
|
||||
"plural_name": "servings",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"head": {
|
||||
"name": "глава",
|
||||
"plural_name": "heads",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"clove": {
|
||||
"name": "скилидка",
|
||||
"plural_name": "cloves",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"can": {
|
||||
"name": "консерва",
|
||||
"plural_name": "cans",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"bunch": {
|
||||
"name": "bunch",
|
||||
"plural_name": "bunches",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pack": {
|
||||
"name": "pack",
|
||||
"plural_name": "packs",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pinch": {
|
||||
"name": "pinch",
|
||||
"plural_name": "pinches",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,102 +1,141 @@
|
||||
{
|
||||
"teaspoon": {
|
||||
"name": "culleradeta/es de cafè",
|
||||
"plural_name": "teaspoons",
|
||||
"description": "",
|
||||
"abbreviation": "cc"
|
||||
"abbreviation": "cdta"
|
||||
},
|
||||
"tablespoon": {
|
||||
"name": "cullera/es sopera/es",
|
||||
"name": "cullerada/des sopera/es",
|
||||
"plural_name": "tablespoons",
|
||||
"description": "",
|
||||
"abbreviation": "cs"
|
||||
"abbreviation": "c/s"
|
||||
},
|
||||
"cup": {
|
||||
"name": "tassa",
|
||||
"plural_name": "cups",
|
||||
"description": "",
|
||||
"abbreviation": "tassa"
|
||||
"abbreviation": "c"
|
||||
},
|
||||
"fluid-ounce": {
|
||||
"name": "centilitre/s",
|
||||
"name": "unça líquida",
|
||||
"plural_name": "fluid ounces",
|
||||
"description": "",
|
||||
"abbreviation": "cl"
|
||||
},
|
||||
"pint": {
|
||||
"name": "got/s",
|
||||
"name": "pinta",
|
||||
"plural_name": "pints",
|
||||
"description": "",
|
||||
"abbreviation": "got/s"
|
||||
"abbreviation": "pt"
|
||||
},
|
||||
"quart": {
|
||||
"name": "quart",
|
||||
"plural_name": "quarts",
|
||||
"description": "",
|
||||
"abbreviation": "qt"
|
||||
},
|
||||
"gallon": {
|
||||
"name": "galó/ns",
|
||||
"name": "galó/galons",
|
||||
"plural_name": "gallons",
|
||||
"description": "",
|
||||
"abbreviation": "gal"
|
||||
},
|
||||
"milliliter": {
|
||||
"name": "mil·lilitre/s",
|
||||
"plural_name": "milliliters",
|
||||
"description": "",
|
||||
"abbreviation": "ml"
|
||||
},
|
||||
"liter": {
|
||||
"name": "litre/s",
|
||||
"plural_name": "liters",
|
||||
"description": "",
|
||||
"abbreviation": "l"
|
||||
},
|
||||
"pound": {
|
||||
"name": "lliura/es",
|
||||
"plural_name": "pounds",
|
||||
"description": "",
|
||||
"abbreviation": "lb"
|
||||
"abbreviation": "lb",
|
||||
"plural_abbreviation": "lbs"
|
||||
},
|
||||
"ounce": {
|
||||
"name": "gotet/s",
|
||||
"plural_name": "ounces",
|
||||
"description": "",
|
||||
"abbreviation": "gotet/s"
|
||||
"abbreviation": "oz"
|
||||
},
|
||||
"gram": {
|
||||
"name": "gram/s",
|
||||
"name": "gram(s)",
|
||||
"plural_name": "grams",
|
||||
"description": "",
|
||||
"abbreviation": "g"
|
||||
},
|
||||
"kilogram": {
|
||||
"name": "quilogram/s",
|
||||
"plural_name": "kilograms",
|
||||
"description": "",
|
||||
"abbreviation": "kg"
|
||||
},
|
||||
"milligram": {
|
||||
"name": "mil·ligram/s",
|
||||
"plural_name": "milligrams",
|
||||
"description": "",
|
||||
"abbreviation": "mg"
|
||||
},
|
||||
"splash": {
|
||||
"name": "pot/s",
|
||||
"name": "esquitxada",
|
||||
"plural_name": "splashes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"dash": {
|
||||
"name": "pessic",
|
||||
"plural_name": "dashes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"serving": {
|
||||
"name": "porció/ns",
|
||||
"plural_name": "servings",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"head": {
|
||||
"name": "cap/s",
|
||||
"name": "cap(s)",
|
||||
"plural_name": "heads",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"clove": {
|
||||
"name": "dent/s",
|
||||
"plural_name": "cloves",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"can": {
|
||||
"name": "llauna/es",
|
||||
"name": "llauna(es)",
|
||||
"plural_name": "cans",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"bunch": {
|
||||
"name": "bunch",
|
||||
"plural_name": "bunches",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pack": {
|
||||
"name": "pack",
|
||||
"plural_name": "packs",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pinch": {
|
||||
"name": "pinch",
|
||||
"plural_name": "pinches",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,102 +1,141 @@
|
||||
{
|
||||
"teaspoon": {
|
||||
"name": "čajová lžička",
|
||||
"plural_name": "teaspoons",
|
||||
"description": "",
|
||||
"abbreviation": "čl"
|
||||
},
|
||||
"tablespoon": {
|
||||
"name": "polévková lžíce",
|
||||
"plural_name": "tablespoons",
|
||||
"description": "",
|
||||
"abbreviation": "pl"
|
||||
},
|
||||
"cup": {
|
||||
"name": "šálek",
|
||||
"plural_name": "cups",
|
||||
"description": "",
|
||||
"abbreviation": "šálek"
|
||||
"abbreviation": "c"
|
||||
},
|
||||
"fluid-ounce": {
|
||||
"name": "dutá unce",
|
||||
"plural_name": "fluid ounces",
|
||||
"description": "",
|
||||
"abbreviation": "fl oz"
|
||||
},
|
||||
"pint": {
|
||||
"name": "pinta",
|
||||
"plural_name": "pints",
|
||||
"description": "",
|
||||
"abbreviation": "pt"
|
||||
},
|
||||
"quart": {
|
||||
"name": "čtvrtka",
|
||||
"plural_name": "quarts",
|
||||
"description": "",
|
||||
"abbreviation": "čtvrtka"
|
||||
},
|
||||
"gallon": {
|
||||
"name": "galon",
|
||||
"plural_name": "gallons",
|
||||
"description": "",
|
||||
"abbreviation": "gal"
|
||||
},
|
||||
"milliliter": {
|
||||
"name": "mililitr",
|
||||
"plural_name": "milliliters",
|
||||
"description": "",
|
||||
"abbreviation": "ml"
|
||||
},
|
||||
"liter": {
|
||||
"name": "litr",
|
||||
"plural_name": "liters",
|
||||
"description": "",
|
||||
"abbreviation": "l"
|
||||
},
|
||||
"pound": {
|
||||
"name": "libra",
|
||||
"plural_name": "pounds",
|
||||
"description": "",
|
||||
"abbreviation": "lb"
|
||||
"abbreviation": "lb",
|
||||
"plural_abbreviation": "lbs"
|
||||
},
|
||||
"ounce": {
|
||||
"name": "unce",
|
||||
"plural_name": "ounces",
|
||||
"description": "",
|
||||
"abbreviation": "oz"
|
||||
},
|
||||
"gram": {
|
||||
"name": "gram",
|
||||
"plural_name": "grams",
|
||||
"description": "",
|
||||
"abbreviation": "g"
|
||||
},
|
||||
"kilogram": {
|
||||
"name": "kilogram",
|
||||
"plural_name": "kilograms",
|
||||
"description": "",
|
||||
"abbreviation": "kg"
|
||||
},
|
||||
"milligram": {
|
||||
"name": "miligram",
|
||||
"plural_name": "milligrams",
|
||||
"description": "",
|
||||
"abbreviation": "mg"
|
||||
},
|
||||
"splash": {
|
||||
"name": "kapka",
|
||||
"plural_name": "splashes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"dash": {
|
||||
"name": "špetka",
|
||||
"plural_name": "dashes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"serving": {
|
||||
"name": "porce",
|
||||
"plural_name": "servings",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"head": {
|
||||
"name": "hlava",
|
||||
"plural_name": "heads",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"clove": {
|
||||
"name": "stroužek",
|
||||
"plural_name": "cloves",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"can": {
|
||||
"name": "plechovka",
|
||||
"plural_name": "cans",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"bunch": {
|
||||
"name": "bunch",
|
||||
"plural_name": "bunches",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pack": {
|
||||
"name": "pack",
|
||||
"plural_name": "packs",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pinch": {
|
||||
"name": "pinch",
|
||||
"plural_name": "pinches",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,102 +1,141 @@
|
||||
{
|
||||
"teaspoon": {
|
||||
"name": "teske",
|
||||
"plural_name": "teaspoons",
|
||||
"description": "",
|
||||
"abbreviation": "tsk."
|
||||
},
|
||||
"tablespoon": {
|
||||
"name": "spiseske",
|
||||
"plural_name": "tablespoons",
|
||||
"description": "",
|
||||
"abbreviation": "spsk."
|
||||
},
|
||||
"cup": {
|
||||
"name": "kop",
|
||||
"plural_name": "cups",
|
||||
"description": "",
|
||||
"abbreviation": "kop"
|
||||
"abbreviation": "c"
|
||||
},
|
||||
"fluid-ounce": {
|
||||
"name": "flydende ounce",
|
||||
"plural_name": "fluid ounces",
|
||||
"description": "",
|
||||
"abbreviation": "fl oz"
|
||||
},
|
||||
"pint": {
|
||||
"name": "pint",
|
||||
"plural_name": "pints",
|
||||
"description": "",
|
||||
"abbreviation": "pt"
|
||||
},
|
||||
"quart": {
|
||||
"name": "quart",
|
||||
"plural_name": "quarts",
|
||||
"description": "",
|
||||
"abbreviation": "qt"
|
||||
},
|
||||
"gallon": {
|
||||
"name": "gallon",
|
||||
"plural_name": "gallons",
|
||||
"description": "",
|
||||
"abbreviation": "gal"
|
||||
},
|
||||
"milliliter": {
|
||||
"name": "milliliter",
|
||||
"plural_name": "milliliters",
|
||||
"description": "",
|
||||
"abbreviation": "ml"
|
||||
},
|
||||
"liter": {
|
||||
"name": "liter",
|
||||
"plural_name": "liters",
|
||||
"description": "",
|
||||
"abbreviation": "l"
|
||||
},
|
||||
"pound": {
|
||||
"name": "pund",
|
||||
"plural_name": "pounds",
|
||||
"description": "",
|
||||
"abbreviation": "lb"
|
||||
"abbreviation": "lb",
|
||||
"plural_abbreviation": "lbs"
|
||||
},
|
||||
"ounce": {
|
||||
"name": "ounce",
|
||||
"plural_name": "ounces",
|
||||
"description": "",
|
||||
"abbreviation": "oz"
|
||||
},
|
||||
"gram": {
|
||||
"name": "gram",
|
||||
"plural_name": "grams",
|
||||
"description": "",
|
||||
"abbreviation": "g"
|
||||
},
|
||||
"kilogram": {
|
||||
"name": "kilogam",
|
||||
"plural_name": "kilograms",
|
||||
"description": "",
|
||||
"abbreviation": "kg"
|
||||
},
|
||||
"milligram": {
|
||||
"name": "milligram",
|
||||
"plural_name": "milligrams",
|
||||
"description": "",
|
||||
"abbreviation": "mg"
|
||||
},
|
||||
"splash": {
|
||||
"name": "sprøjt",
|
||||
"plural_name": "splashes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"dash": {
|
||||
"name": "knivspids",
|
||||
"plural_name": "dashes",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"serving": {
|
||||
"name": "servering",
|
||||
"plural_name": "servings",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"head": {
|
||||
"name": "hoved",
|
||||
"plural_name": "heads",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"clove": {
|
||||
"name": "fed",
|
||||
"plural_name": "cloves",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"can": {
|
||||
"name": "dåse",
|
||||
"plural_name": "cans",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"bunch": {
|
||||
"name": "bunch",
|
||||
"plural_name": "bunches",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pack": {
|
||||
"name": "pack",
|
||||
"plural_name": "packs",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
},
|
||||
"pinch": {
|
||||
"name": "pinch",
|
||||
"plural_name": "pinches",
|
||||
"description": "",
|
||||
"abbreviation": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user