diff --git a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/CreateOrEditThemeForm.tsx b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/CreateOrEditThemeForm.tsx index 604d58c90..75ba14943 100644 --- a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/CreateOrEditThemeForm.tsx +++ b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/CreateOrEditThemeForm.tsx @@ -5,6 +5,7 @@ import { Box, Button, IconButton, Stack, } from '@tokens-studio/ui'; import { NavArrowLeft } from 'iconoir-react'; +import { useTranslation } from 'react-i18next'; import { allTokenSetsSelector, themesListSelector, usedTokenSetSelector } from '@/selectors'; import { StyledNameInputBox } from './StyledNameInputBox'; import { StyledCreateOrEditThemeFormHeaderFlex } from './StyledCreateOrEditThemeFormHeaderFlex'; @@ -53,6 +54,7 @@ export const CreateOrEditThemeForm: React.FC ([...new Set(themes.filter((t) => t?.group).map((t) => t.group as string))]), [themes]); + const { t } = useTranslation(['tokens', 'errors']); const treeOrListItems = useMemo(() => ( githubMfsEnabled @@ -60,13 +62,23 @@ export const CreateOrEditThemeForm: React.FC({ + const { + register, handleSubmit, control, resetField, + } = useForm({ defaultValues: { tokenSets: { ...selectedTokenSets }, ...defaultValues, }, }); + const handleGroupKeyDown = useCallback((e: React.KeyboardEvent) => { + if (e.key === 'Escape') { + e.stopPropagation(); + resetField('group'); + setShowGroupInput(false); + } + }, [resetField]); + const TokenSetThemeItemInput = useCallback((props: React.PropsWithChildren<{ item: TreeItem }>) => ( } size="small" @@ -117,7 +129,8 @@ export const CreateOrEditThemeForm: React.FC} onClick={handleAddGroup} size="small" - css={{ display: 'flex', alignItems: 'center', height: '28px' }} > - Add group + {t('addGroup')} ) } @@ -162,7 +174,7 @@ export const CreateOrEditThemeForm: React.FC @@ -172,8 +184,8 @@ export const CreateOrEditThemeForm: React.FC - - + + )} @@ -188,7 +200,9 @@ export const CreateOrEditThemeForm: React.FC - Note: When using multi-dimensional themes where values depend on tokens of another theme, connecting styles might not work as expected. + + {t('stylesVarMultiDimensionalThemesWarning')} + )} diff --git a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ManageThemesModal.tsx b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ManageThemesModal.tsx index ec9bc0b5f..00e191e99 100644 --- a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ManageThemesModal.tsx +++ b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ManageThemesModal.tsx @@ -5,6 +5,7 @@ import { useDispatch, useSelector } from 'react-redux'; import omit from 'just-omit'; import { Button, EmptyState } from '@tokens-studio/ui'; import { styled } from '@stitches/react'; +import { useTranslation } from 'react-i18next'; import { activeThemeSelector, themesListSelector } from '@/selectors'; import Modal from '../Modal'; import { Dispatch } from '@/app/store'; @@ -44,8 +45,8 @@ export const ManageThemesModal: React.FC(false); - const [IsThemeGroupNameEditing, setIsThemeGroupNameEditing] = useState(false); const treeItems = themeListToTree(themes); + const { t } = useTranslation(['tokens']); const themeEditorDefaultValues = useMemo(() => { const themeObject = themes.find(({ id }) => id === themeEditorOpen); @@ -60,10 +61,8 @@ export const ManageThemesModal: React.FC { - if (!IsThemeGroupNameEditing) { - dispatch.uiState.setManageThemesModalOpen(false); - } - }, [IsThemeGroupNameEditing, dispatch]); + dispatch.uiState.setManageThemesModalOpen(false); + }, [dispatch]); const handleToggleThemeEditor = useCallback((theme?: ThemeObject) => { if (theme && typeof theme !== 'boolean') { @@ -80,7 +79,7 @@ export const ManageThemesModal: React.FC { if (typeof themeEditorOpen === 'string') { - const confirmDelete = await confirm({ text: 'Are you sure you want to delete this theme?', confirmAction: 'Delete', variant: 'danger' }); + const confirmDelete = await confirm({ text: t('confirmDeleteTheme'), confirmAction: t('delete'), variant: 'danger' }); if (confirmDelete) { track('Delete theme', { id: themeEditorOpen }); dispatch.tokenState.deleteTheme(themeEditorOpen); @@ -152,15 +151,11 @@ export const ManageThemesModal: React.FC { - setIsThemeGroupNameEditing(editing); - }, []); - return ( } onClick={handleToggleOpenThemeEditor} > - New theme + {t('newTheme')} )} {themeEditorOpen && ( @@ -185,7 +180,7 @@ export const ManageThemesModal: React.FC - Delete + {t('delete')} )} @@ -195,7 +190,7 @@ export const ManageThemesModal: React.FC - Cancel + {t('cancel')} @@ -215,8 +210,8 @@ export const ManageThemesModal: React.FC )} {!!themes.length && !themeEditorOpen && ( @@ -237,7 +232,6 @@ export const ManageThemesModal: React.FC ) } diff --git a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ThemeGroupDropDownMenu.tsx b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ThemeGroupDropDownMenu.tsx index 6ca3261ae..8c96cb535 100644 --- a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ThemeGroupDropDownMenu.tsx +++ b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ThemeGroupDropDownMenu.tsx @@ -44,7 +44,7 @@ export const ThemeGroupDropDownMenu: React.FC { selectedGroup ? ( - ) : ( @@ -54,10 +54,9 @@ export const ThemeGroupDropDownMenu: React.FC} size="small" - css={{ display: 'flex', alignItems: 'center', height: '28px' }} asDropdown > - Add group + {t('addGroup')} ) diff --git a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ThemeListGroupHeader.tsx b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ThemeListGroupHeader.tsx index e76fe7a9f..ebebfdab4 100644 --- a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ThemeListGroupHeader.tsx +++ b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ThemeListGroupHeader.tsx @@ -13,42 +13,47 @@ import Input from '../Input'; import IconPencil from '@/icons/pencil.svg'; import { Dispatch } from '@/app/store'; import { INTERNAL_THEMES_NO_GROUP } from '@/constants/InternalTokenGroup'; +import { Xmark, Check } from 'iconoir-react'; type Props = React.PropsWithChildren<{ groupName: string label: string - setIsGroupEditing: (value: boolean) => void }>; export function ThemeListGroupHeader({ groupName, label, - setIsGroupEditing, }: Props) { const dispatch = useDispatch(); const dragContext = useContext(DragControlsContext); const editProhibited = useSelector(editProhibitedSelector); const [currentGroupName, setCurrentGroupName] = useState(groupName === INTERNAL_THEMES_NO_GROUP ? '' : groupName); - const [isEditing, setIsEditing] = useState(false); const handleDragStart = useCallback((event: React.PointerEvent) => { dragContext.controls?.start(event); }, [dragContext.controls]); + const [isGroupNameEditing, setIsGroupNameEditing] = useState(false); const handleEditButtonClick = useCallback(() => { - setIsEditing(true); - setIsGroupEditing(true); - }, [setIsEditing, setIsGroupEditing]); + setIsGroupNameEditing(true); + }, [setIsGroupNameEditing]); + const handleCancel = useCallback(() => { + setCurrentGroupName(groupName); + setIsGroupNameEditing(false); + }, [setIsGroupNameEditing]); + + const handleSubmit = React.useCallback(() => { + dispatch.tokenState.updateThemeGroupName(groupName, currentGroupName); + setIsGroupNameEditing(false); + }, [currentGroupName, groupName]); const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => { if (e.key === 'Enter') { - dispatch.tokenState.updateThemeGroupName(groupName, currentGroupName); - setIsEditing(false); - setIsGroupEditing(false); + handleSubmit(); } else if (e.key === 'Escape') { - setIsEditing(false); - setIsGroupEditing(false); + e.stopPropagation(); + handleCancel(); } - }, [currentGroupName, groupName, dispatch.tokenState, setIsEditing, setIsGroupEditing]); + }, [currentGroupName, groupName, dispatch.tokenState]); const handleGroupNameChange = React.useCallback((event: React.ChangeEvent) => { setCurrentGroupName(event.target.value); @@ -59,6 +64,7 @@ export function ThemeListGroupHeader({ type="button" canReorder={!editProhibited} css={{ + marginBottom: '$2', backgroundColor: '$bgDefault', display: 'flex', cursor: 'inherit', @@ -73,6 +79,7 @@ export function ThemeListGroupHeader({ div > button ': { display: 'none', }, @@ -81,7 +88,7 @@ export function ThemeListGroupHeader({ }, }} > - {!isEditing ? ( + {!isGroupNameEditing ? ( <> ) : ( - + <> + + } + color="$dangerBorder" + size="small" + tooltip="Cancel" + /> + } + size="small" + variant="primary" + tooltip="Confirm" + /> + )} diff --git a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ThemeStyleManagementCategory.tsx b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ThemeStyleManagementCategory.tsx index 017663179..d79a94b43 100644 --- a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ThemeStyleManagementCategory.tsx +++ b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/ThemeStyleManagementCategory.tsx @@ -11,6 +11,7 @@ import Stack from '../Stack'; import { Count } from '../Count'; import Checkbox from '../Checkbox'; import Label from '../Label'; +import { useTranslation } from 'react-i18next'; type Props = { label: string @@ -33,6 +34,7 @@ export const ThemeStyleManagementCategory: React.FC([]); + const { t } = useTranslation(['tokens', 'errors']); const stylesEntries = useMemo(() => Object.entries(styles), [styles]); @@ -74,7 +76,7 @@ export const ThemeStyleManagementCategory: React.FC - Attach local styles + {t('attachLocalStyles')} )} isOpenByDefault={false} @@ -100,12 +102,12 @@ export const ThemeStyleManagementCategory: React.FC diff --git a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/TokenSetThemeItem.tsx b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/TokenSetThemeItem.tsx index 8bc0d14d6..5bdf515d7 100644 --- a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/TokenSetThemeItem.tsx +++ b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/TokenSetThemeItem.tsx @@ -6,6 +6,7 @@ import { Check, Xmark, CodeBrackets } from 'iconoir-react'; import { TreeItem } from '@/utils/tokenset'; import { StyledThemeLabel } from './StyledThemeLabel'; import { TokenSetStatus } from '@/constants/TokenSetStatus'; +import { useTranslation } from 'react-i18next'; type Props = { item: TreeItem @@ -15,9 +16,9 @@ type Props = { const tokenSetStatusValues = Object.values(TokenSetStatus); const tokenSetStatusLabels = { - [TokenSetStatus.DISABLED]: 'Disabled', - [TokenSetStatus.SOURCE]: 'Reference Only', - [TokenSetStatus.ENABLED]: 'Enabled', + [TokenSetStatus.DISABLED]: 'disabled', + [TokenSetStatus.SOURCE]: 'referenceOnly', + [TokenSetStatus.ENABLED]: 'enabled', }; export const TokenSetThemeItem: React.FC>> = ({ @@ -26,6 +27,7 @@ export const TokenSetThemeItem: React.FC ( value?.[item.path] ?? TokenSetStatus.DISABLED ), [item.path, value]); + const { t } = useTranslation(['tokens']); const handleValueChange = useCallback((status: string) => { if (status) { @@ -85,7 +87,7 @@ export const TokenSetThemeItem: React.FC {tokenSetStatusValues.map((status) => ( - + {statusIcon(status)} diff --git a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/CreateOrEditThemeForm.test.tsx b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/CreateOrEditThemeForm.test.tsx index fffa3766b..c5b45582d 100644 --- a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/CreateOrEditThemeForm.test.tsx +++ b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/CreateOrEditThemeForm.test.tsx @@ -34,9 +34,9 @@ describe('CreateOrEditThemeForm', () => { expect((await result.findByTestId('create-or-edit-theme-form--input--name') as HTMLInputElement).value).toEqual('Light'); - const stylesTabButton = await result.findByText('Styles & Variables'); + const stylesTabButton = await result.findByText('stylesAndVariables'); act(() => stylesTabButton.click()); - expect(result.queryAllByText('Attach local styles')).toHaveLength(3); + expect(result.queryAllByText('attachLocalStyles')).toHaveLength(3); }); }); diff --git a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/ManageThemesModal.test.tsx b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/ManageThemesModal.test.tsx index bccc0dc15..545dbccb4 100644 --- a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/ManageThemesModal.test.tsx +++ b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/ManageThemesModal.test.tsx @@ -45,7 +45,7 @@ describe('ManageThemesModal', () => { , ); - expect(result.queryByText('You don\'t have any themes yet')).not.toBeNull(); + expect(result.queryByText('manageThemesModal.emptyTitle')).not.toBeNull(); }); it('should render create new theme form', async () => { @@ -57,8 +57,8 @@ describe('ManageThemesModal', () => { , ); - await result.getByText('New theme').click(); - expect(result.getByText('Save theme')).toBeInTheDocument(); + await result.getByText('newTheme').click(); + expect(result.getByText('saveTheme')).toBeInTheDocument(); }); it('should render edit theme form', async () => { @@ -85,8 +85,8 @@ describe('ManageThemesModal', () => { ); waitFor(() => { result.getByTestId('singlethemeentry-light').click(); - result.getByText('Delete').click(); - expect(result.getByText('Delete')).toBeInTheDocument(); + result.getByText('delete').click(); + expect(result.getByText('delete')).toBeInTheDocument(); }); }); }); diff --git a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/ThemeStyleManagementCategory.test.tsx b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/ThemeStyleManagementCategory.test.tsx index 0ae38682f..a4e048d7d 100644 --- a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/ThemeStyleManagementCategory.test.tsx +++ b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/ThemeStyleManagementCategory.test.tsx @@ -48,7 +48,7 @@ describe('ThemeStyleManagementCategory', () => { expect(result.queryByText('typography/body/bold')).not.toBeUndefined(); expect(result.queryByText('body/bold')).not.toBeUndefined(); - const attachLocalStyles = await result.findByText('Attach local styles'); + const attachLocalStyles = await result.findByText('attachLocalStyles'); attachLocalStyles.click(); expect(mockAttachLocalStyles).toBeCalledTimes(1); diff --git a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/ThemeStyleManagementForm.test.tsx b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/ThemeStyleManagementForm.test.tsx index 426ada7d3..64fbff699 100644 --- a/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/ThemeStyleManagementForm.test.tsx +++ b/packages/tokens-studio-for-figma/src/app/components/ManageThemesModal/__tests__/ThemeStyleManagementForm.test.tsx @@ -105,7 +105,7 @@ describe('ThemeStyleManagementForm', () => { 'typography.heading.h1': 'S:2345', }); - const attachLocalStyles = (await result.findAllByText('Attach local styles'))[0]; + const attachLocalStyles = (await result.findAllByText('attachLocalStyles'))[0]; attachLocalStyles.click(); expect(mockAttachLocalStylesToTheme).toBeCalledTimes(1); diff --git a/packages/tokens-studio-for-figma/src/i18n/lang/en/tokens.json b/packages/tokens-studio-for-figma/src/i18n/lang/en/tokens.json index f52249e5d..806abede6 100644 --- a/packages/tokens-studio-for-figma/src/i18n/lang/en/tokens.json +++ b/packages/tokens-studio-for-figma/src/i18n/lang/en/tokens.json @@ -29,7 +29,25 @@ "show": "Show", "theme": "Theme", "noThemes": "No themes", + "themes": "Themes", "manageThemes": "Manage themes", + "addGroup": "Add group", + "themeName": "Theme name", + "returnToOverview": "Return to overview", + "stylesVarMultiDimensionalThemesWarning": "Note: When using multi-dimensional themes where values depend on tokens of another theme, connecting styles might not work as expected.", + "attachLocalStyles": "Attach local styles", + "selectAll": "Select all", + "detachSelected": "Detach selected", + "saveTheme": "Save theme", + "newTheme": "New theme", + "confirmDeleteTheme": "Are you sure you want to delete this theme?", + "enabled": "Enabled", + "disabled": "Disabled", + "referenceOnly": "Reference Only", + "manageThemesModal": { + "emptyTitle": "You don't have any themes yet", + "emptyDescription": "Create your first theme now" + }, "applyTo": { "button": "Apply to", "applyCurrentTokensTo": "Apply current tokens to", diff --git a/packages/tokens-studio-for-figma/src/i18n/lang/es/tokens.json b/packages/tokens-studio-for-figma/src/i18n/lang/es/tokens.json index 2b6145270..be892bfc5 100644 --- a/packages/tokens-studio-for-figma/src/i18n/lang/es/tokens.json +++ b/packages/tokens-studio-for-figma/src/i18n/lang/es/tokens.json @@ -196,5 +196,23 @@ } }, "duplicateGroupError": "Hay un token o grupo existente con ese nombre.", - "noVariablesCreated": "No se crearon variables" + "noVariablesCreated": "No se crearon variables", + "themes": "Temas", + "addGroup": "Añadir grupo", + "themeName": "Nombre del tema", + "returnToOverview": "Volver a la descripción general", + "stylesVarMultiDimensionalThemesWarning": "Nota: Cuando se utilizan temas multidimensionales donde los valores dependen de tokens de otro tema, es posible que la conexión de estilos no funcione como se esperaba.", + "attachLocalStyles": "Adjuntar estilos locales", + "selectAll": "Seleccionar todo", + "detachSelected": "Separar seleccionado", + "saveTheme": "Guardar tema", + "newTheme": "Nuevo tema", + "confirmDeleteTheme": "¿Estás seguro de que deseas eliminar este tema?", + "enabled": "Activado", + "disabled": "Desactivado", + "referenceOnly": "Solo referencia", + "manageThemesModal": { + "emptyTitle": "Aún no tienes ningún tema", + "emptyDescription": "Crea tu primer tema ahora" + } } diff --git a/packages/tokens-studio-for-figma/src/i18n/lang/fr/tokens.json b/packages/tokens-studio-for-figma/src/i18n/lang/fr/tokens.json index 0eaaaf644..ade8041d8 100644 --- a/packages/tokens-studio-for-figma/src/i18n/lang/fr/tokens.json +++ b/packages/tokens-studio-for-figma/src/i18n/lang/fr/tokens.json @@ -196,5 +196,23 @@ } }, "duplicateGroupError": "Il existe un jeton ou un groupe portant ce nom", - "noVariablesCreated": "Aucune variable n'a été créée" + "noVariablesCreated": "Aucune variable n'a été créée", + "themes": "Thèmes", + "addGroup": "Ajouter un groupe", + "themeName": "Nom du thème", + "returnToOverview": "Retour à l'aperçu", + "stylesVarMultiDimensionalThemesWarning": "Remarque : lors de l'utilisation de thèmes multidimensionnels dont les valeurs dépendent des jetons d'un autre thème, les styles de connexion peuvent ne pas fonctionner comme prévu.", + "attachLocalStyles": "Attacher des styles locaux", + "selectAll": "Tout sélectionner", + "detachSelected": "Détacher la sélection", + "saveTheme": "Enregistrer le thème", + "newTheme": "Nouveau thème", + "confirmDeleteTheme": "Êtes-vous sûr de vouloir supprimer ce thème ?", + "enabled": "Activé", + "disabled": "Désactivé", + "referenceOnly": "Référence seulement", + "manageThemesModal": { + "emptyTitle": "Vous n'avez pas encore de thèmes", + "emptyDescription": "Créez votre premier thème maintenant" + } } diff --git a/packages/tokens-studio-for-figma/src/i18n/lang/hi/tokens.json b/packages/tokens-studio-for-figma/src/i18n/lang/hi/tokens.json index f31a8700d..da355cf89 100644 --- a/packages/tokens-studio-for-figma/src/i18n/lang/hi/tokens.json +++ b/packages/tokens-studio-for-figma/src/i18n/lang/hi/tokens.json @@ -196,5 +196,23 @@ } }, "duplicateGroupError": "उस नाम का एक मौजूदा टोकन या समूह है", - "noVariablesCreated": "कोई वेरिएबल नहीं बनाया गया" + "noVariablesCreated": "कोई वेरिएबल नहीं बनाया गया", + "themes": "विषय-वस्तु", + "addGroup": "समूह जोड़ें", + "themeName": "थीम का नाम", + "returnToOverview": "सिंहावलोकन पर लौटें", + "stylesVarMultiDimensionalThemesWarning": "नोट: बहु-आयामी थीम का उपयोग करते समय जहां मान किसी अन्य थीम के टोकन पर निर्भर करते हैं, कनेक्टिंग शैलियाँ अपेक्षा के अनुरूप काम नहीं कर सकती हैं।", + "attachLocalStyles": "स्थानीय शैलियाँ संलग्न करें", + "selectAll": "सबका चयन करें", + "detachSelected": "अलग करें चयनित", + "saveTheme": "थीम सहेजें", + "newTheme": "नया विषय", + "confirmDeleteTheme": "क्या आप वाकई इस थीम को हटाना चाहते हैं?", + "enabled": "सक्रिय", + "disabled": "अक्षम", + "referenceOnly": "संदर्भ केवल", + "manageThemesModal": { + "emptyTitle": "आपके पास अभी तक कोई थीम नहीं है", + "emptyDescription": "अभी अपनी पहली थीम बनाएं" + } } diff --git a/packages/tokens-studio-for-figma/src/i18n/lang/nl/tokens.json b/packages/tokens-studio-for-figma/src/i18n/lang/nl/tokens.json index 40f7a6238..bb57515bb 100644 --- a/packages/tokens-studio-for-figma/src/i18n/lang/nl/tokens.json +++ b/packages/tokens-studio-for-figma/src/i18n/lang/nl/tokens.json @@ -196,5 +196,23 @@ } }, "duplicateGroupError": "Er is een bestaande token of groep met die naam", - "noVariablesCreated": "Er zijn geen variabelen gemaakt" + "noVariablesCreated": "Er zijn geen variabelen gemaakt", + "themes": "Thema's", + "addGroup": "Groep toevoegen", + "themeName": "Thema naam", + "returnToOverview": "Terug naar overzicht", + "stylesVarMultiDimensionalThemesWarning": "Opmerking: bij het gebruik van multidimensionale thema's waarbij waarden afhankelijk zijn van tokens van een ander thema, werken verbindingsstijlen mogelijk niet zoals verwacht.", + "attachLocalStyles": "Voeg lokale stijlen toe", + "selectAll": "Selecteer alles", + "detachSelected": "Geselecteerd loskoppelen", + "saveTheme": "Thema opslaan", + "newTheme": "Nieuw thema", + "confirmDeleteTheme": "Weet je zeker dat je dit thema wilt verwijderen?", + "enabled": "Ingeschakeld", + "disabled": "Gehandicapt", + "referenceOnly": "Alleen referentie", + "manageThemesModal": { + "emptyTitle": "Je hebt nog geen thema's", + "emptyDescription": "Maak nu uw eerste thema" + } } diff --git a/packages/tokens-studio-for-figma/src/i18n/lang/zh/tokens.json b/packages/tokens-studio-for-figma/src/i18n/lang/zh/tokens.json index 982447b5b..29fb39fd0 100644 --- a/packages/tokens-studio-for-figma/src/i18n/lang/zh/tokens.json +++ b/packages/tokens-studio-for-figma/src/i18n/lang/zh/tokens.json @@ -200,5 +200,23 @@ } }, "duplicateGroupError": "已有具有该名称的令牌或组", - "noVariablesCreated": "没有创建变量" + "noVariablesCreated": "没有创建变量", + "themes": "主题", + "addGroup": "添加群组", + "themeName": "主题名称", + "returnToOverview": "返回概览", + "stylesVarMultiDimensionalThemesWarning": "注意:当使用多维主题时,其中值取决于另一个主题的标记,连接样式可能无法按预期工作。", + "attachLocalStyles": "附加本地样式", + "selectAll": "全选", + "detachSelected": "分离选定的", + "saveTheme": "保存主题", + "newTheme": "新主题", + "confirmDeleteTheme": "您确定要删除该主题吗?", + "enabled": "启用", + "disabled": "残疾人", + "referenceOnly": "仅供参考", + "manageThemesModal": { + "emptyTitle": "您还没有任何主题", + "emptyDescription": "立即创建您的第一个主题" + } }