From f34ba6ac12d1d2d6dc8b6cb11bc207a0d546108d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 16:50:26 +0200 Subject: [PATCH] i18n - docs translations (#19983) Created by Github action Co-authored-by: github-actions --- .../l/it/developers/extend/api.mdx | 48 ++--- .../extend/apps/front-components.mdx | 2 +- .../l/it/developers/extend/apps/layout.mdx | 22 +-- .../l/pt/developers/extend/api.mdx | 48 ++--- .../l/pt/developers/extend/apps/layout.mdx | 22 +-- .../l/ru/developers/extend/api.mdx | 48 ++--- .../extend/apps/front-components.mdx | 2 +- .../l/ru/developers/extend/apps/layout.mdx | 22 +-- .../l/ru/developers/introduction.mdx | 16 +- .../l/tr/developers/extend/api.mdx | 48 ++--- .../extend/apps/front-components.mdx | 2 +- .../l/tr/developers/extend/apps/layout.mdx | 22 +-- .../l/tr/developers/introduction.mdx | 14 +- .../l/zh/developers/extend/api.mdx | 48 ++--- .../extend/apps/cli-and-testing.mdx | 2 +- .../extend/apps/front-components.mdx | 176 +++++++++--------- .../l/zh/developers/extend/apps/layout.mdx | 58 +++--- .../l/zh/developers/introduction.mdx | 16 +- 18 files changed, 308 insertions(+), 308 deletions(-) diff --git a/packages/twenty-docs/l/it/developers/extend/api.mdx b/packages/twenty-docs/l/it/developers/extend/api.mdx index 581c645be0..3eba101a3c 100644 --- a/packages/twenty-docs/l/it/developers/extend/api.mdx +++ b/packages/twenty-docs/l/it/developers/extend/api.mdx @@ -1,35 +1,35 @@ --- title: API icon: plug -description: REST and GraphQL APIs generated from your workspace schema. +description: API REST e GraphQL generate dallo schema del tuo spazio di lavoro. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## Schema-per-tenant APIs +## API con schema per tenant -There is no static API reference for Twenty. Each workspace has its own schema — when you add a custom object (say `Invoice`), it immediately gets REST and GraphQL endpoints identical to built-in objects like `Company` or `Person`. The API is generated from the schema, so endpoints use your object and field names directly — no opaque IDs. +Non esiste un riferimento API statico per Twenty. Ogni spazio di lavoro ha il proprio schema — quando aggiungi un oggetto personalizzato (ad esempio `Invoice`), ottiene immediatamente endpoint REST e GraphQL identici a quelli degli oggetti integrati come `Company` o `Person`. L'API è generata dallo schema, quindi gli endpoint usano direttamente i nomi dei tuoi oggetti e campi — niente ID opachi. -Your workspace-specific API documentation is available under **Settings → API & Webhooks** after creating an API key. It includes an interactive playground where you can execute real calls against your data. +La documentazione delle API specifica del tuo spazio di lavoro è disponibile in **Impostazioni → API & Webhooks** dopo aver creato una chiave API. Include un playground interattivo in cui puoi eseguire chiamate reali sui tuoi dati. -## Two APIs +## Due API -**Core API** — `/rest/` and `/graphql/` +**API principale** — `/rest/` e `/graphql/` -CRUD on records: People, Companies, Opportunities, your custom objects. Query, filter, traverse relations. +CRUD sui record: Persone, Aziende, Opportunità, i tuoi oggetti personalizzati. Esegui query, filtra, attraversa le relazioni. -**Metadata API** — `/rest/metadata/` and `/metadata/` +**API dei metadati** — `/rest/metadata/` e `/metadata/` -Schema management: create/modify/delete objects, fields, and relations. This is how you programmatically change your data model. +Gestione dello schema: crea/modifica/elimina oggetti, campi e relazioni. Questo è il modo per modificare in modo programmatico il tuo modello di dati. -Both are available as REST and GraphQL. GraphQL adds batch upserts and the ability to traverse relations in a single query. Same underlying data either way. +Entrambe sono disponibili in REST e GraphQL. GraphQL aggiunge upsert in batch e la possibilità di attraversare le relazioni in un'unica query. I dati sottostanti sono gli stessi in entrambi i casi. -## Base URLs +## URL di base -| Ambiente | URL di base | -| ----------- | ------------------------- | -| Cloud | `https://api.twenty.com/` | -| Self-Hosted | `https://{your-domain}/` | +| Ambiente | URL di base | +| ------------- | ------------------------- | +| Cloud | `https://api.twenty.com/` | +| Auto-ospitato | `https://{your-domain}/` | ## Autenticazione @@ -37,19 +37,19 @@ Both are available as REST and GraphQL. GraphQL adds batch upserts and the abili Authorization: Bearer YOUR_API_KEY ``` -Create an API key in **Settings → API & Webhooks → + Create key**. Copy it immediately — it's shown once. Keys can be scoped to a specific role under **Settings → Roles → Assignment tab** to limit what they can access. +Crea una chiave API in **Impostazioni → API & Webhooks → + Crea chiave**. Copiala immediatamente — viene mostrata una sola volta. Le chiavi possono essere limitate a un ruolo specifico in **Impostazioni → Ruoli → scheda Assegnazione** per limitare ciò a cui possono accedere. -For OAuth-based access (external apps acting on behalf of users), see [OAuth](/l/it/developers/extend/oauth). +Per l'accesso basato su OAuth (app esterne che agiscono per conto degli utenti), vedi [OAuth](/l/it/developers/extend/oauth). -## Batch operations +## Operazioni batch -Both REST and GraphQL support batching up to 60 records per request — create, update, or delete. GraphQL also supports batch upsert (create-or-update in one call) using plural names like `CreateCompanies`. +Sia REST che GraphQL supportano il batching fino a 60 record per richiesta — creazione, aggiornamento o eliminazione. GraphQL supporta anche l'upsert in batch (crea o aggiorna in una sola chiamata) usando nomi plurali come `CreateCompanies`. -## Rate limits +## Limiti di frequenza delle API -| Limite | Valore | -| ---------- | ---------------------- | -| Requests | 100 per minute | -| Batch size | 60 record per chiamata | +| Limite | Valore | +| ---------------- | ---------------------- | +| Richieste | 100 al minuto | +| Dimensione batch | 60 record per chiamata | diff --git a/packages/twenty-docs/l/it/developers/extend/apps/front-components.mdx b/packages/twenty-docs/l/it/developers/extend/apps/front-components.mdx index ded9a664e0..e1bb9eaafc 100644 --- a/packages/twenty-docs/l/it/developers/extend/apps/front-components.mdx +++ b/packages/twenty-docs/l/it/developers/extend/apps/front-components.mdx @@ -1,6 +1,6 @@ --- title: Componenti front-end -description: Build React components that render inside Twenty's UI with sandboxed isolation. +description: Crea componenti React che vengono renderizzati all'interno della UI di Twenty con isolamento in sandbox. icon: window-maximize --- diff --git a/packages/twenty-docs/l/it/developers/extend/apps/layout.mdx b/packages/twenty-docs/l/it/developers/extend/apps/layout.mdx index cd64976449..bb43c2724b 100644 --- a/packages/twenty-docs/l/it/developers/extend/apps/layout.mdx +++ b/packages/twenty-docs/l/it/developers/extend/apps/layout.mdx @@ -1,23 +1,23 @@ --- title: Layout -description: Define views, navigation menu items, and page layouts to shape how your app appears in Twenty. +description: Definisci viste, voci del menu di navigazione e layout di pagina per determinare come la tua app appare in Twenty. icon: table-columns --- -Layout entities control how your app surfaces inside Twenty's UI — what lives in the sidebar, which saved views ship with the app, and how a record detail page is arranged. +Le entità di layout controllano come la tua app si presenta all'interno dell'interfaccia utente di Twenty — ciò che è presente nella barra laterale, quali viste salvate sono incluse con l'app e come è organizzata la pagina dei dettagli di un record. -## Layout concepts +## Concetti di layout -| Concept | What it controls | Entità | -| ------------------------ | --------------------------------------------------------------------------------- | -------------------------- | -| **View** | A saved list configuration for an object — visible fields, order, filters, groups | `defineView` | -| **Navigation Menu Item** | An entry in the left sidebar that links to a view or an external URL | `defineNavigationMenuItem` | -| **Page Layout** | The tabs and widgets that make up a record's detail page | `definePageLayout` | +| Concetto | Cosa controlla | Entità | +| -------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------- | +| **Vista** | Una configurazione di elenco salvata per un oggetto — campi visibili, ordine, filtri, gruppi | `defineView` | +| **Voce del menu di navigazione** | Una voce nella barra laterale sinistra che collega a una vista o a un URL esterno | `defineNavigationMenuItem` | +| **Layout di pagina** | Le schede e i widget che compongono la pagina dei dettagli di un record | `definePageLayout` | -Views, navigation items, and page layouts reference each other by `universalIdentifier`: +Le viste, le voci del menu di navigazione e i layout di pagina fanno riferimento tra loro tramite `universalIdentifier`: -* A **navigation menu item** of type `VIEW` points at a `defineView` identifier, so the sidebar link opens that saved view. -* A **page layout** of type `RECORD_PAGE` targets an object and can embed [front components](/l/it/developers/extend/apps/front-components) inside its tabs as widgets. +* Una **voce del menu di navigazione** di tipo `VIEW` punta a un identificatore `defineView`, quindi il link nella barra laterale apre quella vista salvata. +* Un **layout di pagina** di tipo `RECORD_PAGE` si applica a un oggetto e può incorporare [front components](/l/it/developers/extend/apps/front-components) all'interno delle sue schede come widget. diff --git a/packages/twenty-docs/l/pt/developers/extend/api.mdx b/packages/twenty-docs/l/pt/developers/extend/api.mdx index 9cabba4941..0c21752df5 100644 --- a/packages/twenty-docs/l/pt/developers/extend/api.mdx +++ b/packages/twenty-docs/l/pt/developers/extend/api.mdx @@ -1,35 +1,35 @@ --- title: APIs icon: plug -description: REST and GraphQL APIs generated from your workspace schema. +description: APIs REST e GraphQL geradas a partir do esquema do seu espaço de trabalho. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## Schema-per-tenant APIs +## APIs com esquema por locatário -There is no static API reference for Twenty. Each workspace has its own schema — when you add a custom object (say `Invoice`), it immediately gets REST and GraphQL endpoints identical to built-in objects like `Company` or `Person`. The API is generated from the schema, so endpoints use your object and field names directly — no opaque IDs. +Não há uma referência de API estática para o Twenty. Cada espaço de trabalho tem seu próprio esquema — quando você adiciona um objeto personalizado (por exemplo, `Invoice`), ele imediatamente recebe endpoints REST e GraphQL idênticos aos dos objetos nativos, como `Company` ou `Person`. A API é gerada a partir do esquema, então os endpoints usam diretamente os nomes dos seus objetos e campos — sem IDs opacos. -Your workspace-specific API documentation is available under **Settings → API & Webhooks** after creating an API key. It includes an interactive playground where you can execute real calls against your data. +Sua documentação de API específica do seu espaço de trabalho fica disponível em **Configurações → API & Webhooks** após criar uma chave de API. Ela inclui um playground interativo onde você pode executar chamadas reais contra seus dados. -## Two APIs +## Duas APIs -**Core API** — `/rest/` and `/graphql/` +**API principal** — `/rest/` e `/graphql/` -CRUD on records: People, Companies, Opportunities, your custom objects. Query, filter, traverse relations. +CRUD em registros: Pessoas, Empresas, Oportunidades, seus objetos personalizados. Consultar, filtrar, percorrer relações. -**Metadata API** — `/rest/metadata/` and `/metadata/` +**API de Metadados** — `/rest/metadata/` e `/metadata/` -Schema management: create/modify/delete objects, fields, and relations. This is how you programmatically change your data model. +Gerenciamento de esquema: criar/modificar/excluir objetos, campos e relações. É assim que você altera programaticamente seu modelo de dados. -Both are available as REST and GraphQL. GraphQL adds batch upserts and the ability to traverse relations in a single query. Same underlying data either way. +Ambas estão disponíveis como REST e GraphQL. GraphQL adiciona upserts em lote e a capacidade de percorrer relações em uma única consulta. Os mesmos dados subjacentes em ambos os casos. -## Base URLs +## URLs base -| Ambiente | URL base | -| ----------- | ------------------------- | -| Cloud | `https://api.twenty.com/` | -| Self-Hosted | `https://{your-domain}/` | +| Ambiente | URL base | +| -------------- | ------------------------- | +| Nuvem | `https://api.twenty.com/` | +| Auto-hospedado | `https://{your-domain}/` | ## Autenticação @@ -37,19 +37,19 @@ Both are available as REST and GraphQL. GraphQL adds batch upserts and the abili Authorization: Bearer YOUR_API_KEY ``` -Create an API key in **Settings → API & Webhooks → + Create key**. Copy it immediately — it's shown once. Keys can be scoped to a specific role under **Settings → Roles → Assignment tab** to limit what they can access. +Crie uma chave de API em **Settings → API & Webhooks → + Create key**. Copie-a imediatamente — ela é exibida apenas uma vez. As chaves podem ter escopo para uma função específica em **Settings → Roles → Assignment tab** para limitar o que podem acessar. -For OAuth-based access (external apps acting on behalf of users), see [OAuth](/l/pt/developers/extend/oauth). +Para acesso baseado em OAuth (aplicativos externos atuando em nome dos usuários), veja [OAuth](/l/pt/developers/extend/oauth). -## Batch operations +## Operações em lote -Both REST and GraphQL support batching up to 60 records per request — create, update, or delete. GraphQL also supports batch upsert (create-or-update in one call) using plural names like `CreateCompanies`. +Tanto REST quanto GraphQL suportam processamento em lote de até 60 registros por solicitação — criar, atualizar ou excluir. O GraphQL também oferece suporte a upsert em lote (criar ou atualizar em uma única chamada) usando nomes no plural como `CreateCompanies`. -## Rate limits +## Limites de taxa -| Limite | Valor | -| ---------- | ------------------------ | -| Requests | 100 per minute | -| Batch size | 60 registros por chamada | +| Limite | Valor | +| --------------- | ------------------------ | +| Solicitações | 100 por minuto | +| Tamanho do lote | 60 registros por chamada | diff --git a/packages/twenty-docs/l/pt/developers/extend/apps/layout.mdx b/packages/twenty-docs/l/pt/developers/extend/apps/layout.mdx index 112fa155ed..40b46abc7c 100644 --- a/packages/twenty-docs/l/pt/developers/extend/apps/layout.mdx +++ b/packages/twenty-docs/l/pt/developers/extend/apps/layout.mdx @@ -1,23 +1,23 @@ --- title: Layout -description: Define views, navigation menu items, and page layouts to shape how your app appears in Twenty. +description: Defina vistas, itens do menu de navegação e layouts de página para moldar como seu app aparece no Twenty. icon: table-columns --- -Layout entities control how your app surfaces inside Twenty's UI — what lives in the sidebar, which saved views ship with the app, and how a record detail page is arranged. +As entidades de layout controlam como seu app aparece na UI do Twenty — o que fica na barra lateral, quais vistas salvas acompanham o app e como uma página de detalhes de registro é organizada. -## Layout concepts +## Conceitos de layout -| Concept | What it controls | Entidade | -| ------------------------ | --------------------------------------------------------------------------------- | -------------------------- | -| **View** | A saved list configuration for an object — visible fields, order, filters, groups | `defineView` | -| **Navigation Menu Item** | An entry in the left sidebar that links to a view or an external URL | `defineNavigationMenuItem` | -| **Page Layout** | The tabs and widgets that make up a record's detail page | `definePageLayout` | +| Conceito | O que controla | Entidade | +| ----------------------------- | ---------------------------------------------------------------------------------------- | -------------------------- | +| **Vista** | Uma configuração de lista salva para um objeto — campos visíveis, ordem, filtros, grupos | `defineView` | +| **Item do menu de navegação** | Uma entrada na barra lateral esquerda que aponta para uma vista ou uma URL externa | `defineNavigationMenuItem` | +| **Layout da Página** | As abas e widgets que compõem a página de detalhes de um registro | `definePageLayout` | -Views, navigation items, and page layouts reference each other by `universalIdentifier`: +Vistas, itens de navegação e layouts de página referenciam-se mutuamente por `universalIdentifier`: -* A **navigation menu item** of type `VIEW` points at a `defineView` identifier, so the sidebar link opens that saved view. -* A **page layout** of type `RECORD_PAGE` targets an object and can embed [front components](/l/pt/developers/extend/apps/front-components) inside its tabs as widgets. +* Um **item do menu de navegação** do tipo `VIEW` aponta para um identificador `defineView`, assim o link da barra lateral abre essa vista salva. +* Um **layout de página** do tipo `RECORD_PAGE` destina-se a um objeto e pode incorporar [front components](/l/pt/developers/extend/apps/front-components) em suas abas como widgets. diff --git a/packages/twenty-docs/l/ru/developers/extend/api.mdx b/packages/twenty-docs/l/ru/developers/extend/api.mdx index 4959f87b26..19ebaf8887 100644 --- a/packages/twenty-docs/l/ru/developers/extend/api.mdx +++ b/packages/twenty-docs/l/ru/developers/extend/api.mdx @@ -1,35 +1,35 @@ --- title: API icon: plug -description: REST and GraphQL APIs generated from your workspace schema. +description: REST и GraphQL API, сгенерированные на основе схемы вашего рабочего пространства. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## Schema-per-tenant APIs +## API с отдельной схемой для каждого тенанта -There is no static API reference for Twenty. Each workspace has its own schema — when you add a custom object (say `Invoice`), it immediately gets REST and GraphQL endpoints identical to built-in objects like `Company` or `Person`. The API is generated from the schema, so endpoints use your object and field names directly — no opaque IDs. +Для Twenty нет статической документации по API. У каждого рабочего пространства своя схема — когда вы добавляете пользовательский объект (например, `Invoice`), он сразу получает эндпоинты REST и GraphQL, идентичные встроенным объектам, таким как `Company` или `Person`. API генерируется из схемы, поэтому эндпоинты напрямую используют названия ваших объектов и полей — никаких непрозрачных идентификаторов. -Your workspace-specific API documentation is available under **Settings → API & Webhooks** after creating an API key. It includes an interactive playground where you can execute real calls against your data. +Документация по API для вашего рабочего пространства доступна в разделе **Настройки → API и вебхуки** после создания ключа API. Она включает интерактивную песочницу, где вы можете выполнять реальные вызовы к своим данным. -## Two APIs +## Два API -**Core API** — `/rest/` and `/graphql/` +**Основное API** — `/rest/` и `/graphql/` -CRUD on records: People, Companies, Opportunities, your custom objects. Query, filter, traverse relations. +CRUD над записями: Люди, Компании, Сделки, ваши пользовательские объекты. Запросы, фильтрация, переход по связям. -**Metadata API** — `/rest/metadata/` and `/metadata/` +**API метаданных** — `/rest/metadata/` и `/metadata/` -Schema management: create/modify/delete objects, fields, and relations. This is how you programmatically change your data model. +Управление схемой: создание/изменение/удаление объектов, полей и связей. Так вы программно изменяете свою модель данных. -Both are available as REST and GraphQL. GraphQL adds batch upserts and the ability to traverse relations in a single query. Same underlying data either way. +Оба доступны как REST и GraphQL. GraphQL добавляет пакетные upsert-операции и возможность переходить по связям в одном запросе. В обоих случаях используются одни и те же базовые данные. -## Base URLs +## Базовые URL-адреса -| Среда | Базовый URL | -| ----------- | ------------------------- | -| Cloud | `https://api.twenty.com/` | -| Self-Hosted | `https://{your-domain}/` | +| Среда | Базовый URL | +| ----------------------- | ------------------------- | +| Облако | `https://api.twenty.com/` | +| Самостоятельный хостинг | `https://{your-domain}/` | ## Аутентификация @@ -37,19 +37,19 @@ Both are available as REST and GraphQL. GraphQL adds batch upserts and the abili Authorization: Bearer YOUR_API_KEY ``` -Create an API key in **Settings → API & Webhooks → + Create key**. Copy it immediately — it's shown once. Keys can be scoped to a specific role under **Settings → Roles → Assignment tab** to limit what they can access. +Создайте ключ API в **Settings → API & Webhooks → + Create key**. Сразу скопируйте его — он показывается только один раз. Ключам можно задать область действия для конкретной роли в разделе **Settings → Roles → Assignment tab**, чтобы ограничить их доступ. -For OAuth-based access (external apps acting on behalf of users), see [OAuth](/l/ru/developers/extend/oauth). +Для доступа на основе OAuth (внешние приложения, действующие от имени пользователей), см. [OAuth](/l/ru/developers/extend/oauth). -## Batch operations +## Пакетные операции -Both REST and GraphQL support batching up to 60 records per request — create, update, or delete. GraphQL also supports batch upsert (create-or-update in one call) using plural names like `CreateCompanies`. +И REST, и GraphQL поддерживают пакетную обработку до 60 записей за один запрос — создание, обновление или удаление. GraphQL также поддерживает пакетный upsert (создание или обновление за один вызов), используя имена во множественном числе, например `CreateCompanies`. -## Rate limits +## Лимиты скорости -| Лимит | Значение | -| ---------- | ------------------------- | -| Requests | 100 per minute | -| Batch size | 60 записей за один запрос | +| Лимит | Значение | +| ------------- | ------------------------- | +| Запросы | 100 запросов в минуту | +| Размер пакета | 60 записей за один запрос | diff --git a/packages/twenty-docs/l/ru/developers/extend/apps/front-components.mdx b/packages/twenty-docs/l/ru/developers/extend/apps/front-components.mdx index 97bdd1faa4..915ae921e3 100644 --- a/packages/twenty-docs/l/ru/developers/extend/apps/front-components.mdx +++ b/packages/twenty-docs/l/ru/developers/extend/apps/front-components.mdx @@ -1,6 +1,6 @@ --- title: Компоненты фронтенда -description: Build React components that render inside Twenty's UI with sandboxed isolation. +description: Создавайте компоненты React, которые отображаются внутри интерфейса Twenty в изолированной песочнице. icon: window-maximize --- diff --git a/packages/twenty-docs/l/ru/developers/extend/apps/layout.mdx b/packages/twenty-docs/l/ru/developers/extend/apps/layout.mdx index b16b1728de..d1043a2740 100644 --- a/packages/twenty-docs/l/ru/developers/extend/apps/layout.mdx +++ b/packages/twenty-docs/l/ru/developers/extend/apps/layout.mdx @@ -1,23 +1,23 @@ --- title: Макет -description: Define views, navigation menu items, and page layouts to shape how your app appears in Twenty. +description: Определите представления, пункты меню навигации и макеты страниц, чтобы сформировать внешний вид вашего приложения в Twenty. icon: table-columns --- -Layout entities control how your app surfaces inside Twenty's UI — what lives in the sidebar, which saved views ship with the app, and how a record detail page is arranged. +Сущности макета определяют, как ваше приложение представлено в интерфейсе Twenty — что находится в боковой панели, какие сохранённые представления поставляются с приложением и как устроена страница сведений о записи. -## Layout concepts +## Концепции макета -| Concept | What it controls | Сущность | -| ------------------------ | --------------------------------------------------------------------------------- | -------------------------- | -| **View** | A saved list configuration for an object — visible fields, order, filters, groups | `defineView` | -| **Navigation Menu Item** | An entry in the left sidebar that links to a view or an external URL | `defineNavigationMenuItem` | -| **Page Layout** | The tabs and widgets that make up a record's detail page | `definePageLayout` | +| Понятие | Что определяет | Сущность | +| ------------------------ | ------------------------------------------------------------------------------------ | -------------------------- | +| **Представление** | Сохранённая конфигурация списка для объекта — видимые поля, порядок, фильтры, группы | `defineView` | +| **Пункт меню навигации** | Элемент в левой боковой панели, который ссылается на представление или внешний URL | `defineNavigationMenuItem` | +| **Макет страницы** | Вкладки и виджеты, из которых состоит страница сведений о записи | `definePageLayout` | -Views, navigation items, and page layouts reference each other by `universalIdentifier`: +Представления, пункты меню навигации и макеты страниц ссылаются друг на друга по `universalIdentifier`: -* A **navigation menu item** of type `VIEW` points at a `defineView` identifier, so the sidebar link opens that saved view. -* A **page layout** of type `RECORD_PAGE` targets an object and can embed [front components](/l/ru/developers/extend/apps/front-components) inside its tabs as widgets. +* **Пункт меню навигации** типа `VIEW` указывает на идентификатор `defineView`, поэтому ссылка в боковой панели открывает это сохранённое представление. +* **Макет страницы** типа `RECORD_PAGE` ориентирован на объект и может встраивать [фронт-компоненты](/l/ru/developers/extend/apps/front-components) во вкладки в качестве виджетов. diff --git a/packages/twenty-docs/l/ru/developers/introduction.mdx b/packages/twenty-docs/l/ru/developers/introduction.mdx index 6ae5b29300..f36df8b031 100644 --- a/packages/twenty-docs/l/ru/developers/introduction.mdx +++ b/packages/twenty-docs/l/ru/developers/introduction.mdx @@ -1,28 +1,28 @@ --- title: Разработчики -description: Build apps, use the API, self-host, or contribute to the codebase. +description: Создавайте приложения, используйте API, разворачивайте у себя или вносите вклад в кодовую базу. --- import { CardTitle } from "/snippets/card-title.mdx" - Apps - Extend Twenty with custom objects, server-side logic, UI components, and AI agents — all as TypeScript packages. + Приложения + Расширяйте Twenty с помощью пользовательских объектов, серверной логики, UI-компонентов и ИИ-агентов — всё в виде пакетов TypeScript. API - REST and GraphQL APIs, webhooks, and OAuth. + REST и GraphQL API, вебхуки и OAuth. - Self-Host - Run Twenty on your own infrastructure. + Развертывайте у себя + Запускайте Twenty в собственной инфраструктуре. - Contribute - Set up the monorepo locally and submit PRs. + Вносите вклад + Настройте монорепозиторий локально и отправляйте PR. diff --git a/packages/twenty-docs/l/tr/developers/extend/api.mdx b/packages/twenty-docs/l/tr/developers/extend/api.mdx index 9390eab934..7768f7071f 100644 --- a/packages/twenty-docs/l/tr/developers/extend/api.mdx +++ b/packages/twenty-docs/l/tr/developers/extend/api.mdx @@ -1,35 +1,35 @@ --- title: API'ler icon: plug -description: REST and GraphQL APIs generated from your workspace schema. +description: Çalışma alanı şemanızdan oluşturulan REST ve GraphQL API'leri. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## Schema-per-tenant APIs +## Kiracı başına şema API'leri -There is no static API reference for Twenty. Each workspace has its own schema — when you add a custom object (say `Invoice`), it immediately gets REST and GraphQL endpoints identical to built-in objects like `Company` or `Person`. The API is generated from the schema, so endpoints use your object and field names directly — no opaque IDs. +Twenty için statik bir API referansı yoktur. Her çalışma alanının kendine ait bir şeması vardır — özel bir nesne (ör. `Invoice`) eklediğinizde, `Company` veya `Person` gibi yerleşik nesnelerle aynı olan REST ve GraphQL uç noktalarını anında edinir. API şemadan oluşturulur, bu nedenle uç noktalar nesne ve alan adlarınızı doğrudan kullanır — anlaşılmaz kimlikler yoktur. -Your workspace-specific API documentation is available under **Settings → API & Webhooks** after creating an API key. It includes an interactive playground where you can execute real calls against your data. +Bir API anahtarı oluşturduktan sonra çalışma alanınıza özel API dokümantasyonu **Ayarlar → API ve Webhook'lar** altında mevcuttur. Verilerinize karşı gerçek çağrılar çalıştırabileceğiniz etkileşimli bir deneme alanı içerir. -## Two APIs +## İki API -**Core API** — `/rest/` and `/graphql/` +**Çekirdek API** — `/rest/` ve `/graphql/` -CRUD on records: People, Companies, Opportunities, your custom objects. Query, filter, traverse relations. +Kayıtlar üzerinde CRUD: Kişiler, Şirketler, Fırsatlar ve özel nesneleriniz. Sorgulama, filtreleme, ilişkilerde gezinme. -**Metadata API** — `/rest/metadata/` and `/metadata/` +**Meta veri API'si** — `/rest/metadata/` ve `/metadata/` -Schema management: create/modify/delete objects, fields, and relations. This is how you programmatically change your data model. +Şema yönetimi: nesneleri, alanları ve ilişkileri oluşturma/değiştirme/silme. Programatik olarak veri modelinizi bu şekilde değiştirirsiniz. -Both are available as REST and GraphQL. GraphQL adds batch upserts and the ability to traverse relations in a single query. Same underlying data either way. +Her ikisi de REST ve GraphQL olarak mevcuttur. GraphQL, toplu upsert işlemleri ve ilişkilerde tek bir sorguda gezinme olanağı sağlar. Her iki yöntemde de aynı temel veri kullanılır. -## Base URLs +## Temel URL'ler -| Ortam | Temel URL | -| ----------- | ------------------------- | -| Cloud | `https://api.twenty.com/` | -| Self-Hosted | `https://{your-domain}/` | +| Ortam | Temel URL | +| ------------------ | ------------------------- | +| Bulut | `https://api.twenty.com/` | +| Kendi barındırmalı | `https://{your-domain}/` | ## Kimlik Doğrulama @@ -37,19 +37,19 @@ Both are available as REST and GraphQL. GraphQL adds batch upserts and the abili Authorization: Bearer YOUR_API_KEY ``` -Create an API key in **Settings → API & Webhooks → + Create key**. Copy it immediately — it's shown once. Keys can be scoped to a specific role under **Settings → Roles → Assignment tab** to limit what they can access. +**Settings → API & Webhooks → + Create key** bölümünde bir API anahtarı oluşturun. Hemen kopyalayın — yalnızca bir kez gösterilir. Anahtarlar, erişebilecekleri alanları sınırlamak için **Settings → Roles → Assignment** sekmesi altında belirli bir role bağlanabilir. -For OAuth-based access (external apps acting on behalf of users), see [OAuth](/l/tr/developers/extend/oauth). +OAuth tabanlı erişim (kullanıcılar adına hareket eden harici uygulamalar) için bkz. [OAuth](/l/tr/developers/extend/oauth). -## Batch operations +## Toplu işlemler -Both REST and GraphQL support batching up to 60 records per request — create, update, or delete. GraphQL also supports batch upsert (create-or-update in one call) using plural names like `CreateCompanies`. +Hem REST hem de GraphQL, istek başına 60 kayda kadar toplu işlemeyi destekler — oluşturma, güncelleme veya silme. GraphQL ayrıca `CreateCompanies` gibi çoğul adlar kullanarak toplu upsert'i (tek çağrıda oluşturma veya güncelleme) destekler. -## Rate limits +## Hız sınırları -| Sınır | Değer | -| ---------- | --------------------- | -| Requests | 100 per minute | -| Batch size | Çağrı başına 60 kayıt | +| Sınır | Değer | +| ------------ | --------------------- | +| İstekler | Dakikada 100 | +| Toplu boyutu | Çağrı başına 60 kayıt | diff --git a/packages/twenty-docs/l/tr/developers/extend/apps/front-components.mdx b/packages/twenty-docs/l/tr/developers/extend/apps/front-components.mdx index 830deec570..255832dc8b 100644 --- a/packages/twenty-docs/l/tr/developers/extend/apps/front-components.mdx +++ b/packages/twenty-docs/l/tr/developers/extend/apps/front-components.mdx @@ -1,6 +1,6 @@ --- title: Ön uç bileşenleri -description: Build React components that render inside Twenty's UI with sandboxed isolation. +description: Twenty'nin UI'si içinde, korumalı alan (sandbox) izolasyonu ile görüntülenen React bileşenleri oluşturun. icon: window-maximize --- diff --git a/packages/twenty-docs/l/tr/developers/extend/apps/layout.mdx b/packages/twenty-docs/l/tr/developers/extend/apps/layout.mdx index f69a939d9d..9771ac090f 100644 --- a/packages/twenty-docs/l/tr/developers/extend/apps/layout.mdx +++ b/packages/twenty-docs/l/tr/developers/extend/apps/layout.mdx @@ -1,23 +1,23 @@ --- title: Düzen -description: Define views, navigation menu items, and page layouts to shape how your app appears in Twenty. +description: Uygulamanızın Twenty içinde nasıl görüneceğini şekillendirmek için görünümleri, gezinme menüsü öğelerini ve sayfa düzenlerini tanımlayın. icon: table-columns --- -Layout entities control how your app surfaces inside Twenty's UI — what lives in the sidebar, which saved views ship with the app, and how a record detail page is arranged. +Düzen varlıkları, uygulamanızın Twenty arayüzünde nasıl göründüğünü kontrol eder — kenar çubuğunda nelerin yer aldığı, uygulamayla birlikte hangi kayıtlı görünümlerin geldiği ve bir kayıt ayrıntı sayfasının nasıl düzenlendiği. -## Layout concepts +## Düzen kavramları -| Concept | What it controls | Varlık | -| ------------------------ | --------------------------------------------------------------------------------- | -------------------------- | -| **View** | A saved list configuration for an object — visible fields, order, filters, groups | `defineView` | -| **Navigation Menu Item** | An entry in the left sidebar that links to a view or an external URL | `defineNavigationMenuItem` | -| **Page Layout** | The tabs and widgets that make up a record's detail page | `definePageLayout` | +| Kavram | Neyi kontrol eder | Varlık | +| ------------------------ | ----------------------------------------------------------------------------------------------- | -------------------------- | +| **Görünüm** | Bir nesne için kaydedilmiş liste yapılandırması — görünür alanlar, sıralama, filtreler, gruplar | `defineView` | +| **Gezinme Menüsü Öğesi** | Sol kenar çubuğunda, bir görünüme veya harici bir URL'ye bağlanan bir öğe | `defineNavigationMenuItem` | +| **Sayfa Düzeni** | Bir kaydın ayrıntı sayfasını oluşturan sekmeler ve widget'lar | `definePageLayout` | -Views, navigation items, and page layouts reference each other by `universalIdentifier`: +Görünümler, gezinme menüsü öğeleri ve sayfa düzenleri birbirlerine `universalIdentifier` ile başvurur: -* A **navigation menu item** of type `VIEW` points at a `defineView` identifier, so the sidebar link opens that saved view. -* A **page layout** of type `RECORD_PAGE` targets an object and can embed [front components](/l/tr/developers/extend/apps/front-components) inside its tabs as widgets. +* Türü `VIEW` olan bir **gezinme menüsü öğesi**, bir `defineView` tanımlayıcısını işaret eder; böylece kenar çubuğu bağlantısı o kayıtlı görünümü açar. +* Türü `RECORD_PAGE` olan bir **sayfa düzeni**, bir nesneyi hedefler ve sekmelerinin içine widget'lar olarak [ön uç bileşenleri](/l/tr/developers/extend/apps/front-components) gömebilir. diff --git a/packages/twenty-docs/l/tr/developers/introduction.mdx b/packages/twenty-docs/l/tr/developers/introduction.mdx index 7b03cca4df..82e8c790ff 100644 --- a/packages/twenty-docs/l/tr/developers/introduction.mdx +++ b/packages/twenty-docs/l/tr/developers/introduction.mdx @@ -1,28 +1,28 @@ --- title: Geliştiriciler -description: Build apps, use the API, self-host, or contribute to the codebase. +description: Uygulamalar geliştirin, API'yi kullanın, kendi altyapınızda barındırın ya da kod tabanına katkıda bulunun. --- import { CardTitle } from "/snippets/card-title.mdx" - Apps - Extend Twenty with custom objects, server-side logic, UI components, and AI agents — all as TypeScript packages. + Uygulamalar + Özel nesneler, sunucu tarafı mantık, UI bileşenleri ve yapay zeka ajanlarıyla Twenty'yi genişletin — hepsi TypeScript paketleri olarak. API - REST and GraphQL APIs, webhooks, and OAuth. + REST ve GraphQL API'leri, webhook'lar ve OAuth. Self-Host - Run Twenty on your own infrastructure. + Twenty'yi kendi altyapınızda çalıştırın. - Contribute - Set up the monorepo locally and submit PRs. + Katkıda Bulunun + Monorepo'yu yerel olarak kurun ve PR'ler gönderin. diff --git a/packages/twenty-docs/l/zh/developers/extend/api.mdx b/packages/twenty-docs/l/zh/developers/extend/api.mdx index 167dcb48cf..6783b29860 100644 --- a/packages/twenty-docs/l/zh/developers/extend/api.mdx +++ b/packages/twenty-docs/l/zh/developers/extend/api.mdx @@ -1,35 +1,35 @@ --- title: 接口 icon: plug -description: REST and GraphQL APIs generated from your workspace schema. +description: 由你的工作区架构生成的 REST 和 GraphQL API。 --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## Schema-per-tenant APIs +## 租户级架构 API -There is no static API reference for Twenty. Each workspace has its own schema — when you add a custom object (say `Invoice`), it immediately gets REST and GraphQL endpoints identical to built-in objects like `Company` or `Person`. The API is generated from the schema, so endpoints use your object and field names directly — no opaque IDs. +Twenty 没有静态 API 参考文档。 每个工作区都有自己的架构——当你添加一个自定义对象(例如 `Invoice`)时,它会立即获得与内置对象(如 `Company` 或 `Person`)相同的 REST 和 GraphQL 端点。 API 根据架构生成,因此端点会直接使用你的对象和字段名称——没有不透明的 ID。 -Your workspace-specific API documentation is available under **Settings → API & Webhooks** after creating an API key. It includes an interactive playground where you can execute real calls against your data. +创建 API 密钥后,可在 **设置 → API & Webhooks** 中查看你的工作区专属 API 文档。 其中包含交互式 Playground,可对你的数据执行真实调用。 -## Two APIs +## 两种 API -**Core API** — `/rest/` and `/graphql/` +**核心 API** — `/rest/` 和 `/graphql/` -CRUD on records: People, Companies, Opportunities, your custom objects. Query, filter, traverse relations. +对记录执行 CRUD:人员、公司、商机,以及你的自定义对象。 查询、筛选、遍历关系。 -**Metadata API** — `/rest/metadata/` and `/metadata/` +**元数据 API** — `/rest/metadata/` 和 `/metadata/` -Schema management: create/modify/delete objects, fields, and relations. This is how you programmatically change your data model. +架构管理:创建/修改/删除对象、字段和关系。 这是以编程方式更改数据模型的方法。 -Both are available as REST and GraphQL. GraphQL adds batch upserts and the ability to traverse relations in a single query. Same underlying data either way. +两者均提供 REST 和 GraphQL。 GraphQL 还提供批量 upsert,以及在单个查询中遍历关系的能力。 无论哪种方式,底层数据相同。 -## Base URLs +## 基础 URL -| 环境 | 基础 URL | -| ----------- | ------------------------- | -| Cloud | `https://api.twenty.com/` | -| Self-Hosted | `https://{your-domain}/` | +| 环境 | 基础 URL | +| --- | ------------------------- | +| 云端 | `https://api.twenty.com/` | +| 自托管 | `https://{your-domain}/` | ## 身份验证 @@ -37,19 +37,19 @@ Both are available as REST and GraphQL. GraphQL adds batch upserts and the abili Authorization: Bearer YOUR_API_KEY ``` -Create an API key in **Settings → API & Webhooks → + Create key**. Copy it immediately — it's shown once. Keys can be scoped to a specific role under **Settings → Roles → Assignment tab** to limit what they can access. +在 **Settings → API & Webhooks → + Create key** 中创建 API 密钥。 请立即复制——仅显示一次。 可在 **Settings → Roles → Assignment 选项卡** 下将密钥限定到特定角色,以限制其可访问的范围。 -For OAuth-based access (external apps acting on behalf of users), see [OAuth](/l/zh/developers/extend/oauth). +对于基于 OAuth 的访问(外部应用代表用户执行操作),请参见 [OAuth](/l/zh/developers/extend/oauth)。 -## Batch operations +## 批量操作 -Both REST and GraphQL support batching up to 60 records per request — create, update, or delete. GraphQL also supports batch upsert (create-or-update in one call) using plural names like `CreateCompanies`. +REST 和 GraphQL 均支持每个请求最多批量处理 60 条记录——创建、更新或删除。 GraphQL 还支持批量 upsert(一次调用即可创建或更新),使用诸如 `CreateCompanies` 之类的复数名称。 -## Rate limits +## 速率限制 -| 限制 | 值 | -| ---------- | -------------- | -| Requests | 100 per minute | -| Batch size | 每次调用 60 条记录 | +| 限制 | 值 | +| ---- | ----------- | +| 请求 | 每分钟 100 次请求 | +| 批量大小 | 每次调用 60 条记录 | diff --git a/packages/twenty-docs/l/zh/developers/extend/apps/cli-and-testing.mdx b/packages/twenty-docs/l/zh/developers/extend/apps/cli-and-testing.mdx index 10b4e20cf9..45218b20b9 100644 --- a/packages/twenty-docs/l/zh/developers/extend/apps/cli-and-testing.mdx +++ b/packages/twenty-docs/l/zh/developers/extend/apps/cli-and-testing.mdx @@ -116,7 +116,7 @@ export default defineFrontComponent({ **前端组件** 运行在 Web Worker 中。 Node 内置模块不可用——仅可使用浏览器 API 以及可在浏览器环境中运行的 npm 包。 -Both environments have `twenty-client-sdk/core` and `twenty-client-sdk/metadata` available as pre-provided modules — these are not bundled but resolved at runtime by the server. +两个环境都将 `twenty-client-sdk/core` 和 `twenty-client-sdk/metadata` 作为预置模块提供 — 这些模块不会被打包,而是在运行时由服务器解析。 ## 测试你的应用 diff --git a/packages/twenty-docs/l/zh/developers/extend/apps/front-components.mdx b/packages/twenty-docs/l/zh/developers/extend/apps/front-components.mdx index a5387d9f94..8d35d4514c 100644 --- a/packages/twenty-docs/l/zh/developers/extend/apps/front-components.mdx +++ b/packages/twenty-docs/l/zh/developers/extend/apps/front-components.mdx @@ -1,6 +1,6 @@ --- title: 前端组件 -description: Build React components that render inside Twenty's UI with sandboxed isolation. +description: 构建可在 Twenty 的 UI 中渲染并具备沙盒隔离的 React 组件。 icon: window-maximize --- @@ -55,18 +55,18 @@ export default defineFrontComponent({ ## 配置字段 -| 字段 | 必填 | 描述 | -| --------------------- | -- | ----------------------------------------------------------------------------------- | -| `universalIdentifier` | 是 | 该组件的稳定唯一 ID | -| `component` | 是 | 一个 React 组件函数 | -| `name` | 否 | 显示名称 | -| `description` | 否 | 组件的功能描述 | -| `isHeadless` | 否 | Set to `true` if the component has no visible UI (see below) | -| `command` | 否 | Register the component as a command (see [command options](#command-options) below) | +| 字段 | 必填 | 描述 | +| --------------------- | -- | ---------------------------------------- | +| `universalIdentifier` | 是 | 该组件的稳定唯一 ID | +| `component` | 是 | 一个 React 组件函数 | +| `name` | 否 | 显示名称 | +| `description` | 否 | 组件的功能描述 | +| `isHeadless` | 否 | 如果组件没有可见的 UI,则设为 `true`(见下文) | +| `command` | 否 | 将该组件注册为命令(参见下文的[命令选项](#command-options)) | -## Placing a front component on a page +## 在页面上放置前端组件 -Beyond commands, you can embed a front component directly into a record page by adding it as a widget in a **page layout**. See the [definePageLayout](/l/zh/developers/extend/apps/skills-and-agents#definepagelayout) section for details. +除了命令之外,您还可以在**页面布局**中将其添加为小部件,从而将前端组件直接嵌入记录页面。 详情请参见[definePageLayout](/l/zh/developers/extend/apps/skills-and-agents#definepagelayout)部分。 ## 无头与非无头 @@ -100,7 +100,7 @@ export default defineFrontComponent({ }); ``` -Because the component returns `null`, Twenty skips rendering a container for it — no empty space appears in the layout. The component still has access to all hooks and the host communication API. +由于该组件返回 `null`,Twenty 会跳过为其渲染容器——布局中不会出现空白区域。 该组件仍可访问所有 hooks 和宿主通信 API。 ## SDK Command 组件 @@ -185,9 +185,9 @@ export default defineFrontComponent({ }); ``` -## Accessing runtime context +## 访问运行时上下文 -Inside your component, use SDK hooks to access the current user, record, and component instance: +在组件内部,使用 SDK 的 hooks 获取当前用户、记录和组件实例: ```tsx src/front-components/record-info.tsx import { defineFrontComponent } from 'twenty-sdk/define'; @@ -218,28 +218,28 @@ export default defineFrontComponent({ }); ``` -Available hooks: +可用的 hooks: -| 钩子 | Returns | 描述 | -| --------------------------------------------- | ------------------ | ---------------------------------------------------------- | -| `useUserId()` | `string` or `null` | The current user's ID | -| `useRecordId()` | `string` or `null` | The current record's ID (when placed on a record page) | -| `useFrontComponentId()` | `string` | This component instance's ID | -| `useFrontComponentExecutionContext(selector)` | 因情况而异 | Access the full execution context with a selector function | +| 钩子 | 返回值 | 描述 | +| --------------------------------------------- | ----------------- | ------------------- | +| `useUserId()` | `string` 或 `null` | 当前用户的 ID | +| `useRecordId()` | `string` 或 `null` | 当前记录的 ID(当放置在记录页面时) | +| `useFrontComponentId()` | `string` | 此组件实例的 ID | +| `useFrontComponentExecutionContext(selector)` | 因情况而异 | 使用选择器函数访问完整的执行上下文 | -## Host communication API +## 宿主通信 API -Front components can trigger navigation, modals, and notifications using functions from `twenty-sdk`: +前端组件可以使用来自 `twenty-sdk` 的函数触发导航、模态框和通知: -| 函数 | 描述 | -| ----------------------------------------------- | ----------------------------- | -| `navigate(to, params?, queryParams?, options?)` | Navigate to a page in the app | -| `openSidePanelPage(params)` | Open a side panel | -| `closeSidePanel()` | 关闭侧边栏 | -| `openCommandConfirmationModal(params)` | Show a confirmation dialog | -| `enqueueSnackbar(params)` | Show a toast notification | -| `unmountFrontComponent()` | Unmount the component | -| `updateProgress(progress)` | Update a progress indicator | +| 函数 | 描述 | +| ----------------------------------------------- | ------------- | +| `navigate(to, params?, queryParams?, options?)` | 在应用中导航到某个页面 | +| `openSidePanelPage(params)` | 打开侧边栏 | +| `closeSidePanel()` | 关闭侧边栏 | +| `openCommandConfirmationModal(params)` | 显示确认对话框 | +| `enqueueSnackbar(params)` | 显示一条 Toast 通知 | +| `unmountFrontComponent()` | 卸载该组件 | +| `updateProgress(progress)` | 更新进度指示器 | 下面是一个示例,使用宿主 API 在操作完成后显示一条 snackbar 并关闭侧边栏: @@ -286,24 +286,24 @@ export default defineFrontComponent({ }); ``` -## Command options +## 命令选项 -Adding a `command` field to `defineFrontComponent` registers the component in the command menu (Cmd+K). If `isPinned` is `true`, it also appears as a quick-action button in the top-right corner of the page. +在 `defineFrontComponent` 中添加一个 `command` 字段会将该组件注册到命令菜单(Cmd+K)中。 如果 `isPinned` 为 `true`,它还会显示为页面右上角的快速操作按钮。 -| 字段 | 必填 | 描述 | -| --------------------------------------- | -- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `universalIdentifier` | 是 | Stable unique ID for the command | -| `label` | 是 | Full label shown in the command menu (Cmd+K) | -| `shortLabel` | 否 | Shorter label displayed on the pinned quick-action button | -| `icon` | 否 | Icon name displayed next to the label (e.g. `'IconBolt'`, `'IconSend'`) | -| `isPinned` | 否 | When `true`, shows the command as a quick-action button in the top-right corner of the page | -| `availabilityType` | 否 | Controls where the command appears: `'GLOBAL'` (always available), `'RECORD_SELECTION'` (only when records are selected), or `'FALLBACK'` (shown when no other commands match) | -| `availabilityObjectUniversalIdentifier` | 否 | Restrict the command to pages of a specific object type (e.g. only on Company records) | -| `conditionalAvailabilityExpression` | 否 | A boolean expression to dynamically control whether the command is visible (see below) | +| 字段 | 必填 | 描述 | +| --------------------------------------- | -- | -------------------------------------------------------------------------------- | +| `universalIdentifier` | 是 | 该命令的稳定唯一 ID | +| `label` | 是 | 在命令菜单(Cmd+K)中显示的完整标签 | +| `shortLabel` | 否 | 固定的快速操作按钮上显示的较短标签 | +| `icon` | 否 | 显示在标签旁边的图标名称(例如 `'IconBolt'`、`'IconSend'`) | +| `isPinned` | 否 | 为 `true` 时,会将该命令显示为页面右上角的快速操作按钮 | +| `availabilityType` | 否 | 控制命令出现的位置:'GLOBAL'(始终可用)、'RECORD_SELECTION'(仅在选择了记录时),或 'FALLBACK'(当没有其他命令匹配时显示) | +| `availabilityObjectUniversalIdentifier` | 否 | 将该命令限制在特定对象类型的页面上(例如仅在 Company 记录上) | +| `conditionalAvailabilityExpression` | 否 | 用于动态控制命令是否可见的布尔表达式(见下文) | -## Conditional availability expressions +## 条件可用性表达式 -The `conditionalAvailabilityExpression` field lets you control when a command is visible based on the current page context. Import typed variables and operators from `twenty-sdk` to build expressions: +通过 `conditionalAvailabilityExpression` 字段,您可以基于当前页面上下文控制命令何时可见。 从 `twenty-sdk` 导入带类型的变量和运算符来构建表达式: ```tsx import { defineFrontComponent } from 'twenty-sdk/define'; @@ -332,45 +332,45 @@ export default defineFrontComponent({ }); ``` -**Context variables** — these represent the current state of the page: +**上下文变量** — 表示页面的当前状态: -| 变量 | 类型 | 描述 | -| ------------------------------ | --------- | ---------------------------------------------------------------- | -| `pageType` | `string` | Current page type (e.g. `'RecordIndexPage'`, `'RecordShowPage'`) | -| `isInSidePanel` | `boolean` | Whether the component is rendered in a side panel | -| `numberOfSelectedRecords` | `number` | Number of currently selected records | -| `isSelectAll` | `boolean` | Whether "select all" is active | -| `selectedRecords` | `array` | The selected record objects | -| `favoriteRecordIds` | `array` | IDs of favorited records | -| `objectPermissions` | `object` | Permissions for the current object type | -| `targetObjectReadPermissions` | `object` | Read permissions for the target object | -| `targetObjectWritePermissions` | `object` | Write permissions for the target object | -| `featureFlags` | `object` | Active feature flags | -| `objectMetadataItem` | `object` | Metadata of the current object type | -| `hasAnySoftDeleteFilterOnView` | `boolean` | Whether the current view has a soft-delete filter | +| 变量 | 类型 | 描述 | +| ------------------------------ | --------- | --------------------------------------------- | +| `pageType` | `string` | 当前页面类型(例如 'RecordIndexPage'、'RecordShowPage') | +| `isInSidePanel` | `boolean` | 组件是否在侧边栏中渲染 | +| `numberOfSelectedRecords` | `number` | 当前选中的记录数量 | +| `isSelectAll` | `boolean` | “全选”是否已激活 | +| `selectedRecords` | `array` | 已选记录对象 | +| `favoriteRecordIds` | `array` | 已收藏记录的 ID | +| `objectPermissions` | `object` | 当前对象类型的权限 | +| `targetObjectReadPermissions` | `object` | 目标对象的读取权限 | +| `targetObjectWritePermissions` | `object` | 目标对象的写入权限 | +| `featureFlags` | `object` | 当前启用的功能标志 | +| `objectMetadataItem` | `object` | 当前对象类型的元数据 | +| `hasAnySoftDeleteFilterOnView` | `boolean` | 当前视图是否包含软删除筛选器 | -**Operators** — combine variables into boolean expressions: +**运算符** — 将变量组合为布尔表达式: -| Operator | 描述 | -| ----------------------------------- | ----------------------------------------------------------------- | -| `isDefined(value)` | `true` if the value is not null/undefined | -| `isNonEmptyString(value)` | `true` if the value is a non-empty string | -| `includes(array, value)` | `true` if the array contains the value | -| `includesEvery(array, prop, value)` | `true` if every item's property includes the value | -| `every(array, prop)` | `true` if the property is truthy on every item | -| `everyDefined(array, prop)` | `true` if the property is defined on every item | -| `everyEquals(array, prop, value)` | `true` if the property equals the value on every item | -| `some(array, prop)` | `true` if the property is truthy on at least one item | -| `someDefined(array, prop)` | `true` if the property is defined on at least one item | -| `someEquals(array, prop, value)` | `true` if the property equals the value on at least one item | -| `someNonEmptyString(array, prop)` | `true` if the property is a non-empty string on at least one item | -| `none(array, prop)` | `true` if the property is falsy on every item | -| `noneDefined(array, prop)` | `true` if the property is undefined on every item | -| `noneEquals(array, prop, value)` | `true` if the property does not equal the value on any item | +| 运算符 | 描述 | +| ----------------------------------- | -------------------------------- | +| `isDefined(value)` | 当该值不是 null/undefined 时为 `true` | +| `isNonEmptyString(value)` | 当该值为非空字符串时为 `true` | +| `includes(array, value)` | 当数组包含该值时为 `true` | +| `includesEvery(array, prop, value)` | 当每个条目的属性都包含该值时为 `true` | +| `every(array, prop)` | 当该属性在每个条目上都为 truthy 时为 `true` | +| `everyDefined(array, prop)` | 当该属性在每个条目上都已定义时为 `true` | +| `everyEquals(array, prop, value)` | 当该属性在每个条目上都等于该值时为 `true` | +| `some(array, prop)` | 当至少一个条目上的该属性为 truthy 时为 `true` | +| `someDefined(array, prop)` | 当至少一个条目上的该属性已定义时为 `true` | +| `someEquals(array, prop, value)` | 当至少一个条目上的该属性等于该值时为 `true` | +| `someNonEmptyString(array, prop)` | 当至少一个条目上的该属性为非空字符串时为 `true` | +| `none(array, prop)` | 当该属性在每个条目上都为 falsy 时为 `true` | +| `noneDefined(array, prop)` | 当该属性在每个条目上都为 undefined 时为 `true` | +| `noneEquals(array, prop, value)` | 当该属性在任意条目上都不等于该值时为 `true` | -## Public assets +## 公共资源 -Front components can access files from the app's `public/` directory using `getPublicAssetUrl`: +前端组件可以使用 `getPublicAssetUrl` 访问应用的 `public/` 目录中的文件: ```tsx import { defineFrontComponent, getPublicAssetUrl } from 'twenty-sdk/define'; @@ -384,18 +384,18 @@ export default defineFrontComponent({ }); ``` -See the [public assets section](/l/zh/developers/extend/apps/cli-and-testing#public-assets-public-folder) for details. +详情请参见[公共资源部分](/l/zh/developers/extend/apps/cli-and-testing#public-assets-public-folder)。 ## 样式 -Front components support multiple styling approaches. You can use: +前端组件支持多种样式方案。 您可以使用: -* **Inline styles** — `style={{ color: 'red' }}` -* **Twenty UI components** — import from `twenty-sdk/ui` (Button, Tag, Status, Chip, Avatar, and more) -* **Emotion** — CSS-in-JS with `@emotion/react` -* **Styled-components** — `styled.div` patterns -* **Tailwind CSS** — utility classes -* **Any CSS-in-JS library** compatible with React +* **内联样式** — `style={{ color: 'red' }}` +* **Twenty UI 组件** — 从 `twenty-sdk/ui` 导入(Button、Tag、Status、Chip、Avatar 等) +* **Emotion** — 使用 `@emotion/react` 的 CSS-in-JS +* **Styled-components** — `styled.div` 模式 +* **Tailwind CSS** — 工具类 +* **任何 CSS-in-JS 库**(与 React 兼容) ```tsx import { defineFrontComponent } from 'twenty-sdk/define'; diff --git a/packages/twenty-docs/l/zh/developers/extend/apps/layout.mdx b/packages/twenty-docs/l/zh/developers/extend/apps/layout.mdx index d6f6d85e22..93677c8468 100644 --- a/packages/twenty-docs/l/zh/developers/extend/apps/layout.mdx +++ b/packages/twenty-docs/l/zh/developers/extend/apps/layout.mdx @@ -1,28 +1,28 @@ --- title: 布局 -description: Define views, navigation menu items, and page layouts to shape how your app appears in Twenty. +description: 定义视图、导航菜单项和页面布局,以塑造你的应用在 Twenty 中的呈现方式。 icon: table-columns --- -Layout entities control how your app surfaces inside Twenty's UI — what lives in the sidebar, which saved views ship with the app, and how a record detail page is arranged. +布局实体控制你的应用如何在 Twenty 的 UI 中呈现——侧边栏中有哪些内容、应用随附哪些已保存的视图,以及记录详情页如何排布。 -## Layout concepts +## 布局概念 -| Concept | What it controls | 实体 | -| ------------------------ | --------------------------------------------------------------------------------- | -------------------------- | -| **View** | A saved list configuration for an object — visible fields, order, filters, groups | `defineView` | -| **Navigation Menu Item** | An entry in the left sidebar that links to a view or an external URL | `defineNavigationMenuItem` | -| **Page Layout** | The tabs and widgets that make up a record's detail page | `definePageLayout` | +| 概念 | 控制内容 | 实体 | +| --------- | -------------------------- | -------------------------- | +| **视图** | 对象的已保存列表配置——可见字段、顺序、筛选器、分组 | `defineView` | +| **导航菜单项** | 左侧侧边栏中的一项,链接到某个视图或外部 URL | `defineNavigationMenuItem` | +| **页面布局** | 构成记录详情页的选项卡和小部件 | `definePageLayout` | -Views, navigation items, and page layouts reference each other by `universalIdentifier`: +视图、导航菜单项和页面布局通过 `universalIdentifier` 相互引用: -* A **navigation menu item** of type `VIEW` points at a `defineView` identifier, so the sidebar link opens that saved view. -* A **page layout** of type `RECORD_PAGE` targets an object and can embed [front components](/l/zh/developers/extend/apps/front-components) inside its tabs as widgets. +* 类型为 `VIEW` 的**导航菜单项**指向一个 `defineView` 标识符,因此侧边栏链接会打开该已保存视图。 +* 类型为 `RECORD_PAGE` 的**页面布局**面向某个对象,并可在其选项卡内嵌入[前端组件](/l/zh/developers/extend/apps/front-components)作为小部件。 -Views are saved configurations for how records of an object are displayed — including which fields are visible, their order, and any filters or groups applied. Use `defineView()` to ship pre-configured views with your app: +视图是关于对象记录如何显示的已保存配置——包括哪些字段可见、它们的顺序,以及应用的任何筛选器或分组。 使用 `defineView()` 随你的应用一起提供预配置的视图: ```ts src/views/example-view.ts import { defineView, ViewKey } from 'twenty-sdk/define'; @@ -49,16 +49,16 @@ export default defineView({ ``` 关键点: -* `objectUniversalIdentifier` specifies which object this view applies to. -* `key` determines the view type (e.g., `ViewKey.INDEX` for the main list view). -* `fields` controls which columns appear and their order. Each field references a `fieldMetadataUniversalIdentifier`. -* You can also define `filters`, `filterGroups`, `groups`, and `fieldGroups` for more advanced configurations. -* `position` controls the ordering when multiple views exist for the same object. +* `objectUniversalIdentifier` 指定此视图适用于哪个对象。 +* `key` 决定视图类型(例如,主列表视图使用 `ViewKey.INDEX`)。 +* `fields` 控制显示哪些列及其顺序。 每个字段引用一个 `fieldMetadataUniversalIdentifier`。 +* 你还可以定义 `filters`、`filterGroups`、`groups` 和 `fieldGroups` 以进行更高级的配置。 +* `position` 在同一对象存在多个视图时控制其排序。 -Navigation menu items add custom entries to the workspace sidebar. Use `defineNavigationMenuItem()` to link to views, external URLs, or objects: +导航菜单项会在工作区侧边栏中添加自定义条目。 使用 `defineNavigationMenuItem()` 链接到视图、外部 URL 或对象: ```ts src/navigation-menu-items/example-navigation-menu-item.ts import { defineNavigationMenuItem, NavigationMenuItemType } from 'twenty-sdk/define'; @@ -76,15 +76,15 @@ export default defineNavigationMenuItem({ ``` 关键点: -* `type` determines what the menu item links to: `NavigationMenuItemType.VIEW` for a saved view, or `NavigationMenuItemType.LINK` for an external URL. -* For view links, set `viewUniversalIdentifier`. For external links, set `link`. -* `position` controls the ordering in the sidebar. -* `icon` and `color` (optional) customize the appearance. +* `type` 决定菜单项链接到的目标:`NavigationMenuItemType.VIEW` 表示已保存视图,`NavigationMenuItemType.LINK` 表示外部 URL。 +* 对于视图链接,设置 `viewUniversalIdentifier`。 对于外部链接,设置 `link`。 +* `position` 控制在侧边栏中的排序。 +* `icon` 和 `color`(可选)用于自定义外观。 - + -Page layouts let you customize how a record detail page looks — which tabs appear, what widgets are inside each tab, and how they are arranged. Use `definePageLayout()` to ship custom layouts with your app: +页面布局使你可以自定义记录详情页的外观——显示哪些选项卡、每个选项卡内有哪些小部件,以及它们如何排列。 使用 `definePageLayout()` 随你的应用一起提供自定义布局: ```ts src/page-layouts/example-record-page-layout.ts import { definePageLayout, PageLayoutTabLayoutMode } from 'twenty-sdk/define'; @@ -121,11 +121,11 @@ export default definePageLayout({ ``` 关键点: -* `type` is typically `'RECORD_PAGE'` to customize the detail view of a specific object. -* `objectUniversalIdentifier` specifies which object this layout applies to. -* Each `tab` defines a section of the page with a `title`, `position`, and `layoutMode` (`CANVAS` for free-form layout). -* Each `widget` inside a tab can render a front component, a relation list, or other built-in widget types. -* `position` on tabs controls their order. Use higher values (e.g., 50) to place custom tabs after built-in ones. +* `type` 通常为 'RECORD_PAGE',用于自定义特定对象的详情视图。 +* `objectUniversalIdentifier` 指定此布局适用于哪个对象。 +* 每个 `tab` 使用 `title`、`position` 和 `layoutMode` 定义页面的一个部分(`CANVAS` 表示自由布局)。 +* 选项卡内的每个 `widget` 可以渲染一个前端组件、关系列表或其他内置小部件类型。 +* 选项卡上的 `position` 控制其顺序。 使用更高的值(例如 50)可将自定义选项卡放在内置选项卡之后。 diff --git a/packages/twenty-docs/l/zh/developers/introduction.mdx b/packages/twenty-docs/l/zh/developers/introduction.mdx index ac6b6272e1..94187bed29 100644 --- a/packages/twenty-docs/l/zh/developers/introduction.mdx +++ b/packages/twenty-docs/l/zh/developers/introduction.mdx @@ -1,28 +1,28 @@ --- title: 开发者 -description: Build apps, use the API, self-host, or contribute to the codebase. +description: 构建应用、使用 API、进行自托管,或为代码库做出贡献。 --- import { CardTitle } from "/snippets/card-title.mdx" - Apps - Extend Twenty with custom objects, server-side logic, UI components, and AI agents — all as TypeScript packages. + 应用 + 使用自定义对象、服务器端逻辑、UI 组件和 AI 代理扩展 Twenty——全部以 TypeScript 软件包形式提供。 API - REST and GraphQL APIs, webhooks, and OAuth. + REST 和 GraphQL API、Webhook 回调和 OAuth。 - Self-Host - Run Twenty on your own infrastructure. + 自托管 + 在您自己的基础设施上运行 Twenty。 - Contribute - Set up the monorepo locally and submit PRs. + 参与贡献 + 在本地设置 monorepo 并提交 PR。