0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-04-07 23:01:25 -05:00

chore(console,experience): remove feature flag for dev tenant (#4921)

This commit is contained in:
Xiao Yijun 2023-11-21 15:48:54 +08:00 committed by GitHub
parent cb18c2ade8
commit b6d11c3379
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 61 additions and 224 deletions

View file

@ -1,6 +1,5 @@
import { Route, Routes } from 'react-router-dom';
import { isDevFeaturesEnabled } from '@/consts/env';
import ProtectedRoutes from '@/containers/ProtectedRoutes';
import { GlobalAnonymousRoute, GlobalRoute } from '@/contexts/TenantsProvider';
import Callback from '@/pages/Callback';
@ -18,12 +17,7 @@ function AppRoutes() {
<Route path={GlobalAnonymousRoute.Callback} element={<Callback />} />
<Route path={GlobalAnonymousRoute.SocialDemoCallback} element={<SocialDemoCallback />} />
<Route element={<ProtectedRoutes />}>
{isDevFeaturesEnabled && (
<Route
path={GlobalRoute.CheckoutSuccessCallback}
element={<CheckoutSuccessCallback />}
/>
)}
<Route path={GlobalRoute.CheckoutSuccessCallback} element={<CheckoutSuccessCallback />} />
<Route index element={<Main />} />
</Route>
</Routes>

View file

@ -7,7 +7,6 @@ import TenantLandingPageImageDark from '@/assets/images/tenant-landing-page-dark
import TenantLandingPageImage from '@/assets/images/tenant-landing-page.svg';
import { type TenantResponse } from '@/cloud/types/router';
import CreateTenantModal from '@/components/CreateTenantModal';
import { isDevFeaturesEnabled } from '@/consts/env';
import { TenantsContext } from '@/contexts/TenantsProvider';
import Button from '@/ds-components/Button';
import DynamicT from '@/ds-components/DynamicT';
@ -53,7 +52,6 @@ function TenantLandingPageContent({ className }: Props) {
/>
</div>
<CreateTenantModal
skipPlanSelection={!isDevFeaturesEnabled}
isOpen={isCreateModalOpen}
onClose={async (tenant?: TenantResponse) => {
if (tenant) {

View file

@ -1,4 +1,3 @@
import type { AdminConsoleKey } from '@logto/phrases';
import { Theme, TenantTag } from '@logto/schemas';
import { useState } from 'react';
import { Controller, FormProvider, useForm } from 'react-hook-form';
@ -9,7 +8,6 @@ import CreateTenantHeaderIconDark from '@/assets/icons/create-tenant-header-dark
import CreateTenantHeaderIcon from '@/assets/icons/create-tenant-header.svg';
import { useCloudApi } from '@/cloud/hooks/use-cloud-api';
import { type TenantResponse } from '@/cloud/types/router';
import { isDevFeaturesEnabled } from '@/consts/env';
import Button from '@/ds-components/Button';
import DangerousRaw from '@/ds-components/DangerousRaw';
import FormField from '@/ds-components/FormField';
@ -27,30 +25,11 @@ import { type CreateTenantData } from './type';
type Props = {
isOpen: boolean;
onClose: (tenant?: TenantResponse) => void;
// Todo @xiaoyijun delete this prop when dev tenant feature is ready
// eslint-disable-next-line react/boolean-prop-naming
skipPlanSelection?: boolean;
};
// Todo @xiaoyijun remove when dev tenant feature is ready
const tagOptions: Array<{ title: AdminConsoleKey; value: TenantTag }> = [
{
title: 'tenants.settings.environment_tag_development',
value: TenantTag.Development,
},
{
title: 'tenants.settings.environment_tag_staging',
value: TenantTag.Staging,
},
{
title: 'tenants.settings.environment_tag_production',
value: TenantTag.Production,
},
];
const availableTags = [TenantTag.Development, TenantTag.Production];
function CreateTenantModal({ isOpen, onClose, skipPlanSelection = false }: Props) {
function CreateTenantModal({ isOpen, onClose }: Props) {
const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
const [tenantData, setTenantData] = useState<CreateTenantData>();
const theme = useTheme();
@ -77,23 +56,6 @@ function CreateTenantModal({ isOpen, onClose, skipPlanSelection = false }: Props
};
const onCreateClick = handleSubmit(async (data: CreateTenantData) => {
/**
* Todo @xiaoyijun remove the original logic when dev tenant feature is ready
*/
if (!isDevFeaturesEnabled) {
/**
* Note: create tenant directly if it's from landing page,
* since we want the user to get into the console as soon as possible
*/
if (skipPlanSelection) {
await createTenant(data);
return;
}
setTenantData(data);
return;
}
const { tag } = data;
if (tag === TenantTag.Development) {
await createTenant(data);
@ -119,11 +81,7 @@ function CreateTenantModal({ isOpen, onClose, skipPlanSelection = false }: Props
>
<ModalLayout
title="tenants.create_modal.title"
subtitle={
isDevFeaturesEnabled
? 'tenants.create_modal.subtitle'
: 'tenants.create_modal.subtitle_deprecated'
}
subtitle="tenants.create_modal.subtitle"
headerIcon={
theme === Theme.Light ? <CreateTenantHeaderIcon /> : <CreateTenantHeaderIconDark />
}
@ -149,75 +107,52 @@ function CreateTenantModal({ isOpen, onClose, skipPlanSelection = false }: Props
error={Boolean(errors.name)}
/>
</FormField>
{isDevFeaturesEnabled && (
<FormField title="tenants.settings.tenant_region">
<RadioGroup type="small" value="eu" name="region">
<Radio
title={
<DangerousRaw>
<span className={styles.regionOptions}>🇪🇺 EU</span>
</DangerousRaw>
}
value="eu"
/>
<Radio
isDisabled
title={
<DangerousRaw>
<span className={styles.regionOptions}>
🇺🇸 US
<span className={styles.comingSoon}>{`(${t('general.coming_soon')})`}</span>
</span>
</DangerousRaw>
}
value="us"
/>
</RadioGroup>
</FormField>
)}
{!isDevFeaturesEnabled && (
<FormField title="tenants.settings.environment_tag">
<Controller
control={control}
name="tag"
rules={{ required: true }}
render={({ field: { onChange, value, name } }) => (
<RadioGroup type="small" value={value} name={name} onChange={onChange}>
{tagOptions.map(({ value: optionValue, title }) => (
<Radio key={optionValue} title={title} value={optionValue} />
))}
</RadioGroup>
)}
<FormField title="tenants.settings.tenant_region">
<RadioGroup type="small" value="eu" name="region">
<Radio
title={
<DangerousRaw>
<span className={styles.regionOptions}>🇪🇺 EU</span>
</DangerousRaw>
}
value="eu"
/>
<div className={styles.description}>
{t('tenants.settings.environment_tag_description')}
</div>
</FormField>
)}
{isDevFeaturesEnabled && (
<FormField title="tenants.create_modal.tenant_usage_purpose">
<Controller
control={control}
name="tag"
rules={{ required: true }}
render={({ field: { onChange, value, name } }) => (
<RadioGroup
type="card"
className={styles.envTagRadioGroup}
value={value}
name={name}
onChange={onChange}
>
{availableTags.map((tag) => (
<Radio key={tag} value={tag}>
<EnvTagOptionContent tag={tag} />
</Radio>
))}
</RadioGroup>
)}
<Radio
isDisabled
title={
<DangerousRaw>
<span className={styles.regionOptions}>
🇺🇸 US
<span className={styles.comingSoon}>{`(${t('general.coming_soon')})`}</span>
</span>
</DangerousRaw>
}
value="us"
/>
</FormField>
)}
</RadioGroup>
</FormField>
<FormField title="tenants.create_modal.tenant_usage_purpose">
<Controller
control={control}
name="tag"
rules={{ required: true }}
render={({ field: { onChange, value, name } }) => (
<RadioGroup
type="card"
className={styles.envTagRadioGroup}
value={value}
name={name}
onChange={onChange}
>
{availableTags.map((tag) => (
<Radio key={tag} value={tag}>
<EnvTagOptionContent tag={tag} />
</Radio>
))}
</RadioGroup>
)}
/>
</FormField>
</FormProvider>
<SelectTenantPlanModal
tenantData={tenantData}

View file

@ -6,7 +6,6 @@ import Tick from '@/assets/icons/tick.svg';
import { type TenantResponse } from '@/cloud/types/router';
import PlanName from '@/components/PlanName';
import TenantEnvTag from '@/components/TenantEnvTag';
import { isDevFeaturesEnabled } from '@/consts/env';
import { DropdownItem } from '@/ds-components/Dropdown';
import DynamicT from '@/ds-components/DynamicT';
import useSubscriptionPlans from '@/hooks/use-subscription-plans';
@ -47,8 +46,7 @@ function TenantDropdownItem({ tenantData, isSelected, onClick }: Props) {
/>
</div>
<div className={styles.planName}>
{/* Todo: @xiaoyijun remove dev tenant feature switch */}
{isDevFeaturesEnabled && tag === TenantTag.Development ? (
{tag === TenantTag.Development ? (
<DynamicT forKey="subscription.no_subscription" />
) : (
<PlanName name={tenantPlan.name} />

View file

@ -2,7 +2,7 @@ import { useContext } from 'react';
import MauExceededModal from '@/components/MauExceededModal';
import PaymentOverdueModal from '@/components/PaymentOverdueModal';
import { isCloud, isDevFeaturesEnabled } from '@/consts/env';
import { isCloud } from '@/consts/env';
import { TenantsContext } from '@/contexts/TenantsProvider';
import TenantEnvMigrationModal from './TenantEnvMigrationModal';
@ -24,7 +24,7 @@ function TenantNotificationContainer() {
<PaymentOverdueModal />
</>
)}
{isDevFeaturesEnabled && <TenantEnvMigrationModal />}
<TenantEnvMigrationModal />
</>
);
}

View file

@ -6,7 +6,7 @@ import { useCallback, useMemo, createContext, useState } from 'react';
import { useMatch, useNavigate } from 'react-router-dom';
import { type TenantResponse } from '@/cloud/types/router';
import { isCloud, isDevFeaturesEnabled } from '@/consts/env';
import { isCloud } from '@/consts/env';
/**
* The routes don't start with a tenant ID.
@ -179,7 +179,7 @@ function TenantsProvider({ children }: Props) {
},
isInitComplete,
currentTenantId,
isDevTenant: isDevFeaturesEnabled && currentTenant?.tag === TenantTag.Development,
isDevTenant: currentTenant?.tag === TenantTag.Development,
currentTenant,
currentTenantStatus,
setCurrentTenantStatus,

View file

@ -1,14 +1,11 @@
import type { AdminConsoleKey } from '@logto/phrases';
import { TenantTag } from '@logto/schemas';
import { conditional } from '@silverhand/essentials';
import { Controller, useFormContext } from 'react-hook-form';
import { useFormContext } from 'react-hook-form';
import { useTranslation } from 'react-i18next';
import FormCard from '@/components/FormCard';
import { isDevFeaturesEnabled } from '@/consts/env';
import CopyToClipboard from '@/ds-components/CopyToClipboard';
import FormField from '@/ds-components/FormField';
import RadioGroup, { Radio } from '@/ds-components/RadioGroup';
import TextInput from '@/ds-components/TextInput';
import { type TenantSettingsForm } from '../types.js';
@ -49,10 +46,7 @@ function ProfileForm({ currentTenantId }: Props) {
} = useFormContext<TenantSettingsForm>();
return (
<FormCard
title="tenants.settings.title"
description={conditional(isDevFeaturesEnabled && 'tenants.settings.description')}
>
<FormCard title="tenants.settings.title" description="tenants.settings.description">
<FormField title="tenants.settings.tenant_id">
<CopyToClipboard value={currentTenantId} variant="border" className={styles.textField} />
</FormField>
@ -62,34 +56,12 @@ function ProfileForm({ currentTenantId }: Props) {
error={Boolean(errors.profile?.name)}
/>
</FormField>
{isDevFeaturesEnabled && (
<FormField title="tenants.settings.tenant_region">
<TenantRegion />
</FormField>
)}
{!isDevFeaturesEnabled && (
<FormField title="tenants.settings.environment_tag">
<Controller
control={control}
name="profile.tag"
render={({ field: { onChange, value, name } }) => (
<RadioGroup type="small" value={value} name={name} onChange={onChange}>
{tagOptions.map(({ value: optionValue, title }) => (
<Radio key={optionValue} title={title} value={optionValue} />
))}
</RadioGroup>
)}
/>
<div className={styles.description}>
{t('tenants.settings.environment_tag_description')}
</div>
</FormField>
)}
{isDevFeaturesEnabled && (
<FormField title="tenants.settings.tenant_type">
<TenantEnvironment tag={getValues('profile.tag')} />
</FormField>
)}
<FormField title="tenants.settings.tenant_region">
<TenantRegion />
</FormField>
<FormField title="tenants.settings.tenant_type">
<TenantEnvironment tag={getValues('profile.tag')} />
</FormField>
</FormCard>
);
}

View file

@ -7,19 +7,17 @@ import { SignInIdentifier } from '@logto/schemas';
import i18next from 'i18next';
import { getSignInExperience } from '@/apis/settings';
import { isDevFeaturesEnabled } from '@/constants/env';
import type { SignInExperienceResponse } from '@/types';
import { filterSocialConnectors } from '@/utils/social-connectors';
const parseSignInExperienceResponse = (
response: SignInExperienceResponse
): SignInExperienceResponse => {
const { socialConnectors, isDevelopmentTenant, ...rest } = response;
const { socialConnectors, ...rest } = response;
return {
...rest,
socialConnectors: filterSocialConnectors(socialConnectors),
isDevelopmentTenant: isDevFeaturesEnabled && isDevelopmentTenant,
};
};

View file

@ -16,9 +16,6 @@ const tenants = {
tenant_region: 'Gehostete Region der Daten',
tenant_region_tip:
'Ihre Mandantenressourcen werden in {{region}} gehostet. <a>Mehr erfahren</a>',
environment_tag: 'Umgebungsmarke',
environment_tag_description:
'Tags verändern den Service nicht. Sie dienen lediglich zur Unterscheidung verschiedener Umgebungen.',
environment_tag_development: 'Entw',
environment_tag_staging: 'Staging',
environment_tag_production: 'Prod',
@ -45,7 +42,6 @@ const tenants = {
},
create_modal: {
title: 'Mieter erstellen',
subtitle_deprecated: 'Erstellen Sie einen neuen Mieter, um Ressourcen und Benutzer zu trennen.',
subtitle:
'Erstellen Sie einen neuen Mandanten mit isolierten Ressourcen und Benutzern. Die gehosteten Datenregionen und Mandantentypen können nach der Erstellung nicht geändert werden.',
tenant_usage_purpose: 'Wofür möchten Sie diesen Mieter verwenden?',

View file

@ -14,9 +14,6 @@ const tenants = {
tenant_name: 'Tenant Name',
tenant_region: 'Data hosted region',
tenant_region_tip: 'Your tenant resources are hosted in {{region}}. <a>Learn more</a>',
environment_tag: 'Environment Tag',
environment_tag_description:
"Tags don't alter the service. They simply guide you to differentiate various environments.",
environment_tag_development: 'Dev',
environment_tag_staging: 'Staging',
environment_tag_production: 'Prod',
@ -40,7 +37,6 @@ const tenants = {
},
create_modal: {
title: 'Create tenant',
subtitle_deprecated: 'Create a new tenant to separate resources and users.',
subtitle:
'Create a new tenant that has isolated resources and users. Data hosted region and tenant types cant be modified after creation.',
tenant_usage_purpose: 'What do you want to use this tenant for?',

View file

@ -16,9 +16,6 @@ const tenants = {
tenant_region: 'Región de alojamiento de datos',
tenant_region_tip:
'Sus recursos de inquilino se alojan en {{region}}. <a>Obtener más información</a>',
environment_tag: 'Etiqueta del entorno',
environment_tag_description:
'Las etiquetas no alteran el servicio. Simplemente te guían para diferenciar diversos entornos.',
environment_tag_development: 'Desarrollo',
environment_tag_staging: 'Pruebas',
environment_tag_production: 'Producción',
@ -45,7 +42,6 @@ const tenants = {
},
create_modal: {
title: 'Crear inquilino',
subtitle_deprecated: 'Cree un nuevo inquilino para separar recursos y usuarios.',
subtitle:
'Cree un nuevo inquilino que tenga recursos y usuarios aislados. La región de datos alojados y los tipos de inquilinos no se pueden modificar después de la creación.',
tenant_usage_purpose: '¿Para qué desea usar este inquilino?',

View file

@ -16,9 +16,6 @@ const tenants = {
tenant_region: "Région d'hébergement des données",
tenant_region_tip:
'Vos ressources de locataire sont hébergées dans {{region}}. <a>En savoir plus</a>',
environment_tag: "Tag de l'environnement",
environment_tag_description:
'Les balises ne modifient pas le service. Elles servent simplement à différencier différents environnements.',
environment_tag_development: 'Dev',
environment_tag_staging: 'Staging',
environment_tag_production: 'Prod',
@ -45,8 +42,6 @@ const tenants = {
},
create_modal: {
title: 'Créer un locataire',
subtitle_deprecated:
'Créez un nouveau locataire pour séparer les ressources et les utilisateurs.',
subtitle:
"Créez un nouveau locataire disposant de ressources et d'utilisateurs isolés. Les régions de données hébergées et les types de locataires ne peuvent pas être modifiés après la création.",
tenant_usage_purpose: 'Dans quel but souhaitez-vous utiliser ce locataire?',

View file

@ -16,9 +16,6 @@ const tenants = {
tenant_name: 'Nome Tenant',
tenant_region: 'Regione di hosting',
tenant_region_tip: 'I tuoi risorse inquilino sono ospitate in {{region}}. <a>Scopri di più</a>',
environment_tag: 'Tag Ambiente',
environment_tag_description:
'I tag non alterano il servizio. Semplicemente ti guidano a distinguere vari ambienti.',
environment_tag_development: 'Svil',
environment_tag_staging: 'Staging',
environment_tag_production: 'Prod',
@ -45,7 +42,6 @@ const tenants = {
},
create_modal: {
title: 'Crea nuovo tenant',
subtitle_deprecated: 'Crea un nuovo tenant per separare risorse e utenti.',
subtitle:
'Crea un nuovo inquilino con risorse e utenti isolati. Le regioni dei dati ospitati e i tipi di inquilino non possono essere modificati dopo la creazione.',
tenant_usage_purpose: 'Per cosa desideri utilizzare questo tenant?',

View file

@ -15,9 +15,6 @@ const tenants = {
tenant_name: 'テナント名',
tenant_region: 'データがホストされている地域',
tenant_region_tip: 'Your tenant resources are hosted in {{region}}. <a>Learn more</a>',
environment_tag: '環境タグ',
environment_tag_description:
'タグはサービスを変更しません。単にさまざまな環境を区別するためのガイドです。',
environment_tag_development: '開発',
environment_tag_staging: 'ステージング',
environment_tag_production: '本番',
@ -44,7 +41,6 @@ const tenants = {
},
create_modal: {
title: 'テナントを作成する',
subtitle_deprecated: 'リソースとユーザーを分離するには、新しいテナントを作成します。',
subtitle:
'分離されたリソースとユーザーを持つ新しいテナントを作成します。データがホストされる地域とテナントの種類は作成後に変更できません。',
tenant_usage_purpose: 'What do you want to use this tenant for?',

View file

@ -15,9 +15,6 @@ const tenants = {
tenant_name: '테넌트 이름',
tenant_region: '데이터 호스팅 영역',
tenant_region_tip: '당신의 테넌트 자원은 {{region}}에 호스팅됩니다. <a>자세히 알아보기</a>',
environment_tag: '환경 태그',
environment_tag_description:
'태그는 서비스를 변경하지 않습니다. 단지 다양한 환경을 구별하는 데 도움을 줍니다.',
environment_tag_development: '개발',
environment_tag_staging: '스테이징',
environment_tag_production: '프로드',
@ -44,7 +41,6 @@ const tenants = {
},
create_modal: {
title: '테넌트 만들기',
subtitle_deprecated: '자원 및 사용자를 분리하기 위한 새 테넌트를 만드세요.',
subtitle:
'분리된 리소스와 사용자를 가진 새 테넌트를 만듭니다. 데이터가 호스팅되는 지역 및 테넌트 유형은 생성 후에 수정할 수 없습니다.',
tenant_usage_purpose: '이 테넌트를 사용하는 목적은 무엇입니까?',

View file

@ -15,9 +15,6 @@ const tenants = {
tenant_name: 'Nazwa Najemcy',
tenant_region: 'Data hosted region',
tenant_region_tip: 'Your tenant resources are hosted in {{region}}. <a>Learn more</a>',
environment_tag: 'Tag Środowiska',
environment_tag_description:
'Tagi nie zmieniają usługi. Po prostu pomagają odróżnić różne środowiska.',
environment_tag_development: 'Dev',
environment_tag_staging: 'Staging',
environment_tag_production: 'Prod',
@ -44,7 +41,6 @@ const tenants = {
},
create_modal: {
title: 'Utwórz nowego najemcę',
subtitle_deprecated: 'Utwórz nowego najemcę aby oddzielić zasoby i użytkowników.',
subtitle:
'Utwórz nowego najemcę, który ma izolowane zasoby i użytkowników. Dane hostowanej regionu i typy najemców nie mogą być modyfikowane po utworzeniu.',
tenant_usage_purpose: 'Co chcesz zrobić z tym najemcą?',

View file

@ -16,9 +16,6 @@ const tenants = {
tenant_region: 'Região de hospedagem',
tenant_region_tip:
'Seus recursos do locatário estão hospedados na região {{region}}. <a>Learn more</a>',
environment_tag: 'Tag do Ambiente',
environment_tag_description:
'As tags não alteram o serviço. Elas apenas ajudam a diferenciar vários ambientes.',
environment_tag_development: 'Dev',
environment_tag_staging: 'Homol',
environment_tag_production: 'Prod',
@ -45,7 +42,6 @@ const tenants = {
},
create_modal: {
title: 'Criar inquilino',
subtitle_deprecated: 'Crie um novo inquilino para separar recursos e usuários.',
subtitle:
'Crie um novo locatário que tenha recursos e usuários isolados. As regiões de dados hospedados e os tipos de locatário não podem ser modificados após a criação.',
tenant_usage_purpose: 'Para que você deseja usar este locatário?',

View file

@ -16,9 +16,6 @@ const tenants = {
tenant_region: 'Região de hospedagem',
tenant_region_tip:
'Os recursos do seu inquilino são hospedados na região {{region}}. <a>Learn more</a>',
environment_tag: 'Tag de Ambiente',
environment_tag_description:
'As etiquetas não alteram o serviço. Simplesmente guiam-no para diferenciar vários ambientes.',
environment_tag_development: 'Dev',
environment_tag_staging: 'Staging',
environment_tag_production: 'Prod',
@ -45,7 +42,6 @@ const tenants = {
},
create_modal: {
title: 'Criar inquilino',
subtitle_deprecated: 'Crie um novo inquilino para separar recursos e utilizadores.',
subtitle:
'Crie um novo locatário que tenha recursos e utilizadores isolados. As regiões de dados hospedados e os tipos de locatário não podem ser modificados após a criação.',
tenant_usage_purpose: 'Para que pretende utilizar este inquilino?',

View file

@ -15,9 +15,6 @@ const tenants = {
tenant_name: 'Имя арендатора',
tenant_region: 'Регион размещения данных',
tenant_region_tip: 'Ваши ресурсы арендатора размещаются в {{region}}. <a>Узнайте больше</a>',
environment_tag: 'Тег окружения',
environment_tag_description:
'Теги не изменяют сервис. Они просто помогают отличать различные среды.',
environment_tag_development: 'Разр',
environment_tag_staging: 'Предпр',
environment_tag_production: 'Прод',
@ -44,7 +41,6 @@ const tenants = {
},
create_modal: {
title: 'Создать арендатора',
subtitle_deprecated: 'Создайте нового арендатора для разделения ресурсов и пользователей.',
subtitle:
'Создайте нового арендатора, чтобы разделить ресурсы и пользователей. Данные, размещенные в регионе, и типы арендаторов не могут быть изменены после создания.',
tenant_usage_purpose: 'Для чего вы хотите использовать этот арендатор?',

View file

@ -16,9 +16,6 @@ const tenants = {
tenant_region: 'Veriler barındırılan bölge',
tenant_region_tip:
'Kiracı kaynaklarınız {{region}} bölgesinde barındırılır. <a>Daha fazla bilgi</a>',
environment_tag: 'Çevre Etiketi',
environment_tag_description:
'Etiketler hizmeti değiştirmez. Sadece farklı ortamları ayırt etmek için rehberlik eder.',
environment_tag_development: 'Geliş',
environment_tag_staging: 'Staging',
environment_tag_production: 'Prod',
@ -45,7 +42,6 @@ const tenants = {
},
create_modal: {
title: 'Kiracı Oluştur',
subtitle_deprecated: 'Kaynakları ve kullanıcıları ayırmak için yeni bir kiracı oluşturun.',
subtitle:
'İzole kaynaklara ve kullanıcılara sahip yeni bir kiracı oluşturun. Verilerin barındırıldığı bölge ve kiracı türleri oluşturulduktan sonra değiştirilemez.',
tenant_usage_purpose: 'Bu kiracıyı ne için kullanmak istiyorsunuz?',

View file

@ -15,8 +15,6 @@ const tenants = {
tenant_name: '租户名称',
tenant_region: '数据托管地区',
tenant_region_tip: '您的租户资源托管在 {{region}}。 <a>了解更多</a>',
environment_tag: '环境标签',
environment_tag_description: '标签不会改变服务。它们只是指导您区分不同的环境。',
environment_tag_development: '开发',
environment_tag_staging: '预发布',
environment_tag_production: '产品',
@ -42,7 +40,6 @@ const tenants = {
},
create_modal: {
title: '创建租户',
subtitle_deprecated: '创建新的租户以分隔资源和用户。',
subtitle: '创建一个具有隔离资源和用户的新租户。数据托管的区域和租户类型在创建后无法修改。',
tenant_usage_purpose: '您想要使用此租户做什么?',
/** UNTRANSLATED */

View file

@ -15,8 +15,6 @@ const tenants = {
tenant_name: '租户名称',
tenant_region: '數據托管區域',
tenant_region_tip: '您的租戶資源托管在{{region}}。 <a>了解更多</a>',
environment_tag: '環境標識',
environment_tag_description: '標籤不會改變服務。它們只是協助您區分不同的環境。',
environment_tag_development: '開發',
environment_tag_staging: '預備',
environment_tag_production: '產品',
@ -42,7 +40,6 @@ const tenants = {
},
create_modal: {
title: '創建租戶',
subtitle_deprecated: '創建新租戶來區分資源及使用者。',
subtitle: '創建一個具有隔離資源和用戶的新租戶。數據托管的區域和租戶類型在創建後無法修改。',
tenant_usage_purpose: '您希望使用此租戶做什麼?',
/** UNTRANSLATED */

View file

@ -15,8 +15,6 @@ const tenants = {
tenant_name: '租戶名稱',
tenant_region: '資料托管地區',
tenant_region_tip: '您的租戶資源托管於 {{region}}。 <a>了解更多</a>',
environment_tag: '環境標籤',
environment_tag_description: '標籤不會改變服務。它們只是指導您區分各種環境。',
environment_tag_development: '開發',
environment_tag_staging: '預置',
environment_tag_production: '產品',
@ -42,7 +40,6 @@ const tenants = {
},
create_modal: {
title: '建立客戶',
subtitle_deprecated: '建立新租戶以區分資源和使用者。',
subtitle: '創建一個具有隔離資源和用戶的新租戶。數據托管的區域和租戶類型在創建後無法修改。',
tenant_usage_purpose: '您希望將此租戶用於什麼目的?',
/** UNTRANSLATED */