Compare commits

...

7 Commits

Author SHA1 Message Date
github-actions[bot]
9ec1599427 chore: automatic locale sync (#5705)
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
2025-07-13 14:36:47 +00:00
Kuchenpirat
9cfc54b1f5 fix: user & household creation (#5699) 2025-07-13 13:57:28 +00:00
Hayden
40d2ac9a6b chore(l10n): New Crowdin updates (#5706) 2025-07-13 12:05:51 +02:00
Hayden
44db525049 chore(l10n): New Crowdin updates (#5701) 2025-07-12 21:41:46 +00:00
Kuchenpirat
d737cb3e14 fix: set correct github tag in init py (#5693) 2025-07-12 08:54:14 -05:00
Hayden
1034d87a99 chore(l10n): New Crowdin updates (#5691) 2025-07-12 12:30:57 +02:00
Kuchenpirat
1243e6804c fix: crud table bulk actions (#5686) 2025-07-12 00:47:54 +00:00
13 changed files with 1467 additions and 1542 deletions

View File

@@ -17,7 +17,7 @@ jobs:
name: Build Package name: Build Package
uses: ./.github/workflows/build-package.yml uses: ./.github/workflows/build-package.yml
with: with:
tag: release tag: ${{ github.event.release.tag_name }}
publish: publish:
permissions: permissions:

View File

@@ -42,7 +42,7 @@
color="info" color="info"
variant="elevated" variant="elevated"
:items="bulkActions" :items="bulkActions"
v-bind="bulkActionListener" v-on="bulkActionListener"
/> />
<slot name="button-row" /> <slot name="button-row" />
</v-card-actions> </v-card-actions>
@@ -55,7 +55,7 @@
</div> </div>
<v-data-table <v-data-table
v-model="selected" v-model="selected"
item-key="id" return-object
:headers="activeHeaders" :headers="activeHeaders"
:show-select="bulkActions.length > 0" :show-select="bulkActions.length > 0"
:sort-by="sortBy" :sort-by="sortBy"

View File

@@ -45,28 +45,11 @@ export const useGroupSelf = function () {
export const useGroups = function () { export const useGroups = function () {
const api = useUserApi(); const api = useUserApi();
const loading = ref(false); const loading = ref(false);
const groups = ref<GroupSummary[] | null>(null);
function getAllGroups() { async function getAllGroups() {
loading.value = true; loading.value = true;
const asyncKey = String(Date.now()); const { data } = await api.groups.getAll(1, -1, { orderBy: "name", orderDirection: "asc" });
const { data: groups } = useAsyncData(asyncKey, async () => {
const { data } = await api.groups.getAll(1, -1, { orderBy: "name", orderDirection: "asc" }); ;
if (data) {
return data.items;
}
else {
return null;
}
});
loading.value = false;
return groups;
}
async function refreshAllGroups() {
loading.value = true;
const { data } = await api.groups.getAll(1, -1, { orderBy: "name", orderDirection: "asc" }); ;
if (data) { if (data) {
groups.value = data.items; groups.value = data.items;
@@ -78,11 +61,15 @@ export const useGroups = function () {
loading.value = false; loading.value = false;
} }
async function refreshAllGroups() {
await getAllGroups();
}
async function deleteGroup(id: string | number) { async function deleteGroup(id: string | number) {
loading.value = true; loading.value = true;
const { data } = await api.groups.deleteOne(id); const { data } = await api.groups.deleteOne(id);
loading.value = false; loading.value = false;
refreshAllGroups(); await refreshAllGroups();
return data; return data;
} }
@@ -93,9 +80,13 @@ export const useGroups = function () {
if (data && groups.value) { if (data && groups.value) {
groups.value.push(data); groups.value.push(data);
} }
loading.value = false;
} }
const groups = getAllGroups(); // Initialize data on first call
if (!groups.value) {
getAllGroups();
}
return { groups, getAllGroups, refreshAllGroups, deleteGroup, createGroup }; return { groups, getAllGroups, refreshAllGroups, deleteGroup, createGroup };
}; };

View File

@@ -48,28 +48,11 @@ export const useHouseholdSelf = function () {
export const useAdminHouseholds = function () { export const useAdminHouseholds = function () {
const api = useAdminApi(); const api = useAdminApi();
const loading = ref(false); const loading = ref(false);
const households = ref<HouseholdInDB[] | null>(null);
function getAllHouseholds() { async function getAllHouseholds() {
loading.value = true; loading.value = true;
const asyncKey = String(Date.now()); const { data } = await api.households.getAll(1, -1, { orderBy: "name, group.name", orderDirection: "asc" });
const { data: households } = useAsyncData(asyncKey, async () => {
const { data } = await api.households.getAll(1, -1, { orderBy: "name, group.name", orderDirection: "asc" });
if (data) {
return data.items;
}
else {
return null;
}
});
loading.value = false;
return households;
}
async function refreshAllHouseholds() {
loading.value = true;
const { data } = await api.households.getAll(1, -1, { orderBy: "name, group.name", orderDirection: "asc" }); ;
if (data) { if (data) {
households.value = data.items; households.value = data.items;
@@ -81,11 +64,15 @@ export const useAdminHouseholds = function () {
loading.value = false; loading.value = false;
} }
async function refreshAllHouseholds() {
await getAllHouseholds();
}
async function deleteHousehold(id: string | number) { async function deleteHousehold(id: string | number) {
loading.value = true; loading.value = true;
const { data } = await api.households.deleteOne(id); const { data } = await api.households.deleteOne(id);
loading.value = false; loading.value = false;
refreshAllHouseholds(); await refreshAllHouseholds();
return data; return data;
} }
@@ -96,9 +83,9 @@ export const useAdminHouseholds = function () {
if (data && households.value) { if (data && households.value) {
households.value.push(data); households.value.push(data);
} }
loading.value = false;
} }
const households = getAllHouseholds();
function useHouseholdsInGroup(groupIdRef: Ref<string>) { function useHouseholdsInGroup(groupIdRef: Ref<string>) {
return computed( return computed(
() => { () => {
@@ -109,6 +96,10 @@ export const useAdminHouseholds = function () {
); );
} }
if (!households.value) {
getAllHouseholds();
}
return { return {
households, households,
useHouseholdsInGroup, useHouseholdsInGroup,

View File

@@ -93,7 +93,7 @@ export const LOCALES = [
{ {
name: "Nederlands (Dutch)", name: "Nederlands (Dutch)",
value: "nl-NL", value: "nl-NL",
progress: 39, progress: 42,
dir: "ltr", dir: "ltr",
}, },
{ {
@@ -135,7 +135,7 @@ export const LOCALES = [
{ {
name: "Magyar (Hungarian)", name: "Magyar (Hungarian)",
value: "hu-HU", value: "hu-HU",
progress: 38, progress: 39,
dir: "ltr", dir: "ltr",
}, },
{ {
@@ -213,7 +213,7 @@ export const LOCALES = [
{ {
name: "Deutsch (German)", name: "Deutsch (German)",
value: "de-DE", value: "de-DE",
progress: 46, progress: 55,
dir: "ltr", dir: "ltr",
}, },
{ {

View File

@@ -1,47 +1,47 @@
/* eslint-disable @typescript-eslint/no-require-imports */ /* eslint-disable @typescript-eslint/no-require-imports */
const datetimeFormats = { const datetimeFormats = {
// CODE_GEN_ID: DATE_LOCALES // CODE_GEN_ID: DATE_LOCALES
"hu-HU": require("./lang/dateTimeFormats/hu-HU.json"),
"no-NO": require("./lang/dateTimeFormats/no-NO.json"),
"nl-NL": require("./lang/dateTimeFormats/nl-NL.json"),
"pl-PL": require("./lang/dateTimeFormats/pl-PL.json"),
"da-DK": require("./lang/dateTimeFormats/da-DK.json"),
"fr-CA": require("./lang/dateTimeFormats/fr-CA.json"),
"fr-BE": require("./lang/dateTimeFormats/fr-BE.json"),
"it-IT": require("./lang/dateTimeFormats/it-IT.json"),
"sl-SI": require("./lang/dateTimeFormats/sl-SI.json"),
"sr-SP": require("./lang/dateTimeFormats/sr-SP.json"),
"is-IS": require("./lang/dateTimeFormats/is-IS.json"),
"ja-JP": require("./lang/dateTimeFormats/ja-JP.json"),
"fr-FR": require("./lang/dateTimeFormats/fr-FR.json"),
"ca-ES": require("./lang/dateTimeFormats/ca-ES.json"),
"tr-TR": require("./lang/dateTimeFormats/tr-TR.json"), "tr-TR": require("./lang/dateTimeFormats/tr-TR.json"),
"fi-FI": require("./lang/dateTimeFormats/fi-FI.json"),
"hr-HR": require("./lang/dateTimeFormats/hr-HR.json"),
"pt-BR": require("./lang/dateTimeFormats/pt-BR.json"),
"sk-SK": require("./lang/dateTimeFormats/sk-SK.json"),
"zh-CN": require("./lang/dateTimeFormats/zh-CN.json"), "zh-CN": require("./lang/dateTimeFormats/zh-CN.json"),
"pt-PT": require("./lang/dateTimeFormats/pt-PT.json"), "ja-JP": require("./lang/dateTimeFormats/ja-JP.json"),
"en-GB": require("./lang/dateTimeFormats/en-GB.json"), "en-GB": require("./lang/dateTimeFormats/en-GB.json"),
"ca-ES": require("./lang/dateTimeFormats/ca-ES.json"),
"it-IT": require("./lang/dateTimeFormats/it-IT.json"),
"pl-PL": require("./lang/dateTimeFormats/pl-PL.json"),
"pt-PT": require("./lang/dateTimeFormats/pt-PT.json"),
"ro-RO": require("./lang/dateTimeFormats/ro-RO.json"), "ro-RO": require("./lang/dateTimeFormats/ro-RO.json"),
"cs-CZ": require("./lang/dateTimeFormats/cs-CZ.json"), "sr-SP": require("./lang/dateTimeFormats/sr-SP.json"),
"en-US": require("./lang/dateTimeFormats/en-US.json"), "hr-HR": require("./lang/dateTimeFormats/hr-HR.json"),
"lv-LV": require("./lang/dateTimeFormats/lv-LV.json"),
"ko-KR": require("./lang/dateTimeFormats/ko-KR.json"),
"bg-BG": require("./lang/dateTimeFormats/bg-BG.json"),
"gl-ES": require("./lang/dateTimeFormats/gl-ES.json"),
"de-DE": require("./lang/dateTimeFormats/de-DE.json"), "de-DE": require("./lang/dateTimeFormats/de-DE.json"),
"lt-LT": require("./lang/dateTimeFormats/lt-LT.json"),
"ru-RU": require("./lang/dateTimeFormats/ru-RU.json"),
"he-IL": require("./lang/dateTimeFormats/he-IL.json"),
"el-GR": require("./lang/dateTimeFormats/el-GR.json"),
"zh-TW": require("./lang/dateTimeFormats/zh-TW.json"), "zh-TW": require("./lang/dateTimeFormats/zh-TW.json"),
"af-ZA": require("./lang/dateTimeFormats/af-ZA.json"), "af-ZA": require("./lang/dateTimeFormats/af-ZA.json"),
"fr-CA": require("./lang/dateTimeFormats/fr-CA.json"),
"he-IL": require("./lang/dateTimeFormats/he-IL.json"),
"pt-BR": require("./lang/dateTimeFormats/pt-BR.json"),
"cs-CZ": require("./lang/dateTimeFormats/cs-CZ.json"),
"fr-FR": require("./lang/dateTimeFormats/fr-FR.json"),
"ru-RU": require("./lang/dateTimeFormats/ru-RU.json"),
"is-IS": require("./lang/dateTimeFormats/is-IS.json"),
"sk-SK": require("./lang/dateTimeFormats/sk-SK.json"),
"el-GR": require("./lang/dateTimeFormats/el-GR.json"),
"fr-BE": require("./lang/dateTimeFormats/fr-BE.json"),
"da-DK": require("./lang/dateTimeFormats/da-DK.json"),
"hu-HU": require("./lang/dateTimeFormats/hu-HU.json"),
"es-ES": require("./lang/dateTimeFormats/es-ES.json"), "es-ES": require("./lang/dateTimeFormats/es-ES.json"),
"gl-ES": require("./lang/dateTimeFormats/gl-ES.json"),
"no-NO": require("./lang/dateTimeFormats/no-NO.json"),
"lt-LT": require("./lang/dateTimeFormats/lt-LT.json"),
"en-US": require("./lang/dateTimeFormats/en-US.json"),
"sv-SE": require("./lang/dateTimeFormats/sv-SE.json"), "sv-SE": require("./lang/dateTimeFormats/sv-SE.json"),
"ar-SA": require("./lang/dateTimeFormats/ar-SA.json"), "ko-KR": require("./lang/dateTimeFormats/ko-KR.json"),
"vi-VN": require("./lang/dateTimeFormats/vi-VN.json"), "bg-BG": require("./lang/dateTimeFormats/bg-BG.json"),
"sl-SI": require("./lang/dateTimeFormats/sl-SI.json"),
"uk-UA": require("./lang/dateTimeFormats/uk-UA.json"), "uk-UA": require("./lang/dateTimeFormats/uk-UA.json"),
"lv-LV": require("./lang/dateTimeFormats/lv-LV.json"),
"ar-SA": require("./lang/dateTimeFormats/ar-SA.json"),
"nl-NL": require("./lang/dateTimeFormats/nl-NL.json"),
"vi-VN": require("./lang/dateTimeFormats/vi-VN.json"),
"fi-FI": require("./lang/dateTimeFormats/fi-FI.json"),
// END: DATE_LOCALES // END: DATE_LOCALES
}; };

View File

@@ -599,7 +599,7 @@
"create-recipe-from-an-image": "Créer une recette à partir dune image", "create-recipe-from-an-image": "Créer une recette à partir dune image",
"create-recipe-from-an-image-description": "Créez une recette en téléchargeant une image de celle-ci. Mealie utilisera lIA pour tenter dextraire le texte et de créer une recette.", "create-recipe-from-an-image-description": "Créez une recette en téléchargeant une image de celle-ci. Mealie utilisera lIA pour tenter dextraire le texte et de créer une recette.",
"crop-and-rotate-the-image": "Rogner et pivoter limage pour que seul le texte soit visible, et quil soit dans la bonne orientation.", "crop-and-rotate-the-image": "Rogner et pivoter limage pour que seul le texte soit visible, et quil soit dans la bonne orientation.",
"create-from-images": "Create from Images", "create-from-images": "Créer à partir dimages",
"should-translate-description": "Traduire la recette dans ma langue", "should-translate-description": "Traduire la recette dans ma langue",
"please-wait-image-procesing": "Veuillez patienter, limage est en cours de traitement. Cela peut prendre du temps.", "please-wait-image-procesing": "Veuillez patienter, limage est en cours de traitement. Cela peut prendre du temps.",
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.", "please-wait-images-processing": "Please wait, the images are processing. This may take some time.",

View File

@@ -241,48 +241,48 @@ export default defineNuxtConfig({
i18n: { i18n: {
locales: [ locales: [
// CODE_GEN_ID: MESSAGE_LOCALES // CODE_GEN_ID: MESSAGE_LOCALES
{ code: "hu-HU", file: "hu-HU.ts" },
{ code: "no-NO", file: "no-NO.ts" },
{ code: "nl-NL", file: "nl-NL.ts" },
{ code: "pl-PL", file: "pl-PL.ts" },
{ code: "da-DK", file: "da-DK.ts" },
{ code: "fr-CA", file: "fr-CA.ts" },
{ code: "fr-BE", file: "fr-BE.ts" },
{ code: "it-IT", file: "it-IT.ts" },
{ code: "sl-SI", file: "sl-SI.ts" },
{ code: "sr-SP", file: "sr-SP.ts" },
{ code: "is-IS", file: "is-IS.ts" },
{ code: "ja-JP", file: "ja-JP.ts" },
{ code: "fr-FR", file: "fr-FR.ts" },
{ code: "ca-ES", file: "ca-ES.ts" },
{ code: "tr-TR", file: "tr-TR.ts" }, { code: "tr-TR", file: "tr-TR.ts" },
{ code: "fi-FI", file: "fi-FI.ts" },
{ code: "hr-HR", file: "hr-HR.ts" },
{ code: "pt-BR", file: "pt-BR.ts" },
{ code: "sk-SK", file: "sk-SK.ts" },
{ code: "zh-CN", file: "zh-CN.ts" }, { code: "zh-CN", file: "zh-CN.ts" },
{ code: "pt-PT", file: "pt-PT.ts" }, { code: "ja-JP", file: "ja-JP.ts" },
{ code: "en-GB", file: "en-GB.ts" }, { code: "en-GB", file: "en-GB.ts" },
{ code: "ca-ES", file: "ca-ES.ts" },
{ code: "it-IT", file: "it-IT.ts" },
{ code: "pl-PL", file: "pl-PL.ts" },
{ code: "pt-PT", file: "pt-PT.ts" },
{ code: "ro-RO", file: "ro-RO.ts" }, { code: "ro-RO", file: "ro-RO.ts" },
{ code: "cs-CZ", file: "cs-CZ.ts" }, { code: "sr-SP", file: "sr-SP.ts" },
{ code: "et-EE", file: "et-EE.ts" }, { code: "hr-HR", file: "hr-HR.ts" },
{ code: "en-US", file: "en-US.ts" },
{ code: "lv-LV", file: "lv-LV.ts" },
{ code: "ko-KR", file: "ko-KR.ts" },
{ code: "bg-BG", file: "bg-BG.ts" },
{ code: "gl-ES", file: "gl-ES.ts" },
{ code: "de-DE", file: "de-DE.ts" }, { code: "de-DE", file: "de-DE.ts" },
{ code: "lt-LT", file: "lt-LT.ts" },
{ code: "ru-RU", file: "ru-RU.ts" },
{ code: "he-IL", file: "he-IL.ts" },
{ code: "el-GR", file: "el-GR.ts" },
{ code: "zh-TW", file: "zh-TW.ts" }, { code: "zh-TW", file: "zh-TW.ts" },
{ code: "af-ZA", file: "af-ZA.ts" }, { code: "af-ZA", file: "af-ZA.ts" },
{ code: "fr-CA", file: "fr-CA.ts" },
{ code: "he-IL", file: "he-IL.ts" },
{ code: "pt-BR", file: "pt-BR.ts" },
{ code: "cs-CZ", file: "cs-CZ.ts" },
{ code: "fr-FR", file: "fr-FR.ts" },
{ code: "ru-RU", file: "ru-RU.ts" },
{ code: "is-IS", file: "is-IS.ts" },
{ code: "sk-SK", file: "sk-SK.ts" },
{ code: "el-GR", file: "el-GR.ts" },
{ code: "fr-BE", file: "fr-BE.ts" },
{ code: "da-DK", file: "da-DK.ts" },
{ code: "hu-HU", file: "hu-HU.ts" },
{ code: "es-ES", file: "es-ES.ts" }, { code: "es-ES", file: "es-ES.ts" },
{ code: "gl-ES", file: "gl-ES.ts" },
{ code: "no-NO", file: "no-NO.ts" },
{ code: "lt-LT", file: "lt-LT.ts" },
{ code: "en-US", file: "en-US.ts" },
{ code: "sv-SE", file: "sv-SE.ts" }, { code: "sv-SE", file: "sv-SE.ts" },
{ code: "ar-SA", file: "ar-SA.ts" }, { code: "ko-KR", file: "ko-KR.ts" },
{ code: "vi-VN", file: "vi-VN.ts" }, { code: "bg-BG", file: "bg-BG.ts" },
{ code: "sl-SI", file: "sl-SI.ts" },
{ code: "uk-UA", file: "uk-UA.ts" }, { code: "uk-UA", file: "uk-UA.ts" },
{ code: "et-EE", file: "et-EE.ts" },
{ code: "lv-LV", file: "lv-LV.ts" },
{ code: "ar-SA", file: "ar-SA.ts" },
{ code: "nl-NL", file: "nl-NL.ts" },
{ code: "vi-VN", file: "vi-VN.ts" },
{ code: "fi-FI", file: "fi-FI.ts" },
// END: MESSAGE_LOCALES // END: MESSAGE_LOCALES
], ],
strategy: "no_prefix", strategy: "no_prefix",

View File

@@ -14,7 +14,6 @@
:items="groups" :items="groups"
item-title="name" item-title="name"
item-value="id" item-value="id"
:return-object="false"
variant="filled" variant="filled"
:label="$t('household.household-group')" :label="$t('household.household-group')"
:rules="[validators.required]" :rules="[validators.required]"
@@ -94,10 +93,7 @@
icon icon
color="error" color="error"
variant="text" variant="text"
@click.stop=" @click.stop="confirmDialog = true; deleteTarget = item.id"
confirmDialog = true;
deleteTarget = +item.id;
"
> >
<v-icon> <v-icon>
{{ $globals.icons.delete }} {{ $globals.icons.delete }}
@@ -114,7 +110,7 @@
</v-container> </v-container>
</template> </template>
<script lang="ts"> <script setup lang="ts">
import { fieldTypes } from "~/composables/forms"; import { fieldTypes } from "~/composables/forms";
import { useGroups } from "~/composables/use-groups"; import { useGroups } from "~/composables/use-groups";
import { useAdminHouseholds } from "~/composables/use-households"; import { useAdminHouseholds } from "~/composables/use-households";
@@ -122,92 +118,73 @@ import { validators } from "~/composables/use-validators";
import type { HouseholdInDB } from "~/lib/api/types/household"; import type { HouseholdInDB } from "~/lib/api/types/household";
import type { VForm } from "~/types/auto-forms"; import type { VForm } from "~/types/auto-forms";
export default defineNuxtComponent({ definePageMeta({
setup() { layout: "admin",
definePageMeta({ });
layout: "admin",
});
const i18n = useI18n(); const i18n = useI18n();
// Set page title useSeoMeta({
useSeoMeta({ title: i18n.t("household.manage-households"),
title: i18n.t("household.manage-households"), });
});
const { groups } = useGroups(); const { groups } = useGroups();
const { households, refreshAllHouseholds, deleteHousehold, createHousehold } = useAdminHouseholds(); const { households, deleteHousehold, createHousehold } = useAdminHouseholds();
const refNewHouseholdForm = ref<VForm | null>(null);
const state = reactive({ const refNewHouseholdForm = ref<VForm | null>(null);
createDialog: false,
confirmDialog: false,
loading: false,
deleteTarget: 0,
search: "",
headers: [
{
title: i18n.t("household.household"),
align: "start",
sortable: false,
value: "id",
},
{ title: i18n.t("general.name"), value: "name" },
{ title: i18n.t("group.group"), value: "group" },
{ title: i18n.t("user.total-users"), value: "users" },
{ title: i18n.t("user.webhooks-enabled"), value: "webhookEnable" },
{ title: i18n.t("general.delete"), value: "actions" },
],
updateMode: false,
createHouseholdForm: {
items: [
{
label: i18n.t("household.household-name"),
varName: "name",
type: fieldTypes.TEXT,
rules: ["required"],
},
],
data: {
groupId: "",
name: "",
},
},
});
function openDialog() { const createDialog = ref(false);
state.createDialog = true; const confirmDialog = ref(false);
state.createHouseholdForm.data.name = ""; const deleteTarget = ref<string>("");
state.createHouseholdForm.data.groupId = ""; const search = ref("");
} const updateMode = ref(false);
const router = useRouter(); const headers = [
{
title: i18n.t("household.household"),
align: "start",
sortable: false,
value: "id",
},
{ title: i18n.t("general.name"), value: "name" },
{ title: i18n.t("group.group"), value: "group" },
{ title: i18n.t("user.total-users"), value: "users" },
{ title: i18n.t("user.webhooks-enabled"), value: "webhookEnable" },
{ title: i18n.t("general.delete"), value: "actions" },
];
function handleRowClick(item: HouseholdInDB) { const createHouseholdForm = reactive({
router.push(`/admin/manage/households/${item.id}`); items: [
} {
label: i18n.t("household.household-name"),
async function handleCreateSubmit() { varName: "name",
if (!refNewHouseholdForm.value?.validate()) { type: fieldTypes.TEXT,
return; rules: ["required"],
} },
],
state.createDialog = false; data: {
await createHousehold(state.createHouseholdForm.data); groupId: "",
} name: "",
return {
...toRefs(state),
refNewHouseholdForm,
groups,
households,
validators,
refreshAllHouseholds,
deleteHousehold,
handleCreateSubmit,
openDialog,
handleRowClick,
};
}, },
}); });
function openDialog() {
createDialog.value = true;
createHouseholdForm.data.name = "";
createHouseholdForm.data.groupId = "";
}
const router = useRouter();
function handleRowClick(item: HouseholdInDB) {
router.push(`/admin/manage/households/${item.id}`);
}
async function handleCreateSubmit() {
if (!refNewHouseholdForm.value?.validate()) {
return;
}
createDialog.value = false;
await createHousehold(createHouseholdForm.data);
}
</script> </script>

View File

@@ -21,26 +21,23 @@
<v-card variant="outlined"> <v-card variant="outlined">
<v-card-text> <v-card-text>
<v-select <v-select
v-if="groups" v-model="selectedGroup"
v-model="selectedGroupId" :items="groups || []"
:items="groups"
item-title="name" item-title="name"
item-value="id" return-object
:return-object="false"
variant="filled" variant="filled"
:label="$t('group.user-group')" :label="$t('group.user-group')"
:rules="[validators.required]" :rules="[validators.required]"
/> />
<v-select <v-select
v-model="newUserData.household" v-model="newUserData.household"
:disabled="!selectedGroupId" :disabled="!selectedGroup"
:items="households" :items="households"
item-title="name" item-title="name"
item-value="name" item-value="name"
:return-object="false"
variant="filled" variant="filled"
:label="$t('household.user-household')" :label="$t('household.user-household')"
:hint="selectedGroupId ? '' : $t('group.you-must-select-a-group-before-selecting-a-household')" :hint="selectedGroup ? '' : $t('group.you-must-select-a-group-before-selecting-a-household')"
persistent-hint persistent-hint
:rules="[validators.required]" :rules="[validators.required]"
/> />
@@ -60,82 +57,51 @@
</v-container> </v-container>
</template> </template>
<script lang="ts"> <script setup lang="ts">
import { useAdminApi } from "~/composables/api"; import { useAdminApi } from "~/composables/api";
import { useGroups } from "~/composables/use-groups"; import { useGroups } from "~/composables/use-groups";
import { useAdminHouseholds } from "~/composables/use-households";
import { useUserForm } from "~/composables/use-users"; import { useUserForm } from "~/composables/use-users";
import { validators } from "~/composables/use-validators"; import { validators } from "~/composables/use-validators";
import type { UserIn } from "~/lib/api/types/user"; import type { GroupInDB, UserIn } from "~/lib/api/types/user";
import type { VForm } from "~/types/auto-forms"; import type { VForm } from "~/types/auto-forms";
export default defineNuxtComponent({ definePageMeta({
setup() { layout: "admin",
definePageMeta({
layout: "admin",
});
const { userForm } = useUserForm();
const { groups } = useGroups();
const { useHouseholdsInGroup } = useAdminHouseholds();
const router = useRouter();
// ==============================================
// New User Form
const refNewUserForm = ref<VForm | null>(null);
const adminApi = useAdminApi();
const selectedGroupId = ref<string>("");
const households = useHouseholdsInGroup(selectedGroupId);
const selectedGroup = computed(() => {
return groups.value?.find(group => group.id === selectedGroupId.value);
});
const state = reactive({
newUserData: {
username: "",
fullName: "",
email: "",
admin: false,
group: selectedGroup.value?.name || "",
household: "",
advanced: false,
canInvite: false,
canManage: false,
canOrganize: false,
password: "",
authMethod: "Mealie",
},
});
watch(selectedGroup, (newGroup) => {
state.newUserData.group = newGroup?.name || "";
state.newUserData.household = "";
});
async function handleSubmit() {
if (!refNewUserForm.value?.validate()) return;
const { response } = await adminApi.users.createOne(state.newUserData as UserIn);
if (response?.status === 201) {
router.push("/admin/manage/users");
}
}
return {
...toRefs(state),
userForm,
refNewUserForm,
handleSubmit,
groups,
selectedGroupId,
households,
validators,
};
},
}); });
const { userForm } = useUserForm();
const { groups } = useGroups();
const router = useRouter();
const refNewUserForm = ref<VForm | null>(null);
const adminApi = useAdminApi();
const selectedGroup = ref<GroupInDB | undefined>(undefined);
const households = computed(() => selectedGroup.value?.households || []);
const newUserData = ref({
username: "",
fullName: "",
email: "",
admin: false,
group: computed(() => selectedGroup.value?.name || ""),
household: "",
advanced: false,
canInvite: false,
canManage: false,
canOrganize: false,
password: "",
authMethod: "Mealie",
});
async function handleSubmit() {
if (!refNewUserForm.value?.validate()) return;
const { response } = await adminApi.users.createOne(newUserData.value as UserIn);
if (response?.status === 201) {
router.push("/admin/manage/users");
}
}
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

File diff suppressed because it is too large Load Diff

View File

@@ -4,31 +4,31 @@
"garlic": { "garlic": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "garlic", "name": "fokhagyma",
"plural_name": "garlics" "plural_name": "fokhagyma"
}, },
"onion": { "onion": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "onion", "name": "hagyma",
"plural_name": "onions" "plural_name": "hagyma"
}, },
"bell pepper": { "bell pepper": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "bell pepper", "name": "kaliforniai paprika",
"plural_name": "bell peppers" "plural_name": "kaliforniai paprika"
}, },
"carrot": { "carrot": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "carrot", "name": "sárgarépa",
"plural_name": "carrots" "plural_name": "sárgarépa"
}, },
"scallion": { "scallion": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "scallion", "name": "újhagyma",
"plural_name": "zöldhagyma" "plural_name": "zöldhagyma"
}, },
"zucchini": { "zucchini": {
@@ -52,8 +52,8 @@
"yellow onion": { "yellow onion": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "yellow onion", "name": "vöröshagyma",
"plural_name": "yellow onions" "plural_name": "vöröshagyma"
}, },
"celery": { "celery": {
"aliases": [], "aliases": [],
@@ -82,8 +82,8 @@
"cherry tomato": { "cherry tomato": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cherry tomato", "name": "koktélparadicsom",
"plural_name": "cherry tomatoes" "plural_name": "koktélparadicsom"
}, },
"cucumber": { "cucumber": {
"aliases": [], "aliases": [],
@@ -105,11 +105,11 @@
}, },
"chile pepper": { "chile pepper": {
"aliases": [ "aliases": [
"capsicum" "kaliforniai paprika"
], ],
"description": "", "description": "",
"name": "chile pepper", "name": "chili paprika",
"plural_name": "chile peppers" "plural_name": "chili paprika"
}, },
"sweet potato": { "sweet potato": {
"aliases": [], "aliases": [],
@@ -126,20 +126,20 @@
"heart of palm": { "heart of palm": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "heart of palm", "name": "pálmarügy",
"plural_name": "heart of palms" "plural_name": "pálmarügy"
}, },
"baby green": { "baby green": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "baby green", "name": "salátakeverék",
"plural_name": "baby greens" "plural_name": "salátakeverék"
}, },
"pumpkin": { "pumpkin": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pumpkin", "name": "sütőtök",
"plural_name": "pumpkins" "plural_name": "sütőtök"
}, },
"cauliflower": { "cauliflower": {
"aliases": [], "aliases": [],
@@ -151,258 +151,258 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "káposzta", "name": "káposzta",
"plural_name": "cabbages" "plural_name": "fejes káposzta"
}, },
"asparagu": { "asparagu": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "asparagu", "name": "spárga",
"plural_name": "asparagus" "plural_name": "spárga"
}, },
"kale": { "kale": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "kale", "name": "kelkáposzta",
"plural_name": "kales" "plural_name": "kelkáposzta"
}, },
"arugula": { "arugula": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "arugula", "name": "rukkola",
"plural_name": "arugulas" "plural_name": "rukkola"
}, },
"leek": { "leek": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "leek", "name": "póréhagyma",
"plural_name": "leeks" "plural_name": "póréhagyma"
}, },
"eggplant": { "eggplant": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "eggplant", "name": "padlizsán",
"plural_name": "eggplants" "plural_name": "padlizsán"
}, },
"lettuce": { "lettuce": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "lettuce", "name": "saláta",
"plural_name": "lettuces" "plural_name": "saláta"
}, },
"butternut squash": { "butternut squash": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "butternut squash", "name": "kanadai sütőtök",
"plural_name": "butternut squashes" "plural_name": "kanadai sütőtök"
}, },
"romaine": { "romaine": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "romaine", "name": "római saláta",
"plural_name": "romaines" "plural_name": "római saláta"
}, },
"beetroot": { "beetroot": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "beetroot", "name": "cékla",
"plural_name": "beetroots" "plural_name": "cékla"
}, },
"brussels sprout": { "brussels sprout": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "brussels sprout", "name": "kelbimbó",
"plural_name": "brussels sprouts" "plural_name": "kelbimbó"
}, },
"fennel": { "fennel": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "fennel", "name": "édeskömény",
"plural_name": "fennels" "plural_name": "édeskömény"
}, },
"sun dried tomato": { "sun dried tomato": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "sun dried tomato", "name": "szárított paradicsom",
"plural_name": "sun dried tomatoes" "plural_name": "szárított paradicsom"
}, },
"radish": { "radish": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "radish", "name": "retek",
"plural_name": "radishes" "plural_name": "retkek"
}, },
"red cabbage": { "red cabbage": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "red cabbage", "name": "vöröskáposzta",
"plural_name": "red cabbages" "plural_name": "vöröskáposzta"
}, },
"artichoke": { "artichoke": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "artichoke", "name": "articsóka",
"plural_name": "artichokes" "plural_name": "articsóka"
}, },
"new potato": { "new potato": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "new potato", "name": "újburgonya",
"plural_name": "new potatoes" "plural_name": "újburgonya"
}, },
"summer squash": { "summer squash": {
"aliases": [ "aliases": [
"courgette", "cukkini",
"gem squash" "kis tök"
], ],
"description": "", "description": "",
"name": "summer squash", "name": "főzőtök",
"plural_name": "summer squashes" "plural_name": "főzőtök"
}, },
"mixed green": { "mixed green": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mixed green", "name": "salátakeverék",
"plural_name": "mixed greens" "plural_name": "salátakeverék"
}, },
"parsnip": { "parsnip": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "parsnip", "name": "paszternák",
"plural_name": "parsnips" "plural_name": "paszternák"
}, },
"baby carrot": { "baby carrot": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "baby carrot", "name": "bébirépa",
"plural_name": "baby carrots" "plural_name": "bébirépa"
}, },
"mixed vegetable": { "mixed vegetable": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mixed vegetable", "name": "zöldségkeverék",
"plural_name": "mixed vegetables" "plural_name": "zöldségkeverék"
}, },
"poblano pepper": { "poblano pepper": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "poblano pepper", "name": "poblano paprika",
"plural_name": "poblano peppers" "plural_name": "poblano paprika"
}, },
"sweet pepper": { "sweet pepper": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "sweet pepper", "name": "édes paprika",
"plural_name": "sweet peppers" "plural_name": "édes paprika"
}, },
"serrano pepper": { "serrano pepper": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "serrano pepper", "name": "serrano paprika",
"plural_name": "serrano peppers" "plural_name": "serrano paprika"
}, },
"cayenne pepper": { "cayenne pepper": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cayenne pepper", "name": "cayenne bors",
"plural_name": "cayenne peppers" "plural_name": "cayenne bors"
}, },
"green tomato": { "green tomato": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "green tomato", "name": "zöld paradicsom",
"plural_name": "green tomatoes" "plural_name": "zöld paradicsom"
}, },
"watercress": { "watercress": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "watercress", "name": "vízitorma",
"plural_name": "watercress" "plural_name": "vízitorma"
}, },
"iceberg": { "iceberg": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "iceberg", "name": "jégsaláta",
"plural_name": "icebergs" "plural_name": "jégsaláta"
}, },
"mashed potato": { "mashed potato": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mashed potato", "name": "burgonyapüré",
"plural_name": "mashed potatoes" "plural_name": "burgonyapüré"
}, },
"horseradish": { "horseradish": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "horseradish", "name": "torma",
"plural_name": "horseradishes" "plural_name": "torma"
}, },
"chard": { "chard": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chard", "name": "mángold",
"plural_name": "chards" "plural_name": "mángold"
}, },
"pimiento": { "pimiento": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pimiento", "name": "kápia paprika",
"plural_name": "pimientoes" "plural_name": "kápia paprika"
}, },
"spaghetti squash": { "spaghetti squash": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "spaghetti squash", "name": "spagettitök",
"plural_name": "spaghetti squashes" "plural_name": "spagettitök"
}, },
"butter lettuce": { "butter lettuce": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "butter lettuce", "name": "fejes saláta",
"plural_name": "butter lettuces" "plural_name": "fejes saláta"
}, },
"hash brown": { "hash brown": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "hash brown", "name": "tócsni",
"plural_name": "hash browns" "plural_name": "tócsni"
}, },
"napa cabbage": { "napa cabbage": {
"aliases": [ "aliases": [
"chinese leaves" "kínai kel"
], ],
"description": "", "description": "",
"name": "napa cabbage", "name": "kínai kel",
"plural_name": "napa cabbages" "plural_name": "kínai kel"
}, },
"celeriac": { "celeriac": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "celeriac", "name": "zeller",
"plural_name": "celeriacs" "plural_name": "zeller"
}, },
"water chestnut": { "water chestnut": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "water chestnut", "name": "vízigesztenye",
"plural_name": "water chestnuts" "plural_name": "vízigesztenye"
}, },
"turnip": { "turnip": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "turnip", "name": "tarlórépa",
"plural_name": "turnips" "plural_name": "tarlórépa"
}, },
"thai chile pepper": { "thai chile pepper": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "thai chile pepper", "name": "thai csili paprika",
"plural_name": "thai chile peppers" "plural_name": "thai csili paprika"
}, },
"bok choy": { "bok choy": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "bok choy", "name": "bordáskel",
"plural_name": "bok choy" "plural_name": "bordáskel"
}, },
"okra": { "okra": {
"aliases": [], "aliases": [],
@@ -413,44 +413,44 @@
"acorn squash": { "acorn squash": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "acorn squash", "name": "makktök",
"plural_name": "acorn squashes" "plural_name": "makktök"
}, },
"corn cob": { "corn cob": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "corn cob", "name": "kukoricacső",
"plural_name": "corn cobs" "plural_name": "kukoricacső"
}, },
"radicchio": { "radicchio": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "radicchio", "name": "vörös cikória",
"plural_name": "radicchio" "plural_name": "vörös cikória"
}, },
"pearl onion": { "pearl onion": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pearl onion", "name": "gyöngyhagyma",
"plural_name": "pearl onions" "plural_name": "gyöngyhagyma"
}, },
"tenderstem broccoli": { "tenderstem broccoli": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "tenderstem broccoli", "name": "brokkolini",
"plural_name": "tenderstem broccolis" "plural_name": "brokkolini"
}, },
"plantain": { "plantain": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "plantain", "name": "főzőbanán",
"plural_name": "plantains" "plural_name": "főzőbanán"
}, },
"leaf lettuce": { "leaf lettuce": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "leaf lettuce", "name": "saláta",
"plural_name": "leaf lettuces" "plural_name": "saláta"
}, },
"pepperoncini": { "pepperoncini": {
"aliases": [], "aliases": [],
@@ -602,25 +602,25 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "arbol chile pepper", "name": "arbol chile pepper",
"plural_name": "arbol chile peppers" "plural_name": "arbol csili paprika"
}, },
"golden beet": { "golden beet": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "golden beet", "name": "sárga cékla",
"plural_name": "golden beets" "plural_name": "sárga cékla"
}, },
"pea shoot": { "pea shoot": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pea shoot", "name": "borsócsíra",
"plural_name": "pea shoots" "plural_name": "borsócsíra"
}, },
"alfalfa": { "alfalfa": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "alfalfa", "name": "lucernacsíra",
"plural_name": "alfalfas" "plural_name": "lucernacsíra"
} }
} }
}, },
@@ -628,129 +628,129 @@
"foods": { "foods": {
"tomato": { "tomato": {
"aliases": [], "aliases": [],
"description": "Yes they are a fruit", "description": "Igen, gyümölcs",
"name": "tomato", "name": "paradicsom",
"plural_name": "tomatoes" "plural_name": "paradicsom"
}, },
"lemon": { "lemon": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "lemon", "name": "citrom",
"plural_name": "lemons" "plural_name": "citrom"
}, },
"lime": { "lime": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "lime", "name": "zöldcitrom",
"plural_name": "limes" "plural_name": "zöldcitrom"
}, },
"apple": { "apple": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "apple", "name": "alma",
"plural_name": "apples" "plural_name": "alma"
}, },
"banana": { "banana": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "banana", "name": "banán",
"plural_name": "bananas" "plural_name": "banán"
}, },
"orange": { "orange": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "orange", "name": "narancs",
"plural_name": "oranges" "plural_name": "narancs"
}, },
"raisin": { "raisin": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "raisin", "name": "mazsola",
"plural_name": "raisins" "plural_name": "mazsola"
}, },
"pineapple": { "pineapple": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pineapple", "name": "ananász",
"plural_name": "pineapples" "plural_name": "ananász"
}, },
"mango": { "mango": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mango", "name": "mangó",
"plural_name": "mangoes" "plural_name": "mangó"
}, },
"peach": { "peach": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "peach", "name": "őszibarack",
"plural_name": "peaches" "plural_name": "őszibarack"
}, },
"date": { "date": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "date", "name": "datolya",
"plural_name": "dates" "plural_name": "datolya"
}, },
"coconut": { "coconut": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "coconut", "name": "kókuszdió",
"plural_name": "coconuts" "plural_name": "kókuszdió"
}, },
"craisin": { "craisin": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "craisin", "name": "aszalt vörösáfonya",
"plural_name": "craisins" "plural_name": "aszalt vörösáfonya"
}, },
"pear": { "pear": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pear", "name": "körte",
"plural_name": "pears" "plural_name": "körte"
}, },
"grape": { "grape": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "grape", "name": "szőlő",
"plural_name": "grapes" "plural_name": "szőlő"
}, },
"pomegranate": { "pomegranate": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pomegranate", "name": "gránátalma",
"plural_name": "pomegranates" "plural_name": "gránátalma"
}, },
"watermelon": { "watermelon": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "watermelon", "name": "görögdinnye",
"plural_name": "watermelons" "plural_name": "görögdinnye"
}, },
"rhubarb": { "rhubarb": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "rhubarb", "name": "rebarbara",
"plural_name": "rhubarbs" "plural_name": "rebarbara"
}, },
"dried apricot": { "dried apricot": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried apricot", "name": "aszalt sárgabarack",
"plural_name": "dried apricots" "plural_name": "aszalt sárgabarack"
}, },
"kiwi": { "kiwi": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "kiwi", "name": "kivi",
"plural_name": "kiwis" "plural_name": "kivi"
}, },
"grapefruit": { "grapefruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "grapefruit", "name": "grapefruit",
"plural_name": "grapefruits" "plural_name": "grapefruit"
}, },
"plum": { "plum": {
"aliases": [], "aliases": [],
@@ -905,86 +905,86 @@
"banana chip": { "banana chip": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "banana chip", "name": "banánchips",
"plural_name": "banana chips" "plural_name": "banánchips"
}, },
"kumquat": { "kumquat": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "kumquat", "name": "törpemandarin",
"plural_name": "kumquats" "plural_name": "törpemandarin"
}, },
"jackfruit": { "jackfruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "jackfruit", "name": "jackfruit",
"plural_name": "jackfruits" "plural_name": "jackfruit"
}, },
"dragon fruit": { "dragon fruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dragon fruit", "name": "sárkánygyümölcs",
"plural_name": "dragon fruits" "plural_name": "sárkánygyümölcs"
}, },
"mixed fruit": { "mixed fruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mixed fruit", "name": "vegyes gyümölcs",
"plural_name": "mixed fruits" "plural_name": "vegyes gyümölcs"
}, },
"asian pear": { "asian pear": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "asian pear", "name": "japán körte",
"plural_name": "asian pears" "plural_name": "japán körte"
}, },
"lychee": { "lychee": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "lychee", "name": "licsi",
"plural_name": "lychees" "plural_name": "licsi"
}, },
"young coconut": { "young coconut": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "young coconut", "name": "zsenge kókuszdió",
"plural_name": "young coconuts" "plural_name": "zsenge kókuszdió"
}, },
"kaffir lime": { "kaffir lime": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "kaffir lime", "name": "kaffir lime",
"plural_name": "kaffir limes" "plural_name": "kaffir lime"
}, },
"star fruit": { "star fruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "star fruit", "name": "csillaggyümölcs",
"plural_name": "star fruits" "plural_name": "csillaggyümölcs"
}, },
"green papaya": { "green papaya": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "green papaya", "name": "zöld papaya",
"plural_name": "green papayas" "plural_name": "zöld papaya"
}, },
"pomelo": { "pomelo": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pomelo", "name": "pomelo",
"plural_name": "pomeloes" "plural_name": "pomelo"
}, },
"chestnut puree": { "chestnut puree": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chestnut puree", "name": "gesztenyepüré",
"plural_name": "chestnut purees" "plural_name": "gesztenyepüré"
}, },
"prickly pear": { "prickly pear": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "prickly pear", "name": "kaktuszfüge",
"plural_name": "prickly pears" "plural_name": "kaktuszfüge"
}, },
"calamansi": { "calamansi": {
"aliases": [], "aliases": [],

View File

@@ -255,7 +255,7 @@
"edelpompoen" "edelpompoen"
], ],
"description": "", "description": "",
"name": "summer squash", "name": "edelpompoenen",
"plural_name": "edelpompoenen" "plural_name": "edelpompoenen"
}, },
"mixed green": { "mixed green": {
@@ -536,7 +536,7 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "yamswortel", "name": "yamswortel",
"plural_name": "yams" "plural_name": "yamswortel"
}, },
"ancho chile pepper": { "ancho chile pepper": {
"aliases": [], "aliases": [],
@@ -547,8 +547,8 @@
"microgreen": { "microgreen": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "microgreen", "name": "microgroen",
"plural_name": "microgreens" "plural_name": "kiemgroenten"
}, },
"boston lettuce": { "boston lettuce": {
"aliases": [], "aliases": [],
@@ -559,55 +559,55 @@
"kohlrabi": { "kohlrabi": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "kohlrabi", "name": "koolrabi",
"plural_name": "kohlrabis" "plural_name": "koolrabi's"
}, },
"fresno chile": { "fresno chile": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "fresno chile", "name": "fresno peper",
"plural_name": "fresno chiles" "plural_name": "fresno pepers"
}, },
"delicata squash": { "delicata squash": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "delicata squash", "name": "delicata pompoen",
"plural_name": "delicata squashes" "plural_name": "delicata pompoenen"
}, },
"frisee": { "frisee": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "frisee", "name": "krulandijvie",
"plural_name": "frisees" "plural_name": "krulandijvie"
}, },
"anaheim pepper": { "anaheim pepper": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "anaheim pepper", "name": "anaheim peper",
"plural_name": "anaheim peppers" "plural_name": "anaheim pepers"
}, },
"cres": { "cres": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cres", "name": "kropsla",
"plural_name": "cress" "plural_name": "kropsla"
}, },
"broccoli slaw": { "broccoli slaw": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "broccoli slaw", "name": "broccoli salade",
"plural_name": "broccoli slaws" "plural_name": "broccoli salades"
}, },
"arbol chile pepper": { "arbol chile pepper": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "arbol chile pepper", "name": "arbol peper",
"plural_name": "arbol chile peppers" "plural_name": "arbol pepers"
}, },
"golden beet": { "golden beet": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "golden beet", "name": "gele biet",
"plural_name": "gele biet" "plural_name": "gele biet"
}, },
"pea shoot": { "pea shoot": {
@@ -628,8 +628,8 @@
"foods": { "foods": {
"tomato": { "tomato": {
"aliases": [], "aliases": [],
"description": "Yes they are a fruit", "description": "Ja, ze zijn fruit",
"name": "tomato", "name": "tomaat",
"plural_name": "tomaten" "plural_name": "tomaten"
}, },
"lemon": { "lemon": {
@@ -839,14 +839,14 @@
"meyer lemon": { "meyer lemon": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "meyer lemon", "name": "meyer citroen",
"plural_name": "meyer lemons" "plural_name": "meyer citroenen"
}, },
"honeydew melon": { "honeydew melon": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "honeydew melon", "name": "honing meloen",
"plural_name": "honeydew melons" "plural_name": "honing meloenen"
}, },
"dried fruit": { "dried fruit": {
"aliases": [], "aliases": [],
@@ -863,50 +863,50 @@
"persimmon": { "persimmon": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "persimmon", "name": "kakivrucht",
"plural_name": "persimmons" "plural_name": "kakivruchten"
}, },
"melon": { "melon": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "melon", "name": "meloen",
"plural_name": "melons" "plural_name": "meloenen"
}, },
"tangerine": { "tangerine": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "tangerine", "name": "mandarijn",
"plural_name": "tangerines" "plural_name": "mandarijnen"
}, },
"dried mango": { "dried mango": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried mango", "name": "gedroogde mango",
"plural_name": "dried mangoes" "plural_name": "gedroogde mango's"
}, },
"dried apple": { "dried apple": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried apple", "name": "gedroogde appel",
"plural_name": "dried apples" "plural_name": "gedroogde appels"
}, },
"quince": { "quince": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "quince", "name": "kweepeer",
"plural_name": "quinces" "plural_name": "kweeperen"
}, },
"guava": { "guava": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "guava", "name": "guave",
"plural_name": "guavas" "plural_name": "guava's"
}, },
"banana chip": { "banana chip": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "banana chip", "name": "bananen chip",
"plural_name": "banana chips" "plural_name": "bananen chips"
}, },
"kumquat": { "kumquat": {
"aliases": [], "aliases": [],
@@ -923,20 +923,20 @@
"dragon fruit": { "dragon fruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dragon fruit", "name": "drakenfruit",
"plural_name": "dragon fruits" "plural_name": "drakenfruit vruchten"
}, },
"mixed fruit": { "mixed fruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mixed fruit", "name": "gemixte vruchten",
"plural_name": "mixed fruits" "plural_name": "gemengde vruchten"
}, },
"asian pear": { "asian pear": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "asian pear", "name": "aziatische peer",
"plural_name": "asian pears" "plural_name": "aziatische peren"
}, },
"lychee": { "lychee": {
"aliases": [], "aliases": [],
@@ -947,44 +947,44 @@
"young coconut": { "young coconut": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "young coconut", "name": "jonge kokokosnoot",
"plural_name": "young coconuts" "plural_name": "jonge kokokosnoten"
}, },
"kaffir lime": { "kaffir lime": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "kaffir lime", "name": "kaffir limoen",
"plural_name": "kaffir limes" "plural_name": "kaffir limoenen"
}, },
"star fruit": { "star fruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "star fruit", "name": "stervrucht",
"plural_name": "star fruits" "plural_name": "stervruchten"
}, },
"green papaya": { "green papaya": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "green papaya", "name": "groene papaya",
"plural_name": "green papayas" "plural_name": "groene papaya's"
}, },
"pomelo": { "pomelo": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pomelo", "name": "pompelmoes",
"plural_name": "pomeloes" "plural_name": "pompelmoezen"
}, },
"chestnut puree": { "chestnut puree": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chestnut puree", "name": "kastanje puree",
"plural_name": "chestnut purees" "plural_name": "kastanje puree"
}, },
"prickly pear": { "prickly pear": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "prickly pear", "name": "cactusvijg",
"plural_name": "prickly pears" "plural_name": "cactusvijgen"
}, },
"calamansi": { "calamansi": {
"aliases": [], "aliases": [],
@@ -1055,56 +1055,56 @@
"dried lemon": { "dried lemon": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried lemon", "name": "gedroogde limoen",
"plural_name": "dried lemons" "plural_name": "gedroogde limoenen"
}, },
"young jackfruit": { "young jackfruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "young jackfruit", "name": "jonge jackfruit",
"plural_name": "young jackfruits" "plural_name": "jonge jackfruits"
}, },
"durian": { "durian": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "durian", "name": "doerian",
"plural_name": "durians" "plural_name": "doerians"
}, },
"freeze-dried apple": { "freeze-dried apple": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "freeze-dried apple", "name": "gevriesdroogde appel",
"plural_name": "freeze-dried apples" "plural_name": "gevriesdroogde appels"
}, },
"dried tamarind": { "dried tamarind": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried tamarind", "name": "gedroogte tamarinde",
"plural_name": "dried tamarinds" "plural_name": "gedroogde tamarindes"
}, },
"honey date": { "honey date": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "honey date", "name": "honing dadel",
"plural_name": "honey dates" "plural_name": "honing dadels"
}, },
"physali": { "physali": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "physali", "name": "ananaskers",
"plural_name": "physalis" "plural_name": "ananaskersen"
}, },
"tamarillo": { "tamarillo": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "tamarillo", "name": "tamarillo",
"plural_name": "tamarilloes" "plural_name": "tamarillo's"
}, },
"ice-apple": { "ice-apple": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "ice-apple", "name": "ijsappel",
"plural_name": "ice-apples" "plural_name": "ijsappels"
}, },
"longan": { "longan": {
"aliases": [], "aliases": [],
@@ -1115,98 +1115,98 @@
"finger lime": { "finger lime": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "finger lime", "name": "citroenkaviaar",
"plural_name": "finger limes" "plural_name": "citroenkaviaar"
}, },
"bitter orange": { "bitter orange": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "bitter orange", "name": "bittersinaasappel",
"plural_name": "bitter oranges" "plural_name": "bittersinaasappels"
}, },
"feijoa": { "feijoa": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "feijoa", "name": "ananasguave",
"plural_name": "feijoas" "plural_name": "ananasguaves"
}, },
"dried persimmon": { "dried persimmon": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried persimmon", "name": "gedroogde kakivrucht",
"plural_name": "dried persimmons" "plural_name": "gedroogde kakivruchten"
}, },
"rambutan": { "rambutan": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "rambutan", "name": "ramboetan",
"plural_name": "rambutans" "plural_name": "ramboetans"
}, },
"rose apple": { "rose apple": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "rose apple", "name": "rozenappel",
"plural_name": "rose apples" "plural_name": "rozenappels"
}, },
"dried orange slice": { "dried orange slice": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried orange slice", "name": "gedroogd sinaasappel partje",
"plural_name": "dried orange slices" "plural_name": "gedroogdesinaasappel partjes"
}, },
"loquat": { "loquat": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "loquat", "name": "japanse pruim",
"plural_name": "loquats" "plural_name": "japanse pruimen"
}, },
"crabapple": { "crabapple": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "crabapple", "name": "wilde appel",
"plural_name": "crabapples" "plural_name": "wilde appels"
}, },
"fig leaf": { "fig leaf": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "fig leaf", "name": "vijgenblad",
"plural_name": "fig leaves" "plural_name": "vijgenbladeren"
}, },
"freeze-dried pineapple": { "freeze-dried pineapple": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "freeze-dried pineapple", "name": "gevriesdroogde ananas",
"plural_name": "freeze-dried pineapples" "plural_name": "gevriesdroogde ananas"
}, },
"pluot": { "pluot": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pluot", "name": "pruim-abrikoos",
"plural_name": "pluots" "plural_name": "pruim-abrikozen"
}, },
"soursop": { "soursop": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "soursop", "name": "zuurzak",
"plural_name": "soursops" "plural_name": "zuurzakken"
}, },
"hog plum": { "hog plum": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "hog plum", "name": "varkenspruim",
"plural_name": "hog plums" "plural_name": "varkenspruimen"
}, },
"bergamot orange": { "bergamot orange": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "bergamot orange", "name": "bergamot",
"plural_name": "bergamot oranges" "plural_name": "bergamotten"
}, },
"luo han guo": { "luo han guo": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "luo han guo", "name": "monniksfruit",
"plural_name": "luo han guos" "plural_name": "monniksfruit"
}, },
"mamey": { "mamey": {
"aliases": [], "aliases": [],
@@ -1223,14 +1223,14 @@
"green ume plum": { "green ume plum": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "green ume plum", "name": "groene ume pruim",
"plural_name": "green ume plums" "plural_name": "groene ume pruimen"
}, },
"kiwano": { "kiwano": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "kiwano", "name": "hoornmeloen",
"plural_name": "kiwanoes" "plural_name": "hoornmeloenen"
} }
} }
}, },
@@ -1239,104 +1239,104 @@
"button mushroom": { "button mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "button mushroom", "name": "champignon",
"plural_name": "button mushrooms" "plural_name": "champignons"
}, },
"shiitake mushroom": { "shiitake mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "shiitake mushroom", "name": "shiitake",
"plural_name": "shiitake mushrooms" "plural_name": "shiitakes"
}, },
"portobello mushroom": { "portobello mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "portobello mushroom", "name": "portobello",
"plural_name": "portobello mushrooms" "plural_name": "portobello's"
}, },
"wild mushroom": { "wild mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "wild mushroom", "name": "wilde paddenstoel",
"plural_name": "wild mushrooms" "plural_name": "wilde paddenstoelen"
}, },
"porcini": { "porcini": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "porcini", "name": "eekhoorntjesbrood",
"plural_name": "porcinis" "plural_name": "eekhoorntjesbrood"
}, },
"mixed mushroom": { "mixed mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mixed mushroom", "name": "gemengde paddenstoelen",
"plural_name": "mixed mushrooms" "plural_name": "gemengde paddenstoelen"
}, },
"oyster mushroom": { "oyster mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "oyster mushroom", "name": "oesterzwam",
"plural_name": "oyster mushrooms" "plural_name": "oesterzwammen"
}, },
"chestnut mushroom": { "chestnut mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chestnut mushroom", "name": "kastanje champignon",
"plural_name": "chestnut mushrooms" "plural_name": "kastanje champignons"
}, },
"enoki mushroom": { "enoki mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "enoki mushroom", "name": "enoki-paddenstoel",
"plural_name": "enoki mushrooms" "plural_name": "enoki-paddenstoeltjes"
}, },
"black fungu": { "black fungu": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "black fungu", "name": "boomoor",
"plural_name": "black fungus" "plural_name": "boomoren"
}, },
"black truffle": { "black truffle": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "black truffle", "name": "zwarte truffel",
"plural_name": "black truffles" "plural_name": "zwarte truffels"
}, },
"morel mushroom": { "morel mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "morel mushroom", "name": "morel paddenstoel",
"plural_name": "morel mushrooms" "plural_name": "morel paddenstoelen"
}, },
"field mushroom": { "field mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "field mushroom", "name": "veld paddestoel",
"plural_name": "field mushrooms" "plural_name": "veld paddenstoelen"
}, },
"king oyster mushroom": { "king oyster mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "king oyster mushroom", "name": "koning oesterzwam",
"plural_name": "king oyster mushrooms" "plural_name": "koning oesterzwammen"
}, },
"shimeji mushroom": { "shimeji mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "shimeji mushroom", "name": "shimeji paddenstoel",
"plural_name": "shimeji mushrooms" "plural_name": "shimeji paddenstoelen"
}, },
"straw mushroom": { "straw mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "straw mushroom", "name": "stro paddenstoel",
"plural_name": "straw mushrooms" "plural_name": "stro paddenstoelen"
}, },
"dried chinese mushroom": { "dried chinese mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried chinese mushroom", "name": "gedroogde chinese paddenstoel",
"plural_name": "dried chinese mushrooms" "plural_name": "gedroogde chinese paddenstoelen"
}, },
"maitake": { "maitake": {
"aliases": [], "aliases": [],
@@ -1347,79 +1347,79 @@
"trumpet mushroom": { "trumpet mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "trumpet mushroom", "name": "trompet paddenstoel",
"plural_name": "trumpet mushrooms" "plural_name": "trompet paddenstoelen"
}, },
"white truffle": { "white truffle": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "white truffle", "name": "witte truffel",
"plural_name": "white truffles" "plural_name": "witte truffels"
}, },
"white fungu": { "white fungu": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "white fungu", "name": "witte zwam",
"plural_name": "white fungus" "plural_name": "witte zwammen"
}, },
"pioppini": { "pioppini": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pioppini", "name": "pioppino-zwam",
"plural_name": "pioppinis" "plural_name": "pioppino-zwammen"
}, },
"snow fungu": { "snow fungu": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "snow fungu", "name": "sneeuwzwam",
"plural_name": "snow fungus" "plural_name": "sneeuwzwammen"
}, },
"white beech mushroom": { "white beech mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "white beech mushroom", "name": "witte beukenzwam",
"plural_name": "white beech mushrooms" "plural_name": "witte beukenzwammen"
}, },
"boletu": { "boletu": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "boletu", "name": "boleet",
"plural_name": "boletus" "plural_name": "boleten"
}, },
"huitlacoche": { "huitlacoche": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "huitlacoche", "name": "maïsbrand",
"plural_name": "huitlacoches" "plural_name": "maïsbrand"
}, },
"matsutake": { "matsutake": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "matsutake", "name": "pijnboomzwam",
"plural_name": "matsutakes" "plural_name": "pijnboomzwammen"
}, },
"nameko": { "nameko": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "nameko", "name": "bundelzwam",
"plural_name": "namekoes" "plural_name": "bundelzwammen"
}, },
"djon djon mushroom": { "djon djon mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "djon djon mushroom", "name": "zwarte trompetzwam",
"plural_name": "djon djon mushrooms" "plural_name": "zwarte trompetzwammen"
}, },
"mixed asian mushroom": { "mixed asian mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mixed asian mushroom", "name": "gemengde aziatische paddenstoelen",
"plural_name": "mixed asian mushrooms" "plural_name": "gemengde aziatische paddenstoelen"
}, },
"puffball": { "puffball": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "puffball", "name": "bovist",
"plural_name": "puffballs" "plural_name": "puffballs"
}, },
"honey fungu": { "honey fungu": {
@@ -1453,98 +1453,98 @@
"strawberry": { "strawberry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "strawberry", "name": "aardbei",
"plural_name": "strawberries" "plural_name": "aardbeien"
}, },
"blueberry": { "blueberry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "blueberry", "name": "bosbes",
"plural_name": "blueberries" "plural_name": "bosbessen"
}, },
"raspberry": { "raspberry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "raspberry", "name": "framboos",
"plural_name": "raspberries" "plural_name": "frambozen"
}, },
"cranberry": { "cranberry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cranberry", "name": "veenbes",
"plural_name": "cranberries" "plural_name": "veenbessen"
}, },
"cherry": { "cherry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cherry", "name": "kers",
"plural_name": "cherries" "plural_name": "kersen"
}, },
"blackberry": { "blackberry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "blackberry", "name": "braam",
"plural_name": "blackberries" "plural_name": "bramen"
}, },
"berry mix": { "berry mix": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "berry mix", "name": "gemengde bessen",
"plural_name": "berry mixes" "plural_name": "gemengde bessen"
}, },
"maraschino cherry": { "maraschino cherry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "maraschino cherry", "name": "maraschino kers",
"plural_name": "maraschino cherries" "plural_name": "maraschino kersen"
}, },
"dried cherry": { "dried cherry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried cherry", "name": "gedroogde kers",
"plural_name": "dried cherries" "plural_name": "gedroogde kersen"
}, },
"juniper berry": { "juniper berry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "juniper berry", "name": "jeneverbes",
"plural_name": "juniper berries" "plural_name": "jeneverbessen"
}, },
"sour cherry": { "sour cherry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "sour cherry", "name": "zure kers",
"plural_name": "sour cherries" "plural_name": "zure kersen"
}, },
"goji berry": { "goji berry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "goji berry", "name": "goji bes",
"plural_name": "goji berries" "plural_name": "goji bessen"
}, },
"dried blueberry": { "dried blueberry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried blueberry", "name": "gedroogde bosbes",
"plural_name": "dried blueberries" "plural_name": "gedroogde bosbessen"
}, },
"freeze-dried strawberry": { "freeze-dried strawberry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "freeze-dried strawberry", "name": "gevriesdroogde aardbei",
"plural_name": "freeze-dried strawberries" "plural_name": "gevriesdroogde aardbeien"
}, },
"gooseberry": { "gooseberry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "gooseberry", "name": "kruisbes",
"plural_name": "gooseberries" "plural_name": "kruisbessen"
}, },
"freeze-dried raspberry": { "freeze-dried raspberry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "freeze-dried raspberry", "name": "gevriesdroogde framboos",
"plural_name": "freeze-dried raspberries" "plural_name": "gevriesdroogde frambozen"
}, },
"lingonberry": { "lingonberry": {
"aliases": [], "aliases": [],
@@ -1640,19 +1640,19 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "hawthorn", "name": "hawthorn",
"plural_name": "hawthorns" "plural_name": "meidoorns"
}, },
"boysenberry": { "boysenberry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "boysenberry", "name": "wilde braam",
"plural_name": "boysenberries" "plural_name": "wilde bramen"
}, },
"cloudberry": { "cloudberry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cloudberry", "name": "kruipbraam",
"plural_name": "cloudberries" "plural_name": "kruipbramen"
}, },
"freeze-dried berry": { "freeze-dried berry": {
"aliases": [], "aliases": [],
@@ -1715,20 +1715,20 @@
"walnut": { "walnut": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "walnut", "name": "walnoot",
"plural_name": "walnuts" "plural_name": "walnoten"
}, },
"pecan": { "pecan": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pecan", "name": "pecannoot",
"plural_name": "pecans" "plural_name": "pecannoten"
}, },
"almond": { "almond": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "almond", "name": "amandel",
"plural_name": "almonds" "plural_name": "amandelen"
}, },
"sesame seed": { "sesame seed": {
"aliases": [], "aliases": [],
@@ -1739,8 +1739,8 @@
"cashew": { "cashew": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cashew", "name": "cashewnoot",
"plural_name": "cashews" "plural_name": "cashewnoten"
}, },
"pine nut": { "pine nut": {
"aliases": [], "aliases": [],
@@ -1751,14 +1751,14 @@
"pistachio": { "pistachio": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pistachio", "name": "pistachenoot",
"plural_name": "pistachios" "plural_name": "pistachenoten"
}, },
"peanut": { "peanut": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "peanut", "name": "pinda",
"plural_name": "peanuts" "plural_name": "pinda's"
}, },
"chia": { "chia": {
"aliases": [], "aliases": [],
@@ -1811,8 +1811,8 @@
"roasted peanut": { "roasted peanut": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "roasted peanut", "name": "geroosterde pinda",
"plural_name": "roasted peanuts" "plural_name": "geroosterde pinda's"
}, },
"chopped nut": { "chopped nut": {
"aliases": [], "aliases": [],