0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-04-14 23:11:31 -05:00

chore(console,phrases): fix console UI issues (#4585)

This commit is contained in:
Darcy Ye 2023-09-27 08:55:26 +08:00 committed by GitHub
parent c8bcbff736
commit acf460290c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
26 changed files with 120 additions and 86 deletions

View file

@ -15,12 +15,13 @@
}
}
.name {
display: block;
@include _.text-ellipsis;
}
.description {
@include _.text-ellipsis;
}
}
.icon {
width: 40px;
height: 40px;
margin-right: _.unit(2);
}

View file

@ -1,5 +1,5 @@
import type { Application, Role } from '@logto/schemas';
import { RoleType } from '@logto/schemas';
import { RoleType, Theme } from '@logto/schemas';
import { conditional } from '@silverhand/essentials';
import { useState } from 'react';
import { toast } from 'react-hot-toast';
@ -7,19 +7,22 @@ import { useTranslation } from 'react-i18next';
import useSWR from 'swr';
import Delete from '@/assets/icons/delete.svg';
import MachineToMachineRoleIconDark from '@/assets/icons/m2m-role-dark.svg';
import MachineToMachineRoleIcon from '@/assets/icons/m2m-role.svg';
import Plus from '@/assets/icons/plus.svg';
import EmptyDataPlaceholder from '@/components/EmptyDataPlaceholder';
import ItemPreview from '@/components/ItemPreview';
import { defaultPageSize } from '@/consts';
import Button from '@/ds-components/Button';
import ConfirmModal from '@/ds-components/ConfirmModal';
import IconButton from '@/ds-components/IconButton';
import Search from '@/ds-components/Search';
import Table from '@/ds-components/Table';
import TextLink from '@/ds-components/TextLink';
import { Tooltip } from '@/ds-components/Tip';
import type { RequestError } from '@/hooks/use-api';
import useApi from '@/hooks/use-api';
import useSearchParametersWatcher from '@/hooks/use-search-parameters-watcher';
import useTheme from '@/hooks/use-theme';
import AssignToRoleModal from '@/pages/Roles/components/AssignToRoleModal';
import { buildUrl, formatSearchKeyword } from '@/utils/url';
@ -33,6 +36,7 @@ type Props = {
function MachineToMachineApplicationRoles({ application }: Props) {
const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
const theme = useTheme();
const [{ page, keyword }, updateSearchParameters] = useSearchParametersWatcher({
page: 1,
@ -86,9 +90,17 @@ function MachineToMachineApplicationRoles({ application }: Props) {
dataIndex: 'name',
colSpan: 6,
render: ({ id, name }) => (
<TextLink className={styles.name} to={`/roles/${id}`}>
{name}
</TextLink>
<ItemPreview
title={name}
to={`/roles/${id}`}
icon={
theme === Theme.Dark ? (
<MachineToMachineRoleIconDark />
) : (
<MachineToMachineRoleIcon />
)
}
/>
),
},
{

View file

@ -238,13 +238,11 @@ function ApplicationDetails() {
>
{t('application_details.advanced_settings')}
</TabNavItem>
{isDevFeaturesEnabled && (
{isDevFeaturesEnabled && data.type === ApplicationType.MachineToMachine && (
<>
{data.type === ApplicationType.MachineToMachine && (
<TabNavItem href={`/applications/${data.id}/${ApplicationDetailsTabs.Roles}`}>
{t('application_details.application_roles')}
</TabNavItem>
)}
<TabNavItem href={`/applications/${data.id}/${ApplicationDetailsTabs.Roles}`}>
{t('application_details.application_roles')}
</TabNavItem>
<TabNavItem href={`/applications/${data.id}/${ApplicationDetailsTabs.Logs}`}>
{t('application_details.machine_logs')}
</TabNavItem>
@ -264,13 +262,11 @@ function ApplicationDetails() {
<TabWrapper isActive={tab === ApplicationDetailsTabs.AdvancedSettings}>
<AdvancedSettings app={data} oidcConfig={oidcConfig} />
</TabWrapper>
{isDevFeaturesEnabled && (
{isDevFeaturesEnabled && data.type === ApplicationType.MachineToMachine && (
<>
{data.type === ApplicationType.MachineToMachine && (
<TabWrapper isActive={tab === ApplicationDetailsTabs.Roles}>
<MachineToMachineApplicationRoles application={data} />
</TabWrapper>
)}
<TabWrapper isActive={tab === ApplicationDetailsTabs.Roles}>
<MachineToMachineApplicationRoles application={data} />
</TabWrapper>
<TabWrapper isActive={tab === ApplicationDetailsTabs.Logs}>
<MachineLogs applicationId={data.id} />
</TabWrapper>

View file

@ -18,3 +18,9 @@
}
}
}
.icon {
width: 40px;
height: 40px;
margin-right: _.unit(2);
}

View file

@ -1,4 +1,4 @@
import { type Application, RoleType, Theme } from '@logto/schemas';
import { type Application, RoleType, ApplicationType } from '@logto/schemas';
import { conditional } from '@silverhand/essentials';
import { useState } from 'react';
import { toast } from 'react-hot-toast';
@ -7,9 +7,8 @@ import { useOutletContext } from 'react-router-dom';
import useSWR from 'swr';
import Delete from '@/assets/icons/delete.svg';
import MachineToMachineIconDark from '@/assets/icons/m2m-role-dark.svg';
import MachineToMachineIcon from '@/assets/icons/m2m-role.svg';
import Plus from '@/assets/icons/plus.svg';
import ApplicationIcon from '@/components/ApplicationIcon';
import EmptyDataPlaceholder from '@/components/EmptyDataPlaceholder';
import ItemPreview from '@/components/ItemPreview';
import { defaultPageSize } from '@/consts';
@ -22,7 +21,6 @@ import { Tooltip } from '@/ds-components/Tip';
import type { RequestError } from '@/hooks/use-api';
import useApi from '@/hooks/use-api';
import useSearchParametersWatcher from '@/hooks/use-search-parameters-watcher';
import useTheme from '@/hooks/use-theme';
import AssignRoleModal from '@/pages/Roles/components/AssignRoleModal';
import { buildUrl, formatSearchKeyword } from '@/utils/url';
@ -36,7 +34,6 @@ function RoleApplications() {
const {
role: { id: roleId },
} = useOutletContext<RoleDetailsOutletContext>();
const theme = useTheme();
const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
@ -97,7 +94,10 @@ function RoleApplications() {
<ItemPreview
title={application.name}
icon={
theme === Theme.Light ? <MachineToMachineIcon /> : <MachineToMachineIconDark />
<ApplicationIcon
type={ApplicationType.MachineToMachine}
className={styles.icon}
/>
}
to={`/applications/${application.id}`}
/>

View file

@ -9,8 +9,8 @@ import { Outlet, useLocation, useParams } from 'react-router-dom';
import useSWR, { useSWRConfig } from 'swr';
import Delete from '@/assets/icons/delete.svg';
import MachineToMachineIconDark from '@/assets/icons/m2m-role-dark.svg';
import MachineToMachineIcon from '@/assets/icons/m2m-role.svg';
import MachineToMachineRoleIconDark from '@/assets/icons/m2m-role-dark.svg';
import MachineToMachineRoleIcon from '@/assets/icons/m2m-role.svg';
import More from '@/assets/icons/more.svg';
import UserRoleIconDark from '@/assets/icons/user-role-dark.svg';
import UserRoleIcon from '@/assets/icons/user-role.svg';
@ -40,9 +40,9 @@ const getRoleIcon = (type: RoleType, isDarkMode: boolean) => {
}
return isDarkMode ? (
<MachineToMachineIconDark className={styles.icon} />
<MachineToMachineRoleIconDark className={styles.icon} />
) : (
<MachineToMachineIcon className={styles.icon} />
<MachineToMachineRoleIcon className={styles.icon} />
);
};

View file

@ -1,8 +1,8 @@
import { type RoleResponse, RoleType } from '@logto/schemas';
import { type RoleResponse, RoleType, ApplicationType } from '@logto/schemas';
import classNames from 'classnames';
import MachineToMachineRole from '@/assets/icons/m2m-role.svg';
import type { GetArrayElementType } from '@/cloud/types/router';
import ApplicationIcon from '@/components/ApplicationIcon';
import UserAvatar from '@/components/UserAvatar';
import DynamicT from '@/ds-components/DynamicT';
@ -27,14 +27,17 @@ function AssignedEntities({ entities, count, type }: Props) {
return count ? (
<div className={styles.entities}>
<div className={styles.avatars}>
{type === RoleType.User
? entities.map((entity) => (
<UserAvatar key={entity.id} className={styles.avatar} user={entity} size="small" />
))
: Array.from({ length: entities.length }, () => (
// eslint-disable-next-line react/jsx-key
<MachineToMachineRole className={classNames(styles.applicationIcon, styles.avatar)} />
))}
{entities.map((entity) =>
type === RoleType.User ? (
<UserAvatar key={entity.id} className={styles.avatar} user={entity} size="small" />
) : (
<ApplicationIcon
key={entity.id}
type={ApplicationType.MachineToMachine}
className={classNames(styles.applicationIcon, styles.avatar)}
/>
)
)}
</div>
<span className={styles.count}>
<DynamicT

View file

@ -6,8 +6,8 @@ import { useTranslation } from 'react-i18next';
import { useLocation } from 'react-router-dom';
import useSWR from 'swr';
import MachineToMachineIconDark from '@/assets/icons/m2m-role-dark.svg';
import MachineToMachineIcon from '@/assets/icons/m2m-role.svg';
import MachineToMachineRoleIconDark from '@/assets/icons/m2m-role-dark.svg';
import MachineToMachineRoleIcon from '@/assets/icons/m2m-role.svg';
import Plus from '@/assets/icons/plus.svg';
import UserRoleIconDark from '@/assets/icons/user-role-dark.svg';
import UserRoleIcon from '@/assets/icons/user-role.svg';
@ -41,7 +41,7 @@ const getRoleIcon = (type: RoleType, isDarkMode: boolean) => {
return isDarkMode ? <UserRoleIconDark /> : <UserRoleIcon />;
}
return isDarkMode ? <MachineToMachineIconDark /> : <MachineToMachineIcon />;
return isDarkMode ? <MachineToMachineRoleIconDark /> : <MachineToMachineRoleIcon />;
};
function Roles() {

View file

@ -15,11 +15,6 @@
}
}
.name {
display: block;
@include _.text-ellipsis;
}
.description {
@include _.text-ellipsis;
}

View file

@ -1,5 +1,5 @@
import type { Role } from '@logto/schemas';
import { RoleType } from '@logto/schemas';
import { RoleType, Theme } from '@logto/schemas';
import { conditional } from '@silverhand/essentials';
import { useState } from 'react';
import { toast } from 'react-hot-toast';
@ -9,18 +9,21 @@ import useSWR from 'swr';
import Delete from '@/assets/icons/delete.svg';
import Plus from '@/assets/icons/plus.svg';
import UserRoleIconDark from '@/assets/icons/user-role-dark.svg';
import UserRoleIcon from '@/assets/icons/user-role.svg';
import EmptyDataPlaceholder from '@/components/EmptyDataPlaceholder';
import ItemPreview from '@/components/ItemPreview';
import { defaultPageSize } from '@/consts';
import Button from '@/ds-components/Button';
import ConfirmModal from '@/ds-components/ConfirmModal';
import IconButton from '@/ds-components/IconButton';
import Search from '@/ds-components/Search';
import Table from '@/ds-components/Table';
import TextLink from '@/ds-components/TextLink';
import { Tooltip } from '@/ds-components/Tip';
import type { RequestError } from '@/hooks/use-api';
import useApi from '@/hooks/use-api';
import useSearchParametersWatcher from '@/hooks/use-search-parameters-watcher';
import useTheme from '@/hooks/use-theme';
import AssignToRoleModal from '@/pages/Roles/components/AssignToRoleModal';
import { buildUrl, formatSearchKeyword } from '@/utils/url';
@ -31,6 +34,7 @@ import * as styles from './index.module.scss';
const pageSize = defaultPageSize;
function UserRoles() {
const theme = useTheme();
const { user } = useOutletContext<UserDetailsOutletContext>();
const { id: userId } = user;
@ -88,9 +92,11 @@ function UserRoles() {
dataIndex: 'name',
colSpan: 6,
render: ({ id, name }) => (
<TextLink className={styles.name} to={`/roles/${id}`}>
{name}
</TextLink>
<ItemPreview
title={name}
to={`/roles/${id}`}
icon={theme === Theme.Dark ? <UserRoleIconDark /> : <UserRoleIcon />}
/>
),
},
{

View file

@ -280,7 +280,7 @@ describe('RBAC', () => {
text: 'Roles',
});
const roleRow = await expect(page).toMatchElement('table tbody tr:has(td a[class$=name])', {
const roleRow = await expect(page).toMatchElement('table tbody tr:has(td a[class$=title])', {
text: roleName,
});

View file

@ -5,7 +5,8 @@ const application_details = {
settings: 'Einstellungen',
settings_description:
'Anwendungen werden verwendet, um Ihre Anwendungen in Logto für OIDC, Anmeldeerfahrung, Audit-Logs usw. zu identifizieren.',
advanced_settings: 'Erweiterte Einstellungen',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'Erweiterte Einstellungen beinhalten OIDC-bezogene Begriffe. Sie können den Token-Endpunkt für weitere Informationen überprüfen.',
/** UNTRANSLATED */
@ -68,7 +69,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -5,7 +5,8 @@ const application_details = {
settings: 'Settings',
settings_description:
'Applications are used to identify your applications in Logto for OIDC, sign-in experience, audit logs, etc.',
advanced_settings: 'Advanced Settings',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'Advanced settings include OIDC related terms. You can check out the Token Endpoint for more information.',
/** UNTRANSLATED */
@ -68,7 +69,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -5,7 +5,8 @@ const application_details = {
settings: 'Configuraciones',
settings_description:
'Las aplicaciones se utilizan para identificar tus aplicaciones en Logto para OIDC, experiencia de inicio de sesión, registros de auditoría, etc.',
advanced_settings: 'Configuraciones Avanzadas',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'Las configuraciones avanzadas incluyen términos relacionados con OIDC. Puedes revisar el Endpoint del Token para obtener más información.',
/** UNTRANSLATED */
@ -68,7 +69,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -5,7 +5,8 @@ const application_details = {
settings: 'Paramètres',
settings_description:
"Les applications sont utilisées pour identifier vos applications dans Logto pour OIDC, l'expérience de connexion, les journaux d'audit, etc.",
advanced_settings: 'Paramètres avancés',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
"Les paramètres avancés comprennent des termes liés à OIDC. Vous pouvez consulter le point de terminaison de jeton pour plus d'informations.",
/** UNTRANSLATED */
@ -68,7 +69,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -5,7 +5,8 @@ const application_details = {
settings: 'Impostazioni',
settings_description:
'Le applicazioni vengono utilizzate per identificare le tue applicazioni in Logto per OIDC, esperienza di accesso, registri di controllo, ecc.',
advanced_settings: 'Impostazioni avanzate',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
"Le impostazioni avanzate includono termini correlati all'OIDC. Puoi consultare il Endpoint Token per ulteriori informazioni.",
/** UNTRANSLATED */
@ -68,7 +69,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -5,7 +5,8 @@ const application_details = {
settings: '設定',
settings_description:
'アプリケーションは、Logto for OIDC、サインインエクスペリエンス、監査ログなどでアプリケーションを識別するために使用されます。',
advanced_settings: '高度な設定',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'高度な設定にはOIDC関連用語が含まれます。詳細については、トークンエンドポイントを確認してください。',
/** UNTRANSLATED */
@ -68,7 +69,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -5,7 +5,8 @@ const application_details = {
settings: '설정',
settings_description:
'애플리케이션은 Logto for OIDC, 로그인 환경, 감사 로그 등에서 애플리케이션을 식별하는 데 사용돼요.',
advanced_settings: '고급 설정',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'고급 설정에는 OIDC 관련 용어가 포함돼요. 자세한 내용은 토큰 엔드포인트에서 확인할 수 있어요.',
/** UNTRANSLATED */
@ -68,7 +69,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -5,7 +5,8 @@ const application_details = {
settings: 'Ustawienia',
settings_description:
'Aplikacje są używane do identyfikowania Twoich aplikacji w Logto dla OIDC, doświadczenia logowania, dzienników audytowych itp.',
advanced_settings: 'Zaawansowane ustawienia',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'Zaawansowane ustawienia obejmują związane z OIDC terminy. Możesz sprawdzić punkt końcowy Token dla bardziej szczegółowych informacji.',
/** UNTRANSLATED */
@ -68,7 +69,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -5,7 +5,8 @@ const application_details = {
settings: 'Configurações',
settings_description:
'Os aplicativos são usados para identificar seus aplicativos no Logto para OIDC, experiência de login, logs de auditoria, etc.',
advanced_settings: 'Configurações avançadas',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'As configurações avançadas incluem termos relacionados ao OIDC. Você pode conferir o Token Endpoint para obter mais informações.',
/** UNTRANSLATED */
@ -68,7 +69,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -5,7 +5,8 @@ const application_details = {
settings: 'Definições',
settings_description:
'As aplicações são utilizadas para identificar as suas aplicações no Logto para OIDC, experiência de início de sessão, registos de auditoria, etc.',
advanced_settings: 'Configurações avançadas',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'As configurações avançadas incluem termos relacionados com OIDC. Pode consultar o Endpoint do Token para obter mais informações.',
/** UNTRANSLATED */
@ -68,7 +69,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -5,7 +5,8 @@ const application_details = {
settings: 'Настройки',
settings_description:
'Приложения используются для идентификации ваших приложений в Logto для OIDC, опыта входа, аудита и т. Д.',
advanced_settings: 'Расширенные настройки',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'Расширенные настройки включают связанные с OIDC термины. Вы можете проверить конечную точку токена для получения дополнительной информации.',
/** UNTRANSLATED */
@ -68,7 +69,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -5,7 +5,8 @@ const application_details = {
settings: 'Ayarlar',
settings_description:
'Uygulamalar, Logto için OIDC, oturum açma deneyimi, denetim kayıtları vb. alanlarda uygulamalarınızı tanımlamak için kullanılır.',
advanced_settings: 'Gelişmiş Ayarlar',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'Gelişmiş ayarlar, OIDC ile ilgili terimleri içerir. Daha fazla bilgi için Token Bitiş Noktasına bakabilirsiniz.',
/** UNTRANSLATED */
@ -68,7 +69,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -4,7 +4,8 @@ const application_details = {
check_guide: '查看指南',
settings: '设置',
settings_description: '应用程序用于在 Logto OIDC、登录体验、审计日志等方面识别你的应用程序。',
advanced_settings: '高级设置',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'高级设置包括 OIDC 相关术语。你可以查看 Token Endpoint 以获取更多信息。',
/** UNTRANSLATED */
@ -65,7 +66,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -4,7 +4,8 @@ const application_details = {
check_guide: '查看指南',
settings: '設定',
settings_description: '應用程式用於在 Logto OIDC、登入體驗、審計日誌等方面識別你的應用程式。',
advanced_settings: '高級設定',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'高級設定包括 OIDC 相關術語。你可以查看 Token Endpoint 以獲取更多資訊。',
/** UNTRANSLATED */
@ -65,7 +66,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */

View file

@ -4,7 +4,8 @@ const application_details = {
check_guide: '查看指南',
settings: '設置',
settings_description: '應用程式用於在 Logto OIDC、登錄體驗、審計日誌等方面識別你的應用程式。',
advanced_settings: '高級設置',
/** UNTRANSLATED */
advanced_settings: 'Advanced settings',
advanced_settings_description:
'高級設置包括 OIDC 相關術語。你可以查看 Token Endpoint 以獲取更多信息。',
/** UNTRANSLATED */
@ -66,7 +67,7 @@ const application_details = {
assign_button: 'Assign Roles',
/** UNTRANSLATED */
delete_description:
'This action will remove this role from this user. The role itself will still exist, but it will no longer be associated with this user.',
'This action will remove this role from this machine-to-machine app. The role itself will still exist, but it will no longer be associated with this machine-to-machine app.',
/** UNTRANSLATED */
deleted: '{{name}} was successfully removed from this user.',
/** UNTRANSLATED */