Merge branch 'mealie-next' into fix/update-pre-commit-hooks

This commit is contained in:
Kuchenpirat 2025-07-21 15:09:47 +02:00 committed by GitHub
commit d69e742cab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 453 additions and 475 deletions

View file

@ -179,9 +179,15 @@ def inject_nuxt_values():
all_langs = []
for match in locales_dir.glob("*.json"):
lang_string = f'{{ code: "{match.stem}", file: "{match.name.replace(".json", ".ts")}" }},'
match_data = LOCALE_DATA.get(match.stem)
match_dir = match_data.dir if match_data else "ltr"
lang_string = f'{{ code: "{match.stem}", file: "{match.name.replace(".json", ".ts")}", dir: "{match_dir}" }},'
all_langs.append(lang_string)
all_langs.sort()
all_date_locales.sort()
log.debug(f"injecting locales into nuxt config -> {nuxt_config}")
inject_inline(nuxt_config, CodeKeys.nuxt_local_messages, all_langs)
inject_inline(i18n_config, CodeKeys.nuxt_local_dates, all_date_locales)

View file

@ -7,13 +7,14 @@
<v-card-text>
{{ $t("language-dialog.select-description") }}
<v-autocomplete
v-model="locale"
v-model="selectedLocale"
:items="locales"
item-title="name"
item-value="value"
class="my-3"
hide-details
variant="outlined"
offset
@update:model-value="onLocaleSelect"
>
<template #item="{ item, props }">
<div
@ -59,6 +60,14 @@ export default defineNuxtComponent({
});
const { locales: LOCALES, locale, i18n } = useLocales();
const selectedLocale = ref(locale.value);
const onLocaleSelect = (value: string) => {
if (value && locales.some(l => l.value === value)) {
locale.value = value as any;
}
};
watch(locale, () => {
dialog.value = false; // Close dialog when locale changes
});
@ -72,6 +81,8 @@ export default defineNuxtComponent({
i18n,
locales,
locale,
selectedLocale,
onLocaleSelect,
};
},
});

View file

