enterprise: cleanup v2 (#6330)

* cleanup minor stuff

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

* change default user type to internal to be more consistent

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

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
Jens L 2023-07-21 18:23:51 +02:00 committed by GitHub
parent 03f3ad89df
commit d50f92d8b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 421 additions and 337 deletions

View File

@ -12,7 +12,7 @@ def migrate_user_type(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
from authentik.core.models import UserTypes from authentik.core.models import UserTypes
for user in User.objects.using(db_alias).all(): for user in User.objects.using(db_alias).all():
user.type = UserTypes.DEFAULT user.type = UserTypes.INTERNAL
if "goauthentik.io/user/service-account" in user.attributes: if "goauthentik.io/user/service-account" in user.attributes:
user.type = UserTypes.SERVICE_ACCOUNT user.type = UserTypes.SERVICE_ACCOUNT
if "goauthentik.io/user/override-ips" in user.attributes: if "goauthentik.io/user/override-ips" in user.attributes:

View File

@ -0,0 +1,40 @@
# Generated by Django 4.1.10 on 2023-07-21 12:54
from django.apps.registry import Apps
from django.db import migrations, models
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
def migrate_user_type_v2(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
db_alias = schema_editor.connection.alias
User = apps.get_model("authentik_core", "User")
from authentik.core.models import UserTypes
for user in User.objects.using(db_alias).all():
if user.type != "default":
continue
user.type = UserTypes.INTERNAL
user.save()
class Migration(migrations.Migration):
dependencies = [
("authentik_core", "0030_user_type"),
]
operations = [
migrations.AlterField(
model_name="user",
name="type",
field=models.TextField(
choices=[
("internal", "Internal"),
("external", "External"),
("service_account", "Service Account"),
("internal_service_account", "Internal Service Account"),
],
default="internal",
),
),
migrations.RunPython(migrate_user_type_v2),
]

View File

@ -67,7 +67,7 @@ class UserTypes(models.TextChoices):
"""User types, both for grouping, licensing and permissions in the case """User types, both for grouping, licensing and permissions in the case
of the internal_service_account""" of the internal_service_account"""
DEFAULT = "default" INTERNAL = "internal"
EXTERNAL = "external" EXTERNAL = "external"
# User-created service accounts # User-created service accounts
@ -161,7 +161,7 @@ class User(SerializerModel, GuardianUserMixin, AbstractUser):
uuid = models.UUIDField(default=uuid4, editable=False, unique=True) uuid = models.UUIDField(default=uuid4, editable=False, unique=True)
name = models.TextField(help_text=_("User's display name.")) name = models.TextField(help_text=_("User's display name."))
path = models.TextField(default="users") path = models.TextField(default="users")
type = models.TextField(choices=UserTypes.choices, default=UserTypes.DEFAULT) type = models.TextField(choices=UserTypes.choices, default=UserTypes.INTERNAL)
sources = models.ManyToManyField("Source", through="UserSourceConnection") sources = models.ManyToManyField("Source", through="UserSourceConnection")
ak_groups = models.ManyToManyField("Group", related_name="users") ak_groups = models.ManyToManyField("Group", related_name="users")

View File

@ -137,7 +137,7 @@ class LicenseViewSet(UsedByMixin, ModelViewSet):
last_month = now() - timedelta(days=30) last_month = now() - timedelta(days=30)
# Forecast for default users # Forecast for default users
users_in_last_month = User.objects.filter( users_in_last_month = User.objects.filter(
type=UserTypes.DEFAULT, date_joined__gte=last_month type=UserTypes.INTERNAL, date_joined__gte=last_month
).count() ).count()
# Forecast for external users # Forecast for external users
external_in_last_month = LicenseKey.get_external_user_count() external_in_last_month = LicenseKey.get_external_user_count()

View File

@ -105,7 +105,7 @@ class LicenseKey:
@staticmethod @staticmethod
def get_default_user_count(): def get_default_user_count():
"""Get current default user count""" """Get current default user count"""
return LicenseKey.base_user_qs().filter(type=UserTypes.DEFAULT).count() return LicenseKey.base_user_qs().filter(type=UserTypes.INTERNAL).count()
@staticmethod @staticmethod
def get_external_user_count(): def get_external_user_count():

View File

@ -24,7 +24,7 @@ class EnterprisePolicy(Policy):
def passes(self, request: PolicyRequest) -> PolicyResult: def passes(self, request: PolicyRequest) -> PolicyResult:
if not LicenseKey.get_total().is_valid(): if not LicenseKey.get_total().is_valid():
return PolicyResult(False) return PolicyResult(False)
if request.user.type != UserTypes.DEFAULT: if request.user.type != UserTypes.INTERNAL:
return PolicyResult(False) return PolicyResult(False)
return PolicyResult(True) return PolicyResult(True)

View File

@ -3984,7 +3984,7 @@
"type": { "type": {
"type": "string", "type": "string",
"enum": [ "enum": [
"default", "internal",
"external", "external",
"service_account", "service_account",
"internal_service_account" "internal_service_account"
@ -4185,7 +4185,7 @@
"type": { "type": {
"type": "string", "type": "string",
"enum": [ "enum": [
"default", "internal",
"external", "external",
"service_account", "service_account",
"internal_service_account" "internal_service_account"
@ -4390,7 +4390,7 @@
"type": { "type": {
"type": "string", "type": "string",
"enum": [ "enum": [
"default", "internal",
"external", "external",
"service_account", "service_account",
"internal_service_account" "internal_service_account"
@ -6556,7 +6556,7 @@
"type": { "type": {
"type": "string", "type": "string",
"enum": [ "enum": [
"default", "internal",
"external", "external",
"service_account", "service_account",
"internal_service_account" "internal_service_account"
@ -7301,7 +7301,7 @@
"type": { "type": {
"type": "string", "type": "string",
"enum": [ "enum": [
"default", "internal",
"external", "external",
"service_account", "service_account",
"internal_service_account" "internal_service_account"
@ -8387,7 +8387,7 @@
"type": { "type": {
"type": "string", "type": "string",
"enum": [ "enum": [
"default", "internal",
"external", "external",
"service_account", "service_account",
"internal_service_account" "internal_service_account"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-16 13:59+0000\n" "POT-Creation-Date: 2023-07-21 13:04+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -2017,33 +2017,33 @@ msgstr ""
msgid "Dummy Stages" msgid "Dummy Stages"
msgstr "" msgstr ""
#: authentik/stages/email/models.py:25 #: authentik/stages/email/models.py:26
msgid "Password Reset" msgid "Password Reset"
msgstr "" msgstr ""
#: authentik/stages/email/models.py:29 #: authentik/stages/email/models.py:30
msgid "Account Confirmation" msgid "Account Confirmation"
msgstr "" msgstr ""
#: authentik/stages/email/models.py:58 #: authentik/stages/email/models.py:59
msgid "" msgid ""
"When enabled, global Email connection settings will be used and connection " "When enabled, global Email connection settings will be used and connection "
"settings below will be ignored." "settings below will be ignored."
msgstr "" msgstr ""
#: authentik/stages/email/models.py:73 #: authentik/stages/email/models.py:74
msgid "Activate users upon completion of stage." msgid "Activate users upon completion of stage."
msgstr "" msgstr ""
#: authentik/stages/email/models.py:77 #: authentik/stages/email/models.py:78
msgid "Time in minutes the token sent is valid." msgid "Time in minutes the token sent is valid."
msgstr "" msgstr ""
#: authentik/stages/email/models.py:122 #: authentik/stages/email/models.py:132
msgid "Email Stage" msgid "Email Stage"
msgstr "" msgstr ""
#: authentik/stages/email/models.py:123 #: authentik/stages/email/models.py:133
msgid "Email Stages" msgid "Email Stages"
msgstr "" msgstr ""

View File

@ -4609,12 +4609,12 @@ paths:
schema: schema:
type: string type: string
enum: enum:
- default
- external - external
- internal
- internal_service_account - internal_service_account
- service_account - service_account
description: |- description: |-
* `default` - Default * `internal` - Internal
* `external` - External * `external` - External
* `service_account` - Service Account * `service_account` - Service Account
* `internal_service_account` - Internal Service Account * `internal_service_account` - Internal Service Account
@ -42581,13 +42581,13 @@ components:
- user - user
UserTypeEnum: UserTypeEnum:
enum: enum:
- default - internal
- external - external
- service_account - service_account
- internal_service_account - internal_service_account
type: string type: string
description: |- description: |-
* `default` - Default * `internal` - Internal
* `external` - External * `external` - External
* `service_account` - Service Account * `service_account` - Service Account
* `internal_service_account` - Internal Service Account * `internal_service_account` - Internal Service Account

View File

@ -92,6 +92,24 @@ export class EnterpriseLicenseListPage extends TablePage<License> {
]; ];
} }
// TODO: Make this more generic, maybe automatically get the plural name
// of the object to use in the renderEmpty
renderEmpty(inner?: TemplateResult): TemplateResult {
return super.renderEmpty(html`
${inner
? inner
: html`<ak-empty-state
icon=${this.pageIcon()}
header="${msg("No licenses found.")}"
>
<div slot="body">
${this.searchEnabled() ? this.renderEmptyClearSearch() : html``}
</div>
<div slot="primary">${this.renderObjectCreate()}</div>
</ak-empty-state>`}
`);
}
renderToolbarSelected(): TemplateResult { renderToolbarSelected(): TemplateResult {
const disabled = this.selectedElements.length < 1; const disabled = this.selectedElements.length < 1;
return html`<ak-forms-delete-bulk return html`<ak-forms-delete-bulk
@ -149,9 +167,9 @@ export class EnterpriseLicenseListPage extends TablePage<License> {
<ak-aggregate-card <ak-aggregate-card
class="pf-l-grid__item" class="pf-l-grid__item"
icon="pf-icon pf-icon-user" icon="pf-icon pf-icon-user"
header=${msg("Forecast default users")} header=${msg("Forecast internal users")}
subtext=${msg( subtext=${msg(
str`Estimated user count one year from now based on ${this.forecast?.users} current users and ${this.forecast?.forecastedUsers} forecasted users.`, str`Estimated user count one year from now based on ${this.forecast?.users} current internal users and ${this.forecast?.forecastedUsers} forecasted internal users.`,
)} )}
> >
~&nbsp;${(this.forecast?.users || 0) + ~&nbsp;${(this.forecast?.users || 0) +

View File

@ -80,22 +80,27 @@ export class UserForm extends ModelForm<User, number> {
<ak-form-element-horizontal label=${msg("User type")} ?required=${true} name="type"> <ak-form-element-horizontal label=${msg("User type")} ?required=${true} name="type">
<ak-radio <ak-radio
.options=${[ .options=${[
// TODO: Add better copy
{ {
label: "Default", label: "Internal",
value: UserTypeEnum.Default, value: UserTypeEnum.Internal,
default: true, default: true,
description: html`${msg("Default user")}`, description: html`${msg(
"Internal users might be users such as company employees, which will get access to the full Enterprise feature set.",
)}`,
}, },
{ {
label: "External", label: "External",
value: UserTypeEnum.External, value: UserTypeEnum.External,
description: html`${msg("External user")}`, description: html`${msg(
"External users might be external consultants or B2C customers. These users don't get access to enterprise features.",
)}`,
}, },
{ {
label: "Service account", label: "Service account",
value: UserTypeEnum.ServiceAccount, value: UserTypeEnum.ServiceAccount,
description: html`${msg("Service account")}`, description: html`${msg(
"Service accounts should be used for machine-to-machine authentication or other automations.",
)}`,
}, },
]} ]}
.value=${this.instance?.type} .value=${this.instance?.type}

View File

@ -5775,45 +5775,18 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="s2e109263b73c12d5"> <trans-unit id="s2e109263b73c12d5">
<source>Licenses</source> <source>Licenses</source>
</trans-unit> </trans-unit>
<trans-unit id="sf8f9f3032e891e16">
<source>TODO Copy</source>
</trans-unit>
<trans-unit id="sd49099e9522635f4"> <trans-unit id="sd49099e9522635f4">
<source>License(s)</source> <source>License(s)</source>
</trans-unit> </trans-unit>
<trans-unit id="s3be1d90ffa46b7f1"> <trans-unit id="s3be1d90ffa46b7f1">
<source>Enterprise is in preview.</source> <source>Enterprise is in preview.</source>
</trans-unit> </trans-unit>
<trans-unit id="s34dca481f039c226">
<source>How to get a license</source>
</trans-unit>
<trans-unit id="s948364901c166232">
<source>Copy the installation ID</source>
</trans-unit>
<trans-unit id="s75c167446b237e0f">
<source>Then open the customer portal</source>
</trans-unit>
<trans-unit id="s9748dd3bd53d27a4">
<source>Forecasted default users</source>
</trans-unit>
<trans-unit id="s6b18f594d94c2374">
<source>Estimated user count one year from now</source>
</trans-unit>
<trans-unit id="s69f246d164be88d0">
<source>Forecasted external users</source>
</trans-unit>
<trans-unit id="s878fc2eaf94642db">
<source>Estimated external user count one year from now</source>
</trans-unit>
<trans-unit id="sd22bd01bdf28c548"> <trans-unit id="sd22bd01bdf28c548">
<source>Cumulative license expiry</source> <source>Cumulative license expiry</source>
</trans-unit> </trans-unit>
<trans-unit id="sdeb6cee42435dd07"> <trans-unit id="sdeb6cee42435dd07">
<source>Update License</source> <source>Update License</source>
</trans-unit> </trans-unit>
<trans-unit id="s99afa741c259d70e">
<source>Create License</source>
</trans-unit>
<trans-unit id="s7df5b92a3f93544f"> <trans-unit id="s7df5b92a3f93544f">
<source>Warning: The current user count has exceeded the configured licenses.</source> <source>Warning: The current user count has exceeded the configured licenses.</source>
</trans-unit> </trans-unit>
@ -5825,6 +5798,36 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s9ce7cc01fb9b5b53"> <trans-unit id="s9ce7cc01fb9b5b53">
<source>Manage enterprise licenses</source> <source>Manage enterprise licenses</source>
</trans-unit>
<trans-unit id="sf9ebf11ac2645820">
<source>No licenses found.</source>
</trans-unit>
<trans-unit id="sa1db89262360550b">
<source>Send us feedback!</source>
</trans-unit>
<trans-unit id="s4015746f55a8d89f">
<source>Get a license</source>
</trans-unit>
<trans-unit id="sb2cbd06f8e25b47e">
<source>Go to Customer Portal</source>
</trans-unit>
<trans-unit id="sf58825457d61c429">
<source>Forecast internal users</source>
</trans-unit>
<trans-unit id="sde9a3f41977ec1f8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.users}"/> current internal users and <x id="1" equiv-text="${this.forecast?.forecastedUsers}"/> forecasted internal users.</source>
</trans-unit>
<trans-unit id="s4557b6b9da258643">
<source>Forecast external users</source>
</trans-unit>
<trans-unit id="sf52479d6daa0a4a8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.externalUsers}"/> current external users and <x id="1" equiv-text="${this.forecast?.forecastedExternalUsers}"/> forecasted external users.</source>
</trans-unit>
<trans-unit id="s6196153c4b0c1ea0">
<source>Install</source>
</trans-unit>
<trans-unit id="s0285b4bd69130fa3">
<source>Install License</source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -6091,45 +6091,18 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="s2e109263b73c12d5"> <trans-unit id="s2e109263b73c12d5">
<source>Licenses</source> <source>Licenses</source>
</trans-unit> </trans-unit>
<trans-unit id="sf8f9f3032e891e16">
<source>TODO Copy</source>
</trans-unit>
<trans-unit id="sd49099e9522635f4"> <trans-unit id="sd49099e9522635f4">
<source>License(s)</source> <source>License(s)</source>
</trans-unit> </trans-unit>
<trans-unit id="s3be1d90ffa46b7f1"> <trans-unit id="s3be1d90ffa46b7f1">
<source>Enterprise is in preview.</source> <source>Enterprise is in preview.</source>
</trans-unit> </trans-unit>
<trans-unit id="s34dca481f039c226">
<source>How to get a license</source>
</trans-unit>
<trans-unit id="s948364901c166232">
<source>Copy the installation ID</source>
</trans-unit>
<trans-unit id="s75c167446b237e0f">
<source>Then open the customer portal</source>
</trans-unit>
<trans-unit id="s9748dd3bd53d27a4">
<source>Forecasted default users</source>
</trans-unit>
<trans-unit id="s6b18f594d94c2374">
<source>Estimated user count one year from now</source>
</trans-unit>
<trans-unit id="s69f246d164be88d0">
<source>Forecasted external users</source>
</trans-unit>
<trans-unit id="s878fc2eaf94642db">
<source>Estimated external user count one year from now</source>
</trans-unit>
<trans-unit id="sd22bd01bdf28c548"> <trans-unit id="sd22bd01bdf28c548">
<source>Cumulative license expiry</source> <source>Cumulative license expiry</source>
</trans-unit> </trans-unit>
<trans-unit id="sdeb6cee42435dd07"> <trans-unit id="sdeb6cee42435dd07">
<source>Update License</source> <source>Update License</source>
</trans-unit> </trans-unit>
<trans-unit id="s99afa741c259d70e">
<source>Create License</source>
</trans-unit>
<trans-unit id="s7df5b92a3f93544f"> <trans-unit id="s7df5b92a3f93544f">
<source>Warning: The current user count has exceeded the configured licenses.</source> <source>Warning: The current user count has exceeded the configured licenses.</source>
</trans-unit> </trans-unit>
@ -6141,6 +6114,36 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s9ce7cc01fb9b5b53"> <trans-unit id="s9ce7cc01fb9b5b53">
<source>Manage enterprise licenses</source> <source>Manage enterprise licenses</source>
</trans-unit>
<trans-unit id="sf9ebf11ac2645820">
<source>No licenses found.</source>
</trans-unit>
<trans-unit id="sa1db89262360550b">
<source>Send us feedback!</source>
</trans-unit>
<trans-unit id="s4015746f55a8d89f">
<source>Get a license</source>
</trans-unit>
<trans-unit id="sb2cbd06f8e25b47e">
<source>Go to Customer Portal</source>
</trans-unit>
<trans-unit id="sf58825457d61c429">
<source>Forecast internal users</source>
</trans-unit>
<trans-unit id="sde9a3f41977ec1f8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.users}"/> current internal users and <x id="1" equiv-text="${this.forecast?.forecastedUsers}"/> forecasted internal users.</source>
</trans-unit>
<trans-unit id="s4557b6b9da258643">
<source>Forecast external users</source>
</trans-unit>
<trans-unit id="sf52479d6daa0a4a8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.externalUsers}"/> current external users and <x id="1" equiv-text="${this.forecast?.forecastedExternalUsers}"/> forecasted external users.</source>
</trans-unit>
<trans-unit id="s6196153c4b0c1ea0">
<source>Install</source>
</trans-unit>
<trans-unit id="s0285b4bd69130fa3">
<source>Install License</source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -5683,45 +5683,18 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="s2e109263b73c12d5"> <trans-unit id="s2e109263b73c12d5">
<source>Licenses</source> <source>Licenses</source>
</trans-unit> </trans-unit>
<trans-unit id="sf8f9f3032e891e16">
<source>TODO Copy</source>
</trans-unit>
<trans-unit id="sd49099e9522635f4"> <trans-unit id="sd49099e9522635f4">
<source>License(s)</source> <source>License(s)</source>
</trans-unit> </trans-unit>
<trans-unit id="s3be1d90ffa46b7f1"> <trans-unit id="s3be1d90ffa46b7f1">
<source>Enterprise is in preview.</source> <source>Enterprise is in preview.</source>
</trans-unit> </trans-unit>
<trans-unit id="s34dca481f039c226">
<source>How to get a license</source>
</trans-unit>
<trans-unit id="s948364901c166232">
<source>Copy the installation ID</source>
</trans-unit>
<trans-unit id="s75c167446b237e0f">
<source>Then open the customer portal</source>
</trans-unit>
<trans-unit id="s9748dd3bd53d27a4">
<source>Forecasted default users</source>
</trans-unit>
<trans-unit id="s6b18f594d94c2374">
<source>Estimated user count one year from now</source>
</trans-unit>
<trans-unit id="s69f246d164be88d0">
<source>Forecasted external users</source>
</trans-unit>
<trans-unit id="s878fc2eaf94642db">
<source>Estimated external user count one year from now</source>
</trans-unit>
<trans-unit id="sd22bd01bdf28c548"> <trans-unit id="sd22bd01bdf28c548">
<source>Cumulative license expiry</source> <source>Cumulative license expiry</source>
</trans-unit> </trans-unit>
<trans-unit id="sdeb6cee42435dd07"> <trans-unit id="sdeb6cee42435dd07">
<source>Update License</source> <source>Update License</source>
</trans-unit> </trans-unit>
<trans-unit id="s99afa741c259d70e">
<source>Create License</source>
</trans-unit>
<trans-unit id="s7df5b92a3f93544f"> <trans-unit id="s7df5b92a3f93544f">
<source>Warning: The current user count has exceeded the configured licenses.</source> <source>Warning: The current user count has exceeded the configured licenses.</source>
</trans-unit> </trans-unit>
@ -5733,6 +5706,36 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s9ce7cc01fb9b5b53"> <trans-unit id="s9ce7cc01fb9b5b53">
<source>Manage enterprise licenses</source> <source>Manage enterprise licenses</source>
</trans-unit>
<trans-unit id="sf9ebf11ac2645820">
<source>No licenses found.</source>
</trans-unit>
<trans-unit id="sa1db89262360550b">
<source>Send us feedback!</source>
</trans-unit>
<trans-unit id="s4015746f55a8d89f">
<source>Get a license</source>
</trans-unit>
<trans-unit id="sb2cbd06f8e25b47e">
<source>Go to Customer Portal</source>
</trans-unit>
<trans-unit id="sf58825457d61c429">
<source>Forecast internal users</source>
</trans-unit>
<trans-unit id="sde9a3f41977ec1f8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.users}"/> current internal users and <x id="1" equiv-text="${this.forecast?.forecastedUsers}"/> forecasted internal users.</source>
</trans-unit>
<trans-unit id="s4557b6b9da258643">
<source>Forecast external users</source>
</trans-unit>
<trans-unit id="sf52479d6daa0a4a8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.externalUsers}"/> current external users and <x id="1" equiv-text="${this.forecast?.forecastedExternalUsers}"/> forecasted external users.</source>
</trans-unit>
<trans-unit id="s6196153c4b0c1ea0">
<source>Install</source>
</trans-unit>
<trans-unit id="s0285b4bd69130fa3">
<source>Install License</source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -5790,45 +5790,18 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="s2e109263b73c12d5"> <trans-unit id="s2e109263b73c12d5">
<source>Licenses</source> <source>Licenses</source>
</trans-unit> </trans-unit>
<trans-unit id="sf8f9f3032e891e16">
<source>TODO Copy</source>
</trans-unit>
<trans-unit id="sd49099e9522635f4"> <trans-unit id="sd49099e9522635f4">
<source>License(s)</source> <source>License(s)</source>
</trans-unit> </trans-unit>
<trans-unit id="s3be1d90ffa46b7f1"> <trans-unit id="s3be1d90ffa46b7f1">
<source>Enterprise is in preview.</source> <source>Enterprise is in preview.</source>
</trans-unit> </trans-unit>
<trans-unit id="s34dca481f039c226">
<source>How to get a license</source>
</trans-unit>
<trans-unit id="s948364901c166232">
<source>Copy the installation ID</source>
</trans-unit>
<trans-unit id="s75c167446b237e0f">
<source>Then open the customer portal</source>
</trans-unit>
<trans-unit id="s9748dd3bd53d27a4">
<source>Forecasted default users</source>
</trans-unit>
<trans-unit id="s6b18f594d94c2374">
<source>Estimated user count one year from now</source>
</trans-unit>
<trans-unit id="s69f246d164be88d0">
<source>Forecasted external users</source>
</trans-unit>
<trans-unit id="s878fc2eaf94642db">
<source>Estimated external user count one year from now</source>
</trans-unit>
<trans-unit id="sd22bd01bdf28c548"> <trans-unit id="sd22bd01bdf28c548">
<source>Cumulative license expiry</source> <source>Cumulative license expiry</source>
</trans-unit> </trans-unit>
<trans-unit id="sdeb6cee42435dd07"> <trans-unit id="sdeb6cee42435dd07">
<source>Update License</source> <source>Update License</source>
</trans-unit> </trans-unit>
<trans-unit id="s99afa741c259d70e">
<source>Create License</source>
</trans-unit>
<trans-unit id="s7df5b92a3f93544f"> <trans-unit id="s7df5b92a3f93544f">
<source>Warning: The current user count has exceeded the configured licenses.</source> <source>Warning: The current user count has exceeded the configured licenses.</source>
</trans-unit> </trans-unit>
@ -5840,6 +5813,36 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s9ce7cc01fb9b5b53"> <trans-unit id="s9ce7cc01fb9b5b53">
<source>Manage enterprise licenses</source> <source>Manage enterprise licenses</source>
</trans-unit>
<trans-unit id="sf9ebf11ac2645820">
<source>No licenses found.</source>
</trans-unit>
<trans-unit id="sa1db89262360550b">
<source>Send us feedback!</source>
</trans-unit>
<trans-unit id="s4015746f55a8d89f">
<source>Get a license</source>
</trans-unit>
<trans-unit id="sb2cbd06f8e25b47e">
<source>Go to Customer Portal</source>
</trans-unit>
<trans-unit id="sf58825457d61c429">
<source>Forecast internal users</source>
</trans-unit>
<trans-unit id="sde9a3f41977ec1f8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.users}"/> current internal users and <x id="1" equiv-text="${this.forecast?.forecastedUsers}"/> forecasted internal users.</source>
</trans-unit>
<trans-unit id="s4557b6b9da258643">
<source>Forecast external users</source>
</trans-unit>
<trans-unit id="sf52479d6daa0a4a8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.externalUsers}"/> current external users and <x id="1" equiv-text="${this.forecast?.forecastedExternalUsers}"/> forecasted external users.</source>
</trans-unit>
<trans-unit id="s6196153c4b0c1ea0">
<source>Install</source>
</trans-unit>
<trans-unit id="s0285b4bd69130fa3">
<source>Install License</source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -5922,45 +5922,18 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="s2e109263b73c12d5"> <trans-unit id="s2e109263b73c12d5">
<source>Licenses</source> <source>Licenses</source>
</trans-unit> </trans-unit>
<trans-unit id="sf8f9f3032e891e16">
<source>TODO Copy</source>
</trans-unit>
<trans-unit id="sd49099e9522635f4"> <trans-unit id="sd49099e9522635f4">
<source>License(s)</source> <source>License(s)</source>
</trans-unit> </trans-unit>
<trans-unit id="s3be1d90ffa46b7f1"> <trans-unit id="s3be1d90ffa46b7f1">
<source>Enterprise is in preview.</source> <source>Enterprise is in preview.</source>
</trans-unit> </trans-unit>
<trans-unit id="s34dca481f039c226">
<source>How to get a license</source>
</trans-unit>
<trans-unit id="s948364901c166232">
<source>Copy the installation ID</source>
</trans-unit>
<trans-unit id="s75c167446b237e0f">
<source>Then open the customer portal</source>
</trans-unit>
<trans-unit id="s9748dd3bd53d27a4">
<source>Forecasted default users</source>
</trans-unit>
<trans-unit id="s6b18f594d94c2374">
<source>Estimated user count one year from now</source>
</trans-unit>
<trans-unit id="s69f246d164be88d0">
<source>Forecasted external users</source>
</trans-unit>
<trans-unit id="s878fc2eaf94642db">
<source>Estimated external user count one year from now</source>
</trans-unit>
<trans-unit id="sd22bd01bdf28c548"> <trans-unit id="sd22bd01bdf28c548">
<source>Cumulative license expiry</source> <source>Cumulative license expiry</source>
</trans-unit> </trans-unit>
<trans-unit id="sdeb6cee42435dd07"> <trans-unit id="sdeb6cee42435dd07">
<source>Update License</source> <source>Update License</source>
</trans-unit> </trans-unit>
<trans-unit id="s99afa741c259d70e">
<source>Create License</source>
</trans-unit>
<trans-unit id="s7df5b92a3f93544f"> <trans-unit id="s7df5b92a3f93544f">
<source>Warning: The current user count has exceeded the configured licenses.</source> <source>Warning: The current user count has exceeded the configured licenses.</source>
</trans-unit> </trans-unit>
@ -5972,6 +5945,36 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s9ce7cc01fb9b5b53"> <trans-unit id="s9ce7cc01fb9b5b53">
<source>Manage enterprise licenses</source> <source>Manage enterprise licenses</source>
</trans-unit>
<trans-unit id="sf9ebf11ac2645820">
<source>No licenses found.</source>
</trans-unit>
<trans-unit id="sa1db89262360550b">
<source>Send us feedback!</source>
</trans-unit>
<trans-unit id="s4015746f55a8d89f">
<source>Get a license</source>
</trans-unit>
<trans-unit id="sb2cbd06f8e25b47e">
<source>Go to Customer Portal</source>
</trans-unit>
<trans-unit id="sf58825457d61c429">
<source>Forecast internal users</source>
</trans-unit>
<trans-unit id="sde9a3f41977ec1f8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.users}"/> current internal users and <x id="1" equiv-text="${this.forecast?.forecastedUsers}"/> forecasted internal users.</source>
</trans-unit>
<trans-unit id="s4557b6b9da258643">
<source>Forecast external users</source>
</trans-unit>
<trans-unit id="sf52479d6daa0a4a8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.externalUsers}"/> current external users and <x id="1" equiv-text="${this.forecast?.forecastedExternalUsers}"/> forecasted external users.</source>
</trans-unit>
<trans-unit id="s6196153c4b0c1ea0">
<source>Install</source>
</trans-unit>
<trans-unit id="s0285b4bd69130fa3">
<source>Install License</source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -6026,45 +6026,18 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="s2e109263b73c12d5"> <trans-unit id="s2e109263b73c12d5">
<source>Licenses</source> <source>Licenses</source>
</trans-unit> </trans-unit>
<trans-unit id="sf8f9f3032e891e16">
<source>TODO Copy</source>
</trans-unit>
<trans-unit id="sd49099e9522635f4"> <trans-unit id="sd49099e9522635f4">
<source>License(s)</source> <source>License(s)</source>
</trans-unit> </trans-unit>
<trans-unit id="s3be1d90ffa46b7f1"> <trans-unit id="s3be1d90ffa46b7f1">
<source>Enterprise is in preview.</source> <source>Enterprise is in preview.</source>
</trans-unit> </trans-unit>
<trans-unit id="s34dca481f039c226">
<source>How to get a license</source>
</trans-unit>
<trans-unit id="s948364901c166232">
<source>Copy the installation ID</source>
</trans-unit>
<trans-unit id="s75c167446b237e0f">
<source>Then open the customer portal</source>
</trans-unit>
<trans-unit id="s9748dd3bd53d27a4">
<source>Forecasted default users</source>
</trans-unit>
<trans-unit id="s6b18f594d94c2374">
<source>Estimated user count one year from now</source>
</trans-unit>
<trans-unit id="s69f246d164be88d0">
<source>Forecasted external users</source>
</trans-unit>
<trans-unit id="s878fc2eaf94642db">
<source>Estimated external user count one year from now</source>
</trans-unit>
<trans-unit id="sd22bd01bdf28c548"> <trans-unit id="sd22bd01bdf28c548">
<source>Cumulative license expiry</source> <source>Cumulative license expiry</source>
</trans-unit> </trans-unit>
<trans-unit id="sdeb6cee42435dd07"> <trans-unit id="sdeb6cee42435dd07">
<source>Update License</source> <source>Update License</source>
</trans-unit> </trans-unit>
<trans-unit id="s99afa741c259d70e">
<source>Create License</source>
</trans-unit>
<trans-unit id="s7df5b92a3f93544f"> <trans-unit id="s7df5b92a3f93544f">
<source>Warning: The current user count has exceeded the configured licenses.</source> <source>Warning: The current user count has exceeded the configured licenses.</source>
</trans-unit> </trans-unit>
@ -6076,6 +6049,36 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s9ce7cc01fb9b5b53"> <trans-unit id="s9ce7cc01fb9b5b53">
<source>Manage enterprise licenses</source> <source>Manage enterprise licenses</source>
</trans-unit>
<trans-unit id="sf9ebf11ac2645820">
<source>No licenses found.</source>
</trans-unit>
<trans-unit id="sa1db89262360550b">
<source>Send us feedback!</source>
</trans-unit>
<trans-unit id="s4015746f55a8d89f">
<source>Get a license</source>
</trans-unit>
<trans-unit id="sb2cbd06f8e25b47e">
<source>Go to Customer Portal</source>
</trans-unit>
<trans-unit id="sf58825457d61c429">
<source>Forecast internal users</source>
</trans-unit>
<trans-unit id="sde9a3f41977ec1f8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.users}"/> current internal users and <x id="1" equiv-text="${this.forecast?.forecastedUsers}"/> forecasted internal users.</source>
</trans-unit>
<trans-unit id="s4557b6b9da258643">
<source>Forecast external users</source>
</trans-unit>
<trans-unit id="sf52479d6daa0a4a8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.externalUsers}"/> current external users and <x id="1" equiv-text="${this.forecast?.forecastedExternalUsers}"/> forecasted external users.</source>
</trans-unit>
<trans-unit id="s6196153c4b0c1ea0">
<source>Install</source>
</trans-unit>
<trans-unit id="s0285b4bd69130fa3">
<source>Install License</source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -5673,45 +5673,18 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="s2e109263b73c12d5"> <trans-unit id="s2e109263b73c12d5">
<source>Licenses</source> <source>Licenses</source>
</trans-unit> </trans-unit>
<trans-unit id="sf8f9f3032e891e16">
<source>TODO Copy</source>
</trans-unit>
<trans-unit id="sd49099e9522635f4"> <trans-unit id="sd49099e9522635f4">
<source>License(s)</source> <source>License(s)</source>
</trans-unit> </trans-unit>
<trans-unit id="s3be1d90ffa46b7f1"> <trans-unit id="s3be1d90ffa46b7f1">
<source>Enterprise is in preview.</source> <source>Enterprise is in preview.</source>
</trans-unit> </trans-unit>
<trans-unit id="s34dca481f039c226">
<source>How to get a license</source>
</trans-unit>
<trans-unit id="s948364901c166232">
<source>Copy the installation ID</source>
</trans-unit>
<trans-unit id="s75c167446b237e0f">
<source>Then open the customer portal</source>
</trans-unit>
<trans-unit id="s9748dd3bd53d27a4">
<source>Forecasted default users</source>
</trans-unit>
<trans-unit id="s6b18f594d94c2374">
<source>Estimated user count one year from now</source>
</trans-unit>
<trans-unit id="s69f246d164be88d0">
<source>Forecasted external users</source>
</trans-unit>
<trans-unit id="s878fc2eaf94642db">
<source>Estimated external user count one year from now</source>
</trans-unit>
<trans-unit id="sd22bd01bdf28c548"> <trans-unit id="sd22bd01bdf28c548">
<source>Cumulative license expiry</source> <source>Cumulative license expiry</source>
</trans-unit> </trans-unit>
<trans-unit id="sdeb6cee42435dd07"> <trans-unit id="sdeb6cee42435dd07">
<source>Update License</source> <source>Update License</source>
</trans-unit> </trans-unit>
<trans-unit id="s99afa741c259d70e">
<source>Create License</source>
</trans-unit>
<trans-unit id="s7df5b92a3f93544f"> <trans-unit id="s7df5b92a3f93544f">
<source>Warning: The current user count has exceeded the configured licenses.</source> <source>Warning: The current user count has exceeded the configured licenses.</source>
</trans-unit> </trans-unit>
@ -5723,6 +5696,36 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s9ce7cc01fb9b5b53"> <trans-unit id="s9ce7cc01fb9b5b53">
<source>Manage enterprise licenses</source> <source>Manage enterprise licenses</source>
</trans-unit>
<trans-unit id="sf9ebf11ac2645820">
<source>No licenses found.</source>
</trans-unit>
<trans-unit id="sa1db89262360550b">
<source>Send us feedback!</source>
</trans-unit>
<trans-unit id="s4015746f55a8d89f">
<source>Get a license</source>
</trans-unit>
<trans-unit id="sb2cbd06f8e25b47e">
<source>Go to Customer Portal</source>
</trans-unit>
<trans-unit id="sf58825457d61c429">
<source>Forecast internal users</source>
</trans-unit>
<trans-unit id="sde9a3f41977ec1f8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.users}"/> current internal users and <x id="1" equiv-text="${this.forecast?.forecastedUsers}"/> forecasted internal users.</source>
</trans-unit>
<trans-unit id="s4557b6b9da258643">
<source>Forecast external users</source>
</trans-unit>
<trans-unit id="sf52479d6daa0a4a8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.externalUsers}"/> current external users and <x id="1" equiv-text="${this.forecast?.forecastedExternalUsers}"/> forecasted external users.</source>
</trans-unit>
<trans-unit id="s6196153c4b0c1ea0">
<source>Install</source>
</trans-unit>
<trans-unit id="s0285b4bd69130fa3">
<source>Install License</source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" ?><xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> <?xml version="1.0"?><xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file target-language="zh-Hans" source-language="en" original="lit-localize-inputs" datatype="plaintext"> <file target-language="zh-Hans" source-language="en" original="lit-localize-inputs" datatype="plaintext">
<body> <body>
<trans-unit id="s4caed5b7a7e5d89b"> <trans-unit id="s4caed5b7a7e5d89b">
@ -618,9 +618,9 @@
</trans-unit> </trans-unit>
<trans-unit id="saa0e2675da69651b"> <trans-unit id="saa0e2675da69651b">
<source>The URL &quot;<x id="0" equiv-text="${this.url}"/>&quot; was not found.</source> <source>The URL "<x id="0" equiv-text="${this.url}"/>" was not found.</source>
<target>未找到 URL &quot; <target>未找到 URL "
<x id="0" equiv-text="${this.url}"/>&quot;。</target> <x id="0" equiv-text="${this.url}"/>"。</target>
</trans-unit> </trans-unit>
<trans-unit id="s58cd9c2fe836d9c6"> <trans-unit id="s58cd9c2fe836d9c6">
@ -1072,8 +1072,8 @@
</trans-unit> </trans-unit>
<trans-unit id="sa8384c9c26731f83"> <trans-unit id="sa8384c9c26731f83">
<source>To allow any redirect URI, set this value to &quot;.*&quot;. Be aware of the possible security implications this can have.</source> <source>To allow any redirect URI, set this value to ".*". Be aware of the possible security implications this can have.</source>
<target>要允许任何重定向 URI请将此值设置为 &quot;.*&quot;。请注意这可能带来的安全影响。</target> <target>要允许任何重定向 URI请将此值设置为 ".*"。请注意这可能带来的安全影响。</target>
</trans-unit> </trans-unit>
<trans-unit id="s55787f4dfcdce52b"> <trans-unit id="s55787f4dfcdce52b">
@ -1819,8 +1819,8 @@
</trans-unit> </trans-unit>
<trans-unit id="sa90b7809586c35ce"> <trans-unit id="sa90b7809586c35ce">
<source>Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon &quot;fa-test&quot;.</source> <source>Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon "fa-test".</source>
<target>输入完整 URL、相对路径或者使用 'fa://fa-test' 来使用 Font Awesome 图标 &quot;fa-test&quot;。</target> <target>输入完整 URL、相对路径或者使用 'fa://fa-test' 来使用 Font Awesome 图标 "fa-test"。</target>
</trans-unit> </trans-unit>
<trans-unit id="s0410779cb47de312"> <trans-unit id="s0410779cb47de312">
@ -3248,8 +3248,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s76768bebabb7d543"> <trans-unit id="s76768bebabb7d543">
<source>Field which contains members of a group. Note that if using the &quot;memberUid&quot; field, the value is assumed to contain a relative distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn=some-user,ou=groups,...'</source> <source>Field which contains members of a group. Note that if using the "memberUid" field, the value is assumed to contain a relative distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn=some-user,ou=groups,...'</source>
<target>包含组成员的字段。请注意,如果使用 &quot;memberUid&quot; 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'</target> <target>包含组成员的字段。请注意,如果使用 "memberUid" 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'</target>
</trans-unit> </trans-unit>
<trans-unit id="s026555347e589f0e"> <trans-unit id="s026555347e589f0e">
@ -4046,8 +4046,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s7b1fba26d245cb1c"> <trans-unit id="s7b1fba26d245cb1c">
<source>When using an external logging solution for archiving, this can be set to &quot;minutes=5&quot;.</source> <source>When using an external logging solution for archiving, this can be set to "minutes=5".</source>
<target>使用外部日志记录解决方案进行存档时,可以将其设置为 &quot;minutes=5&quot;。</target> <target>使用外部日志记录解决方案进行存档时,可以将其设置为 "minutes=5"。</target>
</trans-unit> </trans-unit>
<trans-unit id="s44536d20bb5c8257"> <trans-unit id="s44536d20bb5c8257">
@ -4056,8 +4056,8 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s3bb51cabb02b997e"> <trans-unit id="s3bb51cabb02b997e">
<source>Format: &quot;weeks=3;days=2;hours=3,seconds=2&quot;.</source> <source>Format: "weeks=3;days=2;hours=3,seconds=2".</source>
<target>格式:&quot;weeks=3;days=2;hours=3,seconds=2&quot;。</target> <target>格式:"weeks=3;days=2;hours=3,seconds=2"。</target>
</trans-unit> </trans-unit>
<trans-unit id="s04bfd02201db5ab8"> <trans-unit id="s04bfd02201db5ab8">
@ -4253,10 +4253,10 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="sa95a538bfbb86111"> <trans-unit id="sa95a538bfbb86111">
<source>Are you sure you want to update <x id="0" equiv-text="${this.objectLabel}"/> &quot;<x id="1" equiv-text="${this.obj?.name}"/>&quot;?</source> <source>Are you sure you want to update <x id="0" equiv-text="${this.objectLabel}"/> "<x id="1" equiv-text="${this.obj?.name}"/>"?</source>
<target>您确定要更新 <target>您确定要更新
<x id="0" equiv-text="${this.objectLabel}"/>&quot; <x id="0" equiv-text="${this.objectLabel}"/>"
<x id="1" equiv-text="${this.obj?.name}"/>&quot; 吗?</target> <x id="1" equiv-text="${this.obj?.name}"/>" 吗?</target>
</trans-unit> </trans-unit>
<trans-unit id="sc92d7cfb6ee1fec6"> <trans-unit id="sc92d7cfb6ee1fec6">
@ -5372,7 +5372,7 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="sdf1d8edef27236f0"> <trans-unit id="sdf1d8edef27236f0">
<source>A &quot;roaming&quot; authenticator, like a YubiKey</source> <source>A "roaming" authenticator, like a YubiKey</source>
<target>像 YubiKey 这样的“漫游”身份验证器</target> <target>像 YubiKey 这样的“漫游”身份验证器</target>
</trans-unit> </trans-unit>
@ -5712,10 +5712,10 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s2d5f69929bb7221d"> <trans-unit id="s2d5f69929bb7221d">
<source><x id="0" equiv-text="${prompt.name}"/> (&quot;<x id="1" equiv-text="${prompt.fieldKey}"/>&quot;, of type <x id="2" equiv-text="${prompt.type}"/>)</source> <source><x id="0" equiv-text="${prompt.name}"/> ("<x id="1" equiv-text="${prompt.fieldKey}"/>", of type <x id="2" equiv-text="${prompt.type}"/>)</source>
<target> <target>
<x id="0" equiv-text="${prompt.name}"/>&quot; <x id="0" equiv-text="${prompt.name}"/>"
<x id="1" equiv-text="${prompt.fieldKey}"/>&quot;,类型为 <x id="1" equiv-text="${prompt.fieldKey}"/>",类型为
<x id="2" equiv-text="${prompt.type}"/></target> <x id="2" equiv-text="${prompt.type}"/></target>
</trans-unit> </trans-unit>
@ -5764,7 +5764,7 @@ doesn't pass when either or both of the selected options are equal or above the
</trans-unit> </trans-unit>
<trans-unit id="s1608b2f94fa0dbd4"> <trans-unit id="s1608b2f94fa0dbd4">
<source>If set to a duration above 0, the user will have the option to choose to &quot;stay signed in&quot;, which will extend their session by the time specified here.</source> <source>If set to a duration above 0, the user will have the option to choose to "stay signed in", which will extend their session by the time specified here.</source>
<target>如果设置时长大于 0用户可以选择“保持登录”选项这将使用户的会话延长此处设置的时间。</target> <target>如果设置时长大于 0用户可以选择“保持登录”选项这将使用户的会话延长此处设置的时间。</target>
</trans-unit> </trans-unit>
@ -7617,10 +7617,6 @@ Bindings to groups/users are checked against the user of the event.</source>
<source>Licenses</source> <source>Licenses</source>
<target>许可证</target> <target>许可证</target>
</trans-unit> </trans-unit>
<trans-unit id="sf8f9f3032e891e16">
<source>TODO Copy</source>
<target>未定副本</target>
</trans-unit>
<trans-unit id="sd49099e9522635f4"> <trans-unit id="sd49099e9522635f4">
<source>License(s)</source> <source>License(s)</source>
<target>许可证</target> <target>许可证</target>
@ -7629,34 +7625,6 @@ Bindings to groups/users are checked against the user of the event.</source>
<source>Enterprise is in preview.</source> <source>Enterprise is in preview.</source>
<target>企业版目前处于预览状态。</target> <target>企业版目前处于预览状态。</target>
</trans-unit> </trans-unit>
<trans-unit id="s34dca481f039c226">
<source>How to get a license</source>
<target>如何获取许可证</target>
</trans-unit>
<trans-unit id="s948364901c166232">
<source>Copy the installation ID</source>
<target>复制安装 ID</target>
</trans-unit>
<trans-unit id="s75c167446b237e0f">
<source>Then open the customer portal</source>
<target>然后打开消费者中心</target>
</trans-unit>
<trans-unit id="s9748dd3bd53d27a4">
<source>Forecasted default users</source>
<target>预测默认用户</target>
</trans-unit>
<trans-unit id="s6b18f594d94c2374">
<source>Estimated user count one year from now</source>
<target>预计从此时开始一年内的用户数</target>
</trans-unit>
<trans-unit id="s69f246d164be88d0">
<source>Forecasted external users</source>
<target>预测外部用户</target>
</trans-unit>
<trans-unit id="s878fc2eaf94642db">
<source>Estimated external user count one year from now</source>
<target>预计从此时开始一年内的外部用户数</target>
</trans-unit>
<trans-unit id="sd22bd01bdf28c548"> <trans-unit id="sd22bd01bdf28c548">
<source>Cumulative license expiry</source> <source>Cumulative license expiry</source>
<target>累计许可证过期时间</target> <target>累计许可证过期时间</target>
@ -7665,10 +7633,6 @@ Bindings to groups/users are checked against the user of the event.</source>
<source>Update License</source> <source>Update License</source>
<target>更新许可证</target> <target>更新许可证</target>
</trans-unit> </trans-unit>
<trans-unit id="s99afa741c259d70e">
<source>Create License</source>
<target>创建许可证</target>
</trans-unit>
<trans-unit id="s7df5b92a3f93544f"> <trans-unit id="s7df5b92a3f93544f">
<source>Warning: The current user count has exceeded the configured licenses.</source> <source>Warning: The current user count has exceeded the configured licenses.</source>
<target>警告:当前用户数超过了配置的许可证限制</target> <target>警告:当前用户数超过了配置的许可证限制</target>
@ -7684,6 +7648,36 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="s9ce7cc01fb9b5b53"> <trans-unit id="s9ce7cc01fb9b5b53">
<source>Manage enterprise licenses</source> <source>Manage enterprise licenses</source>
<target>管理企业版许可证</target> <target>管理企业版许可证</target>
</trans-unit>
<trans-unit id="sf9ebf11ac2645820">
<source>No licenses found.</source>
</trans-unit>
<trans-unit id="sa1db89262360550b">
<source>Send us feedback!</source>
</trans-unit>
<trans-unit id="s4015746f55a8d89f">
<source>Get a license</source>
</trans-unit>
<trans-unit id="sb2cbd06f8e25b47e">
<source>Go to Customer Portal</source>
</trans-unit>
<trans-unit id="sf58825457d61c429">
<source>Forecast internal users</source>
</trans-unit>
<trans-unit id="sde9a3f41977ec1f8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.users}"/> current internal users and <x id="1" equiv-text="${this.forecast?.forecastedUsers}"/> forecasted internal users.</source>
</trans-unit>
<trans-unit id="s4557b6b9da258643">
<source>Forecast external users</source>
</trans-unit>
<trans-unit id="sf52479d6daa0a4a8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.externalUsers}"/> current external users and <x id="1" equiv-text="${this.forecast?.forecastedExternalUsers}"/> forecasted external users.</source>
</trans-unit>
<trans-unit id="s6196153c4b0c1ea0">
<source>Install</source>
</trans-unit>
<trans-unit id="s0285b4bd69130fa3">
<source>Install License</source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -5728,45 +5728,18 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="s2e109263b73c12d5"> <trans-unit id="s2e109263b73c12d5">
<source>Licenses</source> <source>Licenses</source>
</trans-unit> </trans-unit>
<trans-unit id="sf8f9f3032e891e16">
<source>TODO Copy</source>
</trans-unit>
<trans-unit id="sd49099e9522635f4"> <trans-unit id="sd49099e9522635f4">
<source>License(s)</source> <source>License(s)</source>
</trans-unit> </trans-unit>
<trans-unit id="s3be1d90ffa46b7f1"> <trans-unit id="s3be1d90ffa46b7f1">
<source>Enterprise is in preview.</source> <source>Enterprise is in preview.</source>
</trans-unit> </trans-unit>
<trans-unit id="s34dca481f039c226">
<source>How to get a license</source>
</trans-unit>
<trans-unit id="s948364901c166232">
<source>Copy the installation ID</source>
</trans-unit>
<trans-unit id="s75c167446b237e0f">
<source>Then open the customer portal</source>
</trans-unit>
<trans-unit id="s9748dd3bd53d27a4">
<source>Forecasted default users</source>
</trans-unit>
<trans-unit id="s6b18f594d94c2374">
<source>Estimated user count one year from now</source>
</trans-unit>
<trans-unit id="s69f246d164be88d0">
<source>Forecasted external users</source>
</trans-unit>
<trans-unit id="s878fc2eaf94642db">
<source>Estimated external user count one year from now</source>
</trans-unit>
<trans-unit id="sd22bd01bdf28c548"> <trans-unit id="sd22bd01bdf28c548">
<source>Cumulative license expiry</source> <source>Cumulative license expiry</source>
</trans-unit> </trans-unit>
<trans-unit id="sdeb6cee42435dd07"> <trans-unit id="sdeb6cee42435dd07">
<source>Update License</source> <source>Update License</source>
</trans-unit> </trans-unit>
<trans-unit id="s99afa741c259d70e">
<source>Create License</source>
</trans-unit>
<trans-unit id="s7df5b92a3f93544f"> <trans-unit id="s7df5b92a3f93544f">
<source>Warning: The current user count has exceeded the configured licenses.</source> <source>Warning: The current user count has exceeded the configured licenses.</source>
</trans-unit> </trans-unit>
@ -5778,6 +5751,36 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s9ce7cc01fb9b5b53"> <trans-unit id="s9ce7cc01fb9b5b53">
<source>Manage enterprise licenses</source> <source>Manage enterprise licenses</source>
</trans-unit>
<trans-unit id="sf9ebf11ac2645820">
<source>No licenses found.</source>
</trans-unit>
<trans-unit id="sa1db89262360550b">
<source>Send us feedback!</source>
</trans-unit>
<trans-unit id="s4015746f55a8d89f">
<source>Get a license</source>
</trans-unit>
<trans-unit id="sb2cbd06f8e25b47e">
<source>Go to Customer Portal</source>
</trans-unit>
<trans-unit id="sf58825457d61c429">
<source>Forecast internal users</source>
</trans-unit>
<trans-unit id="sde9a3f41977ec1f8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.users}"/> current internal users and <x id="1" equiv-text="${this.forecast?.forecastedUsers}"/> forecasted internal users.</source>
</trans-unit>
<trans-unit id="s4557b6b9da258643">
<source>Forecast external users</source>
</trans-unit>
<trans-unit id="sf52479d6daa0a4a8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.externalUsers}"/> current external users and <x id="1" equiv-text="${this.forecast?.forecastedExternalUsers}"/> forecasted external users.</source>
</trans-unit>
<trans-unit id="s6196153c4b0c1ea0">
<source>Install</source>
</trans-unit>
<trans-unit id="s0285b4bd69130fa3">
<source>Install License</source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -5727,45 +5727,18 @@ Bindings to groups/users are checked against the user of the event.</source>
<trans-unit id="s2e109263b73c12d5"> <trans-unit id="s2e109263b73c12d5">
<source>Licenses</source> <source>Licenses</source>
</trans-unit> </trans-unit>
<trans-unit id="sf8f9f3032e891e16">
<source>TODO Copy</source>
</trans-unit>
<trans-unit id="sd49099e9522635f4"> <trans-unit id="sd49099e9522635f4">
<source>License(s)</source> <source>License(s)</source>
</trans-unit> </trans-unit>
<trans-unit id="s3be1d90ffa46b7f1"> <trans-unit id="s3be1d90ffa46b7f1">
<source>Enterprise is in preview.</source> <source>Enterprise is in preview.</source>
</trans-unit> </trans-unit>
<trans-unit id="s34dca481f039c226">
<source>How to get a license</source>
</trans-unit>
<trans-unit id="s948364901c166232">
<source>Copy the installation ID</source>
</trans-unit>
<trans-unit id="s75c167446b237e0f">
<source>Then open the customer portal</source>
</trans-unit>
<trans-unit id="s9748dd3bd53d27a4">
<source>Forecasted default users</source>
</trans-unit>
<trans-unit id="s6b18f594d94c2374">
<source>Estimated user count one year from now</source>
</trans-unit>
<trans-unit id="s69f246d164be88d0">
<source>Forecasted external users</source>
</trans-unit>
<trans-unit id="s878fc2eaf94642db">
<source>Estimated external user count one year from now</source>
</trans-unit>
<trans-unit id="sd22bd01bdf28c548"> <trans-unit id="sd22bd01bdf28c548">
<source>Cumulative license expiry</source> <source>Cumulative license expiry</source>
</trans-unit> </trans-unit>
<trans-unit id="sdeb6cee42435dd07"> <trans-unit id="sdeb6cee42435dd07">
<source>Update License</source> <source>Update License</source>
</trans-unit> </trans-unit>
<trans-unit id="s99afa741c259d70e">
<source>Create License</source>
</trans-unit>
<trans-unit id="s7df5b92a3f93544f"> <trans-unit id="s7df5b92a3f93544f">
<source>Warning: The current user count has exceeded the configured licenses.</source> <source>Warning: The current user count has exceeded the configured licenses.</source>
</trans-unit> </trans-unit>
@ -5777,6 +5750,36 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit> </trans-unit>
<trans-unit id="s9ce7cc01fb9b5b53"> <trans-unit id="s9ce7cc01fb9b5b53">
<source>Manage enterprise licenses</source> <source>Manage enterprise licenses</source>
</trans-unit>
<trans-unit id="sf9ebf11ac2645820">
<source>No licenses found.</source>
</trans-unit>
<trans-unit id="sa1db89262360550b">
<source>Send us feedback!</source>
</trans-unit>
<trans-unit id="s4015746f55a8d89f">
<source>Get a license</source>
</trans-unit>
<trans-unit id="sb2cbd06f8e25b47e">
<source>Go to Customer Portal</source>
</trans-unit>
<trans-unit id="sf58825457d61c429">
<source>Forecast internal users</source>
</trans-unit>
<trans-unit id="sde9a3f41977ec1f8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.users}"/> current internal users and <x id="1" equiv-text="${this.forecast?.forecastedUsers}"/> forecasted internal users.</source>
</trans-unit>
<trans-unit id="s4557b6b9da258643">
<source>Forecast external users</source>
</trans-unit>
<trans-unit id="sf52479d6daa0a4a8">
<source>Estimated user count one year from now based on <x id="0" equiv-text="${this.forecast?.externalUsers}"/> current external users and <x id="1" equiv-text="${this.forecast?.forecastedExternalUsers}"/> forecasted external users.</source>
</trans-unit>
<trans-unit id="s6196153c4b0c1ea0">
<source>Install</source>
</trans-unit>
<trans-unit id="s0285b4bd69130fa3">
<source>Install License</source>
</trans-unit> </trans-unit>
</body> </body>
</file> </file>

View File

@ -57,7 +57,7 @@ export default function pricingPage() {
</div> </div>
<div className="card__footer"> <div className="card__footer">
<h1> <h1>
$5 <small>/default user/month</small> $5 <small>/internal user/month</small>
</h1> </h1>
<h1> <h1>
$0.02{" "} $0.02{" "}
@ -129,8 +129,8 @@ export default function pricingPage() {
body="We only offer support as part of an enterprise license. You can get community support on GitHub and Discord for the open-source version." body="We only offer support as part of an enterprise license. You can get community support on GitHub and Discord for the open-source version."
/> />
<Card <Card
title="What's the difference between default and external users?" title="What's the difference between internal and external users?"
body="Default users might be users such as company employees, which will get access to the full Enterprise feature set. External users might be external consultants or B2C customers. These users don't get access to enterprise features." body="Internal users might be users such as company employees, which will get access to the full Enterprise feature set. External users might be external consultants or B2C customers. These users don't get access to enterprise features."
/> />
<Card <Card
title="Are you planning to add X to authentik?" title="Are you planning to add X to authentik?"