Merge branch 'mealie-next' into manage-data-improve-delete-prompt

This commit is contained in:
Kuchenpirat 2023-11-21 20:08:40 +01:00 committed by GitHub
commit 49b4ee2b90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
46 changed files with 1385 additions and 478 deletions

View File

@ -0,0 +1,145 @@
<template>
<div class="text-center">
<RecipeDialogAddToShoppingList
v-if="shoppingLists"
v-model="shoppingListDialog"
:recipes="recipesWithScales"
:shopping-lists="shoppingLists"
/>
<v-menu
offset-y
left
:bottom="!menuTop"
:nudge-bottom="!menuTop ? '5' : '0'"
:top="menuTop"
:nudge-top="menuTop ? '5' : '0'"
allow-overflow
close-delay="125"
:open-on-hover="$vuetify.breakpoint.mdAndUp"
content-class="d-print-none"
>
<template #activator="{ on, attrs }">
<v-btn :fab="fab" :small="fab" :color="color" :icon="!fab" dark v-bind="attrs" v-on="on" @click.prevent>
<v-icon>{{ icon }}</v-icon>
</v-btn>
</template>
<v-list dense>
<v-list-item v-for="(item, index) in menuItems" :key="index" @click="contextMenuEventHandler(item.event)">
<v-list-item-icon>
<v-icon :color="item.color"> {{ item.icon }} </v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</div>
</template>
<script lang="ts">
import { computed, defineComponent, reactive, ref, toRefs, useContext } from "@nuxtjs/composition-api";
import { Recipe } from "~/lib/api/types/recipe";
import RecipeDialogAddToShoppingList from "~/components/Domain/Recipe/RecipeDialogAddToShoppingList.vue";
import { ShoppingListSummary } from "~/lib/api/types/group";
import { useUserApi } from "~/composables/api";
export interface ContextMenuItem {
title: string;
icon: string;
color: string | undefined;
event: string;
isPublic: boolean;
}
export default defineComponent({
components: {
RecipeDialogAddToShoppingList,
},
props: {
recipes: {
type: Array as () => Recipe[],
default: () => [],
},
menuTop: {
type: Boolean,
default: true,
},
fab: {
type: Boolean,
default: false,
},
color: {
type: String,
default: "primary",
},
menuIcon: {
type: String,
default: null,
},
},
setup(props, context) {
const { $globals, i18n } = useContext();
const api = useUserApi();
const state = reactive({
loading: false,
shoppingListDialog: false,
menuItems: [
{
title: i18n.tc("recipe.add-to-list"),
icon: $globals.icons.cartCheck,
color: undefined,
event: "shoppingList",
isPublic: false,
},
],
});
const icon = props.menuIcon || $globals.icons.dotsVertical;
const shoppingLists = ref<ShoppingListSummary[]>();
const recipesWithScales = computed(() => {
return props.recipes.map((recipe) => {
return {
scale: 1,
...recipe,
};
})
})
async function getShoppingLists() {
const { data } = await api.shopping.lists.getAll();
if (data) {
shoppingLists.value = data.items ?? [];
}
}
const eventHandlers: { [key: string]: () => void | Promise<any> } = {
shoppingList: () => {
getShoppingLists();
state.shoppingListDialog = true;
},
};
function contextMenuEventHandler(eventKey: string) {
const handler = eventHandlers[eventKey];
if (handler && typeof handler === "function") {
handler();
state.loading = false;
return;
}
context.emit(eventKey);
state.loading = false;
}
return {
...toRefs(state),
contextMenuEventHandler,
icon,
recipesWithScales,
shoppingLists,
}
},
})
</script>

View File