@ -57,7 +57,7 @@ export const LOCALES = [
{
name: "Pусский (Russian)",
value: "ru-RU",
progress: 35,
progress: 37,
dir: "ltr",
},
{
@ -189,7 +189,7 @@ export const LOCALES = [
{
name: "Español (Spanish)",
value: "es-ES",
progress: 37,
progress: 40,
dir: "ltr",
},
{
@ -213,19 +213,19 @@ export const LOCALES = [
{
name: "Deutsch (German)",
value: "de-DE",
progress: 61,
progress: 63,
dir: "ltr",
},
{
name: "Dansk (Danish)",
value: "da-DK",
progress: 37,
progress: 38,
dir: "ltr",
},
{
name: "Čeština (Czech)",
value: "cs-CZ",
progress: 39,
progress: 40,
dir: "ltr",
},
{

View file

@ -3,8 +3,6 @@ import { LOCALES } from "./available-locales";
export const useLocales = () => {
const i18n = useI18n();
const { isRtl } = useRtl();
const { current: vuetifyLocale } = useLocale();
const locale = computed<LocaleObject["code"]>({
@ -13,18 +11,21 @@ export const useLocales = () => {
i18n.setLocale(value);
},
});
function updateLocale(lc: LocaleObject["code"]) {
vuetifyLocale.value = lc;
}
// auto update vuetify locale
watch(locale, (lc) => {
vuetifyLocale.value = lc;
});
// auto update rtl
watch(vuetifyLocale, (vl) => {
const currentLocale = LOCALES.find(lc => lc.value === vl);
if (currentLocale) {
isRtl.value = currentLocale.dir === "rtl";
}
updateLocale(lc);
});
// set initial locale
if (i18n.locale.value) {
updateLocale(i18n.locale.value);
};
return {
locale,
locales: LOCALES,

View file

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

View file

@ -0,0 +1,21 @@
{
"short": {
"month": "short",
"day": "numeric",
"weekday": "long"
},
"medium": {
"month": "long",
"day": "numeric",
"weekday": "long",
"year": "numeric"
},
"long": {
"year": "numeric",
"month": "long",
"day": "numeric",
"weekday": "long",
"hour": "numeric",
"minute": "numeric"
}
}

View file

@ -599,10 +599,10 @@
"create-recipe-from-an-image": "Opret opskrift fra et billede",
"create-recipe-from-an-image-description": "Opret en opskrift ved at overføre et billede af den. Mealie vil forsøge at udtrække teksten fra billedet med AI og oprette en opskrift fra det.",
"crop-and-rotate-the-image": "Beskær og roter billedet, så kun teksten er synlig, og det vises i den rigtige retning.",
"create-from-images": "Create from Images",
"create-from-images": "Opret fra billede",
"should-translate-description": "Oversæt opskriften til mit sprog",
"please-wait-image-procesing": "Vent venligst, billedet behandles. Dette kan tage lidt tid.",
"please-wait-images-processing": "Please wait, the images are processing. This may take some time.",
"please-wait-images-processing": "Vent venligst, billedet behandles. Dette kan tage lidt tid.",
"bulk-url-import": "Import fra flere URL-adresser",
"debug-scraper": "Fejlsøg indlæser",
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Opret en opskrift ved at angive navnet. Alle opskrifter skal have unikke navne.",
@ -662,9 +662,9 @@
},
"reset-servings-count": "Nulstil antal serveringer",
"not-linked-ingredients": "Yderligere ingredienser",
"upload-another-image": "Upload another image",
"upload-images": "Upload images",
"upload-more-images": "Upload more images"
"upload-another-image": "Upload et andet billede",
"upload-images": "Upload billeder",
"upload-more-images": "Upload flere billeder"
},
"recipe-finder": {
"recipe-finder": "Opskriftssøger",
@ -724,7 +724,7 @@
"backup-restore": "Backup / gendannelse",
"back-restore-description": "Gendannelse af denne sikkerhedskopi vil overskrive alle de aktuelle data i din database og i datamappen og erstatte dem med indholdet af denne sikkerhedskopi. {cannot-be-undone} Hvis gendannelsen lykkes, vil du blive logget ud.",
"cannot-be-undone": "Denne handling kan ikke fortrydes - brug med forsigtighed.",
"postgresql-note": "If you are using PostgreSQL, please review the {backup-restore-process} prior to restoring.",
"postgresql-note": "Hvis du bruger PostgreSQL, så gennemse venligst {backup-restore-process} før du gendanner.",
"backup-restore-process-in-the-documentation": "backup/restoreproces i dokumentationen",
"irreversible-acknowledgment": "Jeg forstår, at denne handling er irreversibel, destruktiv og kan forårsage tab af data",
"restore-backup": "Gendan sikkerhedskopi"

View file

@ -175,114 +175,52 @@ export default defineNuxtConfig({
subsets: ["cyrillic-ext", "cyrillic", "greek-ext", "greek", "vietnamese", "latin-ext", "latin"],
},
},
/* auth: {
redirect: {
login: "/login",
logout: "/login",
callback: "/login",
home: "/",
},
cookie: {
prefix: "mealie.auth.",
options: {
expires: 7,
path: "/",
},
},
rewriteRedirects: false,
// Options
strategies: {
local: {
resetOnError: true,
token: {
property: "access_token",
global: true,
// required: true,
// type: 'Bearer'
},
user: {
property: "",
autoFetch: true,
},
endpoints: {
login: {
url: "api/auth/token",
method: "post",
propertyName: "access_token",
},
refresh: { url: "api/auth/refresh", method: "post" },
logout: { url: "api/auth/logout", method: "post" },
user: { url: "api/users/self", method: "get" },
},
},
oidc: {
scheme: "local",
resetOnError: true,
token: {
property: "access_token",
global: true,
},
user: {
property: "",
autoFetch: true,
},
endpoints: {
login: {
url: "api/auth/oauth/callback",
method: "get",
},
logout: { url: "api/auth/logout", method: "post" },
user: { url: "api/users/self", method: "get" },
},
},
},
}, */
i18n: {
locales: [
// CODE_GEN_ID: MESSAGE_LOCALES
{ code: "tr-TR", file: "tr-TR.ts" },
{ code: "zh-CN", file: "zh-CN.ts" },
{ code: "ja-JP", file: "ja-JP.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: "sr-SP", file: "sr-SP.ts" },
{ code: "hr-HR", file: "hr-HR.ts" },
{ code: "de-DE", file: "de-DE.ts" },
{ code: "zh-TW", file: "zh-TW.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: "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: "ko-KR", file: "ko-KR.ts" },
{ code: "bg-BG", file: "bg-BG.ts" },
{ code: "sl-SI", file: "sl-SI.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" },
{ code: "af-ZA", file: "af-ZA.ts", dir: "ltr" },
{ code: "ar-SA", file: "ar-SA.ts", dir: "rtl" },
{ code: "bg-BG", file: "bg-BG.ts", dir: "ltr" },
{ code: "ca-ES", file: "ca-ES.ts", dir: "ltr" },
{ code: "cs-CZ", file: "cs-CZ.ts", dir: "ltr" },
{ code: "da-DK", file: "da-DK.ts", dir: "ltr" },
{ code: "de-DE", file: "de-DE.ts", dir: "ltr" },
{ code: "el-GR", file: "el-GR.ts", dir: "ltr" },
{ code: "en-GB", file: "en-GB.ts", dir: "ltr" },
{ code: "en-US", file: "en-US.ts", dir: "ltr" },
{ code: "es-ES", file: "es-ES.ts", dir: "ltr" },
{ code: "et-EE", file: "et-EE.ts", dir: "ltr" },
{ code: "fi-FI", file: "fi-FI.ts", dir: "ltr" },
{ code: "fr-BE", file: "fr-BE.ts", dir: "ltr" },
{ code: "fr-CA", file: "fr-CA.ts", dir: "ltr" },
{ code: "fr-FR", file: "fr-FR.ts", dir: "ltr" },
{ code: "gl-ES", file: "gl-ES.ts", dir: "ltr" },
{ code: "he-IL", file: "he-IL.ts", dir: "rtl" },
{ code: "hr-HR", file: "hr-HR.ts", dir: "ltr" },
{ code: "hu-HU", file: "hu-HU.ts", dir: "ltr" },
{ code: "is-IS", file: "is-IS.ts", dir: "ltr" },
{ code: "it-IT", file: "it-IT.ts", dir: "ltr" },
{ code: "ja-JP", file: "ja-JP.ts", dir: "ltr" },
{ code: "ko-KR", file: "ko-KR.ts", dir: "ltr" },
{ code: "lt-LT", file: "lt-LT.ts", dir: "ltr" },
{ code: "lv-LV", file: "lv-LV.ts", dir: "ltr" },
{ code: "nl-NL", file: "nl-NL.ts", dir: "ltr" },
{ code: "no-NO", file: "no-NO.ts", dir: "ltr" },
{ code: "pl-PL", file: "pl-PL.ts", dir: "ltr" },
{ code: "pt-BR", file: "pt-BR.ts", dir: "ltr" },
{ code: "pt-PT", file: "pt-PT.ts", dir: "ltr" },
{ code: "ro-RO", file: "ro-RO.ts", dir: "ltr" },
{ code: "ru-RU", file: "ru-RU.ts", dir: "ltr" },
{ code: "sk-SK", file: "sk-SK.ts", dir: "ltr" },
{ code: "sl-SI", file: "sl-SI.ts", dir: "ltr" },
{ code: "sr-SP", file: "sr-SP.ts", dir: "ltr" },
{ code: "sv-SE", file: "sv-SE.ts", dir: "ltr" },
{ code: "tr-TR", file: "tr-TR.ts", dir: "ltr" },
{ code: "uk-UA", file: "uk-UA.ts", dir: "ltr" },
{ code: "vi-VN", file: "vi-VN.ts", dir: "ltr" },
{ code: "zh-CN", file: "zh-CN.ts", dir: "ltr" },
{ code: "zh-TW", file: "zh-TW.ts", dir: "ltr" },
// END: MESSAGE_LOCALES
],
strategy: "no_prefix",

View file

@ -46,20 +46,20 @@
"red onion": {
"aliases": [],
"description": "",
"name": "red onion",
"plural_name": "Červená cibule"
"name": "červená cibule",
"plural_name": "červené cibule"
},
"yellow onion": {
"aliases": [],
"description": "",
"name": "yellow onion",
"name": "žlutá cibule",
"plural_name": "yellow onions"
},
"celery": {
"aliases": [],
"description": "",
"name": "celer",
"plural_name": "Celery"
"plural_name": "celery"
},
"jalapeno": {
"aliases": [],
@ -76,8 +76,8 @@
"shallot": {
"aliases": [],
"description": "",
"name": "shallot",
"plural_name": "shallots"
"name": "šalotka",
"plural_name": "šalotky"
},
"cherry tomato": {
"aliases": [],
@ -95,13 +95,13 @@
"aliases": [],
"description": "",
"name": "špenát",
"plural_name": "spinaches"
"plural_name": "špenát"
},
"sweet corn": {
"aliases": [],
"description": "",
"name": "sweet corn",
"plural_name": "sweet corns"
"name": "sladká kukuřice",
"plural_name": "sladké kukuřice"
},
"chile pepper": {
"aliases": [
@ -228,14 +228,14 @@
"radish": {
"aliases": [],
"description": "",
"name": "radish",
"plural_name": "radishes"
"name": "ředkvička",
"plural_name": "ředkvičky"
},
"red cabbage": {
"aliases": [],
"description": "",
"name": "red cabbage",
"plural_name": "red cabbages"
"name": "červené zelí",
"plural_name": "červené zelí"
},
"artichoke": {
"aliases": [],

View file

@ -4,62 +4,62 @@
"garlic": {
"aliases": [],
"description": "",
"name": "garlic",
"plural_name": "garlics"
"name": "hvidløg",
"plural_name": "hvidløg"
},
"onion": {
"aliases": [],
"description": "",
"name": "onion",
"plural_name": "onions"
"name": "løg",
"plural_name": "løg"
},
"bell pepper": {
"aliases": [],
"description": "",
"name": "bell pepper",
"plural_name": "bell peppers"
"name": "peberfrugt",
"plural_name": "peberfrugter"
},
"carrot": {
"aliases": [],
"description": "",
"name": "carrot",
"plural_name": "carrots"
"name": "gulerod",
"plural_name": "gulerødder"
},
"scallion": {
"aliases": [],
"description": "",
"name": "scallion",
"plural_name": "scallions"
"name": "forårsløg",
"plural_name": "forårsløg"
},
"zucchini": {
"aliases": [],
"description": "",
"name": "zucchini",
"plural_name": "zucchinis"
"name": "squash",
"plural_name": "squash"
},
"potato": {
"aliases": [],
"description": "",
"name": "potato",
"plural_name": "potatoes"
"name": "kartoffel",
"plural_name": "kartofler"
},
"red onion": {
"aliases": [],
"description": "",
"name": "red onion",
"plural_name": "red onions"
"name": "rødløg",
"plural_name": "rødløg"
},
"yellow onion": {
"aliases": [],
"description": "",
"name": "yellow onion",
"plural_name": "yellow onions"
"name": "løg",
"plural_name": "løg"
},
"celery": {
"aliases": [],
"description": "",
"name": "celery",
"plural_name": "celeries"
"name": "selleri",
"plural_name": "selleri"
},
"jalapeno": {
"aliases": [],
@ -70,64 +70,64 @@
"avocado": {
"aliases": [],
"description": "",
"name": "avocado",
"plural_name": "avocados"
"name": "avokado",
"plural_name": "avokadoer"
},
"shallot": {
"aliases": [],
"description": "",
"name": "shallot",
"plural_name": "shallots"
"name": "skalotteløg",
"plural_name": "skalotteløg"
},
"cherry tomato": {
"aliases": [],
"description": "",
"name": "cherry tomato",
"plural_name": "cherry tomatoes"
"name": "cherrytomat",
"plural_name": "cherrytomater"
},
"cucumber": {
"aliases": [],
"description": "",
"name": "cucumber",
"plural_name": "cucumbers"
"name": "agurk",
"plural_name": "agurker"
},
"spinach": {
"aliases": [],
"description": "",
"name": "spinach",
"plural_name": "spinaches"
"name": "spinat",
"plural_name": "spinat"
},
"sweet corn": {
"aliases": [],
"description": "",
"name": "sweet corn",
"plural_name": "sweet corns"
"name": "sød majs",
"plural_name": "sød majs"
},
"chile pepper": {
"aliases": [
"capsicum"
],
"description": "",
"name": "chile pepper",
"plural_name": "chile peppers"
"name": "chilipeber",
"plural_name": "chilipeber"
},
"sweet potato": {
"aliases": [],
"description": "",
"name": "sweet potato",
"plural_name": "sweet potatoes"
"name": "sød kartoffel",
"plural_name": "søde kartofler"
},
"broccoli": {
"aliases": [],
"description": "",
"name": "broccoli",
"plural_name": "broccolis"
"plural_name": "broccoli"
},
"heart of palm": {
"aliases": [],
"description": "",
"name": "heart of palm",
"plural_name": "heart of palms"
"name": "palmehjerte",
"plural_name": "palmehjerter"
},
"baby green": {
"aliases": [],
@ -274,13 +274,13 @@
"aliases": [],
"description": "",
"name": "baby carrot",
"plural_name": "baby carrots"
"plural_name": "babygulerødder"
},
"mixed vegetable": {
"aliases": [],
"description": "",
"name": "mixed vegetable",
"plural_name": "mixed vegetables"
"name": "blandede grøntsager",
"plural_name": "blandede grøntsager"
},
"poblano pepper": {
"aliases": [],
@ -303,38 +303,38 @@
"cayenne pepper": {
"aliases": [],
"description": "",
"name": "cayenne pepper",
"plural_name": "cayenne peppers"
"name": "cayennepeber",
"plural_name": "cayennepeber"
},
"green tomato": {
"aliases": [],
"description": "",
"name": "green tomato",
"plural_name": "green tomatoes"
"name": "grøn tomat",
"plural_name": "grønne tomater"
},
"watercress": {
"aliases": [],
"description": "",
"name": "watercress",
"plural_name": "watercress"
"name": "brøndkarse",
"plural_name": "brøndkarse"
},
"iceberg": {
"aliases": [],
"description": "",
"name": "iceberg",
"plural_name": "icebergs"
"plural_name": "iceberg"
},
"mashed potato": {
"aliases": [],
"description": "",
"name": "mashed potato",
"plural_name": "mashed potatoes"
"name": "kartoffelmos",
"plural_name": "kartoffelmos"
},
"horseradish": {
"aliases": [],
"description": "",
"name": "horseradish",
"plural_name": "horseradishes"
"name": "peberrod",
"plural_name": "peberrod"
},
"chard": {
"aliases": [],
@ -383,14 +383,14 @@
"water chestnut": {
"aliases": [],
"description": "",
"name": "water chestnut",
"plural_name": "water chestnuts"
"name": "vand kastanje",
"plural_name": "vand kastanjer"
},
"turnip": {
"aliases": [],
"description": "",
"name": "turnip",
"plural_name": "turnips"
"name": "majroe",
"plural_name": "majroer"
},
"thai chile pepper": {
"aliases": [],
@ -401,8 +401,8 @@
"bok choy": {
"aliases": [],
"description": "",
"name": "bok choy",
"plural_name": "bok choy"
"name": "pak choi",
"plural_name": "pak choi"
},
"okra": {
"aliases": [],
@ -419,8 +419,8 @@
"corn cob": {
"aliases": [],
"description": "",
"name": "corn cob",
"plural_name": "corn cobs"
"name": "majskolbe",
"plural_name": "majskolber"
},
"radicchio": {
"aliases": [],
@ -505,14 +505,14 @@
"daikon": {
"aliases": [],
"description": "",
"name": "daikon",
"plural_name": "daikons"
"name": "kinaradise",
"plural_name": "kinaradiser"
},
"baby corn": {
"aliases": [],
"description": "",
"name": "baby corn",
"plural_name": "baby corns"
"name": "babymajs",
"plural_name": "babymajs"
},
"broccoli rabe": {
"aliases": [],
@ -577,8 +577,8 @@
"frisee": {
"aliases": [],
"description": "",
"name": "frisee",
"plural_name": "frisees"
"name": "friséesalat",
"plural_name": "friséesalat"
},
"anaheim pepper": {
"aliases": [],
@ -613,8 +613,8 @@
"pea shoot": {
"aliases": [],
"description": "",
"name": "pea shoot",
"plural_name": "pea shoots"
"name": "ærteskud",
"plural_name": "ærteskud"
},
"alfalfa": {
"aliases": [],
@ -628,26 +628,26 @@
"foods": {
"tomato": {
"aliases": [],
"description": "Yes they are a fruit",
"name": "tomato",
"plural_name": "tomatoes"
"description": "Ja de er en frugt",
"name": "tomat",
"plural_name": "tomater"
},
"lemon": {
"aliases": [],
"description": "",
"name": "lemon",
"plural_name": "lemons"
"name": "citron",
"plural_name": "citroner"
},
"lime": {
"aliases": [],
"description": "",
"name": "lime",
"plural_name": "limes"
"name": "limefrugt",
"plural_name": "limefrugter"
},
"apple": {
"aliases": [],
"description": "",
"name": "apple",
"name": "æble",
"plural_name": "apples"
},
"banana": {
@ -696,7 +696,7 @@
"aliases": [],
"description": "",
"name": "coconut",
"plural_name": "coconuts"
"plural_name": "kokosnødder"
},
"craisin": {
"aliases": [],
@ -707,80 +707,80 @@
"pear": {
"aliases": [],
"description": "",
"name": "pear",
"plural_name": "pears"
"name": "pære",
"plural_name": "pærer"
},
"grape": {
"aliases": [],
"description": "",
"name": "grape",
"plural_name": "grapes"
"name": "drue",
"plural_name": "vindruer"
},
"pomegranate": {
"aliases": [],
"description": "",
"name": "pomegranate",
"name": "granatæble",
"plural_name": "pomegranates"
},
"watermelon": {
"aliases": [],
"description": "",
"name": "watermelon",
"plural_name": "watermelons"
"name": "vandmelon",
"plural_name": "vandmeloner"
},
"rhubarb": {
"aliases": [],
"description": "",
"name": "rhubarb",
"plural_name": "rhubarbs"
"name": "rabarber",
"plural_name": "rabarber"
},
"dried apricot": {
"aliases": [],
"description": "",
"name": "dried apricot",
"plural_name": "dried apricots"
"name": "tørret abrikos",
"plural_name": "tørrede abrikoser"
},
"kiwi": {
"aliases": [],
"description": "",
"name": "kiwi",
"plural_name": "kiwis"
"name": "kiwifrugt",
"plural_name": "kiwifrugter"
},
"grapefruit": {
"aliases": [],
"description": "",
"name": "grapefruit",
"plural_name": "grapefruits"
"name": "grapefrugt",
"plural_name": "grapefrugter"
},
"plum": {
"aliases": [],
"description": "",
"name": "plum",
"plural_name": "plums"
"name": "blomme",
"plural_name": "blommer"
},
"fig": {
"aliases": [],
"description": "",
"name": "fig",
"plural_name": "figs"
"name": "figne",
"plural_name": "figner"
},
"apricot": {
"aliases": [],
"description": "",
"name": "apricot",
"plural_name": "apricots"
"name": "abrikos",
"plural_name": "abrikoser"
},
"currant": {
"aliases": [],
"description": "",
"name": "currant",
"plural_name": "currants"
"name": "solbær",
"plural_name": "solbær"
},
"mandarin": {
"aliases": [],
"description": "",
"name": "mandarin",
"plural_name": "mandarins"
"plural_name": "mandariner"
},
"prune": {
"aliases": [],

View file

@ -6737,7 +6737,7 @@
"aliases": [],
"description": "",
"name": "rice syrup",
"plural_name": "rice syrups"
"plural_name": "Zuckerrohr-Sirup"
},
"manuka honey": {
"aliases": [],

View file

@ -4,301 +4,301 @@
"garlic": {
"aliases": [],
"description": "",
"name": "garlic",
"plural_name": "garlics"
"name": "чеснок",
"plural_name": "чеснока"
},
"onion": {
"aliases": [],
"description": "",
"name": "onion",
"plural_name": "onions"
"name": "лук",
"plural_name": "лука"
},
"bell pepper": {
"aliases": [],
"description": "",
"name": "bell pepper",
"plural_name": "bell peppers"
"name": "болгарский перец",
"plural_name": "болгарских перца"
},
"carrot": {
"aliases": [],
"description": "",
"name": "carrot",
"plural_name": "carrots"
"name": "морковь",
"plural_name": "моркови"
},
"scallion": {
"aliases": [],
"description": "",
"name": "scallion",
"plural_name": "scallions"
"name": "зелёный лук",
"plural_name": "зелёного лука"
},
"zucchini": {
"aliases": [],
"description": "",
"name": "цукини",
"plural_name": "zucchinis"
"plural_name": "цукини"
},
"potato": {
"aliases": [],
"description": "",
"name": "potato",
"plural_name": "potatoes"
"name": "картофель",
"plural_name": "картофеля"
},
"red onion": {
"aliases": [],
"description": "",
"name": "red onion",
"plural_name": "red onions"
"name": "красный лук",
"plural_name": "красного лука"
},
"yellow onion": {
"aliases": [],
"description": "",
"name": "yellow onion",
"plural_name": "yellow onions"
"name": "жёлтый лук",
"plural_name": "жёлтого лука"
},
"celery": {
"aliases": [],
"description": "",
"name": "celery",
"plural_name": "celeries"
"name": "сельдерей",
"plural_name": "сельдерея"
},
"jalapeno": {
"aliases": [],
"description": "",
"name": "jalapeno",
"plural_name": "jalapenoes"
"name": "халапеньо",
"plural_name": "халапеньо"
},
"avocado": {
"aliases": [],
"description": "",
"name": "avocado",
"plural_name": "avocados"
"name": "авокадо",
"plural_name": "авокадо"
},
"shallot": {
"aliases": [],
"description": "",
"name": "shallot",
"plural_name": "shallots"
"name": "шалот",
"plural_name": "шалот"
},
"cherry tomato": {
"aliases": [],
"description": "",
"name": "cherry tomato",
"plural_name": "cherry tomatoes"
"name": "помидор Черри",
"plural_name": "помидоры Черри"
},
"cucumber": {
"aliases": [],
"description": "",
"name": "cucumber",
"plural_name": "cucumbers"
"name": "огурец",
"plural_name": "огурцы"
},
"spinach": {
"aliases": [],
"description": "",
"name": "spinach",
"plural_name": "spinaches"
"name": "шпинат",
"plural_name": "шпинат"
},
"sweet corn": {
"aliases": [],
"description": "",
"name": "sweet corn",
"plural_name": "sweet corns"
"name": "сладкая кукуруза",
"plural_name": "сладкая кукуруза"
},
"chile pepper": {
"aliases": [
"capsicum"
"стручковый перец"
],
"description": "",
"name": "chile pepper",
"plural_name": "chile peppers"
"name": "перец чили",
"plural_name": "перца чили"
},
"sweet potato": {
"aliases": [],
"description": "",
"name": "sweet potato",
"plural_name": "sweet potatoes"
"name": "батат",
"plural_name": "батат"
},
"broccoli": {
"aliases": [],
"description": "",
"name": "broccoli",
"plural_name": "broccolis"
"name": "брокколи",
"plural_name": "брокколи"
},
"heart of palm": {
"aliases": [],
"description": "",
"name": "heart of palm",
"plural_name": "heart of palms"
"name": "сердце пальмы",
"plural_name": "сердец пальмы"
},
"baby green": {
"aliases": [],
"description": "",
"name": "baby green",
"plural_name": "baby greens"
"name": "молодая зелень",
"plural_name": "молодая зелень"
},
"pumpkin": {
"aliases": [],
"description": "",
"name": "pumpkin",
"plural_name": "pumpkins"
"name": "тыква",
"plural_name": "тыквы"
},
"cauliflower": {
"aliases": [],
"description": "",
"name": "cauliflower",
"plural_name": "cauliflowers"
"name": "цветная капуста",
"plural_name": "цветной капусты"
},
"cabbage": {
"aliases": [],
"description": "",
"name": "cabbage",
"plural_name": "cabbages"
"name": "капуста",
"plural_name": "капуста"
},
"asparagu": {
"aliases": [],
"description": "",
"name": "asparagu",
"plural_name": "asparagus"
"name": "спаржа",
"plural_name": "спаржа"
},
"kale": {
"aliases": [],
"description": "",
"name": "kale",
"plural_name": "kales"
"name": "кудрявая капуста",
"plural_name": "кудрявая капуста"
},
"arugula": {
"aliases": [],
"description": "",
"name": "arugula",
"plural_name": "arugulas"
"name": "руккола",
"plural_name": "руккола"
},
"leek": {
"aliases": [],
"description": "",
"name": "leek",
"plural_name": "leeks"
"name": "лук-порей",
"plural_name": "лук-порей"
},
"eggplant": {
"aliases": [],
"description": "",
"name": "eggplant",
"plural_name": "eggplants"
"name": "баклажан",
"plural_name": "баклажаны"
},
"lettuce": {
"aliases": [],
"description": "",
"name": "lettuce",
"plural_name": "lettuces"
"name": "салат - латук",
"plural_name": "салат - латук"
},
"butternut squash": {
"aliases": [],
"description": "",
"name": "butternut squash",
"plural_name": "butternut squashes"
"name": "мускатная тыква",
"plural_name": "мускатная тыква"
},
"romaine": {
"aliases": [],
"description": "",
"name": "romaine",
"plural_name": "romaines"
"name": "римский салат",
"plural_name": "римский салат"
},
"beetroot": {
"aliases": [],
"description": "",
"name": "beetroot",
"plural_name": "beetroots"
"name": "свёкла",
"plural_name": "свёклы"
},
"brussels sprout": {
"aliases": [],
"description": "",
"name": "brussels sprout",
"plural_name": "brussels sprouts"
"name": "брюссельская капуста",
"plural_name": "брюссельская капуста"
},
"fennel": {
"aliases": [],
"description": "",
"name": "fennel",
"plural_name": "fennels"
"name": "фенхель",
"plural_name": "фенхель"
},
"sun dried tomato": {
"aliases": [],
"description": "",
"name": "sun dried tomato",
"plural_name": "sun dried tomatoes"
"name": "вяленый помидор",
"plural_name": "вяленые помидоры"
},
"radish": {
"aliases": [],
"description": "",
"name": "radish",
"plural_name": "radishes"
"name": "редис",
"plural_name": "редис"
},
"red cabbage": {
"aliases": [],
"description": "",
"name": "red cabbage",
"plural_name": "red cabbages"
"name": "красная капуста",
"plural_name": "красная капуста"
},
"artichoke": {
"aliases": [],
"description": "",
"name": "artichoke",
"plural_name": "artichokes"
"name": "артишок",
"plural_name": "артишоки"
},
"new potato": {
"aliases": [],
"description": "",
"name": "new potato",
"plural_name": "new potatoes"
"name": "молодой картофель",
"plural_name": "молодой картофель"
},
"summer squash": {
"aliases": [
"courgette",
"gem squash"
"кабачок",
"гем-сквош"
],
"description": "",
"name": "summer squash",
"plural_name": "summer squashes"
"name": "молодой кабачок",
"plural_name": "молодой кабачок"
},
"mixed green": {
"aliases": [],
"description": "",
"name": "mixed green",
"plural_name": "mixed greens"
"name": "смешанная зелень",
"plural_name": "смешанная зелень"
},
"parsnip": {
"aliases": [],
"description": "",
"name": "parsnip",
"plural_name": "parsnips"
"name": "пастернак",
"plural_name": "пастернаки"
},
"baby carrot": {
"aliases": [],
"description": "",
"name": "baby carrot",
"plural_name": "baby carrots"
"name": "беби-морковь",
"plural_name": "беби-морковь"
},
"mixed vegetable": {
"aliases": [],
"description": "",
"name": "mixed vegetable",
"plural_name": "mixed vegetables"
"name": "овощная смесь",
"plural_name": "овощная смесь"
},
"poblano pepper": {
"aliases": [],
"description": "",
"name": "poblano pepper",
"plural_name": "poblano peppers"
"name": "перец поблано",
"plural_name": "перец поблано"
},
"sweet pepper": {
"aliases": [],
"description": "",
"name": "sweet pepper",
"plural_name": "sweet peppers"
"name": "сладкий перец",
"plural_name": "сладкие перцы"
},
"serrano pepper": {
"aliases": [],
"description": "",
"name": "serrano pepper",
"plural_name": "serrano peppers"
"name": "перец серрано",
"plural_name": "перец серрано"
},
"cayenne pepper": {
"aliases": [],
@ -450,153 +450,153 @@
"aliases": [],
"description": "",
"name": "leaf lettuce",
"plural_name": "leaf lettuces"
"plural_name": "листовой салат"
},
"pepperoncini": {
"aliases": [],
"description": "",
"name": "pepperoncini",
"plural_name": "pepperoncinis"
"name": "пеперончини",
"plural_name": "пеперончини"
},
"baby bok choy": {
"aliases": [],
"description": "",
"name": "baby bok choy",
"plural_name": "baby bok choys"
"name": "молодой бок‑чой",
"plural_name": "молодой бок‑чой"
},
"jicama": {
"aliases": [],
"description": "",
"name": "jicama",
"plural_name": "jicamas"
"name": "хикама",
"plural_name": "хикама"
},
"endive": {
"aliases": [],
"description": "",
"name": "endive",
"plural_name": "endives"
"name": "эндивий(цикорий-салатный)",
"plural_name": "эндивий(цикорий-салатный)"
},
"habanero pepper": {
"aliases": [],
"description": "",
"name": "habanero pepper",
"plural_name": "habanero peppers"
"name": "перец хабанеро",
"plural_name": "перец хабанеро"
},
"corn husk": {
"aliases": [
"maize"
"кукуруза"
],
"description": "",
"name": "corn husk",
"plural_name": "corn husks"
"name": "кукурузная шелуха",
"plural_name": "кукурузная шелуха"
},
"collard green": {
"aliases": [],
"description": "",
"name": "collard green",
"plural_name": "collard greens"
"name": "листовая капуста",
"plural_name": "листовая капуста"
},
"french-fried onion": {
"aliases": [],
"description": "",
"name": "french-fried onion",
"plural_name": "french-fried onions"
"name": "хрустящий жареный лук",
"plural_name": "хрустящий жареный лук"
},
"daikon": {
"aliases": [],
"description": "",
"name": "daikon",
"plural_name": "daikons"
"name": "дайкон",
"plural_name": "дайкон"
},
"baby corn": {
"aliases": [],
"description": "",
"name": "baby corn",
"plural_name": "baby corns"
"name": "молодая кукуруза",
"plural_name": "молодая кукуруза"
},
"broccoli rabe": {
"aliases": [],
"description": "",
"name": "broccoli rabe",
"plural_name": "broccoli rabes"
"name": "рапини",
"plural_name": "рапини"
},
"rutabaga": {
"aliases": [],
"description": "",
"name": "rutabaga",
"plural_name": "rutabagas"
"name": "брюква",
"plural_name": "брюква"
},
"belgian endive": {
"aliases": [],
"description": "",
"name": "belgian endive",
"plural_name": "belgian endives"
"name": "витлуф",
"plural_name": "витлуф"
},
"yam": {
"aliases": [],
"description": "",
"name": "yam",
"plural_name": "yams"
"name": "ямс",
"plural_name": "ямс"
},
"ancho chile pepper": {
"aliases": [],
"description": "",
"name": "ancho chile pepper",
"plural_name": "ancho chile peppers"
"name": "перец анчо",
"plural_name": "перец анчо"
},
"microgreen": {
"aliases": [],
"description": "",
"name": "microgreen",
"plural_name": "microgreens"
"name": "микрозелень",
"plural_name": "микрозелень"
},
"boston lettuce": {
"aliases": [],
"description": "",
"name": "boston lettuce",
"plural_name": "boston lettuces"
"name": "салат Бостон",
"plural_name": "салат Бостон"
},
"kohlrabi": {
"aliases": [],
"description": "",
"name": "kohlrabi",
"plural_name": "kohlrabis"
"name": "кольраби",
"plural_name": "кольраби"
},
"fresno chile": {
"aliases": [],
"description": "",
"name": "fresno chile",
"plural_name": "fresno chiles"
"name": "чили Фресно",
"plural_name": "чили Фресно"
},
"delicata squash": {
"aliases": [],
"description": "",
"name": "delicata squash",
"plural_name": "delicata squashes"
"name": "деликатная тыква",
"plural_name": "деликатная тыква"
},
"frisee": {
"aliases": [],
"description": "",
"name": "frisee",
"plural_name": "frisees"
"name": "фрисе",
"plural_name": "фрисе"
},
"anaheim pepper": {
"aliases": [],
"description": "",
"name": "anaheim pepper",
"plural_name": "anaheim peppers"
"name": "перец анахайм",
"plural_name": "перец анахайм"
},
"cres": {
"aliases": [],
"description": "",
"name": "cres",
"plural_name": "cress"
"name": "кресс-салат",
"plural_name": "кресс-салат"
},
"broccoli slaw": {
"aliases": [],
"description": "",
"name": "broccoli slaw",
"plural_name": "broccoli slaws"
"name": "брокколи слоу",
"plural_name": "брокколи слоу"
},
"arbol chile pepper": {
"aliases": [],
@ -750,156 +750,156 @@
"aliases": [],
"description": "",
"name": "grapefruit",
"plural_name": "grapefruits"
"plural_name": "грейпфрут"
},
"plum": {
"aliases": [],
"description": "",
"name": "plum",
"plural_name": "plums"
"name": "слива",
"plural_name": "сливы"
},
"fig": {
"aliases": [],
"description": "",
"name": "fig",
"plural_name": "figs"
"name": "инжир",
"plural_name": "инжир"
},
"apricot": {
"aliases": [],
"description": "",
"name": "apricot",
"plural_name": "apricots"
"name": "абрикос",
"plural_name": "абрикосы"
},
"currant": {
"aliases": [],
"description": "",
"name": "currant",
"plural_name": "currants"
"name": "смородина",
"plural_name": "смородина"
},
"mandarin": {
"aliases": [],
"description": "",
"name": "mandarin",
"plural_name": "mandarins"
"name": "мандарин",
"plural_name": "мандарины"
},
"prune": {
"aliases": [],
"description": "",
"name": "prune",
"plural_name": "prunes"
"name": "чернослив",
"plural_name": "чернослив"
},
"cantaloupe": {
"aliases": [],
"description": "",
"name": "cantaloupe",
"plural_name": "cantaloupes"
"name": "канталупа",
"plural_name": "канталупа"
},
"sultana": {
"aliases": [],
"description": "",
"name": "sultana",
"plural_name": "sultanas"
"name": "кишмиш Султанина",
"plural_name": "кишмиш Султанина"
},
"passion fruit": {
"aliases": [],
"description": "",
"name": "passion fruit",
"plural_name": "passion fruits"
"name": "маракуйя",
"plural_name": "маракуйя"
},
"papaya": {
"aliases": [],
"description": "",
"name": "papaya",
"plural_name": "papayas"
"name": "папайя",
"plural_name": "папайя"
},
"tamarind": {
"aliases": [],
"description": "",
"name": "tamarind",
"plural_name": "tamarinds"
"name": "тамаринд",
"plural_name": "тамаринд"
},
"nectarine": {
"aliases": [],
"description": "",
"name": "nectarine",
"plural_name": "nectarines"
"name": "нектарин",
"plural_name": "нектарины"
},
"dried fig": {
"aliases": [],
"description": "",
"name": "dried fig",
"plural_name": "dried figs"
"name": "сушёный инжир",
"plural_name": "сушёный инжир"
},
"chestnut": {
"aliases": [],
"description": "",
"name": "chestnut",
"plural_name": "chestnuts"
"name": "каштан",
"plural_name": "каштаны"
},
"meyer lemon": {
"aliases": [],
"description": "",
"name": "meyer lemon",
"plural_name": "meyer lemons"
"name": "мейер лимон",
"plural_name": "мейер лимоны"
},
"honeydew melon": {
"aliases": [],
"description": "",
"name": "honeydew melon",
"plural_name": "honeydew melons"
"name": "медовая дыня",
"plural_name": "медовые дыни"
},
"dried fruit": {
"aliases": [],
"description": "",
"name": "dried fruit",
"plural_name": "dried fruits"
"name": "сухофрукт",
"plural_name": "сухофрукты"
},
"clementine": {
"aliases": [],
"description": "",
"name": "clementine",
"plural_name": "clementines"
"name": "клементин",
"plural_name": "клементин"
},
"persimmon": {
"aliases": [],
"description": "",
"name": "persimmon",
"plural_name": "persimmons"
"name": "хурма персимон",
"plural_name": "хурма персимон"
},
"melon": {
"aliases": [],
"description": "",
"name": "melon",
"plural_name": "melons"
"name": "дыня",
"plural_name": "дыни"
},
"tangerine": {
"aliases": [],
"description": "",
"name": "tangerine",
"plural_name": "tangerines"
"name": "танжерин",
"plural_name": "танжерины"
},
"dried mango": {
"aliases": [],
"description": "",
"name": "dried mango",
"plural_name": "dried mangoes"
"name": "сушёное манго",
"plural_name": "сушёное манго"
},
"dried apple": {
"aliases": [],
"description": "",
"name": "dried apple",
"plural_name": "dried apples"
"name": "сушёное яблоко",
"plural_name": "сушёные яблоки"
},
"quince": {
"aliases": [],
"description": "",
"name": "quince",
"plural_name": "quinces"
"name": "айва",
"plural_name": "айва"
},
"guava": {
"aliases": [],
"description": "",
"name": "guava",
"name": "гуава",
"plural_name": "guavas"
},
"banana chip": {