web/components: improve error handling in ak-search-select (#8228)

* unrelated: remove deprecated sentry tracing package since its in the main package

no of course this does not fix the circular import, sigh

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix syntax error in group view page

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* improve error handling in search-select

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* remove requiredness from flow input for invitation

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix dark theme for date and datetime input fields' picker button

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update locale

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
Jens L
2024-01-18 23:24:52 +01:00
committed by GitHub
parent 02791e765f
commit 5be9d1fc6a
22 changed files with 402 additions and 241 deletions

View File

@ -67,16 +67,18 @@ lint: ## Lint the python and golang sources
pylint $(PY_SOURCES) pylint $(PY_SOURCES)
golangci-lint run -v golangci-lint run -v
core-install:
poetry install
migrate: ## Run the Authentik Django server's migrations migrate: ## Run the Authentik Django server's migrations
python -m lifecycle.migrate python -m lifecycle.migrate
i18n-extract: i18n-extract-core web-i18n-extract ## Extract strings that require translation into files to send to a translation service i18n-extract: core-i18n-extract web-i18n-extract ## Extract strings that require translation into files to send to a translation service
i18n-extract-core: core-i18n-extract:
ak makemessages --ignore web --ignore internal --ignore web --ignore web-api --ignore website -l en ak makemessages --ignore web --ignore internal --ignore web --ignore web-api --ignore website -l en
install: web-install website-install ## Install all requires dependencies for `web`, `website` and `core` install: web-install website-install core-install ## Install all requires dependencies for `web`, `website` and `core`
poetry install
dev-drop-db: dev-drop-db:
dropdb -U ${pg_user} -h ${pg_host} ${pg_name} dropdb -U ${pg_user} -h ${pg_host} ${pg_name}

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-12-06 16:55+0000\n" "POT-Creation-Date: 2024-01-18 22:07+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -69,183 +69,183 @@ msgstr ""
msgid "authentik Export - %(date)s" msgid "authentik Export - %(date)s"
msgstr "" msgstr ""
#: authentik/blueprints/v1/tasks.py:150 authentik/crypto/tasks.py:93 #: authentik/blueprints/v1/tasks.py:145 authentik/crypto/tasks.py:93
#, python-format #, python-format
msgid "Successfully imported %(count)d files." msgid "Successfully imported %(count)d files."
msgstr "" msgstr ""
#: authentik/core/api/providers.py:120 #: authentik/core/api/providers.py:122
msgid "SAML Provider from Metadata" msgid "SAML Provider from Metadata"
msgstr "" msgstr ""
#: authentik/core/api/providers.py:121 #: authentik/core/api/providers.py:123
msgid "Create a SAML Provider by importing its Metadata." msgid "Create a SAML Provider by importing its Metadata."
msgstr "" msgstr ""
#: authentik/core/api/users.py:156 #: authentik/core/api/users.py:150
msgid "No leading or trailing slashes allowed." msgid "No leading or trailing slashes allowed."
msgstr "" msgstr ""
#: authentik/core/api/users.py:159 #: authentik/core/api/users.py:153
msgid "No empty segments in user path allowed." msgid "No empty segments in user path allowed."
msgstr "" msgstr ""
#: authentik/core/models.py:86 #: authentik/core/models.py:85
msgid "name" msgid "name"
msgstr "" msgstr ""
#: authentik/core/models.py:88 #: authentik/core/models.py:87
msgid "Users added to this group will be superusers." msgid "Users added to this group will be superusers."
msgstr "" msgstr ""
#: authentik/core/models.py:162 #: authentik/core/models.py:161
msgid "Group" msgid "Group"
msgstr "" msgstr ""
#: authentik/core/models.py:163 #: authentik/core/models.py:162
msgid "Groups" msgid "Groups"
msgstr "" msgstr ""
#: authentik/core/models.py:178 #: authentik/core/models.py:177
msgid "User's display name." msgid "User's display name."
msgstr "" msgstr ""
#: authentik/core/models.py:274 authentik/providers/oauth2/models.py:295 #: authentik/core/models.py:273 authentik/providers/oauth2/models.py:295
msgid "User" msgid "User"
msgstr "" msgstr ""
#: authentik/core/models.py:275 #: authentik/core/models.py:274
msgid "Users" msgid "Users"
msgstr "" msgstr ""
#: authentik/core/models.py:277 #: authentik/core/models.py:276
#: authentik/stages/email/templates/email/password_reset.html:28 #: authentik/stages/email/templates/email/password_reset.html:28
msgid "Reset Password" msgid "Reset Password"
msgstr "" msgstr ""
#: authentik/core/models.py:278 #: authentik/core/models.py:277
msgid "Can impersonate other users" msgid "Can impersonate other users"
msgstr "" msgstr ""
#: authentik/core/models.py:279 authentik/rbac/models.py:54 #: authentik/core/models.py:278 authentik/rbac/models.py:54
msgid "Can assign permissions to users" msgid "Can assign permissions to users"
msgstr "" msgstr ""
#: authentik/core/models.py:280 authentik/rbac/models.py:55 #: authentik/core/models.py:279 authentik/rbac/models.py:55
msgid "Can unassign permissions from users" msgid "Can unassign permissions from users"
msgstr "" msgstr ""
#: authentik/core/models.py:294 #: authentik/core/models.py:293
msgid "" msgid ""
"Flow used for authentication when the associated application is accessed by " "Flow used for authentication when the associated application is accessed by "
"an un-authenticated user." "an un-authenticated user."
msgstr "" msgstr ""
#: authentik/core/models.py:304 #: authentik/core/models.py:303
msgid "Flow used when authorizing this provider." msgid "Flow used when authorizing this provider."
msgstr "" msgstr ""
#: authentik/core/models.py:316 #: authentik/core/models.py:315
msgid "" msgid ""
"Accessed from applications; optional backchannel providers for protocols " "Accessed from applications; optional backchannel providers for protocols "
"like LDAP and SCIM." "like LDAP and SCIM."
msgstr "" msgstr ""
#: authentik/core/models.py:371 #: authentik/core/models.py:370
msgid "Application's display Name." msgid "Application's display Name."
msgstr "" msgstr ""
#: authentik/core/models.py:372 #: authentik/core/models.py:371
msgid "Internal application name, used in URLs." msgid "Internal application name, used in URLs."
msgstr "" msgstr ""
#: authentik/core/models.py:384 #: authentik/core/models.py:383
msgid "Open launch URL in a new browser tab or window." msgid "Open launch URL in a new browser tab or window."
msgstr "" msgstr ""
#: authentik/core/models.py:448 #: authentik/core/models.py:447
msgid "Application" msgid "Application"
msgstr "" msgstr ""
#: authentik/core/models.py:449 #: authentik/core/models.py:448
msgid "Applications" msgid "Applications"
msgstr "" msgstr ""
#: authentik/core/models.py:455 #: authentik/core/models.py:454
msgid "Use the source-specific identifier" msgid "Use the source-specific identifier"
msgstr "" msgstr ""
#: authentik/core/models.py:457 #: authentik/core/models.py:456
msgid "" msgid ""
"Link to a user with identical email address. Can have security implications " "Link to a user with identical email address. Can have security implications "
"when a source doesn't validate email addresses." "when a source doesn't validate email addresses."
msgstr "" msgstr ""
#: authentik/core/models.py:461 #: authentik/core/models.py:460
msgid "" msgid ""
"Use the user's email address, but deny enrollment when the email address " "Use the user's email address, but deny enrollment when the email address "
"already exists." "already exists."
msgstr "" msgstr ""
#: authentik/core/models.py:464 #: authentik/core/models.py:463
msgid "" msgid ""
"Link to a user with identical username. Can have security implications when " "Link to a user with identical username. Can have security implications when "
"a username is used with another source." "a username is used with another source."
msgstr "" msgstr ""
#: authentik/core/models.py:468 #: authentik/core/models.py:467
msgid "" msgid ""
"Use the user's username, but deny enrollment when the username already " "Use the user's username, but deny enrollment when the username already "
"exists." "exists."
msgstr "" msgstr ""
#: authentik/core/models.py:475 #: authentik/core/models.py:474
msgid "Source's display Name." msgid "Source's display Name."
msgstr "" msgstr ""
#: authentik/core/models.py:476 #: authentik/core/models.py:475
msgid "Internal source name, used in URLs." msgid "Internal source name, used in URLs."
msgstr "" msgstr ""
#: authentik/core/models.py:495 #: authentik/core/models.py:494
msgid "Flow to use when authenticating existing users." msgid "Flow to use when authenticating existing users."
msgstr "" msgstr ""
#: authentik/core/models.py:504 #: authentik/core/models.py:503
msgid "Flow to use when enrolling new users." msgid "Flow to use when enrolling new users."
msgstr "" msgstr ""
#: authentik/core/models.py:512 #: authentik/core/models.py:511
msgid "" msgid ""
"How the source determines if an existing user should be authenticated or a " "How the source determines if an existing user should be authenticated or a "
"new user enrolled." "new user enrolled."
msgstr "" msgstr ""
#: authentik/core/models.py:684 #: authentik/core/models.py:683
msgid "Token" msgid "Token"
msgstr "" msgstr ""
#: authentik/core/models.py:685 #: authentik/core/models.py:684
msgid "Tokens" msgid "Tokens"
msgstr "" msgstr ""
#: authentik/core/models.py:690 #: authentik/core/models.py:689
msgid "View token's key" msgid "View token's key"
msgstr "" msgstr ""
#: authentik/core/models.py:726 #: authentik/core/models.py:725
msgid "Property Mapping" msgid "Property Mapping"
msgstr "" msgstr ""
#: authentik/core/models.py:727 #: authentik/core/models.py:726
msgid "Property Mappings" msgid "Property Mappings"
msgstr "" msgstr ""
#: authentik/core/models.py:762 #: authentik/core/models.py:763
msgid "Authenticated Session" msgid "Authenticated Session"
msgstr "" msgstr ""
#: authentik/core/models.py:763 #: authentik/core/models.py:764
msgid "Authenticated Sessions" msgid "Authenticated Sessions"
msgstr "" msgstr ""
@ -320,12 +320,12 @@ msgstr ""
msgid "Go home" msgid "Go home"
msgstr "" msgstr ""
#: authentik/core/templates/login/base_full.html:89 #: authentik/core/templates/login/base_full.html:75
msgid "Powered by authentik" msgid "Powered by authentik"
msgstr "" msgstr ""
#: authentik/core/views/apps.py:53 #: authentik/core/views/apps.py:53
#: authentik/providers/oauth2/views/authorize.py:393 #: authentik/providers/oauth2/views/authorize.py:434
#: authentik/providers/oauth2/views/device_init.py:70 #: authentik/providers/oauth2/views/device_init.py:70
#: authentik/providers/saml/views/sso.py:70 #: authentik/providers/saml/views/sso.py:70
#, python-format #, python-format
@ -354,6 +354,10 @@ msgstr ""
msgid "Certificate-Key Pairs" msgid "Certificate-Key Pairs"
msgstr "" msgstr ""
#: authentik/enterprise/api.py:33
msgid "Enterprise is required to create/update this object."
msgstr ""
#: authentik/enterprise/models.py:183 #: authentik/enterprise/models.py:183
msgid "License" msgid "License"
msgstr "" msgstr ""
@ -370,105 +374,152 @@ msgstr ""
msgid "License Usage Records" msgid "License Usage Records"
msgstr "" msgstr ""
#: authentik/events/models.py:291 #: authentik/enterprise/policy.py:18
msgid "Enterprise required to access this feature."
msgstr ""
#: authentik/enterprise/policy.py:20
msgid "Feature only accessible for internal users."
msgstr ""
#: authentik/enterprise/providers/rac/models.py:48
#: authentik/stages/user_login/models.py:39
msgid ""
"Determines how long a session lasts. Default of 0 means that the sessions "
"lasts until the browser is closed. (Format: hours=-1;minutes=-2;seconds=-3)"
msgstr ""
#: authentik/enterprise/providers/rac/models.py:71
msgid "RAC Provider"
msgstr ""
#: authentik/enterprise/providers/rac/models.py:72
msgid "RAC Providers"
msgstr ""
#: authentik/enterprise/providers/rac/models.py:100
msgid "RAC Endpoint"
msgstr ""
#: authentik/enterprise/providers/rac/models.py:101
msgid "RAC Endpoints"
msgstr ""
#: authentik/enterprise/providers/rac/models.py:122
msgid "RAC Property Mapping"
msgstr ""
#: authentik/enterprise/providers/rac/models.py:123
msgid "RAC Property Mappings"
msgstr ""
#: authentik/enterprise/providers/rac/views.py:108
msgid "Maximum connection limit reached."
msgstr ""
#: authentik/enterprise/providers/rac/views.py:112
msgid "(You are already connected in another tab/window)"
msgstr ""
#: authentik/events/models.py:286
msgid "Event" msgid "Event"
msgstr "" msgstr ""
#: authentik/events/models.py:292 #: authentik/events/models.py:287
msgid "Events" msgid "Events"
msgstr "" msgstr ""
#: authentik/events/models.py:298 #: authentik/events/models.py:293
msgid "authentik inbuilt notifications" msgid "authentik inbuilt notifications"
msgstr "" msgstr ""
#: authentik/events/models.py:299 #: authentik/events/models.py:294
msgid "Generic Webhook" msgid "Generic Webhook"
msgstr "" msgstr ""
#: authentik/events/models.py:300 #: authentik/events/models.py:295
msgid "Slack Webhook (Slack/Discord)" msgid "Slack Webhook (Slack/Discord)"
msgstr "" msgstr ""
#: authentik/events/models.py:301 #: authentik/events/models.py:296
msgid "Email" msgid "Email"
msgstr "" msgstr ""
#: authentik/events/models.py:319 #: authentik/events/models.py:314
msgid "" msgid ""
"Only send notification once, for example when sending a webhook into a chat " "Only send notification once, for example when sending a webhook into a chat "
"channel." "channel."
msgstr "" msgstr ""
#: authentik/events/models.py:384 #: authentik/events/models.py:379
msgid "Severity" msgid "Severity"
msgstr "" msgstr ""
#: authentik/events/models.py:389 #: authentik/events/models.py:384
msgid "Dispatched for user" msgid "Dispatched for user"
msgstr "" msgstr ""
#: authentik/events/models.py:398 #: authentik/events/models.py:393
msgid "Event user" msgid "Event user"
msgstr "" msgstr ""
#: authentik/events/models.py:492 #: authentik/events/models.py:487
msgid "Notification Transport" msgid "Notification Transport"
msgstr "" msgstr ""
#: authentik/events/models.py:493 #: authentik/events/models.py:488
msgid "Notification Transports" msgid "Notification Transports"
msgstr "" msgstr ""
#: authentik/events/models.py:499 #: authentik/events/models.py:494
msgid "Notice" msgid "Notice"
msgstr "" msgstr ""
#: authentik/events/models.py:500 #: authentik/events/models.py:495
msgid "Warning" msgid "Warning"
msgstr "" msgstr ""
#: authentik/events/models.py:501 #: authentik/events/models.py:496
msgid "Alert" msgid "Alert"
msgstr "" msgstr ""
#: authentik/events/models.py:526 #: authentik/events/models.py:521
msgid "Notification" msgid "Notification"
msgstr "" msgstr ""
#: authentik/events/models.py:527 #: authentik/events/models.py:522
msgid "Notifications" msgid "Notifications"
msgstr "" msgstr ""
#: authentik/events/models.py:537 #: authentik/events/models.py:532
msgid "" msgid ""
"Select which transports should be used to notify the user. If none are " "Select which transports should be used to notify the user. If none are "
"selected, the notification will only be shown in the authentik UI." "selected, the notification will only be shown in the authentik UI."
msgstr "" msgstr ""
#: authentik/events/models.py:545 #: authentik/events/models.py:540
msgid "Controls which severity level the created notifications will have." msgid "Controls which severity level the created notifications will have."
msgstr "" msgstr ""
#: authentik/events/models.py:550 #: authentik/events/models.py:545
msgid "" msgid ""
"Define which group of users this notification should be sent and shown to. " "Define which group of users this notification should be sent and shown to. "
"If left empty, Notification won't ben sent." "If left empty, Notification won't ben sent."
msgstr "" msgstr ""
#: authentik/events/models.py:568 #: authentik/events/models.py:563
msgid "Notification Rule" msgid "Notification Rule"
msgstr "" msgstr ""
#: authentik/events/models.py:569 #: authentik/events/models.py:564
msgid "Notification Rules" msgid "Notification Rules"
msgstr "" msgstr ""
#: authentik/events/models.py:589 #: authentik/events/models.py:584
msgid "Webhook Mapping" msgid "Webhook Mapping"
msgstr "" msgstr ""
#: authentik/events/models.py:590 #: authentik/events/models.py:585
msgid "Webhook Mappings" msgid "Webhook Mappings"
msgstr "" msgstr ""
@ -529,7 +580,7 @@ msgstr ""
msgid "Pre-flow policies" msgid "Pre-flow policies"
msgstr "" msgstr ""
#: authentik/flows/api/flows_diagram.py:214 authentik/flows/models.py:193 #: authentik/flows/api/flows_diagram.py:214 authentik/flows/models.py:194
msgid "Flow" msgid "Flow"
msgstr "" msgstr ""
@ -537,72 +588,72 @@ msgstr ""
msgid "Flow does not apply to current user." msgid "Flow does not apply to current user."
msgstr "" msgstr ""
#: authentik/flows/models.py:114 #: authentik/flows/models.py:115
#, python-format #, python-format
msgid "Dynamic In-memory stage: %(doc)s" msgid "Dynamic In-memory stage: %(doc)s"
msgstr "" msgstr ""
#: authentik/flows/models.py:129 #: authentik/flows/models.py:130
msgid "Visible in the URL." msgid "Visible in the URL."
msgstr "" msgstr ""
#: authentik/flows/models.py:131 #: authentik/flows/models.py:132
msgid "Shown as the Title in Flow pages." msgid "Shown as the Title in Flow pages."
msgstr "" msgstr ""
#: authentik/flows/models.py:138 #: authentik/flows/models.py:139
msgid "" msgid ""
"Decides what this Flow is used for. For example, the Authentication flow is " "Decides what this Flow is used for. For example, the Authentication flow is "
"redirect to when an un-authenticated user visits authentik." "redirect to when an un-authenticated user visits authentik."
msgstr "" msgstr ""
#: authentik/flows/models.py:147 #: authentik/flows/models.py:148
msgid "Background shown during execution" msgid "Background shown during execution"
msgstr "" msgstr ""
#: authentik/flows/models.py:154 #: authentik/flows/models.py:155
msgid "" msgid ""
"Enable compatibility mode, increases compatibility with password managers on " "Enable compatibility mode, increases compatibility with password managers on "
"mobile devices." "mobile devices."
msgstr "" msgstr ""
#: authentik/flows/models.py:162 #: authentik/flows/models.py:163
msgid "Configure what should happen when a flow denies access to a user." msgid "Configure what should happen when a flow denies access to a user."
msgstr "" msgstr ""
#: authentik/flows/models.py:168 #: authentik/flows/models.py:169
msgid "Required level of authentication and authorization to access a flow." msgid "Required level of authentication and authorization to access a flow."
msgstr "" msgstr ""
#: authentik/flows/models.py:194 #: authentik/flows/models.py:195
msgid "Flows" msgid "Flows"
msgstr "" msgstr ""
#: authentik/flows/models.py:197 #: authentik/flows/models.py:198
msgid "Can export a Flow" msgid "Can export a Flow"
msgstr "" msgstr ""
#: authentik/flows/models.py:198 #: authentik/flows/models.py:199
msgid "Can inspect a Flow's execution" msgid "Can inspect a Flow's execution"
msgstr "" msgstr ""
#: authentik/flows/models.py:199 #: authentik/flows/models.py:200
msgid "View Flow's cache metrics" msgid "View Flow's cache metrics"
msgstr "" msgstr ""
#: authentik/flows/models.py:200 #: authentik/flows/models.py:201
msgid "Clear Flow's cache metrics" msgid "Clear Flow's cache metrics"
msgstr "" msgstr ""
#: authentik/flows/models.py:216 #: authentik/flows/models.py:217
msgid "Evaluate policies during the Flow planning process." msgid "Evaluate policies during the Flow planning process."
msgstr "" msgstr ""
#: authentik/flows/models.py:220 #: authentik/flows/models.py:221
msgid "Evaluate policies when the Stage is present to the user." msgid "Evaluate policies when the Stage is present to the user."
msgstr "" msgstr ""
#: authentik/flows/models.py:227 #: authentik/flows/models.py:228
msgid "" msgid ""
"Configure how the flow executor should handle an invalid response to a " "Configure how the flow executor should handle an invalid response to a "
"challenge. RETRY returns the error message and a similar challenge to the " "challenge. RETRY returns the error message and a similar challenge to the "
@ -610,25 +661,25 @@ msgid ""
"RESTART_WITH_CONTEXT restarts the flow while keeping the current context." "RESTART_WITH_CONTEXT restarts the flow while keeping the current context."
msgstr "" msgstr ""
#: authentik/flows/models.py:250 #: authentik/flows/models.py:251
msgid "Flow Stage Binding" msgid "Flow Stage Binding"
msgstr "" msgstr ""
#: authentik/flows/models.py:251 #: authentik/flows/models.py:252
msgid "Flow Stage Bindings" msgid "Flow Stage Bindings"
msgstr "" msgstr ""
#: authentik/flows/models.py:266 #: authentik/flows/models.py:267
msgid "" msgid ""
"Flow used by an authenticated user to configure this Stage. If empty, user " "Flow used by an authenticated user to configure this Stage. If empty, user "
"will not be able to configure this stage." "will not be able to configure this stage."
msgstr "" msgstr ""
#: authentik/flows/models.py:306 #: authentik/flows/models.py:307
msgid "Flow Token" msgid "Flow Token"
msgstr "" msgstr ""
#: authentik/flows/models.py:307 #: authentik/flows/models.py:308
msgid "Flow Tokens" msgid "Flow Tokens"
msgstr "" msgstr ""
@ -651,75 +702,75 @@ msgstr ""
msgid "Invalid kubeconfig" msgid "Invalid kubeconfig"
msgstr "" msgstr ""
#: authentik/outposts/models.py:122 #: authentik/outposts/models.py:123
msgid "" msgid ""
"If enabled, use the local connection. Required Docker socket/Kubernetes " "If enabled, use the local connection. Required Docker socket/Kubernetes "
"Integration" "Integration"
msgstr "" msgstr ""
#: authentik/outposts/models.py:152 #: authentik/outposts/models.py:153
msgid "Outpost Service-Connection" msgid "Outpost Service-Connection"
msgstr "" msgstr ""
#: authentik/outposts/models.py:153 #: authentik/outposts/models.py:154
msgid "Outpost Service-Connections" msgid "Outpost Service-Connections"
msgstr "" msgstr ""
#: authentik/outposts/models.py:161 #: authentik/outposts/models.py:162
msgid "" msgid ""
"Can be in the format of 'unix://<path>' when connecting to a local docker " "Can be in the format of 'unix://<path>' when connecting to a local docker "
"daemon, or 'https://<hostname>:2376' when connecting to a remote system." "daemon, or 'https://<hostname>:2376' when connecting to a remote system."
msgstr "" msgstr ""
#: authentik/outposts/models.py:173 #: authentik/outposts/models.py:174
msgid "" msgid ""
"CA which the endpoint's Certificate is verified against. Can be left empty " "CA which the endpoint's Certificate is verified against. Can be left empty "
"for no validation." "for no validation."
msgstr "" msgstr ""
#: authentik/outposts/models.py:185 #: authentik/outposts/models.py:186
msgid "" msgid ""
"Certificate/Key used for authentication. Can be left empty for no " "Certificate/Key used for authentication. Can be left empty for no "
"authentication." "authentication."
msgstr "" msgstr ""
#: authentik/outposts/models.py:203 #: authentik/outposts/models.py:204
msgid "Docker Service-Connection" msgid "Docker Service-Connection"
msgstr "" msgstr ""
#: authentik/outposts/models.py:204 #: authentik/outposts/models.py:205
msgid "Docker Service-Connections" msgid "Docker Service-Connections"
msgstr "" msgstr ""
#: authentik/outposts/models.py:212 #: authentik/outposts/models.py:213
msgid "" msgid ""
"Paste your kubeconfig here. authentik will automatically use the currently " "Paste your kubeconfig here. authentik will automatically use the currently "
"selected context." "selected context."
msgstr "" msgstr ""
#: authentik/outposts/models.py:218 #: authentik/outposts/models.py:219
msgid "Verify SSL Certificates of the Kubernetes API endpoint" msgid "Verify SSL Certificates of the Kubernetes API endpoint"
msgstr "" msgstr ""
#: authentik/outposts/models.py:235 #: authentik/outposts/models.py:236
msgid "Kubernetes Service-Connection" msgid "Kubernetes Service-Connection"
msgstr "" msgstr ""
#: authentik/outposts/models.py:236 #: authentik/outposts/models.py:237
msgid "Kubernetes Service-Connections" msgid "Kubernetes Service-Connections"
msgstr "" msgstr ""
#: authentik/outposts/models.py:252 #: authentik/outposts/models.py:253
msgid "" msgid ""
"Select Service-Connection authentik should use to manage this outpost. Leave " "Select Service-Connection authentik should use to manage this outpost. Leave "
"empty if authentik should not handle the deployment." "empty if authentik should not handle the deployment."
msgstr "" msgstr ""
#: authentik/outposts/models.py:419 #: authentik/outposts/models.py:420
msgid "Outpost" msgid "Outpost"
msgstr "" msgstr ""
#: authentik/outposts/models.py:420 #: authentik/outposts/models.py:421
msgid "Outposts" msgid "Outposts"
msgstr "" msgstr ""
@ -902,11 +953,11 @@ msgstr ""
msgid "Reputation Policies" msgid "Reputation Policies"
msgstr "" msgstr ""
#: authentik/policies/reputation/models.py:95 #: authentik/policies/reputation/models.py:96
msgid "Reputation Score" msgid "Reputation Score"
msgstr "" msgstr ""
#: authentik/policies/reputation/models.py:96 #: authentik/policies/reputation/models.py:97
msgid "Reputation Scores" msgid "Reputation Scores"
msgstr "" msgstr ""
@ -1169,63 +1220,63 @@ msgid "OAuth2/OpenID Providers"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:297 #: authentik/providers/oauth2/models.py:297
#: authentik/providers/oauth2/models.py:429 #: authentik/providers/oauth2/models.py:430
msgid "Scopes" msgid "Scopes"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:316 #: authentik/providers/oauth2/models.py:317
msgid "Code" msgid "Code"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:317 #: authentik/providers/oauth2/models.py:318
msgid "Nonce" msgid "Nonce"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:318 #: authentik/providers/oauth2/models.py:319
msgid "Code Challenge" msgid "Code Challenge"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:320 #: authentik/providers/oauth2/models.py:321
msgid "Code Challenge Method" msgid "Code Challenge Method"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:340 #: authentik/providers/oauth2/models.py:341
msgid "Authorization Code" msgid "Authorization Code"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:341 #: authentik/providers/oauth2/models.py:342
msgid "Authorization Codes" msgid "Authorization Codes"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:383 #: authentik/providers/oauth2/models.py:384
msgid "OAuth2 Access Token" msgid "OAuth2 Access Token"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:384 #: authentik/providers/oauth2/models.py:385
msgid "OAuth2 Access Tokens" msgid "OAuth2 Access Tokens"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:394 #: authentik/providers/oauth2/models.py:395
msgid "ID Token" msgid "ID Token"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:413 #: authentik/providers/oauth2/models.py:414
msgid "OAuth2 Refresh Token" msgid "OAuth2 Refresh Token"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:414 #: authentik/providers/oauth2/models.py:415
msgid "OAuth2 Refresh Tokens" msgid "OAuth2 Refresh Tokens"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:441 #: authentik/providers/oauth2/models.py:442
msgid "Device Token" msgid "Device Token"
msgstr "" msgstr ""
#: authentik/providers/oauth2/models.py:442 #: authentik/providers/oauth2/models.py:443
msgid "Device Tokens" msgid "Device Tokens"
msgstr "" msgstr ""
#: authentik/providers/oauth2/views/authorize.py:448 #: authentik/providers/oauth2/views/authorize.py:489
#: authentik/providers/saml/views/flows.py:87 #: authentik/providers/saml/views/flows.py:87
#, python-format #, python-format
msgid "Redirecting to %(app)s..." msgid "Redirecting to %(app)s..."
@ -1476,59 +1527,59 @@ msgstr ""
msgid "SAML Property Mappings" msgid "SAML Property Mappings"
msgstr "" msgstr ""
#: authentik/providers/scim/models.py:20 #: authentik/providers/scim/models.py:23
msgid "Base URL to SCIM requests, usually ends in /v2" msgid "Base URL to SCIM requests, usually ends in /v2"
msgstr "" msgstr ""
#: authentik/providers/scim/models.py:21 #: authentik/providers/scim/models.py:24
msgid "Authentication token" msgid "Authentication token"
msgstr "" msgstr ""
#: authentik/providers/scim/models.py:27 authentik/sources/ldap/models.py:98 #: authentik/providers/scim/models.py:30 authentik/sources/ldap/models.py:98
msgid "Property mappings used for group creation/updating." msgid "Property mappings used for group creation/updating."
msgstr "" msgstr ""
#: authentik/providers/scim/models.py:60 #: authentik/providers/scim/models.py:72
msgid "SCIM Provider" msgid "SCIM Provider"
msgstr "" msgstr ""
#: authentik/providers/scim/models.py:61 #: authentik/providers/scim/models.py:73
msgid "SCIM Providers" msgid "SCIM Providers"
msgstr "" msgstr ""
#: authentik/providers/scim/models.py:81 #: authentik/providers/scim/models.py:93
msgid "SCIM Mapping" msgid "SCIM Mapping"
msgstr "" msgstr ""
#: authentik/providers/scim/models.py:82 #: authentik/providers/scim/models.py:94
msgid "SCIM Mappings" msgid "SCIM Mappings"
msgstr "" msgstr ""
#: authentik/providers/scim/tasks.py:52 #: authentik/providers/scim/tasks.py:56
msgid "Starting full SCIM sync" msgid "Starting full SCIM sync"
msgstr "" msgstr ""
#: authentik/providers/scim/tasks.py:59 #: authentik/providers/scim/tasks.py:66
#, python-format #, python-format
msgid "Syncing page %(page)d of users" msgid "Syncing page %(page)d of users"
msgstr "" msgstr ""
#: authentik/providers/scim/tasks.py:63 #: authentik/providers/scim/tasks.py:70
#, python-format #, python-format
msgid "Syncing page %(page)d of groups" msgid "Syncing page %(page)d of groups"
msgstr "" msgstr ""
#: authentik/providers/scim/tasks.py:92 #: authentik/providers/scim/tasks.py:102
#, python-format #, python-format
msgid "Failed to sync user %(user_name)s due to remote error: %(error)s" msgid "Failed to sync user %(user_name)s due to remote error: %(error)s"
msgstr "" msgstr ""
#: authentik/providers/scim/tasks.py:103 authentik/providers/scim/tasks.py:144 #: authentik/providers/scim/tasks.py:113 authentik/providers/scim/tasks.py:154
#, python-format #, python-format
msgid "Stopping sync due to error: %(error)s" msgid "Stopping sync due to error: %(error)s"
msgstr "" msgstr ""
#: authentik/providers/scim/tasks.py:133 #: authentik/providers/scim/tasks.py:143
#, python-format #, python-format
msgid "Failed to sync group %(group_name)s due to remote error: %(error)s" msgid "Failed to sync group %(group_name)s due to remote error: %(error)s"
msgstr "" msgstr ""
@ -2054,7 +2105,7 @@ msgstr ""
msgid "TOTP Devices" msgid "TOTP Devices"
msgstr "" msgstr ""
#: authentik/stages/authenticator_validate/challenge.py:131 #: authentik/stages/authenticator_validate/challenge.py:123
msgid "Invalid Token" msgid "Invalid Token"
msgstr "" msgstr ""
@ -2227,6 +2278,7 @@ msgid "Email Successfully sent."
msgstr "" msgstr ""
#: authentik/stages/email/templates/email/account_confirmation.html:10 #: authentik/stages/email/templates/email/account_confirmation.html:10
#: authentik/stages/email/templates/email/account_confirmation.txt:1
msgid "Welcome!" msgid "Welcome!"
msgstr "" msgstr ""
@ -2249,6 +2301,12 @@ msgid ""
" " " "
msgstr "" msgstr ""
#: authentik/stages/email/templates/email/account_confirmation.txt:3
msgid ""
"We're excited to have you get started. First, you need to confirm your "
"account. Just open the link below."
msgstr ""
#: authentik/stages/email/templates/email/event_notification.html:46 #: authentik/stages/email/templates/email/event_notification.html:46
#, python-format #, python-format
msgid "" msgid ""
@ -2258,6 +2316,25 @@ msgid ""
" " " "
msgstr "" msgstr ""
#: authentik/stages/email/templates/email/event_notification.txt:1
msgid "Dear authentik user,"
msgstr ""
#: authentik/stages/email/templates/email/event_notification.txt:3
msgid "The following notification was created:"
msgstr ""
#: authentik/stages/email/templates/email/event_notification.txt:8
msgid "Additional attributes:"
msgstr ""
#: authentik/stages/email/templates/email/event_notification.txt:13
#, python-format
msgid ""
"\n"
"This email was sent from the notification transport %(name)s.\n"
msgstr ""
#: authentik/stages/email/templates/email/password_reset.html:10 #: authentik/stages/email/templates/email/password_reset.html:10
#, python-format #, python-format
msgid "" msgid ""
@ -2283,6 +2360,26 @@ msgid ""
" " " "
msgstr "" msgstr ""
#: authentik/stages/email/templates/email/password_reset.txt:1
#, python-format
msgid "Hi %(username)s,"
msgstr ""
#: authentik/stages/email/templates/email/password_reset.txt:3
msgid ""
"\n"
"You recently requested to change your password for your authentik account. "
"Use the link below to set a new password.\n"
msgstr ""
#: authentik/stages/email/templates/email/password_reset.txt:7
#, python-format
msgid ""
"\n"
"If you did not request a password change, please ignore this Email. The link "
"above is valid for %(expires)s.\n"
msgstr ""
#: authentik/stages/email/templates/email/setup.html:9 #: authentik/stages/email/templates/email/setup.html:9
msgid "authentik Test-Email" msgid "authentik Test-Email"
msgstr "" msgstr ""
@ -2295,6 +2392,13 @@ msgid ""
" " " "
msgstr "" msgstr ""
#: authentik/stages/email/templates/email/setup.txt:2
msgid ""
"\n"
"This is a test email to inform you, that you've successfully configured "
"authentik emails.\n"
msgstr ""
#: authentik/stages/identification/api.py:20 #: authentik/stages/identification/api.py:20
msgid "When no user fields are selected, at least one source must be selected" msgid "When no user fields are selected, at least one source must be selected"
msgstr "" msgstr ""
@ -2539,36 +2643,38 @@ msgstr ""
msgid "No Pending User." msgid "No Pending User."
msgstr "" msgstr ""
#: authentik/stages/user_login/models.py:19 #: authentik/stages/user_login/models.py:47
msgid "" msgid "Bind sessions created by this stage to the configured network"
"Determines how long a session lasts. Default of 0 means that the sessions "
"lasts until the browser is closed. (Format: hours=-1;minutes=-2;seconds=-3)"
msgstr "" msgstr ""
#: authentik/stages/user_login/models.py:25 #: authentik/stages/user_login/models.py:52
msgid "Bind sessions created by this stage to the configured GeoIP location"
msgstr ""
#: authentik/stages/user_login/models.py:55
msgid "Terminate all other sessions of the user logging in." msgid "Terminate all other sessions of the user logging in."
msgstr "" msgstr ""
#: authentik/stages/user_login/models.py:31 #: authentik/stages/user_login/models.py:61
msgid "" msgid ""
"Offset the session will be extended by when the user picks the remember me " "Offset the session will be extended by when the user picks the remember me "
"option. Default of 0 means that the remember me option will not be shown. " "option. Default of 0 means that the remember me option will not be shown. "
"(Format: hours=-1;minutes=-2;seconds=-3)" "(Format: hours=-1;minutes=-2;seconds=-3)"
msgstr "" msgstr ""
#: authentik/stages/user_login/models.py:54 #: authentik/stages/user_login/models.py:84
msgid "User Login Stage" msgid "User Login Stage"
msgstr "" msgstr ""
#: authentik/stages/user_login/models.py:55 #: authentik/stages/user_login/models.py:85
msgid "User Login Stages" msgid "User Login Stages"
msgstr "" msgstr ""
#: authentik/stages/user_login/stage.py:57 #: authentik/stages/user_login/stage.py:85
msgid "No Pending user to login." msgid "No Pending user to login."
msgstr "" msgstr ""
#: authentik/stages/user_login/stage.py:90 #: authentik/stages/user_login/stage.py:112
msgid "Successfully logged in!" msgid "Successfully logged in!"
msgstr "" msgstr ""

12
web/package-lock.json generated
View File

@ -25,7 +25,6 @@
"@patternfly/elements": "^2.4.0", "@patternfly/elements": "^2.4.0",
"@patternfly/patternfly": "^4.224.2", "@patternfly/patternfly": "^4.224.2",
"@sentry/browser": "^7.93.0", "@sentry/browser": "^7.93.0",
"@sentry/tracing": "^7.93.0",
"@webcomponents/webcomponentsjs": "^2.8.0", "@webcomponents/webcomponentsjs": "^2.8.0",
"base64-js": "^1.5.1", "base64-js": "^1.5.1",
"chart.js": "^4.4.1", "chart.js": "^4.4.1",
@ -4818,17 +4817,6 @@
"node": ">=12" "node": ">=12"
} }
}, },
"node_modules/@sentry/tracing": {
"version": "7.93.0",
"resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.93.0.tgz",
"integrity": "sha512-n4XbAQ7e098Jzv4ZvpXAsFgM+XFfjhKci18r7s3UfDMnrB4FTCwhHZoeiygO8PZhB944mEFbNXNFhHkb8nTDbA==",
"dependencies": {
"@sentry-internal/tracing": "7.93.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/types": { "node_modules/@sentry/types": {
"version": "7.93.0", "version": "7.93.0",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.93.0.tgz", "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.93.0.tgz",

View File

@ -50,7 +50,6 @@
"@patternfly/elements": "^2.4.0", "@patternfly/elements": "^2.4.0",
"@patternfly/patternfly": "^4.224.2", "@patternfly/patternfly": "^4.224.2",
"@sentry/browser": "^7.93.0", "@sentry/browser": "^7.93.0",
"@sentry/tracing": "^7.93.0",
"@webcomponents/webcomponentsjs": "^2.8.0", "@webcomponents/webcomponentsjs": "^2.8.0",
"base64-js": "^1.5.1", "base64-js": "^1.5.1",
"chart.js": "^4.4.1", "chart.js": "^4.4.1",

View File

@ -117,8 +117,8 @@ export class GroupViewPage extends AKElement {
<dd class="pf-c-description-list__description"> <dd class="pf-c-description-list__description">
<div class="pf-c-description-list__text"> <div class="pf-c-description-list__text">
<ak-status-label <ak-status-label
type="warning" type="info"
?good${this.group.isSuperuser} ?good=${this.group.isSuperuser}
></ak-status-label> ></ak-status-label>
</div> </div>
</dd> </dd>

View File

@ -65,7 +65,7 @@ export class InvitationForm extends ModelForm<Invitation, string> {
value="${dateTimeLocal(first(this.instance?.expires, new Date()))}" value="${dateTimeLocal(first(this.instance?.expires, new Date()))}"
/> />
</ak-form-element-horizontal> </ak-form-element-horizontal>
<ak-form-element-horizontal label=${msg("Flow")} ?required=${true} name="flow"> <ak-form-element-horizontal label=${msg("Flow")} name="flow">
<ak-flow-search <ak-flow-search
flowType=${FlowsInstancesListDesignationEnum.Enrollment} flowType=${FlowsInstancesListDesignationEnum.Enrollment}
.currentFlow=${this.instance?.flow} .currentFlow=${this.instance?.flow}

View File

@ -3,7 +3,6 @@ import { VERSION } from "@goauthentik/common/constants";
import { SentryIgnoredError } from "@goauthentik/common/errors"; import { SentryIgnoredError } from "@goauthentik/common/errors";
import { me } from "@goauthentik/common/users"; import { me } from "@goauthentik/common/users";
import * as Sentry from "@sentry/browser"; import * as Sentry from "@sentry/browser";
import { Integrations } from "@sentry/tracing";
import { CapabilitiesEnum, Config, ResponseError } from "@goauthentik/api"; import { CapabilitiesEnum, Config, ResponseError } from "@goauthentik/api";
@ -28,8 +27,10 @@ export async function configureSentry(canDoPpi = false): Promise<Config> {
], ],
release: `authentik@${VERSION}`, release: `authentik@${VERSION}`,
integrations: [ integrations: [
new Integrations.BrowserTracing({ new Sentry.BrowserTracing({
tracingOrigins: [window.location.host, "localhost"], shouldCreateSpanForRequest: (url: string) => {
return url.startsWith(window.location.host);
},
}), }),
], ],
tracesSampleRate: cfg.errorReporting.tracesSampleRate, tracesSampleRate: cfg.errorReporting.tracesSampleRate,

View File

@ -157,6 +157,10 @@ select[multiple] option:checked {
.pf-c-switch__input:checked ~ .pf-c-switch__label { .pf-c-switch__input:checked ~ .pf-c-switch__label {
--pf-c-switch__input--checked__label--Color: var(--ak-dark-foreground); --pf-c-switch__input--checked__label--Color: var(--ak-dark-foreground);
} }
input[type="datetime-local"]::-webkit-calendar-picker-indicator,
input[type="date"]::-webkit-calendar-picker-indicator {
filter: invert(1);
}
/* select toggle */ /* select toggle */
.pf-c-select__toggle::before { .pf-c-select__toggle::before {
--pf-c-select__toggle--before--BorderTopColor: var(--ak-dark-background-lighter); --pf-c-select__toggle--before--BorderTopColor: var(--ak-dark-background-lighter);

View File

@ -1,12 +1,13 @@
import { APIErrorTypes, parseAPIError } from "@goauthentik/app/common/errors";
import { PreventFormSubmit } from "@goauthentik/app/elements/forms/helpers"; import { PreventFormSubmit } from "@goauthentik/app/elements/forms/helpers";
import { EVENT_REFRESH } from "@goauthentik/common/constants"; import { EVENT_REFRESH } from "@goauthentik/common/constants";
import { ascii_letters, digits, groupBy, randomString } from "@goauthentik/common/utils"; import { ascii_letters, digits, groupBy, randomString } from "@goauthentik/common/utils";
import { AKElement } from "@goauthentik/elements/Base"; import { AKElement } from "@goauthentik/elements/Base";
import { CustomEmitterElement } from "@goauthentik/elements/utils/eventEmitter"; import { CustomEmitterElement } from "@goauthentik/elements/utils/eventEmitter";
import { msg } from "@lit/localize"; import { msg, str } from "@lit/localize";
import { TemplateResult, html, render } from "lit"; import { TemplateResult, html, render } from "lit";
import { customElement, property } from "lit/decorators.js"; import { customElement, property, state } from "lit/decorators.js";
import { styleMap } from "lit/directives/style-map.js"; import { styleMap } from "lit/directives/style-map.js";
import PFDropdown from "@patternfly/patternfly/components/Dropdown/dropdown.css"; import PFDropdown from "@patternfly/patternfly/components/Dropdown/dropdown.css";
@ -15,6 +16,8 @@ import PFFormControl from "@patternfly/patternfly/components/FormControl/form-co
import PFSelect from "@patternfly/patternfly/components/Select/select.css"; import PFSelect from "@patternfly/patternfly/components/Select/select.css";
import PFBase from "@patternfly/patternfly/patternfly-base.css"; import PFBase from "@patternfly/patternfly/patternfly-base.css";
import { ResponseError } from "@goauthentik/api";
type Group<T> = [string, T[]]; type Group<T> = [string, T[]];
@customElement("ak-search-select") @customElement("ak-search-select")
@ -99,6 +102,9 @@ export class SearchSelect<T> extends CustomEmitterElement(AKElement) {
isFetchingData = false; isFetchingData = false;
@state()
error?: APIErrorTypes;
static styles = [PFBase, PFForm, PFFormControl, PFSelect]; static styles = [PFBase, PFForm, PFFormControl, PFSelect];
constructor() { constructor() {
@ -139,15 +145,23 @@ export class SearchSelect<T> extends CustomEmitterElement(AKElement) {
return; return;
} }
this.isFetchingData = true; this.isFetchingData = true;
this.fetchObjects(this.query).then((objects) => { this.fetchObjects(this.query)
objects.forEach((obj) => { .then((objects) => {
if (this.selected && this.selected(obj, objects || [])) { objects.forEach((obj) => {
this.selectedObject = obj; if (this.selected && this.selected(obj, objects || [])) {
} this.selectedObject = obj;
}
});
this.objects = objects;
this.isFetchingData = false;
})
.catch((exc: ResponseError) => {
this.isFetchingData = false;
this.objects = undefined;
parseAPIError(exc).then((err) => {
this.error = err;
});
}); });
this.objects = objects;
this.isFetchingData = false;
});
} }
connectedCallback(): void { connectedCallback(): void {
@ -307,11 +321,19 @@ export class SearchSelect<T> extends CustomEmitterElement(AKElement) {
} }
get renderedValue() { get renderedValue() {
// prettier-ignore if (this.error) {
return (!this.objects) ? msg("Loading...") return msg(str`Failed to fetch objects: ${this.error.detail}`);
: (this.selectedObject) ? this.renderElement(this.selectedObject) }
: (this.blankable) ? this.emptyOption if (!this.objects) {
: ""; return msg("Loading...");
}
if (this.selectedObject) {
return this.renderElement(this.selectedObject);
}
if (this.blankable) {
return this.emptyOption;
}
return "";
} }
render(): TemplateResult { render(): TemplateResult {

View File

@ -6255,6 +6255,9 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s95d56e58f816d211"> <trans-unit id="s95d56e58f816d211">
<source>Dutch</source> <source>Dutch</source>
</trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -6531,6 +6531,9 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s95d56e58f816d211"> <trans-unit id="s95d56e58f816d211">
<source>Dutch</source> <source>Dutch</source>
</trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -6171,6 +6171,9 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s95d56e58f816d211"> <trans-unit id="s95d56e58f816d211">
<source>Dutch</source> <source>Dutch</source>
</trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" ?><xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> <?xml version="1.0"?><xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file target-language="fr" source-language="en" original="lit-localize-inputs" datatype="plaintext"> <file target-language="fr" source-language="en" original="lit-localize-inputs" datatype="plaintext">
<body> <body>
<trans-unit id="s4caed5b7a7e5d89b"> <trans-unit id="s4caed5b7a7e5d89b">
@ -613,9 +613,9 @@ Il y a <x id="0" equiv-text="${ago}"/> jour(s)</target>
</trans-unit> </trans-unit>
<trans-unit id="saa0e2675da69651b"> <trans-unit id="saa0e2675da69651b">
<source>The URL &quot;<x id="0" equiv-text="${this.url}"/>&quot; was not found.</source> <source>The URL "<x id="0" equiv-text="${this.url}"/>" was not found.</source>
<target>L'URL &quot; <target>L'URL "
<x id="0" equiv-text="${this.url}"/>&quot; n'a pas été trouvée.</target> <x id="0" equiv-text="${this.url}"/>" n'a pas été trouvée.</target>
</trans-unit> </trans-unit>
<trans-unit id="s58cd9c2fe836d9c6"> <trans-unit id="s58cd9c2fe836d9c6">
@ -1057,8 +1057,8 @@ Il y a <x id="0" equiv-text="${ago}"/> jour(s)</target>
</trans-unit> </trans-unit>
<trans-unit id="sa8384c9c26731f83"> <trans-unit id="sa8384c9c26731f83">
<source>To allow any redirect URI, set this value to &quot;.*&quot;. Be aware of the possible security implications this can have.</source> <source>To allow any redirect URI, set this value to ".*". Be aware of the possible security implications this can have.</source>
<target>Pour permettre n'importe quelle URI de redirection, définissez cette valeur sur &quot;.*&quot;. Soyez conscient des possibles implications de sécurité que cela peut avoir.</target> <target>Pour permettre n'importe quelle URI de redirection, définissez cette valeur sur ".*". Soyez conscient des possibles implications de sécurité que cela peut avoir.</target>
</trans-unit> </trans-unit>
<trans-unit id="s55787f4dfcdce52b"> <trans-unit id="s55787f4dfcdce52b">
@ -1630,7 +1630,7 @@ Il y a <x id="0" equiv-text="${ago}"/> jour(s)</target>
</trans-unit> </trans-unit>
<trans-unit id="s33ed903c210a6209"> <trans-unit id="s33ed903c210a6209">
<source>Token to authenticate with. Currently only bearer authentication is supported.</source> <source>Token to authenticate with. Currently only bearer authentication is supported.</source>
<target>Jeton d'authentification à utiliser. Actuellement, seule l'authentification &quot;bearer authentication&quot; est prise en charge.</target> <target>Jeton d'authentification à utiliser. Actuellement, seule l'authentification "bearer authentication" est prise en charge.</target>
</trans-unit> </trans-unit>
<trans-unit id="sfc8bb104e2c05af8"> <trans-unit id="sfc8bb104e2c05af8">
@ -1798,8 +1798,8 @@ Il y a <x id="0" equiv-text="${ago}"/> jour(s)</target>
</trans-unit> </trans-unit>
<trans-unit id="sa90b7809586c35ce"> <trans-unit id="sa90b7809586c35ce">
<source>Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon &quot;fa-test&quot;.</source> <source>Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon "fa-test".</source>
<target>Entrez une URL complète, un chemin relatif ou utilisez 'fa://fa-test' pour utiliser l'icône Font Awesome &quot;fa-test&quot;.</target> <target>Entrez une URL complète, un chemin relatif ou utilisez 'fa://fa-test' pour utiliser l'icône Font Awesome "fa-test".</target>
</trans-unit> </trans-unit>
<trans-unit id="s0410779cb47de312"> <trans-unit id="s0410779cb47de312">
@ -2892,7 +2892,7 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s33683c3b1dbaf264"> <trans-unit id="s33683c3b1dbaf264">
<source>To use SSL instead, use 'ldaps://' and disable this option.</source> <source>To use SSL instead, use 'ldaps://' and disable this option.</source>
<target>Pour utiliser SSL à la base, utilisez &quot;ldaps://&quot; et désactviez cette option.</target> <target>Pour utiliser SSL à la base, utilisez "ldaps://" et désactviez cette option.</target>
</trans-unit> </trans-unit>
<trans-unit id="s2221fef80f4753a2"> <trans-unit id="s2221fef80f4753a2">
@ -2981,8 +2981,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s76768bebabb7d543"> <trans-unit id="s76768bebabb7d543">
<source>Field which contains members of a group. Note that if using the &quot;memberUid&quot; field, the value is assumed to contain a relative distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn=some-user,ou=groups,...'</source> <source>Field which contains members of a group. Note that if using the "memberUid" field, the value is assumed to contain a relative distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn=some-user,ou=groups,...'</source>
<target>Champ qui contient les membres d'un groupe. Si vous utilisez le champ &quot;memberUid&quot;, la valeur est censée contenir un nom distinctif relatif, par exemple 'memberUid=un-utilisateur' au lieu de 'memberUid=cn=un-utilisateur,ou=groups,...'</target> <target>Champ qui contient les membres d'un groupe. Si vous utilisez le champ "memberUid", la valeur est censée contenir un nom distinctif relatif, par exemple 'memberUid=un-utilisateur' au lieu de 'memberUid=cn=un-utilisateur,ou=groups,...'</target>
</trans-unit> </trans-unit>
<trans-unit id="s026555347e589f0e"> <trans-unit id="s026555347e589f0e">
@ -3277,7 +3277,7 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s3198c384c2f68b08"> <trans-unit id="s3198c384c2f68b08">
<source>Time offset when temporary users should be deleted. This only applies if your IDP uses the NameID Format 'transient', and the user doesn't log out manually.</source> <source>Time offset when temporary users should be deleted. This only applies if your IDP uses the NameID Format 'transient', and the user doesn't log out manually.</source>
<target>Moment où les utilisateurs temporaires doivent être supprimés. Cela ne s'applique que si votre IDP utilise le format NameID &quot;transient&quot; et que l'utilisateur ne se déconnecte pas manuellement.</target> <target>Moment où les utilisateurs temporaires doivent être supprimés. Cela ne s'applique que si votre IDP utilise le format NameID "transient" et que l'utilisateur ne se déconnecte pas manuellement.</target>
</trans-unit> </trans-unit>
<trans-unit id="sb32e9c1faa0b8673"> <trans-unit id="sb32e9c1faa0b8673">
@ -3445,7 +3445,7 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s9f8aac89fe318acc"> <trans-unit id="s9f8aac89fe318acc">
<source>Optionally set the 'FriendlyName' value of the Assertion attribute.</source> <source>Optionally set the 'FriendlyName' value of the Assertion attribute.</source>
<target>Indiquer la valeur &quot;FriendlyName&quot; de l'attribut d'assertion (optionnel)</target> <target>Indiquer la valeur "FriendlyName" de l'attribut d'assertion (optionnel)</target>
</trans-unit> </trans-unit>
<trans-unit id="s851c108679653d2a"> <trans-unit id="s851c108679653d2a">
@ -3774,8 +3774,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s7b1fba26d245cb1c"> <trans-unit id="s7b1fba26d245cb1c">
<source>When using an external logging solution for archiving, this can be set to &quot;minutes=5&quot;.</source> <source>When using an external logging solution for archiving, this can be set to "minutes=5".</source>
<target>En cas d'utilisation d'une solution de journalisation externe pour l'archivage, cette valeur peut être fixée à &quot;minutes=5&quot;.</target> <target>En cas d'utilisation d'une solution de journalisation externe pour l'archivage, cette valeur peut être fixée à "minutes=5".</target>
</trans-unit> </trans-unit>
<trans-unit id="s44536d20bb5c8257"> <trans-unit id="s44536d20bb5c8257">
@ -3784,8 +3784,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s3bb51cabb02b997e"> <trans-unit id="s3bb51cabb02b997e">
<source>Format: &quot;weeks=3;days=2;hours=3,seconds=2&quot;.</source> <source>Format: "weeks=3;days=2;hours=3,seconds=2".</source>
<target>Format : &quot;weeks=3;days=2;hours=3,seconds=2&quot;.</target> <target>Format : "weeks=3;days=2;hours=3,seconds=2".</target>
</trans-unit> </trans-unit>
<trans-unit id="s04bfd02201db5ab8"> <trans-unit id="s04bfd02201db5ab8">
@ -3981,10 +3981,10 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="sa95a538bfbb86111"> <trans-unit id="sa95a538bfbb86111">
<source>Are you sure you want to update <x id="0" equiv-text="${this.objectLabel}"/> &quot;<x id="1" equiv-text="${this.obj?.name}"/>&quot;?</source> <source>Are you sure you want to update <x id="0" equiv-text="${this.objectLabel}"/> "<x id="1" equiv-text="${this.obj?.name}"/>"?</source>
<target>Êtes-vous sûr de vouloir mettre à jour <target>Êtes-vous sûr de vouloir mettre à jour
<x id="0" equiv-text="${this.objectLabel}"/>&quot; <x id="0" equiv-text="${this.objectLabel}"/>"
<x id="1" equiv-text="${this.obj?.name}"/>&quot; ?</target> <x id="1" equiv-text="${this.obj?.name}"/>" ?</target>
</trans-unit> </trans-unit>
<trans-unit id="sc92d7cfb6ee1fec6"> <trans-unit id="sc92d7cfb6ee1fec6">
@ -5070,8 +5070,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="sdf1d8edef27236f0"> <trans-unit id="sdf1d8edef27236f0">
<source>A &quot;roaming&quot; authenticator, like a YubiKey</source> <source>A "roaming" authenticator, like a YubiKey</source>
<target>Un authentificateur &quot;itinérant&quot;, comme une YubiKey</target> <target>Un authentificateur "itinérant", comme une YubiKey</target>
</trans-unit> </trans-unit>
<trans-unit id="sfffba7b23d8fb40c"> <trans-unit id="sfffba7b23d8fb40c">
@ -5396,7 +5396,7 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s5170f9ef331949c0"> <trans-unit id="s5170f9ef331949c0">
<source>Show arbitrary input fields to the user, for example during enrollment. Data is saved in the flow context under the 'prompt_data' variable.</source> <source>Show arbitrary input fields to the user, for example during enrollment. Data is saved in the flow context under the 'prompt_data' variable.</source>
<target>Afficher des champs de saisie arbitraires à l'utilisateur, par exemple pendant l'inscription. Les données sont enregistrées dans le contexte du flux sous la variable &quot;prompt_data&quot;.</target> <target>Afficher des champs de saisie arbitraires à l'utilisateur, par exemple pendant l'inscription. Les données sont enregistrées dans le contexte du flux sous la variable "prompt_data".</target>
</trans-unit> </trans-unit>
<trans-unit id="s36cb242ac90353bc"> <trans-unit id="s36cb242ac90353bc">
@ -5405,10 +5405,10 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s2d5f69929bb7221d"> <trans-unit id="s2d5f69929bb7221d">
<source><x id="0" equiv-text="${prompt.name}"/> (&quot;<x id="1" equiv-text="${prompt.fieldKey}"/>&quot;, of type <x id="2" equiv-text="${prompt.type}"/>)</source> <source><x id="0" equiv-text="${prompt.name}"/> ("<x id="1" equiv-text="${prompt.fieldKey}"/>", of type <x id="2" equiv-text="${prompt.type}"/>)</source>
<target> <target>
<x id="0" equiv-text="${prompt.name}"/>(&quot; <x id="0" equiv-text="${prompt.name}"/>("
<x id="1" equiv-text="${prompt.fieldKey}"/>&quot;, de type <x id="1" equiv-text="${prompt.fieldKey}"/>", de type
<x id="2" equiv-text="${prompt.type}"/>)</target> <x id="2" equiv-text="${prompt.type}"/>)</target>
</trans-unit> </trans-unit>
@ -5457,8 +5457,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s1608b2f94fa0dbd4"> <trans-unit id="s1608b2f94fa0dbd4">
<source>If set to a duration above 0, the user will have the option to choose to &quot;stay signed in&quot;, which will extend their session by the time specified here.</source> <source>If set to a duration above 0, the user will have the option to choose to "stay signed in", which will extend their session by the time specified here.</source>
<target>Si défini à une durée supérieure à 0, l'utilisateur aura la possibilité de choisir de &quot;rester connecté&quot;, ce qui prolongera sa session jusqu'à la durée spécifiée ici.</target> <target>Si défini à une durée supérieure à 0, l'utilisateur aura la possibilité de choisir de "rester connecté", ce qui prolongera sa session jusqu'à la durée spécifiée ici.</target>
</trans-unit> </trans-unit>
<trans-unit id="s542a71bb8f41e057"> <trans-unit id="s542a71bb8f41e057">
@ -6242,7 +6242,7 @@ Les liaisons avec les groupes/utilisateurs sont vérifiées par rapport à l'uti
</trans-unit> </trans-unit>
<trans-unit id="sa7fcf026bd25f231"> <trans-unit id="sa7fcf026bd25f231">
<source>Can be in the format of 'unix://' when connecting to a local docker daemon, using 'ssh://' to connect via SSH, or 'https://:2376' when connecting to a remote system.</source> <source>Can be in the format of 'unix://' when connecting to a local docker daemon, using 'ssh://' to connect via SSH, or 'https://:2376' when connecting to a remote system.</source>
<target>Peut être au format &quot;unix://&quot; pour une connexion à un service docker local, &quot;ssh://&quot; pour une connexion via SSH, ou &quot;https://:2376&quot; pour une connexion à un système distant.</target> <target>Peut être au format "unix://" pour une connexion à un service docker local, "ssh://" pour une connexion via SSH, ou "https://:2376" pour une connexion à un système distant.</target>
</trans-unit> </trans-unit>
<trans-unit id="saf1d289e3137c2ea"> <trans-unit id="saf1d289e3137c2ea">
@ -7549,7 +7549,7 @@ Les liaisons avec les groupes/utilisateurs sont vérifiées par rapport à l'uti
</trans-unit> </trans-unit>
<trans-unit id="sff0ac1ace2d90709"> <trans-unit id="sff0ac1ace2d90709">
<source>Use this provider with nginx's auth_request or traefik's forwardAuth. Each application/domain needs its own provider. Additionally, on each domain, /outpost.goauthentik.io must be routed to the outpost (when using a managed outpost, this is done for you).</source> <source>Use this provider with nginx's auth_request or traefik's forwardAuth. Each application/domain needs its own provider. Additionally, on each domain, /outpost.goauthentik.io must be routed to the outpost (when using a managed outpost, this is done for you).</source>
<target>Utilisez ce fournisseur avec l'option &quot;auth_request&quot; de Nginx ou &quot;forwardAuth&quot; de Traefik. Chaque application/domaine a besoin de son propre fournisseur. De plus, sur chaque domaine, &quot;/outpost.goauthentik.io&quot; doit être routé vers le poste avancé (lorsque vous utilisez un poste avancé géré, cela est fait pour vous).</target> <target>Utilisez ce fournisseur avec l'option "auth_request" de Nginx ou "forwardAuth" de Traefik. Chaque application/domaine a besoin de son propre fournisseur. De plus, sur chaque domaine, "/outpost.goauthentik.io" doit être routé vers le poste avancé (lorsque vous utilisez un poste avancé géré, cela est fait pour vous).</target>
</trans-unit> </trans-unit>
<trans-unit id="scb58b8a60cad8762"> <trans-unit id="scb58b8a60cad8762">
<source>Default relay state</source> <source>Default relay state</source>
@ -7963,7 +7963,7 @@ Les liaisons avec les groupes/utilisateurs sont vérifiées par rapport à l'uti
<target>Utilisateur créé et ajouté au groupe <x id="0" equiv-text="${this.group.name}"/> avec succès</target> <target>Utilisateur créé et ajouté au groupe <x id="0" equiv-text="${this.group.name}"/> avec succès</target>
</trans-unit> </trans-unit>
<trans-unit id="s824e0943a7104668"> <trans-unit id="s824e0943a7104668">
<source>This user will be added to the group &quot;<x id="0" equiv-text="${this.targetGroup.name}"/>&quot;.</source> <source>This user will be added to the group "<x id="0" equiv-text="${this.targetGroup.name}"/>".</source>
<target>Cet utilisateur sera ajouté au groupe &amp;quot;<x id="0" equiv-text="${this.targetGroup.name}"/>&amp;quot;.</target> <target>Cet utilisateur sera ajouté au groupe &amp;quot;<x id="0" equiv-text="${this.targetGroup.name}"/>&amp;quot;.</target>
</trans-unit> </trans-unit>
<trans-unit id="s62e7f6ed7d9cb3ca"> <trans-unit id="s62e7f6ed7d9cb3ca">
@ -8225,6 +8225,9 @@ Les liaisons avec les groupes/utilisateurs sont vérifiées par rapport à l'uti
<trans-unit id="s95d56e58f816d211"> <trans-unit id="s95d56e58f816d211">
<source>Dutch</source> <source>Dutch</source>
<target>Néerlandais</target> <target>Néerlandais</target>
</trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -8142,6 +8142,9 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s31aa94a0b3c7edb2"> <trans-unit id="s31aa94a0b3c7edb2">
<source>Select endpoint to connect to</source> <source>Select endpoint to connect to</source>
</trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -7981,6 +7981,9 @@ Bindingen naar groepen/gebruikers worden gecontroleerd tegen de gebruiker van de
</trans-unit> </trans-unit>
<trans-unit id="s31aa94a0b3c7edb2"> <trans-unit id="s31aa94a0b3c7edb2">
<source>Select endpoint to connect to</source> <source>Select endpoint to connect to</source>
</trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -6379,6 +6379,9 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s95d56e58f816d211"> <trans-unit id="s95d56e58f816d211">
<source>Dutch</source> <source>Dutch</source>
</trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -8117,4 +8117,7 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="s95d56e58f816d211"> <trans-unit id="s95d56e58f816d211">
<source>Dutch</source> <source>Dutch</source>
</trans-unit> </trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit>
</body></file></xliff> </body></file></xliff>

View File

@ -6164,6 +6164,9 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s95d56e58f816d211"> <trans-unit id="s95d56e58f816d211">
<source>Dutch</source> <source>Dutch</source>
</trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -5063,6 +5063,9 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="sc54aafeea9c9bab0"> <trans-unit id="sc54aafeea9c9bab0">
<source>Connected services</source> <source>Connected services</source>
</trans-unit> </trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit>
</body> </body>
</file> </file>
</xliff> </xliff>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" ?><xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> <?xml version="1.0"?><xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file target-language="zh-Hans" source-language="en" original="lit-localize-inputs" datatype="plaintext"> <file target-language="zh-Hans" source-language="en" original="lit-localize-inputs" datatype="plaintext">
<body> <body>
<trans-unit id="s4caed5b7a7e5d89b"> <trans-unit id="s4caed5b7a7e5d89b">
@ -613,9 +613,9 @@
</trans-unit> </trans-unit>
<trans-unit id="saa0e2675da69651b"> <trans-unit id="saa0e2675da69651b">
<source>The URL &quot;<x id="0" equiv-text="${this.url}"/>&quot; was not found.</source> <source>The URL "<x id="0" equiv-text="${this.url}"/>" was not found.</source>
<target>未找到 URL &quot; <target>未找到 URL "
<x id="0" equiv-text="${this.url}"/>&quot;。</target> <x id="0" equiv-text="${this.url}"/>"。</target>
</trans-unit> </trans-unit>
<trans-unit id="s58cd9c2fe836d9c6"> <trans-unit id="s58cd9c2fe836d9c6">
@ -1057,8 +1057,8 @@
</trans-unit> </trans-unit>
<trans-unit id="sa8384c9c26731f83"> <trans-unit id="sa8384c9c26731f83">
<source>To allow any redirect URI, set this value to &quot;.*&quot;. Be aware of the possible security implications this can have.</source> <source>To allow any redirect URI, set this value to ".*". Be aware of the possible security implications this can have.</source>
<target>要允许任何重定向 URI请将此值设置为 &quot;.*&quot;。请注意这可能带来的安全影响。</target> <target>要允许任何重定向 URI请将此值设置为 ".*"。请注意这可能带来的安全影响。</target>
</trans-unit> </trans-unit>
<trans-unit id="s55787f4dfcdce52b"> <trans-unit id="s55787f4dfcdce52b">
@ -1799,8 +1799,8 @@
</trans-unit> </trans-unit>
<trans-unit id="sa90b7809586c35ce"> <trans-unit id="sa90b7809586c35ce">
<source>Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon &quot;fa-test&quot;.</source> <source>Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon "fa-test".</source>
<target>输入完整 URL、相对路径或者使用 'fa://fa-test' 来使用 Font Awesome 图标 &quot;fa-test&quot;。</target> <target>输入完整 URL、相对路径或者使用 'fa://fa-test' 来使用 Font Awesome 图标 "fa-test"。</target>
</trans-unit> </trans-unit>
<trans-unit id="s0410779cb47de312"> <trans-unit id="s0410779cb47de312">
@ -2983,8 +2983,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s76768bebabb7d543"> <trans-unit id="s76768bebabb7d543">
<source>Field which contains members of a group. Note that if using the &quot;memberUid&quot; field, the value is assumed to contain a relative distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn=some-user,ou=groups,...'</source> <source>Field which contains members of a group. Note that if using the "memberUid" field, the value is assumed to contain a relative distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn=some-user,ou=groups,...'</source>
<target>包含组成员的字段。请注意,如果使用 &quot;memberUid&quot; 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'</target> <target>包含组成员的字段。请注意,如果使用 "memberUid" 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'</target>
</trans-unit> </trans-unit>
<trans-unit id="s026555347e589f0e"> <trans-unit id="s026555347e589f0e">
@ -3776,8 +3776,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s7b1fba26d245cb1c"> <trans-unit id="s7b1fba26d245cb1c">
<source>When using an external logging solution for archiving, this can be set to &quot;minutes=5&quot;.</source> <source>When using an external logging solution for archiving, this can be set to "minutes=5".</source>
<target>使用外部日志记录解决方案进行存档时,可以将其设置为 &quot;minutes=5&quot;。</target> <target>使用外部日志记录解决方案进行存档时,可以将其设置为 "minutes=5"。</target>
</trans-unit> </trans-unit>
<trans-unit id="s44536d20bb5c8257"> <trans-unit id="s44536d20bb5c8257">
@ -3786,8 +3786,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s3bb51cabb02b997e"> <trans-unit id="s3bb51cabb02b997e">
<source>Format: &quot;weeks=3;days=2;hours=3,seconds=2&quot;.</source> <source>Format: "weeks=3;days=2;hours=3,seconds=2".</source>
<target>格式:&quot;weeks=3;days=2;hours=3,seconds=2&quot;。</target> <target>格式:"weeks=3;days=2;hours=3,seconds=2"。</target>
</trans-unit> </trans-unit>
<trans-unit id="s04bfd02201db5ab8"> <trans-unit id="s04bfd02201db5ab8">
@ -3983,10 +3983,10 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="sa95a538bfbb86111"> <trans-unit id="sa95a538bfbb86111">
<source>Are you sure you want to update <x id="0" equiv-text="${this.objectLabel}"/> &quot;<x id="1" equiv-text="${this.obj?.name}"/>&quot;?</source> <source>Are you sure you want to update <x id="0" equiv-text="${this.objectLabel}"/> "<x id="1" equiv-text="${this.obj?.name}"/>"?</source>
<target>您确定要更新 <target>您确定要更新
<x id="0" equiv-text="${this.objectLabel}"/>&quot; <x id="0" equiv-text="${this.objectLabel}"/>"
<x id="1" equiv-text="${this.obj?.name}"/>&quot; 吗?</target> <x id="1" equiv-text="${this.obj?.name}"/>" 吗?</target>
</trans-unit> </trans-unit>
<trans-unit id="sc92d7cfb6ee1fec6"> <trans-unit id="sc92d7cfb6ee1fec6">
@ -5072,7 +5072,7 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="sdf1d8edef27236f0"> <trans-unit id="sdf1d8edef27236f0">
<source>A &quot;roaming&quot; authenticator, like a YubiKey</source> <source>A "roaming" authenticator, like a YubiKey</source>
<target>像 YubiKey 这样的“漫游”身份验证器</target> <target>像 YubiKey 这样的“漫游”身份验证器</target>
</trans-unit> </trans-unit>
@ -5407,10 +5407,10 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s2d5f69929bb7221d"> <trans-unit id="s2d5f69929bb7221d">
<source><x id="0" equiv-text="${prompt.name}"/> (&quot;<x id="1" equiv-text="${prompt.fieldKey}"/>&quot;, of type <x id="2" equiv-text="${prompt.type}"/>)</source> <source><x id="0" equiv-text="${prompt.name}"/> ("<x id="1" equiv-text="${prompt.fieldKey}"/>", of type <x id="2" equiv-text="${prompt.type}"/>)</source>
<target> <target>
<x id="0" equiv-text="${prompt.name}"/>&quot; <x id="0" equiv-text="${prompt.name}"/>"
<x id="1" equiv-text="${prompt.fieldKey}"/>&quot;,类型为 <x id="1" equiv-text="${prompt.fieldKey}"/>",类型为
<x id="2" equiv-text="${prompt.type}"/></target> <x id="2" equiv-text="${prompt.type}"/></target>
</trans-unit> </trans-unit>
@ -5459,7 +5459,7 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s1608b2f94fa0dbd4"> <trans-unit id="s1608b2f94fa0dbd4">
<source>If set to a duration above 0, the user will have the option to choose to &quot;stay signed in&quot;, which will extend their session by the time specified here.</source> <source>If set to a duration above 0, the user will have the option to choose to "stay signed in", which will extend their session by the time specified here.</source>
<target>如果设置时长大于 0用户可以选择“保持登录”选项这将使用户的会话延长此处设置的时间。</target> <target>如果设置时长大于 0用户可以选择“保持登录”选项这将使用户的会话延长此处设置的时间。</target>
</trans-unit> </trans-unit>
@ -7965,7 +7965,7 @@ Bindings to groups/users are checked against the user of the event.</source>
<target>成功创建用户并添加到组 <x id="0" equiv-text="${this.group.name}"/></target> <target>成功创建用户并添加到组 <x id="0" equiv-text="${this.group.name}"/></target>
</trans-unit> </trans-unit>
<trans-unit id="s824e0943a7104668"> <trans-unit id="s824e0943a7104668">
<source>This user will be added to the group &quot;<x id="0" equiv-text="${this.targetGroup.name}"/>&quot;.</source> <source>This user will be added to the group "<x id="0" equiv-text="${this.targetGroup.name}"/>".</source>
<target>此用户将会被添加到组 &amp;quot;<x id="0" equiv-text="${this.targetGroup.name}"/>&amp;quot;。</target> <target>此用户将会被添加到组 &amp;quot;<x id="0" equiv-text="${this.targetGroup.name}"/>&amp;quot;。</target>
</trans-unit> </trans-unit>
<trans-unit id="s62e7f6ed7d9cb3ca"> <trans-unit id="s62e7f6ed7d9cb3ca">
@ -8227,6 +8227,9 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="s95d56e58f816d211"> <trans-unit id="s95d56e58f816d211">
<source>Dutch</source> <source>Dutch</source>
<target>荷兰语</target> <target>荷兰语</target>
</trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -6212,6 +6212,9 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s95d56e58f816d211"> <trans-unit id="s95d56e58f816d211">
<source>Dutch</source> <source>Dutch</source>
</trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -8101,6 +8101,9 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s95d56e58f816d211"> <trans-unit id="s95d56e58f816d211">
<source>Dutch</source> <source>Dutch</source>
</trans-unit>
<trans-unit id="s16a15af46bc9aeef">
<source>Failed to fetch objects: <x id="0" equiv-text="${this.error.detail}"/></source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>