From 75b0fb3393b743ff43bc94f4b7c75cf539143838 Mon Sep 17 00:00:00 2001 From: Jens L Date: Wed, 18 May 2022 00:03:02 +0200 Subject: [PATCH] sources/oauth: migrate twitter to oauth2 (#2893) --- authentik/sources/oauth/clients/oauth2.py | 3 + .../sources/oauth/tests/test_type_twitter.py | 90 +- authentik/sources/oauth/types/twitter.py | 39 +- tests/e2e/test_source_oauth.py | 42 +- tests/e2e/utils.py | 2 +- web/src/locales/zh-Hans.po | 1433 ++++++++--------- website/docs/releases/v2022.5.md | 4 + website/integrations/sources/apple/index.md | 2 +- website/integrations/sources/discord/index.md | 7 +- website/integrations/sources/github/index.md | 7 +- website/integrations/sources/google/index.md | 17 +- website/integrations/sources/mailcow/index.md | 2 +- website/integrations/sources/twitter/index.md | 46 + .../integrations/sources/twitter/twitter1.png | Bin 0 -> 37289 bytes .../integrations/sources/twitter/twitter2.png | Bin 0 -> 95718 bytes website/sidebarsIntegrations.js | 3 +- 16 files changed, 773 insertions(+), 924 deletions(-) create mode 100644 website/integrations/sources/twitter/index.md create mode 100644 website/integrations/sources/twitter/twitter1.png create mode 100644 website/integrations/sources/twitter/twitter2.png diff --git a/authentik/sources/oauth/clients/oauth2.py b/authentik/sources/oauth/clients/oauth2.py index cd91acb16..2604bab88 100644 --- a/authentik/sources/oauth/clients/oauth2.py +++ b/authentik/sources/oauth/clients/oauth2.py @@ -11,6 +11,7 @@ from structlog.stdlib import get_logger from authentik.sources.oauth.clients.base import BaseOAuthClient LOGGER = get_logger() +SESSION_OAUTH_PKCE = "oauth_pkce" class OAuth2Client(BaseOAuthClient): @@ -69,6 +70,8 @@ class OAuth2Client(BaseOAuthClient): "code": code, "grant_type": "authorization_code", } + if SESSION_OAUTH_PKCE in self.request.session: + args["code_verifier"] = self.request.session[SESSION_OAUTH_PKCE] try: access_token_url = self.source.type.access_token_url or "" if self.source.type.urls_customizable and self.source.access_token_url: diff --git a/authentik/sources/oauth/tests/test_type_twitter.py b/authentik/sources/oauth/tests/test_type_twitter.py index b950c4d84..80abefd6d 100644 --- a/authentik/sources/oauth/tests/test_type_twitter.py +++ b/authentik/sources/oauth/tests/test_type_twitter.py @@ -4,88 +4,8 @@ from django.test import TestCase from authentik.sources.oauth.models import OAuthSource from authentik.sources.oauth.types.twitter import TwitterOAuthCallback -# https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/ \ -# api-reference/get-account-verify_credentials -TWITTER_USER = { - "contributors_enabled": True, - "created_at": "Sat May 09 17:58:22 +0000 2009", - "default_profile": False, - "default_profile_image": False, - "description": "I taught your phone that thing you like.", - "favourites_count": 588, - "follow_request_sent": None, - "followers_count": 10625, - "following": None, - "friends_count": 1181, - "geo_enabled": True, - "id": 38895958, - "id_str": "38895958", - "is_translator": False, - "lang": "en", - "listed_count": 190, - "location": "San Francisco", - "name": "Sean Cook", - "notifications": None, - "profile_background_color": "1A1B1F", - "profile_background_image_url": "", - "profile_background_image_url_https": "", - "profile_background_tile": True, - "profile_image_url": "", - "profile_image_url_https": "", - "profile_link_color": "2FC2EF", - "profile_sidebar_border_color": "181A1E", - "profile_sidebar_fill_color": "252429", - "profile_text_color": "666666", - "profile_use_background_image": True, - "protected": False, - "screen_name": "theSeanCook", - "show_all_inline_media": True, - "status": { - "contributors": None, - "coordinates": {"coordinates": [-122.45037293, 37.76484123], "type": "Point"}, - "created_at": "Tue Aug 28 05:44:24 +0000 2012", - "favorited": False, - "geo": {"coordinates": [37.76484123, -122.45037293], "type": "Point"}, - "id": 240323931419062272, - "id_str": "240323931419062272", - "in_reply_to_screen_name": "messl", - "in_reply_to_status_id": 240316959173009410, - "in_reply_to_status_id_str": "240316959173009410", - "in_reply_to_user_id": 18707866, - "in_reply_to_user_id_str": "18707866", - "place": { - "attributes": {}, - "bounding_box": { - "coordinates": [ - [ - [-122.45778216, 37.75932999], - [-122.44248216, 37.75932999], - [-122.44248216, 37.76752899], - [-122.45778216, 37.76752899], - ] - ], - "type": "Polygon", - }, - "country": "United States", - "country_code": "US", - "full_name": "Ashbury Heights, San Francisco", - "id": "866269c983527d5a", - "name": "Ashbury Heights", - "place_type": "neighborhood", - "url": "http://api.twitter.com/1/geo/id/866269c983527d5a.json", - }, - "retweet_count": 0, - "retweeted": False, - "source": "Twitter for iPhone", - "text": "@messl congrats! So happy for all 3 of you.", - "truncated": False, - }, - "statuses_count": 2609, - "time_zone": "Pacific Time (US & Canada)", - "url": None, - "utc_offset": -28800, - "verified": False, -} +# https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-me +TWITTER_USER = {"data": {"id": "2244994945", "name": "TwitterDev", "username": "Twitter Dev"}} class TestTypeGitHub(TestCase): @@ -104,6 +24,6 @@ class TestTypeGitHub(TestCase): def test_enroll_context(self): """Test Twitter Enrollment context""" ak_context = TwitterOAuthCallback().get_user_enroll_context(TWITTER_USER) - self.assertEqual(ak_context["username"], TWITTER_USER["screen_name"]) - self.assertEqual(ak_context["email"], TWITTER_USER.get("email", None)) - self.assertEqual(ak_context["name"], TWITTER_USER["name"]) + self.assertEqual(ak_context["username"], TWITTER_USER["data"]["username"]) + self.assertEqual(ak_context["email"], None) + self.assertEqual(ak_context["name"], TWITTER_USER["data"]["name"]) diff --git a/authentik/sources/oauth/types/twitter.py b/authentik/sources/oauth/types/twitter.py index 3cb2e5461..ae2271bdf 100644 --- a/authentik/sources/oauth/types/twitter.py +++ b/authentik/sources/oauth/types/twitter.py @@ -1,21 +1,46 @@ """Twitter OAuth Views""" from typing import Any +from authentik.lib.generators import generate_id +from authentik.sources.oauth.clients.oauth2 import SESSION_OAUTH_PKCE +from authentik.sources.oauth.types.azure_ad import AzureADClient from authentik.sources.oauth.types.manager import MANAGER, SourceType from authentik.sources.oauth.views.callback import OAuthCallback +from authentik.sources.oauth.views.redirect import OAuthRedirect + + +class TwitterOAuthRedirect(OAuthRedirect): + """Twitter OAuth2 Redirect""" + + def get_additional_parameters(self, source): # pragma: no cover + self.request.session[SESSION_OAUTH_PKCE] = generate_id() + return { + "scope": ["users.read", "tweet.read"], + "code_challenge": self.request.session[SESSION_OAUTH_PKCE], + "code_challenge_method": "plain", + } class TwitterOAuthCallback(OAuthCallback): """Twitter OAuth2 Callback""" + # Twitter has the same quirk as azure and throws an error if the access token + # is set via query parameter, so we re-use the azure client + # see https://github.com/goauthentik/authentik/issues/1910 + client_class = AzureADClient + + def get_user_id(self, info: dict[str, str]) -> str: + return info.get("data", {}).get("id", "") + def get_user_enroll_context( self, info: dict[str, Any], ) -> dict[str, Any]: + data = info.get("data", {}) return { - "username": info.get("screen_name"), - "email": info.get("email", None), - "name": info.get("name"), + "username": data.get("username"), + "email": None, + "name": data.get("name"), } @@ -24,10 +49,10 @@ class TwitterType(SourceType): """Twitter Type definition""" callback_view = TwitterOAuthCallback + redirect_view = TwitterOAuthRedirect name = "Twitter" slug = "twitter" - request_token_url = "https://api.twitter.com/oauth/request_token" # nosec - authorization_url = "https://api.twitter.com/oauth/authenticate" - access_token_url = "https://api.twitter.com/oauth/access_token" # nosec - profile_url = "https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true" + authorization_url = "https://twitter.com/i/oauth2/authorize" + access_token_url = "https://api.twitter.com/2/oauth2/token" # nosec + profile_url = "https://api.twitter.com/2/users/me" diff --git a/tests/e2e/test_source_oauth.py b/tests/e2e/test_source_oauth.py index 6288d3d2e..f1853a107 100644 --- a/tests/e2e/test_source_oauth.py +++ b/tests/e2e/test_source_oauth.py @@ -4,7 +4,6 @@ from sys import platform from time import sleep from typing import Any, Optional from unittest.case import skipUnless -from unittest.mock import Mock, patch from docker.models.containers import Container from docker.types import Healthcheck @@ -18,20 +17,38 @@ from authentik.core.models import User from authentik.flows.models import Flow from authentik.lib.generators import generate_id, generate_key from authentik.sources.oauth.models import OAuthSource -from authentik.sources.oauth.types.manager import SourceType -from authentik.sources.oauth.types.twitter import TwitterOAuthCallback +from authentik.sources.oauth.types.manager import MANAGER, SourceType +from authentik.sources.oauth.views.callback import OAuthCallback from authentik.stages.identification.models import IdentificationStage from tests.e2e.utils import SeleniumTestCase, apply_migration, object_manager, retry CONFIG_PATH = "/tmp/dex.yml" # nosec -class OAUth1Type(SourceType): - """Twitter Type definition""" +class OAUth1Callback(OAuthCallback): + """OAuth1 Callback with custom getters""" - callback_view = TwitterOAuthCallback - name = "Twitter" - slug = "twitter" + def get_user_id(self, info: dict[str, str]) -> str: + return info.get("id") + + def get_user_enroll_context( + self, + info: dict[str, Any], + ) -> dict[str, Any]: + return { + "username": info.get("screen_name"), + "email": info.get("email"), + "name": info.get("name"), + } + + +@MANAGER.type() +class OAUth1Type(SourceType): + """OAuth1 Type definition""" + + callback_view = OAUth1Callback + name = "OAuth1" + slug = "oauth1" request_token_url = "http://localhost:5000/oauth/request_token" # nosec access_token_url = "http://localhost:5000/oauth/access_token" # nosec @@ -40,9 +57,6 @@ class OAUth1Type(SourceType): urls_customizable = False -SOURCE_TYPE_MOCK = Mock(return_value=OAUth1Type) - - @skipUnless(platform.startswith("linux"), "requires local docker") class TestSourceOAuth2(SeleniumTestCase): """test OAuth Source flow""" @@ -256,7 +270,7 @@ class TestSourceOAuth1(SeleniumTestCase): slug=self.source_slug, authentication_flow=authentication_flow, enrollment_flow=enrollment_flow, - provider_type="twitter", + provider_type="oauth1", consumer_key=self.client_id, consumer_secret=self.client_secret, ) @@ -269,10 +283,6 @@ class TestSourceOAuth1(SeleniumTestCase): @apply_migration("authentik_flows", "0011_flow_title") @apply_migration("authentik_flows", "0009_source_flows") @apply_migration("authentik_crypto", "0002_create_self_signed_kp") - @patch( - "authentik.sources.oauth.types.manager.SourceTypeManager.find_type", - SOURCE_TYPE_MOCK, - ) @object_manager def test_oauth_enroll(self): """test OAuth Source With With OIDC""" diff --git a/tests/e2e/utils.py b/tests/e2e/utils.py index 7c61a6218..cce9aab5c 100644 --- a/tests/e2e/utils.py +++ b/tests/e2e/utils.py @@ -30,7 +30,7 @@ from authentik.core.models import User from authentik.core.tests.utils import create_test_admin_user from authentik.managed.manager import ObjectManager -RETRIES = int(environ.get("RETRIES", "5")) +RETRIES = int(environ.get("RETRIES", "3")) def get_docker_tag() -> str: diff --git a/web/src/locales/zh-Hans.po b/web/src/locales/zh-Hans.po index 4f90087e7..22e3f02a8 100644 --- a/web/src/locales/zh-Hans.po +++ b/web/src/locales/zh-Hans.po @@ -1,9 +1,9 @@ -# +# # Translators: # Chen Zhikai, 2022 # 刘松, 2022 # deluxghost, 2022 -# +# msgid "" msgstr "" "Project-Id-Version: \n" @@ -33,12 +33,15 @@ msgstr "(格式:hours=-1;minutes=-2;seconds=-3)。" msgid "(Format: hours=1;minutes=2;seconds=3)." msgstr "(格式:hours=1;minutes=2;seconds=3)。" -#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/elements/events/ObjectChangelog.ts +#: src/elements/events/UserEvents.ts #: src/elements/user/SessionList.ts #: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationListPage.ts -#: src/pages/events/EventListPage.ts src/pages/events/EventListPage.ts -#: src/pages/groups/GroupListPage.ts src/pages/groups/MemberSelectModal.ts +#: src/pages/events/EventListPage.ts +#: src/pages/events/EventListPage.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/RelatedGroupList.ts #: src/pages/policies/BoundPoliciesList.ts #: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts @@ -48,16 +51,15 @@ msgstr "(格式:hours=1;minutes=2;seconds=3)。" #: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts #: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts #: src/pages/stages/invitation/InvitationListPage.ts -#: src/pages/tokens/TokenListPage.ts src/pages/users/RelatedUserList.ts +#: src/pages/tokens/TokenListPage.ts +#: src/pages/users/RelatedUserList.ts #: src/pages/users/UserListPage.ts #: src/user/user-settings/tokens/UserTokenList.ts msgid "-" msgstr "-" #: src/pages/flows/FlowImportForm.ts -msgid "" -".akflow files, which can be found on goauthentik.io and can be exported by " -"authentik." +msgid ".akflow files, which can be found on goauthentik.io and can be exported by authentik." msgstr ".akflow 文件,可以在 goauthentik.io 上找到,也可以通过 authentik 导出。" #: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts @@ -85,9 +87,7 @@ msgid "A non-removable authenticator, like TouchID or Windows Hello" msgstr "不可移除的身份验证器,例如 TouchID 或 Windows Hello" #: src/pages/policies/dummy/DummyPolicyForm.ts -msgid "" -"A policy used for testing. Always returns the same result as specified below" -" after waiting a random duration." +msgid "A policy used for testing. Always returns the same result as specified below after waiting a random duration." msgstr "用于测试的策略。等待随机时长后,始终返回下面指定的结果。" #: src/pages/providers/saml/SAMLProviderForm.ts @@ -95,7 +95,8 @@ msgstr "用于测试的策略。等待随机时长后,始终返回下面指定 msgid "ACS URL" msgstr "ACS URL" -#: src/pages/applications/ApplicationForm.ts src/pages/flows/FlowForm.ts +#: src/pages/applications/ApplicationForm.ts +#: src/pages/flows/FlowForm.ts msgid "ALL, all policies must match to grant access." msgstr "ALL,必须匹配所有策略才能授予访问权限。" @@ -103,7 +104,8 @@ msgstr "ALL,必须匹配所有策略才能授予访问权限。" msgid "ALL, all policies must match to include this stage access." msgstr "ALL,必须匹配所有策略才能包含此阶段访问权限。" -#: src/pages/applications/ApplicationForm.ts src/pages/flows/FlowForm.ts +#: src/pages/applications/ApplicationForm.ts +#: src/pages/flows/FlowForm.ts msgid "ANY, any policy must match to grant access." msgstr "ANY,必须匹配任意策略才能授予访问权限。" @@ -158,7 +160,8 @@ msgstr "访问令牌 URL" msgid "Access token validity" msgstr "访问令牌有效性" -#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/elements/events/ObjectChangelog.ts +#: src/elements/events/UserEvents.ts #: src/pages/events/EventListPage.ts #: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts msgid "Action" @@ -166,20 +169,27 @@ msgstr "操作" #: src/pages/applications/ApplicationListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts -#: src/pages/events/EventListPage.ts src/pages/events/RuleListPage.ts -#: src/pages/events/TransportListPage.ts src/pages/flows/BoundStagesList.ts -#: src/pages/flows/FlowListPage.ts src/pages/groups/GroupListPage.ts -#: src/pages/groups/RelatedGroupList.ts src/pages/outposts/OutpostListPage.ts +#: src/pages/events/EventListPage.ts +#: src/pages/events/RuleListPage.ts +#: src/pages/events/TransportListPage.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/flows/FlowListPage.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/groups/RelatedGroupList.ts +#: src/pages/outposts/OutpostListPage.ts #: src/pages/outposts/ServiceConnectionListPage.ts #: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/PolicyListPage.ts #: src/pages/property-mappings/PropertyMappingListPage.ts -#: src/pages/providers/ProviderListPage.ts src/pages/stages/StageListPage.ts +#: src/pages/providers/ProviderListPage.ts +#: src/pages/stages/StageListPage.ts #: src/pages/stages/invitation/InvitationListPage.ts #: src/pages/stages/prompt/PromptListPage.ts #: src/pages/system-tasks/SystemTaskListPage.ts -#: src/pages/tenants/TenantListPage.ts src/pages/tokens/TokenListPage.ts -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/tenants/TenantListPage.ts +#: src/pages/tokens/TokenListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Actions" msgstr "操作" @@ -187,7 +197,8 @@ msgstr "操作" msgid "Actions over the last 24 hours" msgstr "过去 24 小时内的操作" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts #: src/pages/users/UserViewPage.ts msgid "Activate" msgstr "激活" @@ -196,13 +207,17 @@ msgstr "激活" msgid "Activate pending user on success" msgstr "成功时激活待处理用户" -#: src/pages/groups/MemberSelectModal.ts src/pages/users/RelatedUserList.ts -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts -#: src/pages/users/UserListPage.ts src/pages/users/UserViewPage.ts +#: src/pages/groups/MemberSelectModal.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts +#: src/pages/users/UserListPage.ts +#: src/pages/users/UserViewPage.ts msgid "Active" msgstr "激活" -#: src/pages/groups/MemberSelectModal.ts src/pages/users/GroupSelectModal.ts +#: src/pages/groups/MemberSelectModal.ts +#: src/pages/users/GroupSelectModal.ts msgid "Add" msgstr "添加" @@ -250,8 +265,7 @@ msgid "Additional scope mappings, which are passed to the proxy." msgstr "传递给代理的额外作用域映射。" #: src/pages/sources/oauth/OAuthSourceForm.ts -msgid "" -"Additional scopes to be passed to the OAuth Provider, separated by space." +msgid "Additional scopes to be passed to the OAuth Provider, separated by space." msgstr "要传递给 OAuth 提供商的额外作用域,用空格分隔。" #: src/pages/sources/ldap/LDAPSourceForm.ts @@ -297,8 +311,7 @@ msgid "Allow IDP-initiated logins" msgstr "允许 IDP 发起的登录" #: src/pages/sources/plex/PlexSourceForm.ts -msgid "" -"Allow friends to authenticate via Plex, even if you don't share any servers" +msgid "Allow friends to authenticate via Plex, even if you don't share any servers" msgstr "允许好友通过 Plex 进行身份验证,即使您不共享任何服务器。" #: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts @@ -306,9 +319,7 @@ msgid "Allow up to N occurrences in the HIBP database." msgstr "HIBP 数据库中最多允许 N 次出现。" #: src/pages/policies/PolicyListPage.ts -msgid "" -"Allow users to use Applications based on properties, enforce Password " -"Criteria and selectively apply Stages." +msgid "Allow users to use Applications based on properties, enforce Password Criteria and selectively apply Stages." msgstr "允许用户根据属性使用应用程序、强制使用密码标准以及选择性地应用阶段。" #: src/pages/providers/proxy/ProxyProviderViewPage.ts @@ -324,9 +335,7 @@ msgid "Allowed servers" msgstr "允许的服务器" #: src/pages/sources/saml/SAMLSourceForm.ts -msgid "" -"Allows authentication flows initiated by the IdP. This can be a security " -"risk, as no validation of the request ID is done." +msgid "Allows authentication flows initiated by the IdP. This can be a security risk, as no validation of the request ID is done." msgstr "允许由 IdP 启动的身份验证流程。这可能存在安全风险,因为未对请求 ID 进行验证。" #: src/pages/policies/reputation/ReputationPolicyForm.ts @@ -338,8 +347,7 @@ msgid "Also known as Entity ID. Defaults the Metadata URL." msgstr "也称为 Entity ID。 默认为元数据 URL。" #: src/flows/stages/authenticator_duo/AuthenticatorDuoStage.ts -msgid "" -"Alternatively, if your current device has Duo installed, click on this link:" +msgid "Alternatively, if your current device has Duo installed, click on this link:" msgstr "或者,如果您当前的设备已安装 Duo,请点击此链接:" #: src/pages/stages/consent/ConsentStageForm.ts @@ -398,7 +406,8 @@ msgstr "应用的显示名称。" msgid "Application(s)" msgstr "应用程序" -#: src/interfaces/AdminInterface.ts src/interfaces/AdminInterface.ts +#: src/interfaces/AdminInterface.ts +#: src/interfaces/AdminInterface.ts #: src/pages/applications/ApplicationListPage.ts #: src/pages/outposts/OutpostForm.ts msgid "Applications" @@ -436,9 +445,7 @@ msgstr "您确定要删除 {0} {objName} 吗?" msgid "Are you sure you want to update {0} \"{1}\"?" msgstr "您确定要更新 {0} \"{1}\" 吗?" -#~ msgid "" -#~ "Assertion not valid on or after current time + this value (Format: " -#~ "hours=1;minutes=2;seconds=3)." +#~ msgid "Assertion not valid on or after current time + this value (Format: hours=1;minutes=2;seconds=3)." #~ msgstr "从当前时间经过多久时或之后,断言无效(格式:hours=1;minutes=2;seconds=3)。" #: src/pages/providers/saml/SAMLProviderForm.ts @@ -477,16 +484,13 @@ msgid "Attempted to log in as {0}" msgstr "已尝试以 {0} 身份登录" #: src/pages/property-mappings/PropertyMappingSAMLForm.ts -msgid "" -"Attribute name used for SAML Assertions. Can be a URN OID, a schema " -"reference, or a any other string. If this property mapping is used for " -"NameID Property, this field is discarded." -msgstr "" -"用于 SAML 断言的属性名称。可以是 URN OID、Schema Reference 或任何其他字符串。如果此属性映射用于 NameID " -"属性,则会丢弃此字段。" +msgid "Attribute name used for SAML Assertions. Can be a URN OID, a schema reference, or a any other string. If this property mapping is used for NameID Property, this field is discarded." +msgstr "用于 SAML 断言的属性名称。可以是 URN OID、Schema Reference 或任何其他字符串。如果此属性映射用于 NameID 属性,则会丢弃此字段。" -#: src/pages/groups/GroupForm.ts src/pages/stages/invitation/InvitationForm.ts -#: src/pages/tenants/TenantForm.ts src/pages/users/UserForm.ts +#: src/pages/groups/GroupForm.ts +#: src/pages/stages/invitation/InvitationForm.ts +#: src/pages/tenants/TenantForm.ts +#: src/pages/users/UserForm.ts msgid "Attributes" msgstr "属性" @@ -520,7 +524,8 @@ msgstr "身份验证 URL" #: src/pages/sources/oauth/OAuthSourceForm.ts #: src/pages/sources/plex/PlexSourceForm.ts -#: src/pages/sources/saml/SAMLSourceForm.ts src/pages/tenants/TenantForm.ts +#: src/pages/sources/saml/SAMLSourceForm.ts +#: src/pages/tenants/TenantForm.ts msgid "Authentication flow" msgstr "身份验证流程" @@ -582,7 +587,8 @@ msgstr "返回" msgid "Backends" msgstr "后端" -#: src/pages/flows/FlowForm.ts src/pages/flows/FlowForm.ts +#: src/pages/flows/FlowForm.ts +#: src/pages/flows/FlowForm.ts msgid "Background" msgstr "背景" @@ -590,7 +596,8 @@ msgstr "背景" msgid "Background image" msgstr "背景图片" -#: src/pages/flows/FlowForm.ts src/pages/flows/FlowForm.ts +#: src/pages/flows/FlowForm.ts +#: src/pages/flows/FlowForm.ts msgid "Background shown during execution." msgstr "执行过程中显示的背景。" @@ -619,9 +626,7 @@ msgid "Based on the User's Email. This is recommended over the UPN method." msgstr "基于用户的电子邮箱。建议在 UPN 方法上使用。" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts -msgid "" -"Based on the User's UPN, only works if user has a 'upn' attribute set. Use " -"this method only if you have different UPN and Mail domains." +msgid "Based on the User's UPN, only works if user has a 'upn' attribute set. Use this method only if you have different UPN and Mail domains." msgstr "基于用户的 UPN,仅当用户设置了 'upn' 属性时才有效。仅当您有不同的 UPN 和 Mail 域时才使用此方法。" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts @@ -661,11 +666,13 @@ msgstr "Bind 流程" msgid "Bind mode" msgstr "绑定模式" -#: src/pages/flows/BoundStagesList.ts src/pages/flows/BoundStagesList.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/flows/BoundStagesList.ts msgid "Bind stage" msgstr "绑定阶段" -#: src/pages/events/EventInfo.ts src/pages/events/EventInfo.ts +#: src/pages/events/EventInfo.ts +#: src/pages/events/EventInfo.ts msgid "Binding" msgstr "绑定" @@ -692,26 +699,21 @@ msgstr "构建哈希:" #~ msgid "Build hash: {0}" #~ msgstr "构建哈希:{0}" -#: src/pages/sources/SourceListPage.ts src/pages/sources/SourceListPage.ts +#: src/pages/sources/SourceListPage.ts +#: src/pages/sources/SourceListPage.ts msgid "Built-in" msgstr "内置" #: src/pages/stages/identification/IdentificationStageForm.ts -msgid "" -"By default, only icons are shown for sources. Enable this to show their full" -" names." +msgid "By default, only icons are shown for sources. Enable this to show their full names." msgstr "默认情况下,只为源显示图标。启用此选项可显示它们的全名。" #: src/pages/outposts/ServiceConnectionDockerForm.ts -msgid "" -"CA which the endpoint's Certificate is verified against. Can be left empty " -"for no validation." +msgid "CA which the endpoint's Certificate is verified against. Can be left empty for no validation." msgstr "验证端点证书所依据的 CA。可以留空,表示不进行验证。" #: src/pages/providers/ldap/LDAPProviderForm.ts -msgid "" -"Cached binding, flow is executed and session is cached in memory. Flow is " -"executed when session expires." +msgid "Cached binding, flow is executed and session is cached in memory. Flow is executed when session expires." msgstr "缓存绑定,流程与会话会在内存中执行与缓存。会话过期时执行流程。" #: src/pages/admin-overview/charts/FlowStatusChart.ts @@ -723,33 +725,28 @@ msgid "Cached policies" msgstr "缓存策略" #: src/pages/providers/ldap/LDAPProviderForm.ts -msgid "" -"Cached querying, the outpost holds all users and groups in-memory and will " -"refresh every 5 Minutes." +msgid "Cached querying, the outpost holds all users and groups in-memory and will refresh every 5 Minutes." msgstr "缓存查询,前哨将所有用户和组保存在内存中,并每 5 分钟刷新一次。" #: src/pages/sources/oauth/OAuthSourceViewPage.ts msgid "Callback URL" msgstr "回调 URL" -#~ msgid "" -#~ "Can be in the format of 'unix://' when connecting to a local docker daemon, " -#~ "or 'https://:2376' when connecting to a remote system." +#~ msgid "Can be in the format of 'unix://' when connecting to a local docker daemon, or 'https://:2376' when connecting to a remote system." #~ msgstr "连接到本地 Docker 守护进程时可以采用 'unix://' 格式,或者在连接到远程系统时采用 'https://:2376' 格式。" #: src/pages/outposts/ServiceConnectionDockerForm.ts -msgid "" -"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." -msgstr "" -"连接到本地 Docker 守护进程时可以采用 'unix://' 格式,通过 SSH 连接时采用 'ssh://' 格式,或者在连接到远程系统时采用 " -"'https://:2376' 格式。" +msgid "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." +msgstr "连接到本地 Docker 守护进程时可以采用 'unix://' 格式,通过 SSH 连接时采用 'ssh://' 格式,或者在连接到远程系统时采用 'https://:2376' 格式。" -#: src/elements/forms/ConfirmationForm.ts src/elements/forms/DeleteBulkForm.ts -#: src/elements/forms/DeleteForm.ts src/elements/forms/ModalForm.ts -#: src/elements/wizard/Wizard.ts src/pages/groups/MemberSelectModal.ts -#: src/pages/users/GroupSelectModal.ts src/pages/users/UserActiveForm.ts +#: src/elements/forms/ConfirmationForm.ts +#: src/elements/forms/DeleteBulkForm.ts +#: src/elements/forms/DeleteForm.ts +#: src/elements/forms/ModalForm.ts +#: src/elements/wizard/Wizard.ts +#: src/pages/groups/MemberSelectModal.ts +#: src/pages/users/GroupSelectModal.ts +#: src/pages/users/UserActiveForm.ts msgid "Cancel" msgstr "取消" @@ -776,8 +773,7 @@ msgid "Certificate Subject" msgstr "证书主题" #: src/pages/providers/saml/SAMLProviderForm.ts -msgid "" -"Certificate used to sign outgoing Responses going to the Service Provider." +msgid "Certificate used to sign outgoing Responses going to the Service Provider." msgstr "证书,用于签署发送给服务提供程序的传出响应。" #~ msgid "Certificate-Key Pair" @@ -792,9 +788,7 @@ msgid "Certificate-Key Pairs" msgstr "证书密钥对" #: src/pages/outposts/ServiceConnectionDockerForm.ts -msgid "" -"Certificate/Key used for authentication. Can be left empty for no " -"authentication." +msgid "Certificate/Key used for authentication. Can be left empty for no authentication." msgstr "用于身份验证的证书/密钥。可以留空表示不验证。" #: src/interfaces/AdminInterface.ts @@ -805,7 +799,8 @@ msgstr "证书" msgid "Change password" msgstr "更改密码" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Change status" msgstr "更改状态" @@ -814,7 +809,8 @@ msgid "Change your password" msgstr "更改您的密码" #: src/pages/applications/ApplicationViewPage.ts -#: src/pages/flows/FlowViewPage.ts src/pages/groups/GroupViewPage.ts +#: src/pages/flows/FlowViewPage.ts +#: src/pages/groups/GroupViewPage.ts #: src/pages/providers/ProviderViewPage.ts #: src/pages/sources/ldap/LDAPSourceViewPage.ts #: src/pages/sources/oauth/OAuthSourceViewPage.ts @@ -891,15 +887,11 @@ msgstr "" "请注意,只有一部分密码哈希值被发送,完整的比较是在客户端完成的。" #: src/pages/policies/expiry/ExpiryPolicyForm.ts -msgid "" -"Checks if the request's user's password has been changed in the last x days," -" and denys based on settings." +msgid "Checks if the request's user's password has been changed in the last x days, and denys based on settings." msgstr "检查过去 x 天内请求的用户密码是否已更改,并根据设置拒绝。" #: src/pages/policies/password/PasswordPolicyForm.ts -msgid "" -"Checks the value from the policy request against several rules, mostly used " -"to ensure password strength." +msgid "Checks the value from the policy request against several rules, mostly used to ensure password strength." msgstr "根据多条规则检查策略请求中的值,这些规则主要用于确保密码强度。" #: src/interfaces/locale.ts @@ -927,8 +919,10 @@ msgstr "全部清除" msgid "Clear background image" msgstr "清除背景图片" -#: src/pages/flows/FlowListPage.ts src/pages/flows/FlowListPage.ts -#: src/pages/policies/PolicyListPage.ts src/pages/policies/PolicyListPage.ts +#: src/pages/flows/FlowListPage.ts +#: src/pages/flows/FlowListPage.ts +#: src/pages/policies/PolicyListPage.ts +#: src/pages/policies/PolicyListPage.ts msgid "Clear cache" msgstr "清除缓存" @@ -950,7 +944,8 @@ msgstr "点击复制令牌" msgid "Client ID" msgstr "客户端 ID" -#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/elements/events/ObjectChangelog.ts +#: src/elements/events/UserEvents.ts #: src/pages/events/EventListPage.ts #: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts msgid "Client IP" @@ -966,8 +961,10 @@ msgid "Client type" msgstr "客户端类型" #: src/elements/notifications/NotificationDrawer.ts -#: src/elements/wizard/Wizard.ts src/pages/outposts/OutpostDeploymentModal.ts -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/elements/wizard/Wizard.ts +#: src/pages/outposts/OutpostDeploymentModal.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Close" msgstr "关闭" @@ -990,9 +987,7 @@ msgid "Confidential" msgstr "机密" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts -msgid "" -"Confidential clients are capable of maintaining the confidentiality of their" -" credentials. Public clients are incapable." +msgid "Confidential clients are capable of maintaining the confidentiality of their credentials. Public clients are incapable." msgstr "机密客户能够对其凭据进行保密。公共客户端无此能力。" #: src/pages/outposts/OutpostForm.ts @@ -1038,15 +1033,11 @@ msgid "Configure how long tokens are valid for." msgstr "配置令牌的有效期限。" #: src/pages/providers/saml/SAMLProviderForm.ts -msgid "" -"Configure how the NameID value will be created. When left empty, the " -"NameIDPolicy of the incoming request will be respected." +msgid "Configure how the NameID value will be created. When left empty, the NameIDPolicy of the incoming request will be respected." msgstr "配置如何创建 NameID 值。如果留空,将遵守传入请求的 NameIDPolicy。" #: src/pages/flows/StageBindingForm.ts -msgid "" -"Configure how the flow executor should handle an invalid response to a " -"challenge." +msgid "Configure how the flow executor should handle an invalid response to a challenge." msgstr "配置流程执行器应如何处理对质询的无效响应。" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts @@ -1073,9 +1064,7 @@ msgid "Configure visual settings and defaults for different domains." msgstr "配置不同域名的可视化设置和默认值。" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts -msgid "" -"Configure what data should be used as unique User Identifier. For most " -"cases, the default should be fine." +msgid "Configure what data should be used as unique User Identifier. For most cases, the default should be fine." msgstr "配置应将哪些数据用作唯一用户标识符。在大多数情况下保持默认值即可。" #: src/user/user-settings/sources/SourceSettingsOAuth.ts @@ -1088,9 +1077,7 @@ msgid "Connect to the LDAP Server on port 389:" msgstr "通过端口 389 连接到 LDAP 服务器:" #: src/user/user-settings/sources/SourceSettings.ts -msgid "" -"Connect your user account to the services listed below, to allow you to " -"login using the service instead of traditional credentials." +msgid "Connect your user account to the services listed below, to allow you to login using the service instead of traditional credentials." msgstr "将您的用户账户连接到下面列出的服务,以允许您使用该服务而不是传统凭据登录。" #: src/user/user-settings/UserSettingsPage.ts @@ -1153,8 +1140,10 @@ msgstr "内容左侧" msgid "Content right" msgstr "内容右侧" -#: src/pages/events/EventInfo.ts src/pages/events/EventInfo.ts -#: src/pages/events/EventInfo.ts src/pages/policies/PolicyTestForm.ts +#: src/pages/events/EventInfo.ts +#: src/pages/events/EventInfo.ts +#: src/pages/events/EventInfo.ts +#: src/pages/policies/PolicyTestForm.ts #: src/pages/property-mappings/PropertyMappingTestForm.ts msgid "Context" msgstr "上下文" @@ -1197,7 +1186,8 @@ msgstr "复制" msgid "Copy download URL" msgstr "复制下载 URL" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Copy recovery link" msgstr "复制恢复链接" @@ -1205,31 +1195,44 @@ msgstr "复制恢复链接" #: src/pages/applications/ApplicationListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts -#: src/pages/events/RuleListPage.ts src/pages/events/RuleListPage.ts -#: src/pages/events/TransportListPage.ts src/pages/events/TransportListPage.ts -#: src/pages/flows/BoundStagesList.ts src/pages/flows/BoundStagesList.ts -#: src/pages/flows/FlowListPage.ts src/pages/flows/FlowListPage.ts -#: src/pages/groups/GroupListPage.ts src/pages/groups/GroupListPage.ts -#: src/pages/outposts/OutpostListPage.ts src/pages/outposts/OutpostListPage.ts +#: src/pages/events/RuleListPage.ts +#: src/pages/events/RuleListPage.ts +#: src/pages/events/TransportListPage.ts +#: src/pages/events/TransportListPage.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/flows/FlowListPage.ts +#: src/pages/flows/FlowListPage.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/outposts/OutpostListPage.ts +#: src/pages/outposts/OutpostListPage.ts #: src/pages/outposts/ServiceConnectionWizard.ts #: src/pages/policies/BoundPoliciesList.ts -#: src/pages/policies/BoundPoliciesList.ts src/pages/policies/PolicyWizard.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/policies/PolicyWizard.ts #: src/pages/property-mappings/PropertyMappingWizard.ts #: src/pages/providers/ProviderWizard.ts #: src/pages/providers/RelatedApplicationButton.ts #: src/pages/providers/RelatedApplicationButton.ts -#: src/pages/sources/SourceWizard.ts src/pages/stages/StageWizard.ts +#: src/pages/sources/SourceWizard.ts +#: src/pages/stages/StageWizard.ts #: src/pages/stages/invitation/InvitationListPage.ts #: src/pages/stages/invitation/InvitationListPage.ts #: src/pages/stages/prompt/PromptListPage.ts #: src/pages/stages/prompt/PromptListPage.ts #: src/pages/stages/prompt/PromptStageForm.ts #: src/pages/stages/prompt/PromptStageForm.ts -#: src/pages/tenants/TenantListPage.ts src/pages/tenants/TenantListPage.ts -#: src/pages/tokens/TokenListPage.ts src/pages/tokens/TokenListPage.ts -#: src/pages/users/RelatedUserList.ts src/pages/users/RelatedUserList.ts -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts -#: src/pages/users/UserListPage.ts src/pages/users/UserListPage.ts +#: src/pages/tenants/TenantListPage.ts +#: src/pages/tenants/TenantListPage.ts +#: src/pages/tokens/TokenListPage.ts +#: src/pages/tokens/TokenListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts +#: src/pages/users/UserListPage.ts +#: src/pages/users/UserListPage.ts #: src/user/user-settings/tokens/UserTokenList.ts #: src/user/user-settings/tokens/UserTokenList.ts msgid "Create" @@ -1269,9 +1272,7 @@ msgid "Create Invitation" msgstr "创建邀请" #: src/pages/stages/invitation/InvitationListPage.ts -msgid "" -"Create Invitation Links to enroll Users, and optionally force specific " -"attributes of their account." +msgid "Create Invitation Links to enroll Users, and optionally force specific attributes of their account." msgstr "创建邀请链接以注册用户,并可选地强制设置其账户的特定属性。" #: src/pages/events/RuleListPage.ts @@ -1295,8 +1296,10 @@ msgstr "创建策略" msgid "Create Prompt" msgstr "创建输入" -#: src/pages/users/RelatedUserList.ts src/pages/users/RelatedUserList.ts -#: src/pages/users/UserListPage.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts +#: src/pages/users/UserListPage.ts msgid "Create Service account" msgstr "创建服务账户" @@ -1304,7 +1307,8 @@ msgstr "创建服务账户" msgid "Create Stage" msgstr "创建阶段" -#: src/pages/flows/BoundStagesList.ts src/pages/flows/BoundStagesList.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/flows/BoundStagesList.ts msgid "Create Stage binding" msgstr "创建阶段绑定" @@ -1318,7 +1322,8 @@ msgstr "创建租户" msgid "Create Token" msgstr "创建令牌" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Create User" msgstr "创建用户" @@ -1365,7 +1370,8 @@ msgstr "创建未激活用户" #: src/pages/outposts/ServiceConnectionWizard.ts #: src/pages/policies/PolicyWizard.ts #: src/pages/property-mappings/PropertyMappingWizard.ts -#: src/pages/providers/ProviderWizard.ts src/pages/sources/SourceWizard.ts +#: src/pages/providers/ProviderWizard.ts +#: src/pages/sources/SourceWizard.ts #: src/pages/stages/StageWizard.ts msgid "Create {0}" msgstr "创建 {0}" @@ -1377,7 +1383,8 @@ msgstr "创建者" #~ msgid "Created {0}" #~ msgstr "已创建 {0}" -#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/elements/events/ObjectChangelog.ts +#: src/elements/events/UserEvents.ts #: src/pages/events/EventListPage.ts msgid "Creation Date" msgstr "创建日期" @@ -1389,7 +1396,8 @@ msgstr "创建日期" msgid "Current plan context" msgstr "当前计划上下文" -#: src/pages/applications/ApplicationForm.ts src/pages/flows/FlowForm.ts +#: src/pages/applications/ApplicationForm.ts +#: src/pages/flows/FlowForm.ts msgid "Currently set to:" msgstr "当前设置为:" @@ -1414,7 +1422,8 @@ msgstr "日期" msgid "Date Time" msgstr "日期时间" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts #: src/pages/users/UserViewPage.ts msgid "Deactivate" msgstr "停用" @@ -1424,9 +1433,7 @@ msgid "Debug" msgstr "调试" #: src/pages/flows/FlowForm.ts -msgid "" -"Decides what this Flow is used for. For example, the Authentication flow is " -"redirect to when an un-authenticated user visits authentik." +msgid "Decides what this Flow is used for. For example, the Authentication flow is redirect to when an un-authenticated user visits authentik." msgstr "决定此流程的用途。例如,当未经身份验证的用户访问 authentik 时,会重定向到身份验证流程。" #: src/pages/tenants/TenantForm.ts @@ -1445,26 +1452,34 @@ msgstr "默认?" msgid "Define how notifications are sent to users, like Email or Webhook." msgstr "定义如何向用户发送通知,例如电子邮件或 Webhook。" -#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts -#: src/elements/oauth/UserRefreshList.ts src/elements/user/SessionList.ts +#: src/elements/forms/DeleteBulkForm.ts +#: src/elements/forms/DeleteForm.ts +#: src/elements/oauth/UserRefreshList.ts +#: src/elements/user/SessionList.ts #: src/elements/user/UserConsentList.ts #: src/pages/applications/ApplicationListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts -#: src/pages/events/RuleListPage.ts src/pages/events/TransportListPage.ts -#: src/pages/flows/BoundStagesList.ts src/pages/flows/FlowListPage.ts -#: src/pages/groups/GroupListPage.ts src/pages/groups/RelatedGroupList.ts +#: src/pages/events/RuleListPage.ts +#: src/pages/events/TransportListPage.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/flows/FlowListPage.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/groups/RelatedGroupList.ts #: src/pages/outposts/OutpostListPage.ts #: src/pages/outposts/ServiceConnectionListPage.ts #: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/PolicyListPage.ts #: src/pages/policies/reputation/ReputationListPage.ts #: src/pages/property-mappings/PropertyMappingListPage.ts -#: src/pages/providers/ProviderListPage.ts src/pages/sources/SourceListPage.ts +#: src/pages/providers/ProviderListPage.ts +#: src/pages/sources/SourceListPage.ts #: src/pages/stages/StageListPage.ts #: src/pages/stages/invitation/InvitationListPage.ts #: src/pages/stages/prompt/PromptListPage.ts -#: src/pages/tenants/TenantListPage.ts src/pages/tokens/TokenListPage.ts -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/tenants/TenantListPage.ts +#: src/pages/tokens/TokenListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts #: src/user/user-settings/mfa/MFADevicesPage.ts #: src/user/user-settings/tokens/UserTokenList.ts msgid "Delete" @@ -1509,7 +1524,8 @@ msgstr "" "删除当前待处理的用户。注意,这个阶段不要求确认。\n" "使用同意授权阶段来确保用户知道自己的行为。" -#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +#: src/elements/forms/DeleteBulkForm.ts +#: src/elements/forms/DeleteForm.ts msgid "Delete {0}" msgstr "删除 {0}" @@ -1519,21 +1535,18 @@ msgstr "拒绝用户访问" #: src/pages/applications/ApplicationForm.ts #: src/pages/property-mappings/PropertyMappingScopeForm.ts -#: src/pages/system-tasks/SystemTaskListPage.ts src/pages/tokens/TokenForm.ts +#: src/pages/system-tasks/SystemTaskListPage.ts +#: src/pages/tokens/TokenForm.ts #: src/user/user-settings/tokens/UserTokenForm.ts msgid "Description" msgstr "描述" #: src/pages/property-mappings/PropertyMappingScopeForm.ts -msgid "" -"Description shown to the user when consenting. If left empty, the user won't" -" be informed." +msgid "Description shown to the user when consenting. If left empty, the user won't be informed." msgstr "同意授权时向用户显示的描述。如果留空,则不会告知用户。" #: src/pages/users/UserForm.ts -msgid "" -"Designates whether this user should be treated as active. Unselect this " -"instead of deleting accounts." +msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "指定是否应将此用户视为活动用户。取消选择此选项,而不是删除帐户。" #: src/pages/flows/FlowForm.ts @@ -1541,20 +1554,15 @@ msgid "Designation" msgstr "指定" #: src/pages/outposts/OutpostListPage.ts -msgid "" -"Detailed health (one instance per column, data is cached so may be out of " -"data)" +msgid "Detailed health (one instance per column, data is cached so may be out of data)" msgstr "详细健康状况(每列一个实例,数据经过缓存,因此可能会缺少数据)" #: src/pages/providers/saml/SAMLProviderForm.ts -msgid "" -"Determines how authentik sends the response back to the Service Provider." +msgid "Determines how authentik sends the response back to the Service Provider." msgstr "确定 authentik 如何将响应发送回服务提供程序。" #: src/pages/stages/user_login/UserLoginStageForm.ts -msgid "" -"Determines how long a session lasts. Default of 0 seconds means that the " -"sessions lasts until the browser is closed." +msgid "Determines how long a session lasts. Default of 0 seconds means that the sessions lasts until the browser is closed." msgstr "确定会话持续多长时间。默认为 0 秒意味着会话持续到浏览器关闭为止。" #: src/elements/user/SessionList.ts @@ -1590,15 +1598,11 @@ msgid "Digits" msgstr "数字" #: src/pages/providers/ldap/LDAPProviderForm.ts -msgid "" -"Direct querying, always execute the configured bind flow to authenticate the" -" user." +msgid "Direct querying, always execute the configured bind flow to authenticate the user." msgstr "直接查询,总是执行配置的绑定流程,以验证用户的身份。" #: src/pages/providers/ldap/LDAPProviderForm.ts -msgid "" -"Direct querying, always returns the latest data, but slower than cached " -"querying." +msgid "Direct querying, always returns the latest data, but slower than cached querying." msgstr "直接查询,总是返回最新数据,但比缓存查询慢。" #: src/interfaces/AdminInterface.ts @@ -1633,7 +1637,8 @@ msgstr "断开连接" msgid "Docker URL" msgstr "Docker URL" -#: src/pages/tenants/TenantForm.ts src/pages/tenants/TenantListPage.ts +#: src/pages/tenants/TenantForm.ts +#: src/pages/tenants/TenantListPage.ts #: src/pages/tenants/TenantListPage.ts msgid "Domain" msgstr "域名" @@ -1658,18 +1663,14 @@ msgid "Download signing certificate" msgstr "下载签名证书" #: src/pages/providers/ldap/LDAPProviderForm.ts -msgid "" -"Due to protocol limitations, this certificate is only used when the outpost " -"has a single provider." +msgid "Due to protocol limitations, this certificate is only used when the outpost has a single provider." msgstr "由于协议限制,只在前哨有单个提供程序时才使用此证书。" #~ msgid "Dummy" #~ msgstr "占位" #: src/pages/stages/dummy/DummyStageForm.ts -msgid "" -"Dummy stage used for testing. Shows a simple continue button and always " -"passes." +msgid "Dummy stage used for testing. Shows a simple continue button and always passes." msgstr "用于测试的虚拟阶段。显示一个简单的“继续”按钮,并且始终通过。" #~ msgid "Duo" @@ -1701,7 +1702,8 @@ msgstr "根据应用程序 Slug,每个提供程序都有不同的颁发者。" #: src/pages/applications/ApplicationViewPage.ts #: src/pages/applications/ApplicationViewPage.ts -#: src/pages/flows/FlowViewPage.ts src/pages/flows/FlowViewPage.ts +#: src/pages/flows/FlowViewPage.ts +#: src/pages/flows/FlowViewPage.ts #: src/pages/groups/GroupViewPage.ts #: src/pages/providers/ldap/LDAPProviderViewPage.ts #: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts @@ -1715,7 +1717,8 @@ msgstr "根据应用程序 Slug,每个提供程序都有不同的颁发者。" msgid "Edit" msgstr "编辑" -#: src/pages/flows/BoundStagesList.ts src/pages/policies/BoundPoliciesList.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/policies/BoundPoliciesList.ts msgid "Edit Binding" msgstr "编辑绑定" @@ -1736,9 +1739,7 @@ msgid "Edit User" msgstr "编辑用户" #: src/pages/applications/ApplicationForm.ts -msgid "" -"Either input a full URL, a relative path, or use 'fa://fa-test' to use the " -"Font Awesome icon \"fa-test\"." +msgid "Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon \"fa-test\"." msgstr "输入完整 URL、相对路径,或者使用 'fa://fa-test' 来使用 Font Awesome 图标 \"fa-test\"。" #: src/user/LibraryPage.ts @@ -1748,7 +1749,8 @@ msgstr "没有定义应用程序,或者您无权访问任何应用程序。" #: src/flows/stages/identification/IdentificationStage.ts #: src/pages/events/TransportForm.ts #: src/pages/stages/identification/IdentificationStageForm.ts -#: src/pages/users/UserForm.ts src/pages/users/UserViewPage.ts +#: src/pages/users/UserForm.ts +#: src/pages/users/UserViewPage.ts msgid "Email" msgstr "电子邮箱" @@ -1760,7 +1762,8 @@ msgstr "电子邮箱地址" msgid "Email info:" msgstr "电子邮件信息:" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Email recovery link" msgstr "电子邮件恢复链接" @@ -1800,9 +1803,7 @@ msgstr "启用 StartTLS" #~ msgstr "启用 TOTP" #: src/pages/flows/FlowForm.ts -msgid "" -"Enable compatibility mode, increases compatibility with password managers on" -" mobile devices." +msgid "Enable compatibility mode, increases compatibility with password managers on mobile devices." msgstr "启用兼容模式,增强与移动设备上密码管理器的兼容性。" #: src/pages/policies/BoundPoliciesList.ts @@ -1815,9 +1816,7 @@ msgid "Enabled" msgstr "已启用" #: src/pages/users/ServiceAccountForm.ts -msgid "" -"Enabling this toggle will create a group named after the user, with the user" -" as member." +msgid "Enabling this toggle will create a group named after the user, with the user as member." msgstr "启用此开关将创建一个以用户命名的组,用户为成员。" #: src/interfaces/locale.ts @@ -1875,12 +1874,8 @@ msgid "Evaluate policies before the Stage is present to the user." msgstr "在阶段即将呈现给用户时评估策略。" #: src/pages/flows/StageBindingForm.ts -msgid "" -"Evaluate policies during the Flow planning process. Disable this for input-" -"based policies. Should be used in conjunction with 'Re-evaluate policies', " -"as with both options disabled, policies are **not** evaluated." -msgstr "" -"在流程规划过程中评估策略。对于基于输入的策略,请禁用此选项。应与“重新评估策略”结合使用,因为如果同时禁用这两个选项,则**不**评估策略。" +msgid "Evaluate policies during the Flow planning process. Disable this for input-based policies. Should be used in conjunction with 'Re-evaluate policies', as with both options disabled, policies are **not** evaluated." +msgstr "在流程规划过程中评估策略。对于基于输入的策略,请禁用此选项。应与“重新评估策略”结合使用,因为如果同时禁用这两个选项,则**不**评估策略。" #: src/pages/events/EventListPage.ts msgid "Event Log" @@ -1912,7 +1907,8 @@ msgstr "事件" msgid "Everything is ok." msgstr "一切正常。" -#: src/pages/events/EventInfo.ts src/pages/events/EventInfo.ts +#: src/pages/events/EventInfo.ts +#: src/pages/events/EventInfo.ts #: src/pages/events/EventInfo.ts msgid "Exception" msgstr "异常" @@ -1920,8 +1916,7 @@ msgstr "异常" #~ msgid "Execute" #~ msgstr "执行" -#~ msgid "" -#~ "Execute arbitrary Python code to implement custom checks and validation." +#~ msgid "Execute arbitrary Python code to implement custom checks and validation." #~ msgstr "执行任意 Python 代码以实现自定义检查和验证。" #: src/pages/flows/FlowViewPage.ts @@ -1932,8 +1927,7 @@ msgstr "执行流程" #~ msgstr "与检视器一起执行" #: src/pages/policies/expression/ExpressionPolicyForm.ts -msgid "" -"Executes the python snippet to determine whether to allow or deny a request." +msgid "Executes the python snippet to determine whether to allow or deny a request." msgstr "执行 Python 代码段以确定是允许还是拒绝请求。" #: src/pages/policies/dummy/DummyPolicyForm.ts @@ -1946,7 +1940,8 @@ msgstr "执行 Python 代码段以确定是允许还是拒绝请求。" msgid "Execution logging" msgstr "记录执行日志" -#: src/elements/oauth/UserRefreshList.ts src/elements/user/SessionList.ts +#: src/elements/oauth/UserRefreshList.ts +#: src/elements/user/SessionList.ts #: src/elements/user/UserConsentList.ts #: src/pages/stages/invitation/InvitationForm.ts msgid "Expires" @@ -2021,12 +2016,8 @@ msgid "External API URL" msgstr "外部 API URL" #: src/pages/applications/ApplicationListPage.ts -msgid "" -"External Applications which use authentik as Identity-Provider, utilizing " -"protocols like OAuth2 and SAML. All applications are shown here, even ones " -"you cannot access." -msgstr "" -"利用 OAuth2 和 SAML 等协议,使用 authentik 作为身份提供程序的外部应用程序。此处显示了所有应用程序,即使您无法访问的也包括在内。" +msgid "External Applications which use authentik as Identity-Provider, utilizing protocols like OAuth2 and SAML. All applications are shown here, even ones you cannot access." +msgstr "利用 OAuth2 和 SAML 等协议,使用 authentik 作为身份提供程序的外部应用程序。此处显示了所有应用程序,即使您无法访问的也包括在内。" #: src/pages/providers/proxy/ProxyProviderViewPage.ts msgid "External Host" @@ -2037,7 +2028,8 @@ msgstr "外部主机" msgid "External host" msgstr "外部主机" -#: src/elements/charts/AdminLoginsChart.ts src/elements/charts/UserChart.ts +#: src/elements/charts/AdminLoginsChart.ts +#: src/elements/charts/UserChart.ts msgid "Failed Logins" msgstr "失败登录" @@ -2065,7 +2057,8 @@ msgstr "删除流程缓存失败" msgid "Failed to delete policy cache" msgstr "删除策略缓存失败" -#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +#: src/elements/forms/DeleteBulkForm.ts +#: src/elements/forms/DeleteForm.ts msgid "Failed to delete {0}: {1}" msgstr "删除 {0} 失败:{1}" @@ -2082,7 +2075,8 @@ msgstr "更新 {0} 失败:{1}" msgid "Favicon" msgstr "网站图标" -#: src/interfaces/AdminInterface.ts src/pages/sources/SourceListPage.ts +#: src/interfaces/AdminInterface.ts +#: src/pages/sources/SourceListPage.ts msgid "Federation & Social login" msgstr "联结与社交登录" @@ -2111,23 +2105,15 @@ msgstr "包含唯一标识符的字段。" #~ msgstr "包含组成员的字段。" #: src/pages/sources/ldap/LDAPSourceForm.ts -msgid "" -"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,...'" -msgstr "" -"包含组成员的字段。请注意,如果使用 \"memberUid\" 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' " -"而不是 'memberUid=cn=some-user,ou=groups,...'" +msgid "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,...'" +msgstr "包含组成员的字段。请注意,如果使用 \"memberUid\" 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'" #: src/pages/stages/prompt/PromptStageForm.ts msgid "Fields" msgstr "字段" #: src/pages/stages/identification/IdentificationStageForm.ts -msgid "" -"Fields a user can identify themselves with. If no fields are selected, the " -"user will only be able to use sources." +msgid "Fields a user can identify themselves with. If no fields are selected, the user will only be able to use sources." msgstr "用户可以用来标识自己的字段。如果未选择任何字段,则用户将只能使用源。" #: src/elements/wizard/Wizard.ts @@ -2146,7 +2132,8 @@ msgstr "流程总览" msgid "Flow execution" msgstr "流程执行" -#: src/flows/FlowInspector.ts src/flows/FlowInspector.ts +#: src/flows/FlowInspector.ts +#: src/flows/FlowInspector.ts msgid "Flow inspector" msgstr "流程检视器" @@ -2174,9 +2161,7 @@ msgid "Flow used before authentication." msgstr "身份验证之前使用的流程。" #: src/pages/stages/password/PasswordStageForm.ts -msgid "" -"Flow used by an authenticated user to configure their password. If empty, " -"user will not be able to configure change their password." +msgid "Flow used by an authenticated user to configure their password. If empty, user will not be able to configure change their password." msgstr "经过身份验证的用户用来配置其密码的流程。如果为空,用户将无法配置更改其密码。" #: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts @@ -2184,27 +2169,19 @@ msgstr "经过身份验证的用户用来配置其密码的流程。如果为空 #: src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts #: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts #: src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts -msgid "" -"Flow used by an authenticated user to configure this Stage. If empty, user " -"will not be able to configure this stage." +msgid "Flow used by an authenticated user to configure this Stage. If empty, user will not be able to configure this stage." msgstr "经过身份验证的用户用来配置此阶段的流程。如果为空,用户将无法配置此阶段。" #: src/pages/providers/ldap/LDAPProviderForm.ts -msgid "" -"Flow used for users to authenticate. Currently only identification and " -"password stages are supported." +msgid "Flow used for users to authenticate. Currently only identification and password stages are supported." msgstr "用于用户进行身份验证的流程。目前仅支持身份识别和密码阶段。" #: src/pages/tenants/TenantForm.ts -msgid "" -"Flow used to authenticate users. If left empty, the first applicable flow " -"sorted by the slug is used." +msgid "Flow used to authenticate users. If left empty, the first applicable flow sorted by the slug is used." msgstr "用于对用户进行身份验证的流程。如果留空,则使用按 Slug 排序的第一个适用流程。" #: src/pages/tenants/TenantForm.ts -msgid "" -"Flow used to logout. If left empty, the first applicable flow sorted by the " -"slug is used." +msgid "Flow used to logout. If left empty, the first applicable flow sorted by the slug is used." msgstr "用于登出的流程。如果留空,则使用按 Slug 排序的第一个适用流程。" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts @@ -2220,7 +2197,8 @@ msgstr "流程" #: src/interfaces/AdminInterface.ts #: src/pages/admin-overview/AdminOverviewPage.ts -#: src/pages/flows/FlowListPage.ts src/pages/stages/StageListPage.ts +#: src/pages/flows/FlowListPage.ts +#: src/pages/stages/StageListPage.ts msgid "Flows" msgstr "流程" @@ -2229,9 +2207,7 @@ msgid "Flows & Stages" msgstr "流程与阶段" #: src/pages/flows/FlowListPage.ts -msgid "" -"Flows describe a chain of Stages to authenticate, enroll or recover a user. " -"Stages are chosen based on policies applied to them." +msgid "Flows describe a chain of Stages to authenticate, enroll or recover a user. Stages are chosen based on policies applied to them." msgstr "流程描述了一系列用于对用户进行身份验证、注册或恢复的阶段。阶段是根据应用于它们的策略来选择的。" #: src/flows/stages/RedirectStage.ts @@ -2250,7 +2226,8 @@ msgstr "忘记密码了吗?" msgid "Forgot username or password?" msgstr "忘记用户名或密码?" -#: src/elements/forms/ModalForm.ts src/elements/wizard/FormWizardPage.ts +#: src/elements/forms/ModalForm.ts +#: src/elements/wizard/FormWizardPage.ts #: src/elements/wizard/FormWizardPage.ts msgid "Form didn't return a promise for submitting" msgstr "表单提交未返回 Promise" @@ -2345,7 +2322,8 @@ msgstr "前往上一页" #~ msgstr "前往用户界面" #: src/pages/applications/ApplicationForm.ts -#: src/pages/applications/ApplicationListPage.ts src/pages/events/RuleForm.ts +#: src/pages/applications/ApplicationListPage.ts +#: src/pages/events/RuleForm.ts #: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyBindingForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts @@ -2362,9 +2340,7 @@ msgid "Group Property Mappings" msgstr "组属性映射" #: src/pages/policies/PolicyBindingForm.ts -msgid "" -"Group mappings can only be checked if a user is already logged in when " -"trying to access this source." +msgid "Group mappings can only be checked if a user is already logged in when trying to access this source." msgstr "组绑定仅会在已登录用户访问此源时检查。" #: src/pages/sources/ldap/LDAPSourceForm.ts @@ -2376,21 +2352,23 @@ msgid "Group object filter" msgstr "组对象过滤器" #: src/pages/groups/GroupListPage.ts -msgid "" -"Group users together and give them permissions based on the membership." +msgid "Group users together and give them permissions based on the membership." msgstr "将用户分组在一起,并根据成员资格为他们授予权限。" -#: src/pages/groups/GroupViewPage.ts src/pages/policies/BoundPoliciesList.ts +#: src/pages/groups/GroupViewPage.ts +#: src/pages/policies/BoundPoliciesList.ts msgid "Group {0}" msgstr "组 {0}" -#: src/pages/groups/GroupListPage.ts src/pages/groups/RelatedGroupList.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/groups/RelatedGroupList.ts msgid "Group(s)" msgstr "组" #: src/interfaces/AdminInterface.ts #: src/pages/admin-overview/AdminOverviewPage.ts -#: src/pages/groups/GroupListPage.ts src/pages/users/UserForm.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/users/UserForm.ts #: src/pages/users/UserViewPage.ts msgid "Groups" msgstr "组" @@ -2440,11 +2418,13 @@ msgstr "隐藏:隐藏字段,可用于将数据插入表单。" msgid "Hide managed mappings" msgstr "隐藏管理映射" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Hide service-accounts" msgstr "隐藏服务账户" -#: src/pages/events/RuleForm.ts src/pages/outposts/OutpostForm.ts +#: src/pages/events/RuleForm.ts +#: src/pages/outposts/OutpostForm.ts #: src/pages/providers/oauth2/OAuth2ProviderForm.ts #: src/pages/providers/oauth2/OAuth2ProviderForm.ts #: src/pages/providers/proxy/ProxyProviderForm.ts @@ -2462,16 +2442,15 @@ msgid "Hold control/command to select multiple items." msgstr "按住 ctrl/command 键可选择多个项目。" #: src/pages/stages/password/PasswordStageForm.ts -msgid "" -"How many attempts a user has before the flow is canceled. To lock the user " -"out, use a reputation policy and a user_write stage." +msgid "How many attempts a user has before the flow is canceled. To lock the user out, use a reputation policy and a user_write stage." msgstr "在取消流程之前,用户可以尝试多少次。要锁定用户,请使用信誉策略和 user_write 阶段。" #: src/pages/providers/ldap/LDAPProviderViewPage.ts msgid "How to connect" msgstr "如何连接" -#: src/elements/forms/DeleteBulkForm.ts src/pages/users/RelatedUserList.ts +#: src/elements/forms/DeleteBulkForm.ts +#: src/pages/users/RelatedUserList.ts #: src/pages/users/UserListPage.ts msgid "ID" msgstr "ID" @@ -2502,7 +2481,8 @@ msgstr "浏览器选项卡中显示的图标。" #: src/pages/flows/FlowListPage.ts #: src/pages/policies/reputation/ReputationListPage.ts -#: src/pages/system-tasks/SystemTaskListPage.ts src/pages/tokens/TokenForm.ts +#: src/pages/system-tasks/SystemTaskListPage.ts +#: src/pages/tokens/TokenForm.ts #: src/pages/tokens/TokenListPage.ts #: src/user/user-settings/tokens/UserTokenForm.ts #: src/user/user-settings/tokens/UserTokenList.ts @@ -2513,37 +2493,27 @@ msgstr "标识符" #~ msgstr "身份识别与加密" #: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts -msgid "" -"If any of the devices user of the types selected above have been used within" -" this duration, this stage will be skipped." +msgid "If any of the devices user of the types selected above have been used within this duration, this stage will be skipped." msgstr "如果上面所选类型的任意设备在此期限内被使用,此阶段会被跳过。" #: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts -msgid "" -"If enabled, use the local connection. Required Docker socket/Kubernetes " -"Integration." +msgid "If enabled, use the local connection. Required Docker socket/Kubernetes Integration." msgstr "如果启用,请使用本地连接。需要 Docker Socket/Kubernetes 集成。" #: src/pages/applications/ApplicationForm.ts -msgid "" -"If left empty, authentik will try to extract the launch URL based on the " -"selected provider." +msgid "If left empty, authentik will try to extract the launch URL based on the selected provider." msgstr "如果留空,authentik 将尝试根据选定的提供程序提取启动 URL。" #: src/pages/providers/ldap/LDAPProviderForm.ts -msgid "" -"If multiple providers share an outpost, a self-signed certificate is used." +msgid "If multiple providers share an outpost, a self-signed certificate is used." msgstr "如果多个提供程序共享同一个前哨,则使用自签名证书。" -#~ msgid "" -#~ "If no explicit redirect URIs are specified, any redirect URI is allowed." +#~ msgid "If no explicit redirect URIs are specified, any redirect URI is allowed." #~ msgstr "如果未指定显式重定向 URI,则允许使用任何重定向 URI。" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts -msgid "" -"If no explicit redirect URIs are specified, the first successfully used " -"redirect URI will be saved." +msgid "If no explicit redirect URIs are specified, the first successfully used redirect URI will be saved." msgstr "如果未指定显式重定向 URI,则将保存第一个成功使用的重定向 URI。" #~ msgid "" @@ -2556,43 +2526,31 @@ msgid "If set, users are able to configure details of their profile." msgstr "设置后,用户可以配置他们个人资料的详细信息。" #: src/pages/tenants/TenantForm.ts -msgid "" -"If set, users are able to unenroll themselves using this flow. If no flow is" -" set, option is not shown." +msgid "If set, users are able to unenroll themselves using this flow. If no flow is set, option is not shown." msgstr "如果已设置,则用户可以使用此流程自行删除账户。如果未设置流程,则不显示选项。" #: src/pages/stages/invitation/InvitationStageForm.ts -msgid "" -"If this flag is set, this Stage will jump to the next Stage when no " -"Invitation is given. By default this Stage will cancel the Flow when no " -"invitation is given." +msgid "If this flag is set, this Stage will jump to the next Stage when no Invitation is given. By default this Stage will cancel the Flow when no invitation is given." msgstr "如果设置了此标志,则当没有发出邀请时,此阶段将跳转到下一个阶段。默认情况下,当没有发出邀请时,此阶段将取消流程。" #: src/pages/tokens/TokenForm.ts -msgid "" -"If this is selected, the token will expire. Upon expiration, the token will " -"be rotated." +msgid "If this is selected, the token will expire. Upon expiration, the token will be rotated." msgstr "如果选择此选项,令牌将能够过期。过期时,令牌将被轮换。" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts -msgid "" -"If you are using an Implicit, client-side flow (where the token-endpoint " -"isn't used), you probably want to increase this time." +msgid "If you are using an Implicit, client-side flow (where the token-endpoint isn't used), you probably want to increase this time." msgstr "如果您使用的是隐式的客户端流程(不使用令牌端点),您可能想增加此时间。" #: src/pages/outposts/OutpostDeploymentModal.ts -msgid "" -"If your authentik Instance is using a self-signed certificate, set this " -"value." +msgid "If your authentik Instance is using a self-signed certificate, set this value." msgstr "如果您的 authentik 实例正在使用自签名证书,请设置此值。" #: src/pages/outposts/OutpostDeploymentModal.ts -msgid "" -"If your authentik_host setting does not match the URL you want to login " -"with, add this setting." +msgid "If your authentik_host setting does not match the URL you want to login with, add this setting." msgstr "如果您的 authentik_host 设置与您要登录时使用的网址不匹配,请添加此设置。" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts #: src/pages/users/UserViewPage.ts msgid "Impersonate" msgstr "模拟身份" @@ -2605,7 +2563,8 @@ msgstr "已结束模拟身份" msgid "Impersonation started" msgstr "已开始模拟身份" -#: src/pages/flows/FlowListPage.ts src/pages/flows/FlowListPage.ts +#: src/pages/flows/FlowListPage.ts +#: src/pages/flows/FlowListPage.ts msgid "Import" msgstr "导入" @@ -2614,9 +2573,7 @@ msgid "Import Flow" msgstr "导入流程" #: src/pages/crypto/CertificateKeyPairListPage.ts -msgid "" -"Import certificates of external providers or create certificates to sign " -"requests with." +msgid "Import certificates of external providers or create certificates to sign requests with." msgstr "导入外部提供商的证书或创建用于签名请求的证书。" #: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts @@ -2624,26 +2581,24 @@ msgid "In case you can't access any other method." msgstr "以防万一您无法使用任何其他方法。" #: src/pages/providers/proxy/ProxyProviderForm.ts -msgid "" -"In this case, you'd set the Authentication URL to auth.example.com and " -"Cookie domain to example.com." +msgid "In this case, you'd set the Authentication URL to auth.example.com and Cookie domain to example.com." msgstr "在这种情况下,您需要将身份验证 URL 设置为 auth.example.com,并将 Cookie 域名设置为 example.com。" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Inactive" msgstr "未激活" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts -msgid "" -"Include User claims from scopes in the id_token, for applications that don't" -" access the userinfo endpoint." +msgid "Include User claims from scopes in the id_token, for applications that don't access the userinfo endpoint." msgstr "对于不访问 userinfo 端点的应用程序,将来自作用域的用户声明包含在 id_token 中。" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts msgid "Include claims in id_token" msgstr "在 id_token 中包含声明" -#: src/pages/outposts/OutpostForm.ts src/pages/outposts/OutpostListPage.ts +#: src/pages/outposts/OutpostForm.ts +#: src/pages/outposts/OutpostListPage.ts msgid "Integration" msgstr "集成" @@ -2654,7 +2609,8 @@ msgstr "集成密钥" #~ msgid "Integrations" #~ msgstr "集成" -#: src/pages/tokens/TokenForm.ts src/pages/tokens/TokenListPage.ts +#: src/pages/tokens/TokenForm.ts +#: src/pages/tokens/TokenListPage.ts #: src/user/user-settings/tokens/UserTokenList.ts msgid "Intent" msgstr "意图" @@ -2738,31 +2694,26 @@ msgstr "Issuer 模式" #~ msgstr "JWT 算法" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts -msgid "" -"JWTs signed by certificates configured here can be used to authenticate to " -"the provider." +msgid "JWTs signed by certificates configured here can be used to authenticate to the provider." msgstr "此处配置的证书签名的 JWT 可以用于此提供程序的身份验证。" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts msgid "Key used to sign the tokens." msgstr "用于签名令牌的密钥。" -#~ msgid "" -#~ "Key used to sign the tokens. Only required when JWT Algorithm is set to " -#~ "RS256." +#~ msgid "Key used to sign the tokens. Only required when JWT Algorithm is set to RS256." #~ msgstr "用于签名令牌的密钥。仅当 JWT 算法设置为 RS256 时才需要。" #: src/pages/sources/saml/SAMLSourceForm.ts -msgid "" -"Keypair which is used to sign outgoing requests. Leave empty to disable " -"signing." +msgid "Keypair which is used to sign outgoing requests. Leave empty to disable signing." msgstr "用于签名传出请求的密钥对。留空则禁用签名。" #: src/pages/outposts/ServiceConnectionKubernetesForm.ts msgid "Kubeconfig" msgstr "Kubeconfig" -#: src/pages/outposts/OutpostForm.ts src/pages/outposts/OutpostListPage.ts +#: src/pages/outposts/OutpostForm.ts +#: src/pages/outposts/OutpostListPage.ts msgid "LDAP" msgstr "LDAP" @@ -2793,12 +2744,15 @@ msgstr "标签" msgid "Label shown next to/above the prompt." msgstr "标签会显示在输入侧方/上方。" -#: src/elements/user/SessionList.ts src/elements/user/SessionList.ts +#: src/elements/user/SessionList.ts +#: src/elements/user/SessionList.ts msgid "Last IP" msgstr "上次 IP" -#: src/pages/groups/MemberSelectModal.ts src/pages/users/RelatedUserList.ts -#: src/pages/users/UserListPage.ts src/pages/users/UserViewPage.ts +#: src/pages/groups/MemberSelectModal.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts +#: src/pages/users/UserViewPage.ts msgid "Last login" msgstr "上次登录" @@ -2841,16 +2795,12 @@ msgstr "让用户使用用户名或电子邮件地址来标识自己。" #: src/pages/sources/oauth/OAuthSourceForm.ts #: src/pages/sources/plex/PlexSourceForm.ts -msgid "" -"Link to a user with identical email address. Can have security implications " -"when a source doesn't validate email addresses" +msgid "Link to a user with identical email address. Can have security implications when a source doesn't validate email addresses" msgstr "链接到电子邮件地址相同的用户。当源不验证电子邮件地址时,可能会有安全隐患" #: src/pages/sources/oauth/OAuthSourceForm.ts #: src/pages/sources/plex/PlexSourceForm.ts -msgid "" -"Link to a user with identical username. Can have security implications when " -"a username is used with another source." +msgid "Link to a user with identical username. Can have security implications when a username is used with another source." msgstr "链接到用户名相同的用户。当其他源使用相同用户名时,可能会有安全隐患。" #: src/pages/stages/invitation/InvitationListLink.ts @@ -2866,8 +2816,10 @@ msgstr "使用唯一标识符链接用户" msgid "Load servers" msgstr "加载服务器" -#: src/elements/table/Table.ts src/flows/FlowExecutor.ts -#: src/flows/FlowExecutor.ts src/flows/FlowExecutor.ts +#: src/elements/table/Table.ts +#: src/flows/FlowExecutor.ts +#: src/flows/FlowExecutor.ts +#: src/flows/FlowExecutor.ts #: src/flows/FlowInspector.ts #: src/flows/stages/access_denied/AccessDeniedStage.ts #: src/flows/stages/authenticator_duo/AuthenticatorDuoStage.ts @@ -2880,7 +2832,8 @@ msgstr "加载服务器" #: src/flows/stages/autosubmit/AutosubmitStage.ts #: src/flows/stages/captcha/CaptchaStage.ts #: src/flows/stages/consent/ConsentStage.ts -#: src/flows/stages/dummy/DummyStage.ts src/flows/stages/email/EmailStage.ts +#: src/flows/stages/dummy/DummyStage.ts +#: src/flows/stages/email/EmailStage.ts #: src/flows/stages/identification/IdentificationStage.ts #: src/flows/stages/password/PasswordStage.ts #: src/flows/stages/prompt/PromptStage.ts @@ -2889,17 +2842,23 @@ msgstr "加载服务器" #: src/user/user-settings/details/UserSettingsFlowExecutor.ts #: src/user/user-settings/details/stages/prompt/PromptStage.ts #: src/user/user-settings/mfa/MFADevicesPage.ts -#: src/user/user-settings/sources/SourceSettings.ts src/utils.ts +#: src/user/user-settings/sources/SourceSettings.ts +#: src/utils.ts msgid "Loading" msgstr "正在加载" #: src/elements/Spinner.ts #: src/pages/applications/ApplicationCheckAccessForm.ts -#: src/pages/applications/ApplicationForm.ts src/pages/events/RuleForm.ts -#: src/pages/events/RuleForm.ts src/pages/events/TransportForm.ts -#: src/pages/flows/StageBindingForm.ts src/pages/flows/StageBindingForm.ts -#: src/pages/groups/GroupForm.ts src/pages/groups/GroupForm.ts -#: src/pages/outposts/OutpostForm.ts src/pages/outposts/OutpostForm.ts +#: src/pages/applications/ApplicationForm.ts +#: src/pages/events/RuleForm.ts +#: src/pages/events/RuleForm.ts +#: src/pages/events/TransportForm.ts +#: src/pages/flows/StageBindingForm.ts +#: src/pages/flows/StageBindingForm.ts +#: src/pages/groups/GroupForm.ts +#: src/pages/groups/GroupForm.ts +#: src/pages/outposts/OutpostForm.ts +#: src/pages/outposts/OutpostForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/policies/PolicyBindingForm.ts @@ -2952,10 +2911,14 @@ msgstr "正在加载" #: src/pages/stages/prompt/PromptStageForm.ts #: src/pages/stages/prompt/PromptStageForm.ts #: src/pages/stages/user_write/UserWriteStageForm.ts -#: src/pages/tenants/TenantForm.ts src/pages/tenants/TenantForm.ts -#: src/pages/tenants/TenantForm.ts src/pages/tenants/TenantForm.ts -#: src/pages/tenants/TenantForm.ts src/pages/tenants/TenantForm.ts -#: src/pages/tokens/TokenForm.ts src/pages/users/UserForm.ts +#: src/pages/tenants/TenantForm.ts +#: src/pages/tenants/TenantForm.ts +#: src/pages/tenants/TenantForm.ts +#: src/pages/tenants/TenantForm.ts +#: src/pages/tenants/TenantForm.ts +#: src/pages/tenants/TenantForm.ts +#: src/pages/tokens/TokenForm.ts +#: src/pages/users/UserForm.ts #: src/pages/users/UserResetEmailForm.ts msgid "Loading..." msgstr "正在加载……" @@ -2987,9 +2950,7 @@ msgid "Login" msgstr "登录" #: src/pages/sources/ldap/LDAPSourceForm.ts -msgid "" -"Login password is synced from LDAP into authentik automatically. Enable this" -" option only to write password changes in authentik back to LDAP." +msgid "Login password is synced from LDAP into authentik automatically. Enable this option only to write password changes in authentik back to LDAP." msgstr "登录密码会自动从 LDAP 同步到 authentik。启用此选项可将 authentik 中的密码更改写回至 LDAP。" #: src/flows/stages/identification/IdentificationStage.ts @@ -3050,40 +3011,31 @@ msgid "Mark newly created users as inactive." msgstr "将新创建的用户标记为未激活。" #: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts -msgid "" -"Match created events with this action type. When left empty, all action " -"types will be matched." +msgid "Match created events with this action type. When left empty, all action types will be matched." msgstr "将创建的事件与此操作类型匹配。留空时,所有操作类型都将匹配。" #: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts -msgid "" -"Match events created by selected application. When left empty, all " -"applications are matched." +msgid "Match events created by selected application. When left empty, all applications are matched." msgstr "匹配选定应用程序创建的事件。如果留空,则匹配所有应用程序。" #: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts -msgid "" -"Matches Event's Client IP (strict matching, for network matching use an " -"Expression Policy." +msgid "Matches Event's Client IP (strict matching, for network matching use an Expression Policy." msgstr "匹配事件的客户端 IP(严格匹配,要网络匹配请使用表达式策略)。" #: src/pages/policies/event_matcher/EventMatcherPolicyForm.ts -msgid "" -"Matches an event against a set of criteria. If any of the configured values " -"match, the policy passes." +msgid "Matches an event against a set of criteria. If any of the configured values match, the policy passes." msgstr "根据一组条件匹配事件。如果任何配置的值匹配,则策略将通过。" #: src/pages/tenants/TenantForm.ts -msgid "" -"Matching is done based on domain suffix, so if you enter domain.tld, " -"foo.domain.tld will still match." +msgid "Matching is done based on domain suffix, so if you enter domain.tld, foo.domain.tld will still match." msgstr "根据域名后缀完成匹配,因此,如果您输入 domain.tld,foo.domain.tld 仍将匹配。" #: src/pages/policies/expiry/ExpiryPolicyForm.ts msgid "Maximum age (in days)" msgstr "最长使用期限(单位为天)" -#: src/pages/groups/GroupForm.ts src/pages/groups/GroupListPage.ts +#: src/pages/groups/GroupForm.ts +#: src/pages/groups/GroupListPage.ts #: src/pages/users/GroupSelectModal.ts msgid "Members" msgstr "成员" @@ -3093,7 +3045,8 @@ msgid "Message" msgstr "消息" #: src/pages/applications/ApplicationCheckAccessForm.ts -#: src/pages/events/EventInfo.ts src/pages/policies/PolicyTestForm.ts +#: src/pages/events/EventInfo.ts +#: src/pages/policies/PolicyTestForm.ts #: src/pages/system-tasks/SystemTaskListPage.ts msgid "Messages" msgstr "消息" @@ -3123,7 +3076,8 @@ msgstr "最低大写字符数" msgid "Minimum length" msgstr "最小长度" -#: src/pages/events/TransportForm.ts src/pages/events/TransportListPage.ts +#: src/pages/events/TransportForm.ts +#: src/pages/events/TransportListPage.ts #: src/pages/providers/proxy/ProxyProviderViewPage.ts #: src/pages/stages/consent/ConsentStageForm.ts msgid "Mode" @@ -3162,13 +3116,20 @@ msgstr "我的应用" #: src/pages/crypto/CertificateKeyPairForm.ts #: src/pages/crypto/CertificateKeyPairListPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts -#: src/pages/events/EventInfo.ts src/pages/events/RuleForm.ts -#: src/pages/events/RuleListPage.ts src/pages/events/TransportForm.ts -#: src/pages/events/TransportListPage.ts src/pages/flows/BoundStagesList.ts -#: src/pages/flows/FlowForm.ts src/pages/flows/FlowListPage.ts -#: src/pages/groups/GroupForm.ts src/pages/groups/GroupListPage.ts -#: src/pages/groups/GroupViewPage.ts src/pages/groups/MemberSelectModal.ts -#: src/pages/groups/RelatedGroupList.ts src/pages/outposts/OutpostForm.ts +#: src/pages/events/EventInfo.ts +#: src/pages/events/RuleForm.ts +#: src/pages/events/RuleListPage.ts +#: src/pages/events/TransportForm.ts +#: src/pages/events/TransportListPage.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/flows/FlowForm.ts +#: src/pages/flows/FlowListPage.ts +#: src/pages/groups/GroupForm.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/groups/GroupViewPage.ts +#: src/pages/groups/MemberSelectModal.ts +#: src/pages/groups/RelatedGroupList.ts +#: src/pages/outposts/OutpostForm.ts #: src/pages/outposts/OutpostListPage.ts #: src/pages/outposts/ServiceConnectionDockerForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts @@ -3227,9 +3188,12 @@ msgstr "我的应用" #: src/pages/stages/user_login/UserLoginStageForm.ts #: src/pages/stages/user_logout/UserLogoutStageForm.ts #: src/pages/stages/user_write/UserWriteStageForm.ts -#: src/pages/users/GroupSelectModal.ts src/pages/users/RelatedUserList.ts -#: src/pages/users/UserForm.ts src/pages/users/UserListPage.ts -#: src/pages/users/UserViewPage.ts src/user/user-settings/mfa/MFADeviceForm.ts +#: src/pages/users/GroupSelectModal.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserForm.ts +#: src/pages/users/UserListPage.ts +#: src/pages/users/UserViewPage.ts +#: src/user/user-settings/mfa/MFADeviceForm.ts #: src/user/user-settings/mfa/MFADevicesPage.ts msgid "Name" msgstr "名称" @@ -3313,14 +3277,17 @@ msgstr "Nginx(独立)" #: src/elements/oauth/UserRefreshList.ts #: src/pages/applications/ApplicationCheckAccessForm.ts #: src/pages/crypto/CertificateKeyPairListPage.ts -#: src/pages/groups/GroupListPage.ts src/pages/groups/MemberSelectModal.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/RelatedGroupList.ts #: src/pages/outposts/ServiceConnectionListPage.ts #: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/PolicyTestForm.ts #: src/pages/providers/proxy/ProxyProviderViewPage.ts -#: src/pages/tenants/TenantListPage.ts src/pages/tokens/TokenListPage.ts -#: src/pages/users/GroupSelectModal.ts src/pages/users/RelatedUserList.ts +#: src/pages/tenants/TenantListPage.ts +#: src/pages/tokens/TokenListPage.ts +#: src/pages/users/GroupSelectModal.ts +#: src/pages/users/RelatedUserList.ts #: src/pages/users/UserListPage.ts #: src/user/user-settings/tokens/UserTokenList.ts msgid "No" @@ -3330,7 +3297,8 @@ msgstr "否" msgid "No Applications available." msgstr "没有可用的应用程序。" -#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/elements/events/ObjectChangelog.ts +#: src/elements/events/UserEvents.ts msgid "No Events found." msgstr "未找到事件。" @@ -3350,7 +3318,8 @@ msgstr "没有可用的额外数据。" msgid "No additional setup is required." msgstr "无需进行额外设置。" -#: src/elements/forms/ModalForm.ts src/elements/wizard/FormWizardPage.ts +#: src/elements/forms/ModalForm.ts +#: src/elements/wizard/FormWizardPage.ts #: src/elements/wizard/FormWizardPage.ts msgid "No form found" msgstr "未找到表单" @@ -3364,7 +3333,8 @@ msgstr "没有激活的集成" msgid "No log messages." msgstr "没有日志消息。" -#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/elements/events/ObjectChangelog.ts +#: src/elements/events/UserEvents.ts msgid "No matching events could be found." msgstr "未找到匹配的事件" @@ -3380,7 +3350,8 @@ msgstr "当前没有策略绑定到此对象。" msgid "No preference is sent" msgstr "不发送偏好" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "No recovery flow is configured." msgstr "未配置恢复流程。" @@ -3450,11 +3421,13 @@ msgstr "不是您?" msgid "Notice" msgstr "通知" -#: src/interfaces/AdminInterface.ts src/pages/events/RuleListPage.ts +#: src/interfaces/AdminInterface.ts +#: src/pages/events/RuleListPage.ts msgid "Notification Rules" msgstr "通知规则" -#: src/interfaces/AdminInterface.ts src/pages/events/TransportListPage.ts +#: src/interfaces/AdminInterface.ts +#: src/pages/events/TransportListPage.ts msgid "Notification Transports" msgstr "通知传输" @@ -3504,7 +3477,8 @@ msgstr "OAuth 刷新代码" msgid "OK" msgstr "好的" -#: src/pages/events/EventInfo.ts src/pages/events/EventInfo.ts +#: src/pages/events/EventInfo.ts +#: src/pages/events/EventInfo.ts msgid "Object" msgstr "对象" @@ -3524,11 +3498,11 @@ msgstr "已创建对象" msgid "Offset after which consent expires." msgstr "同意过期后的偏移。" -#~ msgid "" -#~ "Offset after which consent expires. (Format: hours=1;minutes=2;seconds=3)." +#~ msgid "Offset after which consent expires. (Format: hours=1;minutes=2;seconds=3)." #~ msgstr "经过多少偏移量后同意授权过期。(格式:hours=1;minutes=2;seconds=3)。" -#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/elements/events/ObjectChangelog.ts +#: src/elements/events/UserEvents.ts #: src/pages/events/EventListPage.ts msgid "On behalf of {0}" msgstr "代表 {0}" @@ -3538,9 +3512,7 @@ msgid "Only fail the policy, don't invalidate user's password." msgstr "仅使策略失败,不使用户的密码失效。" #: src/pages/events/TransportForm.ts -msgid "" -"Only send notification once, for example when sending a webhook into a chat " -"channel." +msgid "Only send notification once, for example when sending a webhook into a chat channel." msgstr "仅发送一次通知,例如在向聊天频道发送 Webhook 时。" #: src/elements/notifications/APIDrawer.ts @@ -3567,9 +3539,7 @@ msgid "OpenID Configuration URL" msgstr "OpenID 配置 URL" #: src/pages/crypto/CertificateKeyPairForm.ts -msgid "" -"Optional Private Key. If this is set, you can use this keypair for " -"encryption." +msgid "Optional Private Key. If this is set, you can use this keypair for encryption." msgstr "可选私钥。如果设置,则可以使用此密钥对来加密。" #: src/pages/sources/saml/SAMLSourceForm.ts @@ -3577,9 +3547,7 @@ msgid "Optional URL if the IDP supports Single-Logout." msgstr "如果 IDP 支持单点登出,则为可选 URL。" #: src/pages/stages/invitation/InvitationForm.ts -msgid "" -"Optional data which is loaded into the flow's 'prompt_data' context " -"variable. YAML or JSON." +msgid "Optional data which is loaded into the flow's 'prompt_data' context variable. YAML or JSON." msgstr "加载到流程的 'prompt_data' 上下文变量中的可选数据。YAML 或 JSON。" #: src/pages/stages/identification/IdentificationStageForm.ts @@ -3587,10 +3555,7 @@ msgid "Optional enrollment flow, which is linked at the bottom of the page." msgstr "可选注册流程,链接在页面底部。" #: src/pages/stages/identification/IdentificationStageForm.ts -msgid "" -"Optional passwordless flow, which is linked at the bottom of the page. When " -"configured, users can use this flow to authenticate with a WebAuthn " -"authenticator, without entering any details." +msgid "Optional passwordless flow, which is linked at the bottom of the page. When configured, users can use this flow to authenticate with a WebAuthn authenticator, without entering any details." msgstr "可选的无密码流程,链接在页面底部。配置后,用户可以使用此流程通过 WebAuthn 身份验证器进行验证,无需输入任何详细信息。" #: src/pages/stages/identification/IdentificationStageForm.ts @@ -3602,9 +3567,7 @@ msgid "Optional, comma-separated SubjectAlt Names." msgstr "可选,逗号分隔的替代名称。" #: src/pages/applications/ApplicationForm.ts -msgid "" -"Optionally enter a group name. Applications with identical groups are shown " -"grouped together." +msgid "Optionally enter a group name. Applications with identical groups are shown grouped together." msgstr "输入可选的分组名称。分组相同的应用程序会显示在一起。 " #: src/pages/stages/prompt/PromptForm.ts @@ -3615,15 +3578,11 @@ msgstr "可选,预先填充输入值" msgid "Optionally set the 'FriendlyName' value of the Assertion attribute." msgstr "可选,设置断言属性的 'FriendlyName' 值。" -#~ msgid "" -#~ "Optionally set this to your parent domain, if you want authentication and " -#~ "authorization to happen on a domain level. If you're running applications as" -#~ " app1.domain.tld, app2.domain.tld, set this to 'domain.tld'." -#~ msgstr "" -#~ "如果您希望在域名级别进行身份验证和授权,可以选择将其设置为您的父域名。如果您运行应用 " -#~ "app1.domain.tld、app2.domain.tld,请将其设置为 'domain.tld'。" +#~ msgid "Optionally set this to your parent domain, if you want authentication and authorization to happen on a domain level. If you're running applications as app1.domain.tld, app2.domain.tld, set this to 'domain.tld'." +#~ msgstr "如果您希望在域名级别进行身份验证和授权,可以选择将其设置为您的父域名。如果您运行应用 app1.domain.tld、app2.domain.tld,请将其设置为 'domain.tld'。" -#: src/pages/flows/BoundStagesList.ts src/pages/flows/StageBindingForm.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/flows/StageBindingForm.ts #: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/PolicyBindingForm.ts @@ -3669,19 +3628,19 @@ msgstr "前哨状态" msgid "Outpost(s)" msgstr "前哨" -#: src/interfaces/AdminInterface.ts src/pages/outposts/OutpostListPage.ts +#: src/interfaces/AdminInterface.ts +#: src/pages/outposts/OutpostListPage.ts msgid "Outposts" msgstr "前哨" #: src/pages/outposts/OutpostListPage.ts -msgid "" -"Outposts are deployments of authentik components to support different " -"environments and protocols, like reverse proxies." +msgid "Outposts are deployments of authentik components to support different environments and protocols, like reverse proxies." msgstr "前哨是对 authentik 组件的部署,用于支持不同的环境和协议,例如反向代理。" #: src/interfaces/AdminInterface.ts #: src/pages/applications/ApplicationViewPage.ts -#: src/pages/groups/GroupViewPage.ts src/pages/providers/ProviderViewPage.ts +#: src/pages/groups/GroupViewPage.ts +#: src/pages/providers/ProviderViewPage.ts #: src/pages/sources/ldap/LDAPSourceViewPage.ts #: src/pages/sources/oauth/OAuthSourceViewPage.ts #: src/pages/sources/plex/PlexSourceViewPage.ts @@ -3694,7 +3653,8 @@ msgstr "总览" msgid "PEM-encoded Certificate data." msgstr "PEM 编码的证书数据。" -#: src/pages/groups/GroupForm.ts src/pages/groups/GroupListPage.ts +#: src/pages/groups/GroupForm.ts +#: src/pages/groups/GroupListPage.ts #: src/pages/groups/RelatedGroupList.ts msgid "Parent" msgstr "父级" @@ -3711,14 +3671,16 @@ msgstr "通过策略?" #~ msgstr "当事件匹配选定的条件时通过。" #: src/pages/applications/ApplicationCheckAccessForm.ts -#: src/pages/events/EventInfo.ts src/pages/policies/PolicyTestForm.ts +#: src/pages/events/EventInfo.ts +#: src/pages/policies/PolicyTestForm.ts msgid "Passing" msgstr "通过" #: src/flows/stages/identification/IdentificationStage.ts #: src/flows/stages/identification/IdentificationStage.ts #: src/flows/stages/password/PasswordStage.ts -#: src/pages/users/ServiceAccountForm.ts src/pages/users/UserPasswordForm.ts +#: src/pages/users/ServiceAccountForm.ts +#: src/pages/users/UserPasswordForm.ts msgid "Password" msgstr "密码" @@ -3748,10 +3710,7 @@ msgstr "密码阶段" #~ msgstr "密码、2FA 等" #: src/pages/stages/prompt/PromptForm.ts -msgid "" -"Password: Masked input, password is validated against sources. Policies " -"still have to be applied to this Stage. If two of these are used in the same" -" stage, they are ensured to be identical." +msgid "Password: Masked input, password is validated against sources. Policies still have to be applied to this Stage. If two of these are used in the same stage, they are ensured to be identical." msgstr "密码:屏蔽输入内容,密码根据来源进行验证。策略仍需应用于此阶段。如果在同一阶段使用其中的两个,则确保它们是相同的。" #: src/pages/stages/identification/IdentificationStageForm.ts @@ -3791,7 +3750,8 @@ msgstr "请输入您的 TOTP 代码" msgid "Please enter your password" msgstr "请输入您的密码" -#: src/interfaces/AdminInterface.ts src/pages/flows/FlowListPage.ts +#: src/interfaces/AdminInterface.ts +#: src/pages/flows/FlowListPage.ts #: src/pages/policies/PolicyListPage.ts msgid "Policies" msgstr "策略" @@ -3829,7 +3789,8 @@ msgid "Policy binding(s)" msgstr "策略绑定" #: src/pages/applications/ApplicationForm.ts -#: src/pages/applications/ApplicationViewPage.ts src/pages/flows/FlowForm.ts +#: src/pages/applications/ApplicationViewPage.ts +#: src/pages/flows/FlowForm.ts #: src/pages/flows/StageBindingForm.ts msgid "Policy engine mode" msgstr "策略引擎模式" @@ -3898,8 +3859,7 @@ msgid "Private key available?" msgstr "私钥可用吗?" #: src/pages/stages/captcha/CaptchaStageForm.ts -msgid "" -"Private key, acquired from https://www.google.com/recaptcha/intro/v3.html." +msgid "Private key, acquired from https://www.google.com/recaptcha/intro/v3.html." msgstr "私钥,从 https://www.google.com/recaptcha/intro/v3.html 获取。" #: src/pages/sources/oauth/OAuthSourceForm.ts @@ -3910,16 +3870,15 @@ msgstr "个人资料 URL" #~ msgstr "输入" #: src/pages/stages/consent/ConsentStageForm.ts -msgid "" -"Prompt for the user's consent. The consent can either be permanent or expire" -" in a defined amount of time." +msgid "Prompt for the user's consent. The consent can either be permanent or expire in a defined amount of time." msgstr "请求用户同意授权。同意授权可以是永久性的,也可以在规定的时间后过期。" #: src/pages/stages/prompt/PromptListPage.ts msgid "Prompt(s)" msgstr "输入" -#: src/interfaces/AdminInterface.ts src/pages/stages/prompt/PromptListPage.ts +#: src/interfaces/AdminInterface.ts +#: src/pages/stages/prompt/PromptListPage.ts msgid "Prompts" msgstr "输入" @@ -3965,8 +3924,7 @@ msgid "Protocol settings" msgstr "协议设置" #: src/pages/providers/ProviderListPage.ts -msgid "" -"Provide support for protocols like SAML and OAuth to assigned applications." +msgid "Provide support for protocols like SAML and OAuth to assigned applications." msgstr "为分配的应用程序提供对 SAML 和 OAuth 等协议的支持。" #: src/elements/oauth/UserRefreshList.ts @@ -3989,12 +3947,14 @@ msgstr "提供程序类型" msgid "Provider(s)" msgstr "提供程序" -#: src/interfaces/AdminInterface.ts src/pages/outposts/OutpostListPage.ts +#: src/interfaces/AdminInterface.ts +#: src/pages/outposts/OutpostListPage.ts #: src/pages/providers/ProviderListPage.ts msgid "Providers" msgstr "提供程序" -#: src/pages/outposts/OutpostForm.ts src/pages/outposts/OutpostListPage.ts +#: src/pages/outposts/OutpostForm.ts +#: src/pages/outposts/OutpostListPage.ts #: src/pages/providers/proxy/ProxyProviderForm.ts #: src/pages/providers/proxy/ProxyProviderViewPage.ts msgid "Proxy" @@ -4012,8 +3972,7 @@ msgid "Public Key" msgstr "公钥" #: src/pages/stages/captcha/CaptchaStageForm.ts -msgid "" -"Public key, acquired from https://www.google.com/recaptcha/intro/v3.html." +msgid "Public key, acquired from https://www.google.com/recaptcha/intro/v3.html." msgstr "公钥,从 https://www.google.com/recaptcha/intro/v3.html 获取。" #: src/pages/applications/ApplicationForm.ts @@ -4025,9 +3984,7 @@ msgid "Quick actions" msgstr "快速操作" #: src/pages/flows/StageBindingForm.ts -msgid "" -"RESTART restarts the flow from the beginning, while keeping the flow " -"context." +msgid "RESTART restarts the flow from the beginning, while keeping the flow context." msgstr "RESTART 从头开始重新启动流程,同时保留流程上下文。" #: src/pages/flows/StageBindingForm.ts @@ -4035,8 +3992,7 @@ msgid "RESTART restarts the flow from the beginning." msgstr "RESTART 从头开始重新启动流程。" #: src/pages/flows/StageBindingForm.ts -msgid "" -"RETRY returns the error message and a similar challenge to the executor." +msgid "RETRY returns the error message and a similar challenge to the executor." msgstr "RETRY 向执行器返回错误消息和类似的质询。" #~ msgid "RS256 (Asymmetric Encryption)" @@ -4077,8 +4033,10 @@ msgstr "重新评估策略" msgid "Receive a push notification on your device." msgstr "在您的设备上接收推送通知。" -#: src/pages/flows/utils.ts src/pages/tokens/TokenListPage.ts -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/flows/utils.ts +#: src/pages/tokens/TokenListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Recovery" msgstr "恢复" @@ -4088,16 +4046,15 @@ msgid "Recovery flow" msgstr "恢复流程" #: src/pages/tenants/TenantForm.ts -msgid "" -"Recovery flow. If left empty, the first applicable flow sorted by the slug " -"is used." +msgid "Recovery flow. If left empty, the first applicable flow sorted by the slug is used." msgstr "恢复流程。如果留空,则使用按 Slug 排序的第一个适用流程。" #: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts msgid "Recovery keys" msgstr "恢复密钥" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Recovery link cannot be emailed, user has no email address saved." msgstr "无法通过电子邮件发送恢复链接,用户没有保存电子邮件地址。" @@ -4133,18 +4090,15 @@ msgstr "刷新代码" msgid "Register device" msgstr "注册设备" -#~ msgid "" -#~ "Regular expressions for which authentication is not required. Each new line " -#~ "is interpreted as a new Regular Expression." +#~ msgid "Regular expressions for which authentication is not required. Each new line is interpreted as a new Regular Expression." #~ msgstr "用于描述何处不需要身份验证的正则表达式。每个新行都被解释为一个新的正则表达式。" #: src/pages/providers/proxy/ProxyProviderForm.ts -msgid "" -"Regular expressions for which authentication is not required. Each new line " -"is interpreted as a new expression." +msgid "Regular expressions for which authentication is not required. Each new line is interpreted as a new expression." msgstr "用于描述何处不需要身份验证的正则表达式。每个新行都被解释为一个新的表达式。" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Regular user" msgstr "普通用户" @@ -4166,19 +4120,13 @@ msgid "Reputation" msgstr "信誉" #: src/pages/policies/reputation/ReputationListPage.ts -msgid "" -"Reputation for IP and user identifiers. Scores are decreased for each failed" -" login and increased for each successful login." +msgid "Reputation for IP and user identifiers. Scores are decreased for each failed login and increased for each successful login." msgstr "IP 和用户标识符的信誉。每次登录失败分数都会降低,每次登录成功分数都会增加。" -#~ msgid "" -#~ "Reputation for IPs. Scores are decreased for each failed login and increased" -#~ " for each successful login." +#~ msgid "Reputation for IPs. Scores are decreased for each failed login and increased for each successful login." #~ msgstr "IP 的信誉。每次登录失败分数都会降低,每次登录成功分数都会增加。" -#~ msgid "" -#~ "Reputation for usernames. Scores are decreased for each failed login and " -#~ "increased for each successful login." +#~ msgid "Reputation for usernames. Scores are decreased for each failed login and increased for each successful login." #~ msgstr "用户名的声誉。每次登录失败分数都会降低,每次登录成功分数都会增加。" #~ msgid "Reputation policy" @@ -4195,7 +4143,8 @@ msgstr "IP 和用户标识符的信誉。每次登录失败分数都会降低, msgid "Reputation scores" msgstr "信誉分数" -#: src/pages/events/EventInfo.ts src/pages/events/EventInfo.ts +#: src/pages/events/EventInfo.ts +#: src/pages/events/EventInfo.ts msgid "Request" msgstr "请求" @@ -4215,7 +4164,8 @@ msgstr "必需" msgid "Required." msgstr "必需。" -#: src/pages/users/ServiceAccountForm.ts src/pages/users/UserForm.ts +#: src/pages/users/ServiceAccountForm.ts +#: src/pages/users/UserForm.ts msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." msgstr "必填。不超过 150 个字符。仅限字母、数字和 @/./+/-/_ 。" @@ -4261,9 +4211,7 @@ msgstr "返回主页" msgid "Return to device picker" msgstr "返回设备选择器" -#~ msgid "" -#~ "Return true if request IP/target username's score is below a certain " -#~ "threshold." +#~ msgid "Return true if request IP/target username's score is below a certain threshold." #~ msgstr "如果请求 IP/目标用户名的分数低于特定阈值则返回真。 " #: src/elements/oauth/UserRefreshList.ts @@ -4390,7 +4338,8 @@ msgstr "搜索组" msgid "Search mode" msgstr "搜索模式" -#: src/elements/table/TableSearch.ts src/user/LibraryPage.ts +#: src/elements/table/TableSearch.ts +#: src/user/LibraryPage.ts msgid "Search..." msgstr "搜索..." @@ -4426,9 +4375,7 @@ msgid "See documentation for a list of all variables." msgstr "请阅读文档了解完整变量列表。" #: src/pages/applications/ApplicationForm.ts -msgid "" -"Select a provider that this application should use. Alternatively, create a " -"new provider." +msgid "Select a provider that this application should use. Alternatively, create a new provider." msgstr "选择此应用程序应使用的提供程序。或者创建一个新的提供程序。" #: src/elements/table/Table.ts @@ -4459,15 +4406,14 @@ msgid "Select one of the sources below to login." msgstr "选择以下源之一进行登录。" #: src/pages/stages/identification/IdentificationStageForm.ts -msgid "" -"Select sources should be shown for users to authenticate with. This only " -"affects web-based sources, not LDAP." +msgid "Select sources should be shown for users to authenticate with. This only affects web-based sources, not LDAP." msgstr "选择的源应显示给用户进行身份验证。这只会影响基于 Web 的源,而不影响 LDAP。" #: src/pages/outposts/ServiceConnectionWizard.ts #: src/pages/policies/PolicyWizard.ts #: src/pages/property-mappings/PropertyMappingWizard.ts -#: src/pages/providers/ProviderWizard.ts src/pages/sources/SourceWizard.ts +#: src/pages/providers/ProviderWizard.ts +#: src/pages/sources/SourceWizard.ts #: src/pages/stages/StageWizard.ts msgid "Select type" msgstr "选择类型" @@ -4477,37 +4423,26 @@ msgid "Select users to add" msgstr "选择要添加的用户" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts -msgid "" -"Select which scopes can be used by the client. The client still has to " -"specify the scope to access the data." +msgid "Select which scopes can be used by the client. The client still has to specify the scope to access the data." msgstr "选择客户端可以使用哪些作用域。客户端仍然需要指定访问数据的范围。" #: src/pages/sources/plex/PlexSourceForm.ts -msgid "" -"Select which server a user has to be a member of to be allowed to " -"authenticate." +msgid "Select which server a user has to be a member of to be allowed to authenticate." msgstr "选择用户必须是哪个服务器的成员才能进行身份验证。" #: src/pages/events/RuleForm.ts -msgid "" -"Select which transports should be used to notify the user. If none are " -"selected, the notification will only be shown in the authentik UI." +msgid "Select which transports should be used to notify the user. If none are selected, the notification will only be shown in the authentik UI." msgstr "选择应使用哪些传输方式来通知用户。如果未选择任何内容,则通知将仅显示在 authentik UI 中。" #: src/pages/stages/prompt/PromptStageForm.ts -msgid "" -"Selected policies are executed when the stage is submitted to validate the " -"data." +msgid "Selected policies are executed when the stage is submitted to validate the data." msgstr "当阶段被提交以验证数据时,执行选定的策略。" -#~ msgid "" -#~ "Selecting a service-connection enables the management of the outpost by " -#~ "authentik." +#~ msgid "Selecting a service-connection enables the management of the outpost by authentik." #~ msgstr "选择服务连接使 authentik 能够管理前哨。" #: src/pages/outposts/OutpostForm.ts -msgid "" -"Selecting an integration enables the management of the outpost by authentik." +msgid "Selecting an integration enables the management of the outpost by authentik." msgstr "选择集成使 authentik 能够管理前哨。" #: src/pages/stages/password/PasswordStageForm.ts @@ -4518,21 +4453,21 @@ msgstr "选择用于测试密码的后端。" msgid "Send Email again." msgstr "再次发送电子邮件。" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Send link" msgstr "发送链接" #: src/pages/events/RuleListPage.ts -msgid "" -"Send notifications whenever a specific Event is created and matched by " -"policies." +msgid "Send notifications whenever a specific Event is created and matched by policies." msgstr "每当特定事件被创建并匹配策略时,都会发送通知。" #: src/pages/events/TransportForm.ts msgid "Send once" msgstr "发送一次" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Send recovery link to user" msgstr "向用户发送恢复链接" @@ -4581,9 +4516,7 @@ msgstr "会话 ID" msgid "Session duration" msgstr "会话持续时间" -#~ msgid "" -#~ "Session not valid on or after current time + this value (Format: " -#~ "hours=1;minutes=2;seconds=3)." +#~ msgid "Session not valid on or after current time + this value (Format: hours=1;minutes=2;seconds=3)." #~ msgstr "从当前时间经过多久时或之后,会话无效(格式:hours=1;minutes=2;seconds=3)。" #: src/pages/providers/saml/SAMLProviderForm.ts @@ -4598,7 +4531,8 @@ msgstr "不在此刻或之后,会话有效" msgid "Session(s)" msgstr "会话" -#: src/pages/users/UserViewPage.ts src/user/user-settings/UserSettingsPage.ts +#: src/pages/users/UserViewPage.ts +#: src/user/user-settings/UserSettingsPage.ts msgid "Sessions" msgstr "会话" @@ -4607,48 +4541,41 @@ msgid "Set HTTP-Basic Authentication" msgstr "设置 HTTP-Basic 身份验证" #: src/pages/providers/proxy/ProxyProviderForm.ts -msgid "" -"Set a custom HTTP-Basic Authentication header based on values from " -"authentik." +msgid "Set a custom HTTP-Basic Authentication header based on values from authentik." msgstr "根据来自 authentik 的值设置自定义 HTTP-Basic 身份验证标头。" -#: src/pages/groups/GroupForm.ts src/pages/outposts/OutpostForm.ts +#: src/pages/groups/GroupForm.ts +#: src/pages/outposts/OutpostForm.ts #: src/pages/outposts/ServiceConnectionKubernetesForm.ts -#: src/pages/policies/PolicyTestForm.ts src/pages/users/UserForm.ts +#: src/pages/policies/PolicyTestForm.ts +#: src/pages/users/UserForm.ts msgid "Set custom attributes using YAML or JSON." msgstr "使用 YAML 或 JSON 设置自定义属性。" #: src/pages/tenants/TenantForm.ts -msgid "" -"Set custom attributes using YAML or JSON. Any attributes set here will be " -"inherited by users, if the request is handled by this tenant." +msgid "Set custom attributes using YAML or JSON. Any attributes set here will be inherited by users, if the request is handled by this tenant." msgstr "使用 YAML 或 JSON 格式设置自定义属性。如果请求由此租户处理,则用户会继承此处设置的任何自定义属性。 " -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "Set password" msgstr "设置密码" #: src/pages/providers/proxy/ProxyProviderForm.ts -msgid "" -"Set this to the domain you wish the authentication to be valid for. Must be " -"a parent domain of the URL above. If you're running applications as " -"app1.domain.tld, app2.domain.tld, set this to 'domain.tld'." -msgstr "" -"将此设置为您希望身份验证有效的域名。必须是上述 URL 的父域名。如果您的应用部署在 " -"app1.domain.tld、app2.domain.tld,请将其设置为 'domain.tld'。" +msgid "Set this to the domain you wish the authentication to be valid for. Must be a parent domain of the URL above. If you're running applications as app1.domain.tld, app2.domain.tld, set this to 'domain.tld'." +msgstr "将此设置为您希望身份验证有效的域名。必须是上述 URL 的父域名。如果您的应用部署在 app1.domain.tld、app2.domain.tld,请将其设置为 'domain.tld'。" #: src/pages/providers/proxy/ProxyProviderViewPage.ts msgid "Setup" msgstr "设置" -#: src/pages/events/RuleForm.ts src/pages/events/RuleListPage.ts +#: src/pages/events/RuleForm.ts +#: src/pages/events/RuleListPage.ts msgid "Severity" msgstr "严重程度" #: src/pages/stages/prompt/PromptStageForm.ts -msgid "" -"Show arbitrary input fields to the user, for example during enrollment. Data" -" is saved in the flow context under the 'prompt_data' variable." +msgid "Show arbitrary input fields to the user, for example during enrollment. Data is saved in the flow context under the 'prompt_data' variable." msgstr "向用户显示任意输入字段,例如在注册期间。数据保存在流程上下文中的 'prompt_data' 变量下。" #: src/elements/Expand.ts @@ -4711,7 +4638,8 @@ msgstr "一次性使用" #~ msgid "Skip path regex" #~ msgstr "跳过路径正则表达式" -#: src/pages/applications/ApplicationForm.ts src/pages/flows/FlowForm.ts +#: src/pages/applications/ApplicationForm.ts +#: src/pages/flows/FlowForm.ts #: src/pages/sources/ldap/LDAPSourceForm.ts #: src/pages/sources/oauth/OAuthSourceForm.ts #: src/pages/sources/plex/PlexSourceForm.ts @@ -4745,16 +4673,11 @@ msgstr "源" msgid "Sources" msgstr "源" -#~ msgid "" -#~ "Sources of identities, which can either be synced into authentik's database," -#~ " like LDAP, or can be used by users to authenticate and enroll themselves, " -#~ "like OAuth and social logins" +#~ msgid "Sources of identities, which can either be synced into authentik's database, like LDAP, or can be used by users to authenticate and enroll themselves, like OAuth and social logins" #~ msgstr "身份来源,既可以同步到 authentik 的数据库中,例如 LDAP,也可以被用户用来进行身份验证和注册,例如 OAuth 和社交登录" #: src/pages/sources/SourceListPage.ts -msgid "" -"Sources of identities, which can either be synced into authentik's database," -" or can be used by users to authenticate and enroll themselves." +msgid "Sources of identities, which can either be synced into authentik's database, or can be used by users to authenticate and enroll themselves." msgstr "身份来源,既可以同步到 authentik 的数据库中,也可以被用户用来进行身份验证和注册。" #: src/interfaces/locale.ts @@ -4769,7 +4692,8 @@ msgstr "通过用逗号分隔多个服务器 URI 来指定它们。" msgid "Stacked" msgstr "叠放" -#: src/pages/flows/BoundStagesList.ts src/pages/flows/StageBindingForm.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/flows/StageBindingForm.ts msgid "Stage" msgstr "阶段" @@ -4804,34 +4728,23 @@ msgstr "阶段对象" msgid "Stage type" msgstr "阶段类型" -#~ msgid "" -#~ "Stage used to configure Authenticator when user doesn't have any compatible " -#~ "devices. After this configuration Stage passes, the user is not prompted " -#~ "again." +#~ msgid "Stage used to configure Authenticator when user doesn't have any compatible devices. After this configuration Stage passes, the user is not prompted again." #~ msgstr "在用户没有任何兼容设备时用来配置身份验证器的阶段。此配置阶段通过后,不会再次提示用户。" #: src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts -msgid "" -"Stage used to configure a TOTP authenticator (i.e. Authy/Google " -"Authenticator)." +msgid "Stage used to configure a TOTP authenticator (i.e. Authy/Google Authenticator)." msgstr "用来配置 TOTP 身份验证器(即 Authy/Google 身份验证器)的阶段。" #: src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts -msgid "" -"Stage used to configure a WebAutnn authenticator (i.e. Yubikey, " -"FaceID/Windows Hello)." +msgid "Stage used to configure a WebAutnn authenticator (i.e. Yubikey, FaceID/Windows Hello)." msgstr "用来配置 WebAuthn 身份验证器(即 Yubikey、FaceID/Windows Hello)的阶段。" #: src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts -msgid "" -"Stage used to configure a duo-based authenticator. This stage should be used" -" for configuration flows." +msgid "Stage used to configure a duo-based authenticator. This stage should be used for configuration flows." msgstr "用来配置基于 Duo 的身份验证器的阶段。此阶段应该用于配置流程。" #: src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts -msgid "" -"Stage used to configure a static authenticator (i.e. static tokens). This " -"stage should be used for configuration flows." +msgid "Stage used to configure a static authenticator (i.e. static tokens). This stage should be used for configuration flows." msgstr "用来配置静态身份验证器(即静态令牌)的阶段。此阶段应该用于配置流程。" #: src/pages/stages/authenticator_sms/AuthenticatorSMSStageForm.ts @@ -4839,9 +4752,7 @@ msgid "Stage used to configure an SMS-based TOTP authenticator." msgstr "用来配置基于短信的 TOTP 身份验证器的阶段。" #: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts -msgid "" -"Stage used to validate any authenticator. This stage should be used during " -"authentication or authorization flows." +msgid "Stage used to validate any authenticator. This stage should be used during authentication or authorization flows." msgstr "用来验证任何身份验证器的阶段。此阶段应在身份验证或授权流程中使用。" #: src/pages/stages/StageListPage.ts @@ -4866,22 +4777,19 @@ msgstr "阶段" msgid "Stage-specific settings" msgstr "阶段特定设置" -#: src/interfaces/AdminInterface.ts src/pages/flows/FlowListPage.ts -#: src/pages/stages/StageListPage.ts src/pages/stages/prompt/PromptListPage.ts +#: src/interfaces/AdminInterface.ts +#: src/pages/flows/FlowListPage.ts +#: src/pages/stages/StageListPage.ts +#: src/pages/stages/prompt/PromptListPage.ts msgid "Stages" msgstr "阶段" #: src/pages/stages/StageListPage.ts -msgid "" -"Stages are single steps of a Flow that a user is guided through. A stage can" -" only be executed from within a flow." +msgid "Stages are single steps of a Flow that a user is guided through. A stage can only be executed from within a flow." msgstr "阶段是引导用户完成流程的单个步骤。阶段只能在流程内部执行。" #: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts -msgid "" -"Stages used to configure Authenticator when user doesn't have any compatible" -" devices. After this configuration Stage passes, the user is not prompted " -"again." +msgid "Stages used to configure Authenticator when user doesn't have any compatible devices. After this configuration Stage passes, the user is not prompted again." msgstr "当用户没有任何兼容的设备时,用来配置身份验证器的阶段。此阶段通过后,将不再请求此用户。" #: src/pages/outposts/ServiceConnectionListPage.ts @@ -4909,9 +4817,7 @@ msgid "Static: Static value, displayed as-is." msgstr "静态:静态值,按原样显示。" #: src/pages/stages/deny/DenyStageForm.ts -msgid "" -"Statically deny the flow. To use this stage effectively, disable *Evaluate " -"on plan* on the respective binding." +msgid "Statically deny the flow. To use this stage effectively, disable *Evaluate on plan* on the respective binding." msgstr "静态拒绝流。要有效地使用此阶段,请在相应的绑定上禁用*规划时进行评估*。" #: src/pages/system-tasks/SystemTaskListPage.ts @@ -4928,7 +4834,8 @@ msgstr "状态" msgid "Stop impersonation" msgstr "停止模拟身份" -#: src/pages/events/EventInfo.ts src/pages/stages/email/EmailStageForm.ts +#: src/pages/events/EventInfo.ts +#: src/pages/stages/email/EmailStageForm.ts msgid "Subject" msgstr "主题" @@ -4944,7 +4851,8 @@ msgstr "替代名称" msgid "Successful" msgstr "成功" -#: src/elements/charts/AdminLoginsChart.ts src/elements/charts/UserChart.ts +#: src/elements/charts/AdminLoginsChart.ts +#: src/elements/charts/UserChart.ts msgid "Successful Logins" msgstr "成功登录" @@ -4968,7 +4876,8 @@ msgstr "已成功复制 TOTP 配置。" msgid "Successfully created application." msgstr "已成功创建应用程序。" -#: src/pages/flows/StageBindingForm.ts src/pages/policies/PolicyBindingForm.ts +#: src/pages/flows/StageBindingForm.ts +#: src/pages/policies/PolicyBindingForm.ts msgid "Successfully created binding." msgstr "已成功创建绑定。" @@ -5074,11 +4983,13 @@ msgstr "已成功创建令牌。" msgid "Successfully created transport." msgstr "已成功创建传输。" -#: src/pages/users/ServiceAccountForm.ts src/pages/users/UserForm.ts +#: src/pages/users/ServiceAccountForm.ts +#: src/pages/users/UserForm.ts msgid "Successfully created user." msgstr "已成功创建用户。" -#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +#: src/elements/forms/DeleteBulkForm.ts +#: src/elements/forms/DeleteForm.ts msgid "Successfully deleted {0} {1}" msgstr "已成功删除 {0} {1}" @@ -5091,7 +5002,8 @@ msgstr "解绑成功" msgid "Successfully generated certificate-key pair." msgstr "已成功生成证书密钥对。" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts #: src/pages/users/UserViewPage.ts msgid "Successfully generated recovery link" msgstr "已成功生成恢复链接" @@ -5118,7 +5030,8 @@ msgstr "已成功发送测试请求。" msgid "Successfully updated application." msgstr "已成功更新应用程序。" -#: src/pages/flows/StageBindingForm.ts src/pages/policies/PolicyBindingForm.ts +#: src/pages/flows/StageBindingForm.ts +#: src/pages/policies/PolicyBindingForm.ts msgid "Successfully updated binding." msgstr "已成功更新绑定。" @@ -5247,13 +5160,16 @@ msgstr "已成功更新用户。" msgid "Successfully updated {0} {1}" msgstr "已成功更新 {0} {1}" -#: src/pages/groups/GroupViewPage.ts src/pages/users/GroupSelectModal.ts -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/groups/GroupViewPage.ts +#: src/pages/users/GroupSelectModal.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts #: src/pages/users/UserViewPage.ts msgid "Superuser" msgstr "超级用户" -#: src/pages/groups/GroupListPage.ts src/pages/groups/RelatedGroupList.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/groups/RelatedGroupList.ts msgid "Superuser privileges?" msgstr "超级用户权限?" @@ -5370,7 +5286,8 @@ msgstr "租户" msgid "Tenant(s)" msgstr "租户" -#: src/interfaces/AdminInterface.ts src/pages/tenants/TenantListPage.ts +#: src/interfaces/AdminInterface.ts +#: src/pages/tenants/TenantListPage.ts msgid "Tenants" msgstr "租户" @@ -5405,15 +5322,11 @@ msgid "The URL \"{0}\" was not found." msgstr "未找到 URL \"{0}\"。" #: src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts -msgid "" -"The authenticator MUST create a dedicated credential. If it cannot, the RP " -"is prepared for an error to occur" +msgid "The authenticator MUST create a dedicated credential. If it cannot, the RP is prepared for an error to occur" msgstr "身份验证器必须创建专用凭据。如果不能,RP 预期会发生错误" #: src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts -msgid "" -"The authenticator can create and store a dedicated credential, but if it " -"doesn't that's alright too" +msgid "The authenticator can create and store a dedicated credential, but if it doesn't that's alright too" msgstr "身份验证器可以创建和存储专用凭据,但不创建也可以" #: src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts @@ -5422,20 +5335,14 @@ msgstr "身份验证器不应该创建专用凭据" #: src/pages/providers/proxy/ProxyProviderForm.ts #: src/pages/providers/proxy/ProxyProviderForm.ts -msgid "" -"The external URL you'll access the application at. Include any non-standard " -"port." +msgid "The external URL you'll access the application at. Include any non-standard port." msgstr "您将通过此外部 URL 访问应用程序。请包括任何非标准端口。" -#~ msgid "" -#~ "The external URL you'll authenticate at. Can be the same domain as " -#~ "authentik." +#~ msgid "The external URL you'll authenticate at. Can be the same domain as authentik." #~ msgstr "您将在此外部 URL 进行身份验证。可以使用与 authentik 相同的域名。" #: src/pages/providers/proxy/ProxyProviderForm.ts -msgid "" -"The external URL you'll authenticate at. The authentik core server should be" -" reachable under this URL." +msgid "The external URL you'll authenticate at. The authentik core server should be reachable under this URL." msgstr "您将在此外部 URL 进行身份验证。通过此 URL 应该可以访问到 authentik 核心服务器。" #: src/elements/utils/TimeDeltaHelp.ts @@ -5469,29 +5376,16 @@ msgstr "" "策略不通过。" #: src/pages/policies/dummy/DummyPolicyForm.ts -msgid "" -"The policy takes a random time to execute. This controls the minimum time it" -" will take." +msgid "The policy takes a random time to execute. This controls the minimum time it will take." msgstr "策略需要一段随机时间来执行。这将控制所需的最短时间。" #: src/pages/providers/ldap/LDAPProviderForm.ts -msgid "" -"The start for gidNumbers, this number is added to a number generated from " -"the group.Pk to make sure that the numbers aren't too low for POSIX groups. " -"Default is 4000 to ensure that we don't collide with local groups or users " -"primary groups gidNumber" -msgstr "" -"起始 gidNumbers,这个数字会被添加到从 group.Pk 生成的数字中,以确保对于 POSIX 用户来说,这个数字不会太低。默认值为 " -"4000,以确保我们不会与本地群组或用户主组的 gidNumber 发生冲突" +msgid "The start for gidNumbers, this number is added to a number generated from the group.Pk to make sure that the numbers aren't too low for POSIX groups. Default is 4000 to ensure that we don't collide with local groups or users primary groups gidNumber" +msgstr "起始 gidNumbers,这个数字会被添加到从 group.Pk 生成的数字中,以确保对于 POSIX 用户来说,这个数字不会太低。默认值为 4000,以确保我们不会与本地群组或用户主组的 gidNumber 发生冲突" #: src/pages/providers/ldap/LDAPProviderForm.ts -msgid "" -"The start for uidNumbers, this number is added to the user.Pk to make sure " -"that the numbers aren't too low for POSIX users. Default is 2000 to ensure " -"that we don't collide with local users uidNumber" -msgstr "" -"起始 uidNumbers,这个数字会被添加到 user.Pk 中,以确保对于 POSIX 用户来说,这个数字不会太低。默认值为 " -"2000,以确保我们不会与本地用户的 uidNumber 发生冲突" +msgid "The start for uidNumbers, this number is added to the user.Pk to make sure that the numbers aren't too low for POSIX users. Default is 2000 to ensure that we don't collide with local users uidNumber" +msgstr "起始 uidNumbers,这个数字会被添加到 user.Pk 中,以确保对于 POSIX 用户来说,这个数字不会太低。默认值为 2000,以确保我们不会与本地用户的 uidNumber 发生冲突" #: src/pages/flows/BoundStagesList.ts msgid "These bindings control if this stage will be applied to the flow." @@ -5536,22 +5430,15 @@ msgid "This is the password to be used with basic auth" msgstr "这是用于 Basic 身份验证的密码" #: src/pages/stages/authenticator_sms/AuthenticatorSMSStageForm.ts -msgid "" -"This is the username to be used with basic auth or the token when used with " -"bearer token" +msgid "This is the username to be used with basic auth or the token when used with bearer token" msgstr "这是用于 Basic 身份验证的用户名,或是使用 Bearer 令牌时的令牌" #: src/pages/providers/proxy/ProxyProviderForm.ts -msgid "" -"This provider will behave like a transparent reverse-proxy, except requests " -"must be authenticated. If your upstream application uses HTTPS, make sure to" -" connect to the outpost using HTTPS as well." -msgstr "" -"除了请求必须经过身份验证外,此提供程序的行为类似于透明反向代理。如果您的上游应用程序使用 HTTPS,请确保连接到前哨时也使用 HTTPS。" +msgid "This provider will behave like a transparent reverse-proxy, except requests must be authenticated. If your upstream application uses HTTPS, make sure to connect to the outpost using HTTPS as well." +msgstr "除了请求必须经过身份验证外,此提供程序的行为类似于透明反向代理。如果您的上游应用程序使用 HTTPS,请确保连接到前哨时也使用 HTTPS。" #: src/pages/tenants/TenantForm.ts -msgid "" -"This setting only affects new Events, as the expiration is saved per-event." +msgid "This setting only affects new Events, as the expiration is saved per-event." msgstr "此设置仅影响新事件,因为过期时间是分事件保存的。" #: src/pages/stages/invitation/InvitationStageForm.ts @@ -5559,9 +5446,7 @@ msgid "This stage can be included in enrollment flows to accept invitations." msgstr "此阶段可以包含在注册流程中以接受邀请。" #: src/pages/stages/captcha/CaptchaStageForm.ts -msgid "" -"This stage checks the user's current session against the Google reCaptcha " -"service." +msgid "This stage checks the user's current session against the Google reCaptcha service." msgstr "此阶段会根据 Google reCAPTCHA 服务检查用户的当前会话。" #: src/pages/policies/reputation/ReputationPolicyForm.ts @@ -5573,19 +5458,11 @@ msgid "Time in minutes the token sent is valid." msgstr "发出令牌的有效时间(单位为分钟)。" #: src/pages/sources/saml/SAMLSourceForm.ts -msgid "" -"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." +msgid "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." msgstr "删除临时用户的时间偏移。这仅适用于您的 IDP 使用 NameID 格式 'transient' 且用户未手动登出的情况。" -#~ msgid "" -#~ "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. (Format: hours=1;minutes=2;seconds=3)." -#~ msgstr "" -#~ "删除临时用户的时间偏移。这仅适用于您的 IDP 使用 NameID 格式 'transient' " -#~ "且用户未手动登出的情况。(格式:hours=1;minutes=2;seconds=3)。" +#~ msgid "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. (Format: hours=1;minutes=2;seconds=3)." +#~ msgstr "删除临时用户的时间偏移。这仅适用于您的 IDP 使用 NameID 格式 'transient' 且用户未手动登出的情况。(格式:hours=1;minutes=2;seconds=3)。" #~ msgid "Time-based One-Time Passwords" #~ msgstr "基于时间的一次性密码" @@ -5596,7 +5473,8 @@ msgstr "删除临时用户的时间偏移。这仅适用于您的 IDP 使用 Nam msgid "Timeout" msgstr "超时" -#: src/pages/flows/FlowForm.ts src/pages/tenants/TenantForm.ts +#: src/pages/flows/FlowForm.ts +#: src/pages/tenants/TenantForm.ts msgid "Title" msgstr "标题" @@ -5605,26 +5483,19 @@ msgid "To" msgstr "至" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts -msgid "" -"To allow any redirect URI, set this value to \"*\". Be aware of the possible" -" security implications this can have." +msgid "To allow any redirect URI, set this value to \"*\". Be aware of the possible security implications this can have." msgstr "要允许任何重定向 URI,请将此值设置为 \"*\"。请注意这可能带来的安全影响。" #: src/pages/users/UserViewPage.ts -msgid "" -"To create a recovery link, the current tenant needs to have a recovery flow " -"configured." +msgid "To create a recovery link, the current tenant needs to have a recovery flow configured." msgstr "要创建恢复链接,当前租户需要配置恢复流程。" -#~ msgid "" -#~ "To directly reset a user's password, configure a recovery flow on the " -#~ "currently active tenant." +#~ msgid "To directly reset a user's password, configure a recovery flow on the currently active tenant." #~ msgstr "要直接重置用户的密码,请在当前活动的租户上配置恢复流程。" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts -msgid "" -"To let a user directly reset a their password, configure a recovery flow on " -"the currently active tenant." +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts +msgid "To let a user directly reset a their password, configure a recovery flow on the currently active tenant." msgstr "要让用户直接重置密码,请在当前活动的租户上配置恢复流程。" #: src/pages/sources/ldap/LDAPSourceForm.ts @@ -5674,9 +5545,7 @@ msgid "Tokens and App passwords" msgstr "令牌和应用程序密码" #: src/pages/tokens/TokenListPage.ts -msgid "" -"Tokens are used throughout authentik for Email validation stages, Recovery " -"keys and API access." +msgid "Tokens are used throughout authentik for Email validation stages, Recovery keys and API access." msgstr "令牌在整个 authentik 中用于电子邮件验证阶段、恢复密钥和 API 访问。" #: src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts @@ -5739,12 +5608,14 @@ msgstr "Twilio 账户 SID" msgid "Twilio Auth Token" msgstr "Twilio 身份验证令牌" -#: src/pages/flows/BoundStagesList.ts src/pages/outposts/OutpostForm.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/outposts/OutpostForm.ts #: src/pages/outposts/OutpostListPage.ts #: src/pages/outposts/ServiceConnectionListPage.ts #: src/pages/policies/PolicyListPage.ts #: src/pages/property-mappings/PropertyMappingListPage.ts -#: src/pages/providers/ProviderListPage.ts src/pages/sources/SourceListPage.ts +#: src/pages/providers/ProviderListPage.ts +#: src/pages/sources/SourceListPage.ts #: src/pages/stages/prompt/PromptForm.ts #: src/pages/stages/prompt/PromptListPage.ts #: src/user/user-settings/mfa/MFADevicesPage.ts @@ -5755,7 +5626,8 @@ msgstr "类型" msgid "UI settings" msgstr "用户界面设置" -#: src/pages/events/EventInfo.ts src/pages/users/RelatedUserList.ts +#: src/pages/events/EventInfo.ts +#: src/pages/users/RelatedUserList.ts #: src/pages/users/UserListPage.ts msgid "UID" msgstr "UID" @@ -5790,9 +5662,7 @@ msgid "URL used by authentik to retrieve tokens." msgstr "authentik 用来获取令牌的 URL。" #: src/pages/sources/oauth/OAuthSourceForm.ts -msgid "" -"URL used to request the initial token. This URL is only required for OAuth " -"1." +msgid "URL used to request the initial token. This URL is only required for OAuth 1." msgstr "用于请求初始令牌的 URL。只有 OAuth 1 才需要此网址。" #: src/pages/providers/proxy/ProxyProviderForm.ts @@ -5849,11 +5719,16 @@ msgstr "最新!" #: src/pages/applications/ApplicationListPage.ts #: src/pages/applications/ApplicationViewPage.ts #: src/pages/crypto/CertificateKeyPairListPage.ts -#: src/pages/events/RuleListPage.ts src/pages/events/TransportListPage.ts -#: src/pages/flows/BoundStagesList.ts src/pages/flows/BoundStagesList.ts -#: src/pages/flows/FlowListPage.ts src/pages/flows/FlowViewPage.ts -#: src/pages/groups/GroupListPage.ts src/pages/groups/GroupViewPage.ts -#: src/pages/groups/RelatedGroupList.ts src/pages/outposts/OutpostListPage.ts +#: src/pages/events/RuleListPage.ts +#: src/pages/events/TransportListPage.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/flows/BoundStagesList.ts +#: src/pages/flows/FlowListPage.ts +#: src/pages/flows/FlowViewPage.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/groups/GroupViewPage.ts +#: src/pages/groups/RelatedGroupList.ts +#: src/pages/outposts/OutpostListPage.ts #: src/pages/outposts/ServiceConnectionListPage.ts #: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/BoundPoliciesList.ts @@ -5874,9 +5749,12 @@ msgstr "最新!" #: src/pages/stages/StageListPage.ts #: src/pages/stages/invitation/InvitationListPage.ts #: src/pages/stages/prompt/PromptListPage.ts -#: src/pages/tenants/TenantListPage.ts src/pages/tokens/TokenListPage.ts -#: src/pages/users/RelatedUserList.ts src/pages/users/UserActiveForm.ts -#: src/pages/users/UserListPage.ts src/pages/users/UserViewPage.ts +#: src/pages/tenants/TenantListPage.ts +#: src/pages/tokens/TokenListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserActiveForm.ts +#: src/pages/users/UserListPage.ts +#: src/pages/users/UserViewPage.ts #: src/user/user-settings/mfa/MFADevicesPage.ts #: src/user/user-settings/tokens/UserTokenList.ts msgid "Update" @@ -5899,11 +5777,13 @@ msgstr "更新证书密钥对" msgid "Update Device" msgstr "更新设备" -#: src/pages/flows/FlowListPage.ts src/pages/flows/FlowViewPage.ts +#: src/pages/flows/FlowListPage.ts +#: src/pages/flows/FlowViewPage.ts msgid "Update Flow" msgstr "更新流程" -#: src/pages/groups/GroupListPage.ts src/pages/groups/GroupViewPage.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/groups/GroupViewPage.ts #: src/pages/groups/RelatedGroupList.ts #: src/pages/policies/BoundPoliciesList.ts msgid "Update Group" @@ -5974,8 +5854,10 @@ msgstr "更新租户" msgid "Update Token" msgstr "更新令牌" -#: src/pages/policies/BoundPoliciesList.ts src/pages/users/RelatedUserList.ts -#: src/pages/users/UserListPage.ts src/pages/users/UserViewPage.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts +#: src/pages/users/UserViewPage.ts msgid "Update User" msgstr "更新用户" @@ -5987,8 +5869,10 @@ msgstr "更新可用" msgid "Update details" msgstr "更新详情" -#: src/pages/users/RelatedUserList.ts src/pages/users/RelatedUserList.ts -#: src/pages/users/UserListPage.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts +#: src/pages/users/UserListPage.ts msgid "Update password" msgstr "更新密码" @@ -5997,8 +5881,10 @@ msgstr "更新密码" #: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/PolicyListPage.ts #: src/pages/property-mappings/PropertyMappingListPage.ts -#: src/pages/providers/ProviderListPage.ts src/pages/sources/SourceListPage.ts -#: src/pages/stages/StageListPage.ts src/pages/users/UserActiveForm.ts +#: src/pages/providers/ProviderListPage.ts +#: src/pages/sources/SourceListPage.ts +#: src/pages/stages/StageListPage.ts +#: src/pages/users/UserActiveForm.ts msgid "Update {0}" msgstr "更新 {0}" @@ -6036,57 +5922,43 @@ msgstr "使用全局设置" #: src/pages/sources/oauth/OAuthSourceForm.ts #: src/pages/sources/plex/PlexSourceForm.ts -msgid "" -"Use the user's email address, but deny enrollment when the email address " -"already exists." +msgid "Use the user's email address, but deny enrollment when the email address already exists." msgstr "使用用户的电子邮件地址,但在电子邮件地址已存在时拒绝注册。" #: src/pages/sources/oauth/OAuthSourceForm.ts #: src/pages/sources/plex/PlexSourceForm.ts -msgid "" -"Use the user's username, but deny enrollment when the username already " -"exists." +msgid "Use the user's username, but deny enrollment when the username already exists." msgstr "使用用户的用户名,但在用户名已存在时拒绝注册。" #: src/pages/users/ServiceAccountForm.ts -msgid "" -"Use the username and password below to authenticate. The password can be " -"retrieved later on the Tokens page." +msgid "Use the username and password below to authenticate. The password can be retrieved later on the Tokens page." msgstr "使用下面的用户名和密码进行身份验证。密码可以稍后在令牌页面上获取。" #: src/pages/providers/proxy/ProxyProviderForm.ts -msgid "" -"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 manged " -"outpost, this is done for you)." -msgstr "" -"与 nginx 的 auth_request 或 traefik 的 ForwardAuth " -"一起使用此提供程序。每个应用程序/域名都需要自己的提供程序。此外,在每个域名上,/outpost.goauthentik.io " -"必须路由到前哨(在使用托管的 Outpost 时,这已经为您处理好了)。" +msgid "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 manged outpost, this is done for you)." +msgstr "与 nginx 的 auth_request 或 traefik 的 ForwardAuth 一起使用此提供程序。每个应用程序/域名都需要自己的提供程序。此外,在每个域名上,/outpost.goauthentik.io 必须路由到前哨(在使用托管的 Outpost 时,这已经为您处理好了)。" #: src/pages/providers/proxy/ProxyProviderForm.ts -msgid "" -"Use this provider with nginx's auth_request or traefik's forwardAuth. Only a" -" single provider is required per root domain. You can't do per-application " -"authorization, but you don't have to create a provider for each application." -msgstr "" -"与 nginx 的 auth_request 或 traefik 的 ForwardAuth " -"一起使用此提供程序。每个根域名只需要一个提供程序。您无法管理每个应用程序的授权,但不必为每个应用程序分别创建提供程序。" +msgid "Use this provider with nginx's auth_request or traefik's forwardAuth. Only a single provider is required per root domain. You can't do per-application authorization, but you don't have to create a provider for each application." +msgstr "与 nginx 的 auth_request 或 traefik 的 ForwardAuth 一起使用此提供程序。每个根域名只需要一个提供程序。您无法管理每个应用程序的授权,但不必为每个应用程序分别创建提供程序。" #: src/pages/tenants/TenantForm.ts msgid "Use this tenant for each domain that doesn't have a dedicated tenant." msgstr "所有未设置专用租户的域名都将使用此租户。" -#: src/elements/events/ObjectChangelog.ts src/elements/events/UserEvents.ts +#: src/elements/events/ObjectChangelog.ts +#: src/elements/events/UserEvents.ts #: src/pages/applications/ApplicationCheckAccessForm.ts -#: src/pages/events/EventInfo.ts src/pages/events/EventListPage.ts +#: src/pages/events/EventInfo.ts +#: src/pages/events/EventListPage.ts #: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyBindingForm.ts #: src/pages/policies/PolicyTestForm.ts #: src/pages/property-mappings/PropertyMappingTestForm.ts -#: src/pages/tokens/TokenForm.ts src/pages/tokens/TokenListPage.ts -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/tokens/TokenForm.ts +#: src/pages/tokens/TokenListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts #: src/pages/users/UserViewPage.ts #: src/user/user-settings/tokens/UserTokenList.ts msgid "User" @@ -6135,9 +6007,7 @@ msgid "User interface" msgstr "用户界面" #: src/pages/policies/PolicyBindingForm.ts -msgid "" -"User mappings can only be checked if a user is already logged in when trying" -" to access this source." +msgid "User mappings can only be checked if a user is already logged in when trying to access this source." msgstr "用户绑定仅会在已登录用户访问此源时检查。" #: src/pages/sources/oauth/OAuthSourceForm.ts @@ -6164,7 +6034,8 @@ msgstr "用户设置流程" msgid "User statistics" msgstr "用户统计" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "User status" msgstr "用户状态" @@ -6188,7 +6059,8 @@ msgstr "不应进行用户验证。" msgid "User was written to" msgstr "用户被写入" -#: src/pages/policies/BoundPoliciesList.ts src/pages/users/UserViewPage.ts +#: src/pages/policies/BoundPoliciesList.ts +#: src/pages/users/UserViewPage.ts msgid "User {0}" msgstr "用户 {0}" @@ -6200,19 +6072,17 @@ msgstr "用户的头像" msgid "User's display name." msgstr "用户的显示名称" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts msgid "User(s)" msgstr "用户" #: src/pages/providers/proxy/ProxyProviderForm.ts -msgid "" -"User/Group Attribute used for the password part of the HTTP-Basic Header." +msgid "User/Group Attribute used for the password part of the HTTP-Basic Header." msgstr "用于 HTTP-Basic 标头的密码部分的用户/组属性。" #: src/pages/providers/proxy/ProxyProviderForm.ts -msgid "" -"User/Group Attribute used for the user part of the HTTP-Basic Header. If not" -" set, the user's Email address is used." +msgid "User/Group Attribute used for the user part of the HTTP-Basic Header. If not set, the user's Email address is used." msgstr "用于 HTTP-Basic 标头用户名部分的用户/组属性。如果未设置,则使用用户的电子邮件地址。" #: src/pages/providers/oauth2/OAuth2ProviderViewPage.ts @@ -6221,21 +6091,24 @@ msgstr "用户信息 URL" #: src/flows/stages/identification/IdentificationStage.ts #: src/pages/stages/identification/IdentificationStageForm.ts -#: src/pages/users/RelatedUserList.ts src/pages/users/ServiceAccountForm.ts -#: src/pages/users/ServiceAccountForm.ts src/pages/users/UserForm.ts -#: src/pages/users/UserListPage.ts src/pages/users/UserViewPage.ts +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/ServiceAccountForm.ts +#: src/pages/users/ServiceAccountForm.ts +#: src/pages/users/UserForm.ts +#: src/pages/users/UserListPage.ts +#: src/pages/users/UserViewPage.ts msgid "Username" msgstr "用户名" #: src/pages/stages/prompt/PromptForm.ts -msgid "" -"Username: Same as Text input, but checks for and prevents duplicate " -"usernames." +msgid "Username: Same as Text input, but checks for and prevents duplicate usernames." msgstr "用户名:与文本输入相同,但检查并防止用户名重复。" -#: src/interfaces/AdminInterface.ts src/interfaces/AdminInterface.ts +#: src/interfaces/AdminInterface.ts +#: src/interfaces/AdminInterface.ts #: src/pages/admin-overview/AdminOverviewPage.ts -#: src/pages/groups/GroupViewPage.ts src/pages/users/UserListPage.ts +#: src/pages/groups/GroupViewPage.ts +#: src/pages/users/UserListPage.ts msgid "Users" msgstr "用户" @@ -6248,9 +6121,7 @@ msgid "Users created per day in the last month" msgstr "上个月中每天创建的用户" #: src/pages/providers/ldap/LDAPProviderForm.ts -msgid "" -"Users in the selected group can do search queries. If no group is selected, " -"no LDAP Searches are allowed." +msgid "Users in the selected group can do search queries. If no group is selected, no LDAP Searches are allowed." msgstr "所选组中的用户可以执行搜索查询。如果未选择任何组,则不允许 LDAP 搜索。" #: src/pages/events/EventInfo.ts @@ -6262,15 +6133,11 @@ msgid "Using source" msgstr "使用源" #: src/pages/users/ServiceAccountForm.ts -msgid "" -"Valid for 360 days, after which the password will automatically rotate. You " -"can copy the password from the Token List." +msgid "Valid for 360 days, after which the password will automatically rotate. You can copy the password from the Token List." msgstr "有效期为 360 天,之后密码将自动轮换。您可以从令牌列表中复制密码。" #: src/pages/providers/oauth2/OAuth2ProviderForm.ts -msgid "" -"Valid redirect URLs after a successful authorization flow. Also specify any " -"origins here for Implicit flows." +msgid "Valid redirect URLs after a successful authorization flow. Also specify any origins here for Implicit flows." msgstr "授权流程成功后有效的重定向 URL。还可以在此处为隐式流程指定任何来源。" #: src/pages/providers/proxy/ProxyProviderForm.ts @@ -6302,9 +6169,7 @@ msgid "Verification certificates" msgstr "验证证书" #: src/pages/stages/email/EmailStageForm.ts -msgid "" -"Verify the user's email address by sending them a one-time-link. Can also be" -" used for recovery to verify the user's authenticity." +msgid "Verify the user's email address by sending them a one-time-link. Can also be used for recovery to verify the user's authenticity." msgstr "通过向用户发送一次性链接来验证用户的电子邮件地址。也可用于在恢复时验证用户的真实性。" #: src/pages/admin-overview/AdminOverviewPage.ts @@ -6341,7 +6206,8 @@ msgstr "等待(最短)" #: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts #: src/pages/admin-overview/cards/SystemStatusCard.ts -#: src/pages/events/RuleForm.ts src/pages/system-tasks/SystemTaskListPage.ts +#: src/pages/events/RuleForm.ts +#: src/pages/system-tasks/SystemTaskListPage.ts msgid "Warning" msgstr "警告" @@ -6350,9 +6216,7 @@ msgid "Warning: Application is not used by any Outpost." msgstr "警告:应用程序未被任何前哨使用。" #: src/pages/stages/invitation/InvitationListPage.ts -msgid "" -"Warning: No invitation stage is bound to any flow. Invitations will not work" -" as expected." +msgid "Warning: No invitation stage is bound to any flow. Invitations will not work as expected." msgstr "警告:没有邀请阶段绑定到任何流程。邀请将无法按预期工作。" #: src/pages/policies/PolicyListPage.ts @@ -6375,15 +6239,13 @@ msgstr "警告:提供程序未被任何前哨使用。" msgid "Warning: Provider not assigned to any application." msgstr "警告:提供程序未分配给任何应用程序。" -#: src/pages/users/RelatedUserList.ts src/pages/users/UserListPage.ts -msgid "" -"Warning: You're about to delete the user you're logged in as ({0}). Proceed " -"at your own risk." +#: src/pages/users/RelatedUserList.ts +#: src/pages/users/UserListPage.ts +msgid "Warning: You're about to delete the user you're logged in as ({0}). Proceed at your own risk." msgstr "警告:您即将删除当前登录的用户({0})。如果继续,请自担风险。" #: src/pages/outposts/OutpostListPage.ts -msgid "" -"Warning: authentik Domain is not configured, authentication will not work." +msgid "Warning: authentik Domain is not configured, authentication will not work." msgstr "警告:未配置 authentik 域名,身份验证将不起作用。" #: src/pages/tenants/TenantForm.ts @@ -6418,16 +6280,11 @@ msgid "Welcome, {name}." msgstr "欢迎,{name}。" #: src/pages/stages/email/EmailStageForm.ts -msgid "" -"When a user returns from the email successfully, their account will be " -"activated." +msgid "When a user returns from the email successfully, their account will be activated." msgstr "当用户成功自电子邮件中返回时,其账户将被激活。" #: src/pages/stages/identification/IdentificationStageForm.ts -msgid "" -"When a valid username/email has been entered, and this option is enabled, " -"the user's username and avatar will be shown. Otherwise, the text that the " -"user entered will be shown." +msgid "When a valid username/email has been entered, and this option is enabled, the user's username and avatar will be shown. Otherwise, the text that the user entered will be shown." msgstr "如果输入了有效的用户名/电子邮箱,并且启用了此选项,则会显示用户的用户名和头像。否则,将显示用户输入的文本。" #: src/pages/stages/prompt/PromptForm.ts @@ -6439,9 +6296,7 @@ msgstr "" "如果评估失败,则返回占位符本身。" #: src/pages/sources/ldap/LDAPSourceForm.ts -msgid "" -"When connecting to an LDAP Server with TLS, certificates are not checked by " -"default. Specify a keypair to validate the remote certificate." +msgid "When connecting to an LDAP Server with TLS, certificates are not checked by default. Specify a keypair to validate the remote certificate." msgstr "使用 TLS 连接到 LDAP 服务器时,默认情况下不检查证书。指定密钥对以验证远程证书。" #: src/pages/outposts/ServiceConnectionDockerForm.ts @@ -6449,9 +6304,7 @@ msgid "When connecting via SSH, this keypair is used for authentication." msgstr "通过 SSH 连接时,此密钥对用于身份验证。" #: src/pages/stages/email/EmailStageForm.ts -msgid "" -"When enabled, global Email connection settings will be used and connection " -"settings below will be ignored." +msgid "When enabled, global Email connection settings will be used and connection settings below will be ignored." msgstr "启用后,将使用全局电子邮件连接设置,下面的连接设置将被忽略。" #: src/pages/stages/invitation/InvitationForm.ts @@ -6463,21 +6316,15 @@ msgid "When enabled, user fields are matched regardless of their casing." msgstr "启用后,无论大小写如何,都将匹配用户字段。" #: src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts -msgid "" -"When multiple stages are selected, the user can choose which one they want " -"to enroll." +msgid "When multiple stages are selected, the user can choose which one they want to enroll." msgstr "选中多个阶段时,用户可以选择要注册哪个。" #: src/pages/stages/identification/IdentificationStageForm.ts -msgid "" -"When selected, a password field is shown on the same page instead of a " -"separate page. This prevents username enumeration attacks." +msgid "When selected, a password field is shown on the same page instead of a separate page. This prevents username enumeration attacks." msgstr "选中后,密码字段将显示在同一页面,而不是单独的页面上。这样可以防止用户名枚举攻击。" #: src/pages/providers/saml/SAMLProviderForm.ts -msgid "" -"When selected, incoming assertion's Signatures will be validated against " -"this certificate. To allow unsigned Requests, leave on default." +msgid "When selected, incoming assertion's Signatures will be validated against this certificate. To allow unsigned Requests, leave on default." msgstr "选中后,传入断言的签名将根据此证书进行验证。要允许未签名的请求,请保留默认值。" #: src/pages/policies/dummy/DummyPolicyForm.ts @@ -6487,32 +6334,20 @@ msgstr "选中后,传入断言的签名将根据此证书进行验证。要允 #: src/pages/policies/hibp/HaveIBeenPwnedPolicyForm.ts #: src/pages/policies/password/PasswordPolicyForm.ts #: src/pages/policies/reputation/ReputationPolicyForm.ts -msgid "" -"When this option is enabled, all executions of this policy will be logged. " -"By default, only execution errors are logged." +msgid "When this option is enabled, all executions of this policy will be logged. By default, only execution errors are logged." msgstr "启用此选项后,将记录此策略的所有执行日志。默认情况下,只记录执行错误。" #: src/pages/stages/prompt/PromptForm.ts -msgid "" -"When used in conjunction with a User Write stage, use attributes.foo to " -"write attributes." +msgid "When used in conjunction with a User Write stage, use attributes.foo to write attributes." msgstr "当与用户写入阶段结合使用时,请使用 attributes.foo 来编写属性。" #: src/pages/tenants/TenantForm.ts -msgid "" -"When using an external logging solution for archiving, this can be set to " -"\"minutes=5\"." +msgid "When using an external logging solution for archiving, this can be set to \"minutes=5\"." msgstr "使用外部日志记录解决方案进行存档时,可以将其设置为 \"minutes=5\"。" #: src/pages/providers/proxy/ProxyProviderForm.ts -msgid "" -"When using proxy or forward auth (single application) mode, the requested " -"URL Path is checked against the regular expressions. When using forward auth" -" (domain mode), the full requested URL including scheme and host is matched " -"against the regular expressions." -msgstr "" -"使用代理或 Forward Auth(单应用)模式时,将根据正则表达式检查请求的 URL 路径。使用 Forward " -"Auth(域名模式)时,将根据正则表达式检查请求的完整 URL(包括协议和主机名)。" +msgid "When using proxy or forward auth (single application) mode, the requested URL Path is checked against the regular expressions. When using forward auth (domain mode), the full requested URL including scheme and host is matched against the regular expressions." +msgstr "使用代理或 Forward Auth(单应用)模式时,将根据正则表达式检查请求的 URL 路径。使用 Forward Auth(域名模式)时,将根据正则表达式检查请求的完整 URL(包括协议和主机名)。" #: src/flows/FlowExecutor.ts #: src/user/user-settings/details/UserSettingsFlowExecutor.ts @@ -6541,14 +6376,17 @@ msgstr "X509 主题" #: src/elements/oauth/UserRefreshList.ts #: src/pages/applications/ApplicationCheckAccessForm.ts -#: src/pages/groups/GroupListPage.ts src/pages/groups/MemberSelectModal.ts +#: src/pages/groups/GroupListPage.ts +#: src/pages/groups/MemberSelectModal.ts #: src/pages/groups/RelatedGroupList.ts #: src/pages/outposts/ServiceConnectionListPage.ts #: src/pages/policies/BoundPoliciesList.ts #: src/pages/policies/PolicyTestForm.ts #: src/pages/providers/proxy/ProxyProviderViewPage.ts -#: src/pages/tenants/TenantListPage.ts src/pages/tokens/TokenListPage.ts -#: src/pages/users/GroupSelectModal.ts src/pages/users/RelatedUserList.ts +#: src/pages/tenants/TenantListPage.ts +#: src/pages/tokens/TokenListPage.ts +#: src/pages/users/GroupSelectModal.ts +#: src/pages/users/RelatedUserList.ts #: src/pages/users/UserListPage.ts #: src/user/user-settings/tokens/UserTokenList.ts msgid "Yes" @@ -6600,15 +6438,18 @@ msgstr "连接将被删除" msgid "no tabs defined" msgstr "未定义选项卡" -#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +#: src/elements/forms/DeleteBulkForm.ts +#: src/elements/forms/DeleteForm.ts msgid "object will be DELETED" msgstr "对象将被删除" -#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +#: src/elements/forms/DeleteBulkForm.ts +#: src/elements/forms/DeleteForm.ts msgid "reference will be reset to default value" msgstr "引用将被重置为默认值" -#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +#: src/elements/forms/DeleteBulkForm.ts +#: src/elements/forms/DeleteForm.ts msgid "reference will be set to an empty value" msgstr "引用将被设置为空值" @@ -6620,7 +6461,8 @@ msgstr "以当前用户" msgid "with inspector" msgstr "附加检视器" -#: src/elements/Expand.ts src/elements/Expand.ts +#: src/elements/Expand.ts +#: src/elements/Expand.ts #: src/user/user-settings/details/stages/prompt/PromptStage.ts msgid "{0}" msgstr "{0}" @@ -6633,7 +6475,8 @@ msgstr "{0}(\"{1}\",类型为 {2})" msgid "{0} ({1})" msgstr "{0}({1})" -#: src/elements/forms/DeleteBulkForm.ts src/elements/forms/DeleteForm.ts +#: src/elements/forms/DeleteBulkForm.ts +#: src/elements/forms/DeleteForm.ts msgid "{0} ({consequence})" msgstr "{0}({consequence})" diff --git a/website/docs/releases/v2022.5.md b/website/docs/releases/v2022.5.md index cee90c1ec..ddc2f30eb 100644 --- a/website/docs/releases/v2022.5.md +++ b/website/docs/releases/v2022.5.md @@ -5,6 +5,10 @@ slug: "2022.5" ## Breaking changes +- Twitter Source has been migrated to OAuth2 + + This requires some reconfiguration on both Twitter's and authentik's side. Check out the new Twitter integration docs [here](../../integrations/sources/twitter/) + ## New features - LDAP Outpost cached binding diff --git a/website/integrations/sources/apple/index.md b/website/integrations/sources/apple/index.md index 27656fa9a..a156f14ab 100644 --- a/website/integrations/sources/apple/index.md +++ b/website/integrations/sources/apple/index.md @@ -50,7 +50,7 @@ The following placeholders will be used: ## authentik -20. Under _Resources -> Sources_ Click **Create Apple OAuth Source** +20. Under _Directory -> Federation & Social login_ Click **Create Apple OAuth Source** 21. **Name**: `Apple` 22. **Slug**: `apple` diff --git a/website/integrations/sources/discord/index.md b/website/integrations/sources/discord/index.md index 9be0c8e22..296fe9fdc 100644 --- a/website/integrations/sources/discord/index.md +++ b/website/integrations/sources/discord/index.md @@ -30,21 +30,20 @@ The following placeholders will be used: Here is an example of a completed OAuth2 screen for Discord. -![Example Screen](discord4.png) +![](discord4.png) ## authentik -8. Under _Resources -> Sources_ Click **Create Discord OAuth Source** +8. Under _Directory -> Federation & Social login_ Click **Create Discord OAuth Source** 9. **Name:** Choose a name (For the example I used Discord) 10. **Slug:** discord (You can choose a different slug, if you do you will need to update the Discord redirect URLand point it to the correct slug.) 11. **Consumer Key:** Client ID from step 4 12. **Consumer Secret:** Client Secret from step 5 -13. **Provider type:** Discord Here is an example of a complete authentik Discord OAuth Source -![Example Screen](discord5.png) +![](discord5.png) Save, and you now have Discord as a source. diff --git a/website/integrations/sources/github/index.md b/website/integrations/sources/github/index.md index e038ea007..a8c797cb3 100644 --- a/website/integrations/sources/github/index.md +++ b/website/integrations/sources/github/index.md @@ -24,24 +24,23 @@ The following placeholders will be used: Example screenshot -![Example Screen](githubdeveloperexample.png) +![](githubdeveloperexample.png) 6. Copy the **Client ID** and _save it for later_ 7. Click **Generate a new client secret** and _save it for later_ You will not be able to see the secret again, so be sure to copy it now. ## authentik -8. Under _Resources -> Sources_ Click **Create Github OAuth Source** +8. Under _Directory -> Federation & Social login_ Click **Create Github OAuth Source** 9. **Name**: Choose a name (For the example I use Github) 10. **Slug**: github (If you choose a different slug the URLs will need to be updated to reflect the change) 11. **Consumer Key:** Client ID from step 6 12. **Consumer Secret:** Client Secret from step 7 -13. **Provider Type:** Github Here is an example of a complete authentik Github OAuth Source -![Example Screen](githubexample2.png) +![](githubexample2.png) Save, and you now have Github as a source. diff --git a/website/integrations/sources/google/index.md b/website/integrations/sources/google/index.md index 73aa18dd5..79286697b 100644 --- a/website/integrations/sources/google/index.md +++ b/website/integrations/sources/google/index.md @@ -17,23 +17,23 @@ You will need to create a new project, and OAuth credentials in the Google Devel 1. Visit https://console.developers.google.com/ to create a new project 2. Create a New project. -![Example Screen](googledeveloper1.png) +![](googledeveloper1.png) 3. **Project Name**: Choose a name 4. **Organization**: Leave as default if unsure 5. **Location**: Leave as default if unsure -![Example Screen](googledeveloper2.png) +![](googledeveloper2.png) 6. Click **Create** 7. Choose your project from the drop down at the top 8. Click the **Credentials** menu item on the left. It looks like a key. -![Example Screen](googledeveloper3.png) +![](googledeveloper3.png) 9. Click on **Configure Consent Screen** -![Example Screen](googledeveloper4.png) +![](googledeveloper4.png) 10. **User Type:** If you do not have a Google Workspace (GSuite) account choose _External_. If you do have a Google Workspace (Gsuite) account and want to limit access to only users inside of your organization choose _Internal_ @@ -50,30 +50,29 @@ _I'm only going to list the mandatory/important fields to complete._ 19. Click **Create Credentials** on the top of the screen 20. Choose **OAuth Client ID** -![Example Screen](googledeveloper5.png) +![](googledeveloper5.png) 21. **Application Type:** Web Application 22. **Name:** Choose a name 23. **Authorized redirect URIs:** `https://authenik.company/source/oauth/callback/google/` -![Example Screen](googledeveloper6.png) +![](googledeveloper6.png) 24. Click **Create** 25. Copy and store _Your Client ID_ and _Your Client Secret_ for later ## authentik -26. Under _Resources -> Sources_ Click **Create Google OAuth Source** +26. Under _Directory -> Federation & Social login_ Click **Create Google OAuth Source** 27. **Name**: Choose a name (For the example I use Google) 28. **Slug**: google (If you choose a different slug the URLs will need to be updated to reflect the change) 29. **Consumer Key:** Your Client ID from step 25 30. **Consumer Secret:** Your Client Secret from step 25 -31. **Provider Type:** Google Here is an example of a complete authentik Google OAuth Source -![Example Screen](authentiksource.png) +![](authentiksource.png) Save, and you now have Google as a source. diff --git a/website/integrations/sources/mailcow/index.md b/website/integrations/sources/mailcow/index.md index 45ca9b8c3..378901127 100644 --- a/website/integrations/sources/mailcow/index.md +++ b/website/integrations/sources/mailcow/index.md @@ -43,7 +43,7 @@ The following placeholders will be used: Here is an example of a complete authentik Mailcow OAuth Source -![Example Screen](mailcow5.png) +![](mailcow5.png) Save, and you now have Mailcow as a source. diff --git a/website/integrations/sources/twitter/index.md b/website/integrations/sources/twitter/index.md new file mode 100644 index 000000000..25aeb7d8e --- /dev/null +++ b/website/integrations/sources/twitter/index.md @@ -0,0 +1,46 @@ +--- +title: Twitter +--- + +Allows users to authenticate using their twitter credentials + +## Preparation + +The following placeholders will be used: + +- `authentik.company` is the FQDN of the authentik install. + +## Twitter + +You will need to create a new project, and OAuth credentials in the Twitter Developer console. + +1. Visit https://developer.twitter.com/ to create a new App +2. Select an environment fitting to your use-case +3. Give the app a name, for example _authentik_ +4. Finish setting up the app by clicking **App settings**. Any of the API keys on this screen are not used by authentik. +5. Click the **Set up** button + +![](./twitter1.png) + +6. Enable **OAuth 2.0** +7. Set **Type of App** to _Web_ +8. Set **Callback URI / Redirect URL** to `https://authenik.company/source/oauth/callback/twitter/` +9. Set **Website URL** to `https://authentik.company` + +![](./twitter2.png) + +10. Confirm with **Save** +11. Copy and store **Client ID** and **Client Secret** for later + +## authentik + +1. Under _Directory -> Federation & Social login_ Click **Create Twitter OAuth Source** + +2. **Name**: Choose a name (For the example I use Google) +3. **Slug**: twitter (If you choose a different slug the URLs will need to be updated to reflect the change) +4. **Consumer Key:** Your Client ID from step 25 +5. **Consumer Secret:** Your Client Secret from step 25 + +:::note +For more details on how-to have the new source display on the Login Page see [here](../). +::: diff --git a/website/integrations/sources/twitter/twitter1.png b/website/integrations/sources/twitter/twitter1.png new file mode 100644 index 0000000000000000000000000000000000000000..ef591dd80fc96ccd507fc66475a37de1181c7920 GIT binary patch literal 37289 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 KpUXO@geCwI6sD#C literal 0 HcmV?d00001 diff --git a/website/integrations/sources/twitter/twitter2.png b/website/integrations/sources/twitter/twitter2.png new file mode 100644 index 0000000000000000000000000000000000000000..665695755fa8181030aae9cbf54a5d7dd897b5a6 GIT binary patch literal 95718 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�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 Bx3T~L literal 0 HcmV?d00001 diff --git a/website/sidebarsIntegrations.js b/website/sidebarsIntegrations.js index 3534a3e7c..889d57d81 100644 --- a/website/sidebarsIntegrations.js +++ b/website/sidebarsIntegrations.js @@ -37,8 +37,8 @@ module.exports = { "services/rocketchat/index", "services/roundcube/index", "services/sentry/index", - "services/sssd/index", "services/sonarr/index", + "services/sssd/index", "services/tautulli/index", "services/ubuntu-landscape/index", "services/uptime-kuma/index", @@ -70,6 +70,7 @@ module.exports = { "sources/oauth/index", "sources/plex/index", "sources/saml/index", + "sources/twitter/index", ], }, ],