Compare commits

...

47 Commits

Author SHA1 Message Date
Hayden
8154ee548a Chore/bump deps (#853)
* add LDAP dep

* bump extruct and scraper

* allow for disabling auto backup

* v0.5.4 changelog
2021-12-01 21:07:17 -09:00
Hayden
591bf9d98f Update v1-task.yaml 2021-11-24 11:46:43 -09:00
Hayden
f202b1f922 Update v1-task.yaml 2021-11-24 11:45:59 -09:00
Hayden
17b2e37e4e Update v1-task.yaml 2021-11-24 11:40:53 -09:00
Hayden
0ec8087ac6 Rename v1-task to v1-task.yaml 2021-11-24 11:33:59 -09:00
Hayden
e580d6f904 Create v1-tasks template 2021-11-24 11:33:26 -09:00
dvdkon
56d9cafb68 Add LDAP authentication support (v2, onto dev) (#803)
* Add LDAP authentication support

* Add test for LDAP authentication
2021-11-24 08:59:03 -09:00
Hayden
32c864c703 New Crowdin updates (#818)
* New translations en-US.json (French, Canada)

* New translations en-US.json (French, Canada)

* New translations en-US.json (French, Canada)

* New translations en-US.json (French)

* New translations en-US.json (French, Canada)

* New translations en-US.json (French, Canada)

* New translations en-US.json (French)
2021-11-23 20:38:25 -09:00
Bryce Willey
37280a3da0 Improve the SWAG Community Guide (#793)
* Freshen up the SWAG documentation

Added some extra pointers for setting up HTTPS with Mealie and SWAG, and indented the `docker-compose.yml` as it should be.

* Replaced <code> html blocks with backticks

* Better formatting and comments in example config files

* Made DuckDNS consistent with other places on the page
2021-11-23 20:34:23 -09:00
cadamswaite
7f850fba98 Use firefox UA when making requests (#780) 2021-11-23 20:34:10 -09:00
J.P. Krauss
b40f201430 Allow arrow keys to function when SearchDialog is not open (#777) 2021-11-07 10:11:07 -09:00
sephrat
a0d796551c Add support for new languages (#781)
* Add support for Slovak language

* Add support for new languages

Catalan, Danish, Norwegian and Russian
2021-11-07 10:03:37 -09:00
Hayden
fe3a4ab641 Update dockerbuild.prod.yml 2021-10-31 20:56:28 -08:00
Hayden
9a9fe66ccb Update dockerbuild.release.yml 2021-10-30 14:37:44 -08:00
Hayden
7fe4b75949 Build on release 2021-10-30 12:37:59 -08:00
Hayden
de5bea6f73 Bug/minor fixes (#762)
* Set web concurrency to 1

* bump versions

* update release notes

Co-authored-by: Hayden <hay-kot@pm.me>
2021-10-30 12:13:54 -08:00
Hayden
b6d43e8e3d New Crowdin updates (#759)
* New translations en-US.json (Chinese Simplified)

* New translations en-US.json (Chinese Simplified)
2021-10-28 19:13:10 -08:00
cadamswaite
18b099b115 Feature: Pick best image from list (#745)
* Pick largest image from list

* Add a safe value incase all requests fail

* Formatting
2021-10-19 20:30:06 -08:00
cadamswaite
3831eef508 Fix the recipe scraper debugger (#736)
* Fix recipe debugger

* Remove scrape-schema-recipe from dependencies

* Fix breaking tests
2021-10-19 16:01:35 -08:00
cadamswaite
75113cc2c7 Fix issues parsing times not in "PT.*H.*M" format (#733)
* Add more tests to the time cleaner

* Parse more time entries

* Formatting

* Refactor parse_duration

* Refactor pretty_print_timedelta

* Add some tests for pretty_print_timedelta

* Add option for cook_time from schema
2021-10-19 16:01:19 -08:00
cadamswaite
b81f88dc18 Fix issue with parsing scraped nutrition (#732)
* Fix issue with parsing scraped nutrition

* Attempt to clean nutrition info

* Allow comma separator

* Fix return type for clean_nutrition. Fail safe in case of unexpected type from scraper

* Switch to using regex parsing

* Formatting

* Cleanup - empty strings no longer a concern
2021-10-19 16:01:05 -08:00
zierbeek
756ffc8e90 Fixes #734 ios shortcut link and screenshots (#742) 2021-10-17 12:50:04 -08:00
Hayden
ec7df232ed New Crowdin updates (#730)
* New translations en-US.json (Russian)

* New translations en-US.json (Russian)

* New translations en-US.json (Russian)

* New translations en-US.json (Russian)

* New translations en-US.json (Swedish)

* New translations en-US.json (Swedish)

* New translations en-US.json (Swedish)
2021-10-17 12:49:51 -08:00
Hayden
35caef1c39 Revert "Docker/run as nonroot (#692)" (#724)
This reverts commit 19aa572bd8.
2021-10-06 09:42:37 -08:00
Hayden
9541137ef7 Update v1-bug-report.yaml 2021-10-04 15:40:49 -08:00
Hayden
756597324d Create v1-bug-report.yaml 2021-10-04 15:40:03 -08:00
Hayden
55f009ed9e Update bug-report.yaml 2021-10-04 15:35:45 -08:00
Hayden
9378c4879f update template 2021-10-04 15:35:09 -08:00
Usman Masood
19aa572bd8 Docker/run as nonroot (#692)
* changed python base image to 3.9.6

* bumped poetry version to 1.1.7

* user creation based on env variable PGID and PUID with default as PUID/PGID= 911

* App exposes APP_PORT=80 as env variable

* Removed user mod and handled it in docker image.

* moved scheduler.db to /app/temp dir

* set app default port to 80 if envvariable null

* Changed application port to env variable with default as 80

* Created sch. direcotry as part of image creation

* minor logging improvements.

* removed docker target

* cleanup

* fixed port

* fixed port

* fixed port

* removed volume specification

* fixing code quality warnings

* fixing code quality warnings

* fixing code quality warnings

* bumped versions to fix vulnerabilities

* corrected port

* bumped uvicorn version to fix vulnerabilities

* minor fix

* added sticky permissions

* adding port change info to docs

* adding port change info to docs

* adding port change info to docs

* improved formatting

* docs updated

* added docker port change warning
2021-10-02 11:35:16 -08:00
Krzysztof
66fdd6c428 feat: Add basic support for Web Share Target API (#714) 2021-10-02 10:09:17 -08:00
Hayden
3f419ad7b6 add '' around bool ENV variables 2021-09-30 17:49:03 -08:00
Hayden
f3305a9074 silence curl 2021-09-30 17:46:42 -08:00
Hayden
09e3b83933 chore/big-report-and-stalebot (#710)
* Create bug-report

* Update bug-report

* Delete bug_report.md

* Create stale.yaml
2021-09-30 17:45:33 -08:00
Hayden
b275aef04d fix(frontend): 🐛 fetch categories on load (#709)
Co-authored-by: Hayden <hay-kot@pm.me>
2021-09-30 17:14:22 -08:00
Hayden
69e226a0ed bug/fallback language fix (#708)
* add mealie-next items to gitignore

* revert lang to en-US if not found

* fix duplicate entries

Co-authored-by: Hayden <hay-kot@pm.me>
2021-09-30 17:03:11 -08:00
Hayden
aac0d5b6c6 New Crowdin updates (#703)
* New translations en-US.json (French)

* New translations en-US.json (Arabic)
2021-09-30 09:02:01 -08:00
Hayden
b47ee0557d New translations en-US.json (Chinese Simplified) (#701) 2021-09-29 10:47:30 -08:00
Bryce Willey
97e0796af2 Missing minus in Shopping List UI (#688)
* Shopping list quantity decrement button -> minus

Missed being renamed when material design icons were moved
to be global variables, still used the original md name.

* Updated poetry lock to fix rdflib-jsonld error

`extruct` depends on rdflib-jsonld, which had an error involving `use_2to3`
(https://github.com/RDFLib/rdflib-jsonld/pull/105), which prevented
building.

* update poetry CI/CD Version

Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
2021-09-23 08:30:37 -08:00
Jason Chia-Hsien Ho
733bb77ddb Add traditional chinese locale (#685) 2021-09-20 14:30:37 -08:00
Hayden
eda6821288 New Crowdin updates (#684)
* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Slovak)

* New translations en-US.json (Slovak)

* New translations en-US.json (Slovak)

* New translations en-US.json (Slovak)

* New translations en-US.json (Slovak)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Chinese Traditional)

* New translations en-US.json (Portuguese, Brazilian)

* New translations en-US.json (Portuguese, Brazilian)

* New translations en-US.json (Portuguese, Brazilian)

* New translations en-US.json (Portuguese, Brazilian)

* New translations en-US.json (Portuguese, Brazilian)

* New translations en-US.json (Portuguese, Brazilian)

* New translations en-US.json (Portuguese, Brazilian)
2021-09-20 14:30:27 -08:00
Patrick
20fc2d868b makes the recipe image clickable to open full version (#678) 2021-09-12 11:06:46 -08:00
Patrick
29d78f52ca address LGTM errors and warnings (#676)
* remove assignment to itself, identified by LGTM: https://lgtm.com/rules/1800093/

* variable overwritten, identified by LGTM: https://lgtm.com/rules/1800095/

* unnecessary else, identified by LGTM: https://lgtm.com/rules/5980098/
2021-09-12 11:06:27 -08:00
Patrick
006d6a6f1d reference default login credentials per the documentation (#675) 2021-09-12 11:06:07 -08:00
Hayden
a210efd62f New Crowdin updates (#652)
* New translations en-US.json (Norwegian)

* New translations en-US.json (Norwegian)

* New translations en-US.json (Norwegian)

* New translations en-US.json (Norwegian)

* New translations en-US.json (Norwegian)

* New translations en-US.json (Norwegian)

* New translations en-US.json (Portuguese)

* New translations en-US.json (Portuguese)

* New translations en-US.json (Slovak)

* New translations en-US.json (Slovak)

* New translations en-US.json (Slovak)

* New translations en-US.json (Slovak)

* New translations en-US.json (Slovak)
2021-09-12 11:05:49 -08:00
Nathan Rennie-Waldock
3ec9b5c34d Fix logging an error on successful image scrape (#612) 2021-09-12 11:05:39 -08:00
Hayden
fd17614764 New Crowdin updates (#641)
* New translations en-US.json (German)

* New translations en-US.json (Polish)

* New translations en-US.json (Slovak)

* New translations en-US.json (Slovak)

* New translations en-US.json (Polish)

* New translations en-US.json (French)

* New translations en-US.json (Russian)

* New translations en-US.json (Russian)

* New translations en-US.json (Russian)

* New translations en-US.json (Russian)

* New translations en-US.json (Russian)

* New translations en-US.json (Russian)

* New translations en-US.json (Spanish)

* New translations en-US.json (Spanish)

* New translations en-US.json (Catalan)

* New translations en-US.json (Spanish)

* New translations en-US.json (Catalan)

* New translations en-US.json (Spanish)

* New translations en-US.json (Catalan)

* New translations en-US.json (Catalan)

* New translations en-US.json (Catalan)

* New translations en-US.json (Danish)

* New translations en-US.json (Danish)

* New translations en-US.json (Danish)

* New translations en-US.json (Danish)

* New translations en-US.json (Norwegian)

* New translations en-US.json (Norwegian)

* New translations en-US.json (Norwegian)

* New translations en-US.json (Norwegian)

* New translations en-US.json (Norwegian)

* New translations en-US.json (Russian)
2021-08-19 20:14:48 -08:00
bartfailt
98b0f8779b Add support for the Hungarian language (hu-HU) (#639) 2021-08-19 20:14:36 -08:00
69 changed files with 23004 additions and 3288 deletions

52
.github/ISSUE_TEMPLATE/bug-report.yaml vendored Normal file
View File

@@ -0,0 +1,52 @@
---
name: Bug Report
description: "submit a bug report for the current release"
body:
- type: checkboxes
id: checks
attributes:
label: First Check
description: Please confirm and check all the following options.
options:
- label: This is not a feature request
required: true
- label: I added a very descriptive title to this issue.
required: true
- label: I used the GitHub search to find a similar issue and didn't find it.
required: true
- label: I searched the Mealie documentation, with the integrated search.
required: true
- label: I already read the docs and didn't find an answer.
required: true
- type: textarea
id: description
attributes:
label: What is the issue you are experiencing?
placeholder: A clear and concise description of what the bug is.
validations:
required: true
- type: dropdown
id: os
attributes:
label: Deployment
description: What Deployment system are you using?
multiple: true
options:
- Docker (Linux)
- Docker (Windows)
- Docker (Synology)
- Unraid
- Other
validations:
required: true
- type: textarea
id: os-details
attributes:
label: Deployment Details
description: You can add more details about your operating system here, in particular if you chose "Other". If you are experiencing issues with deployment, please provide your docker-compose or docker commands
- type: input
id: mealie-version
attributes:
label: Mealie Version
validations:
required: true

View File

@@ -1,38 +0,0 @@
---
name: Bug Report
about: Create a bug report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
<!-- A clear and concise description of what the bug is. -->
**Steps To Reproduce**
Please be specific!
1. Go to '...'
2. Click on '....'
3. etc.
**Sample Code**
<!-- If applicable, please include Sample code to reproduce the issue. -->
**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
**Actual Behavior**
<!-- A clear and concise description of what actually happens. -->
**Screenshots**
<!-- If applicable, add screenshots to help explain your problem. -->
**Device Information (please complete the following information):**
- OS: [e.g., WSL2 on Win10, Mac]
- Deployment: [e.g., Docker-version, docker-compose, Python application]
- Browser: [e.g., chrome, safari]
- Version: [e.g., 0.2.0-dev]
**Additional context**
<!-- Add any other context about the problem here. If applicable, please include why you think the bug is occurring and/or troubleshooting you have already performed. -->

View File

@@ -0,0 +1,47 @@
---
name: v1.0.0b Bug Report
description: "submit a bug report for the v1 beta"
title: "[v1.0.0b] - YOUR TITLE"
body:
- type: checkboxes
id: checks
attributes:
label: First Check
description: Please confirm and check all the following options.
options:
- label: This is not a feature request
required: true
- label: I added a very descriptive title to this issue.
required: true
- label: I used the GitHub search to find a similar issue and didn't find it.
required: true
- label: I searched the Mealie documentation, with the integrated search.
required: true
- label: I already read the docs and didn't find an answer.
required: true
- type: textarea
id: description
attributes:
label: What is the issue you are experiencing?
placeholder: A clear and concise description of what the bug is.
validations:
required: true
- type: dropdown
id: os
attributes:
label: Deployment
description: What Deployment system are you using?
multiple: true
options:
- Docker (Linux)
- Docker (Windows)
- Docker (Synology)
- Unraid
- Other
validations:
required: true
- type: textarea
id: os-details
attributes:
label: Deployment Details
description: You can add more details about your operating system here, in particular if you chose "Other". If you are experiencing issues with deployment, please provide your docker-compose or docker commands

38
.github/ISSUE_TEMPLATE/v1-task.yaml vendored Normal file
View File

@@ -0,0 +1,38 @@
---
name: v1.0.0b Task
description: "CONTRIBUTORS ONLY: Submit a Task that needs to be completed"
title: "[v1.0.0b] [Task] - TASK DESCRIPTION"
labels:
- task
- v1
body:
- type: markdown
attributes:
value: |
Thanks for your interest in Mealie! 🚀
This is a place for Mealie contributors to find tasks that need to get done around the repository. Tasks are different than issues as they are generally related to providing a new feature or improve an existing feature. They are _generally_ not related to an issue.
**DO NOT** create a task unless
- You are a contributors who has prior approval via discord/discussions
- You have otherwise been given approval to post the tasks
Otherwise, your post will be closed/deleted.
**Interested in Taking This?**
If you're interested in completing this tasks and it hasn't already been taken, comment below and to let others know you're working on it. As you work through the task, I ask that you submit a draft pull request as soon as possible, and tag this issue so we can all collaborate as best as possible.
- type: textarea
id: problem
attributes:
label: What is the problem this task addresses?
placeholder: A clear and concise description of what the problem this task will address.
validations:
required: true
- type: textarea
id: solution
attributes:
label: Proposed/Possible Solution(s)?
placeholder: Provide as much context around the idea as possible with potential files and roadblocks that may come up
validations:
required: true

17
.github/stale.yaml vendored Normal file
View File

@@ -0,0 +1,17 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

View File

@@ -1,8 +1,7 @@
name: Publish docs via GitHub Pages
on:
push:
branches:
- master
release:
types: [published]
jobs:
build:
@@ -10,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout main
uses: actions/checkout@v1
uses: actions/checkout@v2
- name: Deploy docs
uses: mhausenblas/mkdocs-deploy-gh-pages@master

View File

@@ -45,4 +45,4 @@ jobs:
run: |
docker build --push \
--tag hkotel/mealie:latest \
--platform linux/amd64,linux/arm/v7,linux/arm64 .
--platform linux/amd64,linux/arm64 .

View File

@@ -53,4 +53,4 @@ jobs:
run: |
docker build --push \
--tag hkotel/mealie:${{ steps.mealie_version.outputs.tag }} \
--platform linux/amd64,linux/arm/v7,linux/arm64 .
--platform linux/amd64,linux/arm64 .

View File

@@ -39,7 +39,7 @@ jobs:
# ----- install & configure poetry -----
#----------------------------------------------
- name: Install Poetry
uses: snok/install-poetry@v1.1.1
uses: snok/install-poetry@v1
with:
virtualenvs-create: true
virtualenvs-in-project: true
@@ -57,6 +57,7 @@ jobs:
#----------------------------------------------
- name: Install dependencies
run: |
sudo apt-get install libsasl2-dev libldap2-dev libssl-dev
poetry install
poetry add "psycopg2-binary==2.8.6"
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'

7
.gitignore vendored
View File

@@ -149,4 +149,9 @@ dev/data/backups/dev_sample_data*.zip
!dev/data/backups/test*.zip
dev/data/recipes/*
dev/scripts/output/app_routes.py
dev/scripts/output/javascriptAPI/*
dev/scripts/output/javascriptAPI/*
mealie/services/scraper/ingredient_nlp/model.crfmodel
.gitignore
frontend/.nuxt/**
frontend/static/sw.js
dev/code-generation/generated/*

View File

@@ -15,5 +15,6 @@
"i18n-ally.keystyle": "nested",
"cSpell.words": ["compression", "hkotel", "performant", "postgres", "webp"],
"search.mode": "reuseEditor",
"python.linting.flake8Enabled": true
"python.linting.flake8Enabled": true,
"conventionalCommits.scopes": ["frontend"]
}

View File

@@ -44,6 +44,8 @@ RUN apt-get update \
build-essential \
libpq-dev \
libwebp-dev \
# LDAP Dependencies
libsasl2-dev libldap2-dev libssl-dev \
gnupg gnupg2 gnupg1 \
debian-keyring \
debian-archive-keyring \
@@ -134,7 +136,7 @@ ENV APP_PORT=80
EXPOSE ${APP_PORT}
HEALTHCHECK CMD curl -f http://localhost:${APP_PORT} || exit 1
HEALTHCHECK CMD curl -fs http://localhost:${APP_PORT} || exit 1
RUN chmod +x $MEALIE_HOME/mealie/run.sh
ENTRYPOINT $MEALIE_HOME/mealie/run.sh

View File

@@ -0,0 +1,32 @@
import json
import requests
from pydantic import BaseModel
class GithubIssue(BaseModel):
url: str
number: int
title: str
def get_issues_by_label(label="fixed-pending-release") -> list[GithubIssue]:
issues_url = f"https://api.github.com/repos/hay-kot/mealie/issues?labels={label}"
response = requests.get(issues_url)
issues = json.loads(response.text)
return [GithubIssue(**issue) for issue in issues]
def format_markdown_list(issues: list[GithubIssue]) -> str:
return "\n".join(f"- [{issue.number}]({issue.url}) - {issue.title}" for issue in issues)
def main() -> None:
issues = get_issues_by_label()
print(format_markdown_list(issues))
if __name__ == "__main__":
main()

View File

@@ -1,4 +1,4 @@
# Use root/example as user/password credentials
# Use changeme@email.com/MyPassword as user/password credentials
version: "3.1"
services:
# Vue Frontend

View File

@@ -20,7 +20,7 @@ services:
POSTGRES_DB: mealie
# WORKERS_PER_CORE: 0.5
# MAX_WORKERS: 8
WEB_CONCURRENCY: 2
# WEB_CONCURRENCY: 2
postgres:
container_name: postgres
image: postgres

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@@ -0,0 +1,31 @@
# v0.5.3 - Bug Fixes
**App Version: v0.5.3**
**Database Version: v0.5.0**
## Breaking Changes
!!! error "Breaking Changes"
#### None
## Bug Fixes
- [755](https://api.github.com/repos/hay-kot/mealie/issues/755) - Mealie Categories Not Displaying Until After Settings Opened
- [748](https://api.github.com/repos/hay-kot/mealie/issues/748) - categories - Internal Server Error
- [689](https://api.github.com/repos/hay-kot/mealie/issues/689) - Importing a recipe with time information
- [671](https://api.github.com/repos/hay-kot/mealie/issues/671) - Localization not loading on upgrade to v0.5.2
- [655](https://api.github.com/repos/hay-kot/mealie/issues/655) - Clicking on "tags" on a mobile phone doesn't work (Wrong link, "Internal server error")
- [654](https://api.github.com/repos/hay-kot/mealie/issues/654) - Ram Usage
- Fixed Missing minus in shopping list UI [688](https://github.com/hay-kot/mealie/pull/688)
## Features and Improvements
### General
- Recipe Images are no clickable [678](https://github.com/hay-kot/mealie/pull/678)
- Additional Translations
- Improved Recipe Parser thanks to [@cadamswaite](https://github.com/hay-kot/mealie/pulls?q=is%3Apr+author%3Acadamswaite)
- URL Scraper will now choose the best image from the list provided by the site
- Fixed the debugger to provide more meaningful data
- Fix issues parsing time formats
- Added support for parsing scraped nutrition details

View File

@@ -0,0 +1,28 @@
# v0.5.4 - Bug Fixes
**App Version: v0.5.4**
**Database Version: v0.5.0**
## Breaking Changes
!!! error "Breaking Changes"
None
## What's Changed
* Add support for new languages by @sephrat in https://github.com/hay-kot/mealie/pull/781
* Allow arrow keys to function when SearchDialog is not open by @asymworks in https://github.com/hay-kot/mealie/pull/777
* Use firefox user agent when making requests by @cadamswaite in https://github.com/hay-kot/mealie/pull/780
* Improve the SWAG Community Guide by @BryceStevenWilley in https://github.com/hay-kot/mealie/pull/793
* New Crowdin updates by @hay-kot in https://github.com/hay-kot/mealie/pull/818
* Add LDAP authentication support (v2, onto dev) by @dvdkon in https://github.com/hay-kot/mealie/pull/803
* Auto backup is now disabled by default. Enable it by setting the AUTO_BACKUP_ENABLED env variable to true.
## New Contributors
* @asymworks made their first contribution in https://github.com/hay-kot/mealie/pull/777
* @dvdkon made their first contribution in https://github.com/hay-kot/mealie/pull/803
**Full Changelog**: https://github.com/hay-kot/mealie/compare/v0.5.3...v0.5.4

View File

@@ -9,14 +9,14 @@ Don't know what an iOS shortcut is? Neither did I! Experienced iOS users may alr
> A shortcut is a quick way to get one or more tasks done with your apps. The Shortcuts app lets you create your own shortcuts with multiple steps. For example, build a “Surf Time” shortcut that grabs the surf report, gives an ETA to the beach, and launches your surf music playlist.
>
Basically it is a visual scripting language that lets a user build an automation in a guided fashion. The automation can be [shared with anyone](https://www.icloud.com/shortcuts/4c40fcc6f39549f9a189995a449cd44f) but if it is a user creation, you'll have to jump through a few hoops to make an untrusted automation work on your device.
Basically it is a visual scripting language that lets a user build an automation in a guided fashion. The automation can be [shared with anyone](https://www.icloud.com/shortcuts/9d8827cabde44b379e673a60f27fe4bb) but if it is a user creation, you'll have to jump through a few hoops to make an untrusted automation work on your device.
You need to replace `username` and `password` with the login information for your mealie instance.
![screenshot](../img/iOS_username.jpg)
![screenshot](../../assets/img/ios-shortcut-username.jpg)
Then, you need to put in your mealie domain. The API port of `:9000` is not needed when putting your domain in the text field.
![screenshot](../img/iOS_host.jpg)
![screenshot](../../assets/img/ios-shortcut-host.jpg)
You should now be able to share a website to the shortcut and have mealie grab all the necessary information!

View File

@@ -4,89 +4,96 @@
This guide was submitted by a community member. Find something wrong? Submit a PR to get it fixed!
To make the setup of a Reverse Proxy much easier, Linuxserver.io developed [SWAG](https://github.com/linuxserver/docker-swag)
SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx web server and reverse proxy with PHP support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention.
SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx web server and reverse proxy with PHP support and a built-in certbot client that automates free TLS server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention.
## Step 1: Get a domain
The first step is to grab a dynamic DNS if you don't have your own subdomain already. You can get this from for example [DuckDNS](https://www.duckdns.org).
If you already own a domain, you'll need to create an `A` record that points to the machine that SWAG is running on. See
the [SWAG documentation](https://docs.linuxserver.io/general/swag#create-container-via-http-validation) for more details.
## Step 2: Set-up SWAG
Then you will need to set up SWAG, the variables of the docker-compose are explained on the Github page of [SWAG](https://github.com/linuxserver/docker-swag).
This is an example of how to set it up using duckdns and docker-compose.
This is an example of how to set it up using DuckDNS and docker-compose.
!!! example "docker-compose.yml"
```yaml
version: "2.1"
services:
swag:
image: ghcr.io/linuxserver/swag
container_name: swag
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Brussels
- URL=<mydomain.duckdns>
- SUBDOMAINS=wildcard
- VALIDATION=duckdns
- CERTPROVIDER= #optional
- DNSPLUGIN= #optional
- DUCKDNSTOKEN=<duckdnstoken>
- EMAIL=<e-mail> #optional
- ONLY_SUBDOMAINS=false #optional
- EXTRA_DOMAINS=<extradomains> #optional
- STAGING=false #optional
volumes:
- /etc/config/swag:/config
ports:
- 443:443
restart: unless-stopped
swag:
image: ghcr.io/linuxserver/swag
container_name: swag
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
# valid TZs at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
- TZ=Europe/Brussels
- URL=<mydomain.duckdns>
- SUBDOMAINS=wildcard
- VALIDATION=duckdns
- CERTPROVIDER= #optional
- DNSPLUGIN= #optional
- DUCKDNSTOKEN=<duckdnstoken>
- EMAIL=<e-mail> #optional
- ONLY_SUBDOMAINS=false #optional
- EXTRA_DOMAINS=<extradomains> #optional
- STAGING=false #optional
volumes:
- /etc/config/swag:/config
ports:
- 443:443
# required if VALIDATION=http above, if you aren't using DuckDNS
- 80:80
restart: unless-stopped
```
Don't forget to change the <code>mydomain.duckns</code> into your personal domain and the <code>duckdnstoken</code> into your token and remove the brackets.
Don't forget to change the `mydomain.duckns` into your personal domain and the `duckdnstoken` into your token and remove the brackets.
You can also include the contents of the [mealie docker-compose](mealie/documentation/getting-started/install/#docker-compose-with-sqlite) in the SWAG
docker-compose, without the `ports` section under mealie. This allows SWAG and mealie to communicate on the same docker network, without
making mealie visible to other applications on your machine.
## Step 3: Change the config files
Navigate to the config folder of SWAG and head to <code>proxy-confs</code>. If you used the example above, you should navigate to: <code>/etc/config/swag/nginx/proxy-confs/</code>.
Navigate to the config folder of SWAG and head to `proxy-confs`. If you used the example above, you should navigate to: `/etc/config/swag/nginx/proxy-confs/`.
There are a lot of preconfigured files to use for different apps such as radarr, sonarr, overseerr, ...
To use the bundled configuration file, simply rename <code>mealie.subdomain.conf.sample</code> in the proxy-confs folder to <code>mealie.subdomain.conf</code>.
Alternatively, you can create a new file <code>mealie.subdomain.conf</code> in proxy-confs with the following configuration:
To use the bundled configuration file, simply rename `mealie.subdomain.conf.sample` in the proxy-confs folder to `mealie.subdomain.conf`.
Alternatively, you can create a new file `mealie.subdomain.conf` in proxy-confs with the following configuration:
!!! example "mealie.subdomain.conf"
```yaml
server {
```nginx
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mealie.*;
server_name mealie.*;
include /config/nginx/ssl.conf;
include /config/nginx/ssl.conf;
client_max_body_size 0;
client_max_body_size 0;
location / {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app mealie;
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
location / {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app mealie;
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
```
## Step 4: Port-forward port 443
Since SWAG allows you to set up a secure connection, you will need to open port 443 on your router for encrypted traffic. This is way more secure than port 80 for http.
Since SWAG allows you to set up a secure connection, you will need to open port 443 on your router for encrypted traffic. This is way more secure than port 80 for http. For more information about using TLS on port 443, see [SWAG's documentation](https://docs.linuxserver.io/general/swag#cert-provider-lets-encrypt-vs-zerossl) on cert providers and port forwarding.
## Step 5: Restart SWAG
When you change anything in the config of Nginx, you will need to restart the container using <code>docker restart swag</code>.
If everything went well, you can now access mealie on the subdomain you configured: mealie.mydomain.duckdns.org
When you change anything in the config of Nginx, you will need to restart the container using `docker restart swag`.
If everything went well, you can now access mealie on the subdomain you configured: `mealie.mydomain.duckdns.org`

View File

@@ -46,15 +46,15 @@ services:
TZ: America/Anchorage
# Default Recipe Settings
RECIPE_PUBLIC: true
RECIPE_SHOW_NUTRITION: true
RECIPE_SHOW_ASSETS: true
RECIPE_LANDSCAPE_VIEW: true
RECIPE_DISABLE_COMMENTS: false
RECIPE_DISABLE_AMOUNT: false
RECIPE_PUBLIC: 'true'
RECIPE_SHOW_NUTRITION: 'true'
RECIPE_SHOW_ASSETS: 'true'
RECIPE_LANDSCAPE_VIEW: 'true'
RECIPE_DISABLE_COMMENTS: 'false'
RECIPE_DISABLE_AMOUNT: 'false'
# Gunicorn
WEB_CONCURRENCY: 2
# WEB_CONCURRENCY: 2
# WORKERS_PER_CORE: 0.5
# MAX_WORKERS: 8
volumes:
@@ -90,15 +90,15 @@ services:
POSTGRES_DB: mealie
# Default Recipe Settings
RECIPE_PUBLIC: true
RECIPE_SHOW_NUTRITION: true
RECIPE_SHOW_ASSETS: true
RECIPE_LANDSCAPE_VIEW: true
RECIPE_DISABLE_COMMENTS: false
RECIPE_DISABLE_AMOUNT: false
RECIPE_PUBLIC: 'true'
RECIPE_SHOW_NUTRITION: 'true'
RECIPE_SHOW_ASSETS: 'true'
RECIPE_LANDSCAPE_VIEW: 'true'
RECIPE_DISABLE_COMMENTS: 'false'
RECIPE_DISABLE_AMOUNT: 'false'
# Gunicorn
WEB_CONCURRENCY: 2
# WEB_CONCURRENCY: 2
# WORKERS_PER_CORE: 0.5
# MAX_WORKERS: 8
volumes:
@@ -128,12 +128,17 @@ services:
| POSTGRES_PORT | 5432 | Postgres database port |
| POSTGRES_DB | mealie | Postgres database name |
| TOKEN_TIME | 2 | The time in hours that a login/auth token is valid |
| LDAP_AUTH_ENABLED | False | Authenticate via an external LDAP server in addidion to built-in Mealie auth |
| LDAP_SERVER_URL | None | LDAP server URL (e.g. ldap://ldap.example.com) |
| LDAP_BIND_TEMPLATE | None | Templated DN for users, `{}` will be replaced with the username (e.g. `cn={},dc=example,dc=com`) |
| LDAP_ADMIN_FILTER | None | Optional LDAP filter, which tells Mealie the LDAP user is an admin (e.g. `(memberOf=cn=admins,dc=example,dc=com)`) |
| RECIPE_PUBLIC | True | Default Recipe Settings - Make Recipe Public |
| RECIPE_SHOW_NUTRITION | True | Default Recipe Settings - Show Recipe Nutrition |
| RECIPE_SHOW_ASSETS | True | Default Recipe Settings - Show Recipe Assets |
| RECIPE_LANDSCAPE_VIEW | True | Default Recipe Settings - Set Landscape View |
| RECIPE_DISABLE_COMMENTS | False | Default Recipe Settings - Disable Comments |
| RECIPE_DISABLE_AMOUNT | False | Default Recipe Settings - Disable Amount |
| AUTO_BACKUP_ENABLED | False | Disable/Enable Mealie's Auto Backup Function |
| API_PORT | 9000 | The port exposed by backend API. **Do not change this if you're running in Docker** |
| API_DOCS | True | Turns on/off access to the API documentation locally. |
| TZ | UTC | Must be set to get correct date/time on the server |

View File

@@ -94,6 +94,7 @@ nav:
- Style Guide: "contributors/developers-guide/style-guide.md"
- Development Road Map: "roadmap.md"
- Change Log:
- v0.5.3 - Bug Fixes: "changelog/v0.5.3.md"
- v0.5.2 Misc Updates: "changelog/v0.5.2.md"
- v0.5.1 Bug Fixes: "changelog/v0.5.1.md"
- v0.5.0 General Upgrades: "changelog/v0.5.0.md"

18058
frontend/package-lock.json generated
View File

File diff suppressed because it is too large Load Diff

View File

@@ -78,5 +78,13 @@
"start_url": ".",
"display": "standalone",
"background_color": "#FFFFFF",
"theme_color": "#E58325"
}
"theme_color": "#E58325",
"share_target": {
"action": "/",
"method": "GET",
"params": {
"title": "title",
"text": "recipe_import_url"
}
}
}

View File

@@ -5,7 +5,7 @@
<v-main>
<v-banner v-if="demo" sticky>
<div class="text-center">
<b> This is a Demo of the v0.5.0 (BETA) </b> | Username: changeme@email.com | Password: demo
<b> This is a Demo of the v0.5.4 (BETA) </b> | Username: changeme@email.com | Password: demo
</div>
</v-banner>
<GlobalSnackbar />
@@ -55,6 +55,7 @@ export default {
this.$store.dispatch("requestUserData");
this.$store.dispatch("requestCurrentGroup");
this.$store.dispatch("requestTags");
this.$store.dispatch("requestCategories");
this.$store.dispatch("requestAppInfo");
this.$store.dispatch("requestSiteSettings");

View File

@@ -136,16 +136,18 @@ export default {
this.$emit(SELECTED_EVENT, recipe);
},
onUpDown(e) {
if (e.keyCode === 38) {
e.preventDefault();
this.selectedIndex--;
} else if (e.keyCode === 40) {
e.preventDefault();
this.selectedIndex++;
} else {
return;
if (this.dialog) {
if (e.keyCode === 38) {
e.preventDefault();
this.selectedIndex--;
} else if (e.keyCode === 40) {
e.preventDefault();
this.selectedIndex++;
} else {
return;
}
this.selectRecipe();
}
this.selectRecipe();
},
resetSelected() {
this.searchString = "";
@@ -169,4 +171,4 @@ export default {
</script>
<style >
</style>
</style>

View File

@@ -166,10 +166,12 @@ export default {
},
mounted() {
if (this.$route.query.recipe_import_url) {
this.addRecipe = true;
this.createRecipe();
}
this.$router.onReady(() => {
if (this.$route.query.recipe_import_url) {
this.addRecipe = true;
this.createRecipe();
}
});
},
computed: {

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

@@ -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

@@ -1,45 +1,45 @@
{
"about": {
"about": "About",
"about-mealie": "About Mealie",
"api-docs": "API Docs",
"about": "حول",
"about-mealie": "حول Mealie",
"api-docs": "مستندات API",
"api-port": "API Port",
"application-mode": "Application Mode",
"database-type": "Database Type",
"database-url": "Database URL",
"default-group": "Default Group",
"demo": "Demo",
"demo-status": "Demo Status",
"development": "Development",
"docs": "Docs",
"download-log": "Download Log",
"application-mode": "وضع التطبيق",
"database-type": "نوع قاعدة البيانات",
"database-url": "رابط قاعدة البيانات",
"default-group": "المجموعة الافتراضية",
"demo": "عرض تجريبي",
"demo-status": "حالة العرض تجريبي",
"development": "تطوير",
"docs": "المستندات",
"download-log": "تحميل السجل",
"download-recipe-json": "Last Scraped JSON",
"github": "Github",
"log-lines": "Log Lines",
"not-demo": "Not Demo",
"not-demo": "ليس عرض تجريبي",
"portfolio": "Portfolio",
"production": "Production",
"support": "Support",
"version": "Version"
"production": "الإنتاج",
"support": "الدعم",
"version": "الإصدار"
},
"asset": {
"assets": "Assets",
"code": "Code",
"file": "File",
"image": "Image",
"new-asset": "New Asset",
"assets": "الأصول",
"code": "الكود",
"file": "ملف",
"image": "صورة",
"new-asset": "أصول جديدة",
"pdf": "PDF",
"recipe": "Recipe",
"show-assets": "Show Assets"
"recipe": "وصفة",
"show-assets": "إظهار الأصول"
},
"category": {
"category-created": "Category created",
"category-creation-failed": "Category creation failed",
"category-deleted": "Category Deleted",
"category-deletion-failed": "Category deletion failed",
"category-created": "تم انشاء الفئة",
"category-creation-failed": "فشل إنشاء الفئة",
"category-deleted": "تم حذف الفئة",
"category-deletion-failed": "فشل حذف الفئة",
"category-filter": "Category Filter",
"category-update-failed": "Category update failed",
"category-updated": "Category updated",
"category-update-failed": "فشل تحديث الفئة",
"category-updated": "تم تحديث الفئة",
"uncategorized-count": "Uncategorized {count}"
},
"events": {

View File

@@ -1,489 +1,489 @@
{
"about": {
"about": "About",
"about": "Quant a",
"about-mealie": "Quant a Mealie",
"api-docs": "Documentació de l'API",
"api-port": "Port de l'API",
"application-mode": "Application Mode",
"database-type": "Database Type",
"database-url": "Database URL",
"default-group": "Default Group",
"application-mode": "Mode",
"database-type": "Tipus de base de dades",
"database-url": "URL del servidor de base de dades",
"default-group": "Grup per defecte",
"demo": "Demo",
"demo-status": "Demo Status",
"development": "Development",
"docs": "Docs",
"download-log": "Download Log",
"download-recipe-json": "Last Scraped JSON",
"demo-status": "Estat",
"development": "Desenvolupament",
"docs": "Documentació",
"download-log": "Descarregueu el registre",
"download-recipe-json": "Últim JSON recuperat",
"github": "Github",
"log-lines": "Log Lines",
"not-demo": "Not Demo",
"portfolio": "Portfolio",
"production": "Production",
"support": "Support",
"version": "Version"
"log-lines": "Registre Línies",
"not-demo": "No Demo",
"portfolio": "Projectes",
"production": "Producció",
"support": "Suport",
"version": "Versió"
},
"asset": {
"assets": "Assets",
"code": "Code",
"file": "File",
"image": "Image",
"new-asset": "New Asset",
"assets": "Adjunts",
"code": "Codi font",
"file": "Arxiu",
"image": "Imatge",
"new-asset": "Afegiu un adjunt",
"pdf": "PDF",
"recipe": "Recipe",
"show-assets": "Show Assets"
"recipe": "Recepta",
"show-assets": "Mostra els adjunts"
},
"category": {
"category-created": "Category created",
"category-creation-failed": "Category creation failed",
"category-deleted": "Category Deleted",
"category-deletion-failed": "Category deletion failed",
"category-filter": "Category Filter",
"category-update-failed": "Category update failed",
"category-updated": "Category updated",
"uncategorized-count": "Uncategorized {count}"
"category-created": "S'ha creat la categoria",
"category-creation-failed": "S'ha produït un error al crear la categoria",
"category-deleted": "S'ha suprimit la categoria",
"category-deletion-failed": "S'ha produït un error al eliminar la categoria",
"category-filter": "Filtre per categoria",
"category-update-failed": "S'ha produït un error a l'actualitzar la categoria",
"category-updated": "S'ha actualitzat la categoria",
"uncategorized-count": "{count} sense categoritzar"
},
"events": {
"apprise-url": "Apprise URL",
"database": "Database",
"delete-event": "Delete Event",
"new-notification-form-description": "Mealie uses the Apprise library to generate notifications. They offer many options for services to use for notifications. Refer to their wiki for a comprehensive guide on how to create the URL for your service. If available, selecting the type of your notification may include extra features.",
"new-version": "New version available!",
"notification": "Notification",
"refresh": "Refresh",
"scheduled": "Scheduled",
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent"
"database": "Base de Dades",
"delete-event": "Suprimiu l'esdeveniment",
"new-notification-form-description": "Mealie utilitza la llibreria Apprise per a generar notificacions. Ofereix moltes opcions de serveis de notificació. A la seua wiki, disposeu de guies d'ús i informació per a crear l'URL al vostre servei. Si està disponible, al seleccionar el tipus de notificació, pot incloure funcions adicionals.",
"new-version": "Hi ha una nova versió disponible!",
"notification": "Notificacions",
"refresh": "Recarrega",
"scheduled": "Programat",
"something-went-wrong": "Alguna cosa ha anat malament!",
"subscribed-events": "Esdeveniments subscrits",
"test-message-sent": "S'ha enviat el missatge"
},
"general": {
"cancel": "Cancel",
"clear": "Clear",
"close": "Close",
"confirm": "Confirm",
"confirm-delete-generic": "Are you sure you want to delete this?",
"copied": "Copied",
"create": "Create",
"created": "Created",
"custom": "Custom",
"dashboard": "Dashboard",
"delete": "Delete",
"disabled": "Disabled",
"download": "Download",
"edit": "Edit",
"enabled": "Enabled",
"exception": "Exception",
"failed-count": "Failed: {count}",
"failure-uploading-file": "Failure uploading file",
"favorites": "Favorites",
"field-required": "Field Required",
"file-folder-not-found": "File/folder not found",
"file-uploaded": "File uploaded",
"filter": "Filter",
"friday": "Friday",
"cancel": "Anuŀla",
"clear": "Neteja",
"close": "Tanca",
"confirm": "Confirma",
"confirm-delete-generic": "Esteu segur de voler suprimir-lo?",
"copied": "S'ha copiat",
"create": "Crea",
"created": "S'ha creat",
"custom": "Personalitzat",
"dashboard": "Tauler de control",
"delete": "Suprimeix",
"disabled": "Desactivat",
"download": "Baixal",
"edit": "Edita",
"enabled": "Activat",
"exception": "Excepció",
"failed-count": "Han fallat: {count}",
"failure-uploading-file": "No s'ha pogut pujar l'arxiu",
"favorites": "Preferides",
"field-required": "Camp obligatori",
"file-folder-not-found": "No s'ha trobat la carpeta o l'arxiu",
"file-uploaded": "S'ha pujat l'arxiu",
"filter": "Filtre",
"friday": "Divendres",
"general": "General",
"get": "Get",
"home": "Home",
"image": "Image",
"image-upload-failed": "Image upload failed",
"import": "Import",
"get": "Obté",
"home": "Inici",
"image": "Imatge",
"image-upload-failed": "No s'ha pogut pujar la imatge",
"import": "Importa",
"json": "JSON",
"keyword": "Keyword",
"link-copied": "Link Copied",
"loading-recipes": "Loading Recipes",
"monday": "Monday",
"name": "Name",
"new": "New",
"keyword": "Paraula clau",
"link-copied": "S'ha copiat l'enllaç",
"loading-recipes": "Carregant les receptes",
"monday": "Dilluns",
"name": "Nom",
"new": "Nou",
"no": "No",
"no-recipe-found": "No Recipe Found",
"ok": "OK",
"options": "Options:",
"print": "Print",
"random": "Random",
"rating": "Rating",
"no-recipe-found": "No s'han trobat receptes",
"ok": "D'acord",
"options": "Opcions:",
"print": "Imprimiu",
"random": "Aleatori",
"rating": "Valoració",
"recent": "Recent",
"recipe": "Recipe",
"recipes": "Recipes",
"rename-object": "Rename {0}",
"reset": "Reset",
"saturday": "Saturday",
"save": "Save",
"settings": "Settings",
"share": "Share",
"shuffle": "Shuffle",
"sort": "Sort",
"sort-alphabetically": "Alphabetical",
"status": "Status",
"submit": "Submit",
"success-count": "Success: {count}",
"sunday": "Sunday",
"templates": "Templates:",
"test": "Test",
"themes": "Themes",
"thursday": "Thursday",
"recipe": "Recepta",
"recipes": "Receptes",
"rename-object": "Canvia de nom {0}",
"reset": "Restableix",
"saturday": "Dissabte",
"save": "Desa",
"settings": "Configuració",
"share": "Compartiu",
"shuffle": "Barreja",
"sort": "Ordena",
"sort-alphabetically": "Alfabèticament",
"status": "Estat",
"submit": "Envia",
"success-count": "Amb èxit: {count}",
"sunday": "Diumenge",
"templates": "Plantilles:",
"test": "Prova",
"themes": "Temes",
"thursday": "Dijous",
"token": "Token",
"tuesday": "Tuesday",
"type": "Type",
"update": "Update",
"updated": "Updated",
"upload": "Upload",
"url": "URL",
"view": "View",
"wednesday": "Wednesday",
"yes": "Yes"
"tuesday": "Dimarts",
"type": "Tipus",
"update": "Actualitza",
"updated": "S'ha actualitzat",
"upload": "Puja",
"url": "Adreça",
"view": "Mostra",
"wednesday": "Dimecres",
"yes": ""
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
"cannot-delete-default-group": "Cannot delete default group",
"cannot-delete-group-with-users": "Cannot delete group with users",
"confirm-group-deletion": "Confirm Group Deletion",
"create-group": "Create Group",
"error-updating-group": "Error updating group",
"group": "Group",
"group-deleted": "Group deleted",
"group-deletion-failed": "Group deletion failed",
"group-id-with-value": "Group ID: {groupID}",
"group-name": "Group Name",
"group-not-found": "Group not found",
"group-with-value": "Group: {groupID}",
"groups": "Groups",
"manage-groups": "Manage Groups",
"user-group": "User Group",
"user-group-created": "User Group Created",
"user-group-creation-failed": "User Group Creation Failed"
"are-you-sure-you-want-to-delete-the-group": "Esteu segur de voler suprimir el grup <b>{groupName}<b/>?",
"cannot-delete-default-group": "No s'ha pogut suprimir el grup",
"cannot-delete-group-with-users": "No es pot suprimir un grup amb usuaris",
"confirm-group-deletion": "Confirma l'eliminació del grup",
"create-group": "Crea un grup",
"error-updating-group": "Sha produït un error a l'actualitzar el grup",
"group": "Grup",
"group-deleted": "S'ha suprimir el grup",
"group-deletion-failed": "S'ha produït un error al suprimir el grup",
"group-id-with-value": "Identificador del grup: {groupID}",
"group-name": "Nom del grup",
"group-not-found": "No s'ha trobat el grup",
"group-with-value": "Grup: {groupID}",
"groups": "Grups",
"manage-groups": "Gestiona els grups",
"user-group": "Grup",
"user-group-created": "S'ha creat el grup de l'usuari",
"user-group-creation-failed": "Ha fallat la creación del grup de l'usuari"
},
"meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan",
"dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT",
"edit-meal-plan": "Edit Meal Plan",
"end-date": "End Date",
"group": "Group (Beta)",
"main": "Main",
"meal-planner": "Meal Planner",
"meal-plans": "Meal Plans",
"mealplan-categories": "MEALPLAN CATEGORIES",
"mealplan-created": "Mealplan created",
"mealplan-creation-failed": "Mealplan creation failed",
"mealplan-deleted": "Mealplan Deleted",
"mealplan-deletion-failed": "Mealplan deletion failed",
"mealplan-settings": "Mealplan Settings",
"mealplan-update-failed": "Mealplan update failed",
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planner",
"quick-week": "Quick Week",
"side": "Side",
"sides": "Sides",
"start-date": "Start Date"
"create-a-new-meal-plan": "Crea un nou menú",
"dinner-this-week": "Sopar d'esta setmana",
"dinner-today": "Sopar per a hui",
"dinner-tonight": "Sopar d'esta nit",
"edit-meal-plan": "Edita el menú",
"end-date": "Data de finalització",
"group": "Agrupa (en proves)",
"main": "Principal",
"meal-planner": "Planificador de menús",
"meal-plans": "Menús",
"mealplan-categories": "Categories dels menús",
"mealplan-created": "S'ha actualitzat el menú",
"mealplan-creation-failed": "S'ha produït un error al crear el menú",
"mealplan-deleted": "S'ha suprimir el menú",
"mealplan-deletion-failed": "S'ha produït un error al suprimir el menú",
"mealplan-settings": "Configuració del menú",
"mealplan-update-failed": "S'ha produït un error a l'actualitzar el menú",
"mealplan-updated": "S'ha actualitzat el menú",
"no-meal-plan-defined-yet": "No hi ha cap menú planificat",
"no-meal-planned-for-today": "No hi han cap menú per a hui",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Només s'utilitzaran aquestes categories per als menús",
"planner": "Planificador",
"quick-week": "Pla ràpid",
"side": "Guarnició",
"sides": "Guarnicions",
"start-date": "Data d'inici"
},
"migration": {
"chowdown": {
"description": "Migrate data from Chowdown",
"description": "Migreu les dades de Chowdown",
"title": "Chowdown"
},
"migration-data-removed": "Migration data removed",
"migration-data-removed": "S'han suprimit les dades migrades",
"nextcloud": {
"description": "Migrate data from a Nextcloud Cookbook instance",
"description": "Migreu les dades del Cookbook de Nextcloud",
"title": "Nextcloud Cookbook"
},
"no-migration-data-available": "No Migration Data Available",
"recipe-migration": "Recipe Migration"
"no-migration-data-available": "No hi han dades disponibles",
"recipe-migration": "Migració de receptes"
},
"new-recipe": {
"bulk-add": "Bulk Add",
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.",
"error-title": "Looks Like We Couldn't Find Anything",
"from-url": "Import a Recipe",
"bulk-add": "Afegiu tot d'una",
"error-details": "Mealie només pot importar els llocs web amb Id+json o microdata. Els principals llocs de receptes suporten aquesta estructura de les dades. Si no pot importar-les però hi ha dades json al registre, per favor, obriu un problema (issue) a GitHub amb l'URL i les dades. A GitHub només obriu problemes en anglés.",
"error-title": "No hem pout trobar res",
"from-url": "Importa una recepta",
"github-issues": "GitHub Issues",
"google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Must be a Valid URL",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Paste in your recipe data. Each line will be treated as an item in a list",
"recipe-markup-specification": "Recipe Markup Specification",
"recipe-url": "Recipe URL",
"upload-a-recipe": "Upload a Recipe",
"upload-individual-zip-file": "Upload an individual .zip file exported from another Mealie instance.",
"url-form-hint": "Copy and paste a link from your favorite recipe website",
"view-scraped-data": "View Scraped Data"
"must-be-a-valid-url": "Ha de ser una URL vàlida",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Copieu en la recepta. Cada línia serà tractada com un element de la llista",
"recipe-markup-specification": "Especificació Markup de la recepta",
"recipe-url": "URL de la recepta",
"upload-a-recipe": "Puja una recepta",
"upload-individual-zip-file": "Puja només un arxiu zip, exportat d'altre Mealie.",
"url-form-hint": "Copia i enganxa l'enllaç del teu lloc web de receptes preferit",
"view-scraped-data": "Visualitza les dades recuperades"
},
"page": {
"404-page-not-found": "404 Page not found",
"all-recipes": "All Recipes",
"new-page-created": "New page created",
"page": "Page",
"page-creation-failed": "Page creation failed",
"page-deleted": "Page deleted",
"page-deletion-failed": "Page deletion failed",
"page-update-failed": "Page update failed",
"page-updated": "Page updated",
"pages-update-failed": "Pages update failed",
"pages-updated": "Pages updated"
"404-page-not-found": "Error 404 - No s'ha trobat la pàgina",
"all-recipes": "Totes les receptes",
"new-page-created": "S'ha creat una nova pàgina",
"page": "Pàgina",
"page-creation-failed": "S'ha produït un error al crear la pàgina",
"page-deleted": "S'ha suprimit la pàgina",
"page-deletion-failed": "S'ha produït un error al suprimir la pàgina",
"page-update-failed": "S'ha produït un error a l'actualitzar la pàgina",
"page-updated": "S'ha actualitzat la pàgina",
"pages-update-failed": "S'ha produït un error a l'actualitzar les pàgines",
"pages-updated": "S'han actualitzat les pàgines"
},
"recipe": {
"add-key": "Add Key",
"add-to-favorites": "Add to Favorites",
"add-key": "Afegeix clau",
"add-to-favorites": "Afegeix a preferides",
"api-extras": "API Extras",
"calories": "Calories",
"calories-suffix": "calories",
"carbohydrate-content": "Carbohydrate",
"carbohydrate-content": "Carbohidrats",
"categories": "Categories",
"comment-action": "Comment",
"comments": "Comments",
"delete-confirmation": "Are you sure you want to delete this recipe?",
"delete-recipe": "Delete Recipe",
"description": "Description",
"disable-amount": "Disable Ingredient Amounts",
"disable-comments": "Disable Comments",
"fat-content": "Fat",
"fiber-content": "Fiber",
"comment-action": "Comentari",
"comments": "Comentaris",
"delete-confirmation": "Estàs segur que vols suprimir-la?",
"delete-recipe": "Suprimeix la recepta",
"description": "Descripció",
"disable-amount": "Oculta les quantitats",
"disable-comments": "Oculta els comentaris",
"fat-content": "Greixos",
"fiber-content": "Fibra",
"grams": "grams",
"ingredient": "Ingredient",
"ingredients": "Ingredients",
"insert-section": "Insert Section",
"instructions": "Instructions",
"key-name-required": "Key Name Required",
"landscape-view-coming-soon": "Landscape View (Coming Soon)",
"milligrams": "milligrams",
"new-key-name": "New Key Name",
"no-white-space-allowed": "No White Space Allowed",
"note": "Note",
"nutrition": "Nutrition",
"object-key": "Object Key",
"object-value": "Object Value",
"original-url": "Original URL",
"perform-time": "Cook Time",
"prep-time": "Prep Time",
"protein-content": "Protein",
"public-recipe": "Public Recipe",
"recipe-created": "Recipe created",
"recipe-creation-failed": "Recipe creation failed",
"recipe-deleted": "Recipe deleted",
"recipe-image": "Recipe Image",
"recipe-image-updated": "Recipe image updated",
"recipe-name": "Recipe Name",
"recipe-settings": "Recipe Settings",
"recipe-update-failed": "Recipe update failed",
"recipe-updated": "Recipe updated",
"remove-from-favorites": "Remove from Favorites",
"remove-section": "Remove Section",
"save-recipe-before-use": "Save recipe before use",
"section-title": "Section Title",
"servings": "Servings",
"share-recipe-message": "I wanted to share my {0} recipe with you.",
"show-nutrition-values": "Show Nutrition Values",
"sodium-content": "Sodium",
"step-index": "Step: {step}",
"sugar-content": "Sugar",
"title": "Title",
"total-time": "Total Time",
"unable-to-delete-recipe": "Unable to Delete Recipe"
"insert-section": "Insereix una secció",
"instructions": "Instruccions",
"key-name-required": "Es requereix un nom de clau",
"landscape-view-coming-soon": "Vista apaïsada (aviat)",
"milligrams": "mil·ligrams",
"new-key-name": "Nou nom de la clau",
"no-white-space-allowed": "No es permeten espais en blanc",
"note": "Nota",
"nutrition": "Valors nutricionals",
"object-key": "Nom de la clau",
"object-value": "Valor",
"original-url": "Adreça URL original",
"perform-time": "Temps de cocció",
"prep-time": "Temps de preparació",
"protein-content": "Proteïnes",
"public-recipe": "Recepta pública",
"recipe-created": "S'ha creat la recepta",
"recipe-creation-failed": "S'ha produït un error al crear la recepta",
"recipe-deleted": "S'ha suprimit la recepta",
"recipe-image": "Imatge de la recepta",
"recipe-image-updated": "S'ha actualitzat la imatge de la recepta",
"recipe-name": "Nom de la recepta",
"recipe-settings": "Opcions de la recepta",
"recipe-update-failed": "S'ha produït un error a l'actualitzar la recepta",
"recipe-updated": "S'ha actualitzat la recepta",
"remove-from-favorites": "S'ha eliminat de les receptes preferides",
"remove-section": "Suprimeix la sel·lecció",
"save-recipe-before-use": "Desa la recepta abans d'utilitzar-la",
"section-title": "Secció",
"servings": "Porcions",
"share-recipe-message": "Vull compartir la meua recepta {0} amb tú.",
"show-nutrition-values": "Mostra els valors nutricionals",
"sodium-content": "Sodi",
"step-index": "Pas: {step}",
"sugar-content": "Sucres",
"title": "Títol",
"total-time": "Temps total",
"unable-to-delete-recipe": "No s'ha pogut suprimir la recepta"
},
"reicpe": {
"no-recipe": "No Recipe"
"no-recipe": "Cap recepta"
},
"search": {
"advanced-search": "Advanced Search",
"and": "and",
"exclude": "Exclude",
"include": "Include",
"max-results": "Max Results",
"or": "Or",
"results": "Results",
"search": "Search",
"search-mealie": "Search Mealie (press /)",
"search-placeholder": "Search...",
"tag-filter": "Tag Filter"
"advanced-search": "Cerca avançada",
"and": "i",
"exclude": "Exclou",
"include": "Inclou",
"max-results": "No mostreu més de",
"or": "O",
"results": "Resultats",
"search": "Cerca",
"search-mealie": "Cerca a Melie (prem /)",
"search-placeholder": "Cerca...",
"tag-filter": "Filtra per etiqueta"
},
"settings": {
"add-a-new-theme": "Add a New Theme",
"admin-settings": "Admin Settings",
"add-a-new-theme": "Afegiu un nou tema",
"admin-settings": "Opcions de l'administrador",
"backup": {
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"backup-tag": "Backup Tag",
"create-heading": "Create a Backup",
"delete-backup": "Delete Backup",
"error-creating-backup-see-log-file": "Error Creating Backup. See Log File",
"full-backup": "Full Backup",
"import-summary": "Import Summary",
"partial-backup": "Partial Backup",
"unable-to-delete-backup": "Unable to Delete Backup."
"backup-created-at-response-export_path": "S'ha creat una còpia de seguretat a {path}",
"backup-deleted": "Còpia de seguretat suprimida",
"backup-tag": "Etiqueta de la còpia de seguretat",
"create-heading": "Crea una còpia de seguretat",
"delete-backup": "Esborra la còpia de seguretat",
"error-creating-backup-see-log-file": "S'ha produït un error al crear la còpia de seguritat. Disposa de més informació a l'arxiu de registre",
"full-backup": "Còpia de seguretat completa",
"import-summary": "Resum de la importació",
"partial-backup": "Còpia de seguretat parcial",
"unable-to-delete-backup": "No s'ha pogut suprimir la còpia."
},
"backup-and-exports": "Backups",
"change-password": "Change Password",
"current": "Version:",
"custom-pages": "Custom Pages",
"edit-page": "Edit Page",
"events": "Events",
"first-day-of-week": "First day of the week",
"group-settings-updated": "Group Settings Updated",
"backup-and-exports": "Còpies de seguretat",
"change-password": "Canvia la contrasenya",
"current": "Versió:",
"custom-pages": "Pàgines personalitzades",
"edit-page": "Edita la Pàgina",
"events": "Esdeveniments",
"first-day-of-week": "Primer dia de la setmana",
"group-settings-updated": "S'ha actualitzat la configuració del grup",
"homepage": {
"all-categories": "All Categories",
"card-per-section": "Card Per Section",
"home-page": "Home Page",
"home-page-sections": "Home Page Sections",
"show-recent": "Show Recent"
"all-categories": "Totes les categories",
"card-per-section": "Receptes per secció",
"home-page": "Pàgina d'inici",
"home-page-sections": "Seccions de la pàgina d'inici",
"show-recent": "Mostra receptes recients"
},
"language": "Language",
"latest": "Latest",
"local-api": "Local API",
"locale-settings": "Locale settings",
"migrations": "Migrations",
"new-page": "New Page",
"notify": "Notify",
"organize": "Organize",
"page-name": "Page Name",
"pages": "Pages",
"profile": "Profile",
"remove-existing-entries-matching-imported-entries": "Remove existing entries matching imported entries",
"set-new-time": "Set New Time",
"settings-update-failed": "Settings update failed",
"settings-updated": "Settings updated",
"site-settings": "Site Settings",
"language": "Idioma",
"latest": "Darrera",
"local-api": "API local",
"locale-settings": "Opcions d'idioma",
"migrations": "Migracions",
"new-page": "Pàgina nova",
"notify": "Notifica",
"organize": "Organitzador",
"page-name": "Nom de la pàgina",
"pages": "Pàgines",
"profile": "Perfil",
"remove-existing-entries-matching-imported-entries": "Elimina les entrades existents que coincideixen amb les importades",
"set-new-time": "Defineix l'hora",
"settings-update-failed": "S'ha produït un error a l'actualitzar la configuració",
"settings-updated": "S'ha actualitzat la configuració",
"site-settings": "Configuració del portal",
"theme": {
"accent": "Accent",
"dark": "Dark",
"default-to-system": "Default to system",
"error": "Error",
"error-creating-theme-see-log-file": "Error creating theme. See log file.",
"error-deleting-theme": "Error deleting theme",
"error-updating-theme": "Error updating theme",
"info": "Info",
"light": "Light",
"primary": "Primary",
"secondary": "Secondary",
"success": "Success",
"switch-to-dark-mode": "Switch to dark mode",
"switch-to-light-mode": "Switch to light mode",
"theme-deleted": "Theme deleted",
"theme-name": "Theme Name",
"theme-name-is-required": "Theme Name is required.",
"theme-saved": "Theme Saved",
"theme-updated": "Theme updated",
"warning": "Warning"
"accent": "Èmfasi",
"dark": "Fosc",
"default-to-system": "Gestionat pel sistema",
"error": "S'ha produït un error",
"error-creating-theme-see-log-file": "S'ha produït un error creant el tema. Disposa de més informació a l'arxiu de registre.",
"error-deleting-theme": "S'ha produït un error suprimint el tema",
"error-updating-theme": "S'ha produït un error actualitzant el tema",
"info": "Informació",
"light": "Clar",
"primary": "Primari",
"secondary": "Secundari",
"success": "Correcte",
"switch-to-dark-mode": "Canvia al mode fosc",
"switch-to-light-mode": "Canvia al mode clar",
"theme-deleted": "S'ha suprimit el tema",
"theme-name": "Nom del tema",
"theme-name-is-required": "Es requereix nom per al tema.",
"theme-saved": "S'ha desat el tema",
"theme-updated": "S'ha actualitzat el tema",
"warning": "Advertència"
},
"token": {
"active-tokens": "ACTIVE TOKENS",
"api-token": "API Token",
"api-tokens": "API Tokens",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Copy this token for use with an external application. This token will not be viewable again.",
"create-an-api-token": "Create an API Token",
"token-name": "Token Name"
"active-tokens": "TOKENS ACTIUS",
"api-token": "Token de l'API",
"api-tokens": "Tokens de l'API",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Còpia aquest token per a utilitzar-lo en una aplicació externa. Aquest token, no es tornarà a mostrar.",
"create-an-api-token": "Crea un token d'API",
"token-name": "Nom del token"
},
"toolbox": {
"assign-all": "Assign All",
"bulk-assign": "Bulk Assign",
"new-name": "New Name",
"no-unused-items": "No Unused Items",
"recipes-affected": "No Recipes Affected|One Recipe Affected|{count} Recipes Affected",
"remove-unused": "Remove Unused",
"title-case-all": "Title Case All",
"toolbox": "Toolbox",
"unorganized": "Unorganized"
"assign-all": "Asigna tots",
"bulk-assign": "Assigna en grup",
"new-name": "Nou nom",
"no-unused-items": "No hi han elements sense utilitzar",
"recipes-affected": "Cap recepta afectada|Una recepta afectada|{count} receptes afectades",
"remove-unused": "Elimina els no utilitzats",
"title-case-all": "Totes en majúscules",
"toolbox": "Eines",
"unorganized": "Sense organitzar"
},
"webhooks": {
"test-webhooks": "Test Webhooks",
"the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "The URLs listed below will receive webhooks containing the recipe data for the meal plan on it's scheduled day. Currently Webhooks will execute at",
"webhook-url": "Webhook URL",
"test-webhooks": "Prova els Webhooks",
"the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "Les URLs mostrades a continuació rebran webhooks amb les dades de la recepta per al menú del dia programat. Actaualment els webhooks s'executaran a les",
"webhook-url": "URL del webhook",
"webhooks-caps": "WEBHOOKS"
}
},
"shopping-list": {
"all-lists": "All Lists",
"create-shopping-list": "Create Shopping List",
"from-recipe": "From Recipe",
"list-name": "List Name",
"new-list": "New List",
"quantity": "Quantity: {0}",
"shopping-list": "Shopping List",
"shopping-lists": "Shopping Lists"
"all-lists": "Totes les llistes",
"create-shopping-list": "Crea una llista de la compra",
"from-recipe": "Des de la recepta",
"list-name": "Nom de la llista",
"new-list": "Llista nova",
"quantity": "Quantitat: {0}",
"shopping-list": "Llista de la compra",
"shopping-lists": "Llistes de la compra"
},
"sidebar": {
"all-recipes": "All Recipes",
"all-recipes": "Receptes",
"categories": "Categories",
"dashboard": "Dashboard",
"home-page": "Home Page",
"manage-users": "Manage Users",
"migrations": "Migrations",
"profile": "Profile",
"search": "Search",
"site-settings": "Site Settings",
"tags": "Tags",
"toolbox": "Toolbox"
"dashboard": "Consola",
"home-page": "Inici",
"manage-users": "Usuaris",
"migrations": "Migracions",
"profile": "Perfil",
"search": "Cerca",
"site-settings": "Configuració",
"tags": "Etiquetes",
"toolbox": "Eines"
},
"signup": {
"error-signing-up": "Error Signing Up",
"sign-up": "Sign Up",
"sign-up-link-created": "Sign up link created",
"sign-up-link-creation-failed": "Sign up link creation failed",
"sign-up-links": "Sign Up Links",
"sign-up-token-deleted": "Sign Up Token Deleted",
"sign-up-token-deletion-failed": "Sign up token deletion failed",
"welcome-to-mealie": "Welcome to Mealie! To become a user of this instance you are required to have a valid invitation link. If you haven't recieved an invitation you are unable to sign-up. To recieve a link, contact the sites administrator."
"error-signing-up": "S'ha produït un error al registrar-se",
"sign-up": "Registreu-vos",
"sign-up-link-created": "S'ha creat l'enllaç per a registrar-se",
"sign-up-link-creation-failed": "S'ha produït un error al crear l'enllaç per a registrar-se",
"sign-up-links": "Enllaços de registre",
"sign-up-token-deleted": "S'ha suprimit el token de registre",
"sign-up-token-deletion-failed": "S'ha produït un error a l'eliminar el token per a registrar-se",
"welcome-to-mealie": "Benvingut a Mealie! Per a poder ser usuari d'aquesta instància ha de tenir un enllaç d'invitació vàlid. Si no l'ha rebut, no podrà registrar-se. Per a rebre'l, contacte amb l'administrador."
},
"tag": {
"tag-created": "Tag created",
"tag-creation-failed": "Tag creation failed",
"tag-deleted": "Tag deleted",
"tag-deletion-failed": "Tag deletion failed",
"tag-update-failed": "Tag update failed",
"tag-updated": "Tag updated",
"tags": "Tags",
"untagged-count": "Untagged {count}"
"tag-created": "S'ha creat l'etiqueta",
"tag-creation-failed": "S'ha produït un error al crear l'etiqueta",
"tag-deleted": "S'ha suprimit l'etiqueta",
"tag-deletion-failed": "S'ha produït un error al suprimir l'etiqueta",
"tag-update-failed": "S'ha produït un error a l'actualitzar l'etiqueta",
"tag-updated": "S'ha actualitzat l'etiqueta",
"tags": "Etiquetes",
"untagged-count": "{count} sense etiquetar"
},
"user": {
"admin": "Admin",
"are-you-sure-you-want-to-delete-the-link": "Are you sure you want to delete the link <b>{link}<b/>?",
"are-you-sure-you-want-to-delete-the-user": "Are you sure you want to delete the user <b>{activeName} ID: {activeId}<b/>?",
"confirm-link-deletion": "Confirm Link Deletion",
"confirm-password": "Confirm Password",
"confirm-user-deletion": "Confirm User Deletion",
"could-not-validate-credentials": "Could Not Validate Credentials",
"create-link": "Create Link",
"create-user": "Create User",
"current-password": "Current Password",
"e-mail-must-be-valid": "E-mail must be valid",
"edit-user": "Edit User",
"email": "Email",
"error-cannot-delete-super-user": "Error! Cannot Delete Super User",
"existing-password-does-not-match": "Existing password does not match",
"full-name": "Full Name",
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"logout": "Logout",
"manage-users": "Manage Users",
"new-password": "New Password",
"new-user": "New User",
"password": "Password",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
"password-must-match": "Password must match",
"password-reset-failed": "Password reset failed",
"password-updated": "Password updated",
"reset-password": "Reset Password",
"sign-in": "Sign in",
"total-mealplans": "Total MealPlans",
"total-users": "Total Users",
"upload-photo": "Upload Photo",
"use-8-characters-or-more-for-your-password": "Use 8 characters or more for your password",
"user": "User",
"user-created": "User created",
"user-creation-failed": "User creation failed",
"user-deleted": "User deleted",
"user-id": "User ID",
"user-id-with-value": "User ID: {id}",
"user-password": "User Password",
"user-successfully-logged-in": "User Successfully Logged In",
"user-update-failed": "User update failed",
"user-updated": "User updated",
"username": "Username",
"users": "Users",
"users-header": "USERS",
"webhook-time": "Webhook Time",
"webhooks-enabled": "Webhooks Enabled",
"you-are-not-allowed-to-create-a-user": "You are not allowed to create a user",
"you-are-not-allowed-to-delete-this-user": "You are not allowed to delete this user"
"admin": "Administrador/a",
"are-you-sure-you-want-to-delete-the-link": "Esteu segur de voler suprimir l'enllaç <b>{link}<b/>?",
"are-you-sure-you-want-to-delete-the-user": "Esteu segur de voler suprimir l'usuari <b>{activeName}<b/> ID: <b>{activeId}<b/>?",
"confirm-link-deletion": "Confirmeu l'eliminació de l'enllaç",
"confirm-password": "Confirmeu la contrasenya",
"confirm-user-deletion": "Confirmeu l'eliminació de l'usuari",
"could-not-validate-credentials": "No s'han pogut validar les credencials",
"create-link": "Crea lenllaç",
"create-user": "Crear l'usuari",
"current-password": "Contrasenya actual",
"e-mail-must-be-valid": "Ha de ser un correu electrònic vàlid",
"edit-user": "Edita l'usuari",
"email": "Correu electrònic",
"error-cannot-delete-super-user": "S'ha produït un error. El Super usuari no es pot suprimir!",
"existing-password-does-not-match": "La contrasenya actual no coincideix",
"full-name": "Nom sencer",
"link-id": "Id de l'enllaç",
"link-name": "Nom de l'enllaç",
"login": "Inicieu sessió",
"logout": "Tanca la sessió",
"manage-users": "Gestionar usuaris",
"new-password": "Nova contrasenya",
"new-user": "Nou Usuari",
"password": "Contrasenya",
"password-has-been-reset-to-the-default-password": "S'ha restablert la contrasenya al seu valor per defecte",
"password-must-match": "Les contrasenyes han de coincidir",
"password-reset-failed": "S'ha produït un error al restablir la contrasenya",
"password-updated": "S'ha actualitzat la contrasenya",
"reset-password": "Restableix la contrasenya",
"sign-in": "Inicia sessió",
"total-mealplans": "Menús totals",
"total-users": "Usuaris totals",
"upload-photo": "Pugeu la foto",
"use-8-characters-or-more-for-your-password": "La contrasenya ha de tindre mínim 8 caràcters",
"user": "Usuari",
"user-created": "S'ha creat l'usuari",
"user-creation-failed": "S'ha produït un error al crear l'usuari",
"user-deleted": "S'ha suprimit l'usuari",
"user-id": "ID d'usuari",
"user-id-with-value": "ID d'usuari: {id}",
"user-password": "Contrasenya",
"user-successfully-logged-in": "La sessió s'ha iniciat correctament",
"user-update-failed": "S'ha produït un error a l'actualitzar l'usuari",
"user-updated": "S'ha actualitzat l'usuari",
"username": "Nom d'usuari",
"users": "Usuaris",
"users-header": "USUARIS",
"webhook-time": "Hora del Webhook",
"webhooks-enabled": "Webhooks habilitats",
"you-are-not-allowed-to-create-a-user": "Vostè no està autoritzat per a crear un usuari",
"you-are-not-allowed-to-delete-this-user": "Vostè no està autoritzat per a suprimir l'usuari"
}
}

View File

@@ -4,384 +4,384 @@
"about-mealie": "Om Mealie",
"api-docs": "API dokumentation",
"api-port": "API port",
"application-mode": "Application Mode",
"application-mode": "Applikationstilstand",
"database-type": "Database-type",
"database-url": "Database-url",
"default-group": "Default Group",
"default-group": "Standardgruppe",
"demo": "Demo",
"demo-status": "Demo status",
"development": "Udvikling",
"docs": "Dokumenter",
"download-log": "Download log",
"download-recipe-json": "Last Scraped JSON",
"download-recipe-json": "Sidst skrabet JSON",
"github": "Github",
"log-lines": "Log Lines",
"not-demo": "Not Demo",
"log-lines": "Log linjer",
"not-demo": "Ikke demo",
"portfolio": "Portfolio",
"production": "Produktion",
"support": "Support",
"support": "Hjælp",
"version": "Version"
},
"asset": {
"assets": "Assets",
"code": "Code",
"file": "File",
"image": "Image",
"new-asset": "New Asset",
"assets": "Ekstramateriale",
"code": "Kode",
"file": "Fil",
"image": "Billede",
"new-asset": "Ny aktiv",
"pdf": "PDF",
"recipe": "Recipe",
"show-assets": "Show Assets"
"recipe": "Opskrift",
"show-assets": "Vis ekstramateriale"
},
"category": {
"category-created": "Category created",
"category-creation-failed": "Category creation failed",
"category-deleted": "Category Deleted",
"category-deletion-failed": "Category deletion failed",
"category-filter": "Category Filter",
"category-update-failed": "Category update failed",
"category-updated": "Category updated",
"uncategorized-count": "Uncategorized {count}"
"category-created": "Kategori oprettet",
"category-creation-failed": "Oprettelse af kategorien fejlede",
"category-deleted": "Kategori slettet",
"category-deletion-failed": "Sletning af kategori fejlede",
"category-filter": "Kategorifilter",
"category-update-failed": "Kategoriopdatering fejlede",
"category-updated": "Kategori opdateret",
"uncategorized-count": "Ukategoriseret {count}"
},
"events": {
"apprise-url": "Apprise URL",
"database": "Database",
"delete-event": "Delete Event",
"new-notification-form-description": "Mealie uses the Apprise library to generate notifications. They offer many options for services to use for notifications. Refer to their wiki for a comprehensive guide on how to create the URL for your service. If available, selecting the type of your notification may include extra features.",
"new-version": "New version available!",
"notification": "Notification",
"refresh": "Refresh",
"scheduled": "Scheduled",
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent"
"delete-event": "Slet event",
"new-notification-form-description": "Mealie bruger Apprise-biblioteket for at generere notifikationer. De giver mange muligheder for notifikationer til tjenester. Kig i deres wiki for en gennemgående guide til, hvordan en URL oprettes i din situation. Hvis muligt, kan valget af din type af notifikation omfatte flere ekstrafunktioner.",
"new-version": "Ny opdatering er tilgængelig!",
"notification": "Notifikation",
"refresh": "Opdater",
"scheduled": "Planlagt",
"something-went-wrong": "Noget gik galt!",
"subscribed-events": "Abonnerede begivenheder",
"test-message-sent": "Testbesked sendt"
},
"general": {
"cancel": "Annuller",
"clear": "Clear",
"clear": "Ryd",
"close": "Luk",
"confirm": "Bekræft",
"confirm-delete-generic": "Are you sure you want to delete this?",
"copied": "Copied",
"confirm-delete-generic": "Er du sikker på, du vil slette dette?",
"copied": "Kopieret",
"create": "Opret",
"created": "Created",
"custom": "Custom",
"dashboard": "Dashboard",
"created": "Oprettet",
"custom": "Brugerdefineret",
"dashboard": "Instrumentbræt",
"delete": "Slet",
"disabled": "Disabled",
"disabled": "Deaktiveret",
"download": "Hent",
"edit": "Rediger",
"enabled": "Aktiveret",
"exception": "Exception",
"failed-count": "Failed: {count}",
"failure-uploading-file": "Failure uploading file",
"favorites": "Favorites",
"exception": "Undtagelse",
"failed-count": "Fejlet: {count}",
"failure-uploading-file": "Fejl ved upload af fil",
"favorites": "Favoritter",
"field-required": "Felt påkrævet",
"file-folder-not-found": "File/folder not found",
"file-uploaded": "File uploaded",
"file-folder-not-found": "Fil/mappe ikke fundet",
"file-uploaded": "Fil uploadet",
"filter": "Filtrer",
"friday": "Fredag",
"general": "General",
"get": "Get",
"home": "Home",
"image": "Image",
"image-upload-failed": "Image upload failed",
"general": "Generelt",
"get": "Hent",
"home": "Hjem",
"image": "Billede",
"image-upload-failed": "Upload af billede fejlede",
"import": "Importere",
"json": "JSON",
"keyword": "Keyword",
"link-copied": "Link Copied",
"loading-recipes": "Loading Recipes",
"keyword": "Nøgleord",
"link-copied": "Link kopieret",
"loading-recipes": "Indlæser opskrifter",
"monday": "Mandag",
"name": "Navn",
"new": "New",
"new": "Ny",
"no": "Nej",
"no-recipe-found": "No Recipe Found",
"no-recipe-found": "Ingen opskrift fundet",
"ok": "Ok",
"options": "Options:",
"options": "Valgmuligheder:",
"print": "Print",
"random": "Tilfældig",
"rating": "Rating",
"rating": "Bedømmelse",
"recent": "Seneste",
"recipe": "Recipe",
"recipe": "Opskrift",
"recipes": "Opskrifter",
"rename-object": "Rename {0}",
"rename-object": "Omdøb {0}",
"reset": "Nulstil",
"saturday": "Lørdag",
"save": "Gem",
"settings": "Indstillinger",
"share": "Share",
"shuffle": "Shuffle",
"share": "Del",
"shuffle": "Bland",
"sort": "Sorter",
"sort-alphabetically": "Alphabetical",
"sort-alphabetically": "Alfabetisk",
"status": "Status",
"submit": "Indsend",
"success-count": "Success: {count}",
"success-count": "Succes: {count}",
"sunday": "Søndag",
"templates": "Templates:",
"test": "Test",
"templates": "Skabeloner:",
"test": "Afprøv",
"themes": "Temaer",
"thursday": "Torsdag",
"token": "Token",
"tuesday": "Tirsdag",
"type": "Type",
"update": "Opdater",
"updated": "Updated",
"updated": "Opdateret",
"upload": "Upload",
"url": "URL",
"view": "View",
"view": "Se",
"wednesday": "Onsdag",
"yes": "Ja"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
"cannot-delete-default-group": "Cannot delete default group",
"cannot-delete-group-with-users": "Cannot delete group with users",
"confirm-group-deletion": "Confirm Group Deletion",
"create-group": "Create Group",
"error-updating-group": "Error updating group",
"group": "Group",
"group-deleted": "Group deleted",
"group-deletion-failed": "Group deletion failed",
"group-id-with-value": "Group ID: {groupID}",
"group-name": "Group Name",
"group-not-found": "Group not found",
"group-with-value": "Group: {groupID}",
"groups": "Groups",
"manage-groups": "Manage Groups",
"user-group": "User Group",
"user-group-created": "User Group Created",
"user-group-creation-failed": "User Group Creation Failed"
"are-you-sure-you-want-to-delete-the-group": "Er du sikker på, du vil slette <b>{groupName}<b/>?",
"cannot-delete-default-group": "Standardgruppen kan ikke blive slettet",
"cannot-delete-group-with-users": "En gruppe med brugere i kan ikke blive slettet",
"confirm-group-deletion": "Bekræft sletning af gruppe",
"create-group": "Opret gruppe",
"error-updating-group": "Fejl ved opdatering af gruppe",
"group": "Gruppe",
"group-deleted": "Gruppe slettet",
"group-deletion-failed": "Sletning af gruppe fejlede",
"group-id-with-value": "Gruppe-ID: {groupID}",
"group-name": "Gruppenavn",
"group-not-found": "Gruppen blev ikke fundet",
"group-with-value": "Gruppe: {groupID}",
"groups": "Grupper",
"manage-groups": "Administrer grupper",
"user-group": "Brugergruppe",
"user-group-created": "Brugergruppe oprettet",
"user-group-creation-failed": "Oprettelse af brugergruppe fejlede"
},
"meal-plan": {
"create-a-new-meal-plan": "Opret en ny måltidsplan",
"create-a-new-meal-plan": "Opret en ny madplan",
"dinner-this-week": "Madplan denne uge",
"dinner-today": "Madplan i dag",
"dinner-tonight": "DINNER TONIGHT",
"edit-meal-plan": "Rediger måltidsplan",
"dinner-tonight": "AFTENSMAD I AFTEN",
"edit-meal-plan": "Rediger madplan",
"end-date": "Slutdato",
"group": "Group (Beta)",
"main": "Main",
"meal-planner": "Meal Planner",
"meal-plans": "Måltidsplaner",
"mealplan-categories": "MEALPLAN CATEGORIES",
"mealplan-created": "Mealplan created",
"mealplan-creation-failed": "Mealplan creation failed",
"mealplan-deleted": "Mealplan Deleted",
"mealplan-deletion-failed": "Mealplan deletion failed",
"mealplan-settings": "Mealplan Settings",
"mealplan-update-failed": "Mealplan update failed",
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planlægger",
"quick-week": "Quick Week",
"side": "Side",
"sides": "Sides",
"group": "Gruppér (Beta)",
"main": "Hovedret",
"meal-planner": "Madplanlægger",
"meal-plans": "Madplan",
"mealplan-categories": "MADPLANKATEGORIER",
"mealplan-created": "Madplan oprettet",
"mealplan-creation-failed": "Oprettelse af madplan fejlede",
"mealplan-deleted": "Madplan slettet",
"mealplan-deletion-failed": "Sletning af madplan fejlede",
"mealplan-settings": "Madplansindstillinger",
"mealplan-update-failed": "Opdatering af madplanen fejlede",
"mealplan-updated": "Madplanen blev opdateret",
"no-meal-plan-defined-yet": "Ingen madplan er defineret",
"no-meal-planned-for-today": "Ingen ret er planlagt til i dag",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Kun opskrifter med disse kategorier vil blive brugt i madplaner",
"planner": "Planlæg madplan",
"quick-week": "Hurtig uge",
"side": "Tilbehør",
"sides": "Tilbehør",
"start-date": "Start dato"
},
"migration": {
"chowdown": {
"description": "Migrate data from Chowdown",
"description": "Migrer data fra Chowdown",
"title": "Chowdown"
},
"migration-data-removed": "Migration data removed",
"migration-data-removed": "Migrationsdata fjernet",
"nextcloud": {
"description": "Migrate data from a Nextcloud Cookbook instance",
"title": "Nextcloud Cookbook"
"description": "Migrer data fra Nextcloud Cookbook",
"title": "Nextcould Cookbook"
},
"no-migration-data-available": "No Migration Data Available",
"no-migration-data-available": "Ingen migrationsdata er tilgængelig",
"recipe-migration": "Migrering af opskrifter"
},
"new-recipe": {
"bulk-add": "Bulk Tilføj",
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.",
"error-title": "Looks Like We Couldn't Find Anything",
"error-details": "Kun hjemmesider med ID+JSON eller microdata kan blive importeret af Mealie. De fleste større opskriftshjemmesider bruger denne struktur. Opret et emne på GitHub, hvis en hjemmeside ikke kan blive importeret, men der er JSON-data i loggen.",
"error-title": "Det ser ud til, vi ikke kunne finde noget",
"from-url": "Fra URL",
"github-issues": "GitHub Issues",
"google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Must be a Valid URL",
"github-issues": "GitHub problemer",
"google-ld-json-info": "Google ID+JSON information",
"must-be-a-valid-url": "Det skal være en korrekt URL",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Indsæt dine opskriftsdata. \nHver linje behandles som et element på en liste",
"recipe-markup-specification": "Recipe Markup Specification",
"recipe-markup-specification": "Opskriftsmarkupspecifikation",
"recipe-url": "URL på opskrift",
"upload-a-recipe": "Upload a Recipe",
"upload-individual-zip-file": "Upload an individual .zip file exported from another Mealie instance.",
"upload-a-recipe": "Upload en opskrift",
"upload-individual-zip-file": "Opload en individuel .zip-fil, eksporteret fra en anden Mealie-instans.",
"url-form-hint": "Kopiér og indsæt et link fra din foretrukne opskrifts hjemmeside",
"view-scraped-data": "View Scraped Data"
"view-scraped-data": "Vis skrabet data"
},
"page": {
"404-page-not-found": "404 Page not found",
"404-page-not-found": "404 Siden blev ikke fundet",
"all-recipes": "Alle Opskrifter",
"new-page-created": "New page created",
"page": "Page",
"page-creation-failed": "Page creation failed",
"page-deleted": "Page deleted",
"page-deletion-failed": "Page deletion failed",
"page-update-failed": "Page update failed",
"page-updated": "Page updated",
"pages-update-failed": "Pages update failed",
"pages-updated": "Pages updated"
"new-page-created": "Ny side blev oprettet",
"page": "Side",
"page-creation-failed": "Oprettelse af side fejlede",
"page-deleted": "Side slettet",
"page-deletion-failed": "Sletning af side fejlede",
"page-update-failed": "Opdatering af side fejlede",
"page-updated": "Side opdateret",
"pages-update-failed": "Opdatering af sider fejlede",
"pages-updated": "Sider opdateret"
},
"recipe": {
"add-key": "Add Key",
"add-to-favorites": "Add to Favorites",
"api-extras": "API Extras",
"calories": "Calories",
"calories-suffix": "calories",
"carbohydrate-content": "Carbohydrate",
"add-key": "Tilføj nøgle",
"add-to-favorites": "Tilføj til favoritter",
"api-extras": "API-ekstramateriale",
"calories": "Kalorier",
"calories-suffix": "kalorier",
"carbohydrate-content": "Kulhydrat",
"categories": "Kategorier",
"comment-action": "Comment",
"comments": "Comments",
"delete-confirmation": "Are you sure you want to delete this recipe?",
"delete-recipe": "Delete Recipe",
"comment-action": "Kommentar",
"comments": "Kommentarer",
"delete-confirmation": "Er du sikker på, du vil slette denne opskrift?",
"delete-recipe": "Slet opskrift",
"description": "Beskrivelse",
"disable-amount": "Disable Ingredient Amounts",
"disable-comments": "Disable Comments",
"fat-content": "Fat",
"disable-amount": "Slå ingrediensmængder fra",
"disable-comments": "Slå kommentarer fra",
"fat-content": "Fedt",
"fiber-content": "Fiber",
"grams": "grams",
"grams": "gram",
"ingredient": "Ingrediens",
"ingredients": "Ingredienser",
"insert-section": "Insert Section",
"insert-section": "Indsæt sektion",
"instructions": "Instruktioner",
"key-name-required": "Key Name Required",
"landscape-view-coming-soon": "Landscape View (Coming Soon)",
"milligrams": "milligrams",
"new-key-name": "New Key Name",
"no-white-space-allowed": "No White Space Allowed",
"key-name-required": "Nøglenavn påkrævet",
"landscape-view-coming-soon": "Liggende visning (Kommer snart)",
"milligrams": "milligram",
"new-key-name": "Nyt nøglenavn",
"no-white-space-allowed": "Mellemrum er ikke tilladt",
"note": "Bemærk",
"nutrition": "Nutrition",
"object-key": "Object Key",
"object-value": "Object Value",
"nutrition": "Ernæring",
"object-key": "Objektnøgle",
"object-value": "Objektværdi",
"original-url": "Oprindelig opskrift",
"perform-time": "Cook Time",
"prep-time": "Prep Time",
"perform-time": "Tilberedningstid",
"prep-time": "Forberedelsestid",
"protein-content": "Protein",
"public-recipe": "Public Recipe",
"recipe-created": "Recipe created",
"recipe-creation-failed": "Recipe creation failed",
"recipe-deleted": "Recipe deleted",
"recipe-image": "Recipe Image",
"recipe-image-updated": "Recipe image updated",
"public-recipe": "Offentlig opskrift",
"recipe-created": "Opskrift oprettet",
"recipe-creation-failed": "Oprettelse af opskrift fejlede",
"recipe-deleted": "Opskrift slettet",
"recipe-image": "Opskriftsbillede",
"recipe-image-updated": "Opskriftsbillede opdateret",
"recipe-name": "Opskriftens navn",
"recipe-settings": "Recipe Settings",
"recipe-update-failed": "Recipe update failed",
"recipe-updated": "Recipe updated",
"remove-from-favorites": "Remove from Favorites",
"remove-section": "Remove Section",
"save-recipe-before-use": "Save recipe before use",
"section-title": "Section Title",
"recipe-settings": "Opskriftsindstillinger",
"recipe-update-failed": "Opdatering af opskrift fejlede",
"recipe-updated": "Opskrift opdateret",
"remove-from-favorites": "Fjern fra favoritter",
"remove-section": "Fjern sektion",
"save-recipe-before-use": "Gem opskrift før brug",
"section-title": "Sektionstitel",
"servings": "Portioner",
"share-recipe-message": "I wanted to share my {0} recipe with you.",
"show-nutrition-values": "Show Nutrition Values",
"sodium-content": "Sodium",
"share-recipe-message": "Jeg vil gerne dele min opskrift \"{0}\" med dig.",
"show-nutrition-values": "Vis ernæringstabel",
"sodium-content": "Natrium",
"step-index": "Trin: {step}",
"sugar-content": "Sugar",
"title": "Title",
"total-time": "Total Time",
"unable-to-delete-recipe": "Unable to Delete Recipe"
"sugar-content": "Sukker",
"title": "Titel",
"total-time": "Total tid",
"unable-to-delete-recipe": "Kunne ikke slette opskrift"
},
"reicpe": {
"no-recipe": "No Recipe"
"no-recipe": "Ingen opskrift"
},
"search": {
"advanced-search": "Advanced Search",
"and": "and",
"exclude": "Exclude",
"include": "Include",
"max-results": "Max Results",
"or": "Or",
"results": "Results",
"search": "Search",
"search-mealie": "Search Mealie (press /)",
"search-placeholder": "Search...",
"tag-filter": "Tag Filter"
"advanced-search": "Avanceret søgning",
"and": "og",
"exclude": "Ekskluder",
"include": "Inkluder",
"max-results": "Maksimalt antal resultater",
"or": "Eller",
"results": "Resultater",
"search": "Søg",
"search-mealie": "Søg Mealie (tryk /)",
"search-placeholder": "Søg...",
"tag-filter": "Tagfiler"
},
"settings": {
"add-a-new-theme": "Tilføj et nyt tema",
"admin-settings": "Admin Settings",
"admin-settings": "Administratorindstillinger",
"backup": {
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"backup-tag": "Backup Tag",
"create-heading": "Create a Backup",
"delete-backup": "Delete Backup",
"error-creating-backup-see-log-file": "Error Creating Backup. See Log File",
"full-backup": "Full Backup",
"import-summary": "Import Summary",
"partial-backup": "Partial Backup",
"unable-to-delete-backup": "Unable to Delete Backup."
"backup-created-at-response-export_path": "Backup oprettet ved {path}",
"backup-deleted": "Backup slettet",
"backup-tag": "Backupnavn",
"create-heading": "Opret en backup",
"delete-backup": "Slet backup",
"error-creating-backup-see-log-file": "Der opstod en fejl under oprettelse af backuppen. Se log-filen",
"full-backup": "Fuld backup",
"import-summary": "Importer resumé",
"partial-backup": "Delvis backup",
"unable-to-delete-backup": "Ude af stand til at slette backup."
},
"backup-and-exports": "Backup og eksport",
"change-password": "Change Password",
"change-password": "Skift kodeord",
"current": "Version:",
"custom-pages": "Custom Pages",
"edit-page": "Edit Page",
"events": "Events",
"first-day-of-week": "First day of the week",
"group-settings-updated": "Group Settings Updated",
"custom-pages": "Brugerdefinerede sider",
"edit-page": "Rediger side",
"events": "Begivenheder",
"first-day-of-week": "Første dag i ugen",
"group-settings-updated": "Gruppeindstillinger blev opdateret",
"homepage": {
"all-categories": "All Categories",
"card-per-section": "Card Per Section",
"home-page": "Home Page",
"home-page-sections": "Home Page Sections",
"show-recent": "Show Recent"
"all-categories": "Alle kategorier",
"card-per-section": "Kort per sektion",
"home-page": "Forside",
"home-page-sections": "Forsidesektioner",
"show-recent": "Vis seneste opskrifter"
},
"language": "Language",
"language": "Sprog",
"latest": "Seneste:",
"local-api": "Local API",
"locale-settings": "Locale settings",
"migrations": "Migrations",
"new-page": "New Page",
"notify": "Notify",
"organize": "Organize",
"page-name": "Page Name",
"pages": "Pages",
"profile": "Profile",
"remove-existing-entries-matching-imported-entries": "Remove existing entries matching imported entries",
"local-api": "Lokal API",
"locale-settings": "Lokale indstillinger",
"migrations": "Migrationer",
"new-page": "Ny side",
"notify": "Notifikationer",
"organize": "Organiser",
"page-name": "Sidenavn",
"pages": "Sider",
"profile": "Profil",
"remove-existing-entries-matching-imported-entries": "Fjern eksisterende indtastninger, hvis de matcher de importerede",
"set-new-time": "Indstil ny tid",
"settings-update-failed": "Settings update failed",
"settings-updated": "Settings updated",
"site-settings": "Site Settings",
"settings-update-failed": "Ændring af indstillinger fejlede",
"settings-updated": "Indstillinger ændret",
"site-settings": "Sideindstillinger",
"theme": {
"accent": "Accent",
"dark": "Mørkt",
"default-to-system": "Default to system",
"default-to-system": "Systemstandard",
"error": "Fejl",
"error-creating-theme-see-log-file": "Error creating theme. See log file.",
"error-deleting-theme": "Error deleting theme",
"error-updating-theme": "Error updating theme",
"info": "Info",
"error-creating-theme-see-log-file": "En fejl opstod ved oprettelse af temaet. Se logfilen.",
"error-deleting-theme": "En fejl opstod ved sletning af temaet",
"error-updating-theme": "En fejl opstod ved opdatering af temaet",
"info": "Information",
"light": "Lyst",
"primary": "Primær",
"secondary": "Sekundær",
"success": "Succes",
"switch-to-dark-mode": "Switch to dark mode",
"switch-to-light-mode": "Switch to light mode",
"theme-deleted": "Theme deleted",
"theme-name": "Theme Name",
"theme-name-is-required": "Theme Name is required.",
"theme-saved": "Theme Saved",
"theme-updated": "Theme updated",
"switch-to-dark-mode": "Skift til mørkt udseende",
"switch-to-light-mode": "Skift til lyst udseende",
"theme-deleted": "Tema slettet",
"theme-name": "Temanavn",
"theme-name-is-required": "Temanavnet er påkrævet.",
"theme-saved": "Tema gemt",
"theme-updated": "Tema opdateret",
"warning": "Advarsel"
},
"token": {
"active-tokens": "ACTIVE TOKENS",
"active-tokens": "Aktive tokens",
"api-token": "API Token",
"api-tokens": "API Tokens",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Copy this token for use with an external application. This token will not be viewable again.",
"create-an-api-token": "Create an API Token",
"token-name": "Token Name"
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Kopier denne token ved brug i en anden applikation. Denne token kan ikke ses igen.",
"create-an-api-token": "Opret en API token",
"token-name": "Tokennavn"
},
"toolbox": {
"assign-all": "Assign All",
"bulk-assign": "Bulk Assign",
"new-name": "New Name",
"no-unused-items": "No Unused Items",
"recipes-affected": "No Recipes Affected|One Recipe Affected|{count} Recipes Affected",
"remove-unused": "Remove Unused",
"title-case-all": "Title Case All",
"toolbox": "Toolbox",
"unorganized": "Unorganized"
"assign-all": "Tildel alle",
"bulk-assign": "Massetildeling",
"new-name": "Nyt navn",
"no-unused-items": "Ingen ubrugte punkter",
"recipes-affected": "Ingen opskrifter blev påvirket|En opskrift blev påvirket|{count} opskrifter blev påvirket",
"remove-unused": "Slet ubrugte",
"title-case-all": "Stort forbogstav på alle",
"toolbox": "Værktøjskasse",
"unorganized": "Uorganiseret"
},
"webhooks": {
"test-webhooks": "Test Webhooks",
@@ -391,99 +391,99 @@
}
},
"shopping-list": {
"all-lists": "All Lists",
"create-shopping-list": "Create Shopping List",
"from-recipe": "From Recipe",
"list-name": "List Name",
"new-list": "New List",
"quantity": "Quantity: {0}",
"shopping-list": "Shopping List",
"shopping-lists": "Shopping Lists"
"all-lists": "Alle lister",
"create-shopping-list": "Lav indkøbsliste",
"from-recipe": "Fra opskrift",
"list-name": "Listenavn",
"new-list": "Ny liste",
"quantity": "Antal: {0}",
"shopping-list": "Indkøbsliste",
"shopping-lists": "Indkøbslister"
},
"sidebar": {
"all-recipes": "All Recipes",
"categories": "Categories",
"dashboard": "Dashboard",
"home-page": "Home Page",
"manage-users": "Manage Users",
"migrations": "Migrations",
"profile": "Profile",
"search": "Search",
"site-settings": "Site Settings",
"all-recipes": "Alle opskr.",
"categories": "Kategorier",
"dashboard": "Instrumentbræt",
"home-page": "Forside",
"manage-users": "Adm. brugere",
"migrations": "Migrationer",
"profile": "Profil",
"search": "Søg",
"site-settings": "Sideindstil.",
"tags": "Tags",
"toolbox": "Toolbox"
"toolbox": "Værktøjskasse"
},
"signup": {
"error-signing-up": "Error Signing Up",
"sign-up": "Sign Up",
"sign-up-link-created": "Sign up link created",
"sign-up-link-creation-failed": "Sign up link creation failed",
"sign-up-links": "Sign Up Links",
"sign-up-token-deleted": "Sign Up Token Deleted",
"sign-up-token-deletion-failed": "Sign up token deletion failed",
"welcome-to-mealie": "Welcome to Mealie! To become a user of this instance you are required to have a valid invitation link. If you haven't recieved an invitation you are unable to sign-up. To recieve a link, contact the sites administrator."
"error-signing-up": "Fejl i forbindelse med oprettelse af bruger",
"sign-up": "Opret bruger",
"sign-up-link-created": "Brugeroprettelseslink oprettet",
"sign-up-link-creation-failed": "Oprettelsen af brugeroprettelseslink fejlede",
"sign-up-links": "Brugeroprettelseslinks",
"sign-up-token-deleted": "Brugeroprettelsestoken blev slettet",
"sign-up-token-deletion-failed": "Sletning af brugeroprettelsestoken fejlede",
"welcome-to-mealie": "Velkommen til Mealie. For at oprette en bruger på denne hjemmeside, kræves det at du har et validt invitationslink. Har du ikke fået en invitation, kan du ikke oprette en bruger. For at få et link, skal du kontakte sideadministratoren."
},
"tag": {
"tag-created": "Tag created",
"tag-creation-failed": "Tag creation failed",
"tag-deleted": "Tag deleted",
"tag-deletion-failed": "Tag deletion failed",
"tag-update-failed": "Tag update failed",
"tag-updated": "Tag updated",
"tag-created": "Tag oprettet",
"tag-creation-failed": "Oprettelse af tag fejlede",
"tag-deleted": "Tag blev slettet",
"tag-deletion-failed": "Sletning af tag fejlede",
"tag-update-failed": "Opdatering af tag fejlede",
"tag-updated": "Tag blev opdateret",
"tags": "Tags",
"untagged-count": "Untagged {count}"
"untagged-count": "Ikke-tagget: {count}"
},
"user": {
"admin": "Administrator",
"are-you-sure-you-want-to-delete-the-link": "Are you sure you want to delete the link <b>{link}<b/>?",
"are-you-sure-you-want-to-delete-the-link": "Er du sikker på, at du vil slette linket \"<b>{link}<b/>\"?",
"are-you-sure-you-want-to-delete-the-user": "Er du sikker på, at du vil slette brugeren <b>{activeName} med ID: {activeId}<b/>?",
"confirm-link-deletion": "Confirm Link Deletion",
"confirm-password": "Confirm Password",
"confirm-link-deletion": "Bekræft sletning af link",
"confirm-password": "Bekræft adgangskode",
"confirm-user-deletion": "Bekræft Sletning Af Bruger",
"could-not-validate-credentials": "Could Not Validate Credentials",
"create-link": "Create Link",
"could-not-validate-credentials": "Kunne verificere legitimationsoplysninger",
"create-link": "Link blev oprettet",
"create-user": "Opret bruger",
"current-password": "Current Password",
"e-mail-must-be-valid": "E-mail must be valid",
"current-password": "Nuværende kodeord",
"e-mail-must-be-valid": "E-mailen skal være valid",
"edit-user": "Rediger bruger",
"email": "E-mail",
"error-cannot-delete-super-user": "Error! Cannot Delete Super User",
"existing-password-does-not-match": "Existing password does not match",
"error-cannot-delete-super-user": "Fejl! Kan ikke slette super-brugeren",
"existing-password-does-not-match": "Nuværende adgangskode matcher ikke",
"full-name": "Fulde navn",
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"link-name": "Linknavn",
"login": "Log",
"logout": "Log ud",
"manage-users": "Manage Users",
"new-password": "New Password",
"manage-users": "Administrer brugere",
"new-password": "Ny adgangskode",
"new-user": "Ny bruger",
"password": "Adgangskode",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
"password-must-match": "Password must match",
"password-reset-failed": "Password reset failed",
"password-updated": "Password updated",
"reset-password": "Reset Password",
"password-has-been-reset-to-the-default-password": "Adgangskode er blevet nulstillet til systemstandarden",
"password-must-match": "Adgangskode skal matche",
"password-reset-failed": "Nulstilling af adgangskode fejlede",
"password-updated": "Adgangskoden blev opdateret",
"reset-password": "Nulstil adgangskoden",
"sign-in": "Log ind",
"total-mealplans": "Antal Madplaner",
"total-users": "Antal brugere",
"upload-photo": "Upload Photo",
"use-8-characters-or-more-for-your-password": "Use 8 characters or more for your password",
"user": "User",
"user-created": "User created",
"user-creation-failed": "User creation failed",
"user-deleted": "User deleted",
"upload-photo": "Upload billede",
"use-8-characters-or-more-for-your-password": "Adgangskode skal indeholde 8 tegn eller flere",
"user": "Bruger",
"user-created": "Brugeren blev oprettet",
"user-creation-failed": "Oprettelsen af brugeren fejlede",
"user-deleted": "Brugeren blev slettet",
"user-id": "Bruger ID",
"user-id-with-value": "Bruger ID: {id}",
"user-password": "Adgangskode",
"user-successfully-logged-in": "User Successfully Logged In",
"user-update-failed": "User update failed",
"user-updated": "User updated",
"username": "Username",
"users": "Users",
"users-header": "USERS",
"user-successfully-logged-in": "Brugeren blev succesfuld logget ind",
"user-update-failed": "Opdatering af bruger fejlede",
"user-updated": "Bruger opdateret",
"username": "Brugernavn",
"users": "Brugere",
"users-header": "BRUGERE",
"webhook-time": "Webhook Tid",
"webhooks-enabled": "Webhooks Aktiveret",
"you-are-not-allowed-to-create-a-user": "You are not allowed to create a user",
"you-are-not-allowed-to-delete-this-user": "You are not allowed to delete this user"
"you-are-not-allowed-to-create-a-user": "Du har ikke rettigheder til at oprette en ny bruger",
"you-are-not-allowed-to-delete-this-user": "Du har ikke rettigheder til at slette denne bruger"
}
}

View File

@@ -197,16 +197,16 @@
"error-details": "Mealie kann Rezepte nur von Webseiten importieren, die Id+json oder Mikrodaten enthalten. Die meisten großen Rezeptwebseiten unterstützen diese Datenstruktur. Wenn das Rezept nicht importiert werden kann, aber JSON-Daten im Log vorhanden sind, melde es bitte mit der URL und diesen Daten auf GitHub.",
"error-title": "Anscheinend konnten wir nichts finden",
"from-url": "Von URL",
"github-issues": "GitHub Themen",
"github-issues": "GitHub Issues",
"google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Muss eine gültige URL sein",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Füge deine Rezeptdaten ein. Jede Zeile wird als Eintrag in einer Liste dargestellt",
"recipe-markup-specification": "Recipe Markup Specification",
"recipe-markup-specification": "Rezept Markup Spezifikation",
"recipe-url": "Rezept URL",
"upload-a-recipe": "Rezept hochladen",
"upload-individual-zip-file": "Lade eine individuelle .zip-Datei hoch, die von einer anderen Mealie-Instanz exportiert wird.",
"url-form-hint": "Kopiere einen Link von deiner Lieblingsrezept-Website und füge ihn ein",
"view-scraped-data": "View Scraped Data"
"view-scraped-data": "Gesammelte Daten anzeigen"
},
"page": {
"404-page-not-found": "404 Seite nicht gefunden",

View File

@@ -13,7 +13,7 @@
"development": "Desarrollo",
"docs": "Documentación",
"download-log": "Descargar Log",
"download-recipe-json": "Último JSON raspado",
"download-recipe-json": "Último JSON recuperado",
"github": "Github",
"log-lines": "Líneas de registro",
"not-demo": "No Demo",
@@ -144,7 +144,7 @@
"group-id-with-value": "ID del Grupo: {groupID}",
"group-name": "Nombre del Grupo",
"group-not-found": "Grupo no encontrado",
"group-with-value": "Group: {groupID}",
"group-with-value": "Grupo: {groupID}",
"groups": "Grupos",
"manage-groups": "Administrar grupos",
"user-group": "Grupo de usuarios",
@@ -158,7 +158,7 @@
"dinner-tonight": "Cena para esta noche",
"edit-meal-plan": "Editar menú",
"end-date": "Fecha de Finalización",
"group": "Grupo (Beta)",
"group": "Agrupar (Beta)",
"main": "Principal",
"meal-planner": "Menús",
"meal-plans": "Menús",
@@ -174,9 +174,9 @@
"no-meal-planned-for-today": "No hay ningún menú para hoy",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Sólo las recetas con estas categorías se utilizarán en los menús",
"planner": "Planificador",
"quick-week": "Vista rápida",
"side": "Entremés",
"sides": "Entremeses",
"quick-week": "Plan rápido",
"side": "Guarnición",
"sides": "Guarniciones",
"start-date": "Fecha de Inicio"
},
"migration": {
@@ -197,16 +197,16 @@
"error-details": "Sólo los sitios web que contengan ld+json o microdatos pueden ser importados por Mealie. La mayoría de los sitios web de recetas principales soportan esta estructura de datos. Si su sitio no puede ser importado pero hay datos json en el registro, por favor envíe un problema a github con la URL y los datos.",
"error-title": "Parece que no hemos podido encontrar nada",
"from-url": "Importar una receta",
"github-issues": "GitHub Issues",
"github-issues": "Incidencia de Github",
"google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Must be a Valid URL",
"must-be-a-valid-url": "Debe ser una URL válida",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Pegar los datos de tu receta. Cada línea será tratada como un elemento de una lista",
"recipe-markup-specification": "Recipe Markup Specification",
"recipe-markup-specification": "Definición de Markup de la receta",
"recipe-url": "URL de la receta",
"upload-a-recipe": "Upload a Recipe",
"upload-a-recipe": "Subir una receta",
"upload-individual-zip-file": "Sube un archivo .zip individual exportado desde otra instancia de Mealie.",
"url-form-hint": "Copia y pega un enlace desde tu página web favorita",
"view-scraped-data": "View Scraped Data"
"view-scraped-data": "Ver información recuperada"
},
"page": {
"404-page-not-found": "404 Página no encontrada",
@@ -249,8 +249,8 @@
"new-key-name": "Nuevo nombre de clave",
"no-white-space-allowed": "No se permite espacio en blanco",
"note": "Nota",
"nutrition": "Nutrición",
"object-key": "Clave de objeto",
"nutrition": "Valores nutricionales",
"object-key": "Nombre de la clave",
"object-value": "Valor del objeto",
"original-url": "URL original",
"perform-time": "Tiempo de cocción",
@@ -275,7 +275,7 @@
"show-nutrition-values": "Mostrar valores nutricionales",
"sodium-content": "Sodio",
"step-index": "Paso: {step}",
"sugar-content": "Azúcar",
"sugar-content": "Azúcares",
"title": "Título",
"total-time": "Tiempo total",
"unable-to-delete-recipe": "No se puede eliminar la receta"
@@ -298,7 +298,7 @@
},
"settings": {
"add-a-new-theme": "Añadir un nuevo tema",
"admin-settings": "Configuración del Administrador",
"admin-settings": "Opciones del adminstrador",
"backup": {
"backup-created-at-response-export_path": "Copia de seguridad creada en {path}",
"backup-deleted": "Copia de seguridad eliminada",
@@ -329,7 +329,7 @@
"language": "Idioma",
"latest": "Nuevo",
"local-api": "API local",
"locale-settings": "Configuración local",
"locale-settings": "Configuración de idioma",
"migrations": "Migraciones",
"new-page": "Nueva página",
"notify": "Notificar",
@@ -377,10 +377,10 @@
"bulk-assign": "Asignar en masa",
"new-name": "Nombre Nuevo",
"no-unused-items": "No hay elementos sin usar",
"recipes-affected": "Ninguna receta afectuada | Una receta afectada |{count} recetas afectuadas",
"recipes-affected": "Ninguna receta afectada | Una receta afectada |{count} recetas afectadas",
"remove-unused": "Eliminar los no usados",
"title-case-all": "Primera letra en mayúscula",
"toolbox": "Cuadro de herramientas",
"toolbox": "Herramientas",
"unorganized": "Sin organizar"
},
"webhooks": {
@@ -401,17 +401,17 @@
"shopping-lists": "Listas de la compra"
},
"sidebar": {
"all-recipes": "All Recipes",
"categories": "Categories",
"dashboard": "Dashboard",
"home-page": "Home Page",
"manage-users": "Manage Users",
"migrations": "Migrations",
"profile": "Profile",
"search": "Search",
"site-settings": "Site Settings",
"tags": "Tags",
"toolbox": "Toolbox"
"all-recipes": "Recetas",
"categories": "Categorías",
"dashboard": "Consola",
"home-page": "Inicio",
"manage-users": "Usuarios",
"migrations": "Migraciones",
"profile": "Perfil",
"search": "Buscar",
"site-settings": "Ajustes",
"tags": "Etiquetas",
"toolbox": "Herramientas"
},
"signup": {
"error-signing-up": "Error al registrarse",
@@ -450,8 +450,8 @@
"error-cannot-delete-super-user": "¡Error! No se puede eliminar el Super Usuario",
"existing-password-does-not-match": "La contraseña actual no coincide",
"full-name": "Nombre completo",
"link-id": "Link ID",
"link-name": "Link Name",
"link-id": "ID del enlace",
"link-name": "Nombre del enlace",
"login": "Iniciar sesión",
"logout": "Cerrar Sesión",
"manage-users": "Administrar usuarios",

View File

@@ -0,0 +1,489 @@
{
"about": {
"about": "À propos",
"about-mealie": "À propos de Mealie",
"api-docs": "Documentation de l'API",
"api-port": "Port de l'API",
"application-mode": "Mode de l'application",
"database-type": "Type de base de données",
"database-url": "URL de la base de données",
"default-group": "Groupe par défaut",
"demo": "Oui",
"demo-status": "Mode démo",
"development": "Développement",
"docs": "Documentation",
"download-log": "Télécharger les logs",
"download-recipe-json": "Dernier JSON récupéré",
"github": "GitHub",
"log-lines": "Lignes de log",
"not-demo": "Non",
"portfolio": "Portfolio",
"production": "Production",
"support": "Soutenir",
"version": "Version"
},
"asset": {
"assets": "Ressources",
"code": "Code",
"file": "Fichier",
"image": "Image",
"new-asset": "Nouvelle ressource",
"pdf": "PDF",
"recipe": "Recette",
"show-assets": "Afficher les ressources"
},
"category": {
"category-created": "Catégorie créée",
"category-creation-failed": "La création de la catégorie a échoué",
"category-deleted": "Catégorie supprimée",
"category-deletion-failed": "La suppression de la catégorie a échoué",
"category-filter": "Filtre par catégories",
"category-update-failed": "La mise à jour de la catégorie a échoué",
"category-updated": "Catégorie mise à jour",
"uncategorized-count": "{count} non catégorisée|{count} non catégorisées"
},
"events": {
"apprise-url": "URL apprise",
"database": "Base de données",
"delete-event": "Supprimer lévènement",
"new-notification-form-description": "Mealie utilise la bibliothèque apprise pour générer des notifications. Elle propose de nombreux services à utiliser pour les notifications. Consultez leur wiki pour un guide complet sur la façon de créer l'URL de votre service. Si disponible, sélectionner le type de votre notification peut inclure des fonctionnalités supplémentaires.",
"new-version": "Nouvelle version disponible !",
"notification": "Notification",
"refresh": "Rafraîchir",
"scheduled": "Planifié",
"something-went-wrong": "Une erreur s'est produite !",
"subscribed-events": "Évènements suivis",
"test-message-sent": "Message de test envoyé"
},
"general": {
"cancel": "Annuler",
"clear": "Effacer",
"close": "Fermer",
"confirm": "Confirmer",
"confirm-delete-generic": "Voulez-vous vraiment supprimer ceci ?",
"copied": "Copié",
"create": "Créer",
"created": "Créé",
"custom": "Personnalisé",
"dashboard": "Tableau de bord",
"delete": "Supprimer",
"disabled": "Désactivé",
"download": "Télécharger",
"edit": "Modifier",
"enabled": "Activé",
"exception": "Exception",
"failed-count": "Échec : {count}",
"failure-uploading-file": "Échec de l'envoi du fichier",
"favorites": "Favoris",
"field-required": "Champ obligatoire",
"file-folder-not-found": "Fichier/dossier introuvable",
"file-uploaded": "Fichier envoyé",
"filter": "Filtrer",
"friday": "Vendredi",
"general": "Général",
"get": "Envoyer",
"home": "Page d'accueil",
"image": "Image",
"image-upload-failed": "Le téléchargement de l'image a échoué",
"import": "Importer",
"json": "JSON",
"keyword": "Mot-clé",
"link-copied": "Lien copié",
"loading-recipes": "Chargement des recettes",
"monday": "Lundi",
"name": "Nom",
"new": "Nouveau",
"no": "Non",
"no-recipe-found": "Aucune recette trouvée",
"ok": "OK",
"options": "Options :",
"print": "Imprimer",
"random": "Aléatoire",
"rating": "Note",
"recent": "Récent",
"recipe": "Recette",
"recipes": "Recettes",
"rename-object": "Renommer {0}",
"reset": "Réinitialiser",
"saturday": "Samedi",
"save": "Sauvegarder",
"settings": "Paramètres",
"share": "Partager",
"shuffle": "Aléatoire",
"sort": "Trier",
"sort-alphabetically": "Alphabétique",
"status": "Statut",
"submit": "Importer",
"success-count": "Succès : {count}",
"sunday": "Dimanche",
"templates": "Modèles :",
"test": "Tester",
"themes": "Thèmes",
"thursday": "Jeudi",
"token": "Jeton",
"tuesday": "Mardi",
"type": "Type",
"update": "Mettre à jour",
"updated": "Mis à jour",
"upload": "Importer",
"url": "URL",
"view": "Afficher",
"wednesday": "Mercredi",
"yes": "Oui"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Êtes-vous certain de vouloir supprimer <b>{groupName}<b/> ?",
"cannot-delete-default-group": "Vous ne pouvez pas supprimer le groupe par défaut",
"cannot-delete-group-with-users": "Impossible de supprimer un groupe avec des utilisateurs",
"confirm-group-deletion": "Confirmer la suppression du groupe",
"create-group": "Créer un groupe",
"error-updating-group": "Erreur lors de la mise à jour du groupe",
"group": "Groupe",
"group-deleted": "Groupe supprimé",
"group-deletion-failed": "Échec de la suppression du groupe",
"group-id-with-value": "ID groupe : {groupID}",
"group-name": "Nom du groupe",
"group-not-found": "Groupe non trouvé",
"group-with-value": "Groupe : {groupID}",
"groups": "Groupes",
"manage-groups": "Gérer les groupes",
"user-group": "Groupe d'utilisateurs",
"user-group-created": "Groupe d'utilisateurs créé",
"user-group-creation-failed": "La création du groupe d'utilisateur a échoué"
},
"meal-plan": {
"create-a-new-meal-plan": "Créer un nouveau menu",
"dinner-this-week": "Menu de la semaine",
"dinner-today": "Menu du jour",
"dinner-tonight": "AU MENU CE SOIR",
"edit-meal-plan": "Modifier le menu",
"end-date": "Date de fin",
"group": "Regrouper (Bêta)",
"main": "Plat principal",
"meal-planner": "Menus",
"meal-plans": "Menus",
"mealplan-categories": "CATÉGORIES DES MENUS",
"mealplan-created": "Menu créé",
"mealplan-creation-failed": "La création du menu a échoué",
"mealplan-deleted": "Menu supprimé",
"mealplan-deletion-failed": "La suppression du menu a échoué",
"mealplan-settings": "Paramètres des menus",
"mealplan-update-failed": "La mise à jour du menu a échoué",
"mealplan-updated": "Menu mis à jour",
"no-meal-plan-defined-yet": "Aucun menu planifié",
"no-meal-planned-for-today": "Aucun repas prévu pour aujourd'hui",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Seules les recettes appartenant à ces catégories seront utilisées dans les menus",
"planner": "Planificateur",
"quick-week": "Semaine rapide",
"side": "Accompagnement",
"sides": "Accompagnements",
"start-date": "Date de début"
},
"migration": {
"chowdown": {
"description": "Importer des recettes depuis Chowdown",
"title": "Chowdown"
},
"migration-data-removed": "Données de migration supprimées",
"nextcloud": {
"description": "Importer des recettes depuis un livre de recettes Nextcloud existant",
"title": "Nextcloud Cookbook"
},
"no-migration-data-available": "Aucune donnée d'importation n'est disponible",
"recipe-migration": "Migrer les recettes"
},
"new-recipe": {
"bulk-add": "Ajouter en masse",
"error-details": "Seuls les sites web contenant ld+json ou des microdonnées peuvent être importés par Mealie. La plupart des grands sites web de recettes sont compatibles avec cette structure de données. Si votre site ne peut pas être importé mais qu'il y a des données json dans le journal, veuillez soumettre un problème GitHub avec l'URL et les données.",
"error-title": "On dirait qu'on n'a pas pu trouver quoi que ce soit",
"from-url": "Depuis une adresse web",
"github-issues": "Anomalies GitHub",
"google-ld-json-info": "Infos Json-Ld Google",
"must-be-a-valid-url": "Doit être une URL valide",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Copiez votre recette ici. Chaque ligne sera traitée comme un objet de la liste",
"recipe-markup-specification": "Spécification du marquage des recettes",
"recipe-url": "Adresse de la recette",
"upload-a-recipe": "Télécharger une recette",
"upload-individual-zip-file": "Chargez un fichier .zip exporté depuis une autre instance Mealie.",
"url-form-hint": "Copiez et collez un lien depuis votre site de recettes favori",
"view-scraped-data": "Voir les données récupérées"
},
"page": {
"404-page-not-found": "404 Page introuvable",
"all-recipes": "Toutes les recettes",
"new-page-created": "Nouvelle page créée",
"page": "Page",
"page-creation-failed": "La création de la page a échoué",
"page-deleted": "Page supprimée",
"page-deletion-failed": "La suppression de la page a échoué",
"page-update-failed": "La mise à jour de la page a échoué",
"page-updated": "Page mise à jour",
"pages-update-failed": "La mise à jour des pages a échoué",
"pages-updated": "Pages mises à jour"
},
"recipe": {
"add-key": "Ajouter une clé",
"add-to-favorites": "Ajouter aux favoris",
"api-extras": "Extras API",
"calories": "Calories",
"calories-suffix": "calories",
"carbohydrate-content": "Glucides",
"categories": "Catégories",
"comment-action": "Commenter",
"comments": "Commentaires",
"delete-confirmation": "Êtes-vous sûr(e) de vouloir supprimer cette recette ?",
"delete-recipe": "Supprimer la recette",
"description": "Description",
"disable-amount": "Désactiver les quantités d'ingrédients",
"disable-comments": "Désactiver les commentaires",
"fat-content": "Matières grasses",
"fiber-content": "Fibres",
"grams": "grammes",
"ingredient": "Ingrédient",
"ingredients": "Ingrédients",
"insert-section": "Insérer une section",
"instructions": "Instructions",
"key-name-required": "Un nom de clé est requis",
"landscape-view-coming-soon": "Vue paysage (bientôt disponible)",
"milligrams": "milligrammes",
"new-key-name": "Nouveau nom de clé",
"no-white-space-allowed": "Aucun espace blanc autorisé",
"note": "Note",
"nutrition": "Valeurs nutritionnelles",
"object-key": "Clé d'objet",
"object-value": "Valeur d'objet",
"original-url": "Recette originale",
"perform-time": "Temps de cuisson",
"prep-time": "Temps de préparation",
"protein-content": "Protéines",
"public-recipe": "Recette publique",
"recipe-created": "Recette créée",
"recipe-creation-failed": "La création de la recette a échoué",
"recipe-deleted": "Recette supprimée",
"recipe-image": "Image de la recette",
"recipe-image-updated": "L'image de la recette a été mise à jour",
"recipe-name": "Nom de la recette",
"recipe-settings": "Paramètres de la recette",
"recipe-update-failed": "La mise à jour de la recette a échoué",
"recipe-updated": "Recette mise à jour",
"remove-from-favorites": "Supprimer des favoris",
"remove-section": "Supprimer une section",
"save-recipe-before-use": "Enregistrez la recette avant utilisation",
"section-title": "Titre de la section",
"servings": "Portions",
"share-recipe-message": "Je voulais partager ma recette de {0} avec vous.",
"show-nutrition-values": "Afficher les valeurs nutritionnelles",
"sodium-content": "Sodium",
"step-index": "Étape {step}",
"sugar-content": "Sucres",
"title": "Titre",
"total-time": "Temps total",
"unable-to-delete-recipe": "Impossible de supprimer la recette"
},
"reicpe": {
"no-recipe": "Pas de recette"
},
"search": {
"advanced-search": "Recherche avancée",
"and": "et",
"exclude": "Exclure",
"include": "Inclure",
"max-results": "Nombre de résultats maximum",
"or": "Ou",
"results": "Résultats",
"search": "Rechercher",
"search-mealie": "Rechercher dans Mealie (appuyez sur /)",
"search-placeholder": "Rechercher...",
"tag-filter": "Filtre par mots-clés"
},
"settings": {
"add-a-new-theme": "Ajouter un nouveau thème",
"admin-settings": "Paramètres d'administration",
"backup": {
"backup-created-at-response-export_path": "Sauvegarde créée dans {path}",
"backup-deleted": "Sauvegarde supprimée",
"backup-tag": "Tag de la sauvegarde",
"create-heading": "Créer une sauvegarde",
"delete-backup": "Supprimer la sauvegarde",
"error-creating-backup-see-log-file": "Erreur de création de la sauvegarde. Voir les logs",
"full-backup": "Sauvegarde complète",
"import-summary": "Résumé de l'importation",
"partial-backup": "Sauvegarde partielle",
"unable-to-delete-backup": "Impossible de supprimer la sauvegarde."
},
"backup-and-exports": "Sauvegardes",
"change-password": "Modifier le mot de passe",
"current": "Version :",
"custom-pages": "Pages personnalisées",
"edit-page": "Modifier la page",
"events": "Évènements",
"first-day-of-week": "Premier jour de la semaine",
"group-settings-updated": "Paramètres du groupe mis à jour",
"homepage": {
"all-categories": "Toutes les catégories",
"card-per-section": "Tuiles par section",
"home-page": "Page d'accueil",
"home-page-sections": "Sections de la page d'accueil",
"show-recent": "Afficher les récentes"
},
"language": "Langue",
"latest": "Dernière",
"local-api": "API locale",
"locale-settings": "Paramètres régionaux",
"migrations": "Migrations",
"new-page": "Nouvelle page",
"notify": "Notifier",
"organize": "Organiser",
"page-name": "Nom de la page",
"pages": "Pages",
"profile": "Profil",
"remove-existing-entries-matching-imported-entries": "Supprimer les entrées existantes correspondant aux entrées importées",
"set-new-time": "Indiquer une nouvelle heure",
"settings-update-failed": "La mise à jour des paramètres a échoué",
"settings-updated": "Paramètres mis à jour",
"site-settings": "Paramètres du site",
"theme": {
"accent": "Accentué",
"dark": "Sombre",
"default-to-system": "Identique au système",
"error": "Erreur",
"error-creating-theme-see-log-file": "Erreur lors de la création du thème. Consultez les logs.",
"error-deleting-theme": "Erreur lors de la suppression du thème",
"error-updating-theme": "Erreur lors de la mise à jour du thème",
"info": "Information",
"light": "Clair",
"primary": "Primaire",
"secondary": "Secondaire",
"success": "Succès",
"switch-to-dark-mode": "Basculer en mode sombre",
"switch-to-light-mode": "Basculer en mode clair",
"theme-deleted": "Thème supprimé",
"theme-name": "Nom du thème",
"theme-name-is-required": "Un nom de thème est requis.",
"theme-saved": "Thème enregistré",
"theme-updated": "Thème mis à jour",
"warning": "Avertissement"
},
"token": {
"active-tokens": "JETONS ACTIFS",
"api-token": "Jeton de l'API",
"api-tokens": "Jetons de l'API",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Copiez ce jeton pour l'utiliser avec une application externe. Ce jeton ne sera plus consultable.",
"create-an-api-token": "Créer un jeton API",
"token-name": "Nom du jeton"
},
"toolbox": {
"assign-all": "Assigner tout",
"bulk-assign": "Assigner en masse",
"new-name": "Nouveau nom",
"no-unused-items": "Aucun élément inutilisé",
"recipes-affected": "Aucune recette affectée|Une recette affectée|{count} recettes affectées",
"remove-unused": "Supprimer orphelins",
"title-case-all": "Majuscules partout",
"toolbox": "Boîte à outils",
"unorganized": "Non organisé(s)"
},
"webhooks": {
"test-webhooks": "Tester les webhooks",
"the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "Les liens dans cette liste recevront les webhooks contenant les recettes pour le menu du jour. Actuellement, les webhooks se lancent à",
"webhook-url": "Lien du webhook",
"webhooks-caps": "WEBHOOKS"
}
},
"shopping-list": {
"all-lists": "Toutes les listes",
"create-shopping-list": "Créer une liste d'épicerie",
"from-recipe": "À partir d'une recette",
"list-name": "Nom de la liste",
"new-list": "Nouvelle liste",
"quantity": "Quantité : {0}",
"shopping-list": "Liste d'épicerie",
"shopping-lists": "Listes d'épicerie"
},
"sidebar": {
"all-recipes": "Les recettes",
"categories": "Catégories",
"dashboard": "Dashboard",
"home-page": "Accueil",
"manage-users": "Utilisateurs",
"migrations": "Migrations",
"profile": "Profil",
"search": "Rechercher",
"site-settings": "Paramètres",
"tags": "Mots-clés",
"toolbox": "Boîte à outils"
},
"signup": {
"error-signing-up": "Erreur lors de l'inscription",
"sign-up": "S'inscrire",
"sign-up-link-created": "Lien d'inscription créé",
"sign-up-link-creation-failed": "La création du lien d'inscription a échoué",
"sign-up-links": "Liens d'inscription",
"sign-up-token-deleted": "Jeton d'inscription supprimé",
"sign-up-token-deletion-failed": "La suppression du jeton d'inscription a échoué",
"welcome-to-mealie": "Bienvenue sur Mealie ! Pour devenir un utilisateur de cette instance, vous devez avoir un lien d'invitation valide. Si vous n'avez pas reçu d'invitation, vous ne pouvez pas vous inscrire. Pour recevoir un lien, contactez l'administrateur du site."
},
"tag": {
"tag-created": "Mot-clé créé",
"tag-creation-failed": "La création du mot-clé a échoué",
"tag-deleted": "Mot-clé supprimé",
"tag-deletion-failed": "La suppression du mot-clé a échoué",
"tag-update-failed": "La mise à jour du mot-clé a échoué",
"tag-updated": "Mot-clé mis à jour",
"tags": "Mots-clés",
"untagged-count": "{count} sans mot-clés"
},
"user": {
"admin": "Administrateur",
"are-you-sure-you-want-to-delete-the-link": "Voulez-vous réellement supprimer le lien <b>{link}<b/> ?",
"are-you-sure-you-want-to-delete-the-user": "Voulez-vous réellement supprimer l'utilisateur <b>{activeName} ID : {activeId}<b/> ?",
"confirm-link-deletion": "Confirmer la suppression du lien",
"confirm-password": "Confirmer mot de passe",
"confirm-user-deletion": "Confirmer la suppression",
"could-not-validate-credentials": "La vérification de vos identifiants a échoué",
"create-link": "Créer un lien",
"create-user": "Créer utilisateur",
"current-password": "Mot de passe actuel",
"e-mail-must-be-valid": "Le courriel doit être valide",
"edit-user": "Modifier l'utilisateur",
"email": "Courriel",
"error-cannot-delete-super-user": "Erreur ! Impossible de supprimer le super utilisateur",
"existing-password-does-not-match": "Le mot de passe actuel ne correspond pas",
"full-name": "Nom",
"link-id": "ID du lien",
"link-name": "Nom du lien",
"login": "Connexion",
"logout": "Déconnexion",
"manage-users": "Gérer les utilisateurs",
"new-password": "Nouveau mot de passe",
"new-user": "Nouvel utilisateur",
"password": "Mot de passe",
"password-has-been-reset-to-the-default-password": "Le mot de passe a été réinitialisé à la valeur par défaut",
"password-must-match": "Les mots de passe doivent correspondre",
"password-reset-failed": "Échec de la réinitialisation du mot de passe",
"password-updated": "Mot de passe mis à jour",
"reset-password": "Réinitialiser le mot de passe",
"sign-in": "Se connecter",
"total-mealplans": "Nombre de menus",
"total-users": "Nombre d'utilisateurs",
"upload-photo": "Importer une photo",
"use-8-characters-or-more-for-your-password": "Utilisez au moins 8 caractères pour votre mot de passe",
"user": "Utilisateur",
"user-created": "Utilisateur créé",
"user-creation-failed": "La création de l'utilisateur a échoué",
"user-deleted": "Utilisateur supprimé",
"user-id": "ID utilisateur",
"user-id-with-value": "ID utilisateur : {id}",
"user-password": "Mot de passe de l'utilisateur",
"user-successfully-logged-in": "Connexion réussie",
"user-update-failed": "La mise à jour de l'utilisateur a échoué",
"user-updated": "Utilisateur mis à jour",
"username": "Nom d'utilisateur",
"users": "Utilisateurs",
"users-header": "UTILISATEURS",
"webhook-time": "Heure du Webhook",
"webhooks-enabled": "Webhooks activés",
"you-are-not-allowed-to-create-a-user": "Vous n'avez pas le droit de créer un utilisateur",
"you-are-not-allowed-to-delete-this-user": "Vous n'avez pas le droit de supprimer cet utilisateur"
}
}

View File

@@ -2,7 +2,7 @@
"about": {
"about": "À propos",
"about-mealie": "À propos de Mealie",
"api-docs": "Docs API",
"api-docs": "Documentation de l'API",
"api-port": "Port de l'API",
"application-mode": "Mode de l'application",
"database-type": "Type de base de données",
@@ -11,10 +11,10 @@
"demo": "Oui",
"demo-status": "Mode démo",
"development": "Développement",
"docs": "Docs",
"docs": "Documentation",
"download-log": "Télécharger les logs",
"download-recipe-json": "Dernier JSON récupéré",
"github": "Github",
"github": "GitHub",
"log-lines": "Lignes de log",
"not-demo": "Non",
"portfolio": "Portfolio",
@@ -159,7 +159,7 @@
"edit-meal-plan": "Modifier le menu",
"end-date": "Date de fin",
"group": "Regrouper (Bêta)",
"main": "Plat",
"main": "Plat principal",
"meal-planner": "Menus",
"meal-plans": "Menus",
"mealplan-categories": "CATÉGORIES DES MENUS",
@@ -231,7 +231,7 @@
"categories": "Catégories",
"comment-action": "Commenter",
"comments": "Commentaires",
"delete-confirmation": "Êtes-vous sûr·e de vouloir supprimer cette recette ?",
"delete-confirmation": "Êtes-vous sûr(e) de vouloir supprimer cette recette ?",
"delete-recipe": "Supprimer la recette",
"description": "Description",
"disable-amount": "Désactiver les quantités des ingrédients",
@@ -316,7 +316,7 @@
"current": "Version :",
"custom-pages": "Pages personnalisées",
"edit-page": "Modifier la page",
"events": "Evènements",
"events": "Évènements",
"first-day-of-week": "Premier jour de la semaine",
"group-settings-updated": "Paramètres du groupe mis à jour",
"homepage": {

View File

@@ -1,489 +1,489 @@
{
"about": {
"about": "About",
"about-mealie": "About Mealie",
"api-docs": "API Docs",
"api-port": "API Port",
"application-mode": "Application Mode",
"database-type": "Database Type",
"database-url": "Database URL",
"default-group": "Default Group",
"about": "Om",
"about-mealie": "Om Mealie",
"api-docs": "API Dokumentasjon",
"api-port": "API port",
"application-mode": "Program Modus",
"database-type": "Databasetype",
"database-url": "Databasens URL",
"default-group": "Standardgruppe",
"demo": "Demo",
"demo-status": "Demo Status",
"development": "Development",
"docs": "Docs",
"download-log": "Download Log",
"download-recipe-json": "Last Scraped JSON",
"github": "Github",
"log-lines": "Log Lines",
"not-demo": "Not Demo",
"portfolio": "Portfolio",
"production": "Production",
"support": "Support",
"version": "Version"
"demo-status": "Demo status",
"development": "Utvikling",
"docs": "Dokumentasjon",
"download-log": "Nedlastingslogg",
"download-recipe-json": "Siste skrapt JSON",
"github": "GitHub",
"log-lines": "Logg linjer",
"not-demo": "Ikke demo",
"portfolio": "Portefølje",
"production": "Produksjon",
"support": "Brukerstøtte",
"version": "Versjon"
},
"asset": {
"assets": "Assets",
"code": "Code",
"file": "File",
"image": "Image",
"new-asset": "New Asset",
"assets": "Ressurser",
"code": "Kode",
"file": "Fil",
"image": "Bilde",
"new-asset": "Ny ressurs",
"pdf": "PDF",
"recipe": "Recipe",
"show-assets": "Show Assets"
"recipe": "Oppskrift",
"show-assets": "Vis ressurser"
},
"category": {
"category-created": "Category created",
"category-creation-failed": "Category creation failed",
"category-deleted": "Category Deleted",
"category-deletion-failed": "Category deletion failed",
"category-filter": "Category Filter",
"category-update-failed": "Category update failed",
"category-updated": "Category updated",
"uncategorized-count": "Uncategorized {count}"
"category-created": "Kategori opprettet",
"category-creation-failed": "Kategori-opprettelse mislyktes",
"category-deleted": "Kategori slettet",
"category-deletion-failed": "Sletting av kategori mislyktes",
"category-filter": "Kategori Filter",
"category-update-failed": "Oppdatering av kategori mislyktes",
"category-updated": "Kategori oppdatert",
"uncategorized-count": "Ukategorisert {count}"
},
"events": {
"apprise-url": "Apprise URL",
"database": "Database",
"delete-event": "Delete Event",
"new-notification-form-description": "Mealie uses the Apprise library to generate notifications. They offer many options for services to use for notifications. Refer to their wiki for a comprehensive guide on how to create the URL for your service. If available, selecting the type of your notification may include extra features.",
"new-version": "New version available!",
"notification": "Notification",
"refresh": "Refresh",
"scheduled": "Scheduled",
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent"
"delete-event": "Slett hendelse",
"new-notification-form-description": "Mealie bruker Apprise biblioteket til å generere varsler. De tilbyr mange alternativer for varsler. Se wikien for en omfattende guide om hvordan du oppretter URL-adressen for tjenesten din. Hvis tilgjengelig, kan valg av type varsel inkludere ekstra funksjoner.",
"new-version": "Ny versjon tilgjengelig!",
"notification": "Varslinger",
"refresh": "Oppdater",
"scheduled": "Planlagt",
"something-went-wrong": "Noe gikk galt!",
"subscribed-events": "Abonnerte hendelser",
"test-message-sent": "Testmelding sendt"
},
"general": {
"cancel": "Cancel",
"clear": "Clear",
"close": "Close",
"confirm": "Confirm",
"confirm-delete-generic": "Are you sure you want to delete this?",
"copied": "Copied",
"create": "Create",
"created": "Created",
"custom": "Custom",
"dashboard": "Dashboard",
"delete": "Delete",
"disabled": "Disabled",
"download": "Download",
"edit": "Edit",
"enabled": "Enabled",
"exception": "Exception",
"failed-count": "Failed: {count}",
"failure-uploading-file": "Failure uploading file",
"favorites": "Favorites",
"field-required": "Field Required",
"file-folder-not-found": "File/folder not found",
"file-uploaded": "File uploaded",
"cancel": "Avbryt",
"clear": "Tøm",
"close": "Lukk",
"confirm": "Bekreft",
"confirm-delete-generic": "Er du sikker på at du vil slette dette?",
"copied": "Kopiert",
"create": "Opprett",
"created": "Opprettet",
"custom": "Egendefinert",
"dashboard": "Kontrollpanel",
"delete": "Slett",
"disabled": "Deaktivert",
"download": "Last ned",
"edit": "Rediger",
"enabled": "Aktivert",
"exception": "Unntak",
"failed-count": "Mislyktes: {count}",
"failure-uploading-file": "Opplasting av fil mislyktes",
"favorites": "Favoritter",
"field-required": "Nødvendig felt",
"file-folder-not-found": "Fil/mappe ikke funnet",
"file-uploaded": "Fil lastet opp",
"filter": "Filter",
"friday": "Friday",
"general": "General",
"get": "Get",
"home": "Home",
"image": "Image",
"image-upload-failed": "Image upload failed",
"import": "Import",
"friday": "Fredag",
"general": "Generelt",
"get": "Hent",
"home": "Hjem",
"image": "Bilde",
"image-upload-failed": "Bildeopplasting mislyktes",
"import": "Importer",
"json": "JSON",
"keyword": "Keyword",
"link-copied": "Link Copied",
"loading-recipes": "Loading Recipes",
"monday": "Monday",
"name": "Name",
"new": "New",
"no": "No",
"no-recipe-found": "No Recipe Found",
"keyword": "Nøkkelord",
"link-copied": "Lenke kopiert",
"loading-recipes": "Laster Oppskrifter",
"monday": "Mandag",
"name": "Navn",
"new": "Ny",
"no": "Nei",
"no-recipe-found": "Ingen oppskrift funnet",
"ok": "OK",
"options": "Options:",
"print": "Print",
"random": "Random",
"rating": "Rating",
"recent": "Recent",
"recipe": "Recipe",
"recipes": "Recipes",
"rename-object": "Rename {0}",
"reset": "Reset",
"saturday": "Saturday",
"save": "Save",
"settings": "Settings",
"share": "Share",
"shuffle": "Shuffle",
"sort": "Sort",
"sort-alphabetically": "Alphabetical",
"options": "Alternativer:",
"print": "Skriv ut",
"random": "Tilfeldig",
"rating": "Rangering",
"recent": "Nylig",
"recipe": "Oppskrift",
"recipes": "Oppskrifter",
"rename-object": "Endre navn {0}",
"reset": "Tilbakestill",
"saturday": "rdag",
"save": "Lagre",
"settings": "Innstillinger",
"share": "Del",
"shuffle": "Tilf. rekkefølge",
"sort": "Sortèr",
"sort-alphabetically": "Alfabetisk",
"status": "Status",
"submit": "Submit",
"success-count": "Success: {count}",
"sunday": "Sunday",
"templates": "Templates:",
"submit": "Legg til",
"success-count": "Vellykket: {count}",
"sunday": "Søndag",
"templates": "Maler:",
"test": "Test",
"themes": "Themes",
"thursday": "Thursday",
"themes": "Temaer",
"thursday": "Torsdag",
"token": "Token",
"tuesday": "Tuesday",
"tuesday": "Tirsdag",
"type": "Type",
"update": "Update",
"updated": "Updated",
"upload": "Upload",
"update": "Oppdater",
"updated": "Oppdatert",
"upload": "Last opp",
"url": "URL",
"view": "View",
"wednesday": "Wednesday",
"yes": "Yes"
"view": "Vis",
"wednesday": "Onsdag",
"yes": "Ja"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
"cannot-delete-default-group": "Cannot delete default group",
"cannot-delete-group-with-users": "Cannot delete group with users",
"confirm-group-deletion": "Confirm Group Deletion",
"create-group": "Create Group",
"error-updating-group": "Error updating group",
"group": "Group",
"group-deleted": "Group deleted",
"group-deletion-failed": "Group deletion failed",
"group-id-with-value": "Group ID: {groupID}",
"group-name": "Group Name",
"group-not-found": "Group not found",
"group-with-value": "Group: {groupID}",
"groups": "Groups",
"manage-groups": "Manage Groups",
"user-group": "User Group",
"user-group-created": "User Group Created",
"user-group-creation-failed": "User Group Creation Failed"
"are-you-sure-you-want-to-delete-the-group": "Er du sikker på at du vil slette <b>{groupName}<b/>?",
"cannot-delete-default-group": "Du kan ikke slette standardgruppen",
"cannot-delete-group-with-users": "Kan ikke slette gruppe med brukere",
"confirm-group-deletion": "Bekreft sletting av gruppe",
"create-group": "Opprett gruppe",
"error-updating-group": "Feil ved oppdatering av gruppe",
"group": "Gruppe",
"group-deleted": "Gruppe slettet",
"group-deletion-failed": "Sletting av gruppe mislyktes",
"group-id-with-value": "Gruppe ID: {groupID}",
"group-name": "Gruppenavn",
"group-not-found": "Gruppe ikke funnet",
"group-with-value": "Gruppe ID: {groupID}",
"groups": "Grupper",
"manage-groups": "Administrer grupper",
"user-group": "Brukergruppe",
"user-group-created": "Brukergruppe opprettet",
"user-group-creation-failed": "Opprett brukergruppe feilet"
},
"meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan",
"dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT",
"edit-meal-plan": "Edit Meal Plan",
"end-date": "End Date",
"group": "Group (Beta)",
"main": "Main",
"meal-planner": "Meal Planner",
"meal-plans": "Meal Plans",
"mealplan-categories": "MEALPLAN CATEGORIES",
"mealplan-created": "Mealplan created",
"mealplan-creation-failed": "Mealplan creation failed",
"mealplan-deleted": "Mealplan Deleted",
"mealplan-deletion-failed": "Mealplan deletion failed",
"mealplan-settings": "Mealplan Settings",
"mealplan-update-failed": "Mealplan update failed",
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planner",
"quick-week": "Quick Week",
"side": "Side",
"sides": "Sides",
"start-date": "Start Date"
"create-a-new-meal-plan": "Lag en ny måltidsplan",
"dinner-this-week": "Middag denne uken",
"dinner-today": "Middag idag",
"dinner-tonight": "DAGENS MIDDAG",
"edit-meal-plan": "Rediger måltidsplan",
"end-date": "Sluttdato",
"group": "Gruppe (Beta)",
"main": "Hovedrett",
"meal-planner": "Planlegg Måltid",
"meal-plans": "Måltidsplan",
"mealplan-categories": "MÅLTIDSPLAN KATEGORIER",
"mealplan-created": "Måltidsplan opprettet",
"mealplan-creation-failed": "Opprettelse av måltidsplan feilet",
"mealplan-deleted": "Måltidsplan Slettet",
"mealplan-deletion-failed": "Sletting av måltidsplan feilet",
"mealplan-settings": "Måltidsplan Innstillinger",
"mealplan-update-failed": "Oppdatering av måltidsplan feilet",
"mealplan-updated": "Måltidsplan Oppdatert",
"no-meal-plan-defined-yet": "Ingen måltidsplan er definert ennå",
"no-meal-planned-for-today": "Ingen måltid planlagt i dag",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Kun oppskrifter med disse kategoriene vil bli brukt i måltidsplaner",
"planner": "Planlegger",
"quick-week": "Hurtigplan",
"side": "Siderett",
"sides": "Sideretter",
"start-date": "Start Dato"
},
"migration": {
"chowdown": {
"description": "Migrate data from Chowdown",
"description": "Overfør data fra Chowdown",
"title": "Chowdown"
},
"migration-data-removed": "Migration data removed",
"migration-data-removed": "Migrasjonsdata er fjernet",
"nextcloud": {
"description": "Migrate data from a Nextcloud Cookbook instance",
"description": "Migrer data fra en Nextcloud Cookbook instans",
"title": "Nextcloud Cookbook"
},
"no-migration-data-available": "No Migration Data Available",
"recipe-migration": "Recipe Migration"
"no-migration-data-available": "Ingen migrasjonsdata tilgjengelig",
"recipe-migration": "Oppskriftsmigrering"
},
"new-recipe": {
"bulk-add": "Bulk Add",
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.",
"error-title": "Looks Like We Couldn't Find Anything",
"from-url": "Import a Recipe",
"bulk-add": "Opprett flere",
"error-details": "Bare nettsteder som inneholder ld+json eller mikrodata kan importeres av Mealie. De største oppskriftsnettsteder støtter denne datastrukturen. Dersom nettstedet ditt ikke kan importeres, men det er json-data i loggen, må du sende inn et github-problem med nettadressen og data.",
"error-title": "Ser ut som vi ikke kunne finne noe",
"from-url": "Importer en oppskrift",
"github-issues": "GitHub Issues",
"google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Must be a Valid URL",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Paste in your recipe data. Each line will be treated as an item in a list",
"recipe-markup-specification": "Recipe Markup Specification",
"recipe-url": "Recipe URL",
"upload-a-recipe": "Upload a Recipe",
"upload-individual-zip-file": "Upload an individual .zip file exported from another Mealie instance.",
"url-form-hint": "Copy and paste a link from your favorite recipe website",
"view-scraped-data": "View Scraped Data"
"must-be-a-valid-url": "Må være en korrekt URL",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Lim inn oppskriftsdataene. Hver linje blir behandlet som et element i en liste",
"recipe-markup-specification": "Spesifikasjon av oppmåling",
"recipe-url": "Oppskrift URL",
"upload-a-recipe": "Last opp oppskrift",
"upload-individual-zip-file": "Last opp en individuell .zip-fil eksportert fra en annen Mealie-instans.",
"url-form-hint": "Kopier og lim inn en lenke fra ditt favoritt-oppskriftsnettsted",
"view-scraped-data": "Vis skrapte data"
},
"page": {
"404-page-not-found": "404 Page not found",
"all-recipes": "All Recipes",
"new-page-created": "New page created",
"page": "Page",
"page-creation-failed": "Page creation failed",
"page-deleted": "Page deleted",
"page-deletion-failed": "Page deletion failed",
"page-update-failed": "Page update failed",
"page-updated": "Page updated",
"pages-update-failed": "Pages update failed",
"pages-updated": "Pages updated"
"404-page-not-found": "404 Siden ble ikke funnet",
"all-recipes": "Alle oppskrifter",
"new-page-created": "Ny side opprettet",
"page": "Side",
"page-creation-failed": "Sideopprettelse feilet",
"page-deleted": "Side slettet",
"page-deletion-failed": "Sletting av siden mislyktes",
"page-update-failed": "Oppdatering av siden mislyktes",
"page-updated": "Side oppdatert",
"pages-update-failed": "Oppdatering av siden mislyktes",
"pages-updated": "Sider oppdatert"
},
"recipe": {
"add-key": "Add Key",
"add-to-favorites": "Add to Favorites",
"api-extras": "API Extras",
"calories": "Calories",
"calories-suffix": "calories",
"carbohydrate-content": "Carbohydrate",
"categories": "Categories",
"comment-action": "Comment",
"comments": "Comments",
"delete-confirmation": "Are you sure you want to delete this recipe?",
"delete-recipe": "Delete Recipe",
"description": "Description",
"disable-amount": "Disable Ingredient Amounts",
"disable-comments": "Disable Comments",
"fat-content": "Fat",
"fiber-content": "Fiber",
"grams": "grams",
"ingredient": "Ingredient",
"ingredients": "Ingredients",
"insert-section": "Insert Section",
"instructions": "Instructions",
"key-name-required": "Key Name Required",
"landscape-view-coming-soon": "Landscape View (Coming Soon)",
"milligrams": "milligrams",
"new-key-name": "New Key Name",
"no-white-space-allowed": "No White Space Allowed",
"note": "Note",
"nutrition": "Nutrition",
"object-key": "Object Key",
"object-value": "Object Value",
"original-url": "Original URL",
"perform-time": "Cook Time",
"prep-time": "Prep Time",
"add-key": "Legg til nøkkel",
"add-to-favorites": "Legg til i favoritter",
"api-extras": "API Tillegg",
"calories": "Kalorier",
"calories-suffix": "kalorier",
"carbohydrate-content": "Karbohydrater",
"categories": "Kategorier",
"comment-action": "Kommenter",
"comments": "Kommentarer",
"delete-confirmation": "Er du sikker på at du vil slette denne oppskriften?",
"delete-recipe": "Slett oppskrift",
"description": "Beskrivelse",
"disable-amount": "Deaktiver Ingrediens-mengde",
"disable-comments": "Deaktiver kommentarer",
"fat-content": "Fett",
"fiber-content": "Kostfiber",
"grams": "gram",
"ingredient": "Ingredienser",
"ingredients": "Ingredienser",
"insert-section": "Sett inn avsnitt",
"instructions": "Instruksjoner",
"key-name-required": "Nøkkelnavn kreves",
"landscape-view-coming-soon": "Landskapsvisning (Kommer snart)",
"milligrams": "mg",
"new-key-name": "Nytt nøkkelnavn",
"no-white-space-allowed": "Ingen mellomrom tillatt",
"note": "Notat",
"nutrition": "Næring",
"object-key": "Objektnøkkel",
"object-value": "Objekt verdi",
"original-url": "Opprinnlig URL",
"perform-time": "Koketid",
"prep-time": "Forberedelser tid",
"protein-content": "Protein",
"public-recipe": "Public Recipe",
"recipe-created": "Recipe created",
"recipe-creation-failed": "Recipe creation failed",
"recipe-deleted": "Recipe deleted",
"recipe-image": "Recipe Image",
"recipe-image-updated": "Recipe image updated",
"recipe-name": "Recipe Name",
"recipe-settings": "Recipe Settings",
"recipe-update-failed": "Recipe update failed",
"recipe-updated": "Recipe updated",
"remove-from-favorites": "Remove from Favorites",
"remove-section": "Remove Section",
"save-recipe-before-use": "Save recipe before use",
"section-title": "Section Title",
"servings": "Servings",
"share-recipe-message": "I wanted to share my {0} recipe with you.",
"show-nutrition-values": "Show Nutrition Values",
"sodium-content": "Sodium",
"step-index": "Step: {step}",
"sugar-content": "Sugar",
"title": "Title",
"total-time": "Total Time",
"unable-to-delete-recipe": "Unable to Delete Recipe"
"public-recipe": "Offentlig oppskrift",
"recipe-created": "Oppskrift opprettet",
"recipe-creation-failed": "Opprettelse av oppskrift feilet",
"recipe-deleted": "Oppskrift slettet",
"recipe-image": "Oppskriftsbilde",
"recipe-image-updated": "Oppskriftsbilde oppdatert",
"recipe-name": "Oppskriftsnavn",
"recipe-settings": "Oppskriftsinnstillinger",
"recipe-update-failed": "Oppdatering av oppskrift mislyktes",
"recipe-updated": "Oppskrift oppdatert",
"remove-from-favorites": "Fjern fra favoritter",
"remove-section": "Fjern seksjon",
"save-recipe-before-use": "Lagre oppskrift før bruk",
"section-title": "Seksjonstittel",
"servings": "Porsjoner",
"share-recipe-message": "Jeg ville dele min {0} oppskrift med deg.",
"show-nutrition-values": "Vis ernæringsverdier",
"sodium-content": "Natrium",
"step-index": "Steg: {step}",
"sugar-content": "Sukker",
"title": "Tittel",
"total-time": "Total Tid",
"unable-to-delete-recipe": "Kan ikke slette oppskrift"
},
"reicpe": {
"no-recipe": "No Recipe"
"no-recipe": "Ingen oppskrift"
},
"search": {
"advanced-search": "Advanced Search",
"and": "and",
"exclude": "Exclude",
"include": "Include",
"max-results": "Max Results",
"or": "Or",
"results": "Results",
"search": "Search",
"search-mealie": "Search Mealie (press /)",
"search-placeholder": "Search...",
"tag-filter": "Tag Filter"
"advanced-search": "Avansert søk",
"and": "og",
"exclude": "Utelate",
"include": "Inkluder",
"max-results": "Maks resultater",
"or": "Eller",
"results": "Resultater",
"search": "Søk",
"search-mealie": "Søke i Mealie (trykk /)",
"search-placeholder": "Søk...",
"tag-filter": "Etikett filter"
},
"settings": {
"add-a-new-theme": "Add a New Theme",
"admin-settings": "Admin Settings",
"add-a-new-theme": "Legg til nytt tema",
"admin-settings": "Administrator innstillinger",
"backup": {
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"backup-tag": "Backup Tag",
"create-heading": "Create a Backup",
"delete-backup": "Delete Backup",
"error-creating-backup-see-log-file": "Error Creating Backup. See Log File",
"full-backup": "Full Backup",
"import-summary": "Import Summary",
"partial-backup": "Partial Backup",
"unable-to-delete-backup": "Unable to Delete Backup."
"backup-created-at-response-export_path": "Sikkerhetskopi opprettet på {path}",
"backup-deleted": "Sikkerhetskopi slettet",
"backup-tag": "Sikkerhetskopi-merke",
"create-heading": "Opprett sikkerhetskopi",
"delete-backup": "Slett Sikkerhetskopi",
"error-creating-backup-see-log-file": "Feil ved oppretting av sikkerhetskopi. Se loggfilen",
"full-backup": "Fullstendig sikkerhetskopi",
"import-summary": "Importer Sammendrag",
"partial-backup": "Delvis sikkerhetskopi",
"unable-to-delete-backup": "Kan ikke slette sikkerhetskopien."
},
"backup-and-exports": "Backups",
"change-password": "Change Password",
"current": "Version:",
"custom-pages": "Custom Pages",
"edit-page": "Edit Page",
"events": "Events",
"first-day-of-week": "First day of the week",
"group-settings-updated": "Group Settings Updated",
"backup-and-exports": "Sikkerhetskopier",
"change-password": "Endre passord",
"current": "Versjon:",
"custom-pages": "Egendefinerte sider",
"edit-page": "Rediger side",
"events": "Hendelser",
"first-day-of-week": "Første dag i uken",
"group-settings-updated": "Gruppeinnstillinger oppdatert",
"homepage": {
"all-categories": "All Categories",
"card-per-section": "Card Per Section",
"home-page": "Home Page",
"home-page-sections": "Home Page Sections",
"show-recent": "Show Recent"
"all-categories": "Alle kategorier",
"card-per-section": "Kort Per seksjon",
"home-page": "Hjemmeside",
"home-page-sections": "Hovedside-seksjoner",
"show-recent": "Vis Nylige"
},
"language": "Language",
"latest": "Latest",
"local-api": "Local API",
"locale-settings": "Locale settings",
"migrations": "Migrations",
"new-page": "New Page",
"notify": "Notify",
"organize": "Organize",
"page-name": "Page Name",
"pages": "Pages",
"profile": "Profile",
"remove-existing-entries-matching-imported-entries": "Remove existing entries matching imported entries",
"set-new-time": "Set New Time",
"settings-update-failed": "Settings update failed",
"settings-updated": "Settings updated",
"site-settings": "Site Settings",
"language": "Språk",
"latest": "Siste",
"local-api": "Lokal API",
"locale-settings": "Språkinnstillinger",
"migrations": "Overføringer",
"new-page": "Ny side",
"notify": "Varsling",
"organize": "Organiser",
"page-name": "Sidenavn",
"pages": "Sider",
"profile": "Profil",
"remove-existing-entries-matching-imported-entries": "Fjern eksisterende oppføringer som samsvarer med de importerte",
"set-new-time": "Angi ny tid",
"settings-update-failed": "Oppdatering av innstillinger mislyktes",
"settings-updated": "Innstillinger oppdatert",
"site-settings": "Sideinnstillinger",
"theme": {
"accent": "Accent",
"dark": "Dark",
"default-to-system": "Default to system",
"error": "Error",
"error-creating-theme-see-log-file": "Error creating theme. See log file.",
"error-deleting-theme": "Error deleting theme",
"error-updating-theme": "Error updating theme",
"accent": "Utheving",
"dark": "rk",
"default-to-system": "Standard",
"error": "Feil",
"error-creating-theme-see-log-file": "Feil under oppretting av tema. Se loggfilen.",
"error-deleting-theme": "Feil ved sletting av tema",
"error-updating-theme": "Feil ved oppdatering av tema",
"info": "Info",
"light": "Light",
"primary": "Primary",
"secondary": "Secondary",
"success": "Success",
"switch-to-dark-mode": "Switch to dark mode",
"switch-to-light-mode": "Switch to light mode",
"theme-deleted": "Theme deleted",
"theme-name": "Theme Name",
"theme-name-is-required": "Theme Name is required.",
"theme-saved": "Theme Saved",
"theme-updated": "Theme updated",
"warning": "Warning"
"light": "Lys",
"primary": "Primær",
"secondary": "Sekundær",
"success": "Fullført",
"switch-to-dark-mode": "Bytt til mørk modus",
"switch-to-light-mode": "Bytt til lys modus",
"theme-deleted": "Tema slettet",
"theme-name": "Temanavn",
"theme-name-is-required": "Navn er påkrevd.",
"theme-saved": "Tema lagret",
"theme-updated": "Tema oppdatert",
"warning": "Advarsel"
},
"token": {
"active-tokens": "ACTIVE TOKENS",
"api-token": "API Token",
"api-tokens": "API Tokens",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Copy this token for use with an external application. This token will not be viewable again.",
"create-an-api-token": "Create an API Token",
"token-name": "Token Name"
"active-tokens": "AKTIVE TOKENS",
"api-token": "API-Token",
"api-tokens": "API-Token",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Kopier dette tokenet til bruk med en ekstern applikasjon. Dette tokenet vil ikke kunne ses igjen.",
"create-an-api-token": "Opprett API Token",
"token-name": "Tokennavn"
},
"toolbox": {
"assign-all": "Assign All",
"bulk-assign": "Bulk Assign",
"new-name": "New Name",
"no-unused-items": "No Unused Items",
"recipes-affected": "No Recipes Affected|One Recipe Affected|{count} Recipes Affected",
"remove-unused": "Remove Unused",
"title-case-all": "Title Case All",
"toolbox": "Toolbox",
"unorganized": "Unorganized"
"assign-all": "Tildel alle",
"bulk-assign": "Tilordne flere",
"new-name": "Nytt navn",
"no-unused-items": "Ingen ubrukte elementer",
"recipes-affected": "Ingen Oppskrifter påvirket|En oppskrift påvirket|{count} Oppskrifter påvirket",
"remove-unused": "Fjern ubrukte",
"title-case-all": "Stor forbokstav på alle",
"toolbox": "Verktøykasse",
"unorganized": "Uorganisert"
},
"webhooks": {
"test-webhooks": "Test Webhooks",
"the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "The URLs listed below will receive webhooks containing the recipe data for the meal plan on it's scheduled day. Currently Webhooks will execute at",
"webhook-url": "Webhook URL",
"the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "URL-adressene listet nedenfor vil motta webhooks som inneholder oppskriftsdataene for måltidsplanen på den planlagte dagen. For tiden vil Webhooks kjøre på",
"webhook-url": "Webhook-URL",
"webhooks-caps": "WEBHOOKS"
}
},
"shopping-list": {
"all-lists": "All Lists",
"create-shopping-list": "Create Shopping List",
"from-recipe": "From Recipe",
"list-name": "List Name",
"new-list": "New List",
"quantity": "Quantity: {0}",
"shopping-list": "Shopping List",
"shopping-lists": "Shopping Lists"
"all-lists": "Alle lister",
"create-shopping-list": "Opprett handleliste",
"from-recipe": "Fra Oppskrift",
"list-name": "Listenavn",
"new-list": "Ny liste",
"quantity": "Mengde: {0}",
"shopping-list": "Handleliste",
"shopping-lists": "Handlelister"
},
"sidebar": {
"all-recipes": "All Recipes",
"categories": "Categories",
"dashboard": "Dashboard",
"home-page": "Home Page",
"manage-users": "Manage Users",
"migrations": "Migrations",
"profile": "Profile",
"search": "Search",
"site-settings": "Site Settings",
"tags": "Tags",
"toolbox": "Toolbox"
"all-recipes": "Oppskrifter",
"categories": "Kategorier",
"dashboard": "Kontrollpanel",
"home-page": "Hovedside",
"manage-users": "Brukere",
"migrations": "Overføringer",
"profile": "Profil",
"search": "Søk",
"site-settings": "Innstillinger",
"tags": "Etiketter",
"toolbox": "Verktøy"
},
"signup": {
"error-signing-up": "Error Signing Up",
"sign-up": "Sign Up",
"sign-up-link-created": "Sign up link created",
"sign-up-link-creation-failed": "Sign up link creation failed",
"sign-up-links": "Sign Up Links",
"sign-up-token-deleted": "Sign Up Token Deleted",
"sign-up-token-deletion-failed": "Sign up token deletion failed",
"welcome-to-mealie": "Welcome to Mealie! To become a user of this instance you are required to have a valid invitation link. If you haven't recieved an invitation you are unable to sign-up. To recieve a link, contact the sites administrator."
"error-signing-up": "Feil under pålogging",
"sign-up": "Registrer deg",
"sign-up-link-created": "Registreringslenke opprettet",
"sign-up-link-creation-failed": "Kunne ikke opprette registreringslenke",
"sign-up-links": "Registreringslenker",
"sign-up-token-deleted": "Registrerings-token slettet",
"sign-up-token-deletion-failed": "Sletting av registreringstoken feilet",
"welcome-to-mealie": "Velkommen til Mealie! For å bli en bruker må du ha en gyldig invitasjonslenke. Hvis du ikke har mottatt en invitasjon vil du ikke kunne registrere deg. For å motta en lenke, kontakt systemansvarlig."
},
"tag": {
"tag-created": "Tag created",
"tag-creation-failed": "Tag creation failed",
"tag-deleted": "Tag deleted",
"tag-deletion-failed": "Tag deletion failed",
"tag-update-failed": "Tag update failed",
"tag-updated": "Tag updated",
"tags": "Tags",
"untagged-count": "Untagged {count}"
"tag-created": "Etikett opprettet",
"tag-creation-failed": "Etikett-opprettelse mislyktes",
"tag-deleted": "Etikett slettet",
"tag-deletion-failed": "Sletting av etikett feilet",
"tag-update-failed": "Oppdatering av etikett feilet",
"tag-updated": "Etikett oppdatert",
"tags": "Etiketter",
"untagged-count": "Umerkede {count}"
},
"user": {
"admin": "Admin",
"are-you-sure-you-want-to-delete-the-link": "Are you sure you want to delete the link <b>{link}<b/>?",
"are-you-sure-you-want-to-delete-the-user": "Are you sure you want to delete the user <b>{activeName} ID: {activeId}<b/>?",
"confirm-link-deletion": "Confirm Link Deletion",
"confirm-password": "Confirm Password",
"confirm-user-deletion": "Confirm User Deletion",
"could-not-validate-credentials": "Could Not Validate Credentials",
"create-link": "Create Link",
"create-user": "Create User",
"current-password": "Current Password",
"e-mail-must-be-valid": "E-mail must be valid",
"edit-user": "Edit User",
"email": "Email",
"error-cannot-delete-super-user": "Error! Cannot Delete Super User",
"existing-password-does-not-match": "Existing password does not match",
"full-name": "Full Name",
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"logout": "Logout",
"manage-users": "Manage Users",
"new-password": "New Password",
"new-user": "New User",
"password": "Password",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
"password-must-match": "Password must match",
"password-reset-failed": "Password reset failed",
"password-updated": "Password updated",
"reset-password": "Reset Password",
"sign-in": "Sign in",
"total-mealplans": "Total MealPlans",
"total-users": "Total Users",
"upload-photo": "Upload Photo",
"use-8-characters-or-more-for-your-password": "Use 8 characters or more for your password",
"user": "User",
"user-created": "User created",
"user-creation-failed": "User creation failed",
"user-deleted": "User deleted",
"user-id": "User ID",
"user-id-with-value": "User ID: {id}",
"user-password": "User Password",
"user-successfully-logged-in": "User Successfully Logged In",
"user-update-failed": "User update failed",
"user-updated": "User updated",
"username": "Username",
"users": "Users",
"users-header": "USERS",
"webhook-time": "Webhook Time",
"webhooks-enabled": "Webhooks Enabled",
"you-are-not-allowed-to-create-a-user": "You are not allowed to create a user",
"you-are-not-allowed-to-delete-this-user": "You are not allowed to delete this user"
"admin": "Administrator",
"are-you-sure-you-want-to-delete-the-link": "Er du sikker på at du vil slette <b>{link}<b/>?",
"are-you-sure-you-want-to-delete-the-user": "Er du sikker på at du vil slette brukeren <b>{activeName} ID: {activeId}<b/>?",
"confirm-link-deletion": "Bekreft sletting",
"confirm-password": "Bekreft passord",
"confirm-user-deletion": "Bekreft sletting av bruker",
"could-not-validate-credentials": "Kunne ikke validere påloggingsinformasjon",
"create-link": "Opprette link",
"create-user": "Opprett bruker",
"current-password": "Gjeldende passord",
"e-mail-must-be-valid": "E-post må være gyldig",
"edit-user": "Rediger Bruker",
"email": "E-post",
"error-cannot-delete-super-user": "Feil! Kan ikke slette superbruker",
"existing-password-does-not-match": "Eksisterende passord samsvarer ikke",
"full-name": "Fullt navn",
"link-id": "Link-ID",
"link-name": "Lenkenavn",
"login": "Logg på",
"logout": "Logg ut",
"manage-users": "Administrere brukere",
"new-password": "Nytt passord",
"new-user": "Ny bruker",
"password": "Passord",
"password-has-been-reset-to-the-default-password": "Passordet er blitt tilbakestilt til standard passord",
"password-must-match": "Passordene må samsvare",
"password-reset-failed": "Nullstilling av passord mislyktes",
"password-updated": "Passord oppdatert",
"reset-password": "Tilbakestill passord",
"sign-in": "Logg inn",
"total-mealplans": "Antall Oppskrifter",
"total-users": "Totalt antall brukere",
"upload-photo": "Last opp bilde",
"use-8-characters-or-more-for-your-password": "Bruk 8 tegn eller mer for ditt passord",
"user": "Bruker",
"user-created": "Bruker opprettet",
"user-creation-failed": "Brukeroppretting mislyktes",
"user-deleted": "Slettet bruker",
"user-id": "Bruker-ID",
"user-id-with-value": "Bruker-ID: {id}",
"user-password": "Brukerpassord",
"user-successfully-logged-in": "Innlogging vellykket",
"user-update-failed": "Brukeroppdatering mislyktes",
"user-updated": "Oppdatert bruker",
"username": "Brukernavn",
"users": "Brukere",
"users-header": "BRUKERE",
"webhook-time": "Webhooks Tidsbruk",
"webhooks-enabled": "Webhooks aktivert",
"you-are-not-allowed-to-create-a-user": "Du har ikke rettigheter til å opprette en bruker",
"you-are-not-allowed-to-delete-this-user": "Du har ikke rettigheter til å slette denne brukeren"
}
}

View File

@@ -401,11 +401,11 @@
"shopping-lists": "Lista zakupów"
},
"sidebar": {
"all-recipes": "All Recipes",
"all-recipes": "Wszystkie",
"categories": "Kategorie",
"dashboard": "Kokpit",
"home-page": "Strona główna",
"manage-users": "Manage Users",
"manage-users": "Zarządzanie",
"migrations": "Migracje",
"profile": "Profil",
"search": "Wyszukaj",

View File

@@ -1,165 +1,165 @@
{
"about": {
"about": "About",
"about-mealie": "About Mealie",
"api-docs": "API Docs",
"api-port": "API Port",
"about": "Sobre",
"about-mealie": "Sobre Mealie",
"api-docs": "Documentação da API",
"api-port": "Porta da API",
"application-mode": "Application Mode",
"database-type": "Database Type",
"database-url": "Database URL",
"default-group": "Default Group",
"database-type": "Tipo do banco de dados",
"database-url": "URL do servidor de banco de dados",
"default-group": "Grupo padrão",
"demo": "Demo",
"demo-status": "Demo Status",
"development": "Development",
"docs": "Docs",
"download-log": "Download Log",
"development": "Desenvolvimento",
"docs": "Documentação",
"download-log": "Baixar Log",
"download-recipe-json": "Last Scraped JSON",
"github": "Github",
"log-lines": "Log Lines",
"github": "GitHub",
"log-lines": "Linhas de log",
"not-demo": "Not Demo",
"portfolio": "Portfolio",
"production": "Production",
"support": "Support",
"version": "Version"
"portfolio": "Portfólio",
"production": "Produção",
"support": "Suporte",
"version": "Versão"
},
"asset": {
"assets": "Assets",
"code": "Code",
"file": "File",
"image": "Image",
"new-asset": "New Asset",
"assets": "Arquivos",
"code": "Código",
"file": "Arquivo",
"image": "Imagem",
"new-asset": "Novo Arquivo",
"pdf": "PDF",
"recipe": "Recipe",
"show-assets": "Show Assets"
"recipe": "Receita",
"show-assets": "Exibir Arquivos"
},
"category": {
"category-created": "Category created",
"category-creation-failed": "Category creation failed",
"category-deleted": "Category Deleted",
"category-deletion-failed": "Category deletion failed",
"category-filter": "Category Filter",
"category-update-failed": "Category update failed",
"category-updated": "Category updated",
"uncategorized-count": "Uncategorized {count}"
"category-created": "Categoria criada",
"category-creation-failed": "Falha ao criar categoria",
"category-deleted": "Categoria Excluída",
"category-deletion-failed": "Falha ao excluir a categoria",
"category-filter": "Filtro de categoria",
"category-update-failed": "Falha ao atualizar categoria",
"category-updated": "Categoria atualizada",
"uncategorized-count": "Sem categoria {count}"
},
"events": {
"apprise-url": "Apprise URL",
"database": "Database",
"delete-event": "Delete Event",
"new-notification-form-description": "Mealie uses the Apprise library to generate notifications. They offer many options for services to use for notifications. Refer to their wiki for a comprehensive guide on how to create the URL for your service. If available, selecting the type of your notification may include extra features.",
"new-version": "New version available!",
"notification": "Notification",
"refresh": "Refresh",
"scheduled": "Scheduled",
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent"
"apprise-url": "URL do Apprise",
"database": "Banco de dados",
"delete-event": "Apagar evento",
"new-notification-form-description": "Mealie usa a biblioteca Apprise para gerar notificações. Eles oferecem várias opções de serviços para serem usados para notificações. Consulte a wiki para um guia completo sobre como criar a URL para o seu serviço. Se disponível, selecionar o tipo de notificação pode incluir recursos extras.",
"new-version": "Nova versão disponível!",
"notification": "Notificação",
"refresh": "Atualizar",
"scheduled": "Agendado",
"something-went-wrong": "Algo deu errado!",
"subscribed-events": "Eventos Inscritos",
"test-message-sent": "Mensagem de teste enviada"
},
"general": {
"cancel": "Cancel",
"clear": "Clear",
"close": "Close",
"confirm": "Confirm",
"confirm-delete-generic": "Are you sure you want to delete this?",
"copied": "Copied",
"create": "Create",
"created": "Created",
"custom": "Custom",
"cancel": "Cancelar",
"clear": "Limpar",
"close": "Fechar",
"confirm": "Confirmar",
"confirm-delete-generic": "Você tem certeza de que deseja apagar isto?",
"copied": "Copiado",
"create": "Criar",
"created": "Criado",
"custom": "Personalizado",
"dashboard": "Dashboard",
"delete": "Delete",
"disabled": "Disabled",
"delete": "Excluir",
"disabled": "Desabilitado",
"download": "Download",
"edit": "Edit",
"enabled": "Enabled",
"exception": "Exception",
"failed-count": "Failed: {count}",
"failure-uploading-file": "Failure uploading file",
"favorites": "Favorites",
"field-required": "Field Required",
"file-folder-not-found": "File/folder not found",
"file-uploaded": "File uploaded",
"filter": "Filter",
"friday": "Friday",
"general": "General",
"get": "Get",
"edit": "Editar",
"enabled": "Habilitado",
"exception": "Exceção",
"failed-count": "Falhou: {count}",
"failure-uploading-file": "Falha ao enviar arquivo",
"favorites": "Favoritos",
"field-required": "Campo obrigatório",
"file-folder-not-found": "Arquivo/pasta não encontrado",
"file-uploaded": "Arquivo enviado",
"filter": "Filtro",
"friday": "Sexta-feira",
"general": "Geral",
"get": "Obter",
"home": "Home",
"image": "Image",
"image-upload-failed": "Image upload failed",
"import": "Import",
"image": "Imagem",
"image-upload-failed": "Falha no envio da imagem",
"import": "Importar",
"json": "JSON",
"keyword": "Keyword",
"link-copied": "Link Copied",
"loading-recipes": "Loading Recipes",
"monday": "Monday",
"name": "Name",
"new": "New",
"no": "No",
"no-recipe-found": "No Recipe Found",
"keyword": "Palavra chave",
"link-copied": "Link Copiado",
"loading-recipes": "Carregando Receitas",
"monday": "Segunda-feira",
"name": "Nome",
"new": "Novo",
"no": "Não",
"no-recipe-found": "Nenhuma Receita Encontrada",
"ok": "OK",
"options": "Options:",
"print": "Print",
"random": "Random",
"rating": "Rating",
"recent": "Recent",
"recipe": "Recipe",
"recipes": "Recipes",
"rename-object": "Rename {0}",
"reset": "Reset",
"saturday": "Saturday",
"save": "Save",
"settings": "Settings",
"share": "Share",
"shuffle": "Shuffle",
"sort": "Sort",
"sort-alphabetically": "Alphabetical",
"status": "Status",
"submit": "Submit",
"success-count": "Success: {count}",
"sunday": "Sunday",
"templates": "Templates:",
"test": "Test",
"themes": "Themes",
"thursday": "Thursday",
"options": "Opções:",
"print": "Imprimir",
"random": "Aleatório",
"rating": "Avaliação",
"recent": "Recentes",
"recipe": "Receita",
"recipes": "Receitas",
"rename-object": "Renomear {0}",
"reset": "Redefinir",
"saturday": "Sábado",
"save": "Salvar",
"settings": "Configurações",
"share": "Compartilhar",
"shuffle": "Aleatório",
"sort": "Ordenar",
"sort-alphabetically": "Alfabética",
"status": "Estado",
"submit": "Submeter",
"success-count": "Sucesso: {count}",
"sunday": "Domingo",
"templates": "Modelos:",
"test": "Teste",
"themes": "Temas",
"thursday": "Quinta-feira",
"token": "Token",
"tuesday": "Tuesday",
"type": "Type",
"update": "Update",
"updated": "Updated",
"upload": "Upload",
"tuesday": "Terça-feira",
"type": "Tipo",
"update": "Atualizar",
"updated": "Atualizado",
"upload": "Enviar",
"url": "URL",
"view": "View",
"wednesday": "Wednesday",
"yes": "Yes"
"view": "Visualizar",
"wednesday": "Quarta-feira",
"yes": "Sim"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
"cannot-delete-default-group": "Cannot delete default group",
"cannot-delete-group-with-users": "Cannot delete group with users",
"confirm-group-deletion": "Confirm Group Deletion",
"create-group": "Create Group",
"error-updating-group": "Error updating group",
"group": "Group",
"group-deleted": "Group deleted",
"group-deletion-failed": "Group deletion failed",
"group-id-with-value": "Group ID: {groupID}",
"group-name": "Group Name",
"group-not-found": "Group not found",
"group-with-value": "Group: {groupID}",
"groups": "Groups",
"manage-groups": "Manage Groups",
"user-group": "User Group",
"user-group-created": "User Group Created",
"user-group-creation-failed": "User Group Creation Failed"
"are-you-sure-you-want-to-delete-the-group": "Tem certeza que deseja excluir o grupo <b>{groupName}<b/>?",
"cannot-delete-default-group": "Não é possível excluir o grupo padrão",
"cannot-delete-group-with-users": "Não é possível excluir grupo com usuários",
"confirm-group-deletion": "Confirmar Exclusão de Grupo",
"create-group": "Criar Grupo",
"error-updating-group": "Erro ao atualizar grupo",
"group": "Grupo",
"group-deleted": "Grupo excluído",
"group-deletion-failed": "Falha ao excluir grupo",
"group-id-with-value": "ID do grupo: {groupID}",
"group-name": "Nome do Grupo",
"group-not-found": "Grupo não encontrado",
"group-with-value": "Grupo: {groupID}",
"groups": "Grupos",
"manage-groups": "Gerenciar Grupos",
"user-group": "Grupo de usuário",
"user-group-created": "Grupo de usuários criado",
"user-group-creation-failed": "Falha ao criar grupo de usuários"
},
"meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan",
"dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today",
"create-a-new-meal-plan": "Criar um novo plano de refeições",
"dinner-this-week": "Jantar desta semana",
"dinner-today": "Jantar de hoje",
"dinner-tonight": "DINNER TONIGHT",
"edit-meal-plan": "Edit Meal Plan",
"end-date": "End Date",
"group": "Group (Beta)",
"main": "Main",
"edit-meal-plan": "Editar cardápio",
"end-date": "Data Final",
"group": "Grupo (Beta)",
"main": "Prato Principal",
"meal-planner": "Meal Planner",
"meal-plans": "Meal Plans",
"mealplan-categories": "MEALPLAN CATEGORIES",
@@ -175,135 +175,135 @@
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planner",
"quick-week": "Quick Week",
"side": "Side",
"sides": "Sides",
"start-date": "Start Date"
"side": "Acompanhamento",
"sides": "Acompanhamentos",
"start-date": "Data Inicial"
},
"migration": {
"chowdown": {
"description": "Migrate data from Chowdown",
"description": "Migrar dados do Chowdown",
"title": "Chowdown"
},
"migration-data-removed": "Migration data removed",
"nextcloud": {
"description": "Migrate data from a Nextcloud Cookbook instance",
"description": "Migrar dados de uma instância de Nextcloud Cookbook",
"title": "Nextcloud Cookbook"
},
"no-migration-data-available": "No Migration Data Available",
"recipe-migration": "Recipe Migration"
},
"new-recipe": {
"bulk-add": "Bulk Add",
"bulk-add": "Adicionar em Massa",
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.",
"error-title": "Looks Like We Couldn't Find Anything",
"from-url": "Import a Recipe",
"from-url": "Importar uma Receita",
"github-issues": "GitHub Issues",
"google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Must be a Valid URL",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Paste in your recipe data. Each line will be treated as an item in a list",
"must-be-a-valid-url": "Precisa ser uma URL válida",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Cole os dados da sua receita. Cada linha será tratado como um item em uma lista",
"recipe-markup-specification": "Recipe Markup Specification",
"recipe-url": "Recipe URL",
"upload-a-recipe": "Upload a Recipe",
"upload-individual-zip-file": "Upload an individual .zip file exported from another Mealie instance.",
"url-form-hint": "Copy and paste a link from your favorite recipe website",
"recipe-url": "URL da Receita",
"upload-a-recipe": "Enviar uma Receita",
"upload-individual-zip-file": "Enviar um arquivo .zip individual exportado a partir de outra instância do Mealie.",
"url-form-hint": "Copie e cole um link do seu site de receita favorito",
"view-scraped-data": "View Scraped Data"
},
"page": {
"404-page-not-found": "404 Page not found",
"all-recipes": "All Recipes",
"new-page-created": "New page created",
"page": "Page",
"page-creation-failed": "Page creation failed",
"page-deleted": "Page deleted",
"page-deletion-failed": "Page deletion failed",
"page-update-failed": "Page update failed",
"page-updated": "Page updated",
"pages-update-failed": "Pages update failed",
"pages-updated": "Pages updated"
"404-page-not-found": "404 Página não encontrada",
"all-recipes": "Todas as Receitas",
"new-page-created": "Nova página criada",
"page": "Página",
"page-creation-failed": "Falha ao criar página",
"page-deleted": "Página excluída",
"page-deletion-failed": "Falha ao excluir página",
"page-update-failed": "Falha ao atualizar página",
"page-updated": "Página atualizada",
"pages-update-failed": "Falha ao atualizar página",
"pages-updated": "Páginas atualizadas"
},
"recipe": {
"add-key": "Add Key",
"add-to-favorites": "Add to Favorites",
"add-key": "Adicionar Chave",
"add-to-favorites": "Adicionar aos favoritos",
"api-extras": "API Extras",
"calories": "Calories",
"calories-suffix": "calories",
"carbohydrate-content": "Carbohydrate",
"categories": "Categories",
"comment-action": "Comment",
"comments": "Comments",
"delete-confirmation": "Are you sure you want to delete this recipe?",
"delete-recipe": "Delete Recipe",
"description": "Description",
"calories": "Calorias",
"calories-suffix": "calorias",
"carbohydrate-content": "Carboidrato",
"categories": "Categorias",
"comment-action": "Comentário",
"comments": "Comentários",
"delete-confirmation": "Você tem certeza que deseja apagar esta receita?",
"delete-recipe": "Excluir Receita",
"description": "Descrição",
"disable-amount": "Disable Ingredient Amounts",
"disable-comments": "Disable Comments",
"fat-content": "Fat",
"fiber-content": "Fiber",
"grams": "grams",
"ingredient": "Ingredient",
"ingredients": "Ingredients",
"insert-section": "Insert Section",
"instructions": "Instructions",
"key-name-required": "Key Name Required",
"landscape-view-coming-soon": "Landscape View (Coming Soon)",
"milligrams": "milligrams",
"new-key-name": "New Key Name",
"no-white-space-allowed": "No White Space Allowed",
"note": "Note",
"nutrition": "Nutrition",
"object-key": "Object Key",
"object-value": "Object Value",
"original-url": "Original URL",
"perform-time": "Cook Time",
"prep-time": "Prep Time",
"protein-content": "Protein",
"public-recipe": "Public Recipe",
"recipe-created": "Recipe created",
"recipe-creation-failed": "Recipe creation failed",
"recipe-deleted": "Recipe deleted",
"recipe-image": "Recipe Image",
"recipe-image-updated": "Recipe image updated",
"recipe-name": "Recipe Name",
"recipe-settings": "Recipe Settings",
"recipe-update-failed": "Recipe update failed",
"recipe-updated": "Recipe updated",
"remove-from-favorites": "Remove from Favorites",
"remove-section": "Remove Section",
"save-recipe-before-use": "Save recipe before use",
"section-title": "Section Title",
"servings": "Servings",
"share-recipe-message": "I wanted to share my {0} recipe with you.",
"show-nutrition-values": "Show Nutrition Values",
"sodium-content": "Sodium",
"step-index": "Step: {step}",
"sugar-content": "Sugar",
"title": "Title",
"total-time": "Total Time",
"disable-comments": "Desativar Comentários",
"fat-content": "Gordura",
"fiber-content": "Fibras",
"grams": "gramas",
"ingredient": "Ingrediente",
"ingredients": "Ingredientes",
"insert-section": "Inserir Seção",
"instructions": "Modo de Preparo",
"key-name-required": "Nome da chave obrigatório",
"landscape-view-coming-soon": "Visualização em modo paisagem (Em breve)",
"milligrams": "miligramas",
"new-key-name": "Novo Nome da Chave",
"no-white-space-allowed": "Nenhum Espaço em Branco Permitido",
"note": "Nota",
"nutrition": "Nutrição",
"object-key": "Chave do Objeto",
"object-value": "Valor do objeto",
"original-url": "URL Original",
"perform-time": "Tempo de cozimento",
"prep-time": "Tempo de preparo",
"protein-content": "Proteína",
"public-recipe": "Receita Pública",
"recipe-created": "Receita criada",
"recipe-creation-failed": "Falha ao criar receita",
"recipe-deleted": "Receita excluída",
"recipe-image": "Imagem da Receita",
"recipe-image-updated": "Imagem da receita atualizada",
"recipe-name": "Nome da Receita",
"recipe-settings": "Configurações da Receita",
"recipe-update-failed": "Falha ao atualizar a receita",
"recipe-updated": "Receita atualizada",
"remove-from-favorites": "Remover dos Favoritos",
"remove-section": "Remover Seção",
"save-recipe-before-use": "Salve a receita antes de utilizar",
"section-title": "Título da Seção",
"servings": "Porções",
"share-recipe-message": "Eu quero compartilhar minha receita de {0} com você.",
"show-nutrition-values": "Mostrar informações nutricionais",
"sodium-content": "Sódio",
"step-index": "Passo: {step}",
"sugar-content": "Açúcares",
"title": "Título",
"total-time": "Tempo Total",
"unable-to-delete-recipe": "Unable to Delete Recipe"
},
"reicpe": {
"no-recipe": "No Recipe"
"no-recipe": "Nenhuma Receita"
},
"search": {
"advanced-search": "Advanced Search",
"and": "and",
"exclude": "Exclude",
"include": "Include",
"max-results": "Max Results",
"or": "Or",
"results": "Results",
"search": "Search",
"search-mealie": "Search Mealie (press /)",
"search-placeholder": "Search...",
"advanced-search": "Pesquisa avançada",
"and": "e",
"exclude": "Excluir",
"include": "Incluir",
"max-results": "Número máx. de resultados",
"or": "Ou",
"results": "Resultados",
"search": "Pesquisar",
"search-mealie": "Pesquisar no Mealie (pressione /)",
"search-placeholder": "Pesquisar...",
"tag-filter": "Tag Filter"
},
"settings": {
"add-a-new-theme": "Add a New Theme",
"add-a-new-theme": "Adicionar um novo tema",
"admin-settings": "Admin Settings",
"backup": {
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-created-at-response-export_path": "Backup criado em {path}",
"backup-deleted": "Backup deleted",
"backup-tag": "Backup Tag",
"create-heading": "Create a Backup",
"create-heading": "Criar um Backup",
"delete-backup": "Delete Backup",
"error-creating-backup-see-log-file": "Error Creating Backup. See Log File",
"full-backup": "Full Backup",
@@ -312,106 +312,106 @@
"unable-to-delete-backup": "Unable to Delete Backup."
},
"backup-and-exports": "Backups",
"change-password": "Change Password",
"current": "Version:",
"custom-pages": "Custom Pages",
"edit-page": "Edit Page",
"events": "Events",
"first-day-of-week": "First day of the week",
"group-settings-updated": "Group Settings Updated",
"change-password": "Alterar senha",
"current": "Versão:",
"custom-pages": "Páginas personalizadas",
"edit-page": "Editar Página",
"events": "Eventos",
"first-day-of-week": "Primeiro dia da semana",
"group-settings-updated": "Configurações de Grupo Atualizadas",
"homepage": {
"all-categories": "All Categories",
"card-per-section": "Card Per Section",
"home-page": "Home Page",
"home-page-sections": "Home Page Sections",
"show-recent": "Show Recent"
"all-categories": "Todas as Categorias",
"card-per-section": "Cartão por Seção",
"home-page": "Página Inicial",
"home-page-sections": "Seções da Página Inicial",
"show-recent": "Mostrar Recentes"
},
"language": "Language",
"latest": "Latest",
"local-api": "Local API",
"language": "Idioma",
"latest": "Mais recentes",
"local-api": "API Local",
"locale-settings": "Locale settings",
"migrations": "Migrations",
"new-page": "New Page",
"notify": "Notify",
"organize": "Organize",
"page-name": "Page Name",
"pages": "Pages",
"profile": "Profile",
"migrations": "Migrações",
"new-page": "Nova Página",
"notify": "Notificações",
"organize": "Organizar",
"page-name": "Nome da Página",
"pages": "Páginas",
"profile": "Perfil",
"remove-existing-entries-matching-imported-entries": "Remove existing entries matching imported entries",
"set-new-time": "Set New Time",
"settings-update-failed": "Settings update failed",
"settings-updated": "Settings updated",
"site-settings": "Site Settings",
"set-new-time": "Definir novo horário",
"settings-update-failed": "Falha ao atualizar configurações",
"settings-updated": "Configurações atualizadas",
"site-settings": "Configurações do site",
"theme": {
"accent": "Accent",
"dark": "Dark",
"default-to-system": "Default to system",
"error": "Error",
"error-creating-theme-see-log-file": "Error creating theme. See log file.",
"error-deleting-theme": "Error deleting theme",
"error-updating-theme": "Error updating theme",
"info": "Info",
"light": "Light",
"primary": "Primary",
"secondary": "Secondary",
"success": "Success",
"switch-to-dark-mode": "Switch to dark mode",
"switch-to-light-mode": "Switch to light mode",
"theme-deleted": "Theme deleted",
"theme-name": "Theme Name",
"theme-name-is-required": "Theme Name is required.",
"theme-saved": "Theme Saved",
"theme-updated": "Theme updated",
"warning": "Warning"
"accent": "Cor em destaque",
"dark": "Escuro",
"default-to-system": "Padrão para o sistema",
"error": "Erro",
"error-creating-theme-see-log-file": "Erro ao criar tema. Consulte o arquivo de log.",
"error-deleting-theme": "Erro ao excluir tema",
"error-updating-theme": "Erro ao atualizar tema",
"info": "Informação",
"light": "Claro",
"primary": "Primária",
"secondary": "Secundária",
"success": "Sucesso",
"switch-to-dark-mode": "Mudar para modo escuro",
"switch-to-light-mode": "Alternar para modo claro",
"theme-deleted": "Tema excluído",
"theme-name": "Nome do Tema",
"theme-name-is-required": "O nome do tema é obrigatório.",
"theme-saved": "Tema Salvo",
"theme-updated": "Tema atualizado",
"warning": "Atenção"
},
"token": {
"active-tokens": "ACTIVE TOKENS",
"api-token": "API Token",
"api-tokens": "API Tokens",
"active-tokens": "TOKENS ATIVOS",
"api-token": "Token de API",
"api-tokens": "Tokens de API",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Copy this token for use with an external application. This token will not be viewable again.",
"create-an-api-token": "Create an API Token",
"token-name": "Token Name"
"create-an-api-token": "Criar um token de API",
"token-name": "Nome do Token"
},
"toolbox": {
"assign-all": "Assign All",
"bulk-assign": "Bulk Assign",
"new-name": "New Name",
"no-unused-items": "No Unused Items",
"recipes-affected": "No Recipes Affected|One Recipe Affected|{count} Recipes Affected",
"remove-unused": "Remove Unused",
"assign-all": "Atribuir a todos",
"bulk-assign": "Atribuir em massa",
"new-name": "Novo Nome",
"no-unused-items": "Nenhum item não utilizado",
"recipes-affected": "Nenhuma Receita Afetada|Uma Receita Afetada|{count} Receitas Afetadas",
"remove-unused": "Remover não utilizadas",
"title-case-all": "Title Case All",
"toolbox": "Toolbox",
"toolbox": "Ferramentas",
"unorganized": "Unorganized"
},
"webhooks": {
"test-webhooks": "Test Webhooks",
"test-webhooks": "Testar webhooks",
"the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "The URLs listed below will receive webhooks containing the recipe data for the meal plan on it's scheduled day. Currently Webhooks will execute at",
"webhook-url": "Webhook URL",
"webhooks-caps": "WEBHOOKS"
}
},
"shopping-list": {
"all-lists": "All Lists",
"create-shopping-list": "Create Shopping List",
"from-recipe": "From Recipe",
"list-name": "List Name",
"new-list": "New List",
"quantity": "Quantity: {0}",
"all-lists": "Todas as Listas",
"create-shopping-list": "Criar Lista de Compras",
"from-recipe": "Da Receita",
"list-name": "Nome da Lista",
"new-list": "Nova lista",
"quantity": "Quantidade: {0}",
"shopping-list": "Shopping List",
"shopping-lists": "Shopping Lists"
},
"sidebar": {
"all-recipes": "All Recipes",
"categories": "Categories",
"categories": "Categorias",
"dashboard": "Dashboard",
"home-page": "Home Page",
"manage-users": "Manage Users",
"migrations": "Migrations",
"profile": "Profile",
"search": "Search",
"migrations": "Migrações",
"profile": "Perfil",
"search": "Pesquisar",
"site-settings": "Site Settings",
"tags": "Tags",
"toolbox": "Toolbox"
"toolbox": "Ferramentas"
},
"signup": {
"error-signing-up": "Error Signing Up",
@@ -434,50 +434,50 @@
"untagged-count": "Untagged {count}"
},
"user": {
"admin": "Admin",
"admin": "Administrador",
"are-you-sure-you-want-to-delete-the-link": "Are you sure you want to delete the link <b>{link}<b/>?",
"are-you-sure-you-want-to-delete-the-user": "Are you sure you want to delete the user <b>{activeName} ID: {activeId}<b/>?",
"confirm-link-deletion": "Confirm Link Deletion",
"confirm-password": "Confirm Password",
"confirm-password": "Confirmar senha",
"confirm-user-deletion": "Confirm User Deletion",
"could-not-validate-credentials": "Could Not Validate Credentials",
"create-link": "Create Link",
"create-user": "Create User",
"current-password": "Current Password",
"e-mail-must-be-valid": "E-mail must be valid",
"edit-user": "Edit User",
"email": "Email",
"error-cannot-delete-super-user": "Error! Cannot Delete Super User",
"create-user": "Criar usuário",
"current-password": "Senha atual",
"e-mail-must-be-valid": "O e-mail deve ser válido",
"edit-user": "Editar Usuário",
"email": "E-mail",
"error-cannot-delete-super-user": "Erro! Não é possível excluir Super Usuário",
"existing-password-does-not-match": "Existing password does not match",
"full-name": "Full Name",
"full-name": "Nome Completo",
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"logout": "Logout",
"manage-users": "Manage Users",
"new-password": "New Password",
"new-user": "New User",
"password": "Password",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
"manage-users": "Gerenciar Usuários",
"new-password": "Nova senha",
"new-user": "Novo Usuário",
"password": "Senha",
"password-has-been-reset-to-the-default-password": "A senha foi redefinida para a senha padrão",
"password-must-match": "Password must match",
"password-reset-failed": "Password reset failed",
"password-updated": "Password updated",
"reset-password": "Reset Password",
"password-reset-failed": "Falha na redefinição da senha",
"password-updated": "Senha modificada",
"reset-password": "Alterar senha",
"sign-in": "Sign in",
"total-mealplans": "Total MealPlans",
"total-users": "Total Users",
"upload-photo": "Upload Photo",
"use-8-characters-or-more-for-your-password": "Use 8 characters or more for your password",
"user": "User",
"user-created": "User created",
"user-creation-failed": "User creation failed",
"total-users": "Total de usuários",
"upload-photo": "Enviar Foto",
"use-8-characters-or-more-for-your-password": "Use 8 caracteres ou mais para sua senha",
"user": "Usuário",
"user-created": "Usuário criado",
"user-creation-failed": "Falha ao criar usuário",
"user-deleted": "User deleted",
"user-id": "User ID",
"user-id-with-value": "User ID: {id}",
"user-password": "User Password",
"user-id": "ID do Usuário",
"user-id-with-value": "ID do Usuário: {id}",
"user-password": "Senha do Usuário",
"user-successfully-logged-in": "User Successfully Logged In",
"user-update-failed": "User update failed",
"user-updated": "User updated",
"user-update-failed": "Falha ao atualizar o usuário",
"user-updated": "Usuário atualizado",
"username": "Username",
"users": "Users",
"users-header": "USERS",

View File

@@ -8,7 +8,7 @@
"database-type": "Database Type",
"database-url": "Database URL",
"default-group": "Default Group",
"demo": "Demo",
"demo": "Demonstração",
"demo-status": "Demo Status",
"development": "Development",
"docs": "Docs",
@@ -128,8 +128,8 @@
"upload": "Enviar",
"url": "URL",
"view": "View",
"wednesday": "Wednesday",
"yes": "Yes"
"wednesday": "Quarta-feira",
"yes": "Sim"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",

View File

@@ -1,489 +1,489 @@
{
"about": {
"about": "About",
"about-mealie": "About Mealie",
"api-docs": "API Docs",
"api-port": "API Port",
"application-mode": "Application Mode",
"database-type": "Database Type",
"database-url": "Database URL",
"default-group": "Default Group",
"demo": "Demo",
"demo-status": "Demo Status",
"development": "Development",
"docs": "Docs",
"download-log": "Download Log",
"download-recipe-json": "Last Scraped JSON",
"github": "Github",
"log-lines": "Log Lines",
"not-demo": "Not Demo",
"portfolio": "Portfolio",
"production": "Production",
"support": "Support",
"version": "Version"
"about": "О проекте",
"about-mealie": "О Mealie",
"api-docs": "Документация API",
"api-port": "Порт API",
"application-mode": "Статус приложения",
"database-type": "Тип БД",
"database-url": "URL базы данных",
"default-group": "Группа по умолчанию",
"demo": "Демо",
"demo-status": "Демо-статус",
"development": "В разработке",
"docs": "Справка",
"download-log": "Скачать лог",
"download-recipe-json": "Последний скрап JSON",
"github": "GitHub",
"log-lines": "Строки журнала",
"not-demo": "Не демо",
"portfolio": "Портфолио",
"production": "Создание",
"support": "Поддержка",
"version": "Версия"
},
"asset": {
"assets": "Assets",
"code": "Code",
"file": "File",
"image": "Image",
"new-asset": "New Asset",
"assets": "Ресурсы",
"code": "Код",
"file": "Файл",
"image": "Изображение",
"new-asset": "Новый ресурс",
"pdf": "PDF",
"recipe": "Recipe",
"show-assets": "Show Assets"
"recipe": "Рецепт",
"show-assets": "Показать ресурсы"
},
"category": {
"category-created": "Category created",
"category-creation-failed": "Category creation failed",
"category-deleted": "Category Deleted",
"category-deletion-failed": "Category deletion failed",
"category-filter": "Category Filter",
"category-update-failed": "Category update failed",
"category-updated": "Category updated",
"uncategorized-count": "Uncategorized {count}"
"category-created": "Категория создана",
"category-creation-failed": "Не удалось создать категорию",
"category-deleted": "Категория удалена",
"category-deletion-failed": "Ошибка удаления категории",
"category-filter": "Фильтр по категориям",
"category-update-failed": "Не удалось обновить категорию",
"category-updated": "Категория обновлена",
"uncategorized-count": "Без категории {count}"
},
"events": {
"apprise-url": "Apprise URL",
"database": "Database",
"delete-event": "Delete Event",
"new-notification-form-description": "Mealie uses the Apprise library to generate notifications. They offer many options for services to use for notifications. Refer to their wiki for a comprehensive guide on how to create the URL for your service. If available, selecting the type of your notification may include extra features.",
"new-version": "New version available!",
"notification": "Notification",
"refresh": "Refresh",
"scheduled": "Scheduled",
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent"
"database": "База данных",
"delete-event": "Удалить событие",
"new-notification-form-description": "Mealie использует библиотеку Apprise для генерирования уведомлений. Apprise предлагают сервисам многочисленные возможности для использования при создании уведомлений. Обратитесь к их гиду в wiki за подробным руководством по созданию URL для Вашего сервиса. Также при выборе типа уведомления могут стать доступными дополнительные функции.",
"new-version": "Доступна новая версия!",
"notification": "Оповещение",
"refresh": "Обновить",
"scheduled": "Запланировано",
"something-went-wrong": "Что-то пошло не так!",
"subscribed-events": "Уведомлять о событиях",
"test-message-sent": "Тестовое сообщение отправлено"
},
"general": {
"cancel": "Cancel",
"clear": "Clear",
"close": "Close",
"confirm": "Confirm",
"confirm-delete-generic": "Are you sure you want to delete this?",
"copied": "Copied",
"create": "Create",
"created": "Created",
"custom": "Custom",
"dashboard": "Dashboard",
"delete": "Delete",
"disabled": "Disabled",
"download": "Download",
"edit": "Edit",
"enabled": "Enabled",
"exception": "Exception",
"failed-count": "Failed: {count}",
"failure-uploading-file": "Failure uploading file",
"favorites": "Favorites",
"field-required": "Field Required",
"file-folder-not-found": "File/folder not found",
"file-uploaded": "File uploaded",
"filter": "Filter",
"friday": "Friday",
"general": "General",
"get": "Get",
"home": "Home",
"image": "Image",
"image-upload-failed": "Image upload failed",
"import": "Import",
"cancel": "Отмена",
"clear": "Очистить",
"close": "Закрыть",
"confirm": "Подтвердить",
"confirm-delete-generic": "Вы уверены, что хотите это удалить?",
"copied": "Скопировано",
"create": "Создать",
"created": "По дате создания",
"custom": "Свой",
"dashboard": "Панель инструментов",
"delete": "Удалить",
"disabled": "Отключено",
"download": "Загрузить",
"edit": "Изменить",
"enabled": "Вкл.",
"exception": "Исключение",
"failed-count": "Ошибка: {count}",
"failure-uploading-file": "Ошибка загрузки файла",
"favorites": "Избранное",
"field-required": "Обязательное поле",
"file-folder-not-found": "Файл/папка не найдена",
"file-uploaded": "Файл загружен",
"filter": "Фильтр",
"friday": "Пятница",
"general": "Общие",
"get": "Получить",
"home": "Домашняя",
"image": "Изображение",
"image-upload-failed": "Ошибка при загрузке изображения",
"import": "Импортировать",
"json": "JSON",
"keyword": "Keyword",
"link-copied": "Link Copied",
"loading-recipes": "Loading Recipes",
"monday": "Monday",
"name": "Name",
"new": "New",
"no": "No",
"no-recipe-found": "No Recipe Found",
"ok": "OK",
"options": "Options:",
"print": "Print",
"random": "Random",
"rating": "Rating",
"recent": "Recent",
"recipe": "Recipe",
"recipes": "Recipes",
"rename-object": "Rename {0}",
"reset": "Reset",
"saturday": "Saturday",
"save": "Save",
"settings": "Settings",
"share": "Share",
"shuffle": "Shuffle",
"sort": "Sort",
"sort-alphabetically": "Alphabetical",
"status": "Status",
"submit": "Submit",
"success-count": "Success: {count}",
"sunday": "Sunday",
"templates": "Templates:",
"test": "Test",
"themes": "Themes",
"thursday": "Thursday",
"token": "Token",
"tuesday": "Tuesday",
"type": "Type",
"update": "Update",
"updated": "Updated",
"upload": "Upload",
"url": "URL",
"view": "View",
"wednesday": "Wednesday",
"yes": "Yes"
"keyword": "Ключевое слово",
"link-copied": "Ссылка скопирована",
"loading-recipes": "Загрузка рецептов",
"monday": "Понедельник",
"name": "Имя",
"new": "Новый",
"no": "Нет",
"no-recipe-found": "Рецепт не найден",
"ok": "Ок",
"options": "Параметры:",
"print": "Печать",
"random": "Случайный",
"rating": "По оценке",
"recent": "Недавние",
"recipe": "Рецепт",
"recipes": "Рецепты",
"rename-object": "Переименовать {0}",
"reset": "Сбросить",
"saturday": "Суббота",
"save": "Сохранить",
"settings": "Настройки",
"share": "Поделиться",
"shuffle": "Перемешать",
"sort": "Сортировать",
"sort-alphabetically": "По алфавиту",
"status": "По статусу",
"submit": "Добавить",
"success-count": "Успешно: {count}",
"sunday": "Воскресенье",
"templates": "Шаблоны:",
"test": "Тест",
"themes": "Темы",
"thursday": "Четверг",
"token": "Токен",
"tuesday": "Вторник",
"type": "Тип",
"update": "Обновить",
"updated": "Обновлено",
"upload": "Загрузить",
"url": "URL-адрес",
"view": "Просмотр",
"wednesday": "Среда",
"yes": "Да"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
"cannot-delete-default-group": "Cannot delete default group",
"cannot-delete-group-with-users": "Cannot delete group with users",
"confirm-group-deletion": "Confirm Group Deletion",
"create-group": "Create Group",
"error-updating-group": "Error updating group",
"group": "Group",
"group-deleted": "Group deleted",
"group-deletion-failed": "Group deletion failed",
"group-id-with-value": "Group ID: {groupID}",
"group-name": "Group Name",
"group-not-found": "Group not found",
"group-with-value": "Group: {groupID}",
"groups": "Groups",
"manage-groups": "Manage Groups",
"user-group": "User Group",
"user-group-created": "User Group Created",
"user-group-creation-failed": "User Group Creation Failed"
"are-you-sure-you-want-to-delete-the-group": "Вы действительно хотите удалить <b>{groupName}<b/>?",
"cannot-delete-default-group": "Невозможно удалить группу по умолчанию",
"cannot-delete-group-with-users": "Невозможно удалить группу с пользователями",
"confirm-group-deletion": "Подтвердить удаление группы",
"create-group": "Создать группу",
"error-updating-group": "Ошибка при обновлении группы",
"group": "Группа",
"group-deleted": "Группа удалена",
"group-deletion-failed": "Не удалось удалить группу",
"group-id-with-value": "ID группы: {groupID}",
"group-name": "Наименование группы",
"group-not-found": "Группа не найдена",
"group-with-value": "Группа: {groupID}",
"groups": "Группы",
"manage-groups": "Управление группами",
"user-group": "Пользовательская группа",
"user-group-created": "Пользовательская группа создана",
"user-group-creation-failed": "Не удалось создать пользовательскую группу"
},
"meal-plan": {
"create-a-new-meal-plan": "Create a New Meal Plan",
"dinner-this-week": "Dinner This Week",
"dinner-today": "Dinner Today",
"dinner-tonight": "DINNER TONIGHT",
"edit-meal-plan": "Edit Meal Plan",
"end-date": "End Date",
"group": "Group (Beta)",
"main": "Main",
"meal-planner": "Meal Planner",
"meal-plans": "Meal Plans",
"mealplan-categories": "MEALPLAN CATEGORIES",
"mealplan-created": "Mealplan created",
"mealplan-creation-failed": "Mealplan creation failed",
"mealplan-deleted": "Mealplan Deleted",
"mealplan-deletion-failed": "Mealplan deletion failed",
"mealplan-settings": "Mealplan Settings",
"mealplan-update-failed": "Mealplan update failed",
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "Planner",
"quick-week": "Quick Week",
"side": "Side",
"sides": "Sides",
"start-date": "Start Date"
"create-a-new-meal-plan": "Создать новый план питания",
"dinner-this-week": "Ужин на этой неделе",
"dinner-today": "Ужин сегодня",
"dinner-tonight": "Ужин сегодня",
"edit-meal-plan": "Редактировать план питания",
"end-date": "Конечная дата",
"group": "Группировать (Beta)",
"main": "Основное блюдо",
"meal-planner": "Планировщик питания",
"meal-plans": "Планы питания",
"mealplan-categories": "КАТЕГОРИИ MEALPLAN",
"mealplan-created": "Mealplan создан",
"mealplan-creation-failed": "Не удалось создать Mealplan",
"mealplan-deleted": "Mealplan удален",
"mealplan-deletion-failed": "Ошибка удаления Mealplan",
"mealplan-settings": "Настройки Mealplan",
"mealplan-update-failed": "Не удалось обновить Mealplan",
"mealplan-updated": "Mealplan обновлен",
"no-meal-plan-defined-yet": "План питания еще не определен",
"no-meal-planned-for-today": "На сегодня нет запланированых блюд",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Только рецепты с этими категориями будут использоваться в планах питания",
"planner": "Планировщик",
"quick-week": "Быстрый план",
"side": "Гарнир",
"sides": "Гарниры",
"start-date": "Начальная дата"
},
"migration": {
"chowdown": {
"description": "Migrate data from Chowdown",
"description": "Миграция данных из Chowdown",
"title": "Chowdown"
},
"migration-data-removed": "Migration data removed",
"migration-data-removed": "Данные миграции удалены",
"nextcloud": {
"description": "Migrate data from a Nextcloud Cookbook instance",
"description": "Миграция данных из Nextcloud Cookbook",
"title": "Nextcloud Cookbook"
},
"no-migration-data-available": "No Migration Data Available",
"recipe-migration": "Recipe Migration"
"no-migration-data-available": "Данные о миграции отсутствуют",
"recipe-migration": "Миграция рецепта"
},
"new-recipe": {
"bulk-add": "Bulk Add",
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.",
"error-title": "Looks Like We Couldn't Find Anything",
"from-url": "Import a Recipe",
"github-issues": "GitHub Issues",
"google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Must be a Valid URL",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Paste in your recipe data. Each line will be treated as an item in a list",
"recipe-markup-specification": "Recipe Markup Specification",
"recipe-url": "Recipe URL",
"upload-a-recipe": "Upload a Recipe",
"upload-individual-zip-file": "Upload an individual .zip file exported from another Mealie instance.",
"url-form-hint": "Copy and paste a link from your favorite recipe website",
"view-scraped-data": "View Scraped Data"
"bulk-add": "Массовое добавление",
"error-details": "Mealie может импортировать только веб-сайты, содержащие ld+json или микроданные. Большинство веб-сайтов с рецептами поддерживают эту структуру данных. Если Ваш сайт не может быть импортирован, но в логе есть данные json, то пожалуйста уведомите о проблеме на GitHub с URL и данными.",
"error-title": "Похоже, нам не удалось ничего найти",
"from-url": "Импортировать рецепт",
"github-issues": "Список проблем (GitHub)",
"google-ld-json-info": "Справка по ld+json (Google)",
"must-be-a-valid-url": "Должен быть действительным URL",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Вставьте в данные рецепта. Каждая строка будет рассматриваться как отдельный предмет в списке",
"recipe-markup-specification": "Спецификация разметки рецепта",
"recipe-url": "URL-адрес рецепта",
"upload-a-recipe": "Загрузить рецепт",
"upload-individual-zip-file": "Загрузить отдельный .zip файл, экспортированный из другой инстанции Mealie.",
"url-form-hint": "Скопируйте и вставьте ссылку из вашего любимого сайта рецептов",
"view-scraped-data": "Просмотр собранных данных"
},
"page": {
"404-page-not-found": "404 Page not found",
"all-recipes": "All Recipes",
"new-page-created": "New page created",
"page": "Page",
"page-creation-failed": "Page creation failed",
"page-deleted": "Page deleted",
"page-deletion-failed": "Page deletion failed",
"page-update-failed": "Page update failed",
"page-updated": "Page updated",
"pages-update-failed": "Pages update failed",
"pages-updated": "Pages updated"
"404-page-not-found": "404 - страница не найдена",
"all-recipes": "Все рецепты",
"new-page-created": "Создана новая страница",
"page": "Страница",
"page-creation-failed": "Не удалось создать страницу",
"page-deleted": "Страница удалена",
"page-deletion-failed": "Ошибка удаления страницы",
"page-update-failed": "Ошибка обновления страницы",
"page-updated": "Страница обновлена",
"pages-update-failed": "Ошибка обновления страниц",
"pages-updated": "Страницы обновлены"
},
"recipe": {
"add-key": "Add Key",
"add-to-favorites": "Add to Favorites",
"api-extras": "API Extras",
"calories": "Calories",
"calories-suffix": "calories",
"carbohydrate-content": "Carbohydrate",
"categories": "Categories",
"comment-action": "Comment",
"comments": "Comments",
"delete-confirmation": "Are you sure you want to delete this recipe?",
"delete-recipe": "Delete Recipe",
"description": "Description",
"disable-amount": "Disable Ingredient Amounts",
"disable-comments": "Disable Comments",
"fat-content": "Fat",
"fiber-content": "Fiber",
"grams": "grams",
"ingredient": "Ingredient",
"ingredients": "Ingredients",
"insert-section": "Insert Section",
"instructions": "Instructions",
"key-name-required": "Key Name Required",
"landscape-view-coming-soon": "Landscape View (Coming Soon)",
"milligrams": "milligrams",
"new-key-name": "New Key Name",
"no-white-space-allowed": "No White Space Allowed",
"note": "Note",
"nutrition": "Nutrition",
"object-key": "Object Key",
"object-value": "Object Value",
"original-url": "Original URL",
"perform-time": "Cook Time",
"prep-time": "Prep Time",
"protein-content": "Protein",
"public-recipe": "Public Recipe",
"recipe-created": "Recipe created",
"recipe-creation-failed": "Recipe creation failed",
"recipe-deleted": "Recipe deleted",
"recipe-image": "Recipe Image",
"recipe-image-updated": "Recipe image updated",
"recipe-name": "Recipe Name",
"recipe-settings": "Recipe Settings",
"recipe-update-failed": "Recipe update failed",
"recipe-updated": "Recipe updated",
"remove-from-favorites": "Remove from Favorites",
"remove-section": "Remove Section",
"save-recipe-before-use": "Save recipe before use",
"section-title": "Section Title",
"servings": "Servings",
"share-recipe-message": "I wanted to share my {0} recipe with you.",
"show-nutrition-values": "Show Nutrition Values",
"sodium-content": "Sodium",
"step-index": "Step: {step}",
"sugar-content": "Sugar",
"title": "Title",
"total-time": "Total Time",
"unable-to-delete-recipe": "Unable to Delete Recipe"
"add-key": "Добавить ключ",
"add-to-favorites": "В избранное",
"api-extras": "Дополнительные API",
"calories": "Энергетическая ценность",
"calories-suffix": "ккал",
"carbohydrate-content": "Углеводы",
"categories": "Категории",
"comment-action": "Оставить комментарий",
"comments": "Комментарии",
"delete-confirmation": "Вы уверены, что хотите удалить этот рецепт?",
"delete-recipe": "Удалить рецепт",
"description": "Описание",
"disable-amount": "Не показывать кол-во ингредиентов",
"disable-comments": "Отключить комментарии",
"fat-content": "Жиры",
"fiber-content": "Клетчатка",
"grams": "гр.",
"ingredient": "Ингредиент",
"ingredients": "Ингредиенты",
"insert-section": "Вставить раздел",
"instructions": "Инструкции",
"key-name-required": "Требуется имя ключа",
"landscape-view-coming-soon": "В ландшафтном режиме (скоро)",
"milligrams": "мг.",
"new-key-name": "Имя нового ключа",
"no-white-space-allowed": "Пробелы не допускаются",
"note": "Заметка",
"nutrition": "Пищевая ценность",
"object-key": "Ключ объекта",
"object-value": "Значение объекта",
"original-url": "Исходный URL",
"perform-time": "Время приготовления",
"prep-time": "Время подготовки",
"protein-content": "Белки",
"public-recipe": "Открытый рецепт",
"recipe-created": "Рецепт создан",
"recipe-creation-failed": "Ошибка создания рецепта",
"recipe-deleted": "Рецепт удален",
"recipe-image": "Изображение рецепта",
"recipe-image-updated": "Изображение рецепта обновлено",
"recipe-name": "Название рецепта",
"recipe-settings": "Настройки рецепта",
"recipe-update-failed": "Ошибка обновления рецепта",
"recipe-updated": "Рецепт обновлен",
"remove-from-favorites": "Убрать из избранного",
"remove-section": "Удалить раздел",
"save-recipe-before-use": "Сохранить рецепт перед использованием",
"section-title": "Название раздела",
"servings": "Порции",
"share-recipe-message": "Я хотел(а) поделиться с тобой моим рецептом {0}.",
"show-nutrition-values": "Показать пищевую ценность",
"sodium-content": "Соль",
"step-index": "Шаг: {step}",
"sugar-content": "Сахар",
"title": "Заголовок",
"total-time": "Общее время",
"unable-to-delete-recipe": "Невозможно удалить рецепт"
},
"reicpe": {
"no-recipe": "No Recipe"
"no-recipe": "Нет рецепта"
},
"search": {
"advanced-search": "Advanced Search",
"and": "and",
"exclude": "Exclude",
"include": "Include",
"max-results": "Max Results",
"or": "Or",
"results": "Results",
"search": "Search",
"search-mealie": "Search Mealie (press /)",
"search-placeholder": "Search...",
"tag-filter": "Tag Filter"
"advanced-search": "Расширенный поиск",
"and": "И",
"exclude": "Исключить",
"include": "Включить",
"max-results": "Макс. результатов",
"or": "Или",
"results": "Результаты",
"search": "Поиск",
"search-mealie": "Поиск Mealie (нажмите /)",
"search-placeholder": "Поиск...",
"tag-filter": "Фильтр тегов"
},
"settings": {
"add-a-new-theme": "Add a New Theme",
"admin-settings": "Admin Settings",
"add-a-new-theme": "Добавить новую тему",
"admin-settings": "Настройки администратора",
"backup": {
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"backup-tag": "Backup Tag",
"create-heading": "Create a Backup",
"delete-backup": "Delete Backup",
"error-creating-backup-see-log-file": "Error Creating Backup. See Log File",
"full-backup": "Full Backup",
"import-summary": "Import Summary",
"partial-backup": "Partial Backup",
"unable-to-delete-backup": "Unable to Delete Backup."
"backup-created-at-response-export_path": "Резервная копия создана в {path}",
"backup-deleted": "Резервная копия удалена",
"backup-tag": "Тег резервной копии",
"create-heading": "Резервное копирование",
"delete-backup": "Удалить резервную копию",
"error-creating-backup-see-log-file": "Ошибка создания резервной копии. Смотрите файл журнала",
"full-backup": "Полное резервное копирование",
"import-summary": "Сводка по импорту",
"partial-backup": "Частичное резервное копирование",
"unable-to-delete-backup": "Невозможно удалить резервную копию."
},
"backup-and-exports": "Backups",
"change-password": "Change Password",
"current": "Version:",
"custom-pages": "Custom Pages",
"edit-page": "Edit Page",
"events": "Events",
"first-day-of-week": "First day of the week",
"group-settings-updated": "Group Settings Updated",
"backup-and-exports": "Резервные копии",
"change-password": "Изменить пароль",
"current": "Версия:",
"custom-pages": "Пользовательские страницы",
"edit-page": "Редактировать страницу",
"events": "События",
"first-day-of-week": "Первый день недели",
"group-settings-updated": "Настройки группы обновлены",
"homepage": {
"all-categories": "All Categories",
"card-per-section": "Card Per Section",
"home-page": "Home Page",
"home-page-sections": "Home Page Sections",
"show-recent": "Show Recent"
"all-categories": "Все категории",
"card-per-section": "Карточек в разделе",
"home-page": "Домашняя страница",
"home-page-sections": "Разделы домашней страницы",
"show-recent": "Показать недавние"
},
"language": "Language",
"latest": "Latest",
"local-api": "Local API",
"locale-settings": "Locale settings",
"migrations": "Migrations",
"new-page": "New Page",
"notify": "Notify",
"organize": "Organize",
"page-name": "Page Name",
"pages": "Pages",
"profile": "Profile",
"remove-existing-entries-matching-imported-entries": "Remove existing entries matching imported entries",
"set-new-time": "Set New Time",
"settings-update-failed": "Settings update failed",
"settings-updated": "Settings updated",
"site-settings": "Site Settings",
"language": "Язык",
"latest": "Последние",
"local-api": "Локальный API",
"locale-settings": "Региональные настройки",
"migrations": "Миграции",
"new-page": "Новая страница",
"notify": "Уведомить",
"organize": "Упорядочить",
"page-name": "Название страницы",
"pages": "Страницы",
"profile": "Профиль",
"remove-existing-entries-matching-imported-entries": "Удалить существующие записи, совпадающие с импортированными",
"set-new-time": "Задать новое время",
"settings-update-failed": "Ошибка обновления настроек",
"settings-updated": "Настройки обновлены",
"site-settings": "Настройки сайта",
"theme": {
"accent": "Accent",
"dark": "Dark",
"default-to-system": "Default to system",
"error": "Error",
"error-creating-theme-see-log-file": "Error creating theme. See log file.",
"error-deleting-theme": "Error deleting theme",
"error-updating-theme": "Error updating theme",
"info": "Info",
"light": "Light",
"primary": "Primary",
"secondary": "Secondary",
"success": "Success",
"switch-to-dark-mode": "Switch to dark mode",
"switch-to-light-mode": "Switch to light mode",
"theme-deleted": "Theme deleted",
"theme-name": "Theme Name",
"theme-name-is-required": "Theme Name is required.",
"theme-saved": "Theme Saved",
"theme-updated": "Theme updated",
"warning": "Warning"
"accent": "Оттенок",
"dark": "Темная",
"default-to-system": "По умолчанию (системный)",
"error": "Ошибка",
"error-creating-theme-see-log-file": "Ошибка создания темы. См. файл журнала.",
"error-deleting-theme": "Ошибка удаления темы",
"error-updating-theme": "Ошибка обновления темы",
"info": "Информация",
"light": "Светлая",
"primary": "Основная",
"secondary": "Дополнительная",
"success": "Готово",
"switch-to-dark-mode": "Включить темный режим",
"switch-to-light-mode": "Включить светлый режим",
"theme-deleted": "Тема удалена",
"theme-name": "Название темы",
"theme-name-is-required": "Название темы обязательно.",
"theme-saved": "Тема сохранена",
"theme-updated": "Тема обновлена",
"warning": "Предупреждение"
},
"token": {
"active-tokens": "ACTIVE TOKENS",
"api-token": "API Token",
"api-tokens": "API Tokens",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Copy this token for use with an external application. This token will not be viewable again.",
"create-an-api-token": "Create an API Token",
"token-name": "Token Name"
"active-tokens": "АКТИВНЫЕ ТОКЕНЫ",
"api-token": "API токен",
"api-tokens": "Токены API",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Скопируйте этот токен для использования с внешним приложением. Этот токен не будет доступен для повторного просмотра.",
"create-an-api-token": "Создать API токен",
"token-name": "Название токена"
},
"toolbox": {
"assign-all": "Assign All",
"bulk-assign": "Bulk Assign",
"new-name": "New Name",
"no-unused-items": "No Unused Items",
"recipes-affected": "No Recipes Affected|One Recipe Affected|{count} Recipes Affected",
"remove-unused": "Remove Unused",
"title-case-all": "Title Case All",
"toolbox": "Toolbox",
"unorganized": "Unorganized"
"assign-all": "Выбрать все",
"bulk-assign": "Массово назначить",
"new-name": "Новое название",
"no-unused-items": "Нет неиспользуемых предметов",
"recipes-affected": "Нет затронутых рецептов|Один рецепт затронут|{count} рецептов затронуто",
"remove-unused": "Удалить неиспользованные",
"title-case-all": "С Заглавной Буквы",
"toolbox": "Инструменты",
"unorganized": "Неупорядоченное"
},
"webhooks": {
"test-webhooks": "Test Webhooks",
"the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "The URLs listed below will receive webhooks containing the recipe data for the meal plan on it's scheduled day. Currently Webhooks will execute at",
"test-webhooks": "Тестировать Webhook",
"the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "На перечисленные ниже URL будут отправляться вебхуки, содержащие данные рецептов для плана питания на запланированный день. Сейчас вебхуки будут отправляться в",
"webhook-url": "Webhook URL",
"webhooks-caps": "WEBHOOKS"
}
},
"shopping-list": {
"all-lists": "All Lists",
"create-shopping-list": "Create Shopping List",
"from-recipe": "From Recipe",
"list-name": "List Name",
"new-list": "New List",
"quantity": "Quantity: {0}",
"shopping-list": "Shopping List",
"shopping-lists": "Shopping Lists"
"all-lists": "Все списки",
"create-shopping-list": "Создать список покупок",
"from-recipe": "Из рецепта",
"list-name": "Название списка",
"new-list": "Новый список",
"quantity": "Количество: {0}",
"shopping-list": "Список покупок",
"shopping-lists": "Списки покупок"
},
"sidebar": {
"all-recipes": "All Recipes",
"categories": "Categories",
"dashboard": "Dashboard",
"home-page": "Home Page",
"manage-users": "Manage Users",
"migrations": "Migrations",
"profile": "Profile",
"search": "Search",
"site-settings": "Site Settings",
"tags": "Tags",
"toolbox": "Toolbox"
"all-recipes": "Все рецепты",
"categories": "Категории",
"dashboard": "Рабочая панель",
"home-page": "Главная",
"manage-users": "Пользователи",
"migrations": "Миграции",
"profile": "Профиль",
"search": "Поиск",
"site-settings": "Настройки",
"tags": "Теги",
"toolbox": "Инструменты"
},
"signup": {
"error-signing-up": "Error Signing Up",
"sign-up": "Sign Up",
"sign-up-link-created": "Sign up link created",
"sign-up-link-creation-failed": "Sign up link creation failed",
"sign-up-links": "Sign Up Links",
"sign-up-token-deleted": "Sign Up Token Deleted",
"sign-up-token-deletion-failed": "Sign up token deletion failed",
"welcome-to-mealie": "Welcome to Mealie! To become a user of this instance you are required to have a valid invitation link. If you haven't recieved an invitation you are unable to sign-up. To recieve a link, contact the sites administrator."
"error-signing-up": "Ошибка регистрации",
"sign-up": "Зарегистироваться",
"sign-up-link-created": "Ссылка для регистрации создана",
"sign-up-link-creation-failed": "Ошибка создания ссылки для регистрации",
"sign-up-links": "Ссылки для регистрации",
"sign-up-token-deleted": "Токен регистрации удален",
"sign-up-token-deletion-failed": "Ошибка удаления токена для регистрации",
"welcome-to-mealie": "Добро пожаловать в Mealie! Чтобы стать пользователем этого сервера, вы должны иметь действительную ссылку-приглашение. Вы не можете зарегистрироваться без приглашения. Для получения ссылки свяжитесь с администратором сайта."
},
"tag": {
"tag-created": "Tag created",
"tag-creation-failed": "Tag creation failed",
"tag-deleted": "Tag deleted",
"tag-deletion-failed": "Tag deletion failed",
"tag-update-failed": "Tag update failed",
"tag-updated": "Tag updated",
"tags": "Tags",
"untagged-count": "Untagged {count}"
"tag-created": "Тег создан",
"tag-creation-failed": "Не удалось создать тег",
"tag-deleted": "Тег удален",
"tag-deletion-failed": "Ошибка удаления тега",
"tag-update-failed": "Не удалось обновить тег",
"tag-updated": "Тег обновлен",
"tags": "Теги",
"untagged-count": "Не помеченные {count}"
},
"user": {
"admin": "Admin",
"are-you-sure-you-want-to-delete-the-link": "Are you sure you want to delete the link <b>{link}<b/>?",
"are-you-sure-you-want-to-delete-the-user": "Are you sure you want to delete the user <b>{activeName} ID: {activeId}<b/>?",
"confirm-link-deletion": "Confirm Link Deletion",
"confirm-password": "Confirm Password",
"confirm-user-deletion": "Confirm User Deletion",
"could-not-validate-credentials": "Could Not Validate Credentials",
"create-link": "Create Link",
"create-user": "Create User",
"current-password": "Current Password",
"e-mail-must-be-valid": "E-mail must be valid",
"edit-user": "Edit User",
"email": "Email",
"error-cannot-delete-super-user": "Error! Cannot Delete Super User",
"existing-password-does-not-match": "Existing password does not match",
"full-name": "Full Name",
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"logout": "Logout",
"manage-users": "Manage Users",
"new-password": "New Password",
"new-user": "New User",
"password": "Password",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
"password-must-match": "Password must match",
"password-reset-failed": "Password reset failed",
"password-updated": "Password updated",
"reset-password": "Reset Password",
"sign-in": "Sign in",
"total-mealplans": "Total MealPlans",
"total-users": "Total Users",
"upload-photo": "Upload Photo",
"use-8-characters-or-more-for-your-password": "Use 8 characters or more for your password",
"user": "User",
"user-created": "User created",
"user-creation-failed": "User creation failed",
"user-deleted": "User deleted",
"user-id": "User ID",
"user-id-with-value": "User ID: {id}",
"user-password": "User Password",
"user-successfully-logged-in": "User Successfully Logged In",
"user-update-failed": "User update failed",
"user-updated": "User updated",
"username": "Username",
"users": "Users",
"users-header": "USERS",
"webhook-time": "Webhook Time",
"webhooks-enabled": "Webhooks Enabled",
"you-are-not-allowed-to-create-a-user": "You are not allowed to create a user",
"you-are-not-allowed-to-delete-this-user": "You are not allowed to delete this user"
"admin": "Администратор",
"are-you-sure-you-want-to-delete-the-link": "Вы действительно хотите удалить <b>{link}<b/>?",
"are-you-sure-you-want-to-delete-the-user": "Вы уверены, что хотите удалить пользователя <b>{activeName} ID: {activeId}<b/>?",
"confirm-link-deletion": "Подтвердить удаление ссылки",
"confirm-password": "Подтвердить пароль",
"confirm-user-deletion": "Подтвердить удаление пользователя",
"could-not-validate-credentials": "Не удалось проверить учетные данные",
"create-link": "Создать ссылку",
"create-user": "Создать пользователя",
"current-password": "Текущий пароль",
"e-mail-must-be-valid": "E-mail должен быть действительным",
"edit-user": "Редактирование пользователя",
"email": "Адрес электронной почты",
"error-cannot-delete-super-user": "Ошибка! Невозможно удалить суперпользователя",
"existing-password-does-not-match": "Пароли не совпадают",
"full-name": "Ф.И.О.",
"link-id": "ID ссылки",
"link-name": "Название ссылки",
"login": "Вход",
"logout": "Выход",
"manage-users": "Управление пользователями",
"new-password": "Новый пароль",
"new-user": "Новый пользователь",
"password": "Пароль",
"password-has-been-reset-to-the-default-password": "Пароль был сброшен по умолчанию",
"password-must-match": "Пароли должны совпадать",
"password-reset-failed": "Ошибка сброса пароля",
"password-updated": "Пароль обновлен",
"reset-password": "Сброс пароля",
"sign-in": "Авторизация",
"total-mealplans": "Всего планов питания",
"total-users": "Всего пользователей",
"upload-photo": "Загрузить фотографию",
"use-8-characters-or-more-for-your-password": "Используйте 8 символов или более для пароля",
"user": "Пользователь",
"user-created": "Пользователь создан",
"user-creation-failed": "Ошибка создания пользователя",
"user-deleted": "Пользователь удален",
"user-id": "ID пользователя",
"user-id-with-value": "ID пользователя: {id}",
"user-password": "Пароль пользователя",
"user-successfully-logged-in": "Пользователь успешно вошел в систему",
"user-update-failed": "Ошибка обновления пользователя",
"user-updated": "Пользователь обновлен",
"username": "Имя пользователя",
"users": "Пользователи",
"users-header": "ПОЛЬЗОВАТЕЛИ",
"webhook-time": "Длительность Webhook",
"webhooks-enabled": "Webhooks включены",
"you-are-not-allowed-to-create-a-user": "Вы не можете создавать пользователей",
"you-are-not-allowed-to-delete-this-user": "Вы не можете удалить этого пользователя"
}
}

View File

@@ -0,0 +1,489 @@
{
"about": {
"about": "O",
"about-mealie": "O aplikácii",
"api-docs": "API dokumentácia",
"api-port": "API port",
"application-mode": "Mód",
"database-type": "Typ databázy",
"database-url": "Link databázy",
"default-group": "Predvolená skupina",
"demo": "Demo",
"demo-status": "Demo Stav",
"development": "Vývoj",
"docs": "Dokumentácia",
"download-log": "Záznam sťahovania",
"download-recipe-json": "Posledný získaný JSON",
"github": "Github",
"log-lines": "Riadky záznamu",
"not-demo": "Nie Demo",
"portfolio": "Portfólio",
"production": "Produkčné prostredie",
"support": "Podpora",
"version": "Verzia"
},
"asset": {
"assets": "Prílohy",
"code": "Kód",
"file": "Súbor",
"image": "Obrázok",
"new-asset": "Nová príloha",
"pdf": "PDF",
"recipe": "Recept",
"show-assets": "Ukáž prílohy"
},
"category": {
"category-created": "Kategória vytvorená",
"category-creation-failed": "Vytvorenie kategórie zlyhalo",
"category-deleted": "Kategória vymazaná",
"category-deletion-failed": "Vymazanie kategórie zlyhalo",
"category-filter": "Filter kategórií",
"category-update-failed": "Aktualizácia kategórie zlyhala",
"category-updated": "Kategória aktualizovaná",
"uncategorized-count": "Nezaradené {count}"
},
"events": {
"apprise-url": "Apprise URL",
"database": "Databáza",
"delete-event": "Odstrániť akciu",
"new-notification-form-description": "Mealie používa na generovanie upozornení knižnicu Apprise. Vďaka tomu ponúkajú množstvo možností pre služby využívajúce upozornenia. V prípade, ak chcete vytvoriť URL odkaz na Vašu službu, obráťte sa na ich oficiálnu wiki. Výberom vhodného typu upozornení môžete získať prístup k ďalším užitočným funkciám.",
"new-version": "K dispozícií je nová verzia!",
"notification": "Upozornenie",
"refresh": "Obnoviť",
"scheduled": "Naplánované",
"something-went-wrong": "Vyskytla sa chyba",
"subscribed-events": "Prihlásené akcie",
"test-message-sent": "Testovacia správa bola odoslaná"
},
"general": {
"cancel": "Zrušiť",
"clear": "Vymazať",
"close": "Zavrieť",
"confirm": "Potvrdiť",
"confirm-delete-generic": "Naozaj chcete odstrániť?",
"copied": "Okopírované",
"create": "Vytvoriť",
"created": "Vytvorenia",
"custom": "Vlastné",
"dashboard": "Hlavný panel",
"delete": "Odstrániť",
"disabled": "Deaktivované",
"download": "Stiahnuť",
"edit": "Upraviť",
"enabled": "Povolené",
"exception": "Výnimka",
"failed-count": "Zlyhané: {count}",
"failure-uploading-file": "Nahratie súboru zlyhalo",
"favorites": "Obľúbené",
"field-required": "Povinný údaj",
"file-folder-not-found": "Súbor/priečinok nenájdený",
"file-uploaded": "Súbor nahratý",
"filter": "Filter",
"friday": "Piatok",
"general": "Všeobecné",
"get": "Získať",
"home": "Domov",
"image": "Obrázok",
"image-upload-failed": "Nahratie obrázku zlyhalo",
"import": "Importovať",
"json": "JSON",
"keyword": "Kľučové slovo",
"link-copied": "Odkaz bol skopírovaný",
"loading-recipes": "Nahrávanie receptu",
"monday": "Pondelok",
"name": "Názov",
"new": "Nový",
"no": "Nie",
"no-recipe-found": "Žiadny recept nenájdený",
"ok": "OK",
"options": "Možnosti:",
"print": "Tlačiť",
"random": "Náhodné",
"rating": "Hodnotenie",
"recent": "Posledné",
"recipe": "Recept",
"recipes": "Recepty",
"rename-object": "Premenovať {0}",
"reset": "Resetovať",
"saturday": "Sobota",
"save": "Uložiť",
"settings": "Nastavenia",
"share": "Zdieľať",
"shuffle": "Náhodný výber",
"sort": "Usporiadať",
"sort-alphabetically": "Abecedne",
"status": "Stav",
"submit": "Odoslať",
"success-count": "Úspešné {count}",
"sunday": "Nedeľa",
"templates": "Šablóny:",
"test": "Otestovať",
"themes": "Motívy",
"thursday": "Štvrtok",
"token": "Token",
"tuesday": "Utorok",
"type": "Typ",
"update": "Aktualizovať",
"updated": "Aktualizované",
"upload": "Nahrať",
"url": "URL",
"view": "Zobraziť",
"wednesday": "Streda",
"yes": "Áno"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Naozaj chcete odstrániť <b>{groupName}<b/>?",
"cannot-delete-default-group": "Predvolenú skupinu nie je možné vymazať",
"cannot-delete-group-with-users": "Skupinu s užívateľmi nie je možné odstrániť",
"confirm-group-deletion": "Potvrdiť odstránenie skupiny",
"create-group": "Vytvoriť skupinu",
"error-updating-group": "Chyba pri aktualizácii skupiny",
"group": "Skupina",
"group-deleted": "Skupina odstránená",
"group-deletion-failed": "Odstránenie skupiny zlyhalo",
"group-id-with-value": "ID skupiny: {groupID}",
"group-name": "Názov skupiny",
"group-not-found": "Skupina nebola nájdená",
"group-with-value": "Skupina: {groupID}",
"groups": "Skupiny",
"manage-groups": "Spravovať skupiny",
"user-group": "Užívateľské skupiny",
"user-group-created": "Užívateľská skupina bola vytvorená",
"user-group-creation-failed": "Vytvorenie užívateľskej skupiny zlyhalo"
},
"meal-plan": {
"create-a-new-meal-plan": "Vytvoriť nový jedálniček",
"dinner-this-week": "Večera tento týždeň",
"dinner-today": "Večera dnes",
"dinner-tonight": "VEČERA NA DNES",
"edit-meal-plan": "Upraviť jedálniček",
"end-date": "Dátum do",
"group": "Skupina (Beta)",
"main": "Hlavné",
"meal-planner": "Plánovač jedál",
"meal-plans": "Jedálničky",
"mealplan-categories": "KATEGÓRIE JEDÁLNIČKOV",
"mealplan-created": "Jedálniček vytvorený",
"mealplan-creation-failed": "Vytvorenie jedálnička zlyhalo",
"mealplan-deleted": "Jedálniček odstránený",
"mealplan-deletion-failed": "Odstránenie jedálnička zlyhalo",
"mealplan-settings": "Nastavenia jedálnička",
"mealplan-update-failed": "Aktualizácia jedálnička zlyhala",
"mealplan-updated": "Jedálniček aktualizovaný",
"no-meal-plan-defined-yet": "Nebol vytvorený žiadny jedálniček",
"no-meal-planned-for-today": "Pre dnešok žiadne jedlo v jedálničku",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "V jedálničkoch budú použité iba recepty z nasledovných kategórií",
"planner": "Plánovač",
"quick-week": "Rýchly návrh týždňa",
"side": "Príloha",
"sides": "Prílohy",
"start-date": "Dátum od"
},
"migration": {
"chowdown": {
"description": "Preniesť dáta z Chowdown",
"title": "Chowdown"
},
"migration-data-removed": "Prenesené dáta odstránené",
"nextcloud": {
"description": "Preniesť dáta z Nextcloud Cookbook",
"title": "Nextcloud Cookbook"
},
"no-migration-data-available": "Dáta na prenos nie sú k dispozícii",
"recipe-migration": "Prenos receptu"
},
"new-recipe": {
"bulk-add": "Hromadné pridanie",
"error-details": "Mealie dokáže importovať iba webstránky obsahujúce mikrodáta alebo ld+json dáta. Veľká väčšina webstránok zameraných na recepty takéto dáta obsahuje. Ak Vami zvolenú webstránku nie je možné importovať, ale v zázname chybového importu sú json-dáta prítomné, zadajte prosím hlásenie o chybe na našom GitHub profile spolu s odkazom na webstránku a json-dátami.",
"error-title": "Je nám ľúto, ale nič sme nenašli",
"from-url": "Importovať recept",
"github-issues": "Problémy GitHub",
"google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Adresa URL musí byť platná",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Vložte údaje z vášho receptu. Každý riadok sa považuje za samostatnú položku v zozname",
"recipe-markup-specification": "Nastavenie značkovania receptov",
"recipe-url": "URL adresa receptu",
"upload-a-recipe": "Nahrať recept",
"upload-individual-zip-file": "Nahrať súbor .zip exportovaný z inej Mealie inštalácie.",
"url-form-hint": "Okopírujte a zložte odkaz z vašej obľúbenej webstránky",
"view-scraped-data": "Náhľad získaných údajov"
},
"page": {
"404-page-not-found": "Chyba 404 - Stránka nenájdená",
"all-recipes": "Všetky recepty",
"new-page-created": "Nová stránka bola vytvorená",
"page": "Stránka",
"page-creation-failed": "Vytvorenie stránky zlyhalo",
"page-deleted": "Stránka bola odstránená",
"page-deletion-failed": "Odstránenie stránky zlyhalo",
"page-update-failed": "Aktualizácia stránky zlyhala",
"page-updated": "Stránka bola aktualizovaná",
"pages-update-failed": "Aktualizácia stránok zlyhala",
"pages-updated": "Stránky boli aktualizované"
},
"recipe": {
"add-key": "Pridať kľúč",
"add-to-favorites": "Pridať do obľúbených",
"api-extras": "API Extras",
"calories": "Kalórie",
"calories-suffix": "kalórie",
"carbohydrate-content": "Sacharidy",
"categories": "Kategórie",
"comment-action": "Komentovať",
"comments": "Komentáre",
"delete-confirmation": "Naozaj chcete odstrániť zvolený recept?",
"delete-recipe": "Odstrániť recept",
"description": "Popis",
"disable-amount": "Vypnúť množstvá surovín",
"disable-comments": "Vypnúť komentáre",
"fat-content": "Tuky",
"fiber-content": "Vlákniny",
"grams": "gramov",
"ingredient": "Surovina",
"ingredients": "Suroviny",
"insert-section": "Vložiť sekciu",
"instructions": "Postup",
"key-name-required": "Názov kľúča je povinným údajom",
"landscape-view-coming-soon": "Orientácia na šírku (čoskoro)",
"milligrams": "miligramov",
"new-key-name": "Názov nového kľúča",
"no-white-space-allowed": "Medzery nie sú povolené",
"note": "Poznámka",
"nutrition": "Nutričné hodnoty",
"object-key": "Kľúč objektu",
"object-value": "Hodnota objektu",
"original-url": "URL zdroja",
"perform-time": "Tepelná úprava",
"prep-time": "Príprava",
"protein-content": "Bielkoviny",
"public-recipe": "Verejne dostupný recept",
"recipe-created": "Recept bol vytvorený",
"recipe-creation-failed": "Vytvorenie receptu zlyhalo",
"recipe-deleted": "Recept bol odstránený",
"recipe-image": "Obrázok receptu",
"recipe-image-updated": "Obrázok receptu aktualizovaný",
"recipe-name": "Názov receptu",
"recipe-settings": "Nastavenia receptu",
"recipe-update-failed": "Aktualizácia receptu zlyhala",
"recipe-updated": "Recept bol aktualizovaný",
"remove-from-favorites": "Ostrániť z obľúbených",
"remove-section": "Odstrániť sekciu",
"save-recipe-before-use": "Uložiť recept pred použitím",
"section-title": "Názov sekcie",
"servings": "Porcie",
"share-recipe-message": "Chcel by som sa s tebou podeliť o recept na {0}.",
"show-nutrition-values": "Ukáž nutričné hodnoty",
"sodium-content": "Sodík",
"step-index": "Krok: {step}",
"sugar-content": "Cukry",
"title": "Názov",
"total-time": "Celkový čas",
"unable-to-delete-recipe": "Recept nie je možné odstrániť"
},
"reicpe": {
"no-recipe": "Bez receptu"
},
"search": {
"advanced-search": "Rozšírené vyhľadávanie",
"and": "a",
"exclude": "Vylúčiť",
"include": "Zahrnúť",
"max-results": "Max. počet výsledkov",
"or": "Alebo",
"results": "Výsledky",
"search": "Vyhľadať",
"search-mealie": "Prehľadať Mealie (stlač /)",
"search-placeholder": "Hľadať...",
"tag-filter": "Filter štítkov"
},
"settings": {
"add-a-new-theme": "Pridať nový motív",
"admin-settings": "Nastavenia správcu",
"backup": {
"backup-created-at-response-export_path": "Záloha vytvorená v {path}",
"backup-deleted": "Záloha bola odstránená",
"backup-tag": "Označenie zálohy",
"create-heading": "Vytvoriť zálohu",
"delete-backup": "Odstrániť zálohu",
"error-creating-backup-see-log-file": "Vytvorenie zálohy zlyhalo. Pozrite prosím súbor záznamu",
"full-backup": "Úplná záloha",
"import-summary": "Importovať zhrnutie",
"partial-backup": "Čiastočná záloha",
"unable-to-delete-backup": "Zálohu nebolo možné odstrániť."
},
"backup-and-exports": "Zálohy",
"change-password": "Zmeniť heslo",
"current": "Verzia:",
"custom-pages": "Vlastné stránky",
"edit-page": "Upraviť stránku",
"events": "Udalosti",
"first-day-of-week": "Prvý deň v týždni",
"group-settings-updated": "Nastavenia skupiny boli aktualizované",
"homepage": {
"all-categories": "Všetky kategórie",
"card-per-section": "Karta na sekciu",
"home-page": "Domovská stránka",
"home-page-sections": "Sekcie na domovskej stránke",
"show-recent": "Zobraziť posledné"
},
"language": "Jazyk",
"latest": "Najnovšie",
"local-api": "Local API",
"locale-settings": "Miestne nastavenia",
"migrations": "Migrácie",
"new-page": "Nová stránka",
"notify": "Upozorniť",
"organize": "Usporiadať",
"page-name": "Názov stránky",
"pages": "Stránky",
"profile": "Profil",
"remove-existing-entries-matching-imported-entries": "Odstrániť existujúce položky totožné s importovanými",
"set-new-time": "Nastaviť nový čas",
"settings-update-failed": "Aktualizácia nastavení zlyhala",
"settings-updated": "Nastavenia boli aktualizované",
"site-settings": "Nastavenia hostiteľskej stránky",
"theme": {
"accent": "Odtieň",
"dark": "Tmavý",
"default-to-system": "Predvolené systémom",
"error": "Chyba",
"error-creating-theme-see-log-file": "Vyskytla sa chyba pri vytváraní motívu. Pozrite súbor záznamu.",
"error-deleting-theme": "Vyskytla sa chyba pri odstraňovaní motívu",
"error-updating-theme": "Vysytla sa chyba pri aktualizácii motívu",
"info": "Info",
"light": "Svetlý",
"primary": "Primary",
"secondary": "Sekundárny",
"success": "Hotovo",
"switch-to-dark-mode": "Prepnúť na tmavý motív",
"switch-to-light-mode": "Prepnúť na svetlý motív",
"theme-deleted": "Motív bol odstránený",
"theme-name": "Názov motívu",
"theme-name-is-required": "Názov motívu je povinným údajom.",
"theme-saved": "Motív bol uložený",
"theme-updated": "Motív bol aktualizovaný",
"warning": "Upozornenie"
},
"token": {
"active-tokens": "ACTIVE TOKENS",
"api-token": "API Token",
"api-tokens": "API Tokens",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Okopíruj zobrazený token na použitie v externej aplikácii. Tento token už nebude možné v budúcnosti opäť zobraziť.",
"create-an-api-token": "Vytvoriť API token",
"token-name": "Názov tokenu"
},
"toolbox": {
"assign-all": "Priradiť všetko",
"bulk-assign": "Priradiť hromadne",
"new-name": "Nový názov",
"no-unused-items": "Žiadne nepoužité položky",
"recipes-affected": "Žiadny recept nebol zmenený|Jeden recept bol zmenený|{count} receptov bolo zmenených",
"remove-unused": "Odstrániť nepoužité",
"title-case-all": "Kapitálky",
"toolbox": "Panel nástrojov",
"unorganized": "Nezaradené"
},
"webhooks": {
"test-webhooks": "Otestovať webhook",
"the-urls-listed-below-will-recieve-webhooks-containing-the-recipe-data-for-the-meal-plan-on-its-scheduled-day-currently-webhooks-will-execute-at": "URL adresy zobrazené nižšie obdržia webhooky obsahujúce údaje z receptov pre jedálniček v naplánovaný deň. Momentálne webhooky zbiehajú v",
"webhook-url": "URL adresa webhooku",
"webhooks-caps": "WEBHOOKS"
}
},
"shopping-list": {
"all-lists": "Všetky zoznamy",
"create-shopping-list": "Vytvoriť nákupný zoznam",
"from-recipe": "Podľa receptu",
"list-name": "Názov zoznamu",
"new-list": "Nový zoznam",
"quantity": "Množstvo: {0}",
"shopping-list": "Nákupný zoznam",
"shopping-lists": "Nákupné zoznamy"
},
"sidebar": {
"all-recipes": "Všetky recepty",
"categories": "Kategórie",
"dashboard": "Hlavný panel",
"home-page": "Úvodná stránka",
"manage-users": "Užívatelia",
"migrations": "Migrácie",
"profile": "Profil",
"search": "Hľadať",
"site-settings": "Nastavenia",
"tags": "Štítky",
"toolbox": "Nástroje"
},
"signup": {
"error-signing-up": "Nastala chyba pri registrácii",
"sign-up": "Registrovať sa",
"sign-up-link-created": "Odkaz na registráciu bol vytvorený",
"sign-up-link-creation-failed": "Vytvorenie odkazu na registráciu zlyhalo",
"sign-up-links": "Odkazy na registráciu",
"sign-up-token-deleted": "Token registrácie bol odstránený",
"sign-up-token-deletion-failed": "Odstránenie tokenu registrácie zlyhalo",
"welcome-to-mealie": "Vitajte v Mealie! Aby Ste sa stali užívateľom, je nutné získať pozívací odkaz. Bez pozívacieho odkazu registrácia nie je možná. O pozívací odkaz požiadajte administrátora stránky."
},
"tag": {
"tag-created": "Štítok bol vytvorený",
"tag-creation-failed": "Vytvorenie štítku zlyhalo",
"tag-deleted": "Štítok bol odstránený",
"tag-deletion-failed": "Odstránenie štítku zlyhalo",
"tag-update-failed": "Aktualizácia štítku zlyhala",
"tag-updated": "Štítok bol aktualizovaný",
"tags": "Štítky",
"untagged-count": "Neoznačené {count}"
},
"user": {
"admin": "Administrátor",
"are-you-sure-you-want-to-delete-the-link": "Ste si istý, že chcete odstrániť odkaz <b>{link}<b/>?",
"are-you-sure-you-want-to-delete-the-user": "Ste si istý, že chcete odstrániť užívateľa <b>{activeName} ID: {activeId}<b/>?",
"confirm-link-deletion": "Potvrďte odstránenie odkazu",
"confirm-password": "Potvrdiť heslo",
"confirm-user-deletion": "Potvrďte odstránenie užívateľa",
"could-not-validate-credentials": "Prihlasovacie údaje nebolo možné overiť",
"create-link": "Vytvoriť odkaz",
"create-user": "Vytvoriť užívateľa",
"current-password": "Súčasné heslo",
"e-mail-must-be-valid": "E-mailová adresa musí byť platná",
"edit-user": "Upraviť užívateľa",
"email": "E-mail",
"error-cannot-delete-super-user": "Chyba! Superužívateľa nie je možné odstrániť",
"existing-password-does-not-match": "Súčasné heslo sa nezhoduje",
"full-name": "Celé meno",
"link-id": "ID odkazu",
"link-name": "Názov odkazu",
"login": "Prihlásiť sa",
"logout": "Odhlásiť sa",
"manage-users": "Správa užívateľov",
"new-password": "Nové heslo",
"new-user": "Nový užívateľ",
"password": "Heslo",
"password-has-been-reset-to-the-default-password": "Heslo bolo zresetované na prednastavenú hodnotu",
"password-must-match": "Heslá sa musia zhodovať",
"password-reset-failed": "Zresetovanie hesla zlyhalo",
"password-updated": "Heslo bolo aktualizované",
"reset-password": "Resetovať heslo",
"sign-in": "Prihlásiť sa",
"total-mealplans": "Počet jedálničkov",
"total-users": "Počet užívateľov",
"upload-photo": "Nahrať fotografiu",
"use-8-characters-or-more-for-your-password": "Heslo musí obsahovať 8 alebo viac písmen",
"user": "Užívateľ",
"user-created": "Vytvorené užívateľom",
"user-creation-failed": "Vytvorenie užívateľa zlyhalo",
"user-deleted": "Užívateľ bol odstránený",
"user-id": "ID užívateľa",
"user-id-with-value": "ID užívateľa: {id}",
"user-password": "Heslo užívateľa",
"user-successfully-logged-in": "Užívateľ bol úspešne prihlásený",
"user-update-failed": "Aktualizácia užívateľa zlyhala",
"user-updated": "Užívateľ bol aktualizovaný",
"username": "Užívateľské meno",
"users": "Užívatelia",
"users-header": "USERS",
"webhook-time": "Čas webhookov",
"webhooks-enabled": "Webhooky povolené",
"you-are-not-allowed-to-create-a-user": "Nie Ste oprávnený vytvoriť nového užívateľa",
"you-are-not-allowed-to-delete-this-user": "Nie Ste oprávnený odstrániť tohto užívateľa"
}
}

View File

@@ -4,19 +4,19 @@
"about-mealie": "Om Mealie",
"api-docs": "API Dokumentation",
"api-port": "API port",
"application-mode": "Program läge",
"application-mode": "Applikationsläge",
"database-type": "Databastyp",
"database-url": "Databas URL",
"default-group": "Standard grupp",
"default-group": "Standardgrupp",
"demo": "Demo",
"demo-status": "Demo status",
"demo-status": "Demo Status",
"development": "Utveckling",
"docs": "Dokumentation",
"download-log": "Ladda ner logg",
"download-recipe-json": "Senast hämtad JSON",
"github": "Github",
"log-lines": "Loggrader",
"not-demo": "Ingen Demo",
"not-demo": "Inte Demo",
"portfolio": "Portfölj",
"production": "Produktion",
"support": "Hjälp",
@@ -34,11 +34,11 @@
},
"category": {
"category-created": "Kategori skapad",
"category-creation-failed": "Kategori misslyckades",
"category-creation-failed": "Kategori gick inte att skapa",
"category-deleted": "Kategori raderad",
"category-deletion-failed": "Kategori radering misslyckades",
"category-filter": "Kategori filter",
"category-update-failed": "Kategori uppdatering misslyckades",
"category-deletion-failed": "Kategori gick inte att radera",
"category-filter": "Kategorifilter",
"category-update-failed": "Kategori gick inte att uppdatera",
"category-updated": "Kategori uppdaterad",
"uncategorized-count": "Ingen Kategori {count}"
},
@@ -46,14 +46,14 @@
"apprise-url": "Apprise URL",
"database": "Databas",
"delete-event": "Radera händelse",
"new-notification-form-description": "Mealie använder Apprise-biblioteket för att generera aviseringar. De erbjuder många alternativ för tjänster att använda för aviseringar. Se deras wiki för en omfattande guide om hur du skapar URL för din tjänst. Om det är tillgängligt kan det vara extra funktioner att välja typ av anmälan.",
"new-notification-form-description": "Mealie använder Apprise-biblioteket för att generera aviseringar. De erbjuder många alternativ för tjänster att använda för aviseringar. Se deras wiki för en omfattande guide om hur du skapar URL för din tjänst. Om tillgängligt kan val av tjänst inkludera extra funktioner.",
"new-version": "Uppdatering tillgänglig!",
"notification": "Notifiering",
"refresh": "Uppdatera",
"scheduled": "Schemalagd",
"something-went-wrong": "Hmmm, något blev fel!",
"subscribed-events": "Prenumererade händelser",
"test-message-sent": "Test meddelande skickat"
"test-message-sent": "Testmeddelande Skickat"
},
"general": {
"cancel": "Avbryt",
@@ -77,19 +77,19 @@
"favorites": "Favoriter",
"field-required": "Obligatoriskt fält",
"file-folder-not-found": "Fil/mapp ej hittad",
"file-uploaded": "Ful uppladdad",
"file-uploaded": "Fil uppladdad",
"filter": "Filter",
"friday": "Fredag",
"general": "Allmänt",
"get": "Hämta",
"home": "Startsida",
"image": "Bild",
"image-upload-failed": "Bild uppladdning misslyckad",
"image-upload-failed": "Bilduppladdning misslyckades",
"import": "Importera",
"json": "JSON",
"keyword": "Nyckelord",
"link-copied": "Länk kopierad",
"loading-recipes": "Laddar recept",
"loading-recipes": "Laddar Recept",
"monday": "Måndag",
"name": "Namn",
"new": "Ny",
@@ -159,7 +159,7 @@
"edit-meal-plan": "Redigera måltidsplan",
"end-date": "Slutdatum",
"group": "Grupp (Beta)",
"main": "Startsida",
"main": "Huvudrätt",
"meal-planner": "Måltidsplanering",
"meal-plans": "Måltidsplaner",
"mealplan-categories": "Målplans kategorier",
@@ -175,8 +175,8 @@
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Endast recept med dessa kategorier kommer att användas i måltidsplaner",
"planner": "Planeringkalender",
"quick-week": "Snabb vecka",
"side": "Sida",
"sides": "Sidor",
"side": "Sidorätt",
"sides": "Sidorätter",
"start-date": "Startdatum"
},
"migration": {

View File

@@ -1,6 +1,6 @@
{
"about": {
"about": "About",
"about": "关于",
"about-mealie": "关于 Mealie",
"api-docs": "API 文档",
"api-port": "API 端口",
@@ -15,22 +15,22 @@
"download-log": "下载日志",
"download-recipe-json": "最后扫描的 JSON",
"github": "Github",
"log-lines": "Log Lines",
"log-lines": "日志行",
"not-demo": "非演示模式",
"portfolio": "Portfolio",
"portfolio": "档案",
"production": "生产版",
"support": "支持",
"version": "版本"
},
"asset": {
"assets": "Assets",
"code": "Code",
"file": "File",
"image": "Image",
"new-asset": "New Asset",
"assets": "附件",
"code": "代码",
"file": "文件",
"image": "图片",
"new-asset": "新素材",
"pdf": "PDF",
"recipe": "Recipe",
"show-assets": "Show Assets"
"recipe": "食谱",
"show-assets": "显示素材"
},
"category": {
"category-created": "类别已创建",
@@ -45,15 +45,15 @@
"events": {
"apprise-url": "Apprise URL",
"database": "数据库",
"delete-event": "Delete Event",
"new-notification-form-description": "Mealie uses the Apprise library to generate notifications. They offer many options for services to use for notifications. Refer to their wiki for a comprehensive guide on how to create the URL for your service. If available, selecting the type of your notification may include extra features.",
"new-version": "New version available!",
"delete-event": "删除事件",
"new-notification-form-description": "Mealie 使用 Aprise 库生成通知。它们提供了许多服务选项用于通知。 关于如何为您的服务创建URL的全面指南请参阅他们的维基。 如果可用,选择通知类型可能包含额外功能。",
"new-version": "有新版本可用!",
"notification": "通知",
"refresh": "Refresh",
"scheduled": "Scheduled",
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent"
"refresh": "刷新",
"scheduled": "已预订",
"something-went-wrong": "出错了\t#",
"subscribed-events": "订阅事件",
"test-message-sent": "测试消息已发送"
},
"general": {
"cancel": "取消",
@@ -74,77 +74,77 @@
"exception": "异常",
"failed-count": "失败: {count}",
"failure-uploading-file": "文件上传失败",
"favorites": "Favorites",
"favorites": "收藏夹",
"field-required": "必填",
"file-folder-not-found": "未找到文件/文件夹",
"file-uploaded": "文件已上传",
"filter": "筛选",
"friday": "星期五",
"general": "General",
"get": "Get",
"home": "Home",
"image": "Image",
"image-upload-failed": "Image upload failed",
"general": "概览",
"get": "获取",
"home": "首页",
"image": "图片",
"image-upload-failed": "图片上传失败",
"import": "导入",
"json": "JSON",
"keyword": "Keyword",
"link-copied": "Link Copied",
"loading-recipes": "Loading Recipes",
"monday": "Monday",
"keyword": "关键字",
"link-copied": "链接已复制",
"loading-recipes": "正在加载食谱",
"monday": "周一",
"name": "名称",
"new": "New",
"new": "新建",
"no": "否",
"no-recipe-found": "No Recipe Found",
"no-recipe-found": "未找到食谱",
"ok": "好的",
"options": "Options:",
"print": "Print",
"options": "选项:",
"print": "打印",
"random": "随机",
"rating": "Rating",
"rating": "评分",
"recent": "最近",
"recipe": "Recipe",
"recipe": "食谱",
"recipes": "食谱",
"rename-object": "Rename {0}",
"rename-object": "重命名 {0}",
"reset": "重置",
"saturday": "Saturday",
"saturday": "周六",
"save": "保存",
"settings": "设定",
"share": "Share",
"shuffle": "Shuffle",
"share": "分享",
"shuffle": "随机",
"sort": "排序",
"sort-alphabetically": "Alphabetical",
"status": "Status",
"sort-alphabetically": "按字母顺序排序",
"status": "状态",
"submit": "提交",
"success-count": "Success: {count}",
"sunday": "Sunday",
"templates": "Templates:",
"test": "Test",
"success-count": "成功: {count}",
"sunday": "周日",
"templates": "模板:",
"test": "测试",
"themes": "布景主题",
"thursday": "Thursday",
"thursday": "周四",
"token": "密钥",
"tuesday": "Tuesday",
"type": "Type",
"tuesday": "周二",
"type": "类型",
"update": "更新",
"updated": "Updated",
"updated": "已更新",
"upload": "上传",
"url": "URL",
"view": "View",
"wednesday": "Wednesday",
"url": "网址链接",
"view": "查看",
"wednesday": "周三",
"yes": "是"
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
"cannot-delete-default-group": "Cannot delete default group",
"cannot-delete-group-with-users": "Cannot delete group with users",
"confirm-group-deletion": "Confirm Group Deletion",
"create-group": "Create Group",
"error-updating-group": "Error updating group",
"group": "Group",
"group-deleted": "Group deleted",
"group-deletion-failed": "Group deletion failed",
"group-id-with-value": "Group ID: {groupID}",
"group-name": "Group Name",
"group-not-found": "Group not found",
"group-with-value": "Group: {groupID}",
"are-you-sure-you-want-to-delete-the-group": "您确定要删除<b>{groupName}<b/>吗?",
"cannot-delete-default-group": "无法删除默认群组",
"cannot-delete-group-with-users": "无法删除还有用户的群组",
"confirm-group-deletion": "确认删除群组",
"create-group": "创建群组",
"error-updating-group": "更新群组错误。",
"group": "群组",
"group-deleted": "群组已删除",
"group-deletion-failed": "群组删除失败",
"group-id-with-value": "群组ID: {groupID}",
"group-name": "群组名",
"group-not-found": "未找到该群组",
"group-with-value": "群组: {groupID}",
"groups": "群组",
"manage-groups": "管理群组",
"user-group": "用户群组",
@@ -155,28 +155,28 @@
"create-a-new-meal-plan": "创建一个新的用餐计划",
"dinner-this-week": "本周晚餐",
"dinner-today": "今日晚餐",
"dinner-tonight": "DINNER TONIGHT",
"dinner-tonight": "今晚食谱",
"edit-meal-plan": "编辑用餐计划",
"end-date": "结束日期",
"group": "Group (Beta)",
"main": "Main",
"group": "群组 (Beta)",
"main": "主要内容",
"meal-planner": "用餐计划",
"meal-plans": "用餐计划",
"mealplan-categories": "MEALPLAN CATEGORIES",
"mealplan-created": "Mealplan created",
"mealplan-creation-failed": "Mealplan creation failed",
"mealplan-deleted": "Mealplan Deleted",
"mealplan-deletion-failed": "Mealplan deletion failed",
"mealplan-settings": "Mealplan Settings",
"mealplan-update-failed": "Mealplan update failed",
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"mealplan-categories": "食谱计划分类",
"mealplan-created": "膳食计划已创建",
"mealplan-creation-failed": "膳食计划创建失败",
"mealplan-deleted": "膳食计划已删除",
"mealplan-deletion-failed": "食谱计划删除失败",
"mealplan-settings": "食谱计划设置",
"mealplan-update-failed": "食谱更新失败",
"mealplan-updated": "食谱计划已更新",
"no-meal-plan-defined-yet": "还没有定义食谱计划",
"no-meal-planned-for-today": "今日没有排定的食谱计划",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "只有与这些类别相关的食谱才会被用于用餐计划",
"planner": "策划人",
"quick-week": "Quick Week",
"side": "Side",
"sides": "Sides",
"quick-week": "快速创建周食谱计划",
"side": "侧栏",
"sides": "侧栏",
"start-date": "开始日期"
},
"migration": {
@@ -194,22 +194,22 @@
},
"new-recipe": {
"bulk-add": "批量添加",
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.",
"error-title": "Looks Like We Couldn't Find Anything",
"error-details": "只有包含ld+json或微观数据的网站可以被Mealie导入。大多数主要配方网站支持此数据结构。 如果您的网站不能被导入但日志里有json数据请提交一个 github 问题与 URL 和数据。",
"error-title": "看起来我们没找到任何内容",
"from-url": "输入网址",
"github-issues": "GitHub Issues",
"google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Must be a Valid URL",
"google-ld-json-info": "Google ld+json 信息",
"must-be-a-valid-url": "必须是一个有效的链接",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "请粘贴您的食谱资料。每行将被视为列表中的一项。",
"recipe-markup-specification": "Recipe Markup Specification",
"recipe-markup-specification": "食谱标记规范",
"recipe-url": "食谱网址",
"upload-a-recipe": "Upload a Recipe",
"upload-individual-zip-file": "Upload an individual .zip file exported from another Mealie instance.",
"upload-a-recipe": "上传食谱",
"upload-individual-zip-file": "上传从Mealie导出的.zip文件。",
"url-form-hint": "从您最喜爱的食谱网站复制并粘贴链接",
"view-scraped-data": "View Scraped Data"
"view-scraped-data": "查看爬取的数据"
},
"page": {
"404-page-not-found": "404 Page not found",
"404-page-not-found": "404-页面未找到",
"all-recipes": "全部食谱",
"new-page-created": "新页面已创建",
"page": "页面",
@@ -223,28 +223,28 @@
},
"recipe": {
"add-key": "Add Key",
"add-to-favorites": "Add to Favorites",
"add-to-favorites": "添加到收藏夹",
"api-extras": "API Extras",
"calories": "卡路里",
"calories-suffix": "卡路里",
"carbohydrate-content": "碳水化合物",
"categories": "分类目录",
"comment-action": "Comment",
"comments": "Comments",
"comment-action": "评论",
"comments": "评论",
"delete-confirmation": "您确定要删除此食谱吗?",
"delete-recipe": "删除食谱",
"description": "描述",
"disable-amount": "Disable Ingredient Amounts",
"disable-comments": "Disable Comments",
"disable-amount": "关闭显示成分数量",
"disable-comments": "禁用评论",
"fat-content": "脂肪",
"fiber-content": "纤维",
"grams": "克",
"ingredient": "材料",
"ingredients": "材料",
"insert-section": "Insert Section",
"insert-section": "插入章节",
"instructions": "做法",
"key-name-required": "必须输入关键字",
"landscape-view-coming-soon": "Landscape View (Coming Soon)",
"landscape-view-coming-soon": "横向视图 (即将到来)",
"milligrams": "毫克",
"new-key-name": "New Key Name",
"no-white-space-allowed": "不允许有空格",
@@ -260,39 +260,39 @@
"recipe-created": "食谱已创建",
"recipe-creation-failed": "创建食谱失败",
"recipe-deleted": "食谱已删除",
"recipe-image": "Recipe Image",
"recipe-image-updated": "Recipe image updated",
"recipe-image": "食谱图片",
"recipe-image-updated": "食谱图片已更新",
"recipe-name": "食谱名称",
"recipe-settings": "Recipe Settings",
"recipe-update-failed": "Recipe update failed",
"recipe-updated": "Recipe updated",
"remove-from-favorites": "Remove from Favorites",
"remove-section": "Remove Section",
"save-recipe-before-use": "Save recipe before use",
"section-title": "Section Title",
"recipe-settings": "食谱设置",
"recipe-update-failed": "食谱更新失败",
"recipe-updated": "食谱已更新",
"remove-from-favorites": "从收藏夹中删除",
"remove-section": "删除章节",
"save-recipe-before-use": "使用前保存食谱",
"section-title": "章节标题",
"servings": "份量",
"share-recipe-message": "我想与你分享我的 {0} 配方。",
"show-nutrition-values": "Show Nutrition Values",
"sodium-content": "Sodium",
"show-nutrition-values": "显示营养价值表",
"sodium-content": "",
"step-index": "步骤:{step}",
"sugar-content": "Sugar",
"sugar-content": "",
"title": "标题",
"total-time": "总时间",
"unable-to-delete-recipe": "Unable to Delete Recipe"
"unable-to-delete-recipe": "无法删除食谱"
},
"reicpe": {
"no-recipe": "No Recipe"
"no-recipe": "没有食谱"
},
"search": {
"advanced-search": "Advanced Search",
"and": "and",
"advanced-search": "高级搜索",
"and": "",
"exclude": "排除",
"include": "包括",
"max-results": "最大结果",
"or": "或",
"results": "Results",
"results": "结果",
"search": "搜索",
"search-mealie": "Search Mealie (press /)",
"search-mealie": "搜索Mealie ( /)",
"search-placeholder": "搜索...",
"tag-filter": "标签筛选"
},
@@ -300,25 +300,25 @@
"add-a-new-theme": "新增布景主题",
"admin-settings": "管理设置",
"backup": {
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"backup-created-at-response-export_path": "备份创建于 {path}",
"backup-deleted": "备份已删除",
"backup-tag": "标签备份",
"create-heading": "创建备份",
"delete-backup": "Delete Backup",
"error-creating-backup-see-log-file": "Error Creating Backup. See Log File",
"delete-backup": "删除备份",
"error-creating-backup-see-log-file": "创建备份时出错。请查看日志文件",
"full-backup": "完整备份",
"import-summary": "Import Summary",
"import-summary": "导入摘要",
"partial-backup": "部分备份",
"unable-to-delete-backup": "Unable to Delete Backup."
"unable-to-delete-backup": "无法删除备份"
},
"backup-and-exports": "备份",
"change-password": "更改密码",
"current": "版本号:",
"custom-pages": "自定义页面",
"edit-page": "编辑页面",
"events": "Events",
"first-day-of-week": "First day of the week",
"group-settings-updated": "Group Settings Updated",
"events": "事件",
"first-day-of-week": "每周的起始日",
"group-settings-updated": "群组设置已更新",
"homepage": {
"all-categories": "所有分类",
"card-per-section": "Card的部分",
@@ -329,27 +329,27 @@
"language": "语言",
"latest": "最新版本",
"local-api": "本地API",
"locale-settings": "Locale settings",
"locale-settings": "区域设置",
"migrations": "迁移",
"new-page": "新建页面",
"notify": "Notify",
"organize": "Organize",
"notify": "通知",
"organize": "未分类/未打标签",
"page-name": "页面名称",
"pages": "Pages",
"pages": "页面",
"profile": "用户信息",
"remove-existing-entries-matching-imported-entries": "Remove existing entries matching imported entries",
"remove-existing-entries-matching-imported-entries": "删除与导入条目匹配的现有条目",
"set-new-time": "设定新的时间",
"settings-update-failed": "Settings update failed",
"settings-updated": "Settings updated",
"settings-update-failed": "设置更新失败",
"settings-updated": "设置已更新",
"site-settings": "网站设置",
"theme": {
"accent": "Accent强调",
"dark": "深色",
"default-to-system": "默认为系统",
"error": "Error错误",
"error-creating-theme-see-log-file": "Error creating theme. See log file.",
"error-deleting-theme": "Error deleting theme",
"error-updating-theme": "Error updating theme",
"error-creating-theme-see-log-file": "创建主题时出错。请查看日志文件.",
"error-deleting-theme": "删除主题时出错",
"error-updating-theme": "更新主题时出错",
"info": "Info信息",
"light": "浅色",
"primary": "Primary主要",
@@ -357,31 +357,31 @@
"success": "Success成功",
"switch-to-dark-mode": "切换暗色主题",
"switch-to-light-mode": "切换到亮色模式",
"theme-deleted": "Theme deleted",
"theme-deleted": "主题已删除",
"theme-name": "主题名称",
"theme-name-is-required": "主题名称是必填项。",
"theme-saved": "Theme Saved",
"theme-saved": "主题已保存",
"theme-updated": "主题已更新",
"warning": "Warning警告"
},
"token": {
"active-tokens": "ACTIVE TOKENS",
"api-token": "API Token",
"api-tokens": "API Tokens",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Copy this token for use with an external application. This token will not be viewable again.",
"create-an-api-token": "Create an API Token",
"token-name": "Token Name"
"active-tokens": "当前激活令牌",
"api-token": "API 令牌",
"api-tokens": "API 令牌",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "复制此令牌与外部应用程序一起使用。此令牌将无法再次查看。",
"create-an-api-token": "创建 API 令牌",
"token-name": "令牌名称"
},
"toolbox": {
"assign-all": "Assign All",
"bulk-assign": "Bulk Assign",
"new-name": "New Name",
"no-unused-items": "No Unused Items",
"recipes-affected": "No Recipes Affected|One Recipe Affected|{count} Recipes Affected",
"remove-unused": "Remove Unused",
"title-case-all": "Title Case All",
"toolbox": "Toolbox",
"unorganized": "Unorganized"
"assign-all": "分配所有",
"bulk-assign": "批量操作",
"new-name": "新名称",
"no-unused-items": "没有未使用的项目",
"recipes-affected": "没有配方受影响|只有一个配方受影响|{count} 个配方受影响",
"remove-unused": "删除未使用的",
"title-case-all": "所有字母大写",
"toolbox": "工具箱",
"unorganized": "未分类/未打标签"
},
"webhooks": {
"test-webhooks": "测试Webhooks",
@@ -391,47 +391,47 @@
}
},
"shopping-list": {
"all-lists": "All Lists",
"create-shopping-list": "Create Shopping List",
"from-recipe": "From Recipe",
"list-name": "List Name",
"new-list": "New List",
"quantity": "Quantity: {0}",
"shopping-list": "Shopping List",
"shopping-lists": "Shopping Lists"
"all-lists": "所有购物清单",
"create-shopping-list": "创建购物清单",
"from-recipe": "从食谱创建",
"list-name": "购物清单名称",
"new-list": "创建购物清单",
"quantity": "数量: {0}",
"shopping-list": "购物清单",
"shopping-lists": "购物清单"
},
"sidebar": {
"all-recipes": "All Recipes",
"categories": "Categories",
"dashboard": "Dashboard",
"home-page": "Home Page",
"manage-users": "Manage Users",
"migrations": "Migrations",
"profile": "Profile",
"search": "Search",
"site-settings": "Site Settings",
"tags": "Tags",
"toolbox": "Toolbox"
"all-recipes": "全部食谱",
"categories": "分类",
"dashboard": "仪表盘",
"home-page": "首页",
"manage-users": "管理用户",
"migrations": "迁移",
"profile": "个人资料",
"search": "搜索",
"site-settings": "站点设置",
"tags": "标签",
"toolbox": "工具箱"
},
"signup": {
"error-signing-up": "Error Signing Up",
"sign-up": "Sign Up",
"sign-up-link-created": "Sign up link created",
"sign-up-link-creation-failed": "Sign up link creation failed",
"sign-up-links": "Sign Up Links",
"sign-up-token-deleted": "Sign Up Token Deleted",
"sign-up-token-deletion-failed": "Sign up token deletion failed",
"welcome-to-mealie": "Welcome to Mealie! To become a user of this instance you are required to have a valid invitation link. If you haven't recieved an invitation you are unable to sign-up. To recieve a link, contact the sites administrator."
"error-signing-up": "注册时出错",
"sign-up": "注册用户",
"sign-up-link-created": "已创建注册链接",
"sign-up-link-creation-failed": "注册链接创建失败",
"sign-up-links": "注册链接",
"sign-up-token-deleted": "注册令牌已删除",
"sign-up-token-deletion-failed": "注册令牌删除失败",
"welcome-to-mealie": "欢迎来到Mealie要成为此实例的用户您必须有一个有效的邀请链接。 如果您没有收到邀请,您无法注册。要接收链接,请联系站点管理员。"
},
"tag": {
"tag-created": "Tag created",
"tag-creation-failed": "Tag creation failed",
"tag-deleted": "Tag deleted",
"tag-deletion-failed": "Tag deletion failed",
"tag-update-failed": "Tag update failed",
"tag-updated": "Tag updated",
"tags": "Tags",
"untagged-count": "Untagged {count}"
"tag-created": "标签已创建",
"tag-creation-failed": "标签创建失败",
"tag-deleted": "标签已删除",
"tag-deletion-failed": "标签删除失败",
"tag-update-failed": "标签更新失败",
"tag-updated": "标签已更新",
"tags": "标签",
"untagged-count": "无标签的共 {count}"
},
"user": {
"admin": "管理员",
@@ -447,43 +447,43 @@
"e-mail-must-be-valid": "电子邮件必须有效",
"edit-user": "编辑用户",
"email": "电子邮件",
"error-cannot-delete-super-user": "Error! Cannot Delete Super User",
"existing-password-does-not-match": "Existing password does not match",
"error-cannot-delete-super-user": "错误!无法删除超级用户",
"existing-password-does-not-match": "与现有的密码不匹配",
"full-name": "全名",
"link-id": "链接ID",
"link-name": "链接名",
"login": "登录",
"logout": "登出",
"manage-users": "Manage Users",
"manage-users": "管理用户",
"new-password": "新密码",
"new-user": "新建用户",
"password": "密码",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
"password-has-been-reset-to-the-default-password": "密码已被重置为默认密码",
"password-must-match": "密码必须一致",
"password-reset-failed": "Password reset failed",
"password-updated": "Password updated",
"password-reset-failed": "密码重置失败",
"password-updated": "密码已更新",
"reset-password": "重置密码",
"sign-in": "登入",
"total-mealplans": "总用餐计划",
"total-users": "用户总数",
"upload-photo": "上传照片",
"use-8-characters-or-more-for-your-password": "请设置密码字符为8个或更多",
"user": "User",
"user-created": "User created",
"user-creation-failed": "User creation failed",
"user-deleted": "User deleted",
"user": "用户",
"user-created": "用户已创建",
"user-creation-failed": "用户创建失败",
"user-deleted": "用户已删除",
"user-id": "用户ID",
"user-id-with-value": "用户ID: {id}",
"user-password": "用户密码",
"user-successfully-logged-in": "User Successfully Logged In",
"user-update-failed": "User update failed",
"user-updated": "User updated",
"username": "Username",
"user-successfully-logged-in": "用户登录成功",
"user-update-failed": "用户更新失败",
"user-updated": "用户已更新",
"username": "用户名",
"users": "用户",
"users-header": "USERS",
"users-header": "用户",
"webhook-time": "Webhook时间",
"webhooks-enabled": "Webhooks 启用",
"you-are-not-allowed-to-create-a-user": "You are not allowed to create a user",
"you-are-not-allowed-to-delete-this-user": "You are not allowed to delete this user"
"you-are-not-allowed-to-create-a-user": "您无权创建用户",
"you-are-not-allowed-to-delete-this-user": "您无权删除此用户"
}
}

View File

@@ -1,182 +1,182 @@
{
"about": {
"about": "About",
"about-mealie": "About Mealie",
"api-docs": "API Docs",
"api-port": "API Port",
"application-mode": "Application Mode",
"database-type": "Database Type",
"database-url": "Database URL",
"default-group": "Default Group",
"demo": "Demo",
"demo-status": "Demo Status",
"development": "Development",
"docs": "Docs",
"download-log": "Download Log",
"download-recipe-json": "Last Scraped JSON",
"github": "Github",
"log-lines": "Log Lines",
"not-demo": "Not Demo",
"portfolio": "Portfolio",
"production": "Production",
"support": "Support",
"version": "Version"
"about": "關於",
"about-mealie": "關於Mealie",
"api-docs": "API 文件",
"api-port": "API 埠號",
"application-mode": "軟體模式",
"database-type": "資料庫類型",
"database-url": "資料庫網址",
"default-group": "預設群組",
"demo": "展示",
"demo-status": "展示狀態",
"development": "開發版",
"docs": "文件",
"download-log": "下載日誌",
"download-recipe-json": "上次網頁擷取的JSON",
"github": "GitHub",
"log-lines": "日誌行數",
"not-demo": "非展示",
"portfolio": "個人檔案",
"production": "正式版",
"support": "支持",
"version": "版本"
},
"asset": {
"assets": "Assets",
"code": "Code",
"file": "File",
"image": "Image",
"new-asset": "New Asset",
"assets": "資源",
"code": "程式碼",
"file": "檔案",
"image": "圖片",
"new-asset": "新增資源",
"pdf": "PDF",
"recipe": "Recipe",
"show-assets": "Show Assets"
"recipe": "食譜",
"show-assets": "顯示資源"
},
"category": {
"category-created": "Category created",
"category-creation-failed": "Category creation failed",
"category-deleted": "Category Deleted",
"category-deletion-failed": "Category deletion failed",
"category-filter": "Category Filter",
"category-update-failed": "Category update failed",
"category-updated": "Category updated",
"uncategorized-count": "Uncategorized {count}"
"category-created": "類別已新增",
"category-creation-failed": "新增類別失敗",
"category-deleted": "類別已刪除",
"category-deletion-failed": "類別刪除失敗",
"category-filter": "類別篩選",
"category-update-failed": "類別更新失敗",
"category-updated": "類別已更新",
"uncategorized-count": "未分類 {count}"
},
"events": {
"apprise-url": "Apprise URL",
"database": "Database",
"delete-event": "Delete Event",
"new-notification-form-description": "Mealie uses the Apprise library to generate notifications. They offer many options for services to use for notifications. Refer to their wiki for a comprehensive guide on how to create the URL for your service. If available, selecting the type of your notification may include extra features.",
"new-version": "New version available!",
"notification": "Notification",
"refresh": "Refresh",
"scheduled": "Scheduled",
"something-went-wrong": "Something Went Wrong!",
"subscribed-events": "Subscribed Events",
"test-message-sent": "Test Message Sent"
"apprise-url": "Apprise連結",
"database": "資料庫",
"delete-event": "删除事件",
"new-notification-form-description": "Mealie使用Apprise來產生通知。他們提供多種選項給服務來使用通知。請參考他們wiki上關於如何為你的服務新建一個連結的詳細指引。若選擇通知的種類可能會包含額外的功能。",
"new-version": "有可用的新版本!",
"notification": "通知",
"refresh": "重新整理",
"scheduled": "已排程",
"something-went-wrong": "出了點問題...",
"subscribed-events": "關注的事件",
"test-message-sent": "測試訊息已發送"
},
"general": {
"cancel": "取消",
"clear": "Clear",
"clear": "清除",
"close": "關閉",
"confirm": "確定",
"confirm-delete-generic": "Are you sure you want to delete this?",
"copied": "Copied",
"confirm-delete-generic": "您確定要刪除這個嗎?",
"copied": "已複製",
"create": "創建",
"created": "Created",
"custom": "Custom",
"dashboard": "Dashboard",
"created": "已建立",
"custom": "自訂",
"dashboard": "控制面板",
"delete": "删除",
"disabled": "Disabled",
"disabled": "已停用",
"download": "下载",
"edit": "编辑",
"enabled": "用",
"exception": "Exception",
"failed-count": "Failed: {count}",
"failure-uploading-file": "Failure uploading file",
"favorites": "Favorites",
"field-required": "Field Required",
"file-folder-not-found": "File/folder not found",
"file-uploaded": "File uploaded",
"filter": "Filter",
"friday": "Friday",
"general": "General",
"get": "Get",
"home": "Home",
"image": "Image",
"image-upload-failed": "Image upload failed",
"import": "入",
"enabled": "已啟用",
"exception": "錯誤",
"failed-count": "失敗: {count}",
"failure-uploading-file": "上傳檔案失敗",
"favorites": "最愛",
"field-required": "必填欄位",
"file-folder-not-found": "找不到檔案/資料夾",
"file-uploaded": "檔案已上傳",
"filter": "篩選",
"friday": "星期五",
"general": "一般",
"get": "獲取",
"home": "主頁",
"image": "圖片",
"image-upload-failed": "圖片上傳失敗",
"import": "入",
"json": "JSON",
"keyword": "Keyword",
"link-copied": "Link Copied",
"loading-recipes": "Loading Recipes",
"monday": "Monday",
"keyword": "關鍵字",
"link-copied": "已複製連結",
"loading-recipes": "載入食譜中",
"monday": "星期一",
"name": "名稱",
"new": "New",
"no": "No",
"no-recipe-found": "No Recipe Found",
"new": "新增",
"no": "",
"no-recipe-found": "找不到食譜",
"ok": "好的",
"options": "Options:",
"print": "Print",
"options": "選項:",
"print": "列印",
"random": "隨機",
"rating": "Rating",
"recent": "Recent",
"recipe": "Recipe",
"rating": "評價",
"recent": "最近",
"recipe": "食譜",
"recipes": "食譜",
"rename-object": "Rename {0}",
"reset": "Reset",
"saturday": "Saturday",
"rename-object": "重新命名 {0}",
"reset": "重設",
"saturday": "星期六",
"save": "保存",
"settings": "設定",
"share": "Share",
"shuffle": "Shuffle",
"sort": "Sort",
"sort-alphabetically": "Alphabetical",
"status": "Status",
"share": "分享",
"shuffle": "隨機",
"sort": "排序",
"sort-alphabetically": "按字母順序",
"status": "狀態",
"submit": "提交",
"success-count": "Success: {count}",
"sunday": "Sunday",
"templates": "Templates:",
"test": "Test",
"success-count": "成功: {count}",
"sunday": "星期日",
"templates": "範本",
"test": "測試",
"themes": "佈景主題",
"thursday": "Thursday",
"token": "Token",
"tuesday": "Tuesday",
"type": "Type",
"thursday": "星期四",
"token": "密鑰",
"tuesday": "星期二",
"type": "類型",
"update": "更新",
"updated": "Updated",
"updated": "已更新",
"upload": "上傳",
"url": "URL",
"view": "View",
"wednesday": "Wednesday",
"yes": "Yes"
"url": "網址",
"view": "檢視",
"wednesday": "星期三",
"yes": ""
},
"group": {
"are-you-sure-you-want-to-delete-the-group": "Are you sure you want to delete <b>{groupName}<b/>?",
"cannot-delete-default-group": "Cannot delete default group",
"cannot-delete-group-with-users": "Cannot delete group with users",
"confirm-group-deletion": "Confirm Group Deletion",
"create-group": "Create Group",
"error-updating-group": "Error updating group",
"group": "Group",
"group-deleted": "Group deleted",
"group-deletion-failed": "Group deletion failed",
"group-id-with-value": "Group ID: {groupID}",
"group-name": "Group Name",
"group-not-found": "Group not found",
"group-with-value": "Group: {groupID}",
"groups": "Groups",
"manage-groups": "Manage Groups",
"user-group": "User Group",
"user-group-created": "User Group Created",
"user-group-creation-failed": "User Group Creation Failed"
"are-you-sure-you-want-to-delete-the-group": "確定要刪除<b>{groupName}<b/>",
"cannot-delete-default-group": "無法刪除預設群組",
"cannot-delete-group-with-users": "無法刪除含用戶的群組",
"confirm-group-deletion": "確認刪除群組",
"create-group": "新增群組",
"error-updating-group": "更新群組失敗",
"group": "群組",
"group-deleted": "群組已刪除",
"group-deletion-failed": "群組刪除失敗",
"group-id-with-value": "群組 ID: {groupID}",
"group-name": "群組名稱",
"group-not-found": "找不到該群組",
"group-with-value": "群組: {groupID}",
"groups": "群組",
"manage-groups": "管理群組",
"user-group": "用户群组",
"user-group-created": "用戶群組已建立",
"user-group-creation-failed": "用戶群組建立失敗"
},
"meal-plan": {
"create-a-new-meal-plan": "創建一個新的用餐計劃",
"dinner-this-week": "本週晚餐",
"dinner-today": "今日晚餐",
"dinner-tonight": "DINNER TONIGHT",
"dinner-tonight": "今晚晚餐",
"edit-meal-plan": "編輯用餐計劃",
"end-date": "結束日期",
"group": "Group (Beta)",
"main": "Main",
"meal-planner": "Meal Planner",
"group": "群組 (Beta)",
"main": "主菜",
"meal-planner": "用餐規劃師",
"meal-plans": "用餐計劃",
"mealplan-categories": "MEALPLAN CATEGORIES",
"mealplan-created": "Mealplan created",
"mealplan-creation-failed": "Mealplan creation failed",
"mealplan-deleted": "Mealplan Deleted",
"mealplan-deletion-failed": "Mealplan deletion failed",
"mealplan-settings": "Mealplan Settings",
"mealplan-update-failed": "Mealplan update failed",
"mealplan-updated": "Mealplan Updated",
"no-meal-plan-defined-yet": "No meal plan defined yet",
"no-meal-planned-for-today": "No meal planned for today",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans",
"planner": "策劃人",
"quick-week": "Quick Week",
"side": "Side",
"sides": "Sides",
"mealplan-categories": "用餐計劃類別",
"mealplan-created": "用餐計劃已創建",
"mealplan-creation-failed": "用餐計畫創建失敗",
"mealplan-deleted": "用餐計劃已刪除",
"mealplan-deletion-failed": "用餐計劃刪除失敗",
"mealplan-settings": "用餐計劃設定",
"mealplan-update-failed": "用餐計劃更新失敗",
"mealplan-updated": "用餐計劃已更新",
"no-meal-plan-defined-yet": "目前無用餐計畫",
"no-meal-planned-for-today": "本日無用餐計畫",
"only-recipes-with-these-categories-will-be-used-in-meal-plans": "只有屬於這些類別的食譜會被用於用餐計畫",
"planner": "規劃師",
"quick-week": "快速規劃",
"side": "配菜",
"sides": "配菜",
"start-date": "開始日期"
},
"migration": {
@@ -184,204 +184,204 @@
"description": "從Chowdown遷移數據",
"title": "Chowdown"
},
"migration-data-removed": "Migration data removed",
"migration-data-removed": "遷移數據已刪除",
"nextcloud": {
"description": "Migrate data from a Nextcloud Cookbook instance",
"description": "Nextcloud Cookbook遷移數據",
"title": "Nextcloud Cookbook"
},
"no-migration-data-available": "No Migration Data Available",
"no-migration-data-available": "無遷移數據可用",
"recipe-migration": "食譜遷移"
},
"new-recipe": {
"bulk-add": "批量添加",
"error-details": "Only websites containing ld+json or microdata can be imported by Mealie. Most major recipe websites support this data structure. If your site cannot be imported but there is json data in the log, please submit a github issue with the URL and data.",
"error-title": "Looks Like We Couldn't Find Anything",
"from-url": "輸入網址",
"error-details": "只有包含ID+JSON或microdata的網站能夠被Mealie匯入。多數大型食譜網站都支援這種資料結構。如果您的網站無法被匯入但是日誌中含有JSON資料請提交一個GitHub issue並附上連結及資料。",
"error-title": "看起來我們找不到任何東西",
"from-url": "匯入食譜",
"github-issues": "GitHub Issues",
"google-ld-json-info": "Google ld+json Info",
"must-be-a-valid-url": "Must be a Valid URL",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "請貼您的食譜資料。每行將被視為列表中的一項。",
"recipe-markup-specification": "Recipe Markup Specification",
"google-ld-json-info": "Google ID + JSON訊息",
"must-be-a-valid-url": "必須為有效的連結",
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "請貼您的食譜資料。每行將被視為清單中的一項。",
"recipe-markup-specification": "食譜標記標準",
"recipe-url": "食譜網址",
"upload-a-recipe": "Upload a Recipe",
"upload-individual-zip-file": "Upload an individual .zip file exported from another Mealie instance.",
"url-form-hint": "Copy and paste a link from your favorite recipe website",
"view-scraped-data": "View Scraped Data"
"upload-a-recipe": "上傳食譜",
"upload-individual-zip-file": "上傳從另一個Mealie匯出的zip壓縮檔",
"url-form-hint": "複製您最喜歡的食譜網站的網址並在此貼上",
"view-scraped-data": "查看網頁擷取資料"
},
"page": {
"404-page-not-found": "404 Page not found",
"all-recipes": "All Recipes",
"new-page-created": "New page created",
"page": "Page",
"page-creation-failed": "Page creation failed",
"page-deleted": "Page deleted",
"page-deletion-failed": "Page deletion failed",
"page-update-failed": "Page update failed",
"page-updated": "Page updated",
"pages-update-failed": "Pages update failed",
"pages-updated": "Pages updated"
"404-page-not-found": "404 找不到頁面",
"all-recipes": "所有食譜",
"new-page-created": "新頁面以創建",
"page": "頁面",
"page-creation-failed": "創建頁面失敗",
"page-deleted": "頁面已刪除",
"page-deletion-failed": "頁面刪除失敗",
"page-update-failed": "頁面更新失敗",
"page-updated": "頁面已更新",
"pages-update-failed": "頁面更新失敗",
"pages-updated": "頁面已更新"
},
"recipe": {
"add-key": "Add Key",
"add-to-favorites": "Add to Favorites",
"api-extras": "API Extras",
"calories": "Calories",
"calories-suffix": "calories",
"carbohydrate-content": "Carbohydrate",
"categories": "分類目錄",
"comment-action": "Comment",
"comments": "Comments",
"add-key": "新增密鑰",
"add-to-favorites": "添加到我的最愛",
"api-extras": "API 更多",
"calories": "卡路里",
"calories-suffix": "卡路里",
"carbohydrate-content": "碳水化合物",
"categories": "類別",
"comment-action": "留言",
"comments": "留言",
"delete-confirmation": "您確定要刪除此食譜嗎?",
"delete-recipe": "刪除食譜",
"description": "描述",
"disable-amount": "Disable Ingredient Amounts",
"disable-comments": "Disable Comments",
"fat-content": "Fat",
"fiber-content": "Fiber",
"grams": "grams",
"ingredient": "材",
"ingredients": "材",
"insert-section": "Insert Section",
"disable-amount": "停用成分數量",
"disable-comments": "關閉留言",
"fat-content": "脂肪",
"fiber-content": "纖維",
"grams": "",
"ingredient": "材",
"ingredients": "材",
"insert-section": "插入段落",
"instructions": "做法",
"key-name-required": "Key Name Required",
"landscape-view-coming-soon": "Landscape View (Coming Soon)",
"milligrams": "milligrams",
"new-key-name": "New Key Name",
"no-white-space-allowed": "No White Space Allowed",
"note": "貼士",
"nutrition": "Nutrition",
"object-key": "Object Key",
"object-value": "Object Value",
"original-url": "原食譜鏈接",
"perform-time": "烹飪時間 / 執行時間",
"key-name-required": "鍵名不可為空",
"landscape-view-coming-soon": "橫式畫面(即將推出)",
"milligrams": "毫克",
"new-key-name": "新密鑰名稱",
"no-white-space-allowed": "不允許有空格",
"note": "備註",
"nutrition": "營養成分",
"object-key": "",
"object-value": "",
"original-url": "原食譜網址",
"perform-time": "烹飪時間",
"prep-time": "準備時間",
"protein-content": "Protein",
"public-recipe": "Public Recipe",
"recipe-created": "Recipe created",
"recipe-creation-failed": "Recipe creation failed",
"recipe-deleted": "Recipe deleted",
"recipe-image": "Recipe Image",
"recipe-image-updated": "Recipe image updated",
"protein-content": "蛋白質",
"public-recipe": "公開食譜",
"recipe-created": "食譜已建立",
"recipe-creation-failed": "食譜建立失敗",
"recipe-deleted": "食譜已刪除",
"recipe-image": "食譜封面",
"recipe-image-updated": "食譜封面已更新",
"recipe-name": "食譜名稱",
"recipe-settings": "Recipe Settings",
"recipe-update-failed": "Recipe update failed",
"recipe-updated": "Recipe updated",
"remove-from-favorites": "Remove from Favorites",
"remove-section": "Remove Section",
"save-recipe-before-use": "Save recipe before use",
"section-title": "Section Title",
"recipe-settings": "食譜設定",
"recipe-update-failed": "食譜更新失敗",
"recipe-updated": "食譜已更新",
"remove-from-favorites": "從我的最愛中删除",
"remove-section": "刪除段落",
"save-recipe-before-use": "使用食譜前先儲存",
"section-title": "段落標題",
"servings": "份量",
"share-recipe-message": "I wanted to share my {0} recipe with you.",
"show-nutrition-values": "Show Nutrition Values",
"sodium-content": "Sodium",
"share-recipe-message": "我想跟你分享我的 {0} 個食譜。",
"show-nutrition-values": "顯示營養含量",
"sodium-content": "",
"step-index": "步驟:{step}",
"sugar-content": "Sugar",
"sugar-content": "",
"title": "標題",
"total-time": "總時間",
"unable-to-delete-recipe": "Unable to Delete Recipe"
"unable-to-delete-recipe": "無法刪除食譜"
},
"reicpe": {
"no-recipe": "No Recipe"
"no-recipe": "無食譜"
},
"search": {
"advanced-search": "Advanced Search",
"and": "and",
"exclude": "Exclude",
"include": "Include",
"max-results": "Max Results",
"or": "Or",
"results": "Results",
"search": "Search",
"search-mealie": "Search Mealie (press /)",
"search-placeholder": "Search...",
"tag-filter": "Tag Filter"
"advanced-search": "進階搜尋",
"and": "",
"exclude": "排除",
"include": "包含",
"max-results": "最多結果",
"or": "",
"results": "結果",
"search": "搜尋",
"search-mealie": "搜尋Mealie ( /)",
"search-placeholder": "搜尋...",
"tag-filter": "標簽篩選"
},
"settings": {
"add-a-new-theme": "新增佈景主題",
"admin-settings": "Admin Settings",
"admin-settings": "管理員設置",
"backup": {
"backup-created-at-response-export_path": "Backup Created at {path}",
"backup-deleted": "Backup deleted",
"backup-tag": "標籤備份",
"backup-created-at-response-export_path": "已備份於:{path}",
"backup-deleted": "備份已刪除",
"backup-tag": "備份標籤",
"create-heading": "創建備份",
"delete-backup": "Delete Backup",
"error-creating-backup-see-log-file": "Error Creating Backup. See Log File",
"delete-backup": "刪除備份",
"error-creating-backup-see-log-file": "備份失敗。請查看日誌檔案。",
"full-backup": "完整備份",
"import-summary": "Import Summary",
"import-summary": "匯入總結",
"partial-backup": "部分備份",
"unable-to-delete-backup": "Unable to Delete Backup."
"unable-to-delete-backup": "無法刪除備份"
},
"backup-and-exports": "備份",
"change-password": "Change Password",
"change-password": "變更密碼",
"current": "版本號:",
"custom-pages": "Custom Pages",
"edit-page": "Edit Page",
"events": "Events",
"first-day-of-week": "First day of the week",
"group-settings-updated": "Group Settings Updated",
"custom-pages": "自訂頁面",
"edit-page": "編輯頁面",
"events": "事件",
"first-day-of-week": "一週的起始日",
"group-settings-updated": "群組設定已更新",
"homepage": {
"all-categories": "All Categories",
"card-per-section": "Card Per Section",
"home-page": "Home Page",
"home-page-sections": "Home Page Sections",
"show-recent": "Show Recent"
"all-categories": "所有類別",
"card-per-section": "每個段落卡片數量",
"home-page": "首頁",
"home-page-sections": "首頁區塊",
"show-recent": "顯示最近更新"
},
"language": "語言",
"latest": "最新版本:",
"local-api": "Local API",
"locale-settings": "Locale settings",
"migrations": "Migrations",
"new-page": "New Page",
"notify": "Notify",
"organize": "Organize",
"page-name": "Page Name",
"pages": "Pages",
"profile": "Profile",
"remove-existing-entries-matching-imported-entries": "Remove existing entries matching imported entries",
"local-api": "本地API",
"locale-settings": "語言設定",
"migrations": "遷移",
"new-page": "新頁面",
"notify": "通知",
"organize": "整理",
"page-name": "頁面名稱",
"pages": "頁面",
"profile": "個人資料",
"remove-existing-entries-matching-imported-entries": "移除和匯入項目相同的現有項目",
"set-new-time": "設定新的時間",
"settings-update-failed": "Settings update failed",
"settings-updated": "Settings updated",
"site-settings": "Site Settings",
"settings-update-failed": "設定更新失敗",
"settings-updated": "設定已更新",
"site-settings": "網站設定",
"theme": {
"accent": "強調Accent",
"accent": "重點色彩",
"dark": "深色",
"default-to-system": "默認爲系統",
"error": "錯誤Error",
"error-creating-theme-see-log-file": "Error creating theme. See log file.",
"error-deleting-theme": "Error deleting theme",
"error-updating-theme": "Error updating theme",
"info": "信息Info",
"error": "錯誤",
"error-creating-theme-see-log-file": "創建佈景主題失敗。請查看日誌檔案。",
"error-deleting-theme": "刪除佈景主題失敗",
"error-updating-theme": "更新佈景主題失敗",
"info": "訊息",
"light": "淺色",
"primary": "主要Primary",
"secondary": "次要Secondary",
"success": "成功Success",
"switch-to-dark-mode": "Switch to dark mode",
"switch-to-light-mode": "Switch to light mode",
"theme-deleted": "Theme deleted",
"primary": "主要",
"secondary": "次要",
"success": "成功",
"switch-to-dark-mode": "切換至深色模式",
"switch-to-light-mode": "切換至淺色模式",
"theme-deleted": "佈景主題已刪除",
"theme-name": "主題名稱",
"theme-name-is-required": "主題名稱必填項。",
"theme-saved": "Theme Saved",
"theme-updated": "Theme updated",
"warning": "警告Warning"
"theme-name-is-required": "主題名稱必填",
"theme-saved": "佈景主題已保存",
"theme-updated": "佈景主題已更新",
"warning": "警告"
},
"token": {
"active-tokens": "ACTIVE TOKENS",
"api-token": "API Token",
"api-tokens": "API Tokens",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "Copy this token for use with an external application. This token will not be viewable again.",
"create-an-api-token": "Create an API Token",
"token-name": "Token Name"
"active-tokens": "使用中的密鑰",
"api-token": "API 密鑰",
"api-tokens": "API 密鑰",
"copy-this-token-for-use-with-an-external-application-this-token-will-not-be-viewable-again": "複製此密鑰用於外部應用程式。這個密鑰將無法再次查看。",
"create-an-api-token": "新增 API 密鑰",
"token-name": "密鑰名稱"
},
"toolbox": {
"assign-all": "Assign All",
"bulk-assign": "Bulk Assign",
"new-name": "New Name",
"no-unused-items": "No Unused Items",
"recipes-affected": "No Recipes Affected|One Recipe Affected|{count} Recipes Affected",
"remove-unused": "Remove Unused",
"title-case-all": "Title Case All",
"toolbox": "Toolbox",
"unorganized": "Unorganized"
"assign-all": "標記所有",
"bulk-assign": "批量標記",
"new-name": "新名稱",
"no-unused-items": "沒有未使用的項目",
"recipes-affected": "無食譜受影響|1 個食譜受影響|{count} 個食譜受影響",
"remove-unused": "清除未使用的",
"title-case-all": "更改為大寫字母",
"toolbox": "工具箱",
"unorganized": "未分類的"
},
"webhooks": {
"test-webhooks": "測試Webhooks",
@@ -391,99 +391,99 @@
}
},
"shopping-list": {
"all-lists": "All Lists",
"create-shopping-list": "Create Shopping List",
"from-recipe": "From Recipe",
"list-name": "List Name",
"new-list": "New List",
"quantity": "Quantity: {0}",
"shopping-list": "Shopping List",
"shopping-lists": "Shopping Lists"
"all-lists": "所有清單",
"create-shopping-list": "建立購物清單",
"from-recipe": "從食譜",
"list-name": "清單名稱",
"new-list": "新增清單",
"quantity": "數量: {0}",
"shopping-list": "購物清單",
"shopping-lists": "購物清單"
},
"sidebar": {
"all-recipes": "All Recipes",
"categories": "Categories",
"dashboard": "Dashboard",
"home-page": "Home Page",
"manage-users": "Manage Users",
"migrations": "Migrations",
"profile": "Profile",
"search": "Search",
"site-settings": "Site Settings",
"tags": "Tags",
"toolbox": "Toolbox"
"all-recipes": "所有食譜",
"categories": "類別",
"dashboard": "控制面板",
"home-page": "首頁",
"manage-users": "管理使用者",
"migrations": "遷移",
"profile": "個人資料",
"search": "搜尋",
"site-settings": "網站設置",
"tags": "標籤",
"toolbox": "工具箱"
},
"signup": {
"error-signing-up": "Error Signing Up",
"sign-up": "Sign Up",
"sign-up-link-created": "Sign up link created",
"sign-up-link-creation-failed": "Sign up link creation failed",
"sign-up-links": "Sign Up Links",
"sign-up-token-deleted": "Sign Up Token Deleted",
"sign-up-token-deletion-failed": "Sign up token deletion failed",
"welcome-to-mealie": "Welcome to Mealie! To become a user of this instance you are required to have a valid invitation link. If you haven't recieved an invitation you are unable to sign-up. To recieve a link, contact the sites administrator."
"error-signing-up": "註冊失敗",
"sign-up": "註冊",
"sign-up-link-created": "註冊連結已創建",
"sign-up-link-creation-failed": "創建註冊連結失敗",
"sign-up-links": "註冊連結",
"sign-up-token-deleted": "註冊密鑰已刪除",
"sign-up-token-deletion-failed": "註冊密鑰刪除失敗",
"welcome-to-mealie": "歡迎來到Mealie您必須持有一個有效的邀請連結才能成為此應用的用戶。如果尚未獲得邀請您將無法註冊。請聯繫管理員來獲得邀請連結。"
},
"tag": {
"tag-created": "Tag created",
"tag-creation-failed": "Tag creation failed",
"tag-deleted": "Tag deleted",
"tag-deletion-failed": "Tag deletion failed",
"tag-update-failed": "Tag update failed",
"tag-updated": "Tag updated",
"tags": "Tags",
"untagged-count": "Untagged {count}"
"tag-created": "標籤已創建",
"tag-creation-failed": "創建標籤失敗",
"tag-deleted": "標籤已刪除",
"tag-deletion-failed": "標籤刪除失敗",
"tag-update-failed": "標籤更新失敗",
"tag-updated": "標籤已更新",
"tags": "標籤",
"untagged-count": "為標記的 {count}"
},
"user": {
"admin": "Admin",
"are-you-sure-you-want-to-delete-the-link": "Are you sure you want to delete the link <b>{link}<b/>?",
"are-you-sure-you-want-to-delete-the-user": "Are you sure you want to delete the user <b>{activeName} ID: {activeId}<b/>?",
"confirm-link-deletion": "Confirm Link Deletion",
"confirm-password": "Confirm Password",
"confirm-user-deletion": "Confirm User Deletion",
"could-not-validate-credentials": "Could Not Validate Credentials",
"create-link": "Create Link",
"create-user": "Create User",
"current-password": "Current Password",
"e-mail-must-be-valid": "E-mail must be valid",
"edit-user": "Edit User",
"admin": "管理員",
"are-you-sure-you-want-to-delete-the-link": "確定要刪除連結<b>{link}<b/>",
"are-you-sure-you-want-to-delete-the-user": "確定要刪除用戶<b>{activeName} ID: {activeId}<b/>",
"confirm-link-deletion": "確認刪除連結",
"confirm-password": "確認密碼",
"confirm-user-deletion": "確認刪除用戶",
"could-not-validate-credentials": "無法認證密碼",
"create-link": "建立連結",
"create-user": "新增使用者",
"current-password": "目前密碼",
"e-mail-must-be-valid": "電子郵件無效",
"edit-user": "編輯用戶",
"email": "電子郵件",
"error-cannot-delete-super-user": "Error! Cannot Delete Super User",
"existing-password-does-not-match": "Existing password does not match",
"full-name": "Full Name",
"link-id": "Link ID",
"link-name": "Link Name",
"login": "Login",
"logout": "Logout",
"manage-users": "Manage Users",
"new-password": "New Password",
"new-user": "New User",
"error-cannot-delete-super-user": "錯誤!無法刪除管理員帳戶",
"existing-password-does-not-match": "舊密碼不正確",
"full-name": "全名",
"link-id": "連結ID",
"link-name": "連結名稱",
"login": "登入",
"logout": "登出",
"manage-users": "管理使用者",
"new-password": "新密碼",
"new-user": "新用戶",
"password": "密碼",
"password-has-been-reset-to-the-default-password": "Password has been reset to the default password",
"password-must-match": "Password must match",
"password-reset-failed": "Password reset failed",
"password-updated": "Password updated",
"reset-password": "Reset Password",
"password-has-been-reset-to-the-default-password": "密碼重設為預設密碼",
"password-must-match": "輸入的密碼必須完全相同",
"password-reset-failed": "密碼重設失敗",
"password-updated": "密碼已更新",
"reset-password": "重設密碼",
"sign-in": "登入",
"total-mealplans": "Total MealPlans",
"total-users": "Total Users",
"upload-photo": "Upload Photo",
"use-8-characters-or-more-for-your-password": "Use 8 characters or more for your password",
"user": "User",
"user-created": "User created",
"user-creation-failed": "User creation failed",
"user-deleted": "User deleted",
"user-id": "User ID",
"user-id-with-value": "User ID: {id}",
"user-password": "User Password",
"user-successfully-logged-in": "User Successfully Logged In",
"user-update-failed": "User update failed",
"user-updated": "User updated",
"username": "Username",
"users": "Users",
"users-header": "USERS",
"webhook-time": "Webhook Time",
"webhooks-enabled": "Webhooks Enabled",
"you-are-not-allowed-to-create-a-user": "You are not allowed to create a user",
"you-are-not-allowed-to-delete-this-user": "You are not allowed to delete this user"
"total-mealplans": "用餐計畫總數",
"total-users": "用戶總數",
"upload-photo": "上傳照片",
"use-8-characters-or-more-for-your-password": "請使用8個字母以上的密碼",
"user": "用戶",
"user-created": "用戶已建立",
"user-creation-failed": "新增用戶失敗",
"user-deleted": "用戶已刪除",
"user-id": "用戶 ID",
"user-id-with-value": "用戶 ID: {id}",
"user-password": "用戶密碼",
"user-successfully-logged-in": "成功登入",
"user-update-failed": "用戶更新失敗",
"user-updated": "用戶已更新",
"username": "用戶名",
"users": "用戶",
"users-header": "用戶",
"webhook-time": "Webhook時間",
"webhooks-enabled": "Webhooks 啟用",
"you-are-not-allowed-to-create-a-user": "您沒有權限新增用戶",
"you-are-not-allowed-to-delete-this-user": "您沒有權限刪除此用戶"
}
}

View File

@@ -5,6 +5,7 @@
</v-card>
<NoRecipe v-else-if="loadFailed" />
<v-card v-else-if="!loadFailed" id="myRecipe" class="d-print-none">
<a :href="getImage(recipeDetails.slug)">
<v-img
:height="hideImage ? '50' : imageHeight"
@error="hideImage = true"
@@ -19,6 +20,7 @@
:performTime="recipeDetails.performTime"
/>
</v-img>
</a>
<RecipePageActionMenu
:slug="recipeDetails.slug"
:name="recipeDetails.name"

View File

@@ -70,7 +70,7 @@
<div v-if="edit">
<v-btn x-small text class="ml-1" @click="activeList.items[index].quantity -= 1">
<v-icon>
{{ $globals.icons.mdiMinus }}
{{ $globals.icons.minus }}
</v-icon>
</v-btn>
<v-btn x-small text class="mr-1" @click="activeList.items[index].quantity += 1">

View File

@@ -3,15 +3,21 @@ import Vuetify from "vuetify/lib";
Vue.use(Vuetify);
import ca from "vuetify/es5/locale/ca";
import de from "vuetify/es5/locale/de";
import en from "vuetify/es5/locale/en";
import es from "vuetify/es5/locale/es";
import fr from "vuetify/es5/locale/fr";
import hu from "vuetify/es5/locale/hu";
import it from "vuetify/es5/locale/it";
import nl from "vuetify/es5/locale/nl";
import no from "vuetify/es5/locale/no";
import pl from "vuetify/es5/locale/pl";
import ru from "vuetify/es5/locale/ru";
import sk from "vuetify/es5/locale/sk";
import sv from "vuetify/es5/locale/sv";
import zhHans from "vuetify/es5/locale/zh-Hans";
import zhHant from "vuetify/es5/locale/zh-Hant";
const vuetify = new Vuetify({
theme: {
@@ -41,16 +47,23 @@ const vuetify = new Vuetify({
},
lang: {
locales: {
"ca-ES": ca,
"da-DK": en, // language not supported by Vuetify
"de-DE": de,
"en-US": en,
"en-GB": en,
"es-ES": es,
"fr-FR": fr,
"hu-HU": hu,
"it-IT": it,
"nl-NL": nl,
"no-NO": no,
"pl-PL": pl,
"ru-RU": ru,
"sk-SK": sk,
"sv-SE": sv,
"zh-CN": zhHans,
"zh-TW": zhHant,
},
current: "en-US",
},

View File

@@ -9,6 +9,14 @@ const state = {
name: "British English",
value: "en-GB",
},
{
name: "Català (Catalan)",
value: "ca-ES",
},
{
name: "Dansk (Danish)",
value: "da-DK",
},
{
name: "Deutsch (German)",
value: "de-DE",
@@ -21,10 +29,18 @@ const state = {
name: "Français (French)",
value: "fr-FR",
},
{
name: "Magyar (Hungarian)",
value: "hu-HU",
},
{
name: "Italiano (Italian)",
value: "it-IT",
},
{
name: "Norsk (Norwegian)",
value: "no-NO",
},
{
name: "Nederlands (Dutch)",
value: "nl-NL",
@@ -33,6 +49,14 @@ const state = {
name: "Polski (Polish)",
value: "pl-PL",
},
{
name: "Pусский (Russian)",
value: "ru-RU",
},
{
name: "Slovenčina (Slovak)",
value: "sk-SK",
},
{
name: "Svenska (Swedish)",
value: "sv-SE",
@@ -41,6 +65,10 @@ const state = {
name: "简体中文 (Chinese simplified)",
value: "zh-CN",
},
{
name: "繁體中文 (Chinese traditional)",
value: "zh-TW",
},
],
};

View File

@@ -21,8 +21,8 @@ class GunicornConfig:
self.timeout = int(os.getenv("TIMEOUT", "120"))
self.keepalive = int(os.getenv("KEEP_ALIVE", "5"))
self.workers_per_core = float(os.getenv("WORKERS_PER_CORE", "1"))
self.web_concurrency_str: str = os.getenv("WEB_CONCURRENCY", None)
self.max_workers_str: str = os.getenv("MAX_WORKERS", None)
self.web_concurrency_str: str = os.getenv("WEB_CONCURRENCY", "1")
self.max_workers_str: str = os.getenv("MAX_WORKERS", "1")
# Computed Variables
self.cores = multiprocessing.cpu_count()

View File

@@ -6,7 +6,7 @@ from typing import Any, Optional, Union
import dotenv
from pydantic import BaseSettings, Field, PostgresDsn, validator
APP_VERSION = "v0.5.2"
APP_VERSION = "v0.5.3"
DB_VERSION = "v0.5.0"
CWD = Path(__file__).parent
@@ -151,6 +151,11 @@ class AppSettings(BaseSettings):
DEFAULT_EMAIL: str = "changeme@email.com"
DEFAULT_PASSWORD: str = "MyPassword"
LDAP_AUTH_ENABLED: bool = False
LDAP_SERVER_URL: str = None
LDAP_BIND_TEMPLATE: str = None
LDAP_ADMIN_FILTER: str = None
SCHEDULER_DATABASE = f"sqlite:///{app_dirs.DATA_DIR.joinpath('scheduler.db')}"
TOKEN_TIME: int = 2 # Time in Hours
@@ -167,6 +172,8 @@ class AppSettings(BaseSettings):
RECIPE_DISABLE_COMMENTS: bool = False
RECIPE_DISABLE_AMOUNT: bool = False
AUTO_BACKUP_ENABLED: bool = False
class Config:
env_file = BASE_DIR.joinpath(".env")
env_file_encoding = "utf-8"

View File

@@ -11,6 +11,44 @@ pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
ALGORITHM = "HS256"
def user_from_ldap(session, username: str, password: str) -> UserInDB:
"""Given a username and password, tries to authenticate by BINDing to an
LDAP server
If the BIND succeeds, it will either create a new user of that username on
the server or return an existing one.
Returns False on failure.
"""
import ldap
conn = ldap.initialize(settings.LDAP_SERVER_URL)
user_dn = settings.LDAP_BIND_TEMPLATE.format(username)
try:
conn.simple_bind_s(user_dn, password)
except (ldap.INVALID_CREDENTIALS, ldap.NO_SUCH_OBJECT):
return False
user = db.users.get(session, username, "username", any_case=True)
if not user:
user = db.users.create(
session,
{
"username": username,
"password": "LDAP",
# Fill the next two values with something unique and vaguely
# relevant
"full_name": username,
"email": username,
},
)
if settings.LDAP_ADMIN_FILTER:
user.admin = len(conn.search_s(user_dn, ldap.SCOPE_BASE, settings.LDAP_ADMIN_FILTER, [])) > 0
db.users.update(session, user.id, user)
return user
def create_access_token(data: dict(), expires_delta: timedelta = None) -> str:
to_encode = data.copy()
expires_delta = expires_delta or timedelta(hours=settings.TOKEN_TIME)
@@ -31,6 +69,8 @@ def authenticate_user(session, email: str, password: str) -> UserInDB:
if not user:
user = db.users.get(session, email, "username", any_case=True)
if settings.LDAP_AUTH_ENABLED and (not user or user.password == "LDAP"):
return user_from_ldap(session, email, password)
if not user:
return False

View File

@@ -112,7 +112,7 @@ class RecipeModel(SqlAlchemyBase, BaseMixins):
self.image = image
self.recipeCuisine = recipeCuisine
self.nutrition = Nutrition(**nutrition) if self.nutrition else Nutrition()
self.nutrition = Nutrition(**nutrition) if nutrition else Nutrition()
self.tools = [Tool(tool=x) for x in tools] if tools else []

View File

@@ -109,7 +109,7 @@ def validate_file_token(token: Optional[str] = None) -> Path:
async def temporary_zip_path() -> Path:
temp_path = app_dirs.TEMP_DIR.mkdir(exist_ok=True, parents=True)
app_dirs.TEMP_DIR.mkdir(exist_ok=True, parents=True)
temp_path = app_dirs.TEMP_DIR.joinpath("my_zip_archive.zip")
try:

View File

@@ -16,8 +16,7 @@ from mealie.schema.user import UserInDB
from mealie.services.events import create_recipe_event
from mealie.services.image.image import scrape_image, write_image
from mealie.services.recipe.media import check_assets, delete_assets
from mealie.services.scraper.scraper import create_from_url
from scrape_schema_recipe import scrape_url
from mealie.services.scraper.scraper import create_from_url, scrape_from_url
from slugify import slugify
from sqlalchemy.orm.session import Session
from starlette.responses import FileResponse
@@ -50,7 +49,11 @@ def create_from_json(
@user_router.post("/test-scrape-url")
def test_parse_recipe_url(url: RecipeURLIn):
return scrape_url(url.url)
# Debugger should produce the same result as the scraper sees before cleaning
scraped_data = scrape_from_url(url.url)
if scraped_data:
return scraped_data.schema.data
return "recipe_scrapers was unable to scrape this URL"
@user_router.post("/create-url", status_code=201, response_model=str)

View File

@@ -104,8 +104,8 @@ async def get_user_image(id: str):
user_dir = app_dirs.USER_DIR.joinpath(id)
for recipe_image in user_dir.glob("profile_image.*"):
return FileResponse(recipe_image)
else:
raise HTTPException(status.HTTP_404_NOT_FOUND)
raise HTTPException(status.HTTP_404_NOT_FOUND)
@user_router.post("/{id}/image")

View File

@@ -5,6 +5,42 @@ from mealie.schema.category import CategoryBase, RecipeCategoryResponse
from pydantic import validator
from slugify import slugify
# Cluge Validator for ISSUE: #671
langs = {
"el-GR",
"it-IT",
"ko-KR",
"es-ES",
"ja-JP",
"zh-CN",
"tr-TR",
"ar-SA",
"hu-HU",
"pt-PT",
"no-NO",
"sv-SE",
"ro-RO",
"sk-SK",
"uk-UA",
"pl-PL",
"da-DK",
"pt-BR",
"de-DE",
"ca-ES",
"sr-SP",
"cs-CZ",
"fr-FR",
"zh-TW",
"af-ZA",
"ru-RU",
"he-IL",
"nl-NL",
"en-US",
"en-GB",
"fi-FI",
"vi-VN",
}
class SiteSettings(CamelModel):
language: str = "en-US"
@@ -29,6 +65,12 @@ class SiteSettings(CamelModel):
}
}
@validator("language")
def language_validator(cls, v: str):
if v not in langs:
return "en-US"
return v
class CustomPageBase(CamelModel):
name: str

View File

@@ -6,7 +6,7 @@ from typing import Union
from jinja2 import Template
from mealie.core import root_logger
from mealie.core.config import app_dirs
from mealie.core.config import app_dirs, settings
from mealie.db.database import db
from mealie.db.db_setup import create_session
from mealie.services.events import create_backup_event
@@ -153,6 +153,9 @@ def backup_all(
def auto_backup_job():
if not settings.AUTO_BACKUP_ENABLED:
return
for backup in app_dirs.BACKUP_DIR.glob("Auto*.zip"):
backup.unlink()

View File

@@ -43,11 +43,26 @@ def write_image(recipe_slug: str, file_data: bytes, extension: str) -> Path:
def scrape_image(image_url: str, slug: str) -> Path:
logger.info(f"Image URL: {image_url}")
_FIREFOX_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
if isinstance(image_url, str): # Handles String Types
image_url = image_url
pass
if isinstance(image_url, list): # Handles List Types
image_url = image_url[0]
# Multiple images have been defined in the schema - usually different resolutions
# Typically would be in smallest->biggest order, but can't be certain so test each.
# 'Google will pick the best image to display in Search results based on the aspect ratio and resolution.'
all_image_requests = []
for url in image_url:
try:
r = requests.get(url, stream=True, headers={"User-Agent": _FIREFOX_UA})
except Exception:
logger.exception("Image {url} could not be requested")
continue
if r.status_code == 200:
all_image_requests.append((url, r))
image_url, _ = max(all_image_requests, key=lambda url_r: len(url_r[1].content), default=("", 0))
if isinstance(image_url, dict): # Handles Dictionary Types
for key in image_url:
@@ -58,7 +73,7 @@ def scrape_image(image_url: str, slug: str) -> Path:
filename = Recipe(slug=slug).image_dir.joinpath(filename)
try:
r = requests.get(image_url, stream=True)
r = requests.get(image_url, stream=True, headers={"User-Agent": _FIREFOX_UA})
except Exception:
logger.exception("Fatal Image Request Exception")
return None
@@ -70,6 +85,6 @@ def scrape_image(image_url: str, slug: str) -> Path:
filename.unlink(missing_ok=True)
return slug
return Path(slug)
return None

View File

@@ -2,9 +2,12 @@ import html
import json
import re
from datetime import datetime, timedelta
from typing import List
from typing import List, Optional
from slugify import slugify
from mealie.core.root_logger import get_logger
logger = get_logger()
def clean(recipe_data: dict, url=None) -> dict:
@@ -67,6 +70,40 @@ def clean_html(raw_html):
return re.sub(cleanr, "", raw_html)
def clean_nutrition(nutrition: Optional[dict]) -> dict[str, str]:
# Assumes that all units are supplied in grams, except sodium which may be in mg.
# Fn only expects a dict[str,str]. Other structures should not be parsed.
if not isinstance(nutrition, dict):
return {}
# Allow for commas as decimals (common in Europe)
# Compile once for efficiency
re_match_digits = re.compile(r"\d+([.,]\d+)?")
output_nutrition = {}
for key, val in nutrition.items():
# If the val contains digits matching the regex, add the first match to the output dict.
# Handle unexpected datastructures safely.
try:
if matched_digits := re_match_digits.search(val):
output_nutrition[key] = matched_digits.group(0)
except Exception:
continue
output_nutrition = {key: val.replace(",", ".") for key, val in output_nutrition.items()}
if "sodiumContent" in nutrition and "m" not in nutrition["sodiumContent"] and "g" in nutrition["sodiumContent"]:
# Sodium is in grams. Parse its value, multiple by 1k and return to string.
try:
output_nutrition["sodiumContent"] = str(float(output_nutrition["sodiumContent"]) * 1000)
except ValueError:
# Could not parse sodium content as float, so don't touch it.
pass
return output_nutrition
def image(image=None) -> str:
if not image:
return "no image"
@@ -167,16 +204,15 @@ def clean_time(time_entry):
elif isinstance(time_entry, datetime):
print(time_entry)
elif isinstance(time_entry, str):
if re.match("PT.*H.*M", time_entry):
try:
time_delta_object = parse_duration(time_entry)
return pretty_print_timedelta(time_delta_object)
except ValueError:
logger.error(f"Could not parse time_entry `{time_entry}`")
else:
return str(time_entry)
# ! TODO: Cleanup Code Below
def parse_duration(iso_duration):
"""Parses an ISO 8601 duration string into a datetime.timedelta instance.
Args:
@@ -184,48 +220,35 @@ def parse_duration(iso_duration):
Returns:
a datetime.timedelta instance
"""
m = re.match(r"^P(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)D)?T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:.\d+)?)S)?$", iso_duration)
m = re.match(
r"^P((\d+)Y)?((\d+)M)?((?P<days>\d+)D)?"
r"T((?P<hours>\d+)H)?((?P<minutes>\d+)M)?((?P<seconds>\d+(?:\.\d+)?)S)?$",
iso_duration,
)
if m is None:
raise ValueError("invalid ISO 8601 duration string")
days = 0
hours = 0
minutes = 0
seconds = 0.0
# Years and months are not being utilized here, as there is not enough
# information provided to determine which year and which month.
# Python's time_delta class stores durations as days, seconds and
# microseconds internally, and therefore we'd have to
# convert parsed years and months to specific number of days.
if m[3]:
days = int(m[3])
if m[4]:
hours = int(m[4])
if m[5]:
minutes = int(m[5])
if m[6]:
seconds = float(m[6])
times = {"days": 0, "hours": 0, "minutes": 0, "seconds": 0}
for unit, value in times.items():
if m.group(unit):
times[unit] = int(float(m.group(unit)))
return timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds)
return timedelta(**times)
def pretty_print_timedelta(t, max_components=None, max_decimal_places=2):
"""
Print a pretty string for a timedelta.
For example datetime.timedelta(days=2, seconds=17280) will be printed as '2 days, 4 hours, 48 minutes'. Setting max_components to e.g. 1 will change this to '2.2 days', where the
For example datetime.timedelta(days=2, seconds=17280) will be printed as '2 days 4 Hours 48 Minutes'. Setting max_components to e.g. 1 will change this to '2.2 days', where the
number of decimal points can also be set.
"""
time_scales = [
timedelta(days=365),
timedelta(days=1),
timedelta(hours=1),
timedelta(minutes=1),
timedelta(seconds=1),
timedelta(microseconds=1000),
timedelta(microseconds=1),
]
time_scale_names_dict = {
timedelta(days=365): "year",
timedelta(days=1): "day",
@@ -236,9 +259,8 @@ def pretty_print_timedelta(t, max_components=None, max_decimal_places=2):
timedelta(microseconds=1): "microsecond",
}
count = 0
txt = ""
first = True
for scale in time_scales:
out_list = []
for scale, scale_name in time_scale_names_dict.items():
if t >= scale:
count += 1
n = t / scale if count == max_components else int(t / scale)
@@ -247,15 +269,9 @@ def pretty_print_timedelta(t, max_components=None, max_decimal_places=2):
n_txt = str(round(n, max_decimal_places))
if n_txt[-2:] == ".0":
n_txt = n_txt[:-2]
txt += "{}{} {}{}".format(
"" if first else " ",
n_txt,
time_scale_names_dict[scale],
"s" if n > 1 else "",
)
if first:
first = False
if len(txt) == 0:
txt = "none"
return txt
out_list.append(f"{n_txt} {scale_name}{'s' if n > 1 else ''}")
if out_list == []:
return "none"
return " ".join(out_list)

View File

@@ -1,6 +1,6 @@
import json
from enum import Enum
from typing import Any, Callable
from typing import Any, Callable, Optional
from uuid import uuid4
import requests
@@ -29,7 +29,14 @@ def create_from_url(url: str) -> Recipe:
Returns:
Recipe: Recipe Object
"""
new_recipe = scrape_from_url(url)
# Try the different scrapers in order.
if scraped_data := scrape_from_url(url):
new_recipe = clean_scraper(scraped_data, url)
elif og_dict := extract_open_graph_values(url):
new_recipe = Recipe(**og_dict)
else:
raise HTTPException(status.HTTP_400_BAD_REQUEST, {"details": ParserErrors.BAD_RECIPE_DATA.value})
logger.info(f"Image {new_recipe.image}")
new_recipe.image = download_image_for_recipe(new_recipe.slug, new_recipe.image)
@@ -46,16 +53,17 @@ class ParserErrors(str, Enum):
CONNECTION_ERROR = "CONNECTION_ERROR"
def extract_open_graph_values(url) -> Recipe:
def extract_open_graph_values(url) -> Optional[dict]:
r = requests.get(url)
recipe = open_graph.basic_recipe_from_opengraph(r.text, url)
return Recipe(**recipe)
if recipe.get("name", "") == "":
return None
return recipe
def scrape_from_url(url: str) -> Recipe:
"""Entry function to generating are recipe obejct from a url
This will determine if a url can be parsed and raise an appropriate error keyword
def scrape_from_url(url: str):
"""Entry function to scrape a recipe from a url
This will determine if a url can be parsed and return None if not, to allow another parser to try.
This keyword is used on the frontend to reference a localized string to present on the UI.
Args:
@@ -65,7 +73,7 @@ def scrape_from_url(url: str) -> Recipe:
HTTPException: 400_BAD_REQUEST - See ParserErrors Class for Key Details
Returns:
Recipe: Recipe Model
Optional[Scraped schema for cleaning]
"""
try:
scraped_schema = scrape_me(url)
@@ -73,28 +81,26 @@ def scrape_from_url(url: str) -> Recipe:
try:
scraped_schema = scrape_me(url, wild_mode=True)
except (NoSchemaFoundInWildMode, AttributeError):
recipe = extract_open_graph_values(url)
if recipe.name != "":
return recipe
raise HTTPException(status.HTTP_400_BAD_REQUEST, {"details": ParserErrors.BAD_RECIPE_DATA.value})
# Recipe_scraper was unable to extract a recipe.
return None
except ConnectionError:
raise HTTPException(status.HTTP_400_BAD_REQUEST, {"details": ParserErrors.CONNECTION_ERROR.value})
# Check to see if the recipe is valid
try:
ingredients = scraped_schema.ingredients()
instruct = scraped_schema.instructions()
except Exception:
ingredients = []
instruct = []
try:
ing = scraped_schema.ingredients()
except Exception:
ing = []
if instruct and ingredients:
return scraped_schema
if not instruct and not ing:
raise HTTPException(status.HTTP_400_BAD_REQUEST, {"details": ParserErrors.NO_RECIPE_DATA.value})
else:
return clean_scraper(scraped_schema, url)
# recipe_scrapers did not get a valid recipe.
# Return None to let another scraper try.
return None
def clean_scraper(scraped_data: SchemaScraperFactory.SchemaScraper, url: str) -> Recipe:
@@ -132,17 +138,22 @@ def clean_scraper(scraped_data: SchemaScraperFactory.SchemaScraper, url: str) ->
except TypeError:
return []
cook_time = try_get_default(None, "performTime", None, cleaner.clean_time) or try_get_default(
None, "cookTime", None, cleaner.clean_time
)
return Recipe(
name=try_get_default(scraped_data.title, "name", "No Name Found", cleaner.clean_string),
slug="",
image=try_get_default(scraped_data.image, "image", None),
image=try_get_default(None, "image", None),
description=try_get_default(None, "description", "", cleaner.clean_string),
nutrition=try_get_default(None, "nutrition", None, cleaner.clean_nutrition),
recipe_yield=try_get_default(scraped_data.yields, "recipeYield", "1", cleaner.clean_string),
recipe_ingredient=try_get_default(scraped_data.ingredients, "recipeIngredient", [""], cleaner.ingredient),
recipe_instructions=get_instructions(),
total_time=try_get_default(None, "totalTime", None, cleaner.clean_time),
prep_time=try_get_default(None, "prepTime", None, cleaner.clean_time),
perform_time=try_get_default(None, "performTime", None, cleaner.clean_time),
perform_time=cook_time,
org_url=url,
)

1167
poetry.lock generated
View File

File diff suppressed because it is too large Load Diff

View File

@@ -22,8 +22,7 @@ python-dotenv = "^0.15.0"
python-slugify = "^4.0.1"
requests = "^2.25.1"
PyYAML = "^5.3.1"
extruct = "^0.12.0"
scrape-schema-recipe = "^0.1.3"
extruct = "^0.13.0"
python-multipart = "^0.0.5"
fastapi-camelcase = "^1.0.2"
bcrypt = "^3.2.0"
@@ -32,9 +31,10 @@ passlib = "^1.7.4"
lxml = "4.6.2"
Pillow = "^8.2.0"
pathvalidate = "^2.4.1"
apprise = "^0.9.2"
recipe-scrapers = "^13.2.7"
apprise = "0.9.3"
recipe-scrapers = "^13.7.0"
psycopg2-binary = {version = "^2.9.1", optional = true}
python-ldap = "^3.3.0"
gunicorn = "^20.1.0"
[tool.poetry.dev-dependencies]
@@ -67,4 +67,5 @@ testpaths = [
skip_empty = true
[tool.poetry.extras]
pgsql = ["psycopg2-binary"]
pgsql = ["psycopg2-binary"]
ldap = ["python-ldap"]

View File

@@ -33,4 +33,10 @@ RECIPE_SHOW_NUTRITION=False
RECIPE_SHOW_ASSETS=False
RECIPE_LANDSCAPE_VIEW=False
RECIPE_DISABLE_COMMENTS=False
RECIPE_DISABLE_AMOUNT=False
RECIPE_DISABLE_AMOUNT=False
# Configuration for authentication via an external LDAP server
LDAP_AUTH_ENABLED=False
LDAP_SERVER_URL=None
LDAP_BIND_TEMPLATE=None
LDAP_ADMIN_FILTER=None

View File

@@ -20,7 +20,7 @@ def test_default_settings(api_client: TestClient, api_routes: AppRoutes, default
def test_update_settings(api_client: TestClient, api_routes: AppRoutes, default_settings, admin_token):
default_settings["language"] = "fr"
default_settings["language"] = "fr-FR"
default_settings["showRecent"] = False
response = api_client.put(api_routes.site_settings, json=default_settings, headers=admin_token)

View File

@@ -2,6 +2,7 @@ import json
import re
import pytest
from datetime import timedelta
from mealie.services.scraper import cleaner
from mealie.services.scraper.scraper import open_graph
from tests.test_config import TEST_RAW_HTML, TEST_RAW_RECIPES
@@ -58,6 +59,24 @@ def test_clean_image():
assert cleaner.image(["My URL!", "MY SECOND URL"]) == "My URL!"
@pytest.mark.parametrize(
"nutrition,expected",
[
(None, {}),
({"calories": "105 kcal"}, {"calories": "105"}),
({"calories": "105 kcal 104 sugar"}, {"calories": "105"}),
({"calories": ""}, {}),
({"calories": ["not just a string"], "sugarContent": "but still tries 555.321"}, {"sugarContent": "555.321"}),
({"sodiumContent": "5.1235g"}, {"sodiumContent": "5123.5"}),
({"sodiumContent": "5mg"}, {"sodiumContent": "5"}),
({"sodiumContent": "10oz"}, {"sodiumContent": "10"}),
({"sodiumContent": "10.1.2g"}, {"sodiumContent": "10100.0"}),
],
)
def test_clean_nutrition(nutrition, expected):
assert cleaner.clean_nutrition(nutrition) == expected
@pytest.mark.parametrize(
"instructions",
[
@@ -89,9 +108,29 @@ def test_html_with_recipe_data():
assert url_validation_regex.match(recipe_data["image"])
def test_time_cleaner():
@pytest.mark.parametrize(
"time_delta,expected",
[
("PT2H30M", "2 Hours 30 Minutes"),
("PT30M", "30 Minutes"),
("PT3H", "3 Hours"),
("P1DT1H1M1S", "1 day 1 Hour 1 Minute 1 Second"),
("P1DT1H1M1.53S", "1 day 1 Hour 1 Minute 1 Second"),
("PT-3H", None),
("PT", "none"),
],
)
def test_time_cleaner(time_delta, expected):
assert cleaner.clean_time(time_delta) == expected
my_time_delta = "PT2H30M"
return_delta = cleaner.clean_time(my_time_delta)
assert return_delta == "2 Hours 30 Minutes"
@pytest.mark.parametrize(
"t,max_components,max_decimal_places,expected",
[
(timedelta(days=2, seconds=17280), None, 2, "2 days 4 Hours 48 Minutes"),
(timedelta(days=2, seconds=17280), 1, 2, "2.2 days"),
(timedelta(days=365), None, 2, "1 year"),
],
)
def test_pretty_print_timedelta(t, max_components, max_decimal_places, expected):
assert cleaner.pretty_print_timedelta(t, max_components, max_decimal_places) == expected

View File

@@ -2,6 +2,8 @@ from pathlib import Path
from mealie.core import security
from mealie.routes.deps import validate_file_token
from mealie.core.config import settings
from mealie.db.db_setup import create_session
def test_create_file_token():
@@ -9,3 +11,37 @@ def test_create_file_token():
file_token = security.create_file_token(file_path)
assert file_path == validate_file_token(file_token)
def test_ldap_authentication_mocked(monkeypatch):
import ldap
user = "testinguser"
password = "testingpass"
bind_template = "cn={},dc=example,dc=com"
admin_filter = "(memberOf=cn=admins,dc=example,dc=com)"
monkeypatch.setattr(settings, "LDAP_AUTH_ENABLED", True)
monkeypatch.setattr(settings, "LDAP_SERVER_URL", "") # Not needed due to mocking
monkeypatch.setattr(settings, "LDAP_BIND_TEMPLATE", bind_template)
monkeypatch.setattr(settings, "LDAP_ADMIN_FILTER", admin_filter)
class LdapConnMock:
def simple_bind_s(self, dn, bind_pw):
assert dn == bind_template.format(user)
return bind_pw == password
def search_s(self, dn, scope, filter, attrlist):
assert attrlist == []
assert filter == admin_filter
assert dn == bind_template.format(user)
assert scope == ldap.SCOPE_BASE
return [()]
def ldap_initialize_mock(url):
assert url == ""
return LdapConnMock()
monkeypatch.setattr(ldap, "initialize", ldap_initialize_mock)
result = security.authenticate_user(create_session(), user, password)
assert result is not False
assert result.username == user