From 0bc84aaf616cdccd27d587c88573f1501321531c Mon Sep 17 00:00:00 2001 From: Xiao Yijun Date: Thu, 28 Dec 2023 18:32:07 +0800 Subject: [PATCH] refactor(console): update plan comparison data and styles (#5181) --- packages/console/src/consts/plan-quotas.ts | 8 ++- .../PlanQuotaKeyLabel/index.tsx | 36 +++++++++--- .../TableDataWrapper}/index.module.scss | 6 +- .../TableDataWrapper}/index.tsx | 8 ++- .../PlanComparisonTable/index.module.scss | 23 +------- .../PlanComparisonTable/index.tsx | 10 +--- .../renderers/BasePrice.tsx | 6 +- .../renderers/GenericFeatureFlag.tsx | 6 +- .../renderers/GenericQuotaLimit.tsx | 13 +++-- .../PlanComparisonTable/renderers/index.tsx | 58 +++++++++++++------ .../admin-console/subscription/quota-table.ts | 15 +++-- .../admin-console/subscription/quota-table.ts | 15 +++-- .../admin-console/subscription/quota-table.ts | 11 +++- .../admin-console/subscription/quota-table.ts | 17 ++++-- .../admin-console/subscription/quota-table.ts | 17 ++++-- .../admin-console/subscription/quota-table.ts | 17 ++++-- .../admin-console/subscription/quota-table.ts | 16 +++-- .../admin-console/subscription/quota-table.ts | 15 +++-- .../admin-console/subscription/quota-table.ts | 15 +++-- .../admin-console/subscription/quota-table.ts | 17 ++++-- .../admin-console/subscription/quota-table.ts | 17 ++++-- .../admin-console/subscription/quota-table.ts | 15 +++-- .../admin-console/subscription/quota-table.ts | 15 +++-- .../admin-console/subscription/quota-table.ts | 13 +++-- .../admin-console/subscription/quota-table.ts | 13 +++-- 25 files changed, 247 insertions(+), 155 deletions(-) rename packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/{renderers/QuotaValueWrapper => components/TableDataWrapper}/index.module.scss (60%) rename packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/{renderers/QuotaValueWrapper => components/TableDataWrapper}/index.tsx (66%) diff --git a/packages/console/src/consts/plan-quotas.ts b/packages/console/src/consts/plan-quotas.ts index 8870e7c33..445775bc7 100644 --- a/packages/console/src/consts/plan-quotas.ts +++ b/packages/console/src/consts/plan-quotas.ts @@ -87,7 +87,7 @@ export const allowedUsersPerOrganizationMap: Record | u export const invitationEnabledMap: Record = { [ReservedPlanId.Free]: false, [ReservedPlanId.Hobby]: true, - [ReservedPlanId.Pro]: undefined, + [ReservedPlanId.Pro]: true, }; export const orgRolesLimitMap: Record | undefined> = { @@ -105,7 +105,7 @@ export const orgPermissionsLimitMap: Record | undefined export const justInTimeProvisioningEnabledMap: Record = { [ReservedPlanId.Free]: false, [ReservedPlanId.Hobby]: true, - [ReservedPlanId.Pro]: undefined, + [ReservedPlanId.Pro]: true, }; export const soc2ReportEnabledMap: Record = { @@ -155,6 +155,8 @@ const enterprisePlanTable: SubscriptionPlanTable = { communitySupportEnabled: true, ticketSupportResponseTime: undefined, organizationsEnabled: undefined, + invitationEnabled: true, + justInTimeProvisioningEnabled: true, ssoEnabled: undefined, soc2ReportEnabled: true, hipaaOrBaaReportEnabled: true, @@ -170,7 +172,7 @@ export const enterprisePlanTableData: SubscriptionPlanTableData = { }; export const planTableGroupKeyMap: SubscriptionPlanTableGroupKeyMap = Object.freeze({ - [SubscriptionPlanTableGroupKey.base]: ['basePrice', 'mauLimit'], + [SubscriptionPlanTableGroupKey.base]: ['basePrice', 'mauLimit', 'tokenLimit'], [SubscriptionPlanTableGroupKey.applications]: ['applicationsLimit', 'machineToMachineLimit'], [SubscriptionPlanTableGroupKey.resources]: ['resourcesLimit', 'scopesPerResourceLimit'], [SubscriptionPlanTableGroupKey.branding]: [ diff --git a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/PlanQuotaKeyLabel/index.tsx b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/PlanQuotaKeyLabel/index.tsx index ab08d40f1..800a7a47b 100644 --- a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/PlanQuotaKeyLabel/index.tsx +++ b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/PlanQuotaKeyLabel/index.tsx @@ -1,20 +1,20 @@ -import { cond, type Nullable } from '@silverhand/essentials'; +import { cond } from '@silverhand/essentials'; import { type TFuncKey } from 'i18next'; import DynamicT from '@/ds-components/DynamicT'; import { type SubscriptionPlanTable } from '@/types/subscriptions'; +import TableDataWrapper from '../components/TableDataWrapper'; + const planQuotaKeyPhraseMap: { - [key in keyof Required]: Nullable< - TFuncKey<'translation', 'admin_console.subscription.quota_table'> + [key in keyof Required]: TFuncKey< + 'translation', + 'admin_console.subscription.quota_table' >; } = { basePrice: 'quota.base_price', mauLimit: 'quota.mau_limit', - /** - * Token limit is required in the plan quota table but we don't display it as a row data. - */ - tokenLimit: null, + tokenLimit: 'quota.included_tokens', applicationsLimit: 'application.total', machineToMachineLimit: 'application.m2m', resourcesLimit: 'resource.resource_count', @@ -51,13 +51,31 @@ const planQuotaKeyPhraseMap: { hipaaOrBaaReportEnabled: 'support.hipaa_or_baa_report', }; +const planQuotaTipPhraseMap: Partial< + Record< + keyof Required, + TFuncKey<'translation', 'admin_console.subscription.quota_table'> + > +> = { + mauLimit: 'mau_tip', + tokenLimit: 'tokens_tip', +}; + type Props = { quotaKey: keyof SubscriptionPlanTable; }; function PlanQuotaKeyLabel({ quotaKey }: Props) { - const phraseKey = planQuotaKeyPhraseMap[quotaKey]; - return cond(phraseKey && ) ?? <>-; + const quotaTip = planQuotaTipPhraseMap[quotaKey]; + + return ( + )} + > + + + ); } export default PlanQuotaKeyLabel; diff --git a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/QuotaValueWrapper/index.module.scss b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/components/TableDataWrapper/index.module.scss similarity index 60% rename from packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/QuotaValueWrapper/index.module.scss rename to packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/components/TableDataWrapper/index.module.scss index 99f2a7540..5b50c07dd 100644 --- a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/QuotaValueWrapper/index.module.scss +++ b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/components/TableDataWrapper/index.module.scss @@ -4,5 +4,9 @@ display: flex; align-items: center; justify-content: center; - gap: _.unit(2); + gap: _.unit(1); + + &.leftAligned { + justify-content: flex-start; + } } diff --git a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/QuotaValueWrapper/index.tsx b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/components/TableDataWrapper/index.tsx similarity index 66% rename from packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/QuotaValueWrapper/index.tsx rename to packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/components/TableDataWrapper/index.tsx index f1dd3f2af..00f006c5e 100644 --- a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/QuotaValueWrapper/index.tsx +++ b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/components/TableDataWrapper/index.tsx @@ -1,3 +1,4 @@ +import classNames from 'classnames'; import { type ReactNode } from 'react'; import Tip from '@/assets/icons/tip.svg'; @@ -9,11 +10,12 @@ import * as styles from './index.module.scss'; type Props = { children: ReactNode; tip?: ReactNode; + isLeftAligned?: boolean; }; -function QuotaValueWrapper({ children, tip }: Props) { +function TableDataWrapper({ children, tip, isLeftAligned }: Props) { return ( -
+
{children} {tip && ( @@ -26,4 +28,4 @@ function QuotaValueWrapper({ children, tip }: Props) { ); } -export default QuotaValueWrapper; +export default TableDataWrapper; diff --git a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/index.module.scss b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/index.module.scss index 1d171fb2d..33a3161fa 100644 --- a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/index.module.scss +++ b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/index.module.scss @@ -13,21 +13,12 @@ width: 100%; thead { - background-color: var(--color-layer-light); border-radius: 6px; padding: 0 _.unit(3); tr th { font: var(--font-title-2); padding: _.unit(3); - - &:first-child { - border-radius: 6px 0 0 6px; - } - - &:last-child { - border-radius: 0 6px 6px 0; - } } } @@ -36,29 +27,19 @@ font: var(--font-body-2); text-align: center; padding: _.unit(3); - - &:first-child { - border-radius: 6px 0 0 6px; - } - - &:last-child { - border-radius: 0 6px 6px 0; - } } .groupLabel { font: var(--font-title-2); text-align: left; + background-color: var(--color-layer-light); + border-radius: 6px; } .quotaKeyColumn { padding: _.unit(4) _.unit(6); text-align: left; } - - .colorRow { - background-color: var(--color-layer-light); - } } } } diff --git a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/index.tsx b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/index.tsx index 7a342ec6f..e358f3f2b 100644 --- a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/index.tsx +++ b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/index.tsx @@ -1,4 +1,3 @@ -import { cond } from '@silverhand/essentials'; import { Fragment, useMemo } from 'react'; import PlanName from '@/components/PlanName'; @@ -42,16 +41,13 @@ function PlanComparisonTable({ subscriptionPlans }: Props) { {Object.entries(planTableGroupKeyMap).map(([groupKey, quotaKeys]) => ( - + {/* eslint-disable-next-line no-restricted-syntax */} - {quotaKeys.map((quotaKey, index) => ( - + {quotaKeys.map((quotaKey) => ( + diff --git a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/BasePrice.tsx b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/BasePrice.tsx index 249fa6790..5197be8e4 100644 --- a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/BasePrice.tsx +++ b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/BasePrice.tsx @@ -1,6 +1,6 @@ import DynamicT from '@/ds-components/DynamicT'; -import QuotaValueWrapper from './QuotaValueWrapper'; +import TableDataWrapper from '../components/TableDataWrapper'; type Props = { value?: string; @@ -15,12 +15,12 @@ function BasePrice({ value }: Props) { * `basePrice` is a string value representing the price in cents, we need to convert the value from cents to dollars. */ return ( - + - + ); } diff --git a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/GenericFeatureFlag.tsx b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/GenericFeatureFlag.tsx index 35c3ba34a..062a3bcbb 100644 --- a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/GenericFeatureFlag.tsx +++ b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/GenericFeatureFlag.tsx @@ -4,7 +4,7 @@ import { type TFuncKey } from 'i18next'; import Success from '@/assets/icons/success.svg'; import DynamicT from '@/ds-components/DynamicT'; -import QuotaValueWrapper from './QuotaValueWrapper'; +import TableDataWrapper from '../components/TableDataWrapper'; type Props = { /** @@ -55,7 +55,7 @@ function GenericFeatureFlag({ isEnabled, isBeta, tipPhraseKey, paymentType }: Pr } return ( - )} > {isEnabled @@ -69,7 +69,7 @@ function GenericFeatureFlag({ isEnabled, isBeta, tipPhraseKey, paymentType }: Pr /> ) : '-'} - + ); } diff --git a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/GenericQuotaLimit.tsx b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/GenericQuotaLimit.tsx index 08e77642b..c7c7136d3 100644 --- a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/GenericQuotaLimit.tsx +++ b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/GenericQuotaLimit.tsx @@ -1,17 +1,18 @@ import { cond, type Nullable } from '@silverhand/essentials'; import { type TFuncKey } from 'i18next'; +import { type ReactNode } from 'react'; import Success from '@/assets/icons/success.svg'; import DynamicT from '@/ds-components/DynamicT'; -import QuotaValueWrapper from './QuotaValueWrapper'; +import TableDataWrapper from '../components/TableDataWrapper'; type Props = { quota?: Nullable; tipPhraseKey?: TFuncKey<'translation', 'admin_console.subscription.quota_table'>; tipInterpolation?: Record; hasCheckmark?: boolean; - formatter?: (quota: number) => string; + formatter?: (quota: number) => string | ReactNode; }; function GenericQuotaLimit({ @@ -36,15 +37,15 @@ function GenericQuotaLimit({ if (quota === null) { return ( - + {hasCheckmark && } - + ); } return ( - + {quota === 0 ? ( '-' ) : ( @@ -53,7 +54,7 @@ function GenericQuotaLimit({ {formatter?.(quota) ?? quota.toLocaleString()} )} - + ); } diff --git a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/index.tsx b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/index.tsx index af10d8977..8e7cdeaa7 100644 --- a/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/index.tsx +++ b/packages/console/src/pages/TenantSettings/Subscription/PlanComparisonTable/renderers/index.tsx @@ -3,6 +3,7 @@ import { cond } from '@silverhand/essentials'; import { t } from 'i18next'; import { type ReactNode } from 'react'; +import DynamicT from '@/ds-components/DynamicT'; import { type SubscriptionPlanTable, type SubscriptionPlanTableData } from '@/types/subscriptions'; import BasePrice from './BasePrice'; @@ -15,14 +16,21 @@ export const quotaValueRenderer: Record< > = { // Base basePrice: ({ table: { basePrice } }) => , - tokenLimit: () =>
, // Dummy: We don't display token limit as an item in the plan comparison table. - mauLimit: ({ id, table: { tokenLimit, mauLimit } }) => ( + mauLimit: ({ table: { mauLimit } }) => , + tokenLimit: ({ id, table: { tokenLimit } }) => ( { + return quota >= 1_000_000 ? ( + + ) : ( + quota.toLocaleString() + ); + }} /> ), // Applications @@ -120,16 +128,22 @@ export const quotaValueRenderer: Record< allowedUsersPerOrganization: ({ table: { allowedUsersPerOrganization } }) => ( ), - invitationEnabled: ({ table: { invitationEnabled } }) => ( - - ), + invitationEnabled: ({ table: { invitationEnabled } }) => + invitationEnabled ? ( + + ) : ( + + ), orgRolesLimit: ({ table: { orgRolesLimit } }) => , orgPermissionsLimit: ({ table: { orgPermissionsLimit } }) => ( ), - justInTimeProvisioningEnabled: ({ table: { justInTimeProvisioningEnabled } }) => ( - - ), + justInTimeProvisioningEnabled: ({ table: { justInTimeProvisioningEnabled } }) => + justInTimeProvisioningEnabled ? ( + + ) : ( + + ), // Audit logs auditLogsRetentionDays: ({ table: { auditLogsRetentionDays } }) => ( `(${quota}h)`} /> ), - soc2ReportEnabled: ({ table: { soc2ReportEnabled } }) => ( - - ), - hipaaOrBaaReportEnabled: ({ table: { hipaaOrBaaReportEnabled } }) => ( - - ), + soc2ReportEnabled: ({ table: { soc2ReportEnabled } }) => + soc2ReportEnabled ? ( + + ) : ( + + ), + hipaaOrBaaReportEnabled: ({ table: { hipaaOrBaaReportEnabled } }) => + hipaaOrBaaReportEnabled ? ( + + ) : ( + + ), }; diff --git a/packages/phrases/src/locales/de/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/de/translation/admin-console/subscription/quota-table.ts index baa8d76c5..699f64d64 100644 --- a/packages/phrases/src/locales/de/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/de/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: 'Kontingent', - tenant_limit: 'Mieter-Limit', + title: 'Grundlagen', base_price: 'Grundpreis', mau_limit: 'MAU-Limit', + included_tokens: 'Inkludierte Tokens', }, application: { title: 'Anwendungen', @@ -56,7 +56,7 @@ const quota_table = { organizations: 'Organisationen', monthly_active_organization: 'Monatlich aktive Organisationen', allowed_users_per_org: 'Erlaubte Benutzer pro Organisation', - invitation: 'Einladung (in Kürze)', + invitation: 'Einladung', org_roles: 'Org Rollen', org_permissions: 'Org Berechtigungen', just_in_time_provisioning: 'Bedarfsgesteuerte Bereitstellung', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: 'Support-Ticket', premium: 'Premium', email_ticket_support: 'E-Mail-Ticket-Support', - soc2_report: 'SOC2-Bericht (in Kürze)', - hipaa_or_baa_report: 'HIPAA/BAA-Bericht (in Kürze)', + soc2_report: 'SOC2-Bericht', + hipaa_or_baa_report: 'HIPAA/BAA-Bericht', }, unlimited: 'Unbegrenzt', contact: 'Kontakt', @@ -88,6 +88,11 @@ const quota_table = { 'Während der Beta-Phase kostenfrei zu benutzen. Wir werden mit der finalen Festlegung der organisationsbasierten nutzungsabhängigen Preise beginnen.', beta: 'Beta', add_on_beta: 'Add-on (Beta)', + million: '{{value, number}} Millionen', + mau_tip: + 'MAU (monatlich aktive Benutzer) bedeutet die Anzahl der eindeutigen Benutzer, die in einem Abrechnungsmonat mindestens einen Token mit Logto ausgetauscht haben.', + tokens_tip: + 'Alle Arten von Tokens, die von Logto ausgegeben wurden, einschließlich Zugriffstoken, Aktualisierungstoken, usw.', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/en/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/en/translation/admin-console/subscription/quota-table.ts index 8272afdf9..8636cbcf9 100644 --- a/packages/phrases/src/locales/en/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/en/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: 'Quota', - tenant_limit: 'Tenant limit', + title: 'Basics', base_price: 'Base price', mau_limit: 'MAU limit', + included_tokens: 'Included tokens', }, application: { title: 'Applications', @@ -56,7 +56,7 @@ const quota_table = { organizations: 'Organizations', monthly_active_organization: 'Monthly active organization', allowed_users_per_org: 'Allowed users per org', - invitation: 'Invitation (Coming soon)', + invitation: 'Invitation', org_roles: 'Org roles', org_permissions: 'Org permissions', just_in_time_provisioning: 'Just-in-time provisioning', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: 'Ticket support', premium: 'Premium', email_ticket_support: 'Email ticket support', - soc2_report: 'SOC2 report (Coming soon)', - hipaa_or_baa_report: 'HIPAA/BAA report (Coming soon)', + soc2_report: 'SOC2 report', + hipaa_or_baa_report: 'HIPAA/BAA report', }, unlimited: 'Unlimited', contact: 'Contact', @@ -88,6 +88,11 @@ const quota_table = { 'Free to use during the beta phase. We will begin charging once we finalize the org usage-based pricing.', beta: 'Beta', add_on_beta: 'Add-on (Beta)', + million: '{{value, number}} million', + mau_tip: + 'MAU (monthly active user) means the number of unique users who have exchanged at least one token with Logto in a billing month.', + tokens_tip: + 'All kinds of tokens that issued by Logto, including access token, refresh token, etc.', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/es/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/es/translation/admin-console/subscription/quota-table.ts index e493f10fe..7a345ad22 100644 --- a/packages/phrases/src/locales/es/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/es/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: 'Cuota', - tenant_limit: 'Límite de inquilinos', + title: 'Conceptos básicos', base_price: 'Precio base', mau_limit: 'Límite de MAU', + included_tokens: 'Tokens incluidos', }, application: { title: 'Aplicaciones', @@ -56,7 +56,7 @@ const quota_table = { organizations: 'Organizaciones', monthly_active_organization: 'Organización activa mensualmente', allowed_users_per_org: 'Usuarios permitidos por organización', - invitation: 'Invitación (Próximamente)', + invitation: 'Invitación', org_roles: 'Roles de organización', org_permissions: 'Permisos de organización', just_in_time_provisioning: 'Provisión justo a tiempo', @@ -88,6 +88,11 @@ const quota_table = { 'Gratis durante la fase beta. Comenzaremos a cobrar una vez que finalicemos los precios basados en el uso de la organización.', beta: 'Beta', add_on_beta: 'Complemento (Beta)', + million: '{{value, number}} millones', + mau_tip: + 'MAU (usuario activo mensual) significa el número de usuarios únicos que han intercambiado al menos un token con Logto en un mes de facturación.', + tokens_tip: + 'Todo tipo de tokens emitidos por Logto, incluyendo tokens de acceso, tokens de actualización, etc.', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/fr/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/fr/translation/admin-console/subscription/quota-table.ts index bb458db21..c71a6e4f2 100644 --- a/packages/phrases/src/locales/fr/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/fr/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: 'Quota', - tenant_limit: 'Limite de locataire', + title: 'Basiques', base_price: 'Prix de base', - mau_limit: 'Limite MAU', + mau_limit: 'Limite de MAU', + included_tokens: 'Jetons inclus', }, application: { title: 'Applications', @@ -56,7 +56,7 @@ const quota_table = { organizations: 'Organisations', monthly_active_organization: 'Organisation active mensuelle', allowed_users_per_org: 'Utilisateurs autorisés par organisation', - invitation: 'Invitation (Bientôt disponible)', + invitation: 'Invitation', org_roles: "Rôles d'organisation", org_permissions: "Permissions d'organisation", just_in_time_provisioning: 'Fourniture juste-à-temps', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: 'Ticket de support', premium: 'Premium', email_ticket_support: 'Support par ticket électronique', - soc2_report: 'Rapport SOC2 (prochainement)', - hipaa_or_baa_report: 'Rapport HIPAA/BAA (prochainement)', + soc2_report: 'Rapport SOC2', + hipaa_or_baa_report: 'Rapport HIPAA/BAA', }, unlimited: 'Illimité', contact: 'Contact', @@ -88,6 +88,11 @@ const quota_table = { "Gratuit à utiliser pendant la phase bêta. Nous commencerons à facturer une fois que nous aurons finalisé les tarifs basés sur l'usage de l'organisation.", beta: 'Bêta', add_on_beta: 'Module complémentaire (Bêta)', + million: '{{value, number}} million', + mau_tip: + "MAU (utilisateur actif mensuel) signifie le nombre d'utilisateurs uniques qui ont échangé au moins un jeton avec Logto au cours d'un mois de facturation.", + tokens_tip: + "Tous types de jetons émis par Logto, y compris les jetons d'accès, les jetons de rafraîchissement, etc.", }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/it/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/it/translation/admin-console/subscription/quota-table.ts index d1544a9b5..dec962de1 100644 --- a/packages/phrases/src/locales/it/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/it/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: 'Quota', - tenant_limit: 'Limite tenant', + title: 'Principi', base_price: 'Prezzo base', - mau_limit: 'Limite MAU', + mau_limit: 'Limite di MAU', + included_tokens: 'Token inclusi', }, application: { title: 'Applicazioni', @@ -56,7 +56,7 @@ const quota_table = { organizations: 'Organizzazioni', monthly_active_organization: 'Organizzazione attive mensili', allowed_users_per_org: 'Utenti permessi per org', - invitation: 'Invito (In arrivo)', + invitation: 'Invito', org_roles: 'Ruoli org', org_permissions: 'Permessi org', just_in_time_provisioning: 'Provisioning just-in-time', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: 'Ticket di assistenza', premium: 'Premium', email_ticket_support: 'Supporto tramite ticket e-mail', - soc2_report: 'Rapporto SOC2 (In arrivo)', - hipaa_or_baa_report: 'Rapporto HIPAA/BAA (In arrivo)', + soc2_report: 'Rapporto SOC2', + hipaa_or_baa_report: 'Rapporto HIPAA/BAA', }, unlimited: 'Illimitato', contact: 'Contatta', @@ -88,6 +88,11 @@ const quota_table = { "Gratuito durante la fase beta. Inizieremo a addebitare una volta che finalizziamo i prezzi basati sull'utilizzo dell'org.", beta: 'Beta', add_on_beta: 'Componente Aggiuntivo (Beta)', + million: '{{value, number}} milioni', + mau_tip: + 'MAU (utente attivo mensile) significa il numero di utenti unici che hanno scambiato almeno un token con Logto in un mese di fatturazione.', + tokens_tip: + 'Tutti i tipi di token emessi da Logto, inclusi token di accesso, token di aggiornamento, ecc.', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/ja/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/ja/translation/admin-console/subscription/quota-table.ts index 78d686534..9d058f35e 100644 --- a/packages/phrases/src/locales/ja/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/ja/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: 'クォータ', - tenant_limit: 'テナント制限', + title: '基本', base_price: '基本価格', - mau_limit: 'MAU制限', + mau_limit: 'MAU 制限', + included_tokens: '含まれるトークン', }, application: { title: 'アプリケーション', @@ -56,7 +56,7 @@ const quota_table = { organizations: '組織', monthly_active_organization: '月間アクティブ組織', allowed_users_per_org: '組織ごとの許可ユーザー数', - invitation: '招待状(近日公開)', + invitation: '招待状', org_roles: '組織ロール', org_permissions: '組織権限', just_in_time_provisioning: 'ジャストインタイムプロビジョニング', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: 'カスタマーチケット', premium: 'プレミアム', email_ticket_support: 'Emailチケットサポート', - soc2_report: 'SOC2レポート(近日公開)', - hipaa_or_baa_report: 'HIPAA/BAAレポート(近日公開)', + soc2_report: 'SOC2レポート', + hipaa_or_baa_report: 'HIPAA/BAAレポート', }, unlimited: '無制限', contact: 'お問い合わせ', @@ -88,6 +88,11 @@ const quota_table = { 'ベータフェーズ中は無料です。組織の使用に基づく価格設定が最終決定した後、請求を開始します。', beta: 'ベータ', add_on_beta: 'アドオン(ベータ版)', + million: '{{value, number}} 万', + mau_tip: + 'MAU(月間アクティブユーザー)とは、請求月において少なくとも1つのトークンをLogtoと交換したユニークなユーザーの数を指します。', + tokens_tip: + 'Logtoによって発行されたすべての種類のトークン、アクセストークン、リフレッシュトークンなどを含みます。', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/ko/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/ko/translation/admin-console/subscription/quota-table.ts index 6da666cdd..4dff2abbd 100644 --- a/packages/phrases/src/locales/ko/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/ko/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: '할당량', - tenant_limit: '테넌트 제한', + title: '기본', base_price: '기본 가격', - mau_limit: 'MAU 제한', + mau_limit: 'MAU 한도', + included_tokens: '포함된 토큰', }, application: { title: '애플리케이션', @@ -56,7 +56,7 @@ const quota_table = { organizations: '조직', monthly_active_organization: '월간 활성 조직', allowed_users_per_org: '조직 당 허용된 사용자', - invitation: '초대장 (곧 제공 예정)', + invitation: '초대장', org_roles: '조직 역할', org_permissions: '조직 권한', just_in_time_provisioning: '적시 프로비저닝', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: '지원 티켓', premium: '프리미엄', email_ticket_support: '이메일 티켓 지원', - soc2_report: 'SOC2 보고서 (곧 제공 예정)', - hipaa_or_baa_report: 'HIPAA/BAA 보고서 (곧 제공 예정)', + soc2_report: 'SOC2 보고서', + hipaa_or_baa_report: 'HIPAA/BAA 보고서', }, unlimited: '무제한', contact: '문의', @@ -87,6 +87,10 @@ const quota_table = { '베타 단계에서 무료입니다. 조직 사용량 기반 요금 책정 후 요금이 부과됩니다.', beta: '베타', add_on_beta: '부가 기능 (베타)', + million: '{{value, number}} 백만', + mau_tip: + 'MAU (월간 활성 사용자)는 빌링 월에 Logto와 적어도 하나의 토큰을 교환한 고유 사용자 수를 의미합니다.', + tokens_tip: 'Logto에서 발행한 모든 종류의 토큰, 액세스 토큰, 리프레시 토큰 등을 포함합니다.', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/subscription/quota-table.ts index 836ee4bf4..70245b9cf 100644 --- a/packages/phrases/src/locales/pl-pl/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: 'Limit', - tenant_limit: 'Limit lokatora', + title: 'Podstawy', base_price: 'Cena podstawowa', mau_limit: 'Limit MAU', + included_tokens: 'Zawarte tokeny', }, application: { title: 'Aplikacje', @@ -56,7 +56,7 @@ const quota_table = { organizations: 'Organizacje', monthly_active_organization: 'Miesięczna liczba aktywnych organizacji', allowed_users_per_org: 'Dozwolona liczba użytkowników na organizację', - invitation: 'Zaproszenie (Wkrótce)', + invitation: 'Zaproszenie', org_roles: 'Role organizacji', org_permissions: 'Uprawnienia organizacji', just_in_time_provisioning: 'Provisioning w trybie just-in-time', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: 'Zgłoszenie wsparcia', premium: 'Premium', email_ticket_support: 'Wsparcie za pośrednictwem biletów e-mail', - soc2_report: 'Raport SOC2 (Wkrótce)', - hipaa_or_baa_report: 'Raport HIPAA/BAA (Wkrótce)', + soc2_report: 'Raport SOC2', + hipaa_or_baa_report: 'Raport HIPAA/BAA', }, unlimited: 'Nieograniczone', contact: 'Kontakt', @@ -88,6 +88,11 @@ const quota_table = { 'Darmowe w trakcie fazy beta. Będziemy pobierać opłaty po zakończeniu fazy beta przy ustaleniu opłat w oparciu o użycie organizacji.', beta: 'Beta', add_on_beta: 'Dodatkowy (Beta)', + million: '{{value, number}} milion', + mau_tip: + 'MAU (miesięczny aktywny użytkownik) oznacza liczbę unikalnych użytkowników, którzy wymienili co najmniej jeden token z Logto w miesiącu rozliczeniowym.', + tokens_tip: + 'Wszystkie rodzaje tokenów wydanych przez Logto, w tym tokeny dostępu, tokeny odświeżania, itp.', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/subscription/quota-table.ts index 72ea6d8c7..6a3a8a4dd 100644 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: 'Cota', - tenant_limit: 'Limite de inquilino', + title: 'Básico', base_price: 'Preço base', mau_limit: 'Limite de MAU', + included_tokens: 'Tokens incluídos', }, application: { title: 'Aplicações', @@ -56,7 +56,7 @@ const quota_table = { organizations: 'Organizações', monthly_active_organization: 'Organização ativa mensal', allowed_users_per_org: 'Usuários permitidos por organização', - invitation: 'Convite (Em breve)', + invitation: 'Convite', org_roles: 'Funções de organização', org_permissions: 'Permissões de organização', just_in_time_provisioning: 'Provisionamento just-in-time', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: 'Ticket de suporte', premium: 'Premium', email_ticket_support: 'Suporte via e-mail', - soc2_report: 'Relatório SOC2 (Em breve)', - hipaa_or_baa_report: 'Relatório HIPAA/BAA (Em breve)', + soc2_report: 'Relatório SOC2', + hipaa_or_baa_report: 'Relatório HIPAA/BAA', }, unlimited: 'Ilimitado', contact: 'Contato', @@ -88,6 +88,11 @@ const quota_table = { 'Grátis durante a fase beta. Começaremos a cobrar uma vez que finalizarmos os preços baseados no uso da organização.', beta: 'Beta', add_on_beta: 'Complemento (Beta)', + million: '{{value, number}} milhão', + mau_tip: + 'MAU (usuário ativo mensal) significa o número de usuários únicos que trocaram pelo menos um token com o Logto em um mês de faturamento.', + tokens_tip: + 'Todos os tipos de tokens emitidos pelo Logto, incluindo token de acesso, token de atualização, etc.', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/subscription/quota-table.ts index 7f4e492ff..58b0ca2d2 100644 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: 'Quota', - tenant_limit: 'Limite do inquilino', + title: 'Básicos', base_price: 'Preço base', - mau_limit: 'Limite MAU', + mau_limit: 'Limite de MAU', + included_tokens: 'Tokens incluídos', }, application: { title: 'Aplicações', @@ -56,7 +56,7 @@ const quota_table = { organizations: 'Organizações', monthly_active_organization: 'Organização ativa mensalmente', allowed_users_per_org: 'Utilizadores permitidos por org', - invitation: 'Convite (Em breve)', + invitation: 'Convite', org_roles: 'Funções da organização', org_permissions: 'Permissões da organização', just_in_time_provisioning: 'Provisionamento just-in-time', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: 'Bilhete de suporte', premium: 'Premium', email_ticket_support: 'Suporte por bilhete de e-mail', - soc2_report: 'Relatório SOC2 (Em breve)', - hipaa_or_baa_report: 'Relatório HIPAA/BAA (Em breve)', + soc2_report: 'Relatório SOC2', + hipaa_or_baa_report: 'Relatório HIPAA/BAA', }, unlimited: 'Ilimitado', contact: 'Contactar', @@ -88,6 +88,11 @@ const quota_table = { 'Gratuito durante a fase beta. Começaremos a cobrar assim que finalizarmos os preços baseados no uso da organização.', beta: 'Beta', add_on_beta: 'Suplemento (Beta)', + million: '{{value, number}} milhão', + mau_tip: + 'MAU (utilizador ativo mensal) significa o número de utilizadores únicos que trocaram pelo menos um token com o Logto num mês de faturação.', + tokens_tip: + 'Todos os tipos de tokens emitidos pelo Logto, incluindo token de acesso, token de atualização, etc.', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/ru/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/ru/translation/admin-console/subscription/quota-table.ts index 20c50a130..71cfa32a7 100644 --- a/packages/phrases/src/locales/ru/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/ru/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: 'Квота', - tenant_limit: 'Лимит арендатора', + title: 'Основы', base_price: 'Базовая цена', - mau_limit: 'Лимит активных пользователей (MAU)', + mau_limit: 'Лимит MAU', + included_tokens: 'Включенные токены', }, application: { title: 'Приложения', @@ -56,7 +56,7 @@ const quota_table = { organizations: 'Организации', monthly_active_organization: 'Активная организация в месяц', allowed_users_per_org: 'Разрешенные пользователи в организации', - invitation: 'Приглашение (Скоро)', + invitation: 'Приглашение', org_roles: 'Роли организации', org_permissions: 'Права организации', just_in_time_provisioning: 'Пакетная настройка по запросу', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: 'Техническая поддержка', premium: 'Премиум', email_ticket_support: 'Поддержка по электронной почте', - soc2_report: 'Отчет SOC2 (Скоро)', - hipaa_or_baa_report: 'Отчет HIPAA/BAA (Скоро)', + soc2_report: 'Отчет SOC2', + hipaa_or_baa_report: 'Отчет HIPAA/BAA', }, unlimited: 'Неограниченно', contact: 'Связаться', @@ -88,6 +88,11 @@ const quota_table = { 'Бесплатно во время бета-тестирования. Мы начнем взимать плату, как только установим цены на использование по организации.', beta: 'Бета-тестирование', add_on_beta: 'Дополнение (бета-тестирование)', + million: '{{value, number}} миллионов', + mau_tip: + 'MAU (месячно активные пользователи) означает количество уникальных пользователей, которые обменялись хотя бы одним токеном с Logto за месяц расчета.', + tokens_tip: + 'Все виды токенов, выпущенных Logto, включая токены доступа, токены обновления и т. д.', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/subscription/quota-table.ts index abde9e158..ddd60e670 100644 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: 'Kota', - tenant_limit: 'Kiracı limiti', + title: 'Temel', base_price: 'Temel fiyat', mau_limit: 'MAU limiti', + included_tokens: 'Dahil olan jetonlar', }, application: { title: 'Uygulamalar', @@ -56,7 +56,7 @@ const quota_table = { organizations: 'Organizasyonlar', monthly_active_organization: 'Aylık aktif organizasyon', allowed_users_per_org: 'Organizasyon başına izin verilen kullanıcılar', - invitation: 'Davet (Yakında)', + invitation: 'Davet', org_roles: 'Org rolleri', org_permissions: 'Org izinleri', just_in_time_provisioning: 'İstisnai olana kadar temin', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: 'Müşteri destek bileti', premium: 'Premium', email_ticket_support: 'E-posta bileti desteği', - soc2_report: 'SOC2 raporu (Yakında)', - hipaa_or_baa_report: 'HIPAA/BAA raporu (Yakında)', + soc2_report: 'SOC2 raporu', + hipaa_or_baa_report: 'HIPAA/BAA raporu', }, unlimited: 'Sınırsız', contact: 'İletişim', @@ -88,6 +88,11 @@ const quota_table = { 'Free to use during the beta phase. We will begin charging once we finalize the org usage-based pricing.', beta: 'Beta', add_on_beta: 'Ek hizmet (Beta)', + million: '{{value, number}} milyon', + mau_tip: + 'MAU (aylık aktif kullanıcı) Logto ile en az bir token değiştiren benzersiz kullanıcı sayısını ifade eder.', + tokens_tip: + 'Logto tarafından ihraç edilen erişim tokeni, yenileme tokeni vb. dahil olmak üzere tüm token türleri.', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/subscription/quota-table.ts index daad38fb9..65adec6c0 100644 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: '配额', - tenant_limit: '租户限制', - base_price: '基本价格', + title: '基础', + base_price: '基础价格', mau_limit: 'MAU 限制', + included_tokens: '包含的令牌', }, application: { title: '应用', @@ -56,7 +56,7 @@ const quota_table = { organizations: '组织', monthly_active_organization: '每月活跃组织', allowed_users_per_org: '每组织允许的用户数', - invitation: '邀请(即将推出)', + invitation: '邀请', org_roles: '组织角色', org_permissions: '组织权限', just_in_time_provisioning: '即时配置', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: '客户支持票据', premium: '高级版', email_ticket_support: '邮件支持票据', - soc2_report: 'SOC2报告(即将推出)', - hipaa_or_baa_report: 'HIPAA/BAA报告(即将推出)', + soc2_report: 'SOC2报告', + hipaa_or_baa_report: 'HIPAA/BAA报告', }, unlimited: '无限制', contact: '联系', @@ -86,6 +86,9 @@ const quota_table = { '在测试阶段免费使用。一旦我们确定基于组织使用情况的定价,我们将开始收费。', beta: '测试版', add_on_beta: '附加功能(测试版)', + million: '{{value, number}} 百万', + mau_tip: 'MAU(月活跃用户)表示在一个计费月内与 Logto 交换过至少一个令牌的独立用户数量。', + tokens_tip: 'Logto 发行的所有类型令牌,包括访问令牌、刷新令牌等。', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/subscription/quota-table.ts index 2846cb425..4880d60ca 100644 --- a/packages/phrases/src/locales/zh-hk/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: '配額', - tenant_limit: '租戶限制', + title: '基本', base_price: '基本價格', mau_limit: 'MAU 限制', + included_tokens: '包含的令牌', }, application: { title: '應用程式', @@ -56,7 +56,7 @@ const quota_table = { organizations: '組織', monthly_active_organization: '每月活躍組織', allowed_users_per_org: '允許的組織用戶', - invitation: '邀請(即將推出)', + invitation: '邀請', org_roles: '組織角色', org_permissions: '組織權限', just_in_time_provisioning: '即時規定', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: '客戶支援票據', premium: '高級版', email_ticket_support: 'Email ticket support', - soc2_report: 'SOC2報告(即將推出)', - hipaa_or_baa_report: 'HIPAA/BAA報告(即將推出)', + soc2_report: 'SOC2報告', + hipaa_or_baa_report: 'HIPAA/BAA報告', }, unlimited: '無限制', contact: '聯絡', @@ -86,6 +86,9 @@ const quota_table = { '在測試版階段免費使用。我們確定組織基於使用情況的價格後將開始收費。', beta: '測試版', add_on_beta: '附加功能(測試版)', + million: '{{value, number}} 百萬', + mau_tip: 'MAU(月活躍用戶)表示在一個結算月內與 Logto 交換過至少一個令牌的獨立用戶數量。', + tokens_tip: 'Logto 發行的所有類型令牌,包括訪問令牌、刷新令牌等。', }; export default Object.freeze(quota_table); diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/subscription/quota-table.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/subscription/quota-table.ts index 10c1f1b76..1e04f774a 100644 --- a/packages/phrases/src/locales/zh-tw/translation/admin-console/subscription/quota-table.ts +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/subscription/quota-table.ts @@ -1,9 +1,9 @@ const quota_table = { quota: { - title: '配額', - tenant_limit: '租戶限制', + title: '基本', base_price: '基本價格', mau_limit: 'MAU 限制', + included_tokens: '包含的令牌', }, application: { title: '應用程式', @@ -56,7 +56,7 @@ const quota_table = { organizations: '組織', monthly_active_organization: '每月活躍組織', allowed_users_per_org: '組織允許用戶數', - invitation: '邀請(即將推出)', + invitation: '邀請', org_roles: '組織角色', org_permissions: '組織權限', just_in_time_provisioning: '即時供應管理', @@ -67,8 +67,8 @@ const quota_table = { customer_ticket: '客戶支援票證', premium: '進階版', email_ticket_support: '郵件票證支援', - soc2_report: 'SOC2 報告(即將推出)', - hipaa_or_baa_report: 'HIPAA/BAA 報告(即將推出)', + soc2_report: 'SOC2 報告', + hipaa_or_baa_report: 'HIPAA/BAA 報告', }, unlimited: '無限制', contact: '聯絡', @@ -87,6 +87,9 @@ const quota_table = { '在測試版階段免費使用。一旦我們確定組織使用量的定價,我們將開始收費。', beta: '測試版', add_on_beta: '附加功能(測試版)', + million: '{{value, number}} 百萬', + mau_tip: 'MAU(月活躍使用者)表示在一個計費月內與 Logto 交換過至少一個令牌的獨立使用者數量。', + tokens_tip: 'Logto 發行的所有類型令牌,包括訪問令牌、刷新令牌等。', }; export default Object.freeze(quota_table);