From b6ccb9fbdbf0acb87aedf8b191cd839a79080679 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Fri, 15 Mar 2024 19:41:26 +0000 Subject: [PATCH 01/12] add shared group self to composable --- frontend/composables/use-groups.ts | 31 +++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/frontend/composables/use-groups.ts b/frontend/composables/use-groups.ts index 8b2e8b682af8..f9b91283469b 100644 --- a/frontend/composables/use-groups.ts +++ b/frontend/composables/use-groups.ts @@ -1,30 +1,39 @@ import { useAsync, ref } from "@nuxtjs/composition-api"; -import { useAsyncKey } from "./use-utils"; import { useUserApi } from "~/composables/api"; -import { GroupBase } from "~/lib/api/types/user"; +import { GroupBase, GroupInDB } from "~/lib/api/types/user"; + +const groupSelfRef = ref(null); +const loading = ref(false); export const useGroupSelf = function () { const api = useUserApi(); + async function refreshGroupSelf() { + loading.value = true; + const { data } = await api.groups.getCurrentUserGroup(); + groupSelfRef.value = data; + loading.value = false; + } const actions = { get() { - const group = useAsync(async () => { - const { data } = await api.groups.getCurrentUserGroup(); + if (!(groupSelfRef.value || loading.value)) { + refreshGroupSelf(); + } - return data; - }, useAsyncKey()); - - return group; + return groupSelfRef; }, async updatePreferences() { - if (!group.value?.preferences) { + if (!groupSelfRef.value) { + await refreshGroupSelf(); + } + if (!groupSelfRef.value?.preferences) { return; } - const { data } = await api.groups.setPreferences(group.value.preferences); + const { data } = await api.groups.setPreferences(groupSelfRef.value.preferences); if (data) { - group.value.preferences = data; + groupSelfRef.value.preferences = data; } }, }; From 52c6fe34b24d599ea3174535192e085f91d40e43 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Fri, 15 Mar 2024 19:50:39 +0000 Subject: [PATCH 02/12] remove potentially sensitive fields from group self --- frontend/composables/use-groups.ts | 4 ++-- frontend/lib/api/types/user.ts | 7 +++++++ frontend/lib/api/user/groups.ts | 4 ++-- .../groups/controller_group_self_service.py | 6 +++--- mealie/schema/user/user.py | 15 +++++++++++++++ 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/frontend/composables/use-groups.ts b/frontend/composables/use-groups.ts index f9b91283469b..01c164f4a577 100644 --- a/frontend/composables/use-groups.ts +++ b/frontend/composables/use-groups.ts @@ -1,8 +1,8 @@ import { useAsync, ref } from "@nuxtjs/composition-api"; import { useUserApi } from "~/composables/api"; -import { GroupBase, GroupInDB } from "~/lib/api/types/user"; +import { GroupBase, GroupSummary } from "~/lib/api/types/user"; -const groupSelfRef = ref(null); +const groupSelfRef = ref(null); const loading = ref(false); export const useGroupSelf = function () { diff --git a/frontend/lib/api/types/user.ts b/frontend/lib/api/types/user.ts index 681dc5291afa..35ae18f132b6 100644 --- a/frontend/lib/api/types/user.ts +++ b/frontend/lib/api/types/user.ts @@ -48,6 +48,13 @@ export interface GroupInDB { users?: UserOut[]; preferences?: ReadGroupPreferences; } +export interface GroupSummary { + name: string; + id: string; + slug: string; + preferences?: ReadGroupPreferences; + +} export interface CategoryBase { name: string; id: string; diff --git a/frontend/lib/api/user/groups.ts b/frontend/lib/api/user/groups.ts index 090f4fabc590..19f5cff9152b 100644 --- a/frontend/lib/api/user/groups.ts +++ b/frontend/lib/api/user/groups.ts @@ -1,5 +1,5 @@ import { BaseCRUDAPI } from "../base/base-clients"; -import { CategoryBase, GroupBase, GroupInDB, UserOut } from "~/lib/api/types/user"; +import { CategoryBase, GroupBase, GroupInDB, GroupSummary, UserOut } from "~/lib/api/types/user"; import { CreateInviteToken, GroupAdminUpdate, @@ -35,7 +35,7 @@ export class GroupAPI extends BaseCRUDAPI(routes.groupsSelf); + return await this.requests.get(routes.groupsSelf); } async getCategories() { diff --git a/mealie/routes/groups/controller_group_self_service.py b/mealie/routes/groups/controller_group_self_service.py index 92fc53a13a60..3fa018bdfb8f 100644 --- a/mealie/routes/groups/controller_group_self_service.py +++ b/mealie/routes/groups/controller_group_self_service.py @@ -8,7 +8,7 @@ from mealie.routes._base.routers import UserAPIRouter from mealie.schema.group.group_permissions import SetPermissions from mealie.schema.group.group_preferences import ReadGroupPreferences, UpdateGroupPreferences from mealie.schema.group.group_statistics import GroupStatistics, GroupStorage -from mealie.schema.user.user import GroupInDB, UserOut +from mealie.schema.user.user import GroupInDB, GroupSummary, UserOut from mealie.services.group_services.group_service import GroupService router = UserAPIRouter(prefix="/groups", tags=["Groups: Self Service"]) @@ -20,10 +20,10 @@ class GroupSelfServiceController(BaseUserController): def service(self) -> GroupService: return GroupService(self.group_id, self.repos) - @router.get("/self", response_model=GroupInDB) + @router.get("/self", response_model=GroupSummary) def get_logged_in_user_group(self): """Returns the Group Data for the Current User""" - return self.group + return self.group.cast(GroupSummary) @router.get("/members", response_model=list[UserOut]) def get_group_members(self): diff --git a/mealie/schema/user/user.py b/mealie/schema/user/user.py index 864ff6bd5ed7..dceb32acc18c 100644 --- a/mealie/schema/user/user.py +++ b/mealie/schema/user/user.py @@ -249,6 +249,21 @@ class GroupInDB(UpdateGroup): ] +class GroupSummary(MealieModel): + id: UUID4 + name: str + slug: str + preferences: ReadGroupPreferences | None = None + + model_config = ConfigDict(from_attributes=True) + + @classmethod + def loader_options(cls) -> list[LoaderOption]: + return [ + joinedload(Group.preferences), + ] + + class GroupPagination(PaginationBase): items: list[GroupInDB] From ad0ea09be986d9a26a20e1fc0d2dd8797f34f18e Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Fri, 15 Mar 2024 19:57:57 +0000 Subject: [PATCH 03/12] better model inheritance --- mealie/schema/user/user.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mealie/schema/user/user.py b/mealie/schema/user/user.py index dceb32acc18c..a478866a5239 100644 --- a/mealie/schema/user/user.py +++ b/mealie/schema/user/user.py @@ -249,14 +249,12 @@ class GroupInDB(UpdateGroup): ] -class GroupSummary(MealieModel): +class GroupSummary(GroupBase): id: UUID4 name: str slug: str preferences: ReadGroupPreferences | None = None - model_config = ConfigDict(from_attributes=True) - @classmethod def loader_options(cls) -> list[LoaderOption]: return [ From 6da50b576f4d76ce722b78297e56ec1604748e57 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Fri, 15 Mar 2024 20:21:43 +0000 Subject: [PATCH 04/12] remove unused import --- mealie/routes/groups/controller_group_self_service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mealie/routes/groups/controller_group_self_service.py b/mealie/routes/groups/controller_group_self_service.py index 3fa018bdfb8f..ac63a5d02fc8 100644 --- a/mealie/routes/groups/controller_group_self_service.py +++ b/mealie/routes/groups/controller_group_self_service.py @@ -8,7 +8,7 @@ from mealie.routes._base.routers import UserAPIRouter from mealie.schema.group.group_permissions import SetPermissions from mealie.schema.group.group_preferences import ReadGroupPreferences, UpdateGroupPreferences from mealie.schema.group.group_statistics import GroupStatistics, GroupStorage -from mealie.schema.user.user import GroupInDB, GroupSummary, UserOut +from mealie.schema.user.user import GroupSummary, UserOut from mealie.services.group_services.group_service import GroupService router = UserAPIRouter(prefix="/groups", tags=["Groups: Self Service"]) From b963b99a4c452b847fa3d199ebc0b862d1c4edf1 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Sun, 17 Mar 2024 05:46:58 -0500 Subject: [PATCH 05/12] New translations en-us.json (Japanese) --- frontend/lang/messages/ja-JP.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/lang/messages/ja-JP.json b/frontend/lang/messages/ja-JP.json index b5221ccc10e0..3850dded0517 100644 --- a/frontend/lang/messages/ja-JP.json +++ b/frontend/lang/messages/ja-JP.json @@ -89,7 +89,7 @@ "confirm-delete-generic": "削除しますか?", "copied_message": "コピーしました", "create": "作成", - "created": "作成しました。", + "created": "作成日", "custom": "カスタム", "dashboard": "ダッシュボード", "delete": "削除", @@ -164,7 +164,7 @@ "tuesday": "火曜日", "type": "タイプ", "update": "更新", - "updated": "更新しました", + "updated": "更新日時", "upload": "アップロード", "url": "URL", "view": "表示", From 9b4e0dd0d95d760a3bb1e1f6fc43f2da2be59302 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 02:19:35 +0000 Subject: [PATCH 06/12] chore(deps): update dependency mkdocs-material to v9.5.14 (#3333) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index d1fa24843324..9f499bce6dda 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1353,13 +1353,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.5.13" +version = "9.5.14" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.13-py3-none-any.whl", hash = "sha256:5cbe17fee4e3b4980c8420a04cc762d8dc052ef1e10532abd4fce88e5ea9ce6a"}, - {file = "mkdocs_material-9.5.13.tar.gz", hash = "sha256:d8e4caae576312a88fd2609b81cf43d233cdbe36860d67a68702b018b425bd87"}, + {file = "mkdocs_material-9.5.14-py3-none-any.whl", hash = "sha256:a45244ac221fda46ecf8337f00ec0e5cb5348ab9ffb203ca2a0c313b0d4dbc27"}, + {file = "mkdocs_material-9.5.14.tar.gz", hash = "sha256:2a1f8e67cda2587ab93ecea9ba42d0ca61d1d7b5fad8cf690eeaeb39dcd4b9af"}, ] [package.dependencies] From af2992eee909ea68c076c6f31d447a245a44559a Mon Sep 17 00:00:00 2001 From: Ikko Eltociear Ashimine Date: Tue, 19 Mar 2024 02:42:02 +0900 Subject: [PATCH 07/12] docs: Update maintainers.md (#3339) reviered -> reviewed --- docs/docs/contributors/developers-guide/maintainers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/contributors/developers-guide/maintainers.md b/docs/docs/contributors/developers-guide/maintainers.md index e2ef9e610661..079679572191 100644 --- a/docs/docs/contributors/developers-guide/maintainers.md +++ b/docs/docs/contributors/developers-guide/maintainers.md @@ -6,7 +6,7 @@ This is the start of the maintainers guide for Mealie developers. Those who have If you are working on issues, it can be helpful to understand the workflow for our repository. When an issue comes in it is tagged with the `bug` and `triage` flags. This is to indicate that they need to be reviewed by a maintainer to determine validity. -After you've reviered an issue it will generally move into one of two states: +After you've reviewed an issue it will generally move into one of two states: `bug:confirmed` : Your were able to verify the issue and we determined we need to fix it From 59d53a02b30e6e093c4942419b60752d1e3e6cb4 Mon Sep 17 00:00:00 2001 From: Carter <35710697+cmintey@users.noreply.github.com> Date: Mon, 18 Mar 2024 20:21:53 -0500 Subject: [PATCH 08/12] Dicsussion Template: OAuth example template (#3340) * Create oauth_example.yaml * Update and rename oauth_example.yaml to oauth-provider-example.yaml --- .github/DISCUSSION_TEMPLATE/oauth-provider-example.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .github/DISCUSSION_TEMPLATE/oauth-provider-example.yaml diff --git a/.github/DISCUSSION_TEMPLATE/oauth-provider-example.yaml b/.github/DISCUSSION_TEMPLATE/oauth-provider-example.yaml new file mode 100644 index 000000000000..dc1dd2a285a8 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/oauth-provider-example.yaml @@ -0,0 +1,9 @@ +--- +title: OAuth setup with +body: +- type: textarea + attributes: + label: Configuration Example + description: Add your example configuration. You can provide code blocks, screenshots, and links. + validations: + required: true From 1ebc7d27d4ddc2f53475b855bb96bae006f35a69 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 08:27:04 -0500 Subject: [PATCH 09/12] chore(deps): update dependency pytest-asyncio to v0.23.6 (#3341) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9f499bce6dda..67a759049ab0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2105,13 +2105,13 @@ testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygm [[package]] name = "pytest-asyncio" -version = "0.23.5" +version = "0.23.6" description = "Pytest support for asyncio" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-asyncio-0.23.5.tar.gz", hash = "sha256:3a048872a9c4ba14c3e90cc1aa20cbc2def7d01c7c8db3777ec281ba9c057675"}, - {file = "pytest_asyncio-0.23.5-py3-none-any.whl", hash = "sha256:4e7093259ba018d58ede7d5315131d21923a60f8a6e9ee266ce1589685c89eac"}, + {file = "pytest-asyncio-0.23.6.tar.gz", hash = "sha256:ffe523a89c1c222598c76856e76852b787504ddb72dd5d9b6617ffa8aa2cde5f"}, + {file = "pytest_asyncio-0.23.6-py3-none-any.whl", hash = "sha256:68516fdd1018ac57b846c9846b954f0393b26f094764a28c955eabb0536a4e8a"}, ] [package.dependencies] From 04e6601d5b02140ea71d1972d4933c7523eed0c8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 13:37:08 +0000 Subject: [PATCH 10/12] fix(deps): update dependency uvicorn to v0.28.1 (#3342) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 67a759049ab0..c703638014cb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2910,13 +2910,13 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "uvicorn" -version = "0.28.0" +version = "0.28.1" description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.8" files = [ - {file = "uvicorn-0.28.0-py3-none-any.whl", hash = "sha256:6623abbbe6176204a4226e67607b4d52cc60ff62cda0ff177613645cefa2ece1"}, - {file = "uvicorn-0.28.0.tar.gz", hash = "sha256:cab4473b5d1eaeb5a0f6375ac4bc85007ffc75c3cc1768816d9e5d589857b067"}, + {file = "uvicorn-0.28.1-py3-none-any.whl", hash = "sha256:5162f6d652f545be91b1feeaee8180774af143965ca9dc8a47ff1dc6bafa4ad5"}, + {file = "uvicorn-0.28.1.tar.gz", hash = "sha256:08103e79d546b6cf20f67c7e5e434d2cf500a6e29b28773e407250c54fc4fa3c"}, ] [package.dependencies] From 6050b1e25ae032154e78b01aee3e2659faa1ce90 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 20 Mar 2024 10:36:47 -0500 Subject: [PATCH 11/12] fix(deps): update dependency uvicorn to ^0.29.0 (#3346) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index c703638014cb..00579b595e5d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2910,13 +2910,13 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "uvicorn" -version = "0.28.1" +version = "0.29.0" description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.8" files = [ - {file = "uvicorn-0.28.1-py3-none-any.whl", hash = "sha256:5162f6d652f545be91b1feeaee8180774af143965ca9dc8a47ff1dc6bafa4ad5"}, - {file = "uvicorn-0.28.1.tar.gz", hash = "sha256:08103e79d546b6cf20f67c7e5e434d2cf500a6e29b28773e407250c54fc4fa3c"}, + {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"}, + {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"}, ] [package.dependencies] @@ -3174,4 +3174,4 @@ pgsql = ["psycopg2-binary"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "d208e7532a75b0bae2dc41ab9e7a7fe6636d2e3d4c0a4c7a14d47e4639a19d2c" +content-hash = "78284368031f012f6e4edcbb6cc3c25db58f570474e0939e5ed3948c01b9d798" diff --git a/pyproject.toml b/pyproject.toml index 88ec625a87b9..878dd98e814c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ python-slugify = "^8.0.0" recipe-scrapers = "^14.53.0" requests = "^2.31.0" tzdata = "^2023.4" -uvicorn = { extras = ["standard"], version = "^0.28.0" } +uvicorn = { extras = ["standard"], version = "^0.29.0" } beautifulsoup4 = "^4.11.2" isodate = "^0.6.1" text-unidecode = "^1.3" From 54aef24cafcffc4f867954525e34bcd842ddbd5c Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Wed, 20 Mar 2024 10:44:33 -0500 Subject: [PATCH 12/12] New translations en-us.json (Danish) (#3347) Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com> --- frontend/lang/messages/da-DK.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/frontend/lang/messages/da-DK.json b/frontend/lang/messages/da-DK.json index e8aa9df6271a..c98f276a54b2 100644 --- a/frontend/lang/messages/da-DK.json +++ b/frontend/lang/messages/da-DK.json @@ -80,7 +80,7 @@ "recipe-events": "Hændelser for opskrifter" }, "general": { - "add": "Add", + "add": "Tilføj", "cancel": "Annuller", "clear": "Ryd", "close": "Luk", @@ -144,11 +144,11 @@ "save": "Gem", "settings": "Indstillinger", "share": "Del", - "show-all": "Show All", + "show-all": "Vis alle", "shuffle": "Bland", "sort": "Sorter", - "sort-ascending": "Sort Ascending", - "sort-descending": "Sort Descending", + "sort-ascending": "Sorter stigende", + "sort-descending": "Sorter Faldende", "sort-alphabetically": "Alfabetisk", "status": "Status", "subject": "Emne", @@ -243,8 +243,8 @@ "group-preferences": "Gruppe Indstillinger", "private-group": "Privat Gruppe", "private-group-description": "Indstilling af din gruppe til privat, vil ændre alle indstillinger for offentlig visning. Dette tilsidesætter individuelle opskrifters indstillinger for offentlig visning.", - "enable-public-access": "Enable Public Access", - "enable-public-access-description": "Make group recipes public by default, and allow visitors to view recipes without logging-in", + "enable-public-access": "Aktiver Offentlig Adgang", + "enable-public-access-description": "Gør gruppeopskrifter offentlige som standard, og tillade besøgende at se opskrifter uden at logge ind", "allow-users-outside-of-your-group-to-see-your-recipes": "Tillad brugere udenfor din gruppe at se dine opskrifter", "allow-users-outside-of-your-group-to-see-your-recipes-description": "Når aktiveret kan du bruge et link til offentlig deling til at dele specifikke opskrifter uden at oprette en bruger. Når deaktiveret, kan du kun dele opskrifter med brugere, der er i din gruppe eller med et prægenereret privat link", "show-nutrition-information": "Vis ernæringsoplysninger", @@ -358,7 +358,7 @@ }, "recipe-data-migrations": "Migrering af opskrifter", "recipe-data-migrations-explanation": "Opskrifter kan migreres fra et andet understøttet program til Mealie. Dette er en fantastisk måde at komme i gang med Mealie.", - "coming-from-another-application-or-an-even-older-version-of-mealie": "Coming from another application or an even older version of Mealie? Check out migrations and see if your data can be imported.", + "coming-from-another-application-or-an-even-older-version-of-mealie": "Kommer fra en anden applikation eller en endnu ældre version af Mealie? Tjek migrationer og se om dine data kan importeres.", "choose-migration-type": "Vælg Migreringstype", "tag-all-recipes": "Tag alle opskrifter med {tag-name} tag", "nextcloud-text": "Nextcloud opskrifter kan importeres fra en zip-fil, der indeholder data lagret i Nextcloud. Se eksempelmappestrukturen nedenfor for at sikre, at dine opskrifter kan importeres.", @@ -543,7 +543,7 @@ "import-with-url": "Importér via URL", "create-recipe": "Opret opskrift", "create-recipe-description": "Create a new recipe from scratch.", - "create-recipes": "Create Recipes", + "create-recipes": "Opret opskrift", "import-with-zip": "Importér fra ZIP-fil", "create-recipe-from-an-image": "Opret opskrift ud fra et billede", "bulk-url-import": "Import fra flere URL-adresser", @@ -577,7 +577,7 @@ "upload-image": "Upload billede", "screen-awake": "Hold skærmen tændt", "remove-image": "Fjern billede", - "nextStep": "Next step" + "nextStep": "Næste trin" }, "search": { "advanced-search": "Avanceret søgning", @@ -850,11 +850,11 @@ "link-id": "Link ID", "link-name": "Linknavn", "login": "Log på", - "login-oidc": "Login with", + "login-oidc": "Log ind med", "or": "eller", "logout": "Log ud", "manage-users": "Administrer brugere", - "manage-users-description": "Create and manage users.", + "manage-users-description": "Opret og administrér brugere.", "new-password": "Ny adgangskode", "new-user": "Ny bruger", "password-has-been-reset-to-the-default-password": "Adgangskode er blevet nulstillet til systemstandarden",