@ -69,77 +69,12 @@
></v-select> ></v-select>
</v-card-text> </v-card-text>
</BaseDialog> </BaseDialog>
<BaseDialog v-model="shoppingListDialog" :title="$t('recipe.add-to-list')" :icon="$globals.icons.cartCheck"> <RecipeDialogAddToShoppingList
<v-card-text> v-if="shoppingLists && recipeRefWithScale"
<v-card v-model="shoppingListDialog"
v-for="list in shoppingLists" :recipes="[recipeRefWithScale]"
:key="list.id" :shopping-lists="shoppingLists"
hover />
class="my-2 left-border"
@click="openShoppingListIngredientDialog(list)"
>
<v-card-title class="py-2">
{{ list.name }}
</v-card-title>
</v-card>
</v-card-text>
</BaseDialog>
<BaseDialog
v-model="shoppingListIngredientDialog"
:title="selectedShoppingList ? selectedShoppingList.name : $t('recipe.add-to-list')"
:icon="$globals.icons.cartCheck"
width="70%"
:submit-text="$tc('recipe.add-to-list')"
@submit="addRecipeToList()"
>
<v-card
elevation="0"
height="fit-content"
max-height="60vh"
width="100%"
:class="$vuetify.breakpoint.smAndDown ? '' : 'ingredient-grid'"
:style="$vuetify.breakpoint.smAndDown ? '' : { gridTemplateRows: `repeat(${Math.ceil(recipeIngredients.length / 2)}, min-content)` }"
style="overflow-y: auto"
>
<v-list-item
v-for="(ingredientData, i) in recipeIngredients"
:key="'ingredient' + i"
dense
@click="recipeIngredients[i].checked = !recipeIngredients[i].checked"
>
<v-checkbox
hide-details
:input-value="ingredientData.checked"
class="pt-0 my-auto py-auto"
color="secondary"
/>
<v-list-item-content :key="ingredientData.ingredient.quantity">
<RecipeIngredientListItem
:ingredient="ingredientData.ingredient"
:disable-amount="ingredientData.disableAmount"
:scale="recipeScale" />
</v-list-item-content>
</v-list-item>
</v-card>
<div class="d-flex justify-end mb-4 mt-2">
<BaseButtonGroup
:buttons="[
{
icon: $globals.icons.checkboxBlankOutline,
text: $tc('shopping-list.uncheck-all-items'),
event: 'uncheck',
},
{
icon: $globals.icons.checkboxOutline,
text: $tc('shopping-list.check-all-items'),
event: 'check',
},
]"
@uncheck="bulkCheckIngredients(false)"
@check="bulkCheckIngredients(true)"
/>
</div>
</BaseDialog>
<v-menu <v-menu
offset-y offset-y
left left
@ -171,14 +106,14 @@
<script lang="ts"> <script lang="ts">
import { computed, defineComponent, reactive, toRefs, useContext, useRoute, useRouter, ref } from "@nuxtjs/composition-api"; import { computed, defineComponent, reactive, toRefs, useContext, useRoute, useRouter, ref } from "@nuxtjs/composition-api";
import RecipeIngredientListItem from "./RecipeIngredientListItem.vue"; import RecipeDialogAddToShoppingList from "./RecipeDialogAddToShoppingList.vue";
import RecipeDialogPrintPreferences from "./RecipeDialogPrintPreferences.vue"; import RecipeDialogPrintPreferences from "./RecipeDialogPrintPreferences.vue";
import RecipeDialogShare from "./RecipeDialogShare.vue"; import RecipeDialogShare from "./RecipeDialogShare.vue";
import { useLoggedInState } from "~/composables/use-logged-in-state"; import { useLoggedInState } from "~/composables/use-logged-in-state";
import { useUserApi } from "~/composables/api"; import { useUserApi } from "~/composables/api";
import { alert } from "~/composables/use-toast"; import { alert } from "~/composables/use-toast";
import { usePlanTypeOptions } from "~/composables/use-group-mealplan"; import { usePlanTypeOptions } from "~/composables/use-group-mealplan";
import { Recipe, RecipeIngredient } from "~/lib/api/types/recipe"; import { Recipe } from "~/lib/api/types/recipe";
import { ShoppingListSummary } from "~/lib/api/types/group"; import { ShoppingListSummary } from "~/lib/api/types/group";
import { PlanEntryType } from "~/lib/api/types/meal-plan"; import { PlanEntryType } from "~/lib/api/types/meal-plan";
import { useAxiosDownloader } from "~/composables/api/use-axios-download"; import { useAxiosDownloader } from "~/composables/api/use-axios-download";
@ -204,9 +139,9 @@ export interface ContextMenuItem {
export default defineComponent({ export default defineComponent({
components: { components: {
RecipeDialogAddToShoppingList,
RecipeDialogPrintPreferences, RecipeDialogPrintPreferences,
RecipeDialogShare, RecipeDialogShare,
RecipeIngredientListItem
}, },
props: { props: {
useItems: { useItems: {
@ -279,7 +214,6 @@ export default defineComponent({
recipeDeleteDialog: false, recipeDeleteDialog: false,
mealplannerDialog: false, mealplannerDialog: false,
shoppingListDialog: false, shoppingListDialog: false,
shoppingListIngredientDialog: false,
recipeDuplicateDialog: false, recipeDuplicateDialog: false,
recipeName: props.name, recipeName: props.name,
loading: false, loading: false,
@ -374,7 +308,7 @@ export default defineComponent({
} }
} }
// Add leading and Apppending Items // Add leading and Appending Items
state.menuItems = [...state.menuItems, ...props.leadingItems, ...props.appendItems]; state.menuItems = [...state.menuItems, ...props.leadingItems, ...props.appendItems];
const icon = props.menuIcon || $globals.icons.dotsVertical; const icon = props.menuIcon || $globals.icons.dotsVertical;
@ -383,9 +317,8 @@ export default defineComponent({
// Context Menu Event Handler // Context Menu Event Handler
const shoppingLists = ref<ShoppingListSummary[]>(); const shoppingLists = ref<ShoppingListSummary[]>();
const selectedShoppingList = ref<ShoppingListSummary>();
const recipeRef = ref<Recipe>(props.recipe); const recipeRef = ref<Recipe>(props.recipe);
const recipeIngredients = ref<{ checked: boolean; ingredient: RecipeIngredient, disableAmount: boolean }[]>([]); const recipeRefWithScale = computed(() => recipeRef.value ? { scale: props.recipeScale, ...recipeRef.value } : undefined);
async function getShoppingLists() { async function getShoppingLists() {
const { data } = await api.shopping.lists.getAll(); const { data } = await api.shopping.lists.getAll();
@ -401,61 +334,6 @@ export default defineComponent({
} }
} }
async function openShoppingListIngredientDialog(list: ShoppingListSummary) {
selectedShoppingList.value = list;
if (!recipeRef.value) {
await refreshRecipe();
}
if (recipeRef.value?.recipeIngredient) {
recipeIngredients.value = recipeRef.value.recipeIngredient.map((ingredient) => {
return {
checked: true,
ingredient,
disableAmount: recipeRef.value.settings?.disableAmount || false
};
});
}
state.shoppingListDialog = false;
state.shoppingListIngredientDialog = true;
}
function bulkCheckIngredients(value = true) {
recipeIngredients.value.forEach((data) => {
data.checked = value;
});
}
async function addRecipeToList() {
if (!selectedShoppingList.value) {
return;
}
const ingredients: RecipeIngredient[] = [];
recipeIngredients.value.forEach((data) => {
if (data.checked) {
ingredients.push(data.ingredient);
}
});
if (!ingredients.length) {
return;
}
const { data } = await api.shopping.lists.addRecipe(
selectedShoppingList.value.id,
props.recipeId,
props.recipeScale,
ingredients
);
if (data) {
alert.success(i18n.t("recipe.recipe-added-to-list") as string);
state.shoppingListDialog = false;
state.shoppingListIngredientDialog = false;
}
}
const router = useRouter(); const router = useRouter();
async function deleteRecipe() { async function deleteRecipe() {
@ -516,10 +394,12 @@ export default defineComponent({
state.printPreferencesDialog = true; state.printPreferencesDialog = true;
}, },
shoppingList: () => { shoppingList: () => {
getShoppingLists(); const promises: Promise<void>[] = [getShoppingLists()];
if (!recipeRef.value) {
promises.push(refreshRecipe());
}
state.shoppingListDialog = true; Promise.allSettled(promises).then(() => { state.shoppingListDialog = true });
state.shoppingListIngredientDialog = false;
}, },
share: () => { share: () => {
state.shareDialog = true; state.shareDialog = true;
@ -544,28 +424,15 @@ export default defineComponent({
return { return {
...toRefs(state), ...toRefs(state),
recipeRef, recipeRef,
recipeRefWithScale,
shoppingLists, shoppingLists,
selectedShoppingList,
openShoppingListIngredientDialog,
addRecipeToList,
bulkCheckIngredients,
duplicateRecipe, duplicateRecipe,
contextMenuEventHandler, contextMenuEventHandler,
deleteRecipe, deleteRecipe,
addRecipeToPlan, addRecipeToPlan,
icon, icon,
planTypeOptions, planTypeOptions,
recipeIngredients,
}; };
}, },
}); });
</script> </script>
<style scoped lang="css">
.ingredient-grid {
display: grid;
grid-auto-flow: column;
grid-template-columns: 1fr 1fr;
grid-gap: 0.5rem;
}
</style>

View File

@ -0,0 +1,303 @@
<template>
<div v-if="dialog">
<BaseDialog v-if="shoppingListDialog" v-model="dialog" :title="$t('recipe.add-to-list')" :icon="$globals.icons.cartCheck">
<v-card-text>
<v-card
v-for="list in shoppingLists"
:key="list.id"
hover
class="my-2 left-border"
@click="openShoppingListIngredientDialog(list)"
>
<v-card-title class="py-2">
{{ list.name }}
</v-card-title>
</v-card>
</v-card-text>
</BaseDialog>
<BaseDialog
v-if="shoppingListIngredientDialog"
v-model="dialog"
:title="selectedShoppingList ? selectedShoppingList.name : $t('recipe.add-to-list')"
:icon="$globals.icons.cartCheck"
width="70%"
:submit-text="$tc('recipe.add-to-list')"
@submit="addRecipesToList()"
>
<div style="max-height: 70vh; overflow-y: auto">
<v-card
v-for="(section, sectionIndex) in recipeIngredientSections" :key="section.recipeId + sectionIndex"
elevation="0"
height="fit-content"
width="100%"
>
<v-divider v-if="sectionIndex > 0" class="mt-3" />
<v-card-title
v-if="recipeIngredientSections.length > 1"
class="justify-center"
width="100%"
>
<v-container style="width: 100%;">
<v-row no-gutters class="ma-0 pa-0">
<v-col cols="12" align-self="center" class="text-center">
{{ section.recipeName }}
</v-col>
</v-row>
<v-row v-if="section.recipeScale > 1" no-gutters class="ma-0 pa-0">
<!-- TODO: make this editable in the dialog and visible on single-recipe lists -->
<v-col cols="12" align-self="center" class="text-center">
({{ $tc("recipe.quantity") }}: {{ section.recipeScale }})
</v-col>
</v-row>
</v-container>
</v-card-title>
<div
:class="$vuetify.breakpoint.smAndDown ? '' : 'ingredient-grid'"
:style="$vuetify.breakpoint.smAndDown ? '' : { gridTemplateRows: `repeat(${Math.ceil(section.ingredients.length / 2)}, min-content)` }"
>
<v-list-item
v-for="(ingredientData, i) in section.ingredients"
:key="'ingredient' + i"
dense
@click="recipeIngredientSections[sectionIndex].ingredients[i].checked = !recipeIngredientSections[sectionIndex].ingredients[i].checked"
>
<v-checkbox
hide-details
:input-value="ingredientData.checked"
class="pt-0 my-auto py-auto"
color="secondary"
/>
<v-list-item-content :key="ingredientData.ingredient.quantity">
<RecipeIngredientListItem
:ingredient="ingredientData.ingredient"
:disable-amount="ingredientData.disableAmount"
:scale="section.recipeScale" />
</v-list-item-content>
</v-list-item>
</div>
</v-card>
</div>
<div class="d-flex justify-end mb-4 mt-2">
<BaseButtonGroup
:buttons="[
{
icon: $globals.icons.checkboxBlankOutline,
text: $tc('shopping-list.uncheck-all-items'),
event: 'uncheck',
},
{
icon: $globals.icons.checkboxOutline,
text: $tc('shopping-list.check-all-items'),
event: 'check',
},
]"
@uncheck="bulkCheckIngredients(false)"
@check="bulkCheckIngredients(true)"
/>
</div>
</BaseDialog>
</div>
</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 { ShoppingListSummary } from "~/lib/api/types/group";
import { Recipe, RecipeIngredient } from "~/lib/api/types/recipe";
export interface RecipeWithScale extends Recipe {
scale: number;
}
export interface ShoppingListRecipeIngredient {
checked: boolean;
ingredient: RecipeIngredient;
disableAmount: boolean;
}
export interface ShoppingListRecipeIngredientSection {
recipeId: string;
recipeName: string;
recipeScale: number;
ingredients: ShoppingListRecipeIngredient[];
}
export default defineComponent({
components: {
RecipeIngredientListItem,
},
props: {
value: {
type: Boolean,
default: false,
},
recipes: {
type: Array as () => RecipeWithScale[],
default: undefined,
},
shoppingLists: {
type: Array as () => ShoppingListSummary[],
default: () => [],
},
},
setup(props, context) {
const { i18n } = useContext();
const api = useUserApi();
// v-model support
const dialog = computed({
get: () => {
return props.value;
},
set: (val) => {
context.emit("input", val);
initState();
},
});
const state = reactive({
shoppingListDialog: true,
shoppingListIngredientDialog: false,
});
const recipeIngredientSections = ref<ShoppingListRecipeIngredientSection[]>([]);
const selectedShoppingList = ref<ShoppingListSummary | null>(null);
async function consolidateRecipesIntoSections(recipes: RecipeWithScale[]) {
const recipeSectionMap = new Map<string, ShoppingListRecipeIngredientSection>();
for (const recipe of recipes) {
if (!recipe.slug) {
continue;
}
if (recipeSectionMap.has(recipe.slug)) {
// @ts-ignore not undefined, see above
recipeSectionMap.get(recipe.slug).recipeScale += recipe.scale;
continue;
}
if (!(recipe.id && recipe.name && recipe.recipeIngredient)) {
const { data } = await api.recipes.getOne(recipe.slug);
if (!data?.recipeIngredient?.length) {
continue;
}
recipe.id = data.id || "";
recipe.name = data.name || "";
recipe.recipeIngredient = data.recipeIngredient;
} else if (!recipe.recipeIngredient.length) {
continue;
}
const shoppingListIngredients: ShoppingListRecipeIngredient[] = recipe.recipeIngredient.map((ing) => {
return {
checked: true,
ingredient: ing,
disableAmount: recipe.settings?.disableAmount || false,
}
});
recipeSectionMap.set(recipe.slug, {
recipeId: recipe.id,
recipeName: recipe.name,
recipeScale: recipe.scale,
ingredients: shoppingListIngredients,
})
}
recipeIngredientSections.value = Array.from(recipeSectionMap.values());
}
function initState() {
state.shoppingListDialog = true;
state.shoppingListIngredientDialog = false;
recipeIngredientSections.value = [];
selectedShoppingList.value = null;
}
initState();
async function openShoppingListIngredientDialog(list: ShoppingListSummary) {
if (!props.recipes?.length) {
return;
}
selectedShoppingList.value = list;
await consolidateRecipesIntoSections(props.recipes);
state.shoppingListDialog = false;
state.shoppingListIngredientDialog = true;
}
function bulkCheckIngredients(value = true) {
recipeIngredientSections.value.forEach((section) => {
section.ingredients.forEach((ing) => {
ing.checked = value;
});
});
}
async function addRecipesToList() {
const promises: Promise<any>[] = [];
recipeIngredientSections.value.forEach((section) => {
if (!selectedShoppingList.value) {
return;
}
const ingredients: RecipeIngredient[] = [];
section.ingredients.forEach((ing) => {
if (ing.checked) {
ingredients.push(ing.ingredient);
}
});
if (!ingredients.length) {
return;
}
promises.push(api.shopping.lists.addRecipe(
selectedShoppingList.value.id,
section.recipeId,
section.recipeScale,
ingredients,
));
});
let success = true;
const results = await Promise.allSettled(promises);
results.forEach((result) => {
if (result.status === "rejected") {
success = false;
}
})
success ? alert.success(i18n.t("recipe.recipes-added-to-list") as string)
: alert.error(i18n.t("failed-to-add-recipes-to-list") as string)
state.shoppingListDialog = false;
state.shoppingListIngredientDialog = false;
dialog.value = false;
}
return {
dialog,
...toRefs(state),
addRecipesToList,
bulkCheckIngredients,
openShoppingListIngredientDialog,
recipeIngredientSections,
selectedShoppingList,
}
},
})
</script>
<style scoped lang="css">
.ingredient-grid {
display: grid;
grid-auto-flow: column;
grid-template-columns: 1fr 1fr;
grid-gap: 0.5rem;
}
</style>

View File

@ -953,7 +953,22 @@
"select-data": "Kies data", "select-data": "Kies data",
"select-language": "Kies taal", "select-language": "Kies taal",
"columns": "Kolomme", "columns": "Kolomme",
"combine": "Kombineer" "combine": "Kombineer",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Gebruiker registrasie", "user-registration": "Gebruiker registrasie",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",

View File

@ -953,7 +953,22 @@
"select-data": "Изберете данни", "select-data": "Изберете данни",
"select-language": "Изберете език", "select-language": "Изберете език",
"columns": "Колони", "columns": "Колони",
"combine": "Обедини" "combine": "Обедини",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Регистрации на потребител", "user-registration": "Регистрации на потребител",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Registre d'usuari", "user-registration": "Registre d'usuari",

View File

@ -953,7 +953,22 @@
"select-data": "Vybrat data", "select-data": "Vybrat data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Sloupce", "columns": "Sloupce",
"combine": "Kombinovat" "combine": "Kombinovat",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Registrace uživatele", "user-registration": "Registrace uživatele",

View File

@ -953,7 +953,22 @@
"select-data": "vælg data", "select-data": "vælg data",
"select-language": "Vælg sprog", "select-language": "Vælg sprog",
"columns": "Kolonner", "columns": "Kolonner",
"combine": "Kombinér" "combine": "Kombinér",
"categories": {
"edit-category": "Rediger kategori",
"new-category": "Ny kategori",
"category-data": "Kategoridata"
},
"tags": {
"new-tag": "Nyt mærke",
"edit-tag": "Rediger Mærke",
"tag-data": "Mærke data"
},
"tools": {
"new-tool": "Nyt Værktøj",
"edit-tool": "Redigér værktøjer",
"tool-data": "Værktøjs Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Brugerregistrering", "user-registration": "Brugerregistrering",

View File

@ -953,7 +953,22 @@
"select-data": "Daten auswählen", "select-data": "Daten auswählen",
"select-language": "Sprache wählen", "select-language": "Sprache wählen",
"columns": "Spalten", "columns": "Spalten",
"combine": "Zusammenführen" "combine": "Zusammenführen",
"categories": {
"edit-category": "Kategorie bearbeiten",
"new-category": "Neue Kategorie",
"category-data": "Kategorie-Daten"
},
"tags": {
"new-tag": "Neues Schlagwort",
"edit-tag": "Schlagwort bearbeiten",
"tag-data": "Schlagwort-Daten"
},
"tools": {
"new-tool": "Neues Utensil",
"edit-tool": "Utensil bearbeiten",
"tool-data": "Utensil-Daten"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Benutzerregistrierung", "user-registration": "Benutzerregistrierung",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",

View File

@ -463,7 +463,9 @@
"add-to-plan": "Add to Plan", "add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "Recipe added to mealplan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan", "failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",

View File

@ -953,7 +953,22 @@
"select-data": "Seleccionar datos", "select-data": "Seleccionar datos",
"select-language": "Seleccionar idioma", "select-language": "Seleccionar idioma",
"columns": "Columnas", "columns": "Columnas",
"combine": "Combinar" "combine": "Combinar",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Registro de usuario", "user-registration": "Registro de usuario",

View File

@ -953,7 +953,22 @@
"select-data": "Valitse Tiedot", "select-data": "Valitse Tiedot",
"select-language": "Valitse kieli", "select-language": "Valitse kieli",
"columns": "Sarakkeet", "columns": "Sarakkeet",
"combine": "Yhdistä" "combine": "Yhdistä",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Käyttäjien rekisteröinti", "user-registration": "Käyttäjien rekisteröinti",

View File

@ -953,7 +953,22 @@
"select-data": "Sélectionner les données", "select-data": "Sélectionner les données",
"select-language": "Sélectionnez une langue", "select-language": "Sélectionnez une langue",
"columns": "Colonnes", "columns": "Colonnes",
"combine": "Combiner" "combine": "Combiner",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Inscription dutilisateur", "user-registration": "Inscription dutilisateur",

View File

@ -953,7 +953,22 @@
"select-data": "Sélectionner les données", "select-data": "Sélectionner les données",
"select-language": "Sélectionnez une langue", "select-language": "Sélectionnez une langue",
"columns": "Colonnes", "columns": "Colonnes",
"combine": "Combiner" "combine": "Combiner",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Inscription dutilisateur", "user-registration": "Inscription dutilisateur",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",

View File

@ -953,7 +953,22 @@
"select-data": "בחר נתונים", "select-data": "בחר נתונים",
"select-language": "בחירת שפה", "select-language": "בחירת שפה",
"columns": "עמודות", "columns": "עמודות",
"combine": "שילוב" "combine": "שילוב",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "רישום משתמשים", "user-registration": "רישום משתמשים",

View File

@ -953,7 +953,22 @@
"select-data": "Označite Podatke", "select-data": "Označite Podatke",
"select-language": "Odaberite Jezik", "select-language": "Odaberite Jezik",
"columns": "Stupci", "columns": "Stupci",
"combine": "Kombiniraj" "combine": "Kombiniraj",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Registracija Korisnika", "user-registration": "Registracija Korisnika",

View File

@ -953,7 +953,22 @@
"select-data": "Válassza ki az adatot", "select-data": "Válassza ki az adatot",
"select-language": "Nyelv kiválasztása", "select-language": "Nyelv kiválasztása",
"columns": "Oszlopok", "columns": "Oszlopok",
"combine": "Összevonás" "combine": "Összevonás",
"categories": {
"edit-category": "Kategória szerkesztése",
"new-category": "Új kategória",
"category-data": "Kategória adatai"
},
"tags": {
"new-tag": "Új címke",
"edit-tag": "Címke szerkesztése",
"tag-data": "Címke adatok"
},
"tools": {
"new-tool": "Új eszköz",
"edit-tool": "Eszköz szerkesztése",
"tool-data": "Eszköz adatai"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Felhasználó regisztráció", "user-registration": "Felhasználó regisztráció",

View File

@ -953,7 +953,22 @@
"select-data": "Seleziona Dati", "select-data": "Seleziona Dati",
"select-language": "Seleziona Lingua", "select-language": "Seleziona Lingua",
"columns": "Colonne", "columns": "Colonne",
"combine": "Unisci" "combine": "Unisci",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Registrazione Utente", "user-registration": "Registrazione Utente",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",

View File

@ -953,7 +953,22 @@
"select-data": "Pasirinkti duomenis", "select-data": "Pasirinkti duomenis",
"select-language": "Pasirinkti kalbą", "select-language": "Pasirinkti kalbą",
"columns": "Stulpeliai", "columns": "Stulpeliai",
"combine": "Sujungti" "combine": "Sujungti",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Vartotojo registracija", "user-registration": "Vartotojo registracija",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",

View File

@ -953,7 +953,22 @@
"select-data": "Selecteer gegevens", "select-data": "Selecteer gegevens",
"select-language": "Selecteer taal", "select-language": "Selecteer taal",
"columns": "Kolommen", "columns": "Kolommen",
"combine": "Samenvoegen" "combine": "Samenvoegen",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Gebruikersregistratie", "user-registration": "Gebruikersregistratie",

View File

@ -886,36 +886,36 @@
"seed-dialog-text": "Legg til databasen med mat basert på ditt lokale språk. Dette vil opprette 200+ felles matvarer som kan brukes til å organisere databasen. Næringsmidler oversettes via en samfunnsinnsats.", "seed-dialog-text": "Legg til databasen med mat basert på ditt lokale språk. Dette vil opprette 200+ felles matvarer som kan brukes til å organisere databasen. Næringsmidler oversettes via en samfunnsinnsats.",
"seed-dialog-warning": "Du har allerede elementer i databasen. Denne handlingen vil ikke rekonfigurere duplikater, du må administrere dem manuelt.", "seed-dialog-warning": "Du har allerede elementer i databasen. Denne handlingen vil ikke rekonfigurere duplikater, du må administrere dem manuelt.",
"combine-food": "Kombiner mat", "combine-food": "Kombiner mat",
"source-food": "Source Food", "source-food": "Kilde mat",
"target-food": "Target Food", "target-food": "Mål Mat",
"create-food": "Lag mat", "create-food": "Lag mat",
"food-label": "Mat etikett", "food-label": "Mat etikett",
"edit-food": "Rediger mat", "edit-food": "Rediger mat",
"food-data": "Mat data", "food-data": "Mat data",
"example-food-singular": "ex: Onion", "example-food-singular": "Feks: Tomat",
"example-food-plural": "ex: Onions" "example-food-plural": "Feks: Tomater"
}, },
"units": { "units": {
"seed-dialog-text": "Lag en database med vanlige enheter basert på ditt lokale språk.", "seed-dialog-text": "Lag en database med vanlige enheter basert på ditt lokale språk.",
"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": "Ved å kombinere de valgte enhetene vil kildeenheten og målenheten slås sammen i en enkelt enhet. {source-unit-will-be-deleted} og alle referansene til kildeenheten vil bli oppdatert til å peke til målenheten.",
"combine-unit": "Kombiner enhet", "combine-unit": "Kombiner enhet",
"source-unit": "Source Unit", "source-unit": "Kildeenhet",
"target-unit": "Target Unit", "target-unit": "Målenhet",
"merging-unit-into-unit": "Merging {0} into {1}", "merging-unit-into-unit": "Slår sammen {0} til {1}",
"create-unit": "Opprett enhet", "create-unit": "Opprett enhet",
"abbreviation": "Forkortelse", "abbreviation": "Forkortelse",
"plural-abbreviation": "Plural Abbreviation", "plural-abbreviation": "Flertallsforkortelse",
"description": "Beskrivelse", "description": "Beskrivelse",
"display-as-fraction": "Vis som brøkdel", "display-as-fraction": "Vis som brøkdel",
"use-abbreviation": "Bruk forkortelse", "use-abbreviation": "Bruk forkortelse",
"edit-unit": "Rediger enhet", "edit-unit": "Rediger enhet",
"unit-data": "Unit Data", "unit-data": "Enhetsdata",
"use-abbv": "Use Abbv.", "use-abbv": "Bruk forkortelse.",
"fraction": "Brøk", "fraction": "Brøk",
"example-unit-singular": "ex: Tablespoon", "example-unit-singular": "Feks: Spiseskje",
"example-unit-plural": "ex: Tablespoons", "example-unit-plural": "Feks: Spiseskjeer",
"example-unit-abbreviation-singular": "ex: Tbsp", "example-unit-abbreviation-singular": "Feks: SS",
"example-unit-abbreviation-plural": "ex: Tbsps" "example-unit-abbreviation-plural": "Feks: SS"
}, },
"labels": { "labels": {
"seed-dialog-text": "Lag en database med vanlige enheter basert på ditt lokale språk.", "seed-dialog-text": "Lag en database med vanlige enheter basert på ditt lokale språk.",
@ -927,9 +927,9 @@
"purge-exports": "Fjern eksporter", "purge-exports": "Fjern eksporter",
"are-you-sure-you-want-to-delete-all-export-data": "Er du sikker på at du vil slette all historikk?", "are-you-sure-you-want-to-delete-all-export-data": "Er du sikker på at du vil slette all historikk?",
"confirm-delete-recipes": "Er du sikker på at du vil slette denne oppskriften? Denne handlingen kan ikke angres.", "confirm-delete-recipes": "Er du sikker på at du vil slette denne oppskriften? Denne handlingen kan ikke angres.",
"the-following-recipes-selected-length-will-be-exported": "The following recipes ({0}) will be exported.", "the-following-recipes-selected-length-will-be-exported": "Følgende oppskrifter ({0}) vil bli eksportert.",
"settings-chosen-explanation": "Settings chosen here, excluding the locked option, will be applied to all selected recipes.", "settings-chosen-explanation": "Innstillinger valgt her, bortsett fra det låste alternativet, vil bli brukt på alle valgte oppskrifter.",
"selected-length-recipe-s-settings-will-be-updated": "{count} recipe(s) settings will be updated.", "selected-length-recipe-s-settings-will-be-updated": "Innstillingene til {count} oppskrift(er) vil bli oppdatert.",
"recipe-data": "Oppskriftsdata", "recipe-data": "Oppskriftsdata",
"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-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", "recipe-columns": "Recipe Columns",
@ -953,7 +953,22 @@
"select-data": "Velg data", "select-data": "Velg data",
"select-language": "Velg språk", "select-language": "Velg språk",
"columns": "Kolonner", "columns": "Kolonner",
"combine": "Kombiner" "combine": "Kombiner",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Brukerregistrering", "user-registration": "Brukerregistrering",

View File

@ -953,7 +953,22 @@
"select-data": "Wybierz Dane", "select-data": "Wybierz Dane",
"select-language": "Wybierz język", "select-language": "Wybierz język",
"columns": "Kolumny", "columns": "Kolumny",
"combine": "Połącz" "combine": "Połącz",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Rejestracja użytkownika", "user-registration": "Rejestracja użytkownika",

View File

@ -953,7 +953,22 @@
"select-data": "Selecionar dados", "select-data": "Selecionar dados",
"select-language": "Selecionar idioma", "select-language": "Selecionar idioma",
"columns": "Colunas", "columns": "Colunas",
"combine": "Combinar" "combine": "Combinar",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Cadastro de usuário", "user-registration": "Cadastro de usuário",

View File

@ -953,7 +953,22 @@
"select-data": "Selecionar dados", "select-data": "Selecionar dados",
"select-language": "Selecionar idioma", "select-language": "Selecionar idioma",
"columns": "Colunas", "columns": "Colunas",
"combine": "Combinar" "combine": "Combinar",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Registo de Utilizador", "user-registration": "Registo de Utilizador",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",

View File

@ -953,7 +953,22 @@
"select-data": "Выберите данные", "select-data": "Выберите данные",
"select-language": "Выберите язык", "select-language": "Выберите язык",
"columns": "Столбцы", "columns": "Столбцы",
"combine": "Объединить" "combine": "Объединить",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Регистрация", "user-registration": "Регистрация",

View File

@ -953,7 +953,22 @@
"select-data": "Vyberte dáta", "select-data": "Vyberte dáta",
"select-language": "Vyberte jazyk", "select-language": "Vyberte jazyk",
"columns": "Stĺpce", "columns": "Stĺpce",
"combine": "Kombinovať" "combine": "Kombinovať",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Registrácia", "user-registration": "Registrácia",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Registracija uporabnika", "user-registration": "Registracija uporabnika",

View File

@ -1,18 +1,18 @@
{ {
"about": { "about": {
"about": "О апликацији", "about": "О апликацији",
"about-mealie": "О Меалие-у", "about-mealie": "О Мили",
"api-docs": "АПИ Документација", "api-docs": "API документација",
"api-port": "API прикључак", "api-port": "API прикључак",
"application-mode": "Мод Апликације", "application-mode": "Режим апликације",
"database-type": "Тип Базе Података", "database-type": "Тип базе података",
"database-url": "URL базе", "database-url": "URL базе података",
"default-group": "Подразумевана Група", "default-group": "Подразумевана група",
"demo": "Демо", "demo": "Демо",
"demo-status": "Статус Демоа", "demo-status": "Демо статус",
"development": "Развој", "development": "Развој",
"docs": "Документација", "docs": "Документација",
"download-log": "Преузми евиденцију", "download-log": "Преузми дневник евиденције",
"download-recipe-json": "Последњи прикупљени JSON", "download-recipe-json": "Последњи прикупљени JSON",
"github": "Github", "github": "Github",
"log-lines": "Log Lines", "log-lines": "Log Lines",
@ -56,7 +56,7 @@
"event-delete-confirmation": "Да ли сте сигурни да желите да обришете овај догађај?", "event-delete-confirmation": "Да ли сте сигурни да желите да обришете овај догађај?",
"event-deleted": "Догађај је избрисан", "event-deleted": "Догађај је избрисан",
"event-updated": "Догађај је ажуриран", "event-updated": "Догађај је ажуриран",
"new-notification-form-description": "Mealie користи Apprise библиотеку за генерисање обавештења. Они нуде много опција за услуге које можете користити за обавештења. Погледајте њихову вики страницу за свеобухватан водич о томе како креирати URL за вашу услугу. Ако је доступно, одабир врсте вашег обавештења може укључивати додатне функције.", "new-notification-form-description": "Mили користи Apprise библиотеку за генерисање обавештења. Они нуде много опција за услуге које можете користити за обавештења. Погледајте њихову вики страницу за свеобухватан водич о томе како креирати URL за вашу услугу. Ако је доступно, одабир врсте вашег обавештења може укључивати додатне функције.",
"new-version": "Доступна је нова верзија!", "new-version": "Доступна је нова верзија!",
"notification": "Обавештење", "notification": "Обавештење",
"refresh": "Освежи", "refresh": "Освежи",
@ -70,8 +70,8 @@
"enable-notifier": "Омогући обавештење", "enable-notifier": "Омогући обавештење",
"what-events": "На које догађаје би требао да се претплати овај обавештавач?", "what-events": "На које догађаје би требао да се претплати овај обавештавач?",
"user-events": "Догађаји корисника", "user-events": "Догађаји корисника",
"mealplan-events": "Догађаји планирања оброка", "mealplan-events": "Догађаји јеловника",
"when-a-user-in-your-group-creates-a-new-mealplan": "Када корисник у вашој групи креира нови план оброка", "when-a-user-in-your-group-creates-a-new-mealplan": "Када корисник у вашој групи креира нови јеловник",
"shopping-list-events": "Догађаји списка за куповину", "shopping-list-events": "Догађаји списка за куповину",
"cookbook-events": "Догађаји кувара", "cookbook-events": "Догађаји кувара",
"tag-events": "Догађаји ознаке", "tag-events": "Догађаји ознаке",
@ -146,66 +146,66 @@
"submit": "Пошаљи", "submit": "Пошаљи",
"success-count": "Успешно {count}", "success-count": "Успешно {count}",
"sunday": "недеља", "sunday": "недеља",
"templates": "Templates:", "templates": "Шаблони:",
"test": "Test", "test": "Тест",
"themes": "Теме", "themes": "Теме",
"thursday": "четвртак", "thursday": "четвртак",
"token": "Token", "token": "Токен",
"tuesday": "уторак", "tuesday": "уторак",
"type": "Тип", "type": "Тип",
"update": "Ажурирај", "update": "Ажурирај",
"updated": "Ажурирано", "updated": "Ажурирано",
"upload": "Upload", "upload": "Отпреми",
"url": "URL", "url": "URL",
"view": "View", "view": "Преглед",
"wednesday": "среда", "wednesday": "среда",
"yes": "Да", "yes": "Да",
"foods": "Foods", "foods": "Храна",
"units": "Јединице", "units": "Јединице",
"back": "Back", "back": "Назад",
"next": "Next", "next": "Сљедећи",
"toggle-view": "Toggle View", "toggle-view": "Промени приказ",
"date": "Date", "date": "Датум",
"id": "Id", "id": "Ид",
"owner": "Owner", "owner": "Власник",
"date-added": "Date Added", "date-added": "Датум додавања",
"none": "None", "none": "Ниједно",
"run": "Run", "run": "Покрени",
"menu": "Menu", "menu": "Мени",
"a-name-is-required": "A Name is Required", "a-name-is-required": "Име је неопходно",
"delete-with-name": "Delete {name}", "delete-with-name": "Обриши {name}",
"confirm-delete-generic-with-name": "Are you sure you want to delete this {name}?", "confirm-delete-generic-with-name": "Да ли сте сигурни да желите да обришете {name}?",
"confirm-delete-own-admin-account": "Please note that you are trying to delete your own admin account! This action cannot be undone and will permanently delete your account?", "confirm-delete-own-admin-account": "Обратите пажњу да покушавате избрисати свој администраторски налог! Ова акција не може бити поништена и трајно ће избрисати ваш налог?",
"organizer": "Организатор", "organizer": "Организатор",
"transfer": "Transfer", "transfer": "Пренос",
"copy": "Copy", "copy": "Копирај",
"color": "Color", "color": "Боја",
"timestamp": "Timestamp", "timestamp": "Временска ознака",
"last-made": "Последњи пут прављено", "last-made": "Последњи пут прављено",
"learn-more": "Learn More", "learn-more": "Сазнај више",
"this-feature-is-currently-inactive": "This feature is currently inactive", "this-feature-is-currently-inactive": "Ова функција је тренутно неактивна",
"clipboard-not-supported": "Clipboard not supported", "clipboard-not-supported": "Привремена меморија није подржана",
"copied-to-clipboard": "Copied to clipboard", "copied-to-clipboard": "Копирано у привремену меморију",
"your-browser-does-not-support-clipboard": "Your browser does not support clipboard", "your-browser-does-not-support-clipboard": "Ваш прегледач не подржава привремену меморију",
"copied-items-to-clipboard": "No item copied to clipboard|One item copied to clipboard|Copied {count} items to clipboard", "copied-items-to-clipboard": "Ниједна ставка није копирана на привремену меморију|Једна ставка је копирана на привремену меморију|Копираних {count} ставки на привремену меморију",
"actions": "Actions", "actions": "Радње",
"selected-count": "Selected: {count}", "selected-count": "Изабрано: {count}",
"export-all": "Export All", "export-all": "Извези све",
"refresh": "Refresh", "refresh": "Освежи",
"upload-file": "Upload File", "upload-file": "Учитај датотеку",
"created-on-date": "Created on: {0}" "created-on-date": "Крерирано: {0}"
}, },
"group": { "group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?", "are-you-sure-you-want-to-delete-the-group": "Да ли сте сигурни да желите да обришете <b>{groupName}<b/>?",
"cannot-delete-default-group": "Cannot delete default group", "cannot-delete-default-group": "Није могуће обрисати подразумевану групу",
"cannot-delete-group-with-users": "Cannot delete group with users", "cannot-delete-group-with-users": "Није могуће обрисати групу у којој има корисника",
"confirm-group-deletion": "Confirm Group Deletion", "confirm-group-deletion": "Потврди брисање групе",
"create-group": "Create Group", "create-group": "Направи групу",
"error-updating-group": "Error updating group", "error-updating-group": "Грешка при ажурирању групе",
"group": "Group", "group": "Група",
"group-deleted": "Group deleted", "group-deleted": "Група је обрисана",
"group-deletion-failed": "Group deletion failed", "group-deletion-failed": "Неуспело брисање групе",
"group-id-with-value": "Group ID: {groupID}", "group-id-with-value": "ID групе: {groupID}",
"group-name": "Назив групе", "group-name": "Назив групе",
"group-not-found": "Група није пронађена", "group-not-found": "Група није пронађена",
"group-with-value": "Група: {groupID}", "group-with-value": "Група: {groupID}",
@ -239,49 +239,49 @@
"disable-users-from-commenting-on-recipes": "Онемогући кориснике да коментаришу рецепте", "disable-users-from-commenting-on-recipes": "Онемогући кориснике да коментаришу рецепте",
"disable-users-from-commenting-on-recipes-description": "Сакрива секцију коментара на страници рецепта и онемогућава коментаре", "disable-users-from-commenting-on-recipes-description": "Сакрива секцију коментара на страници рецепта и онемогућава коментаре",
"disable-organizing-recipe-ingredients-by-units-and-food": "Онемогући организацију састојака рецепта по јединицама и намирницама", "disable-organizing-recipe-ingredients-by-units-and-food": "Онемогући организацију састојака рецепта по јединицама и намирницама",
"disable-organizing-recipe-ingredients-by-units-and-food-description": "Hides the Food, Unit, and Amount fields for ingredients and treats ingredients as plain text fields.", "disable-organizing-recipe-ingredients-by-units-and-food-description": "Скрива поља за храну, јединицу мере и количину за намирнице и третира их као обична текстуална поља.",
"general-preferences": "General Preferences", "general-preferences": "Општа подешавања",
"group-recipe-preferences": "Group Recipe Preferences", "group-recipe-preferences": "Подешавања групе рецепта",
"report": "Report", "report": "Извештај",
"group-management": "Group Management", "group-management": "Управљање групом",
"admin-group-management": "Admin Group Management", "admin-group-management": "Управљање администраторском групом",
"admin-group-management-text": "Changes to this group will be reflected immediately.", "admin-group-management-text": "Промене у овој групи биће одмах видљиве.",
"group-id-value": "Group Id: {0}" "group-id-value": "Group Id: {0}"
}, },
"meal-plan": { "meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan", "create-a-new-meal-plan": "Направи нови јеловник",
"dinner-this-week": "Dinner This Week", "dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today", "dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT", "dinner-tonight": "DINNER TONIGHT",
"edit-meal-plan": "Edit Meal Plan", "edit-meal-plan": "Уреди јеловник",
"end-date": "End Date", "end-date": "End Date",
"group": "Group (Beta)", "group": "Group (Beta)",
"main": "Main", "main": "Main",
"meal-planner": "Meal Planner", "meal-planner": "Јеловник",
"meal-plans": "Meal Plans", "meal-plans": "Јеловници",
"mealplan-categories": "КАТЕГОРИЈЕ ЈЕЛОВНИКА", "mealplan-categories": "КАТЕГОРИЈЕ ЈЕЛОВНИКА",
"mealplan-created": "Mealplan created", "mealplan-created": "Јеловник је креиран",
"mealplan-creation-failed": "Mealplan creation failed", "mealplan-creation-failed": "Неуспело креирање јеловника",
"mealplan-deleted": "Mealplan Deleted", "mealplan-deleted": "Јеловник је обрисан",
"mealplan-deletion-failed": "Mealplan deletion failed", "mealplan-deletion-failed": "Неуспешно брисање јеловника",
"mealplan-settings": "Mealplan Settings", "mealplan-settings": "Подешавања јеловника",
"mealplan-update-failed": "Mealplan update failed", "mealplan-update-failed": "Неуспешно ажурирање јеловника",
"mealplan-updated": "Mealplan Updated", "mealplan-updated": "Јеловник је ажуриран",
"no-meal-plan-defined-yet": "No meal plan defined yet", "no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today", "no-meal-planned-for-today": "No meal planned for today",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Само рецепти са овим категоријама ће бити коришћени у јеловницима", "only-recipes-with-these-categories-will-be-used-in-meal-plans": "Само рецепти са овим категоријама ће бити коришћени у јеловницима",
"planner": "Planner", "planner": "Планер",
"quick-week": "Quick Week", "quick-week": "Quick Week",
"side": "Side", "side": "Side",
"sides": "Sides", "sides": "Sides",
"start-date": "Start Date", "start-date": "Датум почетка",
"rule-day": "Rule Day", "rule-day": "Rule Day",
"meal-type": "Meal Type", "meal-type": "Meal Type",
"breakfast": "Breakfast", "breakfast": "Доручак",
"lunch": "Lunch", "lunch": "Ручак",
"dinner": "Dinner", "dinner": "Вечера",
"type-any": "Any", "type-any": "Било који",
"day-any": "Any", "day-any": "Било који",
"editor": "Editor", "editor": "Editor",
"meal-recipe": "Meal Recipe", "meal-recipe": "Meal Recipe",
"meal-title": "Meal Title", "meal-title": "Meal Title",
@ -296,10 +296,10 @@
"for-all-meal-types": "for all meal types", "for-all-meal-types": "for all meal types",
"for-type-meal-types": "for {0} meal types", "for-type-meal-types": "for {0} meal types",
"meal-plan-rules": "Meal Plan Rules", "meal-plan-rules": "Meal Plan Rules",
"new-rule": "New Rule", "new-rule": "Ново правило",
"meal-plan-rules-description": "You can create rules for auto selecting recipes for your meal plans. These rules are used by the server to determine the random pool of recipes to select from when creating meal plans. Note that if rules have the same day/type constraints then the categories of the rules will be merged. In practice, it's unnecessary to create duplicate rules, but it's possible to do so.", "meal-plan-rules-description": "Можете креирати правила за аутоматски избор рецепата за ваше јеловнике. Ова правила користи сервер за одређивање случајног сета рецепата из којег ће бити изабране при креирању јеловника. Обратите пажњу да ако правила имају исто ограничење дана/типа, категорије правила ће бити спојене. У пракси, није потребно креирати дупла правила, али је могуће то учинити.",
"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": "При креирању новог правила за јеловник, можете ограничити примену правила на одређени дан у недељи и/или на одређени тип оброка. Како бисте применили правило на све дане или све типове оброка, можете поставити правило на 'Било који', што ће га применити на све могуће вредности за дан и/или тип оброка.",
"recipe-rules": "Recipe Rules", "recipe-rules": "Правила за рецепт",
"applies-to-all-days": "Applies to all days", "applies-to-all-days": "Applies to all days",
"applies-on-days": "Applies on {0}s", "applies-on-days": "Applies on {0}s",
"meal-plan-settings": "Meal Plan Settings" "meal-plan-settings": "Meal Plan Settings"
@ -360,24 +360,24 @@
"github-issues": "GitHub Issues", "github-issues": "GitHub Issues",
"google-ld-json-info": "Google ld+json Info", "google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Must be a Valid URL", "must-be-a-valid-url": "Must be a Valid URL",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Paste in your recipe data. Each line will be treated as an item in a list", "paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Налепите ваше податке о рецепту. Свака линија ће бити третирана као ставка на списку",
"recipe-markup-specification": "Recipe Markup Specification", "recipe-markup-specification": "Recipe Markup Specification",
"recipe-url": "Recipe URL", "recipe-url": "Recipe URL",
"upload-a-recipe": "Upload a Recipe", "upload-a-recipe": "Upload a Recipe",
"upload-individual-zip-file": "Upload an individual .zip file exported from another Mealie instance.", "upload-individual-zip-file": "Upload an individual .zip file exported from another Mealie instance.",
"url-form-hint": "Copy and paste a link from your favorite recipe website", "url-form-hint": "Копирајте и налепите везу са вашег омиљеног сајта за рецепте",
"view-scraped-data": "View Scraped Data", "view-scraped-data": "View Scraped Data",
"trim-whitespace-description": "Trim leading and trailing whitespace as well as blank lines", "trim-whitespace-description": "Trim leading and trailing whitespace as well as blank lines",
"trim-prefix-description": "Trim first character from each line", "trim-prefix-description": "Trim first character from each line",
"split-by-numbered-line-description": "Attempts to split a paragraph by matching '1)' or '1.' patterns", "split-by-numbered-line-description": "Attempts to split a paragraph by matching '1)' or '1.' patterns",
"import-by-url": "Import a recipe by URL", "import-by-url": "Увези рецепт помоћу URL везе",
"create-manually": "Create a recipe manually", "create-manually": "Направи рецепт ручно",
"make-recipe-image": "Make this the recipe image" "make-recipe-image": "Make this the recipe image"
}, },
"page": { "page": {
"404-page-not-found": "404 Page not found", "404-page-not-found": "404 Page not found",
"all-recipes": "All Recipes", "all-recipes": "All Recipes",
"new-page-created": "New page created", "new-page-created": "Нова страна је креирана",
"page": "Page", "page": "Page",
"page-creation-failed": "Page creation failed", "page-creation-failed": "Page creation failed",
"page-deleted": "Page deleted", "page-deleted": "Page deleted",
@ -391,7 +391,7 @@
}, },
"recipe": { "recipe": {
"add-key": "Add Key", "add-key": "Add Key",
"add-to-favorites": "Add to Favorites", "add-to-favorites": "Додај у омиљене",
"api-extras": "API Extras", "api-extras": "API Extras",
"calories": "Calories", "calories": "Calories",
"calories-suffix": "calories", "calories-suffix": "calories",
@ -430,7 +430,7 @@
"prep-time": "Време припреме", "prep-time": "Време припреме",
"protein-content": "Protein", "protein-content": "Protein",
"public-recipe": "Public Recipe", "public-recipe": "Public Recipe",
"recipe-created": "Recipe created", "recipe-created": "Рецепт је направљен",
"recipe-creation-failed": "Recipe creation failed", "recipe-creation-failed": "Recipe creation failed",
"recipe-deleted": "Recipe deleted", "recipe-deleted": "Recipe deleted",
"recipe-image": "Recipe Image", "recipe-image": "Recipe Image",
@ -439,7 +439,7 @@
"recipe-settings": "Recipe Settings", "recipe-settings": "Recipe Settings",
"recipe-update-failed": "Recipe update failed", "recipe-update-failed": "Recipe update failed",
"recipe-updated": "Recipe updated", "recipe-updated": "Recipe updated",
"remove-from-favorites": "Remove from Favorites", "remove-from-favorites": "Уклони из омиљених",
"remove-section": "Remove Section", "remove-section": "Remove Section",
"save-recipe-before-use": "Save recipe before use", "save-recipe-before-use": "Save recipe before use",
"section-title": "Section Title", "section-title": "Section Title",
@ -455,21 +455,21 @@
"no-recipe": "No Recipe", "no-recipe": "No Recipe",
"locked-by-owner": "Locked by Owner", "locked-by-owner": "Locked by Owner",
"join-the-conversation": "Join the Conversation", "join-the-conversation": "Join the Conversation",
"add-recipe-to-mealplan": "Add Recipe to Mealplan", "add-recipe-to-mealplan": "Додај рецепт у јеловник",
"entry-type": "Entry Type", "entry-type": "Entry Type",
"date-format-hint": "MM/DD/YYYY format", "date-format-hint": "MM/DD/YYYY format",
"date-format-hint-yyyy-mm-dd": "YYYY-MM-DD format", "date-format-hint-yyyy-mm-dd": "YYYY-MM-DD format",
"add-to-list": "Add to List", "add-to-list": "Add to List",
"add-to-plan": "Add to Plan", "add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline", "add-to-timeline": "Додај на временску линију",
"recipe-added-to-list": "Recipe added to list", "recipe-added-to-list": "Recipe added to list",
"recipe-added-to-mealplan": "Recipe added to mealplan", "recipe-added-to-mealplan": "Рецепт је додат у јеловник",
"failed-to-add-recipe-to-mealplan": "Failed to add recipe to mealplan", "failed-to-add-recipe-to-mealplan": "Неуспешно додавање рецепта у јеловник",
"yield": "Yield", "yield": "Yield",
"quantity": "Quantity", "quantity": "Quantity",
"choose-unit": "Choose Unit", "choose-unit": "Choose Unit",
"press-enter-to-create": "Press Enter to Create", "press-enter-to-create": "Притисни Ентер да направиш",
"choose-food": "Choose Food", "choose-food": "Изабери храну",
"notes": "Notes", "notes": "Notes",
"toggle-section": "Toggle Section", "toggle-section": "Toggle Section",
"see-original-text": "See Original Text", "see-original-text": "See Original Text",
@ -492,16 +492,16 @@
"resume-timer": "Resume Timer", "resume-timer": "Resume Timer",
"stop-timer": "Stop Timer" "stop-timer": "Stop Timer"
}, },
"edit-timeline-event": "Edit Timeline Event", "edit-timeline-event": "Уреди догађај на временској линији",
"timeline": "Timeline", "timeline": "Временска линија",
"timeline-is-empty": "Nothing on the timeline yet. Try making this recipe!", "timeline-is-empty": "Још увек нема ништа на временској линији. Покушајте направити овај рецепт!",
"group-global-timeline": "{groupName} Global Timeline", "group-global-timeline": "{groupName} Global Timeline",
"open-timeline": "Open Timeline", "open-timeline": "Отвори временску линију",
"made-this": "I Made This", "made-this": "I Made This",
"how-did-it-turn-out": "How did it turn out?", "how-did-it-turn-out": "How did it turn out?",
"user-made-this": "{user} made this", "user-made-this": "{user} made this",
"last-made-date": "Последњи пут прављено {date}", "last-made-date": "Последњи пут прављено {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 part applications. You can use these keys to contain information to trigger automation or custom messages to relay to your desired device.", "api-extras-description": "Додаци рецепата су кључна карактеристика Mили API-а. Омогућавају вам да креирате прилагођене JSON парове кључ/вредност унутар рецепта за референцу из других апликација. Можете користити ове кључеве за садржај информација за покретање аутоматизације или прилагођених порука које ће бити прослеђене на ваш уређај по жељи.",
"message-key": "Message Key", "message-key": "Message Key",
"parse": "Parse", "parse": "Parse",
"attach-images-hint": "Attach images by dragging & dropping them into the editor", "attach-images-hint": "Attach images by dragging & dropping them into the editor",
@ -510,29 +510,29 @@
"parse-ingredients": "Разложи састојке", "parse-ingredients": "Разложи састојке",
"edit-markdown": "Edit Markdown", "edit-markdown": "Edit Markdown",
"recipe-creation": "Recipe Creation", "recipe-creation": "Recipe Creation",
"select-one-of-the-various-ways-to-create-a-recipe": "Select one of the various ways to create a recipe", "select-one-of-the-various-ways-to-create-a-recipe": "Изаберите један од различитих начина за прављење рецепта",
"looking-for-migrations": "Looking For Migrations?", "looking-for-migrations": "Looking For Migrations?",
"import-with-url": "Import with URL", "import-with-url": "Увези помоћу URL везе",
"create-recipe": "Create Recipe", "create-recipe": "Направи рецепт",
"import-with-zip": "Import with .zip", "import-with-zip": "Увези помоћу .zip архиве",
"create-recipe-from-an-image": "Create recipe from an image", "create-recipe-from-an-image": "Направи рецепт са слике",
"bulk-url-import": "Bulk URL Import", "bulk-url-import": "Масовни увоз помоћу URL",
"debug-scraper": "Debug Scraper", "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.", "create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Направи рецепт додајући име. Сви рецепти морају имати јединствена имена.",
"new-recipe-names-must-be-unique": "New recipe names must be unique", "new-recipe-names-must-be-unique": "New recipe names must be unique",
"scrape-recipe": "Scrape Recipe", "scrape-recipe": "Scrape Recipe",
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.", "scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
"import-original-keywords-as-tags": "Увези оригиналне кључне речи као ознаке", "import-original-keywords-as-tags": "Увези оригиналне кључне речи као ознаке",
"stay-in-edit-mode": "Stay in Edit mode", "stay-in-edit-mode": "Stay in Edit mode",
"import-from-zip": "Import from Zip", "import-from-zip": "Увези из Zip архиве",
"import-from-zip-description": "Import a single recipe that was exported from another Mealie instance.", "import-from-zip-description": "Import a single recipe that was exported from another Mealie instance.",
"zip-files-must-have-been-exported-from-mealie": ".zip files must have been exported from Mealie", "zip-files-must-have-been-exported-from-mealie": ".zip files must have been exported from Mealie",
"create-a-recipe-by-uploading-a-scan": "Create a recipe by uploading a scan.", "create-a-recipe-by-uploading-a-scan": "Направи рецепт учитавањем скениране слике.",
"upload-a-png-image-from-a-recipe-book": "Upload a png image from a recipe book", "upload-a-png-image-from-a-recipe-book": "Upload a png image from a recipe book",
"recipe-bulk-importer": "Recipe Bulk Importer", "recipe-bulk-importer": "Recipe Bulk Importer",
"recipe-bulk-importer-description": "The Bulk recipe importer allows you to import multiple recipes at once by queueing the sites on the backend and running the task in the background. This can be useful when initially migrating to Mealie, or when you want to import a large number of recipes.", "recipe-bulk-importer-description": "The Bulk recipe importer allows you to import multiple recipes at once by queueing the sites on the backend and running the task in the background. This can be useful when initially migrating to Mealie, or when you want to import a large number of recipes.",
"set-categories-and-tags": "Постави категорије и ознаке", "set-categories-and-tags": "Постави категорије и ознаке",
"bulk-imports": "Bulk Imports", "bulk-imports": "Масовни увоз",
"bulk-import-process-has-started": "Bulk Import process has started", "bulk-import-process-has-started": "Bulk Import process has started",
"bulk-import-process-has-failed": "Bulk import process has failed", "bulk-import-process-has-failed": "Bulk import process has failed",
"report-deletion-failed": "Report deletion failed", "report-deletion-failed": "Report deletion failed",
@ -547,28 +547,28 @@
"remove-image": "Remove image" "remove-image": "Remove image"
}, },
"search": { "search": {
"advanced-search": "Advanced Search", "advanced-search": "Напредна претрага",
"and": "and", "and": "и",
"exclude": "Exclude", "exclude": "Искључи",
"include": "Include", "include": "Укључи",
"max-results": "Max Results", "max-results": "Макс. резултата",
"or": "Or", "or": "Или",
"has-any": "Has Any", "has-any": "Садржи било који",
"has-all": "Has All", "has-all": "Садржи све",
"results": "Results", "results": "Резултати",
"search": "Претрага", "search": "Претрага",
"search-mealie": "Претражи Мили (стисни /)", "search-mealie": "Претражи Мили (стисни /)",
"search-placeholder": "Претражи...", "search-placeholder": "Претражи...",
"tag-filter": "Tag Filter", "tag-filter": "Филтер по ознакама",
"search-hint": "Press '/'", "search-hint": "Стисни '/'",
"advanced": "Advanced", "advanced": "Напредна",
"auto-search": "Аутоматско тражење" "auto-search": "Аутоматска претрага"
}, },
"settings": { "settings": {
"add-a-new-theme": "Add a New Theme", "add-a-new-theme": "Add a New Theme",
"admin-settings": "Admin Settings", "admin-settings": "Admin Settings",
"backup": { "backup": {
"backup-created-at-response-export_path": "Backup Created at {path}", "backup-created-at-response-export_path": "Резервна копија је креирана на {path}",
"backup-deleted": "Backup deleted", "backup-deleted": "Backup deleted",
"backup-tag": "Backup Tag", "backup-tag": "Backup Tag",
"create-heading": "Create a Backup", "create-heading": "Create a Backup",
@ -655,7 +655,7 @@
"toolbox": { "toolbox": {
"assign-all": "Assign All", "assign-all": "Assign All",
"bulk-assign": "Bulk Assign", "bulk-assign": "Bulk Assign",
"new-name": "New Name", "new-name": "Нови назив",
"no-unused-items": "No Unused Items", "no-unused-items": "No Unused Items",
"recipes-affected": "No Recipes Affected|One Recipe Affected|{count} Recipes Affected", "recipes-affected": "No Recipes Affected|One Recipe Affected|{count} Recipes Affected",
"remove-unused": "Remove Unused", "remove-unused": "Remove Unused",
@ -690,7 +690,7 @@
"general-about": "General About", "general-about": "General About",
"application-version": "Application Version", "application-version": "Application Version",
"application-version-error-text": "Your current version ({0}) does not match the latest release. Considering updating to the latest version ({1}).", "application-version-error-text": "Your current version ({0}) does not match the latest release. Considering updating to the latest version ({1}).",
"mealie-is-up-to-date": "Mealie is up to date", "mealie-is-up-to-date": "Мили је ажуриран на последњу верзију",
"secure-site": "Secure Site", "secure-site": "Secure Site",
"secure-site-error-text": "Serve via localhost or secure with https. Clipboard and additional browser APIs may not work.", "secure-site-error-text": "Serve via localhost or secure with https. Clipboard and additional browser APIs may not work.",
"secure-site-success-text": "Site is accessed by localhost or https", "secure-site-success-text": "Site is accessed by localhost or https",
@ -704,20 +704,20 @@
"recipe-scraper-version": "Recipe Scraper Version" "recipe-scraper-version": "Recipe Scraper Version"
}, },
"shopping-list": { "shopping-list": {
"all-lists": "All Lists", "all-lists": "Сви спискови",
"create-shopping-list": "Create Shopping List", "create-shopping-list": "Направи списак за куповину",
"from-recipe": "From Recipe", "from-recipe": "From Recipe",
"list-name": "List Name", "list-name": "List Name",
"new-list": "New List", "new-list": "Novi spisak",
"quantity": "Quantity: {0}", "quantity": "Quantity: {0}",
"shopping-list": "Shopping List", "shopping-list": "Shopping List",
"shopping-lists": "Shopping Lists", "shopping-lists": "Списак за куповину",
"food": "Food", "food": "Храна",
"note": "Note", "note": "Note",
"label": "Label", "label": "Natpis",
"linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.", "linked-item-warning": "This item is linked to one or more recipe. Adjusting the units or foods will yield unexpected results when adding or removing the recipe from this list.",
"toggle-food": "Toggle Food", "toggle-food": "Toggle Food",
"manage-labels": "Manage Labels", "manage-labels": "Управљај натписима",
"are-you-sure-you-want-to-delete-this-item": "Are you sure you want to delete this item?", "are-you-sure-you-want-to-delete-this-item": "Are you sure you want to delete this item?",
"copy-as-text": "Copy as Text", "copy-as-text": "Copy as Text",
"copy-as-markdown": "Copy as Markdown", "copy-as-markdown": "Copy as Markdown",
@ -728,7 +728,7 @@
"check-all-items": "Check All Items", "check-all-items": "Check All Items",
"linked-recipes-count": "No Linked Recipes|One Linked Recipe|{count} Linked Recipes", "linked-recipes-count": "No Linked Recipes|One Linked Recipe|{count} Linked Recipes",
"items-checked-count": "No items checked|One item checked|{count} items checked", "items-checked-count": "No items checked|One item checked|{count} items checked",
"no-label": "No Label", "no-label": "Без натписа",
"completed-on": "Completed on {date}" "completed-on": "Completed on {date}"
}, },
"sidebar": { "sidebar": {
@ -741,7 +741,7 @@
"manage-users": "Manage Users", "manage-users": "Manage Users",
"migrations": "Migrations", "migrations": "Migrations",
"profile": "Profile", "profile": "Profile",
"search": "Search", "search": "Претрага",
"site-settings": "Site Settings", "site-settings": "Site Settings",
"tags": "Ознаке", "tags": "Ознаке",
"toolbox": "Toolbox", "toolbox": "Toolbox",
@ -750,8 +750,8 @@
"background-tasks": "Background Tasks", "background-tasks": "Background Tasks",
"parser": "Parser", "parser": "Parser",
"developer": "Developer", "developer": "Developer",
"cookbook": "Cookbook", "cookbook": "Кувар",
"create-cookbook": "Create a new cookbook" "create-cookbook": "Направи нови кувар"
}, },
"signup": { "signup": {
"error-signing-up": "Error Signing Up", "error-signing-up": "Error Signing Up",
@ -764,7 +764,7 @@
"welcome-to-mealie": "Welcome to Mealie! To become a user of this instance you are required to have a valid invitation link. If you haven't recieved an invitation you are unable to sign-up. To recieve a link, contact the sites administrator." "welcome-to-mealie": "Welcome to Mealie! To become a user of this instance you are required to have a valid invitation link. If you haven't recieved an invitation you are unable to sign-up. To recieve a link, contact the sites administrator."
}, },
"tag": { "tag": {
"tag-created": "Tag created", "tag-created": "Ознака је креирана",
"tag-creation-failed": "Tag creation failed", "tag-creation-failed": "Tag creation failed",
"tag-deleted": "Tag deleted", "tag-deleted": "Tag deleted",
"tag-deletion-failed": "Tag deletion failed", "tag-deletion-failed": "Tag deletion failed",
@ -776,13 +776,13 @@
"tag-name": "Tag Name" "tag-name": "Tag Name"
}, },
"tool": { "tool": {
"tools": "Tools", "tools": "Прибор",
"on-hand": "On Hand", "on-hand": "On Hand",
"create-a-tool": "Create a Tool", "create-a-tool": "Create a Tool",
"tool-name": "Tool Name", "tool-name": "Назив прибора",
"create-new-tool": "Create New Tool", "create-new-tool": "Create New Tool",
"on-hand-checkbox-label": "Show as On Hand (Checked)", "on-hand-checkbox-label": "Show as On Hand (Checked)",
"required-tools": "Required Tools" "required-tools": "Потребан прибор"
}, },
"user": { "user": {
"admin": "Admin", "admin": "Admin",
@ -807,7 +807,7 @@
"link-id": "Link ID", "link-id": "Link ID",
"link-name": "Link Name", "link-name": "Link Name",
"login": "Login", "login": "Login",
"logout": "Logout", "logout": "Одјава",
"manage-users": "Manage Users", "manage-users": "Manage Users",
"new-password": "New Password", "new-password": "New Password",
"new-user": "New User", "new-user": "New User",
@ -820,11 +820,11 @@
"register": "Register", "register": "Register",
"reset-password": "Reset Password", "reset-password": "Reset Password",
"sign-in": "Sign in", "sign-in": "Sign in",
"total-mealplans": "Total MealPlans", "total-mealplans": "Укупно рецепата",
"total-users": "Total Users", "total-users": "Total Users",
"upload-photo": "Upload Photo", "upload-photo": "Upload Photo",
"use-8-characters-or-more-for-your-password": "Use 8 characters or more for your password", "use-8-characters-or-more-for-your-password": "Use 8 characters or more for your password",
"user-created": "User created", "user-created": "Корисник је креиран",
"user-creation-failed": "User creation failed", "user-creation-failed": "User creation failed",
"user-deleted": "User deleted", "user-deleted": "User deleted",
"user-id-with-value": "User ID: {id}", "user-id-with-value": "User ID: {id}",
@ -842,27 +842,27 @@
"you-are-not-allowed-to-create-a-user": "You are not allowed to create a user", "you-are-not-allowed-to-create-a-user": "You are not allowed to create a user",
"you-are-not-allowed-to-delete-this-user": "You are not allowed to delete this user", "you-are-not-allowed-to-delete-this-user": "You are not allowed to delete this user",
"enable-advanced-content": "Enable Advanced Content", "enable-advanced-content": "Enable Advanced Content",
"enable-advanced-content-description": "Enables advanced features like Recipe Scaling, API keys, Webhooks, and Data Management. Don't worry, you can always change this later", "enable-advanced-content-description": "Омогућава напредне функције као што су промена рецепта, API кључеви, Webhooks и управљање подацима. Немојте се бринути, увек можете касније променити ово",
"favorite-recipes": "Favorite Recipes", "favorite-recipes": "Омиљени рецепти",
"email-or-username": "Email or Username", "email-or-username": "Email or Username",
"remember-me": "Remember Me", "remember-me": "Remember Me",
"please-enter-your-email-and-password": "Please enter your email and password", "please-enter-your-email-and-password": "Please enter your email and password",
"invalid-credentials": "Invalid Credentials", "invalid-credentials": "Invalid Credentials",
"account-locked-please-try-again-later": "Account Locked. Please try again later", "account-locked-please-try-again-later": "Account Locked. Please try again later",
"user-favorites": "User Favorites", "user-favorites": "Корисникови омиљени рецепти",
"password-strength-values": { "password-strength-values": {
"weak": "Weak", "weak": "Weak",
"good": "Good", "good": "Good",
"strong": "Strong", "strong": "Strong",
"very-strong": "Very Strong" "very-strong": "Very Strong"
}, },
"user-management": "User Management", "user-management": "Управљање корисницима",
"reset-locked-users": "Reset Locked Users", "reset-locked-users": "Reset Locked Users",
"admin-user-creation": "Admin User Creation", "admin-user-creation": "Admin User Creation",
"user-details": "User Details", "user-details": "User Details",
"user-name": "User Name", "user-name": "User Name",
"authentication-method": "Authentication Method", "authentication-method": "Authentication Method",
"authentication-method-hint": "This specifies how a user will authenticate with Mealie. If you're not sure, choose 'Mealie", "authentication-method-hint": "Ово одређује како ће се корисник аутентификовати са Mили. Ако нисте сигурни, изаберите 'Mealie'",
"permissions": "Permissions", "permissions": "Permissions",
"administrator": "Administrator", "administrator": "Administrator",
"user-can-invite-other-to-group": "User can invite other to group", "user-can-invite-other-to-group": "User can invite other to group",
@ -921,7 +921,7 @@
"seed-dialog-text": "Seed the database with common labels based on your local language.", "seed-dialog-text": "Seed the database with common labels based on your local language.",
"edit-label": "Edit Label", "edit-label": "Edit Label",
"new-label": "New Label", "new-label": "New Label",
"labels": "Labels" "labels": "Натписи"
}, },
"recipes": { "recipes": {
"purge-exports": "Purge Exports", "purge-exports": "Purge Exports",
@ -948,12 +948,27 @@
"manage-aliases": "Manage Aliases", "manage-aliases": "Manage Aliases",
"seed-data": "Seed Data", "seed-data": "Seed Data",
"seed": "Seed", "seed": "Seed",
"data-management": "Data Management", "data-management": "Управљање подацима",
"data-management-description": "Select which data set you want to make changes to.", "data-management-description": "Изаберите који скуп података желите изменити.",
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",
@ -961,7 +976,7 @@
"create-a-new-group": "Create a New Group", "create-a-new-group": "Create a New Group",
"provide-registration-token-description": "Please provide the registration token associated with the group that you'd like to join. You'll need to obtain this from an existing group member.", "provide-registration-token-description": "Please provide the registration token associated with the group that you'd like to join. You'll need to obtain this from an existing group member.",
"group-details": "Group Details", "group-details": "Group Details",
"group-details-description": "Before you create an account you'll need to create a group. Your group will only contain you, but you'll be able to invite others later. Members in your group can share meal plans, shopping lists, recipes, and more!", "group-details-description": "Пре него што креирате налог, морате креирати групу. Ваша група ће садржавати само вас, али касније ћете моћи позвати друге. Чланови ваше групе могу делити јеловнике, спискове за куповину, рецепте и још много тога!",
"use-seed-data": "Use Seed Data", "use-seed-data": "Use Seed Data",
"use-seed-data-description": "Mealie ships with a collection of Foods, Units, and Labels that can be used to populate your group with helpful data for organizing your recipes.", "use-seed-data-description": "Mealie ships with a collection of Foods, Units, and Labels that can be used to populate your group with helpful data for organizing your recipes.",
"account-details": "Account Details" "account-details": "Account Details"
@ -991,7 +1006,7 @@
"issue-link-text": "Track our progress here" "issue-link-text": "Track our progress here"
}, },
"form": { "form": {
"quantity-label-abbreviated": "Qty" "quantity-label-abbreviated": "Кол."
}, },
"markdown-editor": { "markdown-editor": {
"preview-markdown-button-label": "Preview Markdown" "preview-markdown-button-label": "Preview Markdown"
@ -1036,7 +1051,7 @@
"page-title": "Site Maintenance", "page-title": "Site Maintenance",
"summary-title": "Summary", "summary-title": "Summary",
"button-label-get-summary": "Get Summary", "button-label-get-summary": "Get Summary",
"button-label-open-details": "Details", "button-label-open-details": "Детаљи",
"info-description-data-dir-size": "Data Directory Size", "info-description-data-dir-size": "Data Directory Size",
"info-description-log-file-size": "Log File Size", "info-description-log-file-size": "Log File Size",
"info-description-cleanable-directories": "Cleanable Directories", "info-description-cleanable-directories": "Cleanable Directories",
@ -1099,7 +1114,7 @@
"api-tokens-description": "Manage your API Tokens for access from external applications", "api-tokens-description": "Manage your API Tokens for access from external applications",
"group-description": "These items are shared within your group. Editing one of them will change it for the whole group!", "group-description": "These items are shared within your group. Editing one of them will change it for the whole group!",
"group-settings": "Group Settings", "group-settings": "Group Settings",
"group-settings-description": "Manage your common group settings like mealplan and privacy settings.", "group-settings-description": "Управљајте општим подешавањима групе као што су подешавања јеловника и приватности.",
"cookbooks-description": "Manage a collection of recipe categories and generate pages for them.", "cookbooks-description": "Manage a collection of recipe categories and generate pages for them.",
"members": "Members", "members": "Members",
"members-description": "See who's in your group and manage their permissions.", "members-description": "See who's in your group and manage their permissions.",
@ -1114,7 +1129,7 @@
"error-sending-email": "Error Sending Email", "error-sending-email": "Error Sending Email",
"personal-information": "Personal Information", "personal-information": "Personal Information",
"preferences": "Preferences", "preferences": "Preferences",
"show-advanced-description": "Show advanced features (API Keys, Webhooks, and Data Management)", "show-advanced-description": "Прикажи напредне функције (API кључеви, Webhooks и управљање подацима)",
"back-to-profile": "Back to Profile", "back-to-profile": "Back to Profile",
"looking-for-privacy-settings": "Looking for Privacy Settings?", "looking-for-privacy-settings": "Looking for Privacy Settings?",
"manage-your-api-tokens": "Manage Your API Tokens", "manage-your-api-tokens": "Manage Your API Tokens",
@ -1128,14 +1143,14 @@
"cookbook": { "cookbook": {
"cookbooks": "Кувари", "cookbooks": "Кувари",
"description": "Кувари су још један начин за организовање рецепата креирањем пресека рецепата и ознака. Креирање кувара додаће ставку на бочну траку и све рецепте са изабраним ознакама и категоријама биће приказане у кувару.", "description": "Кувари су још један начин за организовање рецепата креирањем пресека рецепата и ознака. Креирање кувара додаће ставку на бочну траку и све рецепте са изабраним ознакама и категоријама биће приказане у кувару.",
"public-cookbook": "Public Cookbook", "public-cookbook": "Јавни кувар",
"public-cookbook-description": "Public Cookbooks can be shared with non-mealie users and will be displayed on your groups page.", "public-cookbook-description": "Public Cookbooks can be shared with non-mealie users and will be displayed on your groups page.",
"filter-options": "Filter Options", "filter-options": "Опције филтера",
"filter-options-description": "When require all is selected the cookbook will only include recipes that have all of the items selected. This applies to each subset of selectors and not a cross section of the selected items.", "filter-options-description": "When require all is selected the cookbook will only include recipes that have all of the items selected. This applies to each subset of selectors and not a cross section of the selected items.",
"require-all-categories": "Захтевај све категорије", "require-all-categories": "Захтевај све категорије",
"require-all-tags": "Захтевај све ознаке", "require-all-tags": "Захтевај све ознаке",
"require-all-tools": "Require All Tools", "require-all-tools": "Захтева сав прибор",
"cookbook-name": "Cookbook Name", "cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}" "cookbook-with-name": "Кувар {0}"
} }
} }

View File

@ -953,7 +953,22 @@
"select-data": "Välj data", "select-data": "Välj data",
"select-language": "Välj språk", "select-language": "Välj språk",
"columns": "Kolumner", "columns": "Kolumner",
"combine": "Kombinera" "combine": "Kombinera",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Användarregistrering", "user-registration": "Användarregistrering",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Birleştir" "combine": "Birleştir",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",

View File

@ -953,7 +953,22 @@
"select-data": "Вибір даних", "select-data": "Вибір даних",
"select-language": "Вибір мови", "select-language": "Вибір мови",
"columns": "Стовпці", "columns": "Стовпці",
"combine": "Об'єднати" "combine": "Об'єднати",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "Реєстрація користувачів", "user-registration": "Реєстрація користувачів",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",

View File

@ -953,7 +953,22 @@
"select-data": "Select Data", "select-data": "Select Data",
"select-language": "Select Language", "select-language": "Select Language",
"columns": "Columns", "columns": "Columns",
"combine": "Combine" "combine": "Combine",
"categories": {
"edit-category": "Edit Category",
"new-category": "New Category",
"category-data": "Category Data"
},
"tags": {
"new-tag": "New Tag",
"edit-tag": "Edit Tag",
"tag-data": "Tag Data"
},
"tools": {
"new-tool": "New Tool",
"edit-tool": "Edit Tool",
"tool-data": "Tool Data"
}
}, },
"user-registration": { "user-registration": {
"user-registration": "User Registration", "user-registration": "User Registration",

View File

@ -1,51 +1,65 @@
<template> <template>
<v-row> <v-container class="mx-0 my-3 pa">
<v-col <v-row>
v-for="(day, index) in plan" <v-col
:key="index" v-for="(day, index) in plan"
cols="12" :key="index"
sm="12" cols="12"
md="4" sm="12"
lg="4" md="4"
xl="2" lg="4"
class="col-borders my-1 d-flex flex-column" xl="2"
> class="col-borders my-1 d-flex flex-column"
<v-card class="mb-2 border-left-primary rounded-sm pa-2"> >
<p class="pl-2 mb-1"> <v-card class="mb-2 border-left-primary rounded-sm px-2">
{{ $d(day.date, "short") }} <v-container class="px-0">
</p> <v-row no-gutters style="width: 100%;">
</v-card> <v-col cols="10">
<div v-for="section in day.sections" :key="section.title"> <p class="pl-2 my-1">
<div class="py-2 d-flex flex-column"> {{ $d(day.date, "short") }}
<div class="primary" style="width: 50px; height: 2.5px"></div> </p>
<p class="text-overline my-0"> </v-col>
{{ section.title }} <v-col class="d-flex justify-top" cols="2">
</p> <GroupMealPlanDayContextMenu v-if="day.recipes.length" :recipes="day.recipes" />
</div> </v-col>
</v-row>
</v-container>
</v-card>
<div v-for="section in day.sections" :key="section.title">
<div class="py-2 d-flex flex-column">
<div class="primary" style="width: 50px; height: 2.5px"></div>
<p class="text-overline my-0">
{{ section.title }}
</p>
</div>
<RecipeCardMobile <RecipeCardMobile
v-for="mealplan in section.meals" v-for="mealplan in section.meals"
:key="mealplan.id" :key="mealplan.id"
:recipe-id="mealplan.recipe ? mealplan.recipe.id : ''" :recipe-id="mealplan.recipe ? mealplan.recipe.id : ''"
class="mb-2" class="mb-2"
:route="mealplan.recipe ? true : false" :route="mealplan.recipe ? true : false"
:slug="mealplan.recipe ? mealplan.recipe.slug : mealplan.title" :slug="mealplan.recipe ? mealplan.recipe.slug : mealplan.title"
:description="mealplan.recipe ? mealplan.recipe.description : mealplan.text" :description="mealplan.recipe ? mealplan.recipe.description : mealplan.text"
:name="mealplan.recipe ? mealplan.recipe.name : mealplan.title" :name="mealplan.recipe ? mealplan.recipe.name : mealplan.title"
/> />
</div> </div>
</v-col> </v-col>
</v-row> </v-row>
</v-container>
</template> </template>
<script lang="ts"> <script lang="ts">
import { computed, defineComponent, useContext } from "@nuxtjs/composition-api"; import { computed, defineComponent, useContext } from "@nuxtjs/composition-api";
import { MealsByDate } from "./types"; import { MealsByDate } from "./types";
import { ReadPlanEntry } from "~/lib/api/types/meal-plan"; import { ReadPlanEntry } from "~/lib/api/types/meal-plan";
import GroupMealPlanDayContextMenu from "~/components/Domain/Group/GroupMealPlanDayContextMenu.vue";
import RecipeCardMobile from "~/components/Domain/Recipe/RecipeCardMobile.vue"; import RecipeCardMobile from "~/components/Domain/Recipe/RecipeCardMobile.vue";
import { RecipeSummary } from "~/lib/api/types/recipe";
export default defineComponent({ export default defineComponent({
components: { components: {
GroupMealPlanDayContextMenu,
RecipeCardMobile, RecipeCardMobile,
}, },
props: { props: {
@ -63,6 +77,7 @@ export default defineComponent({
type Days = { type Days = {
date: Date; date: Date;
sections: DaySection[]; sections: DaySection[];
recipes: RecipeSummary[];
}; };
const { i18n } = useContext(); const { i18n } = useContext();
@ -77,6 +92,7 @@ export default defineComponent({
{ title: i18n.tc("meal-plan.dinner"), meals: [] }, { title: i18n.tc("meal-plan.dinner"), meals: [] },
{ title: i18n.tc("meal-plan.side"), meals: [] }, { title: i18n.tc("meal-plan.side"), meals: [] },
], ],
recipes: [],
}; };
for (const meal of day.meals) { for (const meal of day.meals) {
@ -89,6 +105,10 @@ export default defineComponent({
} else if (meal.entryType === "side") { } else if (meal.entryType === "side") {
out.sections[3].meals.push(meal); out.sections[3].meals.push(meal);
} }
if (meal.recipe) {
out.recipes.push(meal.recipe);
}
} }
// Drop empty sections // Drop empty sections

View File

@ -1,35 +1,35 @@
{ {
"generic": { "generic": {
"server-error": "An unexpected error occurred" "server-error": "Догодила се неочекивана грешка"
}, },
"recipe": { "recipe": {
"unique-name-error": "Recipe names must be unique" "unique-name-error": "Назив рецепта мора бити јединствен"
}, },
"mealplan": { "mealplan": {
"no-recipes-match-your-rules": "No recipes match your rules" "no-recipes-match-your-rules": "Нема рецепата који одговарају вашим правилима"
}, },
"user": { "user": {
"user-updated": "User updated", "user-updated": "Корисник је ажуриран",
"password-updated": "Password updated", "password-updated": "Лозинка је ажурирана",
"invalid-current-password": "Invalid current password", "invalid-current-password": "Тренутна лозинка је неисправна",
"ldap-update-password-unavailable": "Unable to update password, user is controlled by LDAP" "ldap-update-password-unavailable": "Лозинку није могуће ажурирати, корисник је контролисан од стране LDAP-а"
}, },
"group": { "group": {
"report-deleted": "Report deleted." "report-deleted": "Рецепт је избрисан."
}, },
"exceptions": { "exceptions": {
"permission_denied": "You do not have permission to perform this action", "permission_denied": "Немате дозволу за извршење ове радње",
"no-entry-found": "The requested resource was not found", "no-entry-found": "Захтевани ресурс није пронађен",
"integrity-error": "Database integrity error", "integrity-error": "Грешка у интегритету базе података",
"username-conflict-error": "This username is already taken", "username-conflict-error": "Корисничко име је већ заузето",
"email-conflict-error": "This email is already in use" "email-conflict-error": "Овај е-мејл је већ у употреби"
}, },
"notifications": { "notifications": {
"generic-created": "{name} was created", "generic-created": "{name} је крериран",
"generic-updated": "{name} was updated", "generic-updated": "{name} је ажуриран",
"generic-created-with-url": "{name} has been created, {url}", "generic-created-with-url": "{name} је направљено, {url}",
"generic-updated-with-url": "{name} has been updated, {url}", "generic-updated-with-url": "{name} је ажурирано, {url}",
"generic-duplicated": "{name} has been duplicated", "generic-duplicated": "{name} је дуплиран",
"generic-deleted": "{name} has been deleted" "generic-deleted": "{name} је обрисан"
} }
} }

View File

@ -1,65 +1,65 @@
[ [
{ {
"name": "Produce" "name": "Домаћи производи"
}, },
{ {
"name": "Grains" "name": "Житарице"
}, },
{ {
"name": "Fruits" "name": "Воће"
}, },
{ {
"name": "Vegetables" "name": "Поврће"
}, },
{ {
"name": "Meat" "name": "Месо"
}, },
{ {
"name": "Seafood" "name": "Морски плодови"
}, },
{ {
"name": "Beverages" "name": "Пића"
}, },
{ {
"name": "Baked Goods" "name": "Пецива"
}, },
{ {
"name": "Canned Goods" "name": "Конзервирана храна"
}, },
{ {
"name": "Condiments" "name": "Зачини"
}, },
{ {
"name": "Confectionary" "name": "Кондиторски производи"
}, },
{ {
"name": "Dairy Products" "name": "Млечни производи"
}, },
{ {
"name": "Frozen Foods" "name": "Смрзнута храна"
}, },
{ {
"name": "Health Foods" "name": "Здрава храна"
}, },
{ {
"name": "Household" "name": "Домаћинство"
}, },
{ {
"name": "Meat Products" "name": "Месни производи"
}, },
{ {
"name": "Snacks" "name": "Грицкалице"
}, },
{ {
"name": "Spices" "name": "Зачини"
}, },
{ {
"name": "Sweets" "name": "Слаткиши"
}, },
{ {
"name": "Alcohol" "name": "Алкохол"
}, },
{ {
"name": "Other" "name": "Остало"
} }
] ]

View File

@ -1,86 +1,86 @@
{ {
"teaspoon": { "teaspoon": {
"name": "teaspoon", "name": "кашичица",
"description": "", "description": "",
"abbreviation": "tsp" "abbreviation": "кашичица"
}, },
"tablespoon": { "tablespoon": {
"name": "tablespoon", "name": "кашика",
"description": "", "description": "",
"abbreviation": "tbsp" "abbreviation": "кашика"
}, },
"cup": { "cup": {
"name": "cup", "name": "шоља",
"description": "", "description": "",
"abbreviation": "cup" "abbreviation": "шоља"
}, },
"fluid-ounce": { "fluid-ounce": {
"name": "fluid ounce", "name": "течна унца",
"description": "", "description": "",
"abbreviation": "fl oz" "abbreviation": "течна унца"
}, },
"pint": { "pint": {
"name": "pint", "name": "пинта",
"description": "", "description": "",
"abbreviation": "pt" "abbreviation": "pt"
}, },
"quart": { "quart": {
"name": "quart", "name": "четврт галона",
"description": "", "description": "",
"abbreviation": "qt" "abbreviation": "qt"
}, },
"gallon": { "gallon": {
"name": "gallon", "name": "галон",
"description": "", "description": "",
"abbreviation": "gal" "abbreviation": "гал"
}, },
"milliliter": { "milliliter": {
"name": "milliliter", "name": "милиметар",
"description": "", "description": "",
"abbreviation": "ml" "abbreviation": "мл"
}, },
"liter": { "liter": {
"name": "liter", "name": "литар",
"description": "", "description": "",
"abbreviation": "l" "abbreviation": "л"
}, },
"pound": { "pound": {
"name": "pound", "name": "фунта",
"description": "", "description": "",
"abbreviation": "lb" "abbreviation": "lb"
}, },
"ounce": { "ounce": {
"name": "ounce", "name": "унца",
"description": "", "description": "",
"abbreviation": "oz" "abbreviation": "унца (oz)"
}, },
"gram": { "gram": {
"name": "gram", "name": "грам",
"description": "", "description": "",
"abbreviation": "g" "abbreviation": "г"
}, },
"kilogram": { "kilogram": {
"name": "kilogram", "name": "килограм",
"description": "", "description": "",
"abbreviation": "kg" "abbreviation": "кг"
}, },
"milligram": { "milligram": {
"name": "milligram", "name": "милиграм",
"description": "", "description": "",
"abbreviation": "mg" "abbreviation": "мг"
}, },
"splash": { "splash": {
"name": "splash", "name": "мала количина (splash)",
"description": "", "description": "",
"abbreviation": "" "abbreviation": ""
}, },
"dash": { "dash": {
"name": "dash", "name": "осмина кашичице",
"description": "", "description": "",
"abbreviation": "" "abbreviation": ""
}, },
"serving": { "serving": {
"name": "serving", "name": "порција",
"description": "", "description": "",
"abbreviation": "" "abbreviation": ""
}, },
@ -90,12 +90,12 @@
"abbreviation": "" "abbreviation": ""
}, },
"clove": { "clove": {
"name": "clove", "name": "клинчић",
"description": "", "description": "",
"abbreviation": "" "abbreviation": ""
}, },
"can": { "can": {
"name": "can", "name": "конзерва",
"description": "", "description": "",
"abbreviation": "" "abbreviation": ""
} }