Merge branch 'mealie-next' into mealie-next

This commit is contained in:
Jack Bailey 2023-11-23 10:47:25 +00:00 committed by GitHub
commit 8a2d640922
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
87 changed files with 3072 additions and 930 deletions

View File

@ -12,7 +12,7 @@ body:
Please confirm and check all the following prior to submission. If you do not do this, your
issue may be closed.
options:
- label: This is not a feature request
- label: This is not a feature request.
required: true
- label: I added a very descriptive title to this issue.
required: true
@ -22,7 +22,7 @@ body:
required: true
- label: I already read the docs and didn't find an answer.
required: true
- label: This issue can be replicated on the demo site (https://demo.mealie.io/)
- label: This issue can be replicated on the demo site (https://demo.mealie.io/).
required: false
- type: textarea
id: description
@ -41,13 +41,15 @@ body:
- type: textarea
id: logs
attributes:
label: Please provide relevent logs
label: Please provide relevant logs
placeholder: For example from `docker-compose logs` or other system logs.
validations:
required: true
- type: textarea
id: version
attributes:
label: Mealie Version
placeholder: Docker image, as well as 'Build' tag from https://yourmealieurl/admin/site-settings, if UI is working
- type: dropdown
id: os
attributes:

View File

@ -1,4 +1,4 @@
contact_links:
- name: Feature Requests
url: https://github.com/hay-kot/mealie/discussions/new?category=feature-request
about: Please add any Feature Requests as a Github Discussion using the for in this issue.
url: https://github.com/mealie-recipes/mealie/discussions/new?category=feature-request
about: Please add any Feature Requests as a Github Discussion using the form in this issue.

View File

@ -46,3 +46,6 @@ jobs:
tags: ghcr.io/${{ github.repository }}:${{ inputs.tag }}
build-args: |
COMMIT=${{ github.sha }}
# https://docs.docker.com/build/ci/github-actions/cache/#github-cache
cache-from: type=gha
cache-to: type=gha,mode=max

View File

@ -1,3 +1,3 @@
# Maintainers Guide
See -> ./docs/docs/contributors/developers-guide/maintainers.md
See -> [/docs/docs/contributors/developers-guide/maintainers.md](/docs/docs/contributors/developers-guide/maintainers.md)

View File

@ -23,9 +23,9 @@ First, click the [link](https://www.icloud.com/shortcuts/cc568d1615bc4f998789f85
![screenshot](../../assets/img/sc1half.png)
Next, you need to replace `url` and `port` with the information for your mealie instance.
Next, you need to replace `url` and `port` with the information for your Mealie instance.
If you have a TLD that you use, put that here with no port. If you just run local, Then, you need to put in your mealie instance IP and the port of `9926`.
If you have a domain that you use (e.g. `https://mealie.example.com`), put that here. If you just run local, then you need to put in your Mealie instance IP and the port you use (e.g. the default is `9925`).
![screenshot](../../assets/img/sc2half.png)
@ -36,4 +36,4 @@ Finally, you need to replace the word `keyhere` with your API token. Keep the wo
![screenshot](../../assets/img/sc3half.png)
You should now be able to share a website to the shortcut and have mealie grab all the necessary information!
You should now be able to share a website to the shortcut and have Mealie grab all the necessary information!

View File

@ -4,19 +4,17 @@
### General
| Variables | Default | Description |
| ---------------- | :-------------------: | ----------------------------------------------------------------------------------- |
| PUID | 911 | UserID permissions between host OS and container |
| PGID | 911 | GroupID permissions between host OS and container |
| DEFAULT_GROUP | Home | The default group for users |
| DEFAULT_EMAIL | changeme@example.com | The default username for the superuser |
| DEFAULT_PASSWORD | MyPassword | The default password for the superuser |
| BASE_URL | http://localhost:8080 | Used for Notifications |
| TOKEN_TIME | 48 | The time in hours that a login/auth token is valid |
| API_PORT | 9000 | The port exposed by backend API. **Do not change this if you're running in Docker** |
| API_DOCS | True | Turns on/off access to the API documentation locally. |
| TZ | UTC | Must be set to get correct date/time on the server |
| ALLOW_SIGNUP | true | Allow user sign-up without token |
| Variables | Default | Description |
| ------------- | :-------------------: | ----------------------------------------------------------------------------------- |
| PUID | 911 | UserID permissions between host OS and container |
| PGID | 911 | GroupID permissions between host OS and container |
| DEFAULT_GROUP | Home | The default group for users |
| BASE_URL | http://localhost:8080 | Used for Notifications |
| TOKEN_TIME | 48 | The time in hours that a login/auth token is valid |
| API_PORT | 9000 | The port exposed by backend API. **Do not change this if you're running in Docker** |
| API_DOCS | True | Turns on/off access to the API documentation locally. |
| TZ | UTC | Must be set to get correct date/time on the server |
| ALLOW_SIGNUP | true | Allow user sign-up without token |
### Security

View File

@ -1,7 +1,7 @@
# Development Road Map
## Feature Requests
[Please request new features on Github](https://github.com/hay-kot/mealie/issues/317)
[Please request new features on Github](https://github.com/mealie-recipes/mealie/discussions/new?category=feature-request)
## Progress
See the [Github Projects page](https://github.com/users/hay-kot/projects/2) to see what is currently being worked on

View File

@ -2,6 +2,7 @@
.layout-leave-active {
transition: opacity 0.2s;
}
.layout-enter,
.layout-leave-active {
opacity: 0;
@ -16,15 +17,15 @@
}
.theme--dark.v-application {
background-color: var(--v-background-base, #121212) !important;
background-color: var(--v-background-base, #1e1e1e) !important;
}
.theme--dark.v-navigation-drawer {
background-color: var(--v-background-base, #121212) !important;
background-color: var(--v-background-base, #1e1e1e) !important;
}
.theme--dark.v-card {
background-color: #2b2b2b !important;
background-color: #1e1e1e !important;
}
.left-border {

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-card-text>
</BaseDialog>
<BaseDialog v-model="shoppingListDialog" :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-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>
<RecipeDialogAddToShoppingList
v-if="shoppingLists && recipeRefWithScale"
v-model="shoppingListDialog"
:recipes="[recipeRefWithScale]"
:shopping-lists="shoppingLists"
/>
<v-menu
offset-y
left
@ -171,14 +106,14 @@
<script lang="ts">
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 RecipeDialogShare from "./RecipeDialogShare.vue";
import { useLoggedInState } from "~/composables/use-logged-in-state";
import { useUserApi } from "~/composables/api";
import { alert } from "~/composables/use-toast";
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 { PlanEntryType } from "~/lib/api/types/meal-plan";
import { useAxiosDownloader } from "~/composables/api/use-axios-download";
@ -204,9 +139,9 @@ export interface ContextMenuItem {
export default defineComponent({
components: {
RecipeDialogAddToShoppingList,
RecipeDialogPrintPreferences,
RecipeDialogShare,
RecipeIngredientListItem
},
props: {
useItems: {
@ -279,7 +214,6 @@ export default defineComponent({
recipeDeleteDialog: false,
mealplannerDialog: false,
shoppingListDialog: false,
shoppingListIngredientDialog: false,
recipeDuplicateDialog: false,
recipeName: props.name,
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];
const icon = props.menuIcon || $globals.icons.dotsVertical;
@ -383,9 +317,8 @@ export default defineComponent({
// Context Menu Event Handler
const shoppingLists = ref<ShoppingListSummary[]>();
const selectedShoppingList = ref<ShoppingListSummary>();
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() {
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();
async function deleteRecipe() {
@ -516,10 +394,12 @@ export default defineComponent({
state.printPreferencesDialog = true;
},
shoppingList: () => {
getShoppingLists();
const promises: Promise<void>[] = [getShoppingLists()];
if (!recipeRef.value) {
promises.push(refreshRecipe());
}
state.shoppingListDialog = true;
state.shoppingListIngredientDialog = false;
Promise.allSettled(promises).then(() => { state.shoppingListDialog = true });
},
share: () => {
state.shareDialog = true;
@ -544,28 +424,15 @@ export default defineComponent({
return {
...toRefs(state),
recipeRef,
recipeRefWithScale,
shoppingLists,
selectedShoppingList,
openShoppingListIngredientDialog,
addRecipeToList,
bulkCheckIngredients,
duplicateRecipe,
contextMenuEventHandler,
deleteRecipe,
addRecipeToPlan,
icon,
planTypeOptions,
recipeIngredients,
};
},
});
</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

@ -7,7 +7,7 @@
:class="attrs.class.sheet"
:style="tile ? 'max-width: 100%; width: fit-content;' : 'width: 100%;'"
>
<v-list-item :to="'/' + groupSlug + '/r/' + recipe.slug" :class="attrs.class.listItem">
<v-list-item :to="'/g/' + groupSlug + '/r/' + recipe.slug" :class="attrs.class.listItem">
<v-list-item-avatar :class="attrs.class.avatar">
<v-icon :class="attrs.class.icon" dark :small="small"> {{ $globals.icons.primary }} </v-icon>
</v-list-item-avatar>

View File

@ -131,8 +131,8 @@ export default defineComponent({
async function select() {
if (store) {
// @ts-ignore - only property really required is the name
await store.actions.createOne({ name: state.name });
// @ts-expect-error the same state is used for different organizer types, which have different requirements
await store.actions.createOne({ ...state });
}
const newItem = store.items.value.find((item) => item.name === state.name);

View File

@ -16,6 +16,7 @@
<BaseDialog v-if="updateTarget" v-model="dialogs.update" :title="$t('general.update')" @confirm="updateOne()">
<v-card-text>
<v-text-field v-model="updateTarget.name" label="Name"> </v-text-field>
<v-checkbox v-if="itemType === Organizer.Tool" v-model="updateTarget.onHand" :label="$t('tool.on-hand')"></v-checkbox>
</v-card-text>
</BaseDialog>
@ -75,7 +76,7 @@ import Fuse from "fuse.js";
import { defineComponent, computed, ref, reactive, useContext, useRoute } from "@nuxtjs/composition-api";
import { useContextPresets } from "~/composables/use-context-presents";
import RecipeOrganizerDialog from "~/components/Domain/Recipe/RecipeOrganizerDialog.vue";
import { RecipeOrganizer } from "~/lib/api/types/non-generated";
import { Organizer, RecipeOrganizer } from "~/lib/api/types/non-generated";
import { useRouteQuery } from "~/composables/use-router";
import { deepCopy } from "~/composables/use-utils";
@ -83,6 +84,7 @@ interface GenericItem {
id: string;
name: string;
slug: string;
onHand: boolean;
}
export default defineComponent({
@ -217,6 +219,7 @@ export default defineComponent({
updateTarget,
deleteOne,
deleteTarget,
Organizer,
presets,
itemsSorted,
searchString,

View File

@ -14,33 +14,42 @@
<!-- Model -->
<v-list v-if="mode === MODES.model" dense>
<v-list-item-group v-model="itemGroup">
<v-list-item v-for="(item, index) in items" :key="index" @click="setValue(item)">
<v-list-item-icon v-if="item.icon">
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.text }}</v-list-item-title>
</v-list-item>
<template v-for="(item, index) in items">
<v-list-item :key="index" @click="setValue(item)">
<v-list-item-icon v-if="item.icon">
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.text }}</v-list-item-title>
<v-divider v-if="item.divider" :key="`divider-${index}`" class="my-1" ></v-divider>
</v-list-item>
</template>
</v-list-item-group>
</v-list>
<!-- Links -->
<v-list v-else-if="mode === MODES.link" dense>
<v-list-item-group v-model="itemGroup">
<v-list-item v-for="(item, index) in items" :key="index" :to="item.to">
<template v-for="(item, index) in items">
<v-list-item :key="index" :to="item.to">
<v-list-item-icon v-if="item.icon">
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.text }}</v-list-item-title>
</v-list-item>
</v-list-item>
<v-divider v-if="item.divider" :key="`divider-${index}`" class="my-1" ></v-divider>
</template>
</v-list-item-group>
</v-list>
<!-- Event -->
<v-list v-else-if="mode === MODES.event" dense>
<v-list-item v-for="(item, index) in items" :key="index" @click="$emit(item.event)">
<v-list-item-icon v-if="item.icon">
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.text }}</v-list-item-title>
</v-list-item>
<template v-for="(item, index) in items">
<v-list-item :key="index" @click="$emit(item.event)">
<v-list-item-icon v-if="item.icon">
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-title>{{ item.text }}</v-list-item-title>
<v-divider v-if="item.divider" :key="`divider-${index}`" class="my-1" ></v-divider>
</v-list-item>
</template>
</v-list>
</v-menu>
</template>
@ -64,6 +73,7 @@ export interface MenuItem {
to?: string;
value?: string;
event?: string;
divider?: boolean;
}
export default defineComponent({

View File

@ -3,117 +3,117 @@ export const LOCALES = [
{
name: "繁體中文 (Chinese traditional)",
value: "zh-TW",
progress: 26,
progress: 28,
},
{
name: "简体中文 (Chinese simplified)",
value: "zh-CN",
progress: 34,
progress: 65,
},
{
name: "Tiếng Việt (Vietnamese)",
value: "vi-VN",
progress: 0,
progress: 2,
},
{
name: "Українська (Ukrainian)",
value: "uk-UA",
progress: 100,
progress: 99,
},
{
name: "Türkçe (Turkish)",
value: "tr-TR",
progress: 47,
progress: 50,
},
{
name: "Svenska (Swedish)",
value: "sv-SE",
progress: 60,
progress: 71,
},
{
name: "српски (Serbian)",
value: "sr-SP",
progress: 2,
progress: 4,
},
{
name: "Slovenian",
value: "sl-SI",
progress: 47,
progress: 49,
},
{
name: "Slovak",
value: "sk-SK",
progress: 99,
progress: 97,
},
{
name: "Pусский (Russian)",
value: "ru-RU",
progress: 31,
progress: 99,
},
{
name: "Română (Romanian)",
value: "ro-RO",
progress: 12,
progress: 32,
},
{
name: "Português (Portuguese)",
value: "pt-PT",
progress: 69,
progress: 99,
},
{
name: "Português do Brasil (Brazilian Portuguese)",
value: "pt-BR",
progress: 97,
progress: 98,
},
{
name: "Polski (Polish)",
value: "pl-PL",
progress: 99,
progress: 97,
},
{
name: "Norsk (Norwegian)",
value: "no-NO",
progress: 73,
progress: 85,
},
{
name: "Nederlands (Dutch)",
value: "nl-NL",
progress: 100,
progress: 98,
},
{
name: "Latvian",
value: "lv-LV",
progress: 0,
progress: 1,
},
{
name: "Lithuanian",
value: "lt-LT",
progress: 99,
progress: 97,
},
{
name: "한국어 (Korean)",
value: "ko-KR",
progress: 3,
progress: 5,
},
{
name: "日本語 (Japanese)",
value: "ja-JP",
progress: 9,
progress: 11,
},
{
name: "Italiano (Italian)",
value: "it-IT",
progress: 98,
progress: 96,
},
{
name: "Magyar (Hungarian)",
value: "hu-HU",
progress: 43,
progress: 99,
},
{
name: "Croatian",
value: "hr-HR",
progress: 100,
progress: 97,
},
{
name: "עברית (Hebrew)",
@ -123,27 +123,27 @@ export const LOCALES = [
{
name: "Galician",
value: "gl-ES",
progress: 0,
progress: 1,
},
{
name: "Français (French)",
value: "fr-FR",
progress: 100,
progress: 99,
},
{
name: "French, Canada",
value: "fr-CA",
progress: 54,
progress: 97,
},
{
name: "Suomi (Finnish)",
value: "fi-FI",
progress: 31,
progress: 95,
},
{
name: "Español (Spanish)",
value: "es-ES",
progress: 59,
progress: 76,
},
{
name: "American English",
@ -153,46 +153,46 @@ export const LOCALES = [
{
name: "British English",
value: "en-GB",
progress: 2,
progress: 4,
},
{
name: "Ελληνικά (Greek)",
value: "el-GR",
progress: 33,
progress: 35,
},
{
name: "Deutsch (German)",
value: "de-DE",
progress: 100,
progress: 99,
},
{
name: "Dansk (Danish)",
value: "da-DK",
progress: 90,
progress: 100,
},
{
name: "Čeština (Czech)",
value: "cs-CZ",
progress: 60,
progress: 66,
},
{
name: "Català (Catalan)",
value: "ca-ES",
progress: 54,
progress: 61,
},
{
name: "Bulgarian",
value: "bg-BG",
progress: 13,
progress: 99,
},
{
name: "العربية (Arabic)",
value: "ar-SA",
progress: 7,
progress: 16,
},
{
name: "Afrikaans (Afrikaans)",
value: "af-ZA",
progress: 0,
progress: 96,
},
]

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Geen resep gevind nie",
"ok": "OK",
"options": "Opsies:",
"plural-name": "Plural Name",
"print": "Druk",
"print-preferences": "Drukvoorkeure",
"random": "Willekeurig",
@ -462,7 +463,9 @@
"add-to-plan": "Voeg by plan",
"add-to-timeline": "Voeg by tydlyn",
"recipe-added-to-list": "Resep by lys gevoeg",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Resep is by die maaltydplan gevoeg",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Kon nie resep by maaltydplan voeg nie",
"yield": "Resultaat",
"quantity": "Hoeveelheid",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Gebruiker kan ander na groep nooi",
"user-can-manage-group": "Gebruiker kan groep bestuur",
"user-can-organize-group-data": "Gebruiker kan groepdata organiseer",
"enable-advanced-features": "Aktiveer gevorderde funksies"
"enable-advanced-features": "Aktiveer gevorderde funksies",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "vertaal",
@ -888,7 +893,9 @@
"create-food": "Skep kos",
"food-label": "Kos etiket",
"edit-food": "Wysig kos",
"food-data": "Voedseldata"
"food-data": "Voedseldata",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Saai die databasis met algemene eenhede gebaseer op jou plaaslike taal.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Voeg {0} saam met {1}",
"create-unit": "Skep eenheid",
"abbreviation": "Afkorting",
"plural-abbreviation": "Plural Abbreviation",
"description": "Beskrywing",
"display-as-fraction": "Wys as breuk",
"use-abbreviation": "Gebruik afkorting",
"edit-unit": "Wysig eenheid",
"unit-data": "Eenheiddata",
"use-abbv": "Gebruik afkorting",
"fraction": "Breuk"
"fraction": "Breuk",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Vul die databasis met algemene etikette gebaseer op jou plaaslike taal.",
@ -934,6 +946,8 @@
"delete-recipes": "Verwyder resepte",
"source-unit-will-be-deleted": "Bron-eenheid sal verwyder word"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Voorbeeld data",
"seed": "Vul",
"data-management": "Databestuur",
@ -941,7 +955,22 @@
"select-data": "Kies data",
"select-language": "Kies taal",
"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": "Gebruiker registrasie",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "لم يتم العثور على وصفة",
"ok": "موافق",
"options": "الخيارات:",
"plural-name": "Plural Name",
"print": "طباعة",
"print-preferences": "إعدادات الطباعة",
"random": "عشوائي",
@ -462,7 +463,9 @@
"add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"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",
"yield": "Yield",
"quantity": "Quantity",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "translated",
@ -888,7 +893,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Seed the database with common units based on your local language.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.",
@ -934,6 +946,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -941,7 +955,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Няма намерени рецепти",
"ok": "Добре",
"options": "Опции:",
"plural-name": "Plural Name",
"print": "Принтирай",
"print-preferences": "Настройки на принтиране",
"random": "Произволно",
@ -462,7 +463,9 @@
"add-to-plan": "Добави към план",
"add-to-timeline": "Добави към времевата линия",
"recipe-added-to-list": "Рецептата е добавена към списъка",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Рецептата е добавена към хранителния план",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Рецептата не беше добавена към хранителния план",
"yield": "Добив",
"quantity": "Количество",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Потребителя може да добавя други в групата",
"user-can-manage-group": "Потребителя може да управлява групата",
"user-can-organize-group-data": "Потребителя може да организира данните на групата",
"enable-advanced-features": "Включване на разширени функции"
"enable-advanced-features": "Включване на разширени функции",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "преведено",
@ -888,7 +893,9 @@
"create-food": "Създай храна",
"food-label": "Заглавие на храната",
"edit-food": "Редактирай храна",
"food-data": "Данни за храните"
"food-data": "Данни за храните",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Заредете базата данни с общи единици въз основа на Вашия местен език.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Обединяване на {0} с {1}",
"create-unit": "Създаване на мерна единица",
"abbreviation": "Абревиатура",
"plural-abbreviation": "Plural Abbreviation",
"description": "Описание",
"display-as-fraction": "Показване като фракция",
"use-abbreviation": "Използвай съкращение",
"edit-unit": "Редактирай мерна единица",
"unit-data": "Данни на мерната единица",
"use-abbv": "Използвай съкращение",
"fraction": "Фракция"
"fraction": "Фракция",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Заредете базата данни с общи етикети въз основа на Вашия местен език.",
@ -934,6 +946,8 @@
"delete-recipes": "Изтрий рецепти",
"source-unit-will-be-deleted": "Изходната мерна единица ще бъде изтрита"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Сийд на данни",
"seed": "Сийд",
"data-management": "Управление на данни",
@ -941,7 +955,22 @@
"select-data": "Изберете данни",
"select-language": "Изберете език",
"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": "Регистрации на потребител",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "No s'han trobat receptes",
"ok": "D'acord",
"options": "Opcions:",
"plural-name": "Plural Name",
"print": "Imprimiu",
"print-preferences": "Imprimiu les preferències",
"random": "Aleatori",
@ -462,7 +463,9 @@
"add-to-plan": "Afegiu al menú",
"add-to-timeline": "Afegir a la cronologia",
"recipe-added-to-list": "Recepta afegida a la llista",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Recepta afegida al menú",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "S'ha produït un error afegint la recepta al menú",
"yield": "Racions",
"quantity": "Quantitat",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "traduït",
@ -888,7 +893,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Afegeix a la base de dades les unitats més comunes en el vostre idioma.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Crea la unitat",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Afegeix a la base de dades etiquetes comunes en el vostre idioma.",
@ -934,6 +946,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Dades d'exemple",
"seed": "Seed",
"data-management": "Data Management",
@ -941,7 +955,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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": "Registre d'usuari",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Nebyl nalezen žádný recept",
"ok": "OK",
"options": "Možnosti:",
"plural-name": "Plural Name",
"print": "Tisk",
"print-preferences": "Tisk předvoleb",
"random": "Náhodný",
@ -462,7 +463,9 @@
"add-to-plan": "Přidat do jídelníčku",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recept byl přidán na seznam",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Recept byl přidán do jídelníčku",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Přidání receptu do jídelníčku selhalo",
"yield": "Úroda",
"quantity": "Množství",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "přeloženo",
@ -888,7 +893,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Naplnit databázi s běžnými jednotkami používanými ve vašem jazyce.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Používat zkratky",
"fraction": "Zlomek"
"fraction": "Zlomek",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Naplnit databázi s běžnými popisky používanými ve vašem jazyce.",
@ -934,6 +946,8 @@
"delete-recipes": "Smazat recepty",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -941,7 +955,22 @@
"select-data": "Vybrat data",
"select-language": "Select Language",
"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": "Registrace uživatele",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Ingen opskrift fundet",
"ok": "Ok",
"options": "Valgmuligheder:",
"plural-name": "Navn i flertal",
"print": "Udskriv",
"print-preferences": "Print indstillinger",
"random": "Tilfældig",
@ -462,7 +463,9 @@
"add-to-plan": "Tilføj til madplan",
"add-to-timeline": "Tilføj til tidslinje",
"recipe-added-to-list": "Opskrift tilføjet til listen",
"recipes-added-to-list": "Opskrifter tilføjet til listen",
"recipe-added-to-mealplan": "Opskrift tilføjet til madplanen",
"failed-to-add-recipes-to-list": "Kunne ikke tilføje opskrift til listen",
"failed-to-add-recipe-to-mealplan": "Kunne ikke tilføje opskrift til madplanen",
"yield": "Portioner",
"quantity": "Antal",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Bruger kan invitere andre til gruppen",
"user-can-manage-group": "Bruger kan administrere gruppen",
"user-can-organize-group-data": "Bruger kan organisere gruppedata",
"enable-advanced-features": "Aktiver avancerede funktioner"
"enable-advanced-features": "Aktiver avancerede funktioner",
"it-looks-like-this-is-your-first-time-logging-in": "Det ser ud til, at det er første gang, at du logger ind.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Vil du ikke længere se dette? Sørg for at ændre din e-mail i dine brugerindstillinger!"
},
"language-dialog": {
"translated": "oversat",
@ -888,7 +893,9 @@
"create-food": "Opret fødevare",
"food-label": "Etiket på fødevare",
"edit-food": "Redigér fødevare",
"food-data": "Oplysninger om fødevare"
"food-data": "Oplysninger om fødevare",
"example-food-singular": "fx.: grøntsag",
"example-food-plural": "fx.: grøntsager"
},
"units": {
"seed-dialog-text": "Opret standard enheder i dit sprog.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Samler {0} med {1}",
"create-unit": "Opret enhed",
"abbreviation": "Forkortelse",
"plural-abbreviation": "Forkortelse af flertal",
"description": "Beskriveslse",
"display-as-fraction": "Vis som brøk",
"use-abbreviation": "Anvend forkortelse",
"edit-unit": "Rediger enhed",
"unit-data": "Enhedsoplysninger",
"use-abbv": "Anvend forkortelse",
"fraction": "Brøkdel"
"fraction": "Brøkdel",
"example-unit-singular": "fx.: teske",
"example-unit-plural": "fx.: teskeer",
"example-unit-abbreviation-singular": "fx.: tsk",
"example-unit-abbreviation-plural": "fx.: tsk"
},
"labels": {
"seed-dialog-text": "Opret standard etiketter på dit sprog.",
@ -934,6 +946,8 @@
"delete-recipes": "Slet Opskrifter",
"source-unit-will-be-deleted": "Kildeenhed vil blive slettet"
},
"create-alias": "Opret alias",
"manage-aliases": "Administrer Aliaser",
"seed-data": "Opret standard data",
"seed": "Frø",
"data-management": "Datastyring",
@ -941,7 +955,22 @@
"select-data": "vælg data",
"select-language": "Vælg sprog",
"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": "Brugerregistrering",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Kein Rezept gefunden",
"ok": "OK",
"options": "Optionen:",
"plural-name": "Mehrzahl",
"print": "Drucken",
"print-preferences": "Druckeinstellungen",
"random": "Zufall",
@ -462,7 +463,9 @@
"add-to-plan": "Zum Essensplan hinzufügen",
"add-to-timeline": "Zum Zeitstrahl hinzufügen",
"recipe-added-to-list": "Rezept wurde zur Einkaufsliste hinzugefügt",
"recipes-added-to-list": "Rezepte wurden zur Einkaufsliste hinzugefügt",
"recipe-added-to-mealplan": "Rezept zum Essensplan hinzugefügt",
"failed-to-add-recipes-to-list": "Fehler beim Hinzufügen des Rezepts zur Einkaufsliste",
"failed-to-add-recipe-to-mealplan": "Fehler beim Hinzufügen des Rezepts zum Essensplan",
"yield": "Portionsangabe",
"quantity": "Menge",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Benutzer kann andere in Gruppe einladen",
"user-can-manage-group": "Benutzer kann Gruppe verwalten",
"user-can-organize-group-data": "Benutzer kann Gruppendaten bearbeiten",
"enable-advanced-features": "Erweiterte Funktionen aktivieren"
"enable-advanced-features": "Erweiterte Funktionen aktivieren",
"it-looks-like-this-is-your-first-time-logging-in": "Es sieht so aus, als ob du dich zum ersten Mal anmeldest.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Möchtest du das hier nicht mehr sehen? Bitte ändere deine E-Mail in den Benutzereinstellungen!"
},
"language-dialog": {
"translated": "übersetzt",
@ -888,7 +893,9 @@
"create-food": "Lebensmittel erstellen",
"food-label": "Lebensmittel Etikett",
"edit-food": "Lebensmittel bearbeiten",
"food-data": "Lebensmitteldaten"
"food-data": "Lebensmitteldaten",
"example-food-singular": "z.B. Zwiebel",
"example-food-plural": "z.B. Zwiebeln"
},
"units": {
"seed-dialog-text": "Füllt die Datenbank mit gängigen Maßeinheiten basierend auf deiner Sprache.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "{0} wird in {1} zusammengeführt",
"create-unit": "Einheit erstellen",
"abbreviation": "Abkürzung",
"plural-abbreviation": "Mehrzahl Abkürzung",
"description": "Beschreibung",
"display-as-fraction": "Als Bruchzahl anzeigen",
"use-abbreviation": "Abkürzungen verwenden",
"edit-unit": "Einheit bearbeiten",
"unit-data": "Einheitendaten",
"use-abbv": "Verwende Abk.",
"fraction": "Bruchzahl"
"fraction": "Bruchzahl",
"example-unit-singular": "z.B. gehäufter Teelöffel",
"example-unit-plural": "z.B. gehäufte Teelöffel",
"example-unit-abbreviation-singular": "z.B. geh. TL",
"example-unit-abbreviation-plural": "z.B. geh. TL"
},
"labels": {
"seed-dialog-text": "Füllt die Datenbank mit gängigen Etiketten basierend auf deiner Sprache.",
@ -934,6 +946,8 @@
"delete-recipes": "Rezepte löschen",
"source-unit-will-be-deleted": "Quell-Einheit wird gelöscht"
},
"create-alias": "Alias erstellen",
"manage-aliases": "Aliasse verwalten",
"seed-data": "Musterdaten",
"seed": "Musterdaten",
"data-management": "Datenverwaltung",
@ -941,7 +955,22 @@
"select-data": "Daten auswählen",
"select-language": "Sprache wählen",
"columns": "Spalten",
"combine": "Zusammenführen"
"combine": "Zusammenführen",
"categories": {
"edit-category": "Kategorie bearbeiten",
"new-category": "Neue Kategorie",
"category-data": "Kategorien-Daten"
},
"tags": {
"new-tag": "Neues Schlagwort",
"edit-tag": "Schlagwort bearbeiten",
"tag-data": "Schlagworte-Daten"
},
"tools": {
"new-tool": "Neues Utensil",
"edit-tool": "Utensil bearbeiten",
"tool-data": "Utensilien-Daten"
}
},
"user-registration": {
"user-registration": "Benutzerregistrierung",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Δεν βρέθηκαν συνταγές",
"ok": "ΟΚ",
"options": "Επιλογές:",
"plural-name": "Plural Name",
"print": "Εκτύπωση",
"print-preferences": "Προτιμήσεις Εκτύπωσης",
"random": "Τυχαίο",
@ -462,7 +463,9 @@
"add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"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",
"yield": "Yield",
"quantity": "Quantity",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "μεταφρασμένο",
@ -888,7 +893,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Seed the database with common units based on your local language.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.",
@ -934,6 +946,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -941,7 +955,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "No Recipe Found",
"ok": "OK",
"options": "Options:",
"plural-name": "Plural Name",
"print": "Print",
"print-preferences": "Print Preferences",
"random": "Random",
@ -463,7 +464,9 @@
"add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"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",
"yield": "Yield",
"quantity": "Quantity",
@ -868,7 +871,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "translated",
@ -889,7 +894,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Seed the database with common units based on your local language.",
@ -900,13 +907,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.",
@ -935,6 +947,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -942,7 +956,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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",

View File

@ -464,7 +464,9 @@
"add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"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",
"yield": "Yield",
"quantity": "Quantity",
@ -869,7 +871,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "translated",
@ -952,7 +956,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Receta no encontrada",
"ok": "Aceptar",
"options": "Opciones:",
"plural-name": "Nombre en plural",
"print": "Imprimir",
"print-preferences": "Preferencias de impresión",
"random": "Aleatorio",
@ -369,7 +370,7 @@
"trim-whitespace-description": "Eliminar espacios en blanco iniciales y finales así como líneas en blanco",
"trim-prefix-description": "Eliminar el primer carácter de cada línea",
"split-by-numbered-line-description": "Intenta dividir un párrafo utilizando los patrones '1)' o '1.'",
"import-by-url": "Importar una receta por URL",
"import-by-url": "Importar una receta desde URL",
"create-manually": "Crear receta manualmente",
"make-recipe-image": "Haz de esta la imagen de la receta"
},
@ -462,7 +463,9 @@
"add-to-plan": "Agregar al menú",
"add-to-timeline": "Añadir al cronograma",
"recipe-added-to-list": "Receta añadida a la lista",
"recipes-added-to-list": "Recetas añadidas a la lista",
"recipe-added-to-mealplan": "Receta añadida al menú",
"failed-to-add-recipes-to-list": "Error al añadir las recetas a la lista",
"failed-to-add-recipe-to-mealplan": "Error al añadir receta al menú",
"yield": "Raciones",
"quantity": "Cantidad",
@ -500,7 +503,7 @@
"how-did-it-turn-out": "¿Cómo resultó esto?",
"user-made-this": "{user} hizo esto",
"last-made-date": "Cocinado por última vez el {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": "Los extras de las recetas son una característica clave de la API de Mealie. Permiten crear pares json clave/valor personalizados dentro de una receta para acceder desde aplicaciones de terceros. Puede utilizar estas claves para almacenar información, para activar la automatización o mensajes personalizados para transmitir al dispositivo deseado.",
"message-key": "Clave de mensaje",
"parse": "Analizar",
"attach-images-hint": "Adjuntar imágenes arrastrando y soltando en el editor",
@ -520,7 +523,7 @@
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Crear una receta proporcionando el nombre. Todas las recetas deben tener nombres únicos.",
"new-recipe-names-must-be-unique": "El nombre de la receta debe ser único",
"scrape-recipe": "Analiza receta",
"scrape-recipe-description": "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": "Importa una receta por URL. Proporcione la URL para el sitio que desea importar, y Mealie intentará importar la receta de ese sitio y añadirla a su colección.",
"import-original-keywords-as-tags": "Importar palabras clave originales como etiquetas",
"stay-in-edit-mode": "Permanecer en modo edición",
"import-from-zip": "Importar desde zip",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "El usuario puede invitar a otros al grupo",
"user-can-manage-group": "El usuario puede administrar el grupo",
"user-can-organize-group-data": "El usuario puede organizar los datos del grupo",
"enable-advanced-features": "Habilitar Características Avanzadas"
"enable-advanced-features": "Habilitar Características Avanzadas",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "traducido",
@ -888,7 +893,9 @@
"create-food": "Crear Alimento",
"food-label": "Etiqueta de Alimento",
"edit-food": "Editar Alimento",
"food-data": "Datos de Alimento"
"food-data": "Datos de Alimento",
"example-food-singular": "ej: Cebolla",
"example-food-plural": "ej: Cebollas"
},
"units": {
"seed-dialog-text": "Añade a la base de datos unidades comunes basadas en su idioma local.",
@ -899,23 +906,28 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abreviatura",
"plural-abbreviation": "Abreviatura en plural",
"description": "Descripción",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Usar Abreviaturas",
"edit-unit": "Editar unidad",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"use-abbv": "Usar Abr.",
"fraction": "Fracción",
"example-unit-singular": "ej: Cucharada",
"example-unit-plural": "ej: Cucharadas",
"example-unit-abbreviation-singular": "ej: Cda",
"example-unit-abbreviation-plural": "ej: Cdas"
},
"labels": {
"seed-dialog-text": "Añade a la base de datos etiquetas comunes basadas en su idioma local.",
"edit-label": "Editar etiqueta",
"new-label": "Nueva etiqueta",
"labels": "Labels"
"labels": "Etiquetas"
},
"recipes": {
"purge-exports": "Purge Exports",
"are-you-sure-you-want-to-delete-all-export-data": "Are you sure you want to delete all export data?",
"purge-exports": "Limpiar exportaciones",
"are-you-sure-you-want-to-delete-all-export-data": "¿Está seguro de que desea eliminar todos sus datos de exportación?",
"confirm-delete-recipes": "Are you sure you want to delete the following recipes? This action cannot be undone.",
"the-following-recipes-selected-length-will-be-exported": "The following recipes ({0}) will be exported.",
"settings-chosen-explanation": "Settings chosen here, excluding the locked option, will be applied to all selected recipes.",
@ -928,20 +940,37 @@
"tag": "Etiqueta",
"categorize": "Clasificar",
"update-settings": "Actualizar configuración",
"tag-recipes": "Tag Recipes",
"tag-recipes": "Etiquetar Recetas",
"categorize-recipes": "Categorizar recetas",
"export-recipes": "Exportar recetas",
"delete-recipes": "Borrar Recetas",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Crear un Alias",
"manage-aliases": "Administrar Alias",
"seed-data": "Datos de ejemplo",
"seed": "Seed",
"seed": "Semilla",
"data-management": "Data Management",
"data-management-description": "Select which data set you want to make changes to.",
"select-data": "Seleccionar datos",
"select-language": "Seleccionar idioma",
"columns": "Columnas",
"combine": "Combinar"
"combine": "Combinar",
"categories": {
"edit-category": "Editar Categoría",
"new-category": "Nueva Categoría",
"category-data": "Datos de la categoría"
},
"tags": {
"new-tag": "Nueva Etiqueta",
"edit-tag": "Editar Etiqueta",
"tag-data": "Etiquetar Datos"
},
"tools": {
"new-tool": "Nueva Herramienta",
"edit-tool": "Editar Herramienta",
"tool-data": "Datos Herramienta"
}
},
"user-registration": {
"user-registration": "Registro de usuario",
@ -992,7 +1021,7 @@
"ocr-editor": {
"ocr-editor": "Editor de OCR",
"selection-mode": "Modo de selección",
"pan-and-zoom-picture": "Pan and zoom picture",
"pan-and-zoom-picture": "Desplazar y hacer zoom en la imagen",
"split-text": "Split text",
"preserve-line-breaks": "Preserve original line breaks",
"split-by-block": "Split by text block",
@ -1040,16 +1069,16 @@
"action-delete-log-files-description": "Deletes all the log files",
"action-clean-directories-name": "Clean Directories",
"action-clean-directories-description": "Removes all the recipe folders that are not valid UUIDs",
"action-clean-temporary-files-name": "Clean Temporary Files",
"action-clean-temporary-files-description": "Removes all files and folders in the .temp directory",
"action-clean-images-name": "Clean Images",
"action-clean-temporary-files-name": "Eliminar archivos temporales",
"action-clean-temporary-files-description": "Eliminar todos los archivos y carpetas del directorio .temp",
"action-clean-images-name": "Limpiar imágenes",
"action-clean-images-description": "Elimina todas las imágenes que no terminan con .webp",
"actions-description": "Maintenance actions are {destructive_in_bold} and should be used with caution. Performing any of these actions is {irreversible_in_bold}.",
"actions-description-destructive": "destructive",
"actions-description": "Las acciones de mantenimiento son {destructive_in_bold} y deben utilizarse con precaución. Realizar cualquiera de estas acciones es {irreversible_in_bold}.",
"actions-description-destructive": "destructivas",
"actions-description-irreversible": "irreversible",
"logs-action-refresh": "Refresh Logs",
"logs-page-title": "Mealie Logs",
"logs-tail-lines-label": "Tail Lines"
"logs-action-refresh": "Actualizar Logs",
"logs-page-title": "Logs de Mealie",
"logs-tail-lines-label": "Últimas Líneas"
},
"mainentance": {
"actions-title": "Acciones"
@ -1063,28 +1092,28 @@
"ingredient-text": "Ingredient Text",
"average-confident": "{0} Confident",
"try-an-example": "Try an example",
"parser": "Parser",
"background-tasks": "Background Tasks",
"parser": "Procesador",
"background-tasks": "Tareas en Segundo Plano",
"background-tasks-description": "Here you can view all the running background tasks and their status",
"no-logs-found": "No Logs Found",
"tasks": "Tasks"
"tasks": "Tareas"
},
"profile": {
"welcome-user": "👋 Welcome, {0}",
"description": "Manage your profile, recipes, and group settings.",
"get-invite-link": "Get Invite Link",
"get-public-link": "Get Public Link",
"account-summary": "Account Summary",
"account-summary-description": "Here's a summary of your group's information",
"welcome-user": "👋 Hola, {0}",
"description": "Administra tu perfil, recetas y ajustes de grupo.",
"get-invite-link": "Obtener enlace de invitación",
"get-public-link": "Obtener enlace público",
"account-summary": "Información de la cuenta",
"account-summary-description": "Este es un resumen de la información de tu grupo",
"group-statistics": "Group Statistics",
"group-statistics-description": "Your Group Statistics provide some insight how you're using Mealie.",
"storage-capacity": "Storage Capacity",
"storage-capacity": "Capacidad de almacenamiento",
"storage-capacity-description": "Your storage capacity is a calculation of the images and assets you have uploaded.",
"personal": "Personal",
"personal-description": "These are settings that are personal to you. Changes here won't affect other users",
"user-settings": "User Settings",
"user-settings-description": "Manage your preferences, change your password, and update your email",
"api-tokens-description": "Manage your API Tokens for access from external applications",
"user-settings": "Ajustes de usuario",
"user-settings-description": "Administrar preferencias, cambiar contraseña y actualizar correo electrónico",
"api-tokens-description": "Administra tus API Tokens para acceder desde aplicaciones externas",
"group-description": "These items are shared within your group. Editing one of them will change it for the whole group!",
"group-settings": "Group Settings",
"group-settings-description": "Manage your common group settings like mealplan and privacy settings.",
@ -1111,19 +1140,19 @@
"manage-members": "Gestionar miembros",
"manage-webhooks": "Manage Webhooks",
"manage-notifiers": "Manage Notifiers",
"manage-data-migrations": "Manage Data Migrations"
"manage-data-migrations": "Administrar Migraciones de Datos"
},
"cookbook": {
"cookbooks": "Cookbooks",
"description": "Cookbooks are another way to organize recipes by creating cross sections of recipes and tags. Creating a cookbook will add an entry to the side-bar and all the recipes with the tags and categories chosen will be displayed in the 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.",
"cookbooks": "Recetarios",
"description": "Los recetarios son otra forma de organizar recetas creando secciones cruzadas de recetas y etiquetas. Crear un recetario añadirá una entrada a la barra lateral y todas las recetas con las etiquetas y categorías elegidas se mostrarán en el recetario.",
"public-cookbook": "Recetario público",
"public-cookbook-description": "Los recetarios públicos se pueden compartir con usuarios externos y se mostrarán en su página de grupos.",
"filter-options": "Opciones de filtro",
"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",
"cookbook-name": "Cookbook Name",
"cookbook-with-name": "Cookbook {0}"
"filter-options-description": "Cuando \"Requerir todo\" esté seleccionado, el recetario solo incluirá recetas que tengan todos los elementos seleccionados. Esto se aplica a cada subconjunto de selectores y no a una sección de los elementos seleccionados.",
"require-all-categories": "Requerir todas las categorías",
"require-all-tags": "Requerir todas las etiquetas",
"require-all-tools": "Requiere todas las herramientas",
"cookbook-name": "Nombre del recetario",
"cookbook-with-name": "Recetario {0}"
}
}

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Reseptiä ei löytynyt",
"ok": "OK",
"options": "Valinnat:",
"plural-name": "Plural Name",
"print": "Tulosta",
"print-preferences": "Tulosta asetukset",
"random": "Satunnainen",
@ -462,7 +463,9 @@
"add-to-plan": "Lisää suunnitelmaan",
"add-to-timeline": "Lisää aikajanalle",
"recipe-added-to-list": "Resepti lisätty listalle",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Resepti lisätty ateriasuunnitelmaan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Reseptiä ei voitu lisätä ateriasuunnitelmaan",
"yield": "Sato",
"quantity": "Määrä",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Käyttäjä voi kutsua muita ryhmään",
"user-can-manage-group": "Käyttäjä voi hallita ryhmää",
"user-can-organize-group-data": "Käyttäjä voi järjestellä ryhmän tietoja",
"enable-advanced-features": "Salli edistyneemmät ominaisuudet"
"enable-advanced-features": "Salli edistyneemmät ominaisuudet",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "käännetty",
@ -888,7 +893,9 @@
"create-food": "Luo elintarvike",
"food-label": "Elintarvikkeiden nimike",
"edit-food": "Muokkaa elintarviketta",
"food-data": "Elintarvikkeiden tiedot"
"food-data": "Elintarvikkeiden tiedot",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Lisää tietokantaan yksiköt paikallisen kielen perusteella.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Yhdistä {0} ja {1} yhdeksi",
"create-unit": "Luo yksikkö",
"abbreviation": "Lyhenne",
"plural-abbreviation": "Plural Abbreviation",
"description": "Kuvaus",
"display-as-fraction": "Näytä murtolukuna",
"use-abbreviation": "Käytä Lyhennettä",
"edit-unit": "Muokkaa yksiköitä",
"unit-data": "Yksikkötiedot",
"use-abbv": "Käytä lyhennettä.",
"fraction": "Murtoluku"
"fraction": "Murtoluku",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Lisää tietokantaan yleiset tunnisteet paikallisen kielen perusteella.",
@ -934,6 +946,8 @@
"delete-recipes": "Poista Reseptit",
"source-unit-will-be-deleted": "Lähdeyksikkö poistetaan"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Tietokannan pohjadata",
"seed": "Lisää pohjadata",
"data-management": "Tietojen hallinta",
@ -941,7 +955,22 @@
"select-data": "Valitse Tiedot",
"select-language": "Valitse kieli",
"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": "Käyttäjien rekisteröinti",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Aucune recette trouvée",
"ok": "OK",
"options": "Options :",
"plural-name": "Nom au pluriel",
"print": "Imprimer",
"print-preferences": "Préférences d'impression",
"random": "Aléatoire",
@ -462,7 +463,9 @@
"add-to-plan": "Ajouter à la planification des repas",
"add-to-timeline": "Ajouter à lhistorique",
"recipe-added-to-list": "Recette ajoutée à la liste",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Recette ajoutée à la planification des repas",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Échec de l'ajout de la recette à la planification des repas",
"yield": "Rendement",
"quantity": "Quantité",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "L'utilisateur peut inviter quelqu'un au groupe",
"user-can-manage-group": "L'utilisateur peut gérer le groupe",
"user-can-organize-group-data": "L'utilisateur peut organiser des données de groupe",
"enable-advanced-features": "Activer les fonctions avancées"
"enable-advanced-features": "Activer les fonctions avancées",
"it-looks-like-this-is-your-first-time-logging-in": "Il semble que ce soit votre première connexion.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Vous ne voulez plus voir cela? Assurez-vous de changer votre adresse courriel dans vos paramètres d'utilisateur!"
},
"language-dialog": {
"translated": "traduit",
@ -888,7 +893,9 @@
"create-food": "Créer un aliment",
"food-label": "Étiquette de l'aliment",
"edit-food": "Modifier Aliment",
"food-data": "Données de l'aliment"
"food-data": "Données de l'aliment",
"example-food-singular": "ex : Oignon",
"example-food-plural": "ex : Oignons"
},
"units": {
"seed-dialog-text": "Initialisez la base de données avec des unités communes basées sur votre langue locale.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Fusion de {0} dans {1}",
"create-unit": "Créer une unité",
"abbreviation": "Abréviation",
"plural-abbreviation": "Abréviation au pluriel",
"description": "Description",
"display-as-fraction": "Afficher sous forme de fraction",
"use-abbreviation": "Utiliser l'abréviation",
"edit-unit": "Modifier l'unité",
"unit-data": "Données de l'unité",
"use-abbv": "Utiliser abr.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex : Cuillère à soupe",
"example-unit-plural": "ex : Cuillères à soupe",
"example-unit-abbreviation-singular": "ex : CàS",
"example-unit-abbreviation-plural": "ex : CàS"
},
"labels": {
"seed-dialog-text": "Initialisez la base de données avec des étiquettes communes basées sur votre langue locale.",
@ -934,6 +946,8 @@
"delete-recipes": "Supprimer les recettes",
"source-unit-will-be-deleted": "L'unité source sera supprimée"
},
"create-alias": "Créer un alias",
"manage-aliases": "Gérer les alias",
"seed-data": "Initialiser les données",
"seed": "Initialiser",
"data-management": "Gestion des données",
@ -941,7 +955,22 @@
"select-data": "Sélectionner les données",
"select-language": "Sélectionnez une langue",
"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": "Inscription dutilisateur",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Aucune recette trouvée",
"ok": "OK",
"options": "Options:",
"plural-name": "Nom au pluriel",
"print": "Imprimer",
"print-preferences": "Préférences d'impression",
"random": "Aléatoire",
@ -462,7 +463,9 @@
"add-to-plan": "Ajouter au menu",
"add-to-timeline": "Ajouter à lhistorique",
"recipe-added-to-list": "Recette ajoutée à la liste",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Recette ajoutée au menu",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Échec de lajout de la recette au menu",
"yield": "Nombre de portions",
"quantity": "Quantité",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "L'utilisateur peut inviter quelqu'un au groupe",
"user-can-manage-group": "L'utilisateur peut gérer le groupe",
"user-can-organize-group-data": "L'utilisateur peut organiser des données de groupe",
"enable-advanced-features": "Activer les fonctions avancées"
"enable-advanced-features": "Activer les fonctions avancées",
"it-looks-like-this-is-your-first-time-logging-in": "Il semble que ce soit votre première connexion.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Vous ne voulez plus voir cela ? Assurez-vous de changer votre adresse e-mail dans vos paramètres d'utilisateur !"
},
"language-dialog": {
"translated": "traduit",
@ -888,7 +893,9 @@
"create-food": "Créer un aliment",
"food-label": "Étiquette de l'aliment",
"edit-food": "Modifier Aliment",
"food-data": "Données de l'aliment"
"food-data": "Données de l'aliment",
"example-food-singular": "ex : Oignon",
"example-food-plural": "ex : Oignons"
},
"units": {
"seed-dialog-text": "Initialisez la base de données avec des unités communes basées sur votre langue locale.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Fusion de {0} dans {1}",
"create-unit": "Créer une unité",
"abbreviation": "Abréviation",
"plural-abbreviation": "Abréviation au pluriel",
"description": "Description",
"display-as-fraction": "Afficher sous forme de fraction",
"use-abbreviation": "Utiliser l'abréviation",
"edit-unit": "Modifier l'unité",
"unit-data": "Données de l'unité",
"use-abbv": "Utiliser abr.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex : Cuillère à soupe",
"example-unit-plural": "ex : Cuillères à soupe",
"example-unit-abbreviation-singular": "ex : CàS",
"example-unit-abbreviation-plural": "ex : CàS"
},
"labels": {
"seed-dialog-text": "Initialisez la base de données avec des étiquettes communes basées sur votre langue locale.",
@ -934,6 +946,8 @@
"delete-recipes": "Supprimer les recettes",
"source-unit-will-be-deleted": "L'unité source sera supprimée"
},
"create-alias": "Créer un alias",
"manage-aliases": "Gérer les alias",
"seed-data": "Initialiser les données",
"seed": "Initialiser",
"data-management": "Gestion des données",
@ -941,7 +955,22 @@
"select-data": "Sélectionner les données",
"select-language": "Sélectionnez une langue",
"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": "Inscription dutilisateur",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "No Recipe Found",
"ok": "OK",
"options": "Options:",
"plural-name": "Plural Name",
"print": "Print",
"print-preferences": "Print Preferences",
"random": "Random",
@ -463,7 +464,9 @@
"add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"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",
"yield": "Yield",
"quantity": "Quantity",
@ -868,7 +871,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "translated",
@ -889,7 +894,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Seed the database with common units based on your local language.",
@ -900,13 +907,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.",
@ -935,6 +947,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -942,7 +956,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "לא נמצא מתכון",
"ok": "אישור",
"options": "אפשרויות:",
"plural-name": "Plural Name",
"print": "הדפסה",
"print-preferences": "העדפות הדפסה",
"random": "אקראי",
@ -462,7 +463,9 @@
"add-to-plan": "הוספה לתכנית",
"add-to-timeline": "הוסף לציר הזמן",
"recipe-added-to-list": "מתכון נוסף לרשימה",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "מתכון נוסף לתכנון ארוחות",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "הוספת מתכון לתכנון ארוחות נכשלה",
"yield": "תשואה",
"quantity": "כמות",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "משתמש יכול להזמין אחרים לקבוצה",
"user-can-manage-group": "משתמש יכול לנהל קבוצה",
"user-can-organize-group-data": "משתמש יכול לשנות מידע של קבוצה",
"enable-advanced-features": "אפשר אפשרויות מתקדמות"
"enable-advanced-features": "אפשר אפשרויות מתקדמות",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "תורגם",
@ -888,7 +893,9 @@
"create-food": "צור אוכל",
"food-label": "תוית אוכל",
"edit-food": "עריכת מזון",
"food-data": "נתוני אוכל"
"food-data": "נתוני אוכל",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "אכלס את מסד הנתונים עם יחידות מדידה בהתאם לשפה המקומית שלך.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "ממזג את {0} לתוך {1}",
"create-unit": "יצירת יחידה",
"abbreviation": "קיצור",
"plural-abbreviation": "Plural Abbreviation",
"description": "תיאור",
"display-as-fraction": "הצגה כשבר",
"use-abbreviation": "השתמש בקיצור",
"edit-unit": "עריכת יחידה",
"unit-data": "נתוני יחידה",
"use-abbv": "השתמש בקיצור",
"fraction": "שבר"
"fraction": "שבר",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "אכלס את מסד הנתונים בתגיות נפוצות בהתאם לשפה המקומית שלך.",
@ -934,6 +946,8 @@
"delete-recipes": "מחיקת מתכונים",
"source-unit-will-be-deleted": "יחידת המקור תמחק"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "אכלס נתונים",
"seed": "אכלס",
"data-management": "ניהול מידע",
@ -941,7 +955,22 @@
"select-data": "בחר נתונים",
"select-language": "בחירת שפה",
"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": "רישום משתמשים",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Nije Pronađen Recept",
"ok": "OK",
"options": "Opcije:",
"plural-name": "Plural Name",
"print": "Ispiši",
"print-preferences": "Postavke ispisa",
"random": "Nasumično",
@ -462,7 +463,9 @@
"add-to-plan": "Dodaj u Plan",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recept je dodan na popis",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Recept je dodan u Plan",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Nije uspjelo dodavanje recepta u plan obroka",
"yield": "Konačna Količina",
"quantity": "Količina",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Korisnik može pozvati druge u grupu",
"user-can-manage-group": "Korisnik može upravljati grupom",
"user-can-organize-group-data": "Korisnik može organizirati podatke grupe",
"enable-advanced-features": "Omogućite napredne značajke"
"enable-advanced-features": "Omogućite napredne značajke",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "prevedeno",
@ -888,7 +893,9 @@
"create-food": "Kreiraj Namirnicu",
"food-label": "Prehrambena oznaka",
"edit-food": "Uredi Namirnicu",
"food-data": "Podaci o Namirnici"
"food-data": "Podaci o Namirnici",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Popunite bazu podataka uobičajenim jedinicama na temelju vašeg lokalnog jezika.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Spajanje {0} u {1}",
"create-unit": "Kreiraj Jedinicu",
"abbreviation": "Oznaka Jedinice",
"plural-abbreviation": "Plural Abbreviation",
"description": "Opis",
"display-as-fraction": "Prikaži kao razlomak",
"use-abbreviation": "Koristi oznaku Jedinice",
"edit-unit": "Uredi Jedinicu",
"unit-data": "Podaci Jedinice",
"use-abbv": "Koristi Skraćenu oznaku.",
"fraction": "Razlomak"
"fraction": "Razlomak",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Popunite bazu podataka uobičajenim oznakama na temelju vašeg lokalnog jezika.",
@ -934,6 +946,8 @@
"delete-recipes": "Obriši Recepte",
"source-unit-will-be-deleted": "Izvorna jedinica će biti izbrisana"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Unesi Podatke",
"seed": "Seed",
"data-management": "Upravljanje Podacima",
@ -941,7 +955,22 @@
"select-data": "Označite Podatke",
"select-language": "Odaberite Jezik",
"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": "Registracija Korisnika",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Nem található recept",
"ok": "OK",
"options": "Opciók:",
"plural-name": "Név többes számban",
"print": "Nyomtatás",
"print-preferences": "Nyomtatási beállítások",
"random": "Véletlenszerű",
@ -462,7 +463,9 @@
"add-to-plan": "Hozzáadás az étkezési tervhez",
"add-to-timeline": "Hozzáadás idővonalhoz",
"recipe-added-to-list": "Recept hozzáadva listához",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Recept hozzáadva menütervhez",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Nem sikerült hozzáadni a receptet a menütervhez",
"yield": "Adag",
"quantity": "Mennyiség",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "A felhasználó meghívhat másokat a csoportba",
"user-can-manage-group": "A felhasználó csoportot kezelhet",
"user-can-organize-group-data": "Felhasználó szerkesztheti a csoport adatait",
"enable-advanced-features": "Haladó funkciók engedélyezése"
"enable-advanced-features": "Haladó funkciók engedélyezése",
"it-looks-like-this-is-your-first-time-logging-in": "Úgy tűnik, most jelentkezik be először.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Nem akarja ezt többé látni? Mindenképpen változtassa meg az e-mail címét a felhasználói beállítások között!"
},
"language-dialog": {
"translated": "lefordítva",
@ -888,7 +893,9 @@
"create-food": "Étel készítése",
"food-label": "Étel címke",
"edit-food": "Étel szerkesztése",
"food-data": "Étel adatai"
"food-data": "Étel adatai",
"example-food-singular": "pl. Hagyma",
"example-food-plural": "pl. Hagymák"
},
"units": {
"seed-dialog-text": "Töltse be az Ön nyelve szerinti közös mennyiségi egységet tartalmazó adatbázist.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "{0} összevonása {1}-zel/zal",
"create-unit": "Mennyiségi egység létrehozása",
"abbreviation": "Rövidítés",
"plural-abbreviation": "Többes szám rövidítése",
"description": "Megnevezés",
"display-as-fraction": "Törtként való megjelenítés",
"use-abbreviation": "Rövidítés használata",
"edit-unit": "Mennyiségi egység szerkesztése",
"unit-data": "Mennyiségi egység adatok",
"use-abbv": "Rövidítés haszn.",
"fraction": "Tört"
"fraction": "Tört",
"example-unit-singular": "pl. Evőkanál",
"example-unit-plural": "pl. Evőkanalak",
"example-unit-abbreviation-singular": "pl. ek",
"example-unit-abbreviation-plural": "pl. ek"
},
"labels": {
"seed-dialog-text": "Töltse be az Ön nyelve szerinti közös címkélet tartalmazó adatbázist.",
@ -934,6 +946,8 @@
"delete-recipes": "Receptek törlése",
"source-unit-will-be-deleted": "A forrás mennyiségi egység törlésre kerül"
},
"create-alias": "Alias készítése",
"manage-aliases": "Alias kezelése",
"seed-data": "Kezdőérték adat",
"seed": "Kezdőérték",
"data-management": "Adatmenedzsment",
@ -941,7 +955,22 @@
"select-data": "Válassza ki az adatot",
"select-language": "Nyelv kiválasztása",
"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": "Felhasználó regisztráció",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Nessuna Ricetta Trovata",
"ok": "OK",
"options": "Opzioni:",
"plural-name": "Plural Name",
"print": "Stampa",
"print-preferences": "Preferenze Di Stampa",
"random": "Casuale",
@ -462,7 +463,9 @@
"add-to-plan": "Aggiungi al piano giornaliero",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Ricetta aggiunta alla lista",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Ricetta aggiunta al piano alimentare",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Impossibile aggiungere la ricetta al piano alimentare",
"yield": "Porzioni",
"quantity": "Quantità",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "L'utente può invitare altri al gruppo",
"user-can-manage-group": "L'utente può gestire il gruppo",
"user-can-organize-group-data": "L'utente può organizzare i dati del gruppo",
"enable-advanced-features": "Abilita funzionalità avanzate"
"enable-advanced-features": "Abilita funzionalità avanzate",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "tradotto",
@ -888,7 +893,9 @@
"create-food": "Crea Alimento",
"food-label": "Etichetta Alimento",
"edit-food": "Modifica Alimento",
"food-data": "Dati Alimento"
"food-data": "Dati Alimento",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Riempie il database con unità comuni basate sulla lingua.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Unione di {0} in {1}",
"create-unit": "Crea Unità",
"abbreviation": "Abbreviazione",
"plural-abbreviation": "Plural Abbreviation",
"description": "Descrizione",
"display-as-fraction": "Mostra come Frazione",
"use-abbreviation": "Usa Abbreviazione",
"edit-unit": "Modifica Unità",
"unit-data": "Dati Unità",
"use-abbv": "Utilizzare Abbrev.",
"fraction": "Frazione"
"fraction": "Frazione",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Riempie il database con etichette comuni basate sulla lingua.",
@ -934,6 +946,8 @@
"delete-recipes": "Elimina Ricette",
"source-unit-will-be-deleted": "L'unità di origine verrà eliminata"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Dati Predefiniti",
"seed": "Inizializza",
"data-management": "Gestione Dati",
@ -941,7 +955,22 @@
"select-data": "Seleziona Dati",
"select-language": "Seleziona Lingua",
"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": "Registrazione Utente",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "レシピが見つかりません。",
"ok": "OK",
"options": "Options:",
"plural-name": "Plural Name",
"print": "印刷",
"print-preferences": "印刷設定",
"random": "ランダム",
@ -463,7 +464,9 @@
"add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "レシピを献立に追加しました。",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "レシピを献立に追加する事に失敗しました。",
"yield": "Yield",
"quantity": "Quantity",
@ -868,7 +871,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "translated",
@ -889,7 +894,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Seed the database with common units based on your local language.",
@ -900,13 +907,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.",
@ -935,6 +947,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -942,7 +956,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "레시피를 찾을 수 없습니다.",
"ok": "확인",
"options": "옵션:",
"plural-name": "Plural Name",
"print": "인쇄",
"print-preferences": "인쇄 설정",
"random": "무작위",
@ -463,7 +464,9 @@
"add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"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",
"yield": "Yield",
"quantity": "Quantity",
@ -868,7 +871,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "translated",
@ -889,7 +894,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Seed the database with common units based on your local language.",
@ -900,13 +907,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.",
@ -935,6 +947,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -942,7 +956,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Nerasta receptų",
"ok": "Gerai",
"options": "Pasirinkimai:",
"plural-name": "Plural Name",
"print": "Spausdinti",
"print-preferences": "Spausdinimo nustatymai",
"random": "Atsitiktinis",
@ -462,7 +463,9 @@
"add-to-plan": "Pridėti prie plano",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recepts pridėtas į sąrašą",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Recepts pridėtas prie mitybos plano",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Nepavyko pridėti recepto prie mitybos plano",
"yield": "Išeiga",
"quantity": "Kiekis",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Naudotojas gali kviesti kitus į grupę",
"user-can-manage-group": "Naudotojas gali valdyti grupę",
"user-can-organize-group-data": "Naudotojas gali tvarkyti grupės duomenis",
"enable-advanced-features": "Įjungti pažangias funkcijas"
"enable-advanced-features": "Įjungti pažangias funkcijas",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "išversta",
@ -888,7 +893,9 @@
"create-food": "Pridėti produktą",
"food-label": "Produkto etiketė",
"edit-food": "Keisti produktą",
"food-data": "Produktų duomenys"
"food-data": "Produktų duomenys",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Įdėkite į duomenų bazę bendrus vienetus pagal jūsų kalbą.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Sujungiama {0} su {1}",
"create-unit": "Sukurti vienetą",
"abbreviation": "Santrumpa",
"plural-abbreviation": "Plural Abbreviation",
"description": "Aprašymas",
"display-as-fraction": "Rodyti kaip trupmeną",
"use-abbreviation": "Naudoti santrumpą",
"edit-unit": "Keisti vienetą",
"unit-data": "Vienetų duomenys",
"use-abbv": "Naudoti santr.",
"fraction": "Trupmena"
"fraction": "Trupmena",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Įdėkite į duomenų bazę bendras žymas pagal jūsų kalbą.",
@ -934,6 +946,8 @@
"delete-recipes": "Ištrinti receptus",
"source-unit-will-be-deleted": "Pirminis vienetas bus ištrintas"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Pradiniai duomenys",
"seed": "Užpildyti",
"data-management": "Duomenų valdymas",
@ -941,7 +955,22 @@
"select-data": "Pasirinkti duomenis",
"select-language": "Pasirinkti kalbą",
"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": "Vartotojo registracija",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "No Recipe Found",
"ok": "OK",
"options": "Options:",
"plural-name": "Plural Name",
"print": "Print",
"print-preferences": "Print Preferences",
"random": "Random",
@ -463,7 +464,9 @@
"add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"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",
"yield": "Yield",
"quantity": "Quantity",
@ -868,7 +871,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "translated",
@ -889,7 +894,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Seed the database with common units based on your local language.",
@ -900,13 +907,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.",
@ -935,6 +947,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -942,7 +956,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Geen recept gevonden",
"ok": "Ok",
"options": "Opties:",
"plural-name": "Naam voor meervoud",
"print": "Afdrukken",
"print-preferences": "Voorkeuren afdrukken",
"random": "Willekeurig",
@ -296,7 +297,7 @@
"for-type-meal-types": "voor {0} maaltijdsoorten",
"meal-plan-rules": "Maaltijdplanregels",
"new-rule": "Nieuwe regel",
"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": "Je kunt regels maken voor het automatisch selecteren van recepten voor je maaltijdplanning. Deze regels worden gebruikt door de server om de recepten te selecteren bij het maken van een maaltijdplanning. Houdt er rekening mee dat als regels dezelfde dag en type restricties hebben de categorieën van de regels worden samengevoegd. In de praktijk is het dus niet nodig om dubbele regels te maken, maar het is wel mogelijk.",
"new-rule-description": "Bij het opstellen van een nieuwe regel voor een maaltijdplan kunt u de regel beperken tot een specifieke dag van de week en/of een specifiek type maaltijd. Om een regel toe te passen op alle dagen of alle maaltijden kunt u de regel op \"Ieder\" instellen die deze toepast op alle mogelijke waarden voor het type dag en/of maaltijd.",
"recipe-rules": "Recept Regels",
"applies-to-all-days": "Van toepassing op alle dagen",
@ -462,7 +463,9 @@
"add-to-plan": "Toevoegen aan plan",
"add-to-timeline": "Aan tijdlijn toevoegen",
"recipe-added-to-list": "Recept toegevoegd aan de lijst",
"recipes-added-to-list": "Recept toegevoegd aan de lijst",
"recipe-added-to-mealplan": "Recept toegevoegd aan het maaltijdplan",
"failed-to-add-recipes-to-list": "Kon recept niet aan de lijst toevoegen ",
"failed-to-add-recipe-to-mealplan": "Recept aan maaltijdplan toevoegen mislukt",
"yield": "Resultaat",
"quantity": "Hoeveelheid",
@ -737,7 +740,7 @@
"cookbooks": "Kookboeken",
"dashboard": "Dashboard",
"home-page": "Homepagina",
"manage-users": "Beheer gebruikers",
"manage-users": "Beheer Gebruikers",
"migrations": "Migraties",
"profile": "Profiel",
"search": "Zoeken",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Gebruiker kan iemand uitnodigen voor de groep",
"user-can-manage-group": "Gebruiker kan de groep beheren",
"user-can-organize-group-data": "Gebruiker kan groepsgegevens organiseren",
"enable-advanced-features": "Geavanceerde functies inschakelen"
"enable-advanced-features": "Geavanceerde functies inschakelen",
"it-looks-like-this-is-your-first-time-logging-in": "Het lijkt erop dat je voor het eerst inlogt.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Wil je dit niet meer zien? Verander dan je e-mailadres in je gebruikersinstellingen!"
},
"language-dialog": {
"translated": "vertaald",
@ -888,7 +893,9 @@
"create-food": "Maak Voedsel",
"food-label": "Voedsel Label",
"edit-food": "Bewerk voedsel",
"food-data": "Voedsel gegevens"
"food-data": "Voedsel gegevens",
"example-food-singular": "bv: Ui",
"example-food-plural": "bv: Uien"
},
"units": {
"seed-dialog-text": "Vul de database aan met veelvoorkomende eenheden, gebaseerd op je lokale taal.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "{0} samenvoegen met {1}",
"create-unit": "Eenheid aanmaken",
"abbreviation": "Afkorting",
"plural-abbreviation": "Afkorting voor meervoud",
"description": "Beschrijving",
"display-as-fraction": "Gedeelte weergeven",
"use-abbreviation": "Gebruik afkorting",
"edit-unit": "Eenheid wijzigen",
"unit-data": "Eenheid gegevens",
"use-abbv": "Gebruik afk.",
"fraction": "Breuk"
"fraction": "Breuk",
"example-unit-singular": "Bv: eetlepel ",
"example-unit-plural": "Bv: eetlepels ",
"example-unit-abbreviation-singular": "Bv: el",
"example-unit-abbreviation-plural": "bv: els"
},
"labels": {
"seed-dialog-text": "Vul de database aan met veelvoorkomende labels, gebaseerd op je lokale taal.",
@ -934,6 +946,8 @@
"delete-recipes": "Verwijder recepten",
"source-unit-will-be-deleted": "Broneenheid zal worden verwijderd"
},
"create-alias": "Maak alias",
"manage-aliases": "Beheer aliassen ",
"seed-data": "Voorbeeldgegevens",
"seed": "Vul",
"data-management": "Gegevensbeheer",
@ -941,7 +955,22 @@
"select-data": "Selecteer gegevens",
"select-language": "Selecteer taal",
"columns": "Kolommen",
"combine": "Samenvoegen"
"combine": "Samenvoegen",
"categories": {
"edit-category": "Categorie Bewerken",
"new-category": "Categorie Toevoegen",
"category-data": "Categorie Overzicht"
},
"tags": {
"new-tag": "Label Toevoegen",
"edit-tag": "Label Bewerken",
"tag-data": "Label Overzicht"
},
"tools": {
"new-tool": "Keukengerei Toevoegen",
"edit-tool": "Keukengerei Bewerken",
"tool-data": "Keukengerei Overzicht"
}
},
"user-registration": {
"user-registration": "Gebruikersregistratie",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Ingen oppskrift funnet",
"ok": "OK",
"options": "Alternativer:",
"plural-name": "Flertalls navn",
"print": "Skriv ut",
"print-preferences": "Skriv ut innstillinger",
"random": "Tilfeldig",
@ -462,7 +463,9 @@
"add-to-plan": "Legg til i Plan",
"add-to-timeline": "Legg til på tidslinjen",
"recipe-added-to-list": "Oppskriften er lagt til i listen",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Oppskriften er lagt til i listen",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Klarte ikke å legge til oppskrift på måltidsplan",
"yield": "Utbytte",
"quantity": "Antall",
@ -669,14 +672,14 @@
"webhooks-caps": "WEBHOOKS",
"webhooks": "Webhooks",
"webhook-name": "Webhook navn",
"description": "The webhooks defined below will be executed when a meal is defined for the day. At the scheduled time the webhooks will be sent with the data from the recipe that is scheduled for the day. Note that webhook execution is not exact. The webhooks are executed on a 5 minutes interval so the webhooks will be executed within 5 +/- minutes of the scheduled."
"description": "Webhooks definert nedenfor vil utføres når et måltid defineres for dagen. På det planlagte tidspunktet blir webhook sendt med data fra oppskriften som er planlagt for dagen. Merke at av tidspunktet ikke er nøyaktig, webhooks utføres med et intervall på 5 minutter, dette betyr at webhooks utføres innen +/- 5 minutter etter planlagt tidspunkt."
},
"bug-report": "Feilrapport",
"bug-report-information": "Bruk denne informasjonen til å rapportere en feil. Gi detaljer om feilen din til utviklere er den beste måten å få problemer på en rask løsning.",
"tracker": "Sporingsagent",
"configuration": "Konfigurasjon",
"docker-volume": "Docker volum",
"docker-volume-help": "Mealie requires that the frontend container and the backend share the same docker volume or storage. This ensures that the frontend container can properly access the images and assets stored on disk.",
"docker-volume-help": "Mealie krever at frontend og backend konteinerene deler samme docker volum/lagring. Dette sikrer at frontend får tilgang til bilder og ressurser lagret på harddisken.",
"volumes-are-misconfigured": "Volumene er feilkonfigurert",
"volumes-are-configured-correctly": "Volumene er riktig konfigurert.",
"status-unknown-try-running-a-validation": "Statusen er ukjent. Prøv å validere.",
@ -688,19 +691,19 @@
"failed": "Mislyktes",
"general-about": "Generelt om",
"application-version": "Programversjon",
"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": "Din nåværende versjon ({0}) samsvarer ikke med den nyeste utgivelsen. Vurder å oppdatere til siste versjon ({1}).",
"mealie-is-up-to-date": "Mealie er oppdatert",
"secure-site": "Sikkert nettsted",
"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-error-text": "Host via localhost eller sikre med https. Utklippstavle og nettleser-APIer virker kanskje ikke.",
"secure-site-success-text": "Tjenesten er tilgjengelig på localhost eller https",
"server-side-base-url": "Serverens sidebase URL",
"server-side-base-url-error-text": "`BASE_URL` is still the default value on API Server. This will cause issues with notifications links generated on the server for emails, etc.",
"server-side-base-url-success-text": "Server Side URL does not match the default",
"server-side-base-url-error-text": "`BASE_URL` er fortsatt satt til standardverdien på API Serveren. Dette kan føre til problemer med varslingslenker generert på serveren for e-post, osv.",
"server-side-base-url-success-text": "Serverside-URL samsvarer ikke med standard",
"ldap-ready": "LDAP klar",
"ldap-ready-error-text": "Not all LDAP Values are configured. This can be ignored if you are not using LDAP Authentication.",
"ldap-ready-success-text": "Required LDAP variables are all set.",
"ldap-ready-error-text": "Ikke alle LDAP-verdier er konfigurert. Dette kan ignoreres hvis du ikke bruker LDAP til Autentisering.",
"ldap-ready-success-text": "Alle de nødvendige LDAP-variablene er satt.",
"build": "Bygg",
"recipe-scraper-version": "Recipe Scraper Version"
"recipe-scraper-version": "OppskriftsScraper versjon"
},
"shopping-list": {
"all-lists": "Alle lister",
@ -725,8 +728,8 @@
"reorder-labels": "Omorganiser etiketter",
"uncheck-all-items": "Fjern merking av alle elementer",
"check-all-items": "Velg alle elementer",
"linked-recipes-count": "No Linked Recipes|One Linked Recipe|{count} Linked Recipes",
"items-checked-count": "No items checked|One item checked|{count} items checked",
"linked-recipes-count": "Ingen lenkede oppskrifter|En lenket oppskrift|{count} Lenkede oppskrifter",
"items-checked-count": "Ingen elementer krysset av|Ett element krysset av|{count} elementer krysset av",
"no-label": "Ingen etikett",
"completed-on": "Fullført på {date}"
},
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Brukeren kan invitere andre til gruppe",
"user-can-manage-group": "Brukeren kan administrere gruppe",
"user-can-organize-group-data": "Brukeren kan organisere gruppedata",
"enable-advanced-features": "Aktiver avanserte funksjoner"
"enable-advanced-features": "Aktiver avanserte funksjoner",
"it-looks-like-this-is-your-first-time-logging-in": "Det ser ut som dette er første gang du logger på.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Ønsker du ikke å se dette lenger? Sørg for å endre e-posten din i brukerinnstillingene dine!"
},
"language-dialog": {
"translated": "oversatt",
@ -883,29 +888,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-warning": "Du har allerede elementer i databasen. Denne handlingen vil ikke rekonfigurere duplikater, du må administrere dem manuelt.",
"combine-food": "Kombiner mat",
"source-food": "Source Food",
"target-food": "Target Food",
"source-food": "Kilde mat",
"target-food": "Mål Mat",
"create-food": "Lag mat",
"food-label": "Mat etikett",
"edit-food": "Rediger mat",
"food-data": "Mat data"
"food-data": "Mat data",
"example-food-singular": "Feks: Tomat",
"example-food-plural": "Feks: Tomater"
},
"units": {
"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",
"source-unit": "Source Unit",
"target-unit": "Target Unit",
"merging-unit-into-unit": "Merging {0} into {1}",
"source-unit": "Kildeenhet",
"target-unit": "Målenhet",
"merging-unit-into-unit": "Slår sammen {0} til {1}",
"create-unit": "Opprett enhet",
"abbreviation": "Forkortelse",
"plural-abbreviation": "Flertallsforkortelse",
"description": "Beskrivelse",
"display-as-fraction": "Vis som brøkdel",
"use-abbreviation": "Bruk forkortelse",
"edit-unit": "Rediger enhet",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Brøk"
"unit-data": "Enhetsdata",
"use-abbv": "Bruk forkortelse.",
"fraction": "Brøk",
"example-unit-singular": "Feks: Spiseskje",
"example-unit-plural": "Feks: Spiseskjeer",
"example-unit-abbreviation-singular": "Feks: SS",
"example-unit-abbreviation-plural": "Feks: SS"
},
"labels": {
"seed-dialog-text": "Lag en database med vanlige enheter basert på ditt lokale språk.",
@ -917,9 +929,9 @@
"purge-exports": "Fjern eksporter",
"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.",
"the-following-recipes-selected-length-will-be-exported": "The following recipes ({0}) will be exported.",
"settings-chosen-explanation": "Settings chosen here, excluding the locked option, will be applied to all selected recipes.",
"selected-length-recipe-s-settings-will-be-updated": "{count} recipe(s) settings will be updated.",
"the-following-recipes-selected-length-will-be-exported": "Følgende oppskrifter ({0}) vil bli eksportert.",
"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": "Innstillingene til {count} oppskrift(er) vil bli oppdatert.",
"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-columns": "Recipe Columns",
@ -934,6 +946,8 @@
"delete-recipes": "Slett oppskrifter",
"source-unit-will-be-deleted": "Kildeenheten vil bli slettet"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Frødata",
"seed": "Seed",
"data-management": "Databehandling",
@ -941,7 +955,22 @@
"select-data": "Velg data",
"select-language": "Velg språk",
"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": "Brukerregistrering",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Nie znaleziono przepisu",
"ok": "OK",
"options": "Opcje:",
"plural-name": "Plural Name",
"print": "Drukuj",
"print-preferences": "Właściwości drukowania",
"random": "Losowa",
@ -462,7 +463,9 @@
"add-to-plan": "Dodaj do planu",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Przepis dodany do listy",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Przepis dodany do planu posiłków",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Nie udało się dodać przepisu do planu posiłków",
"yield": "Wydajność",
"quantity": "Ilość",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Użytkownik może zaprosić innych do grupy",
"user-can-manage-group": "Użytkownik może zarządzać grupą",
"user-can-organize-group-data": "Użytkownik może organizować dane grupy",
"enable-advanced-features": "Włącz zaawansowane funkcje"
"enable-advanced-features": "Włącz zaawansowane funkcje",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "przetłumaczone",
@ -888,7 +893,9 @@
"create-food": "Utwórz Żywność",
"food-label": "Etykieta Żywności",
"edit-food": "Edytuj Żywność",
"food-data": "Dane Żywności"
"food-data": "Dane Żywności",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Wypełnij bazę zwyczajowymi jednostkami dla wybranego języka.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Scalanie {0} do {1}",
"create-unit": "Utwórz Jednostkę",
"abbreviation": "Skrócona nazwa",
"plural-abbreviation": "Plural Abbreviation",
"description": "Opis",
"display-as-fraction": "Wyświetlaj jako ułamek",
"use-abbreviation": "Używaj skróconej nazwy",
"edit-unit": "Edytuj jednostkę",
"unit-data": "Dane Jednostki",
"use-abbv": "Użyj Skr.",
"fraction": "Ułamki"
"fraction": "Ułamki",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Wypełnij bazę zwyczajowymi etykietami dla wybranego języka.",
@ -934,6 +946,8 @@
"delete-recipes": "Usuń Przepisy",
"source-unit-will-be-deleted": "Jednostka źródłowa zostanie usunięta"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Dane przykładowe",
"seed": "Seed",
"data-management": "Zarządzanie Danymi",
@ -941,7 +955,22 @@
"select-data": "Wybierz Dane",
"select-language": "Wybierz język",
"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": "Rejestracja użytkownika",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Nenhuma Receita Encontrada",
"ok": "OK",
"options": "Opções:",
"plural-name": "Plural Name",
"print": "Imprimir",
"print-preferences": "Preferências de impressão",
"random": "Aleatório",
@ -462,7 +463,9 @@
"add-to-plan": "Adicionar ao Plano",
"add-to-timeline": "Adicionar à linha do tempo",
"recipe-added-to-list": "Receita adicionada à lista",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Receita adicionada ao plano de refeições",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Falha ao adicionar a receita ao plano de refeições",
"yield": "Rendimento",
"quantity": "Quantidade",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "O usuário pode convidar outro para o grupo",
"user-can-manage-group": "Usuário pode gerenciar o grupo",
"user-can-organize-group-data": "Usuário pode organizar dados do grupo",
"enable-advanced-features": "Ativar recursos avançados"
"enable-advanced-features": "Ativar recursos avançados",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "traduzido",
@ -888,7 +893,9 @@
"create-food": "Criar Comida",
"food-label": "Rótulo da Comida",
"edit-food": "Editar Comida",
"food-data": "Dados da Comida"
"food-data": "Dados da Comida",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Adicione a base de dados unidades comuns baseadas em seu idioma.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Mesclando {0} em {1}",
"create-unit": "Criar unidade",
"abbreviation": "Abreviação",
"plural-abbreviation": "Plural Abbreviation",
"description": "Descrição",
"display-as-fraction": "Exibir como fração",
"use-abbreviation": "Usar abreviação",
"edit-unit": "Editar Unidade",
"unit-data": "Dados da Unidade",
"use-abbv": "Usar abreviação",
"fraction": "Fração"
"fraction": "Fração",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Semente o banco de dados com rótulos comuns baseados no seu idioma local.",
@ -934,6 +946,8 @@
"delete-recipes": "Excluir Receitas",
"source-unit-will-be-deleted": "Unidade de origem será excluída"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Semear dados",
"seed": "Semear",
"data-management": "Gerenciamento de dados",
@ -941,7 +955,22 @@
"select-data": "Selecionar dados",
"select-language": "Selecionar idioma",
"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": "Cadastro de usuário",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Nenhuma Receita Encontrada",
"ok": "OK",
"options": "Opções:",
"plural-name": "Plural Name",
"print": "Imprimir",
"print-preferences": "Preferências de impressão",
"random": "Aleatório",
@ -462,7 +463,9 @@
"add-to-plan": "Adicionar ao plano",
"add-to-timeline": "Adicionar à Linha Temporal",
"recipe-added-to-list": "Receita adicionada à lista",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Receita adicionada ao plano de refeições",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Erro ao adicionar receita ao plano de refeições",
"yield": "Rendimento",
"quantity": "Quantidade",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "O utilizador pode convidar outro para o grupo",
"user-can-manage-group": "O utilizador pode gerir o grupo",
"user-can-organize-group-data": "O utilizador pode organizar dados do grupo",
"enable-advanced-features": "Habilitar recursos avançados"
"enable-advanced-features": "Habilitar recursos avançados",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "traduzido",
@ -888,7 +893,9 @@
"create-food": "Criar Alimento",
"food-label": "Rótulo de Alimento",
"edit-food": "Editar Alimento",
"food-data": "Dados do Alimento"
"food-data": "Dados do Alimento",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Popule a base de dados com unidades comuns no seu idioma.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "A juntar {0} com {1}",
"create-unit": "Criar Unidade",
"abbreviation": "Abreviatura",
"plural-abbreviation": "Plural Abbreviation",
"description": "Descrição",
"display-as-fraction": "Mostrar como fração",
"use-abbreviation": "Usar abreviatura",
"edit-unit": "Editar unidade",
"unit-data": "Dados da Unidade",
"use-abbv": "Usar Abrev.",
"fraction": "Fração"
"fraction": "Fração",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Adicionar à base de dados rótulos comuns no seu idioma local.",
@ -934,6 +946,8 @@
"delete-recipes": "Eliminar Receitas",
"source-unit-will-be-deleted": "Unidade de origem será eliminada"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Gerar dados",
"seed": "Gerar",
"data-management": "Gestão de dados",
@ -941,7 +955,22 @@
"select-data": "Selecionar dados",
"select-language": "Selecionar idioma",
"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": "Registo de Utilizador",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Nici o rețetă găsită",
"ok": "OK",
"options": "Opțiuni:",
"plural-name": "Plural Name",
"print": "Imprimare",
"print-preferences": "Preferințe de imprimare",
"random": "Aleatoriu",
@ -462,7 +463,9 @@
"add-to-plan": "Adaugă la Plan",
"add-to-timeline": "Adaugă la Cronologie",
"recipe-added-to-list": "Rețeta a fost adăugată la listă",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Rețeta a fist adăugată la planul de mese",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Adăugarea rețetei la planul de mese a eșuat",
"yield": "Yield",
"quantity": "Quantity",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "translated",
@ -888,7 +893,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Seed the database with common units based on your local language.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.",
@ -934,6 +946,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -941,7 +955,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Рецепт не найден",
"ok": "Ок",
"options": "Параметры:",
"plural-name": "Название в мн. ч",
"print": "Печать",
"print-preferences": "Настройки печати",
"random": "Случайный",
@ -462,7 +463,9 @@
"add-to-plan": "Добавить к плану",
"add-to-timeline": "Добавить в историю",
"recipe-added-to-list": "Рецепт добавлен в список",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Рецепт добавлен в план питания",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Не удалось добавить рецепт в план питания",
"yield": "Выход",
"quantity": "Количество",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Пользователь может пригласить других в группу",
"user-can-manage-group": "Пользователь может управлять группой",
"user-can-organize-group-data": "Пользователь может менять групповые данные",
"enable-advanced-features": "Включить доп. функции"
"enable-advanced-features": "Включить доп. функции",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "переведено",
@ -888,7 +893,9 @@
"create-food": "Добавить продукт",
"food-label": "Метка продукта",
"edit-food": "Изменить продукт",
"food-data": "Данные о продуктах"
"food-data": "Данные о продуктах",
"example-food-singular": "пр. Луковица",
"example-food-plural": "пр. Луковиц"
},
"units": {
"seed-dialog-text": "Заполняет базу данных рядовыми единицами измерений на основе выбранного языка.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Объединение {0} в {1}",
"create-unit": "Добавить единицу измерения",
"abbreviation": "Аббревиатура",
"plural-abbreviation": "Сокращение во мн. ч.",
"description": "Описание",
"display-as-fraction": "Отображать как дробь",
"use-abbreviation": "Использовать аббревиатуру",
"edit-unit": "Изменить единицу измерения",
"unit-data": "Данные единицы измерения",
"use-abbv": "Использовать аббревиатуру",
"fraction": "Дробь"
"fraction": "Дробь",
"example-unit-singular": "пр. Столовая ложка",
"example-unit-plural": "пр. Столовых ложек",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Дополнить базу данных типичными единицами измерений на основе выбранного языка.",
@ -934,6 +946,8 @@
"delete-recipes": "Удалить рецепты",
"source-unit-will-be-deleted": "Первая единица измерения будет удалена"
},
"create-alias": "Создать псевдоним",
"manage-aliases": "Управление псевдонимами",
"seed-data": "Заполнить данные",
"seed": "Заполнить",
"data-management": "Управление хранилищем данных",
@ -941,7 +955,22 @@
"select-data": "Выберите данные",
"select-language": "Выберите язык",
"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": "Регистрация",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Žiadny recept nenájdený",
"ok": "OK",
"options": "Možnosti:",
"plural-name": "Plural Name",
"print": "Tlačiť",
"print-preferences": "Nastavenia tlače",
"random": "Náhodné",
@ -462,7 +463,9 @@
"add-to-plan": "Pridať do plánu",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recept bol pridaný do zoznamu",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Recept bol pridaný do stravovacieho plánu",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Pridanie receptu do stravovacieho plánu zlyhalo",
"yield": "Počet porcií",
"quantity": "Množstvo",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Užívateľ môže do skupiny pozvať ďalších",
"user-can-manage-group": "Užívateľ môže spravovať skupinu",
"user-can-organize-group-data": "Užívateľ môže spravovať údaje skupiny",
"enable-advanced-features": "Povoliť pokročilé funkcie"
"enable-advanced-features": "Povoliť pokročilé funkcie",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "preložené",
@ -888,7 +893,9 @@
"create-food": "Vytvoriť jedlo",
"food-label": "Značka jedla",
"edit-food": "Upraviť jedlo",
"food-data": "Údaje o jedle"
"food-data": "Údaje o jedle",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Naplniť databázu z bežnými štítkami podla vášho lokálneho jazyka.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Zlúčiť {0} do {1}",
"create-unit": "Vytvoriť jednotku",
"abbreviation": "Skratky",
"plural-abbreviation": "Plural Abbreviation",
"description": "Popis",
"display-as-fraction": "Zobraziť ako zlomok",
"use-abbreviation": "Použiť skratky",
"edit-unit": "Upraviť jednotku",
"unit-data": "Údaje o jednotke",
"use-abbv": "Použiť skrt.",
"fraction": "Zlomok"
"fraction": "Zlomok",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Naplniť databázu z bežnými štítkami podla vášho lokálneho jazyka.",
@ -934,6 +946,8 @@
"delete-recipes": "Odstrániť recepty",
"source-unit-will-be-deleted": "Zdroj bude vymazaný"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Naplniť dáta",
"seed": "Zdroj",
"data-management": "Správa dát",
@ -941,7 +955,22 @@
"select-data": "Vyberte dáta",
"select-language": "Vyberte jazyk",
"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": "Registrácia",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Ne najdem recepta",
"ok": "V redu",
"options": "Možnosti:",
"plural-name": "Plural Name",
"print": "Natisni",
"print-preferences": "Print Preferences",
"random": "Naključno",
@ -462,7 +463,9 @@
"add-to-plan": "Dodaj v načrt",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recept dodan na seznam",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Recept dodan v načrtovanje obroka",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Napaka pri dodajanji recepta v načrtovanje obroka",
"yield": "Donos",
"quantity": "Količina",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "prevedeno",
@ -888,7 +893,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Napolni podatkovno bazo z običajnimi enotami, glede na vaš lokalni jezik.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Napolni podatkovno bazi s običajnimi oznakami, glede na vaš lokalni jezik.",
@ -934,6 +946,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Napolni podatke",
"seed": "Seed",
"data-management": "Data Management",
@ -941,7 +955,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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": "Registracija uporabnika",

File diff suppressed because it is too large Load Diff

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Inga recept hittades",
"ok": "Ok",
"options": "Alternativ:",
"plural-name": "Plural Name",
"print": "Skriv ut",
"print-preferences": "Utskriftsinställningar",
"random": "Slumpa",
@ -462,7 +463,9 @@
"add-to-plan": "Lägg till i plan",
"add-to-timeline": "Lägg till i tidslinje",
"recipe-added-to-list": "Recept tillagt i listan",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Recept tillagt i måltidsplanen",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Det gick inte att lägga till recept i måltidsplanen",
"yield": "Ger",
"quantity": "Antal",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Användaren kan bjuda in andra till gruppen",
"user-can-manage-group": "Användare kan hantera grupp",
"user-can-organize-group-data": "Användaren kan organisera gruppdata",
"enable-advanced-features": "Aktivera avancerade funktioner"
"enable-advanced-features": "Aktivera avancerade funktioner",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "översatt",
@ -888,7 +893,9 @@
"create-food": "Skapa mat",
"food-label": "Mat etikett",
"edit-food": "Redigera mat",
"food-data": "Mat data"
"food-data": "Mat data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Fyll databasen med vanliga enheter baserade på ditt språk.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Slå samman {0} till {1}",
"create-unit": "Skapa enhet",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Beskrivning",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Redigera enhet",
"unit-data": "Enhetsdata",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Fyll databasen med vanliga etiketter baserade på ditt språk.",
@ -934,6 +946,8 @@
"delete-recipes": "Radera recept",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Exempeldata",
"seed": "Seed",
"data-management": "Datahantering",
@ -941,7 +955,22 @@
"select-data": "Välj data",
"select-language": "Välj språk",
"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": "Användarregistrering",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Tarif Bulunamadı",
"ok": "Tamam",
"options": "Seçenekler:",
"plural-name": "Çoğul Ad",
"print": "Yazdır",
"print-preferences": "Yazdırma Tercihleri",
"random": "Rastgele",
@ -462,7 +463,9 @@
"add-to-plan": "Plana Ekle",
"add-to-timeline": "Zaman Tüneline Ekle",
"recipe-added-to-list": "Tarif listeye eklendi",
"recipes-added-to-list": "Tarifler listeye eklendi",
"recipe-added-to-mealplan": "Tarif yemek planına eklendi",
"failed-to-add-recipes-to-list": "Tarif listeye eklenemedi",
"failed-to-add-recipe-to-mealplan": "Tarif yemek planına eklerken hata oluştu",
"yield": "Yield",
"quantity": "Miktar",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Kullanıcı başkalarını gruba davet edebilir",
"user-can-manage-group": "Kullanıcı grubu yönetebilir",
"user-can-organize-group-data": "Kullanıcı grup verilerini düzenleyebilir",
"enable-advanced-features": "Gelişmiş özellikleri etkinleştir"
"enable-advanced-features": "Gelişmiş özellikleri etkinleştir",
"it-looks-like-this-is-your-first-time-logging-in": "Görünüşe göre ilk defa giriş yapıyorsunuz.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Artık bunu görmek istemiyor musunuz? Kullanıcı ayarlarınızda e-postanızı değiştirmeyi unutmayın!"
},
"language-dialog": {
"translated": "translated",
@ -888,7 +893,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Yiyecek Düzenle",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Seed the database with common units based on your local language.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Kısaltma",
"plural-abbreviation": "Çoğul Kısaltma",
"description": "Açıklama",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.",
@ -934,6 +946,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Takma Ad Oluştur",
"manage-aliases": "Takma Adları Yönet",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -941,7 +955,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"columns": "Columns",
"combine": "Birleştir"
"combine": "Birleştir",
"categories": {
"edit-category": "Kategori Düzenle",
"new-category": "Yeni Kategori",
"category-data": "Kategori Verisi"
},
"tags": {
"new-tag": "Yeni Etiket",
"edit-tag": "Etiketi Düzenle",
"tag-data": "Etiket Verisi"
},
"tools": {
"new-tool": "Yeni Araç",
"edit-tool": "Araçları Düzenle",
"tool-data": "Araç Verisi"
}
},
"user-registration": {
"user-registration": "User Registration",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "Рецепти не знайдені",
"ok": "OK",
"options": "Опції:",
"plural-name": "Назва у множині",
"print": "Друк",
"print-preferences": "Налаштування друку",
"random": "Випадково",
@ -462,7 +463,9 @@
"add-to-plan": "Додати до плану",
"add-to-timeline": "Додати до хроніки",
"recipe-added-to-list": "Рецепт додано до списку",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "Рецепт додано до плану харчування",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "Не вдалося додати рецепт до плану харчування",
"yield": "Вихід",
"quantity": "Кількість",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "Користувач може запрошувати інших в групу",
"user-can-manage-group": "Користувач може керувати групою",
"user-can-organize-group-data": "Користувач може впорядковувати дані групи",
"enable-advanced-features": "Увімкнути додаткові функції"
"enable-advanced-features": "Увімкнути додаткові функції",
"it-looks-like-this-is-your-first-time-logging-in": "Схоже, ви заходите вперше.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Більше не хочете це бачити? Обов'язково змініть адресу електронної пошти в налаштуваннях користувача!"
},
"language-dialog": {
"translated": "перекладено",
@ -888,7 +893,9 @@
"create-food": "Створити продукт",
"food-label": "Етикетка продукту",
"edit-food": "Редагувати продукт",
"food-data": "Дані про продукти"
"food-data": "Дані про продукти",
"example-food-singular": "приклад: Цибулина",
"example-food-plural": "приклад: Цибуля"
},
"units": {
"seed-dialog-text": "Заповнити базу даних розповсюдженими одиницями виміру що відповідають мові.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Об'єднання {0} з {1}",
"create-unit": "Створити одиницю вимірювання",
"abbreviation": "Скорочена назва",
"plural-abbreviation": "Скорочення в множині",
"description": "Опис",
"display-as-fraction": "Відображати як частку",
"use-abbreviation": "Використовувати скорочення",
"edit-unit": "Редагувати одиницю",
"unit-data": "Одиниці виміру",
"use-abbv": "Використовувати скороч-ння.",
"fraction": "Частка"
"fraction": "Частка",
"example-unit-singular": "приклад: Столова ложка",
"example-unit-plural": "приклад: Столові ложки",
"example-unit-abbreviation-singular": "приклад: ст. л",
"example-unit-abbreviation-plural": "приклад: ст. л"
},
"labels": {
"seed-dialog-text": "Заповнити базу даних розповсюдженими категоріями що відповідають мові.",
@ -934,6 +946,8 @@
"delete-recipes": "Видалити рецепти",
"source-unit-will-be-deleted": "Початкову одиницю вимірювання буде видалено"
},
"create-alias": "Створити псевдонім",
"manage-aliases": "Керувати псевдонімами",
"seed-data": "Підготовлені дані",
"seed": "Згенерувати",
"data-management": "Керування даними",
@ -941,7 +955,22 @@
"select-data": "Вибір даних",
"select-language": "Вибір мови",
"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": "Реєстрація користувачів",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "No Recipe Found",
"ok": "OK",
"options": "Options:",
"plural-name": "Plural Name",
"print": "Print",
"print-preferences": "Print Preferences",
"random": "Random",
@ -463,7 +464,9 @@
"add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"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",
"yield": "Yield",
"quantity": "Quantity",
@ -868,7 +871,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "translated",
@ -889,7 +894,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Seed the database with common units based on your local language.",
@ -900,13 +907,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.",
@ -935,6 +947,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -942,7 +956,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "未找到食谱",
"ok": "好的",
"options": "选项:",
"plural-name": "Plural Name",
"print": "打印",
"print-preferences": "打印偏好设置",
"random": "随机",
@ -462,7 +463,9 @@
"add-to-plan": "添加到计划",
"add-to-timeline": "添加到时间线",
"recipe-added-to-list": "食谱已被添加到列表",
"recipes-added-to-list": "Recipes added to list",
"recipe-added-to-mealplan": "食谱已被添加到用餐计划",
"failed-to-add-recipes-to-list": "Failed to add recipe to list",
"failed-to-add-recipe-to-mealplan": "食谱未能添加到用餐计划",
"yield": "Yield",
"quantity": "数量",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "已翻译",
@ -888,7 +893,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Seed the database with common units based on your local language.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.",
@ -934,6 +946,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -941,7 +955,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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",

View File

@ -124,6 +124,7 @@
"no-recipe-found": "找不到食譜",
"ok": "好的",
"options": "選項:",
"plural-name": "Plural Name",
"print": "列印",
"print-preferences": "Print Preferences",
"random": "隨機",
@ -462,7 +463,9 @@
"add-to-plan": "Add to Plan",
"add-to-timeline": "Add to Timeline",
"recipe-added-to-list": "Recipe added to list",
"recipes-added-to-list": "Recipes added to list",
"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",
"yield": "Yield",
"quantity": "Quantity",
@ -867,7 +870,9 @@
"user-can-invite-other-to-group": "User can invite other to group",
"user-can-manage-group": "User can manage group",
"user-can-organize-group-data": "User can organize group data",
"enable-advanced-features": "Enable advanced features"
"enable-advanced-features": "Enable advanced features",
"it-looks-like-this-is-your-first-time-logging-in": "It looks like this is your first time logging in.",
"dont-want-to-see-this-anymore-be-sure-to-change-your-email": "Don't want to see this anymore? Be sure to change your email in your user settings!"
},
"language-dialog": {
"translated": "translated",
@ -888,7 +893,9 @@
"create-food": "Create Food",
"food-label": "Food Label",
"edit-food": "Edit Food",
"food-data": "Food Data"
"food-data": "Food Data",
"example-food-singular": "ex: Onion",
"example-food-plural": "ex: Onions"
},
"units": {
"seed-dialog-text": "Seed the database with common units based on your local language.",
@ -899,13 +906,18 @@
"merging-unit-into-unit": "Merging {0} into {1}",
"create-unit": "Create Unit",
"abbreviation": "Abbreviation",
"plural-abbreviation": "Plural Abbreviation",
"description": "Description",
"display-as-fraction": "Display as Fraction",
"use-abbreviation": "Use Abbreviation",
"edit-unit": "Edit Unit",
"unit-data": "Unit Data",
"use-abbv": "Use Abbv.",
"fraction": "Fraction"
"fraction": "Fraction",
"example-unit-singular": "ex: Tablespoon",
"example-unit-plural": "ex: Tablespoons",
"example-unit-abbreviation-singular": "ex: Tbsp",
"example-unit-abbreviation-plural": "ex: Tbsps"
},
"labels": {
"seed-dialog-text": "Seed the database with common labels based on your local language.",
@ -934,6 +946,8 @@
"delete-recipes": "Delete Recipes",
"source-unit-will-be-deleted": "Source Unit will be deleted"
},
"create-alias": "Create Alias",
"manage-aliases": "Manage Aliases",
"seed-data": "Seed Data",
"seed": "Seed",
"data-management": "Data Management",
@ -941,7 +955,22 @@
"select-data": "Select Data",
"select-language": "Select Language",
"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",

View File

@ -34,6 +34,9 @@ export interface AppInfo {
demoStatus: boolean;
allowSignup: boolean;
}
export interface AppStartupInfo {
isFirstLogin: boolean;
}
export interface AppStatistics {
totalRecipes: number;
totalUsers: number;
@ -41,6 +44,22 @@ export interface AppStatistics {
uncategorizedRecipes: number;
untaggedRecipes: number;
}
export interface AppTheme {
lightPrimary?: string;
lightAccent?: string;
lightSecondary?: string;
lightSuccess?: string;
lightInfo?: string;
lightWarning?: string;
lightError?: string;
darkPrimary?: string;
darkAccent?: string;
darkSecondary?: string;
darkSuccess?: string;
darkInfo?: string;
darkWarning?: string;
darkError?: string;
}
export interface BackupOptions {
recipes?: boolean;
settings?: boolean;

View File

@ -6,7 +6,14 @@
*/
export type WebhookType = "mealplan";
export type SupportedMigrations = "nextcloud" | "chowdown" | "copymethat" | "paprika" | "mealie_alpha" | "tandoor" | "plantoeat";
export type SupportedMigrations =
| "nextcloud"
| "chowdown"
| "copymethat"
| "paprika"
| "mealie_alpha"
| "tandoor"
| "plantoeat";
export interface CreateGroupPreferences {
privateGroup?: boolean;
@ -263,39 +270,56 @@ export interface RecipeIngredient {
}
export interface IngredientUnit {
name: string;
pluralName?: string;
description?: string;
extras?: {
[k: string]: unknown;
};
fraction?: boolean;
abbreviation?: string;
pluralAbbreviation?: string;
useAbbreviation?: boolean;
aliases?: IngredientUnitAlias[];
id: string;
createdAt?: string;
updateAt?: string;
}
export interface IngredientUnitAlias {
name: string;
}
export interface CreateIngredientUnit {
name: string;
pluralName?: string;
description?: string;
extras?: {
[k: string]: unknown;
};
fraction?: boolean;
abbreviation?: string;
pluralAbbreviation?: string;
useAbbreviation?: boolean;
aliases?: CreateIngredientUnitAlias[];
}
export interface CreateIngredientUnitAlias {
name: string;
}
export interface IngredientFood {
name: string;
pluralName?: string;
description?: string;
extras?: {
[k: string]: unknown;
};
labelId?: string;
aliases?: IngredientFoodAlias[];
id: string;
label?: MultiPurposeLabelSummary;
createdAt?: string;
updateAt?: string;
}
export interface IngredientFoodAlias {
name: string;
}
export interface MultiPurposeLabelSummary {
name: string;
color?: string;
@ -304,11 +328,16 @@ export interface MultiPurposeLabelSummary {
}
export interface CreateIngredientFood {
name: string;
pluralName?: string;
description?: string;
extras?: {
[k: string]: unknown;
};
labelId?: string;
aliases?: CreateIngredientFoodAlias[];
}
export interface CreateIngredientFoodAlias {
name: string;
}
export interface ShoppingListCreate {
name?: string;

View File

@ -465,7 +465,7 @@ export interface ScrapeRecipe {
export interface ScrapeRecipeTest {
url: string;
}
export interface SlugResponse { }
export interface SlugResponse {}
export interface TagIn {
name: string;
}

View File

@ -5,6 +5,7 @@
/* Do not modify it by hand - just update the pydantic models and then re-run the script
*/
export type OrderByNullPosition = "first" | "last";
export type OrderDirection = "asc" | "desc";
export interface ErrorResponse {
@ -19,6 +20,7 @@ export interface PaginationQuery {
page?: number;
perPage?: number;
orderBy?: string;
orderByNullPosition?: OrderByNullPosition;
orderDirection?: OrderDirection & string;
queryFilter?: string;
paginationSeed?: string;

View File

@ -243,7 +243,7 @@ export default defineComponent({
},
head() {
return {
title: this.$t("settings.site-settings") as string,
title: this.$t("admin.maintenance.page-title") as string,
};
},
});

View File

@ -30,8 +30,10 @@ export default defineComponent({
actions,
};
},
head: {
title: "Categories",
head() {
return {
title: this.$tc("category.categories"),
};
},
});
</script>

View File

@ -44,6 +44,9 @@ export default defineComponent({
foods: i18n.tc("general.foods"),
units: i18n.tc("general.units"),
labels: i18n.tc("data-pages.labels.labels"),
categories: i18n.tc("category.categories"),
tags: i18n.tc("tag.tags"),
tools: i18n.tc("tool.tools"),
};
const route = useRoute();
@ -53,6 +56,7 @@ export default defineComponent({
text: i18n.t("general.recipes"),
value: "new",
to: "/group/data/recipes",
divider: true,
},
{
text: i18n.t("general.foods"),
@ -68,7 +72,23 @@ export default defineComponent({
text: i18n.t("data-pages.labels.labels"),
value: "new",
to: "/group/data/labels",
divider: true,
},
{
text: i18n.t("category.categories"),
value: "new",
to: "/group/data/categories",
},
{
text: i18n.t("tag.tags"),
value: "new",
to: "/group/data/tags",
},
{
text: i18n.t("tool.tools"),
value: "new",
to: "/group/data/tools",
}
]);
const buttonText = computed(() => {

View File

@ -0,0 +1,174 @@
<template>
<div>
<!-- Create Dialog -->
<BaseDialog
v-model="state.createDialog"
:title="$t('data-pages.categories.new-category')"
:icon="$globals.icons.categories"
@submit="createCategory"
>
<v-card-text>
<v-form ref="domNewCategoryForm">
<v-text-field
v-model="createTarget.name"
autofocus
:label="$t('general.name')"
:rules="[validators.required]"
></v-text-field>
</v-form>
</v-card-text>
</BaseDialog>
<!-- Edit Dialog -->
<BaseDialog
v-model="state.editDialog"
:icon="$globals.icons.categories"
:title="$t('data-pages.categories.edit-category')"
:submit-text="$tc('general.save')"
@submit="editSaveCategory"
>
<v-card-text v-if="editTarget">
<div class="mt-4">
<v-text-field v-model="editTarget.name" :label="$t('general.name')"> </v-text-field>
</div>
</v-card-text>
</BaseDialog>
<!-- Delete Dialog -->
<BaseDialog
v-model="state.deleteDialog"
:title="$tc('general.confirm')"
:icon="$globals.icons.alertCircle"
color="error"
@confirm="deleteCategory"
>
<v-card-text>
{{ $t("general.confirm-delete-generic") }}
</v-card-text>
</BaseDialog>
<!-- Recipe Data Table -->
<BaseCardSectionTitle :icon="$globals.icons.categories" section :title="$tc('data-pages.categories.category-data')"> </BaseCardSectionTitle>
<CrudTable
:table-config="tableConfig"
:headers.sync="tableHeaders"
:data="categories || []"
:bulk-actions="[]"
@delete-one="deleteEventHandler"
@edit-one="editEventHandler"
>
<template #button-row>
<BaseButton create @click="state.createDialog = true">{{ $t("general.create") }}</BaseButton>
</template>
</CrudTable>
</div>
</template>
<script lang="ts">
import { defineComponent, reactive, ref, useContext } from "@nuxtjs/composition-api";
import { validators } from "~/composables/use-validators";
import { useCategoryStore, useCategoryData } from "~/composables/store";
import { RecipeCategory } from "~/lib/api/types/admin";
export default defineComponent({
setup() {
const { i18n } = useContext();
const tableConfig = {
hideColumns: true,
canExport: true,
};
const tableHeaders = [
{
text: i18n.t("general.id"),
value: "id",
show: false,
},
{
text: i18n.t("general.name"),
value: "name",
show: true,
},
];
const state = reactive({
createDialog: false,
editDialog: false,
deleteDialog: false,
});
const categoryData = useCategoryData();
const categoryStore = useCategoryStore();
// ============================================================
// Create Category
async function createCategory() {
// @ts-ignore - only property really required is the name (RecipeOrganizerPage)
await categoryStore.actions.createOne({ name: categoryData.data.name });
categoryData.reset();
state.createDialog = false;
}
// ============================================================
// Edit Category
const editTarget = ref<RecipeCategory | null>(null);
function editEventHandler(item: RecipeCategory) {
state.editDialog = true;
editTarget.value = item;
}
async function editSaveCategory() {
if (!editTarget.value) {
return;
}
await categoryStore.actions.updateOne(editTarget.value);
state.editDialog = false;
}
// ============================================================
// Delete Category
const deleteTarget = ref<RecipeCategory | null>(null);
function deleteEventHandler(item: RecipeCategory) {
state.deleteDialog = true;
deleteTarget.value = item;
}
async function deleteCategory() {
if (!deleteTarget.value || deleteTarget.value.id === undefined) {
return;
}
await categoryStore.actions.deleteOne(deleteTarget.value.id);
state.deleteDialog = false;
}
return {
state,
tableConfig,
tableHeaders,
categories: categoryStore.items,
validators,
// create
createTarget: categoryData.data,
createCategory,
// edit
editTarget,
editEventHandler,
editSaveCategory,
// delete
deleteTarget,
deleteEventHandler,
deleteCategory
};
},
});
</script>

View File

@ -168,7 +168,7 @@
<template #button-row>
<BaseButton create @click="createDialog = true" />
<BaseButton @click="mergeDialog = true">
<template #icon> {{ $globals.icons.foods }} </template>
<template #icon> {{ $globals.icons.externalLink }} </template>
{{ $t('data-pages.combine') }}
</BaseButton>
</template>

View File

@ -90,10 +90,7 @@
@edit-one="editEventHandler"
>
<template #button-row>
<BaseButton create @click="state.createDialog = true">
<template #icon> {{ $globals.icons.tags }} </template>
{{ $t("general.create") }}
</BaseButton>
<BaseButton create @click="state.createDialog = true">{{ $t("general.create") }}</BaseButton>
</template>
<template #item.name="{ item }">
<MultiPurposeLabel v-if="item" :label="item">

View File

@ -0,0 +1,175 @@
<template>
<div>
<!-- Create Dialog -->
<BaseDialog
v-model="state.createDialog"
:title="$t('data-pages.tags.new-tag')"
:icon="$globals.icons.tags"
@submit="createTag"
>
<v-card-text>
<v-form ref="domNewTagForm">
<v-text-field
v-model="createTarget.name"
autofocus
:label="$t('general.name')"
:rules="[validators.required]"
></v-text-field>
</v-form>
</v-card-text>
</BaseDialog>
<!-- Edit Dialog -->
<BaseDialog
v-model="state.editDialog"
:icon="$globals.icons.tags"
:title="$t('data-pages.tags.edit-tag')"
:submit-text="$tc('general.save')"
@submit="editSaveTag"
>
<v-card-text v-if="editTarget">
<div class="mt-4">
<v-text-field v-model="editTarget.name" :label="$t('general.name')"> </v-text-field>
</div>
</v-card-text>
</BaseDialog>
<!-- Delete Dialog -->
<BaseDialog
v-model="state.deleteDialog"
:title="$tc('general.confirm')"
:icon="$globals.icons.alertCircle"
color="error"
@confirm="deleteTag"
>
<v-card-text>
{{ $t("general.confirm-delete-generic") }}
</v-card-text>
</BaseDialog>
<!-- Recipe Data Table -->
<BaseCardSectionTitle :icon="$globals.icons.tags" section :title="$tc('data-pages.tags.tag-data')"> </BaseCardSectionTitle>
<CrudTable
:table-config="tableConfig"
:headers.sync="tableHeaders"
:data="tags || []"
:bulk-actions="[]"
@delete-one="deleteEventHandler"
@edit-one="editEventHandler"
>
<template #button-row>
<BaseButton create @click="state.createDialog = true">{{ $t("general.create") }}</BaseButton>
</template>
</CrudTable>
</div>
</template>
<script lang="ts">
import { defineComponent, reactive, ref, useContext } from "@nuxtjs/composition-api";
import { validators } from "~/composables/use-validators";
import { useTagStore, useTagData } from "~/composables/store";
import { RecipeTag } from "~/lib/api/types/admin";
export default defineComponent({
setup() {
const { i18n } = useContext();
const tableConfig = {
hideColumns: true,
canExport: true,
};
const tableHeaders = [
{
text: i18n.t("general.id"),
value: "id",
show: false,
},
{
text: i18n.t("general.name"),
value: "name",
show: true,
},
];
const state = reactive({
createDialog: false,
editDialog: false,
deleteDialog: false,
});
const tagData = useTagData();
const tagStore = useTagStore();
// ============================================================
// Create Tag
async function createTag() {
// @ts-ignore - only property really required is the name (RecipeOrganizerPage)
await tagStore.actions.createOne({ name: tagData.data.name });
tagData.reset();
state.createDialog = false;
}
// ============================================================
// Edit Tag
const editTarget = ref<RecipeTag | null>(null);
function editEventHandler(item: RecipeTag) {
state.editDialog = true;
editTarget.value = item;
}
async function editSaveTag() {
if (!editTarget.value) {
return;
}
await tagStore.actions.updateOne(editTarget.value);
state.editDialog = false;
}
// ============================================================
// Delete Tag
const deleteTarget = ref<RecipeTag | null>(null);
function deleteEventHandler(item: RecipeTag) {
state.deleteDialog = true;
deleteTarget.value = item;
}
async function deleteTag() {
if (!deleteTarget.value || deleteTarget.value.id === undefined) {
return;
}
await tagStore.actions.deleteOne(deleteTarget.value.id);
state.deleteDialog = false;
}
return {
state,
tableConfig,
tableHeaders,
tags: tagStore.items,
validators,
// create
createTarget: tagData.data,
createTag,
// edit
editTarget,
editEventHandler,
editSaveTag,
// delete
deleteTarget,
deleteEventHandler,
deleteTag
};
},
});
</script>

View File

@ -0,0 +1,187 @@
<template>
<div>
<!-- Create Dialog -->
<BaseDialog
v-model="state.createDialog"
:title="$t('data-pages.tools.new-tool')"
:icon="$globals.icons.potSteam"
@submit="createTool"
>
<v-card-text>
<v-form ref="domNewToolForm">
<v-text-field
v-model="createTarget.name"
autofocus
:label="$t('general.name')"
:rules="[validators.required]"
></v-text-field>
<v-checkbox v-model="createTarget.onHand" :label="$t('tool.on-hand')">
</v-checkbox>
</v-form>
</v-card-text>
</BaseDialog>
<!-- Edit Dialog -->
<BaseDialog
v-model="state.editDialog"
:icon="$globals.icons.potSteam"
:title="$t('data-pages.tools.edit-tool')"
:submit-text="$tc('general.save')"
@submit="editSaveTool"
>
<v-card-text v-if="editTarget">
<div class="mt-4">
<v-text-field v-model="editTarget.name" :label="$t('general.name')"> </v-text-field>
<v-checkbox v-model="editTarget.onHand" :label="$t('tool.on-hand')"> </v-checkbox>
</div>
</v-card-text>
</BaseDialog>
<!-- Delete Dialog -->
<BaseDialog
v-model="state.deleteDialog"
:title="$tc('general.confirm')"
:icon="$globals.icons.alertCircle"
color="error"
@confirm="deleteTool"
>
<v-card-text>
{{ $t("general.confirm-delete-generic") }}
</v-card-text>
</BaseDialog>
<!-- Tool Data Table -->
<BaseCardSectionTitle :icon="$globals.icons.potSteam" section :title="$tc('data-pages.tools.tool-data')"> </BaseCardSectionTitle>
<CrudTable
:table-config="tableConfig"
:headers.sync="tableHeaders"
:data="tools || []"
:bulk-actions="[]"
@delete-one="deleteEventHandler"
@edit-one="editEventHandler"
>
<template #button-row>
<BaseButton create @click="state.createDialog = true">{{ $t("general.create") }}</BaseButton>
</template>
<template #item.onHand="{ item }">
<v-icon :color="item.onHand ? 'success' : undefined">
{{ item.onHand ? $globals.icons.check : $globals.icons.close }}
</v-icon>
</template>
</CrudTable>
</div>
</template>
<script lang="ts">
import { defineComponent, reactive, ref, useContext } from "@nuxtjs/composition-api";
import { validators } from "~/composables/use-validators";
import { useToolStore, useToolData } from "~/composables/store";
import { RecipeTool } from "~/lib/api/types/admin";
export default defineComponent({
setup() {
const { i18n } = useContext();
const tableConfig = {
hideColumns: true,
canExport: true,
};
const tableHeaders = [
{
text: i18n.t("general.id"),
value: "id",
show: false,
},
{
text: i18n.t("general.name"),
value: "name",
show: true,
},
{
text: i18n.t("tool.on-hand"),
value: "onHand",
show: true,
},
];
const state = reactive({
createDialog: false,
editDialog: false,
deleteDialog: false,
});
const toolData = useToolData();
const toolStore = useToolStore();
// ============================================================
// Create Tag
async function createTool() {
// @ts-ignore - only property really required is the name and onHand (RecipeOrganizerPage)
await toolStore.actions.createOne({ name: toolData.data.name, onHand: toolData.data.onHand });
toolData.reset();
state.createDialog = false;
}
// ============================================================
// Edit Tag
const editTarget = ref<RecipeTool | null>(null);
function editEventHandler(item: RecipeTool) {
state.editDialog = true;
editTarget.value = item;
}
async function editSaveTool() {
if (!editTarget.value) {
return;
}
await toolStore.actions.updateOne(editTarget.value);
state.editDialog = false;
}
// ============================================================
// Delete Tag
const deleteTarget = ref<RecipeTool | null>(null);
function deleteEventHandler(item: RecipeTool) {
state.deleteDialog = true;
deleteTarget.value = item;
}
async function deleteTool() {
if (!deleteTarget.value || deleteTarget.value.id === undefined) {
return;
}
await toolStore.actions.deleteOne(deleteTarget.value.id);
state.deleteDialog = false;
}
return {
state,
tableConfig,
tableHeaders,
tools: toolStore.items,
validators,
// create
createTarget: toolData.data,
createTool,
// edit
editTarget,
editEventHandler,
editSaveTool,
// delete
deleteTarget,
deleteEventHandler,
deleteTool
};
},
});
</script>

View File

@ -180,7 +180,7 @@
<BaseButton create @click="createDialog = true" />
<BaseButton @click="mergeDialog = true">
<template #icon> {{ $globals.icons.units }} </template>
<template #icon> {{ $globals.icons.externalLink }} </template>
{{ $t('data-pages.combine') }}
</BaseButton>
</template>

View File

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

View File

@ -7,6 +7,18 @@
'bg-off-white': !$vuetify.theme.dark && !isDark,
}"
>
<v-alert v-if="isFirstLogin" class="my-4" type="info" icon="mdi-information">
<div>
<p class="mb-3">
{{ $tc('user.it-looks-like-this-is-your-first-time-logging-in')}}
</p>
<p class="mb-1"><strong>{{ $tc('user.username') }}:</strong> changeme@example.com</p>
<p class="mb-3"><strong>{{ $tc('user.password') }}:</strong> MyPassword</p>
<p>
{{ $tc('user.dont-want-to-see-this-anymore-be-sure-to-change-your-email') }}
</p>
</div>
</v-alert>
<v-card tag="section" class="d-flex flex-column align-center" width="600px">
<v-toolbar width="100%" color="primary" class="d-flex justify-center mb-4" dark>
<v-toolbar-title class="headline text-h4"> Mealie </v-toolbar-title>
@ -101,12 +113,14 @@
</template>
<script lang="ts">
import { defineComponent, ref, useContext, computed, reactive, useRouter } from "@nuxtjs/composition-api";
import { defineComponent, ref, useContext, computed, reactive, useRouter, useAsync } from "@nuxtjs/composition-api";
import { useDark, whenever } from "@vueuse/core";
import { useLoggedInState } from "~/composables/use-logged-in-state";
import { useAppInfo } from "~/composables/api";
import { usePasswordField } from "~/composables/use-passwords";
import { alert } from "~/composables/use-toast";
import { useAsyncKey } from "~/composables/use-utils";
import { AppStartupInfo } from "~/lib/api/types/admin";
export default defineComponent({
layout: "blank",
@ -115,7 +129,7 @@ export default defineComponent({
const isDark = useDark();
const router = useRouter();
const { $auth, i18n } = useContext();
const { $auth, i18n, $axios } = useContext();
const { loggedIn } = useLoggedInState();
const groupSlug = computed(() => $auth.user?.groupSlug);
@ -133,6 +147,13 @@ export default defineComponent({
remember: false,
});
const isFirstLogin = ref(false)
useAsync(async () => {
const data = await $axios.get<AppStartupInfo>("/api/app/about/startup-info");
isFirstLogin.value = data.data.isFirstLogin;
}, useAsyncKey());
const loggingIn = ref(false);
const appInfo = useAppInfo();
@ -182,6 +203,7 @@ export default defineComponent({
passwordIcon,
inputType,
togglePasswordShow,
isFirstLogin
};
},

View File

@ -104,7 +104,6 @@ async def system_startup():
indent=4,
exclude={
"SECRET",
"DEFAULT_PASSWORD",
"SFTP_PASSWORD",
"SFTP_USERNAME",
"DB_URL", # replace by DB_URL_PUBLIC for logs

View File

@ -85,8 +85,17 @@ class AppSettings(BaseSettings):
return self.DB_PROVIDER.db_url_public if self.DB_PROVIDER else None
DEFAULT_GROUP: str = "Home"
DEFAULT_EMAIL: str = "changeme@example.com"
DEFAULT_PASSWORD: str = "MyPassword"
_DEFAULT_EMAIL: str = "changeme@example.com"
"""
This is the default email used for the first user created in the database. This is only used if no users
exist in the database. it should no longer be set by end users.
"""
_DEFAULT_PASSWORD: str = "MyPassword"
"""
This is the default password used for the first user created in the database. This is only used if no users
exist in the database. it should no longer be set by end users.
"""
# ===============================================
# Email Configuration

View File

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

View File

@ -13,7 +13,7 @@ def dev_users() -> list[dict]:
"full_name": "Jason",
"username": "jason",
"email": "jason@example.com",
"password": hash_password(settings.DEFAULT_PASSWORD),
"password": hash_password(settings._DEFAULT_PASSWORD),
"group": settings.DEFAULT_GROUP,
"admin": False,
},
@ -21,7 +21,7 @@ def dev_users() -> list[dict]:
"full_name": "Bob",
"username": "bob",
"email": "bob@example.com",
"password": hash_password(settings.DEFAULT_PASSWORD),
"password": hash_password(settings._DEFAULT_PASSWORD),
"group": settings.DEFAULT_GROUP,
"admin": False,
},
@ -29,7 +29,7 @@ def dev_users() -> list[dict]:
"full_name": "Sarah",
"username": "sarah",
"email": "sarah@example.com",
"password": hash_password(settings.DEFAULT_PASSWORD),
"password": hash_password(settings._DEFAULT_PASSWORD),
"group": settings.DEFAULT_GROUP,
"admin": False,
},
@ -37,7 +37,7 @@ def dev_users() -> list[dict]:
"full_name": "Sammy",
"username": "sammy",
"email": "sammy@example.com",
"password": hash_password(settings.DEFAULT_PASSWORD),
"password": hash_password(settings._DEFAULT_PASSWORD),
"group": settings.DEFAULT_GROUP,
"admin": False,
},
@ -48,8 +48,8 @@ def default_user_init(db: AllRepositories):
default_user = {
"full_name": "Change Me",
"username": "admin",
"email": settings.DEFAULT_EMAIL,
"password": hash_password(settings.DEFAULT_PASSWORD),
"email": settings._DEFAULT_EMAIL,
"password": hash_password(settings._DEFAULT_PASSWORD),
"group": settings.DEFAULT_GROUP,
"admin": True,
}

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

View File

@ -1,8 +1,11 @@
from fastapi import APIRouter, Response
from fastapi import APIRouter, Depends, Response
from sqlalchemy.orm.session import Session
from mealie.core.config import get_app_settings
from mealie.core.settings.static import APP_VERSION
from mealie.schema.admin.about import AppInfo, AppTheme
from mealie.db.db_setup import generate_session
from mealie.db.models.users.users import User
from mealie.schema.admin.about import AppInfo, AppStartupInfo, AppTheme
router = APIRouter(prefix="/about")
@ -20,6 +23,21 @@ def get_app_info():
)
@router.get("/startup-info", response_model=AppStartupInfo)
def get_startup_info(session: Session = Depends(generate_session)):
"""returns helpful startup information"""
settings = get_app_settings()
is_first_login = False
with session as db:
if db.query(User).filter_by(email=settings._DEFAULT_EMAIL).count() > 0:
is_first_login = True
return AppStartupInfo(
is_first_login=is_first_login,
)
@router.get("/theme", response_model=AppTheme)
def get_app_theme(resp: Response):
"""Get's the current theme settings"""

View File

@ -1,5 +1,5 @@
# This file is auto-generated by gen_schema_exports.py
from .about import AdminAboutInfo, AppInfo, AppStatistics, CheckAppConfig, DockerVolumeText
from .about import AdminAboutInfo, AppInfo, AppStartupInfo, AppStatistics, AppTheme, CheckAppConfig, DockerVolumeText
from .backup import AllBackups, BackupFile, BackupOptions, CreateBackup, ImportJob
from .email import EmailReady, EmailSuccess, EmailTest
from .maintenance import MaintenanceLogs, MaintenanceStorageDetails, MaintenanceSummary
@ -27,7 +27,9 @@ __all__ = [
"MaintenanceSummary",
"AdminAboutInfo",
"AppInfo",
"AppStartupInfo",
"AppStatistics",
"AppTheme",
"CheckAppConfig",
"DockerVolumeText",
"EmailReady",

View File

@ -34,6 +34,15 @@ class AppTheme(MealieModel):
dark_error: str = "#EF5350"
class AppStartupInfo(MealieModel):
is_first_login: bool
"""
The applications best guess that a user hasn't logged in. Currently, it really
on indicates that the 'changeme@example.com' user is still in the database. Once
it is removed, this will always return False.
"""
class AdminAboutInfo(AppInfo):
versionLatest: str
api_port: int

View File

@ -92,6 +92,25 @@ __all__ = [
"RecipeToolOut",
"RecipeToolResponse",
"RecipeToolSave",
"RecipeTimelineEventCreate",
"RecipeTimelineEventIn",
"RecipeTimelineEventOut",
"RecipeTimelineEventPagination",
"RecipeTimelineEventUpdate",
"TimelineEventImage",
"TimelineEventType",
"RecipeAsset",
"RecipeSettings",
"RecipeShareToken",
"RecipeShareTokenCreate",
"RecipeShareTokenSave",
"RecipeShareTokenSummary",
"RecipeDuplicate",
"RecipeSlug",
"RecipeZipTokenResponse",
"SlugResponse",
"UpdateImageResponse",
"RecipeNote",
"CategoryBase",
"CategoryIn",
"CategoryOut",
@ -102,6 +121,12 @@ __all__ = [
"TagIn",
"TagOut",
"TagSave",
"RecipeCommentCreate",
"RecipeCommentOut",
"RecipeCommentPagination",
"RecipeCommentSave",
"RecipeCommentUpdate",
"UserBase",
"AssignCategories",
"AssignSettings",
"AssignTags",
@ -109,34 +134,10 @@ __all__ = [
"ExportBase",
"ExportRecipes",
"ExportTypes",
"RecipeShareToken",
"RecipeShareTokenCreate",
"RecipeShareTokenSave",
"RecipeShareTokenSummary",
"ScrapeRecipe",
"ScrapeRecipeTest",
"RecipeCommentCreate",
"RecipeCommentOut",
"RecipeCommentPagination",
"RecipeCommentSave",
"RecipeCommentUpdate",
"UserBase",
"RecipeImageTypes",
"CreateRecipe",
"CreateRecipeBulk",
"CreateRecipeByUrlBulk",
"Recipe",
"RecipeCategory",
"RecipeCategoryPagination",
"RecipeLastMade",
"RecipePagination",
"RecipeSummary",
"RecipeTag",
"RecipeTagPagination",
"RecipeTool",
"RecipeToolPagination",
"IngredientReferences",
"RecipeStep",
"RecipeImageTypes",
"Nutrition",
"CreateIngredientFood",
"CreateIngredientFoodAlias",
"CreateIngredientUnit",
@ -159,20 +160,19 @@ __all__ = [
"SaveIngredientFood",
"SaveIngredientUnit",
"UnitFoodBase",
"RecipeAsset",
"RecipeTimelineEventCreate",
"RecipeTimelineEventIn",
"RecipeTimelineEventOut",
"RecipeTimelineEventPagination",
"RecipeTimelineEventUpdate",
"TimelineEventImage",
"TimelineEventType",
"RecipeDuplicate",
"RecipeSlug",
"RecipeZipTokenResponse",
"SlugResponse",
"UpdateImageResponse",
"Nutrition",
"RecipeSettings",
"RecipeNote",
"CreateRecipe",
"CreateRecipeBulk",
"CreateRecipeByUrlBulk",
"Recipe",
"RecipeCategory",
"RecipeCategoryPagination",
"RecipeLastMade",
"RecipePagination",
"RecipeSummary",
"RecipeTag",
"RecipeTagPagination",
"RecipeTool",
"RecipeToolPagination",
"ScrapeRecipe",
"ScrapeRecipeTest",
]

View File

@ -1,5 +1,5 @@
# This file is auto-generated by gen_schema_exports.py
from .pagination import OrderDirection, PaginationBase, PaginationQuery, RecipeSearchQuery
from .pagination import OrderByNullPosition, OrderDirection, PaginationBase, PaginationQuery, RecipeSearchQuery
from .query_filter import LogicalOperator, QueryFilter, QueryFilterComponent, RelationalKeyword, RelationalOperator
from .query_search import SearchFilter
from .responses import ErrorResponse, FileTokenResponse, SuccessResponse
@ -15,6 +15,7 @@ __all__ = [
"QueryFilterComponent",
"RelationalKeyword",
"RelationalOperator",
"OrderByNullPosition",
"OrderDirection",
"PaginationBase",
"PaginationQuery",

View File

@ -116,7 +116,7 @@ class UserOut(UserBase):
@property
def is_default_user(self) -> bool:
return self.email == settings.DEFAULT_EMAIL.strip().lower()
return self.email == settings._DEFAULT_EMAIL.strip().lower()
@classmethod
def loader_options(cls) -> list[LoaderOption]:

View File

@ -10,7 +10,7 @@ from tests.utils import api_routes
def admin_token(api_client: TestClient):
settings = get_app_settings()
form_data = {"username": settings.DEFAULT_EMAIL, "password": settings.DEFAULT_PASSWORD}
form_data = {"username": settings._DEFAULT_EMAIL, "password": settings._DEFAULT_PASSWORD}
return utils.login(form_data, api_client)
@ -18,7 +18,7 @@ def admin_token(api_client: TestClient):
def admin_user(api_client: TestClient):
settings = get_app_settings()
form_data = {"username": settings.DEFAULT_EMAIL, "password": settings.DEFAULT_PASSWORD}
form_data = {"username": settings._DEFAULT_EMAIL, "password": settings._DEFAULT_PASSWORD}
token = utils.login(form_data, api_client)
@ -33,7 +33,7 @@ def admin_user(api_client: TestClient):
yield utils.TestUser(
_group_id=user_data.get("groupId"),
user_id=user_data.get("id"),
password=settings.DEFAULT_PASSWORD,
password=settings._DEFAULT_PASSWORD,
username=user_data.get("username"),
email=user_data.get("email"),
token=token,

View File

@ -36,7 +36,7 @@ def test_init_superuser(api_client: TestClient, admin_user: TestUser):
assert admin_data["groupId"] == admin_user.group_id
assert admin_data["fullName"] == "Change Me"
assert admin_data["email"] == settings.DEFAULT_EMAIL
assert admin_data["email"] == settings._DEFAULT_EMAIL
def test_create_user(api_client: TestClient, admin_token):
@ -95,7 +95,7 @@ def test_update_other_user_as_not_admin(api_client: TestClient, unique_user: Tes
update_data = {
"id": unique_user.user_id,
"fullName": "Updated Name",
"email": settings.DEFAULT_EMAIL,
"email": settings._DEFAULT_EMAIL,
"group": "Home",
"admin": True,
}

View File

@ -14,7 +14,7 @@ from tests.utils.fixture_schemas import TestUser
def test_failed_login(api_client: TestClient):
settings = get_app_settings()
form_data = {"username": settings.DEFAULT_EMAIL, "password": "WRONG_PASSWORD"}
form_data = {"username": settings._DEFAULT_EMAIL, "password": "WRONG_PASSWORD"}
response = api_client.post(api_routes.auth_token, data=form_data)
assert response.status_code == 401
@ -23,7 +23,7 @@ def test_failed_login(api_client: TestClient):
def test_superuser_login(api_client: TestClient, admin_token):
settings = get_app_settings()
form_data = {"username": settings.DEFAULT_EMAIL, "password": settings.DEFAULT_PASSWORD}
form_data = {"username": settings._DEFAULT_EMAIL, "password": settings._DEFAULT_PASSWORD}
response = api_client.post(api_routes.auth_token, data=form_data)
assert response.status_code == 200

View File

@ -9,7 +9,6 @@ from mealie.core.settings.settings import AppSettings
def test_non_default_settings(monkeypatch):
monkeypatch.setenv("DEFAULT_GROUP", "Test Group")
monkeypatch.setenv("DEFAULT_PASSWORD", "Test Password")
monkeypatch.setenv("API_PORT", "8000")
monkeypatch.setenv("API_DOCS", "False")
@ -17,7 +16,6 @@ def test_non_default_settings(monkeypatch):
app_settings = get_app_settings()
assert app_settings.DEFAULT_GROUP == "Test Group"
assert app_settings.DEFAULT_PASSWORD == "Test Password"
assert app_settings.API_PORT == 8000
assert app_settings.API_DOCS is False

View File

@ -45,6 +45,10 @@ admin_users_unlock = "/api/admin/users/unlock"
"""`/api/admin/users/unlock`"""
app_about = "/api/app/about"
"""`/api/app/about`"""
app_about_startup_info = "/api/app/about/startup-info"
"""`/api/app/about/startup-info`"""
app_about_theme = "/api/app/about/theme"
"""`/api/app/about/theme`"""
auth_refresh = "/api/auth/refresh"
"""`/api/auth/refresh`"""
auth_token = "/api/auth/token"
@ -183,6 +187,8 @@ users_reset_password = "/api/users/reset-password"
"""`/api/users/reset-password`"""
users_self = "/api/users/self"
"""`/api/users/self`"""
users_self_group = "/api/users/self/group"
"""`/api/users/self/group`"""
utils_download = "/api/utils/download"
"""`/api/utils/download`"""
validators_group = "/api/validators/group"