Merge branch 'main' into dev
* main: translate: Updates for file locale/en/LC_MESSAGES/django.po in zh_CN (#9194) translate: Updates for file locale/en/LC_MESSAGES/django.po in zh-Hans (#9197) translate: Updates for file web/xliff/en.xlf in zh_CN (#9196) translate: Updates for file web/xliff/en.xlf in zh-Hans (#9198) web: preserve selected list when provider updates (#9200) web: bump API Client version (#9195) sources/oauth: make URLs not required, only check when no OIDC URLs are defined (#9182)
This commit is contained in:
@ -130,7 +130,13 @@ class OAuthSourceSerializer(SourceSerializer):
|
||||
"oidc_jwks_url",
|
||||
"oidc_jwks",
|
||||
]
|
||||
extra_kwargs = {"consumer_secret": {"write_only": True}}
|
||||
extra_kwargs = {
|
||||
"consumer_secret": {"write_only": True},
|
||||
"request_token_url": {"allow_blank": True},
|
||||
"authorization_url": {"allow_blank": True},
|
||||
"access_token_url": {"allow_blank": True},
|
||||
"profile_url": {"allow_blank": True},
|
||||
}
|
||||
|
||||
|
||||
class OAuthSourceFilter(FilterSet):
|
||||
|
@ -4547,7 +4547,6 @@
|
||||
"null"
|
||||
],
|
||||
"maxLength": 255,
|
||||
"minLength": 1,
|
||||
"title": "Request Token URL",
|
||||
"description": "URL used to request the initial token. This URL is only required for OAuth 1."
|
||||
},
|
||||
@ -4557,7 +4556,6 @@
|
||||
"null"
|
||||
],
|
||||
"maxLength": 255,
|
||||
"minLength": 1,
|
||||
"title": "Authorization URL",
|
||||
"description": "URL the user is redirect to to conest the flow."
|
||||
},
|
||||
@ -4567,7 +4565,6 @@
|
||||
"null"
|
||||
],
|
||||
"maxLength": 255,
|
||||
"minLength": 1,
|
||||
"title": "Access Token URL",
|
||||
"description": "URL used by authentik to retrieve tokens."
|
||||
},
|
||||
@ -4577,7 +4574,6 @@
|
||||
"null"
|
||||
],
|
||||
"maxLength": 255,
|
||||
"minLength": 1,
|
||||
"title": "Profile URL",
|
||||
"description": "URL used by authentik to get user information."
|
||||
},
|
||||
@ -5782,7 +5778,8 @@
|
||||
"device_type_restrictions": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "integer"
|
||||
"type": "string",
|
||||
"format": "uuid"
|
||||
},
|
||||
"title": "Device type restrictions"
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-04-01 23:02+0000\n"
|
||||
"POT-Creation-Date: 2024-04-09 00:08+0000\n"
|
||||
"PO-Revision-Date: 2022-09-26 16:47+0000\n"
|
||||
"Last-Translator: deluxghost, 2024\n"
|
||||
"Language-Team: Chinese Simplified (https://app.transifex.com/authentik/teams/119923/zh-Hans/)\n"
|
||||
@ -2287,6 +2287,19 @@ msgstr "WebAuthn 设备"
|
||||
msgid "WebAuthn Devices"
|
||||
msgstr "WebAuthn 设备"
|
||||
|
||||
#: authentik/stages/authenticator_webauthn/models.py
|
||||
msgid "WebAuthn Device type"
|
||||
msgstr "WebAuthn 设备类型"
|
||||
|
||||
#: authentik/stages/authenticator_webauthn/models.py
|
||||
msgid "WebAuthn Device types"
|
||||
msgstr "WebAuthn 设备类型"
|
||||
|
||||
#: authentik/stages/authenticator_webauthn/stage.py
|
||||
#, python-brace-format
|
||||
msgid "Invalid device type. Contact your {brand} administrator for help."
|
||||
msgstr "无效的设备类型。请联系您的 {brand} 管理员获得帮助。"
|
||||
|
||||
#: authentik/stages/captcha/models.py
|
||||
msgid "Public key, acquired your captcha Provider."
|
||||
msgstr "公钥,从您的验证码提供商处取得。"
|
||||
|
@ -14,7 +14,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-04-01 23:02+0000\n"
|
||||
"POT-Creation-Date: 2024-04-09 00:08+0000\n"
|
||||
"PO-Revision-Date: 2022-09-26 16:47+0000\n"
|
||||
"Last-Translator: deluxghost, 2024\n"
|
||||
"Language-Team: Chinese (China) (https://app.transifex.com/authentik/teams/119923/zh_CN/)\n"
|
||||
@ -2287,6 +2287,19 @@ msgstr "WebAuthn 设备"
|
||||
msgid "WebAuthn Devices"
|
||||
msgstr "WebAuthn 设备"
|
||||
|
||||
#: authentik/stages/authenticator_webauthn/models.py
|
||||
msgid "WebAuthn Device type"
|
||||
msgstr "WebAuthn 设备类型"
|
||||
|
||||
#: authentik/stages/authenticator_webauthn/models.py
|
||||
msgid "WebAuthn Device types"
|
||||
msgstr "WebAuthn 设备类型"
|
||||
|
||||
#: authentik/stages/authenticator_webauthn/stage.py
|
||||
#, python-brace-format
|
||||
msgid "Invalid device type. Contact your {brand} administrator for help."
|
||||
msgstr "无效的设备类型。请联系您的 {brand} 管理员获得帮助。"
|
||||
|
||||
#: authentik/stages/captcha/models.py
|
||||
msgid "Public key, acquired your captcha Provider."
|
||||
msgstr "公钥,从您的验证码提供商处取得。"
|
||||
|
@ -35551,26 +35551,22 @@ components:
|
||||
request_token_url:
|
||||
type: string
|
||||
nullable: true
|
||||
minLength: 1
|
||||
description: URL used to request the initial token. This URL is only required
|
||||
for OAuth 1.
|
||||
maxLength: 255
|
||||
authorization_url:
|
||||
type: string
|
||||
nullable: true
|
||||
minLength: 1
|
||||
description: URL the user is redirect to to conest the flow.
|
||||
maxLength: 255
|
||||
access_token_url:
|
||||
type: string
|
||||
nullable: true
|
||||
minLength: 1
|
||||
description: URL used by authentik to retrieve tokens.
|
||||
maxLength: 255
|
||||
profile_url:
|
||||
type: string
|
||||
nullable: true
|
||||
minLength: 1
|
||||
description: URL used by authentik to get user information.
|
||||
maxLength: 255
|
||||
consumer_key:
|
||||
@ -38563,26 +38559,22 @@ components:
|
||||
request_token_url:
|
||||
type: string
|
||||
nullable: true
|
||||
minLength: 1
|
||||
description: URL used to request the initial token. This URL is only required
|
||||
for OAuth 1.
|
||||
maxLength: 255
|
||||
authorization_url:
|
||||
type: string
|
||||
nullable: true
|
||||
minLength: 1
|
||||
description: URL the user is redirect to to conest the flow.
|
||||
maxLength: 255
|
||||
access_token_url:
|
||||
type: string
|
||||
nullable: true
|
||||
minLength: 1
|
||||
description: URL used by authentik to retrieve tokens.
|
||||
maxLength: 255
|
||||
profile_url:
|
||||
type: string
|
||||
nullable: true
|
||||
minLength: 1
|
||||
description: URL used by authentik to get user information.
|
||||
maxLength: 255
|
||||
consumer_key:
|
||||
|
8
web/package-lock.json
generated
8
web/package-lock.json
generated
@ -17,7 +17,7 @@
|
||||
"@codemirror/theme-one-dark": "^6.1.2",
|
||||
"@formatjs/intl-listformat": "^7.5.5",
|
||||
"@fortawesome/fontawesome-free": "^6.5.2",
|
||||
"@goauthentik/api": "^2024.2.2-1712571709",
|
||||
"@goauthentik/api": "^2024.2.2-1712687985",
|
||||
"@lit-labs/task": "^3.1.0",
|
||||
"@lit/context": "^1.1.0",
|
||||
"@lit/localize": "^0.12.1",
|
||||
@ -2840,9 +2840,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@goauthentik/api": {
|
||||
"version": "2024.2.2-1712571709",
|
||||
"resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2024.2.2-1712571709.tgz",
|
||||
"integrity": "sha512-+uS+d13aCDC7W3bZk8j3RnqvDq8iivXnP98GHFEoB9pUuMJ1LK7sgJwr2JHmJe5KiFMl0oxycY8VutsBnYmjog=="
|
||||
"version": "2024.2.2-1712687985",
|
||||
"resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2024.2.2-1712687985.tgz",
|
||||
"integrity": "sha512-mF9yULFs9O8zi32hVNmPH1La7DeRXr24UQu2zpih5kEIHufvvCV8cnnwKJp+PFEU9+Vm5B8sdNtqSfNAOM7GLA=="
|
||||
},
|
||||
"node_modules/@hcaptcha/types": {
|
||||
"version": "1.0.3",
|
||||
|
@ -38,7 +38,7 @@
|
||||
"@codemirror/theme-one-dark": "^6.1.2",
|
||||
"@formatjs/intl-listformat": "^7.5.5",
|
||||
"@fortawesome/fontawesome-free": "^6.5.2",
|
||||
"@goauthentik/api": "^2024.2.2-1712571709",
|
||||
"@goauthentik/api": "^2024.2.2-1712687985",
|
||||
"@lit-labs/task": "^3.1.0",
|
||||
"@lit/context": "^1.1.0",
|
||||
"@lit/localize": "^0.12.1",
|
||||
|
@ -108,7 +108,6 @@ export class OAuthSourceForm extends WithCapabilitiesConfig(BaseSourceForm<OAuth
|
||||
<div slot="body" class="pf-c-form">
|
||||
<ak-form-element-horizontal
|
||||
label=${msg("Authorization URL")}
|
||||
?required=${true}
|
||||
name="authorizationUrl"
|
||||
>
|
||||
<input
|
||||
@ -119,17 +118,12 @@ export class OAuthSourceForm extends WithCapabilitiesConfig(BaseSourceForm<OAuth
|
||||
"",
|
||||
)}"
|
||||
class="pf-c-form-control"
|
||||
required
|
||||
/>
|
||||
<p class="pf-c-form__helper-text">
|
||||
${msg("URL the user is redirect to to consent the authorization.")}
|
||||
</p>
|
||||
</ak-form-element-horizontal>
|
||||
<ak-form-element-horizontal
|
||||
label=${msg("Access token URL")}
|
||||
?required=${true}
|
||||
name="accessTokenUrl"
|
||||
>
|
||||
<ak-form-element-horizontal label=${msg("Access token URL")} name="accessTokenUrl">
|
||||
<input
|
||||
type="text"
|
||||
value="${first(
|
||||
@ -138,17 +132,12 @@ export class OAuthSourceForm extends WithCapabilitiesConfig(BaseSourceForm<OAuth
|
||||
"",
|
||||
)}"
|
||||
class="pf-c-form-control"
|
||||
required
|
||||
/>
|
||||
<p class="pf-c-form__helper-text">
|
||||
${msg("URL used by authentik to retrieve tokens.")}
|
||||
</p>
|
||||
</ak-form-element-horizontal>
|
||||
<ak-form-element-horizontal
|
||||
label=${msg("Profile URL")}
|
||||
?required=${true}
|
||||
name="profileUrl"
|
||||
>
|
||||
<ak-form-element-horizontal label=${msg("Profile URL")} name="profileUrl">
|
||||
<input
|
||||
type="text"
|
||||
value="${first(
|
||||
@ -157,7 +146,6 @@ export class OAuthSourceForm extends WithCapabilitiesConfig(BaseSourceForm<OAuth
|
||||
"",
|
||||
)}"
|
||||
class="pf-c-form-control"
|
||||
required
|
||||
/>
|
||||
<p class="pf-c-form__helper-text">
|
||||
${msg("URL used by authentik to get user information.")}
|
||||
|
@ -55,8 +55,6 @@ export class AkDualSelectProvider extends CustomListenerElement(AKElement) {
|
||||
|
||||
private pagination?: Pagination;
|
||||
|
||||
selectedMap: WeakMap<DataProvider, DualSelectPair[]> = new WeakMap();
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
setTimeout(() => this.fetch(1), 0);
|
||||
@ -72,16 +70,14 @@ export class AkDualSelectProvider extends CustomListenerElement(AKElement) {
|
||||
|
||||
willUpdate(changedProperties: PropertyValues<this>) {
|
||||
if (changedProperties.has("searchDelay")) {
|
||||
this.doSearch = debounce(this.doSearch.bind(this), this.searchDelay);
|
||||
this.doSearch = debounce(
|
||||
AkDualSelectProvider.prototype.doSearch.bind(this),
|
||||
this.searchDelay,
|
||||
);
|
||||
}
|
||||
|
||||
if (changedProperties.has("provider")) {
|
||||
this.pagination = undefined;
|
||||
const previousProvider = changedProperties.get("provider");
|
||||
if (previousProvider) {
|
||||
this.selectedMap.set(previousProvider, this.selected);
|
||||
this.selected = this.selectedMap.get(this.provider) ?? [];
|
||||
}
|
||||
this.fetch();
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0"?><xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<?xml version="1.0" ?><xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file target-language="zh-Hans" source-language="en" original="lit-localize-inputs" datatype="plaintext">
|
||||
<body>
|
||||
<trans-unit id="s4caed5b7a7e5d89b">
|
||||
@ -596,9 +596,9 @@
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="saa0e2675da69651b">
|
||||
<source>The URL "<x id="0" equiv-text="${this.url}"/>" was not found.</source>
|
||||
<target>未找到 URL "
|
||||
<x id="0" equiv-text="${this.url}"/>"。</target>
|
||||
<source>The URL "<x id="0" equiv-text="${this.url}"/>" was not found.</source>
|
||||
<target>未找到 URL "
|
||||
<x id="0" equiv-text="${this.url}"/>"。</target>
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="s58cd9c2fe836d9c6">
|
||||
@ -1040,8 +1040,8 @@
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="sa8384c9c26731f83">
|
||||
<source>To allow any redirect URI, set this value to ".*". Be aware of the possible security implications this can have.</source>
|
||||
<target>要允许任何重定向 URI,请将此值设置为 ".*"。请注意这可能带来的安全影响。</target>
|
||||
<source>To allow any redirect URI, set this value to ".*". Be aware of the possible security implications this can have.</source>
|
||||
<target>要允许任何重定向 URI,请将此值设置为 ".*"。请注意这可能带来的安全影响。</target>
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="s55787f4dfcdce52b">
|
||||
@ -1782,8 +1782,8 @@
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="sa90b7809586c35ce">
|
||||
<source>Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon "fa-test".</source>
|
||||
<target>输入完整 URL、相对路径,或者使用 'fa://fa-test' 来使用 Font Awesome 图标 "fa-test"。</target>
|
||||
<source>Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon "fa-test".</source>
|
||||
<target>输入完整 URL、相对路径,或者使用 'fa://fa-test' 来使用 Font Awesome 图标 "fa-test"。</target>
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="s0410779cb47de312">
|
||||
@ -2961,8 +2961,8 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="s76768bebabb7d543">
|
||||
<source>Field which contains members of a group. Note that if using the "memberUid" field, the value is assumed to contain a relative distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn=some-user,ou=groups,...'</source>
|
||||
<target>包含组成员的字段。请注意,如果使用 "memberUid" 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'</target>
|
||||
<source>Field which contains members of a group. Note that if using the "memberUid" field, the value is assumed to contain a relative distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn=some-user,ou=groups,...'</source>
|
||||
<target>包含组成员的字段。请注意,如果使用 "memberUid" 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'</target>
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="s026555347e589f0e">
|
||||
@ -3739,8 +3739,8 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="s7b1fba26d245cb1c">
|
||||
<source>When using an external logging solution for archiving, this can be set to "minutes=5".</source>
|
||||
<target>使用外部日志记录解决方案进行存档时,可以将其设置为 "minutes=5"。</target>
|
||||
<source>When using an external logging solution for archiving, this can be set to "minutes=5".</source>
|
||||
<target>使用外部日志记录解决方案进行存档时,可以将其设置为 "minutes=5"。</target>
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="s44536d20bb5c8257">
|
||||
@ -3916,10 +3916,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="sa95a538bfbb86111">
|
||||
<source>Are you sure you want to update <x id="0" equiv-text="${this.objectLabel}"/> "<x id="1" equiv-text="${this.obj?.name}"/>"?</source>
|
||||
<source>Are you sure you want to update <x id="0" equiv-text="${this.objectLabel}"/> "<x id="1" equiv-text="${this.obj?.name}"/>"?</source>
|
||||
<target>您确定要更新
|
||||
<x id="0" equiv-text="${this.objectLabel}"/>"
|
||||
<x id="1" equiv-text="${this.obj?.name}"/>" 吗?</target>
|
||||
<x id="0" equiv-text="${this.objectLabel}"/>"
|
||||
<x id="1" equiv-text="${this.obj?.name}"/>" 吗?</target>
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="sc92d7cfb6ee1fec6">
|
||||
@ -5000,7 +5000,7 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="sdf1d8edef27236f0">
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<source>A "roaming" authenticator, like a YubiKey</source>
|
||||
<target>像 YubiKey 这样的“漫游”身份验证器</target>
|
||||
|
||||
</trans-unit>
|
||||
@ -5335,10 +5335,10 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="s2d5f69929bb7221d">
|
||||
<source><x id="0" equiv-text="${prompt.name}"/> ("<x id="1" equiv-text="${prompt.fieldKey}"/>", of type <x id="2" equiv-text="${prompt.type}"/>)</source>
|
||||
<source><x id="0" equiv-text="${prompt.name}"/> ("<x id="1" equiv-text="${prompt.fieldKey}"/>", of type <x id="2" equiv-text="${prompt.type}"/>)</source>
|
||||
<target>
|
||||
<x id="0" equiv-text="${prompt.name}"/>("
|
||||
<x id="1" equiv-text="${prompt.fieldKey}"/>",类型为
|
||||
<x id="0" equiv-text="${prompt.name}"/>("
|
||||
<x id="1" equiv-text="${prompt.fieldKey}"/>",类型为
|
||||
<x id="2" equiv-text="${prompt.type}"/>)</target>
|
||||
|
||||
</trans-unit>
|
||||
@ -5387,7 +5387,7 @@ doesn't pass when either or both of the selected options are equal or above the
|
||||
|
||||
</trans-unit>
|
||||
<trans-unit id="s1608b2f94fa0dbd4">
|
||||
<source>If set to a duration above 0, the user will have the option to choose to "stay signed in", which will extend their session by the time specified here.</source>
|
||||
<source>If set to a duration above 0, the user will have the option to choose to "stay signed in", which will extend their session by the time specified here.</source>
|
||||
<target>如果设置时长大于 0,用户可以选择“保持登录”选项,这将使用户的会话延长此处设置的时间。</target>
|
||||
|
||||
</trans-unit>
|
||||
@ -7839,7 +7839,7 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<target>成功创建用户并添加到组 <x id="0" equiv-text="${this.group.name}"/></target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s824e0943a7104668">
|
||||
<source>This user will be added to the group "<x id="0" equiv-text="${this.targetGroup.name}"/>".</source>
|
||||
<source>This user will be added to the group "<x id="0" equiv-text="${this.targetGroup.name}"/>".</source>
|
||||
<target>此用户将会被添加到组 &quot;<x id="0" equiv-text="${this.targetGroup.name}"/>&quot;。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s62e7f6ed7d9cb3ca">
|
||||
@ -8526,16 +8526,20 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa64fb483becc9c2c">
|
||||
<source>Device type restrictions</source>
|
||||
<target>设备类型限制</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbb928551c84cd63f">
|
||||
<source>Available Device types</source>
|
||||
<target>可用设备类型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s6446c35d6b411e53">
|
||||
<source>Selected Device types</source>
|
||||
<target>已选设备类型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1f4df216b56de4ac">
|
||||
<source>Optionally restrict which WebAuthn device types may be used. When no device types are selected, all devices are allowed.</source>
|
||||
<target>可选的 WebAuthn 可用设备类型限制。如果未选择设备类型,则允许所有设备。</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
</xliff>
|
@ -8523,6 +8523,22 @@ Bindings to groups/users are checked against the user of the event.</source>
|
||||
<trans-unit id="sc7d071fb5cc1f6bf">
|
||||
<source>A selection is required</source>
|
||||
<target>需要进行选择</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sa64fb483becc9c2c">
|
||||
<source>Device type restrictions</source>
|
||||
<target>设备类型限制</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sbb928551c84cd63f">
|
||||
<source>Available Device types</source>
|
||||
<target>可用设备类型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s6446c35d6b411e53">
|
||||
<source>Selected Device types</source>
|
||||
<target>已选设备类型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="s1f4df216b56de4ac">
|
||||
<source>Optionally restrict which WebAuthn device types may be used. When no device types are selected, all devices are allowed.</source>
|
||||
<target>可选的 WebAuthn 可用设备类型限制。如果未选择设备类型,则允许所有设备。</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
|
Reference in New Issue
Block a user