From 44ba7725aea7019421fa42449715ac0abe57397f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 14:46:37 +0200 Subject: [PATCH] i18n - docs translations (#19934) Created by Github action Co-authored-by: github-actions --- .../capabilities/bug-and-requests.mdx | 2 +- .../l/ar/developers/contribute/commands.mdx | 4 +- .../ar/developers/contribute/style-guide.mdx | 70 +++++------ .../l/ar/developers/extend/oauth.mdx | 118 +++++++++--------- .../l/ar/developers/extend/webhooks.mdx | 4 +- .../l/ar/twenty-ui/display/chip.mdx | 2 +- .../l/ar/twenty-ui/input/block-editor.mdx | 6 +- .../l/ar/twenty-ui/input/icon-picker.mdx | 2 +- .../l/ar/twenty-ui/input/image-input.mdx | 2 +- .../l/ar/twenty-ui/input/select.mdx | 2 +- .../l/ar/twenty-ui/navigation/breadcrumb.mdx | 2 +- .../l/ar/twenty-ui/navigation/step-bar.mdx | 2 +- .../cs/developers/contribute/style-guide.mdx | 66 +++++----- .../l/cs/developers/extend/oauth.mdx | 118 +++++++++--------- .../l/cs/developers/extend/webhooks.mdx | 4 +- .../capabilities/troubleshooting.mdx | 2 +- .../layout/capabilities/record-pages.mdx | 2 +- .../de/developers/contribute/style-guide.mdx | 64 +++++----- .../l/de/developers/extend/oauth.mdx | 118 +++++++++--------- .../l/de/developers/extend/webhooks.mdx | 4 +- .../capabilities/troubleshooting.mdx | 2 +- .../l/de/twenty-ui/input/block-editor.mdx | 6 +- .../l/de/twenty-ui/navigation/breadcrumb.mdx | 8 +- .../layout/capabilities/navigation.mdx | 4 +- .../it/developers/contribute/style-guide.mdx | 2 +- .../l/it/developers/extend/oauth.mdx | 118 +++++++++--------- .../l/it/developers/extend/webhooks.mdx | 4 +- .../l/it/twenty-ui/input/block-editor.mdx | 6 +- .../pt/developers/contribute/style-guide.mdx | 2 +- .../l/pt/developers/extend/webhooks.mdx | 4 +- .../ru/developers/contribute/style-guide.mdx | 2 +- .../extend/apps/cli-and-testing.mdx | 4 +- .../l/ru/developers/extend/oauth.mdx | 4 +- .../l/ru/developers/extend/webhooks.mdx | 4 +- .../extend/apps/cli-and-testing.mdx | 4 +- .../l/tr/developers/extend/oauth.mdx | 10 +- .../l/tr/developers/extend/webhooks.mdx | 4 +- .../capabilities/troubleshooting.mdx | 2 +- .../l/tr/twenty-ui/display/icons.mdx | 2 +- .../l/zh/developers/extend/oauth.mdx | 118 +++++++++--------- .../l/zh/developers/extend/webhooks.mdx | 4 +- 41 files changed, 454 insertions(+), 454 deletions(-) diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/bug-and-requests.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/bug-and-requests.mdx index ef778447f7..303b59836f 100644 --- a/packages/twenty-docs/l/ar/developers/contribute/capabilities/bug-and-requests.mdx +++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/bug-and-requests.mdx @@ -1,6 +1,6 @@ --- title: الأخطاء والطلبات وطلبات السحب -icon: bug +icon: خلل info: أبلغ عن المشكلات، واطلب الميزات، وساهم بالشفرة البرمجية --- diff --git a/packages/twenty-docs/l/ar/developers/contribute/commands.mdx b/packages/twenty-docs/l/ar/developers/contribute/commands.mdx index ea6ff7d83a..f4d8132732 100644 --- a/packages/twenty-docs/l/ar/developers/contribute/commands.mdx +++ b/packages/twenty-docs/l/ar/developers/contribute/commands.mdx @@ -37,7 +37,7 @@ npx nx typecheck twenty-front npx nx typecheck twenty-server ``` -## "الاختبار" +## الاختبار ```bash # Frontend @@ -61,7 +61,7 @@ npx nx run twenty-front:graphql:generate # Regenerate typ npx nx run twenty-front:graphql:generate --configuration=metadata # Metadata schema ``` -## "الترجمات" +## الترجمات ```bash npx nx run twenty-front:lingui:extract # Extract strings diff --git a/packages/twenty-docs/l/ar/developers/contribute/style-guide.mdx b/packages/twenty-docs/l/ar/developers/contribute/style-guide.mdx index 625b3a341a..f1fb3cd6e5 100644 --- a/packages/twenty-docs/l/ar/developers/contribute/style-guide.mdx +++ b/packages/twenty-docs/l/ar/developers/contribute/style-guide.mdx @@ -1,14 +1,14 @@ --- title: دليل الأسلوب -icon: paintbrush -description: Code conventions and best practices for contributing to Twenty. +icon: فرشاة الرسم},{ +description: اتفاقيات الشيفرة وأفضل الممارسات للمساهمة في Twenty. --- ## React -### Functional components only +### المكوّنات الوظيفية فقط -Always use TSX functional components with named exports. +استخدم دائمًا مكوّنات TSX الوظيفية مع تصديرات مسمّاة. ```tsx // ❌ Bad @@ -23,9 +23,9 @@ export function MyComponent() { }; ``` -### الإزاحة +### الخصائص -Create a type named `{ComponentName}Props`. Use destructuring. Don't use `React.FC`. +أنشئ نوعًا باسم `{ComponentName}Props`. استخدم التفكيك. لا تستخدم `React.FC`. ```tsx type MyComponentProps = { @@ -35,7 +35,7 @@ type MyComponentProps = { export const MyComponent = ({ name }: MyComponentProps) =>
Hello {name}
; ``` -### No single-variable prop spreading +### لا تستخدم نشر الخصائص من متغير واحد ```tsx // ❌ Bad @@ -45,9 +45,9 @@ const MyComponent = (props: MyComponentProps) => ; const MyComponent = ({ prop1, prop2 }: MyComponentProps) => ; ``` -## "إدارة الحالة" +## إدارة الحالة -### Jotai atoms for global state +### ذرات Jotai للحالة العامة ```tsx import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; @@ -59,16 +59,16 @@ export const myAtomState = createAtomState({ }); ``` -* Prefer atoms over prop drilling -* Don't use `useRef` for state — use `useState` or atoms -* Use atom families and selectors for lists +* فضّل الذرات على تمرير الخصائص عبر المستويات (prop drilling) +* لا تستخدم `useRef` للحالة — استخدم `useState` أو الذرات +* استخدم عائلات الذرات والمحددات للقوائم -### Avoid unnecessary re-renders +### تجنّب عمليات إعادة التصيير غير الضرورية -* Extract `useEffect` and data fetching into sibling sidecar components -* Prefer event handlers (`handleClick`, `handleChange`) over `useEffect` -* Don't use `React.memo()` — fix the root cause instead -* Limit `useCallback` / `useMemo` usage +* انقل `useEffect` وجلب البيانات إلى مكوّنات جانبية شقيقة (sidecar) +* فضّل معالِجات الأحداث (`handleClick`, `handleChange`) على `useEffect` +* لا تستخدم `React.memo()` — أصلِح السبب الجذري بدلًا من ذلك +* حدّد استخدام `useCallback` / `useMemo` ```tsx // ❌ Bad — useEffect in the same component causes re-renders @@ -94,11 +94,11 @@ export const Page = () => { ## TypeScript -* **`type` over `interface`** — more flexible, easier to compose -* **String literals over enums** — except for GraphQL codegen enums and internal library APIs -* **No `any`** — strict TypeScript enforced -* **No type imports** — use regular imports (enforced by Oxlint `typescript/consistent-type-imports`) -* **Use [Zod](https://github.com/colinhacks/zod)** for runtime validation of untyped objects +* **`type` بدلًا من `interface`** — أكثر مرونة وأسهل في التركيب +* **النصوص الحرفية بدل التعدادات** — باستثناء تعدادات codegen الخاصة بـ GraphQL وواجهات برمجة تطبيقات المكتبة الداخلية +* **بدون `any`** — يتم فرض TypeScript الصارم +* **عدم استيراد الأنواع** — استخدم استيرادات عادية (مفروض بواسطة Oxlint `typescript/consistent-type-imports`) +* **استخدم [Zod](https://github.com/colinhacks/zod)** للتحقق وقت التشغيل من الكائنات غير محددة النوع ## JavaScript @@ -112,17 +112,17 @@ onClick?.(); ## التسمية -* **Variables**: camelCase, descriptive (`email` not `value`, `fieldMetadata` not `fm`) -* **Constants**: SCREAMING_SNAKE_CASE -* **Types/Classes**: PascalCase -* **Files/directories**: kebab-case (`.component.tsx`, `.service.ts`, `.entity.ts`) -* **Event handlers**: `handleClick` (not `onClick` for the handler function) -* **Component props**: prefix with component name (`ButtonProps`) -* **Styled components**: prefix with `Styled` (`StyledTitle`) +* **المتغيرات**: camelCase، وصفية (`email` وليس `value`، `fieldMetadata` وليس `fm`) +* **الثوابت**: SCREAMING_SNAKE_CASE +* **الأنواع/الفئات**: PascalCase +* **الملفات/المجلدات**: kebab-case (`.component.tsx`, `.service.ts`, `.entity.ts`) +* **معالجات الأحداث**: `handleClick` (وليس `onClick` لدالة المعالج) +* **خصائص المكوّن**: ابدأ باسم المكوّن (`ButtonProps`) +* **مكوّنات Styled**: ابدأ بـ `Styled` (`StyledTitle`) ## التنسيق -Use [Linaria](https://github.com/callstack/linaria) styled components. Use theme values — avoid hardcoded `px`, `rem`, or colors. +استخدم مكوّنات [Linaria](https://github.com/callstack/linaria) المنسقة. استخدم قيم السمة — وتجنّب القيم المضمّنة صراحة مثل `px` و`rem` أو الألوان. ```tsx // ❌ Bad @@ -142,7 +142,7 @@ const StyledButton = styled.button` ## استيرادات -Use aliases instead of relative paths: +استخدم الأسماء المستعارة بدل المسارات النسبية: ```tsx // ❌ Bad @@ -153,7 +153,7 @@ import { Foo } from '~/testing/decorators/Foo'; import { Bar } from '@/modules/bar/components/Bar'; ``` -## Folder Structure +## هيكلية المجلدات ``` front @@ -171,6 +171,6 @@ front └── ui/ # Reusable UI components (display, input, feedback, ...) ``` -* Modules can import from other modules, but `ui/` should stay dependency-free -* Use `internal/` subfolders for module-private code -* Components under 300 lines, services under 500 lines +* يمكن للوحدات الاستيراد من وحدات أخرى، لكن يجب أن يبقى `ui/` خاليًا من التبعيات +* استخدم المجلدات الفرعية `internal/` للشيفرة الخاصة بالوحدة +* المكوّنات أقل من 300 سطر، والخدمات أقل من 500 سطر diff --git a/packages/twenty-docs/l/ar/developers/extend/oauth.mdx b/packages/twenty-docs/l/ar/developers/extend/oauth.mdx index cf0a1f062e..229e7c63ee 100644 --- a/packages/twenty-docs/l/ar/developers/extend/oauth.mdx +++ b/packages/twenty-docs/l/ar/developers/extend/oauth.mdx @@ -1,23 +1,23 @@ --- title: OAuth icon: المفتاح -description: Authorization code flow with PKCE and client credentials for server-to-server access. +description: تدفق رمز التفويض مع PKCE وبيانات اعتماد العميل للوصول من خادم إلى خادم. --- -Twenty implements OAuth 2.0 with authorization code + PKCE for user-facing apps and client credentials for server-to-server access. Clients are registered dynamically via [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591) — no manual setup in a dashboard. +تُطبِّق Twenty بروتوكول OAuth 2.0 باستخدام رمز التفويض + PKCE للتطبيقات المواجهة للمستخدم، وبيانات اعتماد العميل للوصول من خادم إلى خادم. يُجرى تسجيل العملاء ديناميكيًا عبر [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591) — دون إعداد يدوي في لوحة التحكم. -## When to Use OAuth +## متى تستخدم OAuth -| السيناريو | Auth Method | -| --------------------------------------- | -------------------------------------------------------------------------------- | -| Internal scripts, automation | [API Key](/l/ar/developers/extend/api#authentication) | -| External app acting on behalf of a user | **OAuth — Authorization Code** | -| Server-to-server, no user context | **OAuth — Client Credentials** | -| Twenty App with UI extensions | [Apps](/l/ar/developers/extend/apps/getting-started) (OAuth is handled automatically) | +| السيناريو | طريقة المصادقة | +| -------------------------------------------- | ------------------------------------------------------------------------------------ | +| البرامج النصية الداخلية، والأتمتة | [مفتاح API](/l/ar/developers/extend/api#authentication) | +| تطبيق خارجي يعمل نيابةً عن مستخدم | **OAuth — رمز التفويض** | +| من خادم إلى خادم، دون سياق مستخدم | **OAuth — بيانات اعتماد العميل** | +| تطبيق Twenty مع امتدادات واجهة المستخدم (UI) | [التطبيقات](/l/ar/developers/extend/apps/getting-started) (يتم التعامل مع OAuth تلقائيًا) | -## Register a Client +## تسجيل عميل -Twenty supports **dynamic client registration** per [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591). No manual setup needed — register programmatically: +تدعم Twenty **التسجيل الديناميكي للعملاء** وفقًا لـ[RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591). لا حاجة إلى إعداد يدوي — سجّل برمجيًا: ```bash POST /oauth/register @@ -31,7 +31,7 @@ Content-Type: application/json } ``` -**Response:** +**الاستجابة:** ```json { @@ -43,23 +43,23 @@ Content-Type: application/json ``` -Store the `client_secret` securely — it cannot be retrieved later. +احفظ `client_secret` بأمان — لا يمكن استرجاعه لاحقًا. ## النطاقات -| Scope | الوصول | -| --------- | ---------------------------------------------------- | -| `api` | Full read/write access to the Core and Metadata APIs | -| `profile` | Read the authenticated user's profile information | +| النطاق | الوصول | +| --------- | -------------------------------------------------------------- | +| `api` | إمكانية قراءة/كتابة كاملة لواجهات برمجة تطبيقات Core وMetadata | +| `profile` | قراءة معلومات ملف تعريف المستخدم المُصادَق عليه | -Request scopes as a space-separated string: `scope=api profile` +اطلب النطاقات كسلسلة مفصولة بمسافات: `scope=api profile` -## Authorization Code Flow +## تدفق رمز التفويض -Use this flow when your app acts on behalf of a Twenty user. +استخدم هذا التدفق عندما يعمل تطبيقك نيابةً عن مستخدم Twenty. -### 1. Redirect the user to authorize +### 1. أعد توجيه المستخدم للتفويض ``` GET /oauth/authorize? @@ -72,29 +72,29 @@ GET /oauth/authorize? code_challenge_method=S256 ``` -| المعلمة | مطلوب | الوصف | -| ----------------------- | -------- | ------------------------------------------------------------ | -| `client_id` | نعم | Your registered client ID | -| `response_type` | نعم | Must be `code` | -| `redirect_uri` | نعم | Must match a registered redirect URI | -| `scope` | لا | Space-separated scopes (defaults to `api`) | -| `الحالة` | مُوصى به | Random string to prevent CSRF attacks | -| `code_challenge` | مُوصى به | PKCE challenge (SHA-256 hash of verifier, base64url-encoded) | -| `code_challenge_method` | مُوصى به | Must be `S256` when using PKCE | +| المعلمة | مطلوب | الوصف | +| ----------------------- | -------- | -------------------------------------------------------- | +| `client_id` | نعم | معرّف العميل المسجّل الخاص بك | +| `response_type` | نعم | يجب أن يكون `code` | +| `redirect_uri` | نعم | يجب أن يطابق عنوان URI لإعادة التوجيه المسجّل | +| `scope` | لا | نطاقات مفصولة بمسافات (القيمة الافتراضية هي `api`) | +| `state` | مُوصى به | سلسلة عشوائية لمنع هجمات CSRF | +| `code_challenge` | مُوصى به | تحدّي PKCE (تجزئة SHA-256 لـ verifier، بترميز base64url) | +| `code_challenge_method` | مُوصى به | يجب أن تكون `S256` عند استخدام PKCE | -The user sees a consent screen and approves or denies access. +يرى المستخدم شاشة موافقة ويوافق على الوصول أو يرفضه. -### ٢. Handle the callback +### ٢. معالجة الاستدعاء المرتجع -After authorization, Twenty redirects back to your `redirect_uri`: +بعد التفويض، تعيد Twenty التوجيه إلى `redirect_uri` الخاص بك: ``` https://myapp.com/callback?code=AUTH_CODE&state=random_state_value ``` -Verify that `state` matches what you sent. +تحقّق من أن قيمة `state` تطابق ما أرسلته. -### ٣. Exchange the code for tokens +### ٣. استبدِل الرمز بالرموز ```bash POST /oauth/token @@ -108,7 +108,7 @@ client_secret=YOUR_CLIENT_SECRET& code_verifier=YOUR_PKCE_VERIFIER ``` -**Response:** +**الاستجابة:** ```json { @@ -119,14 +119,14 @@ code_verifier=YOUR_PKCE_VERIFIER } ``` -### 4. Use the access token +### 4. استخدم رمز الوصول ```bash GET /rest/companies Authorization: Bearer ACCESS_TOKEN ``` -### 5. Refresh when expired +### 5. حدِّث عند انتهاء الصلاحية ```bash POST /oauth/token @@ -138,9 +138,9 @@ client_id=YOUR_CLIENT_ID& client_secret=YOUR_CLIENT_SECRET ``` -## Client Credentials Flow +## تدفق بيانات اعتماد العميل -For server-to-server integrations with no user interaction: +لعمليات التكامل من خادم إلى خادم دون تفاعل مستخدم: ```bash POST /oauth/token @@ -152,38 +152,38 @@ client_secret=YOUR_CLIENT_SECRET& scope=api ``` -The returned token has workspace-level access, not tied to any specific user. +الرمز المُعاد يمتلك وصولًا على مستوى مساحة العمل، وغير مرتبط بأي مستخدم محدّد. -## Server Discovery +## اكتشاف الخادم -Twenty publishes its OAuth configuration at a standard discovery endpoint: +تنشر Twenty إعدادات OAuth الخاصة بها عند نقطة اكتشاف قياسية: ``` GET /.well-known/oauth-authorization-server ``` -This returns all endpoints, supported grant types, scopes, and capabilities — useful for building generic OAuth clients. +يعيد هذا جميع نقاط النهاية وأنواع المنح المدعومة والنطاقات والقدرات — وهو مفيد لبناء عملاء OAuth عامّين. -## API Endpoints Summary +## ملخص نقاط نهاية API -| نقطة النهاية | الغرض | -| ----------------------------------------- | --------------------------- | -| `/.well-known/oauth-authorization-server` | Server metadata discovery | -| `/oauth/register` | Dynamic client registration | -| `/oauth/authorize` | User authorization | -| `/oauth/token` | Token exchange and refresh | +| نقطة النهاية | الغرض | +| ----------------------------------------- | -------------------------- | +| `/.well-known/oauth-authorization-server` | اكتشاف بيانات تعريف الخادم | +| `/oauth/register` | التسجيل الديناميكي للعميل | +| `/oauth/authorize` | تفويض المستخدم | +| `/oauth/token` | مبادلة الرموز وتحديثها | | البيئة | عنوان URL الأساسي | | --------------------- | ------------------------ | | **السحابة** | `https://api.twenty.com` | | **الاستضافة الذاتية** | `https://{your-domain}` | -## OAuth vs API Keys +## OAuth مقابل مفاتيح API -| | مفاتيح واجهة برمجة التطبيقات | OAuth | -| ------------------ | ---------------------------- | -------------------------------------- | -| **الإعداد** | Generate in Settings | Register a client, implement flow | -| **User context** | None (workspace-level) | Specific user's permissions | -| **الأفضل لـ** | Scripts, internal tools | External apps, multi-user integrations | -| **Token rotation** | يدوي | Automatic via refresh tokens | -| **Scoped access** | Full API access | Granular via scopes | +| | مفاتيح واجهة برمجة التطبيقات | OAuth | +| ------------------------ | -------------------------------- | ------------------------------------------ | +| **الإعداد** | إنشاء من الإعدادات | تسجيل عميل، وتنفيذ التدفق | +| **سياق المستخدم** | لا يوجد (على مستوى مساحة العمل) | أذونات مستخدم محدّد | +| **الأفضل لـ** | البرامج النصية، الأدوات الداخلية | تطبيقات خارجية، وتكاملات متعددة المستخدمين | +| **تدوير الرموز** | يدوي | تلقائي عبر رموز التحديث | +| **وصول محدود بالنطاقات** | وصول كامل إلى API | تفصيلي عبر النطاقات | diff --git a/packages/twenty-docs/l/ar/developers/extend/webhooks.mdx b/packages/twenty-docs/l/ar/developers/extend/webhooks.mdx index 26c51606c5..0a5d49ee05 100644 --- a/packages/twenty-docs/l/ar/developers/extend/webhooks.mdx +++ b/packages/twenty-docs/l/ar/developers/extend/webhooks.mdx @@ -1,12 +1,12 @@ --- title: خطافات الويب icon: satellite-dish -description: Get notified when records change — HTTP POST to your endpoint on every create, update, or delete. +description: احصل على إشعار عند تغيّر السجلات — سيتم إرسال طلب HTTP POST إلى endpoint الخاص بك عند كل عملية إنشاء أو تحديث أو حذف. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -Twenty sends an HTTP POST to your URL whenever a record is created, updated, or deleted. All object types are covered, including custom objects. +يقوم Twenty بإرسال طلب HTTP POST إلى URL الخاص بك كلما تم إنشاء سجل أو تحديثه أو حذفه. جميع أنواع الكائنات مشمولة، بما في ذلك الكائنات المخصصة. ## إنشاء خطاف ويب diff --git a/packages/twenty-docs/l/ar/twenty-ui/display/chip.mdx b/packages/twenty-docs/l/ar/twenty-ui/display/chip.mdx index cd29778269..9d5834c54a 100644 --- a/packages/twenty-docs/l/ar/twenty-ui/display/chip.mdx +++ b/packages/twenty-docs/l/ar/twenty-ui/display/chip.mdx @@ -38,7 +38,7 @@ export const MyComponent = () => { -| المحددات | النوع | الوصف | +| الخصائص | النوع | الوصف | | ------------------ | ----------------------- | ---------------------------------------------------------------------- | | linkToEntity | نص | الرابط إلى الكيان | | معرف الكيان | نص | المعرف الفريد للكيان | diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/block-editor.mdx index a89d44a28b..131db1adf9 100644 --- a/packages/twenty-docs/l/ar/twenty-ui/input/block-editor.mdx +++ b/packages/twenty-docs/l/ar/twenty-ui/input/block-editor.mdx @@ -26,9 +26,9 @@ export const MyComponent = () => { -| المحددات | النوع | الوصف | -| -------- | ----------------- | ------------------------ | -| محرر | `BlockNoteEditor` | مثيل أو تكوين محرر الكتل | +| الخصائص | النوع | الوصف | +| ------- | ----------------- | ------------------------ | +| محرر | `BlockNoteEditor` | مثيل أو تكوين محرر الكتل | diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/icon-picker.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/icon-picker.mdx index a942cf46f7..a56848f081 100644 --- a/packages/twenty-docs/l/ar/twenty-ui/input/icon-picker.mdx +++ b/packages/twenty-docs/l/ar/twenty-ui/input/icon-picker.mdx @@ -40,7 +40,7 @@ export const MyComponent = () => { -| المحددات | النوع | الوصف | +| الخصائص | النوع | الوصف | | ----------------------- | ----------- | ------------------------------------------------------------------------------------------------------------ | | معطل | قيمة منطقية | يقوم بتعطيل منتقى الأيقونات إذا تم تعيينه إلى `true` | | عند التغيير | دالة | الدالة الارتجاعية التي تُفعل عندما يختار المستخدم أيقونة. يستقبل كائنًا يحتوي على الخصائص `iconKey` و `Icon` | diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/image-input.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/image-input.mdx index 4bdcc6ddfb..05031a7ffc 100644 --- a/packages/twenty-docs/l/ar/twenty-ui/input/image-input.mdx +++ b/packages/twenty-docs/l/ar/twenty-ui/input/image-input.mdx @@ -23,7 +23,7 @@ export const MyComponent = () => { -| المحددات | النوع | الوصف | +| الخصائص | النوع | الوصف | | ------------ | ----------- | --------------------------------------------------------------------------------- | | صورة | نص | 3946482746 45352F31 274435483129 27442544432A3148464A | | onUpload | دالة | الدالة التي تُستدعى عند قيام المستخدم بتحميل صورة جديدة. تستقبل كائن `File` كوسيط | diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/select.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/select.mdx index 6be3354795..96fef58ae1 100644 --- a/packages/twenty-docs/l/ar/twenty-ui/input/select.mdx +++ b/packages/twenty-docs/l/ar/twenty-ui/input/select.mdx @@ -38,7 +38,7 @@ export const MyComponent = () => { -| المحددات | النوع | الوصف | +| الخصائص | النوع | الوصف | | ----------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | اسم الفئة | نص | فئة CSS اختيارية للتنسيق الإضافي | | معطل | قيمة منطقية | عند ضبطها على `true`، يتم تعطيل تفاعل المستخدم مع المكون | diff --git a/packages/twenty-docs/l/ar/twenty-ui/navigation/breadcrumb.mdx b/packages/twenty-docs/l/ar/twenty-ui/navigation/breadcrumb.mdx index 6bf66c1a9a..32ae570431 100644 --- a/packages/twenty-docs/l/ar/twenty-ui/navigation/breadcrumb.mdx +++ b/packages/twenty-docs/l/ar/twenty-ui/navigation/breadcrumb.mdx @@ -35,7 +35,7 @@ export const MyComponent = () => { -| المحددات | النوع | الوصف | +| الخصائص | النوع | الوصف | | --------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | اسم الفئة | نص | اسم فئة اختياري لتنسيقات إضافية | | روابط | مصفوفة | مصفوفة من الكائنات، يمثّل كلٌّ منها رابطًا في مسار التنقّل. كل كائن يحتوي على خاصية `children` (محتوى النص للرابط) وخاصية `href` اختيارية (رابط URL للتنقل إليه عند النقر على الرابط) | diff --git a/packages/twenty-docs/l/ar/twenty-ui/navigation/step-bar.mdx b/packages/twenty-docs/l/ar/twenty-ui/navigation/step-bar.mdx index 4fff7b52f8..664abd08f3 100644 --- a/packages/twenty-docs/l/ar/twenty-ui/navigation/step-bar.mdx +++ b/packages/twenty-docs/l/ar/twenty-ui/navigation/step-bar.mdx @@ -30,7 +30,7 @@ export const MyComponent = () => { -| المحددات | النوع | الوصف | +| الخصائص | النوع | الوصف | | ------------- | ----- | ----------------------------------------------------------------- | | الخطوة النشطة | رقم | مؤشر للخطوة النشطة حاليًا. هذا يحدد أي خطوة يجب إبرازها بشكل مرئي | diff --git a/packages/twenty-docs/l/cs/developers/contribute/style-guide.mdx b/packages/twenty-docs/l/cs/developers/contribute/style-guide.mdx index 6c14148984..c798c5b5e5 100644 --- a/packages/twenty-docs/l/cs/developers/contribute/style-guide.mdx +++ b/packages/twenty-docs/l/cs/developers/contribute/style-guide.mdx @@ -1,14 +1,14 @@ --- title: Stylová příručka -icon: paintbrush -description: Code conventions and best practices for contributing to Twenty. +icon: paintbrush},{ +description: Konvence kódu a osvědčené postupy pro přispívání do Twenty. --- ## React -### Functional components only +### Pouze funkcionální komponenty -Always use TSX functional components with named exports. +Vždy používejte funkcionální komponenty TSX s pojmenovanými exporty. ```tsx // ❌ Bad @@ -25,7 +25,7 @@ export function MyComponent() { ### Vlastnosti -Create a type named `{ComponentName}Props`. Use destructuring. Don't use `React.FC`. +Vytvořte typ s názvem `{ComponentName}Props`. Používejte destrukturování. Nepoužívejte `React.FC`. ```tsx type MyComponentProps = { @@ -35,7 +35,7 @@ type MyComponentProps = { export const MyComponent = ({ name }: MyComponentProps) =>
Hello {name}
; ``` -### No single-variable prop spreading +### Žádné rozprostření jediné proměnné do props ```tsx // ❌ Bad @@ -47,7 +47,7 @@ const MyComponent = ({ prop1, prop2 }: MyComponentProps) => ({ }); ``` -* Prefer atoms over prop drilling -* Don't use `useRef` for state — use `useState` or atoms -* Use atom families and selectors for lists +* Upřednostňujte atomy před prop drillingem +* Nepoužívejte `useRef` pro stav — použijte `useState` nebo atomy +* Používejte rodiny atomů a selektory pro seznamy -### Avoid unnecessary re-renders +### Vyhněte se zbytečnému opakovanému vykreslování -* Extract `useEffect` and data fetching into sibling sidecar components -* Prefer event handlers (`handleClick`, `handleChange`) over `useEffect` -* Don't use `React.memo()` — fix the root cause instead -* Limit `useCallback` / `useMemo` usage +* Vytáhněte `useEffect` a načítání dat do sourozeneckých sidecar komponent +* Upřednostňujte obslužné funkce událostí (`handleClick`, `handleChange`) před `useEffect` +* Nepoužívejte `React.memo()` — místo toho opravte kořenovou příčinu +* Omezte používání `useCallback` / `useMemo` ```tsx // ❌ Bad — useEffect in the same component causes re-renders @@ -94,11 +94,11 @@ export const Page = () => { ## TypeScript -* **`type` over `interface`** — more flexible, easier to compose -* **String literals over enums** — except for GraphQL codegen enums and internal library APIs -* **No `any`** — strict TypeScript enforced -* **No type imports** — use regular imports (enforced by Oxlint `typescript/consistent-type-imports`) -* **Use [Zod](https://github.com/colinhacks/zod)** for runtime validation of untyped objects +* **`type` místo `interface`** — flexibilnější, lépe kombinovatelný +* **Řetězcové literály místo výčtů** — s výjimkou enumů GraphQL codegenu a interních API knihoven +* **Žádné `any`** — vynucený přísný TypeScript +* **Žádné type imports** — používejte běžné importy (vynuceno nástrojem Oxlint `typescript/consistent-type-imports`) +* **Používejte [Zod](https://github.com/colinhacks/zod)** pro runtime validaci netypovaných objektů ## JavaScript @@ -112,17 +112,17 @@ onClick?.(); ## Pojmenovávání -* **Variables**: camelCase, descriptive (`email` not `value`, `fieldMetadata` not `fm`) -* **Constants**: SCREAMING_SNAKE_CASE -* **Types/Classes**: PascalCase -* **Files/directories**: kebab-case (`.component.tsx`, `.service.ts`, `.entity.ts`) -* **Event handlers**: `handleClick` (not `onClick` for the handler function) -* **Component props**: prefix with component name (`ButtonProps`) -* **Styled components**: prefix with `Styled` (`StyledTitle`) +* **Proměnné**: camelCase, popisné (`email` nikoli `value`, `fieldMetadata` nikoli `fm`) +* **Konstanty**: SCREAMING_SNAKE_CASE +* **Typy/Třídy**: PascalCase +* **Soubory/adresáře**: kebab-case (`.component.tsx`, `.service.ts`, `.entity.ts`) +* **Obslužné funkce událostí**: `handleClick` (nikoli `onClick` pro obslužnou funkci) +* **Vlastnosti komponenty (props)**: předponu tvoří název komponenty (`ButtonProps`) +* **Stylované komponenty**: předpona `Styled` (`StyledTitle`) ## Styling -Use [Linaria](https://github.com/callstack/linaria) styled components. Use theme values — avoid hardcoded `px`, `rem`, or colors. +Používejte stylované komponenty [Linaria](https://github.com/callstack/linaria). Používejte hodnoty z tématu — vyhněte se napevno zadaným `px`, `rem` nebo barvám. ```tsx // ❌ Bad @@ -142,7 +142,7 @@ const StyledButton = styled.button` ## Importy -Use aliases instead of relative paths: +Používejte aliasy místo relativních cest: ```tsx // ❌ Bad @@ -153,7 +153,7 @@ import { Foo } from '~/testing/decorators/Foo'; import { Bar } from '@/modules/bar/components/Bar'; ``` -## Folder Structure +## Struktura složek ``` front @@ -171,6 +171,6 @@ front └── ui/ # Reusable UI components (display, input, feedback, ...) ``` -* Modules can import from other modules, but `ui/` should stay dependency-free -* Use `internal/` subfolders for module-private code -* Components under 300 lines, services under 500 lines +* Moduly mohou importovat z jiných modulů, ale `ui/` by mělo zůstat bez závislostí +* Používejte podadresáře `internal/` pro kód soukromý pro modul +* Komponenty do 300 řádků, služby do 500 řádků diff --git a/packages/twenty-docs/l/cs/developers/extend/oauth.mdx b/packages/twenty-docs/l/cs/developers/extend/oauth.mdx index 141c7e0410..7f92d5dca8 100644 --- a/packages/twenty-docs/l/cs/developers/extend/oauth.mdx +++ b/packages/twenty-docs/l/cs/developers/extend/oauth.mdx @@ -1,23 +1,23 @@ --- title: OAuth icon: klíč -description: Authorization code flow with PKCE and client credentials for server-to-server access. +description: Tok s autorizačním kódem s PKCE a přihlašovacími údaji klienta pro přístup server-to-server. --- -Twenty implements OAuth 2.0 with authorization code + PKCE for user-facing apps and client credentials for server-to-server access. Clients are registered dynamically via [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591) — no manual setup in a dashboard. +Twenty implementuje OAuth 2.0 s autorizačním kódem + PKCE pro aplikace pro uživatele a přihlašovací údaje klienta pro přístup server-to-server. Klienti se registrují dynamicky přes [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591) — žádné ruční nastavení v dashboardu. -## When to Use OAuth +## Kdy použít OAuth -| Scénář | Auth Method | -| --------------------------------------- | -------------------------------------------------------------------------------- | -| Internal scripts, automation | [API Key](/l/cs/developers/extend/api#authentication) | -| External app acting on behalf of a user | **OAuth — Authorization Code** | -| Server-to-server, no user context | **OAuth — Client Credentials** | -| Twenty App with UI extensions | [Apps](/l/cs/developers/extend/apps/getting-started) (OAuth is handled automatically) | +| Scénář | Metoda ověřování | +| ---------------------------------------------------- | -------------------------------------------------------------------------------- | +| Interní skripty, automatizace | [Klíč API](/l/cs/developers/extend/api#authentication) | +| Externí aplikace jednající jménem uživatele | **OAuth — autorizační kód** | +| Server-to-server, bez uživatelského kontextu | **OAuth — přihlašovací údaje klienta** | +| Aplikace Twenty s rozšířeními uživatelského rozhraní | [Aplikace](/l/cs/developers/extend/apps/getting-started) (OAuth je řešen automaticky) | -## Register a Client +## Registrace klienta -Twenty supports **dynamic client registration** per [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591). No manual setup needed — register programmatically: +Twenty podporuje **dynamickou registraci klienta** podle [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591). Není potřeba žádné ruční nastavení — registrujte programově: ```bash POST /oauth/register @@ -31,7 +31,7 @@ Content-Type: application/json } ``` -**Response:** +**Odpověď:** ```json { @@ -43,23 +43,23 @@ Content-Type: application/json ``` -Store the `client_secret` securely — it cannot be retrieved later. +Uložte `client_secret` bezpečně — později jej nelze získat zpět. ## Oprávnění -| Scope | Přístup | -| -------- | ---------------------------------------------------- | -| `api` | Full read/write access to the Core and Metadata APIs | -| `profil` | Read the authenticated user's profile information | +| Oprávnění | Přístup | +| --------- | ----------------------------------------------------- | +| `api` | Úplný přístup pro čtení i zápis k API Core a Metadata | +| `profile` | Čtení informací o profilu ověřeného uživatele | -Request scopes as a space-separated string: `scope=api profile` +Vyžádejte oprávnění jako řetězec oddělený mezerami: `scope=api profile` -## Authorization Code Flow +## Tok s autorizačním kódem -Use this flow when your app acts on behalf of a Twenty user. +Tento tok použijte, když vaše aplikace jedná jménem uživatele Twenty. -### 1. Redirect the user to authorize +### 1. Přesměrujte uživatele k autorizaci ``` GET /oauth/authorize? @@ -72,29 +72,29 @@ GET /oauth/authorize? code_challenge_method=S256 ``` -| Parametr | Povinné | Popis | -| ----------------------- | ---------- | ------------------------------------------------------------ | -| `client_id` | Ano | Your registered client ID | -| `response_type` | Ano | Must be `code` | -| `redirect_uri` | Ano | Must match a registered redirect URI | -| `scope` | Ne | Space-separated scopes (defaults to `api`) | -| `stav` | Doporučeno | Random string to prevent CSRF attacks | -| `code_challenge` | Doporučeno | PKCE challenge (SHA-256 hash of verifier, base64url-encoded) | -| `code_challenge_method` | Doporučeno | Must be `S256` when using PKCE | +| Parametr | Povinné | Popis | +| ----------------------- | ---------- | -------------------------------------------------------------- | +| `client_id` | Ano | Vaše registrované ID klienta | +| `response_type` | Ano | Musí být `code` | +| `redirect_uri` | Ano | Musí odpovídat registrované adrese URI pro přesměrování | +| `scope` | Ne | Oprávnění oddělená mezerami (výchozí je `api`) | +| `state` | Doporučeno | Náhodný řetězec k prevenci útoků CSRF | +| `code_challenge` | Doporučeno | Výzva PKCE (hash SHA-256 z verifieru, kódovaný jako base64url) | +| `code_challenge_method` | Doporučeno | Při použití PKCE musí být `S256` | -The user sees a consent screen and approves or denies access. +Uživatel uvidí souhlasovou obrazovku a přístup schválí nebo zamítne. -### 2. Handle the callback +### 2. Zpracujte callback -After authorization, Twenty redirects back to your `redirect_uri`: +Po autorizaci Twenty přesměruje zpět na vaše `redirect_uri`: ``` https://myapp.com/callback?code=AUTH_CODE&state=random_state_value ``` -Verify that `state` matches what you sent. +Ověřte, že `state` odpovídá tomu, co jste poslali. -### 3. Exchange the code for tokens +### 3. Vyměňte kód za tokeny ```bash POST /oauth/token @@ -108,7 +108,7 @@ client_secret=YOUR_CLIENT_SECRET& code_verifier=YOUR_PKCE_VERIFIER ``` -**Response:** +**Odpověď:** ```json { @@ -119,14 +119,14 @@ code_verifier=YOUR_PKCE_VERIFIER } ``` -### 4. Use the access token +### 4. Použijte přístupový token ```bash GET /rest/companies Authorization: Bearer ACCESS_TOKEN ``` -### 5. Refresh when expired +### 5. Obnovte po vypršení platnosti ```bash POST /oauth/token @@ -138,9 +138,9 @@ client_id=YOUR_CLIENT_ID& client_secret=YOUR_CLIENT_SECRET ``` -## Client Credentials Flow +## Tok s přihlašovacími údaji klienta -For server-to-server integrations with no user interaction: +Pro integrace server-to-server bez interakce uživatele: ```bash POST /oauth/token @@ -152,38 +152,38 @@ client_secret=YOUR_CLIENT_SECRET& scope=api ``` -The returned token has workspace-level access, not tied to any specific user. +Vrácený token má přístup na úrovni pracovního prostoru, není vázán na žádného konkrétního uživatele. -## Server Discovery +## Zjišťování serveru -Twenty publishes its OAuth configuration at a standard discovery endpoint: +Twenty zveřejňuje svou konfiguraci OAuth na standardním koncovém bodu pro zjišťování: ``` GET /.well-known/oauth-authorization-server ``` -This returns all endpoints, supported grant types, scopes, and capabilities — useful for building generic OAuth clients. +Vrací všechny koncové body, podporované typy grantů, oprávnění a možnosti — užitečné pro tvorbu obecných klientů OAuth. -## API Endpoints Summary +## Přehled koncových bodů API -| Koncový bod | Účel | -| ----------------------------------------- | --------------------------- | -| `/.well-known/oauth-authorization-server` | Server metadata discovery | -| `/oauth/register` | Dynamic client registration | -| `/oauth/authorize` | User authorization | -| `/oauth/token` | Token exchange and refresh | +| Koncový bod | Účel | +| ----------------------------------------- | ---------------------------- | +| `/.well-known/oauth-authorization-server` | Zjišťování metadat serveru | +| `/oauth/register` | Dynamická registrace klienta | +| `/oauth/authorize` | Autorizace uživatele | +| `/oauth/token` | Výměna a obnovení tokenu | | Prostředí | Základní URL | | ------------------- | ------------------------ | | **Cloud** | `https://api.twenty.com` | | **Vlastní hosting** | `https://{your-domain}` | -## OAuth vs API Keys +## OAuth vs klíče API -| | API Klíče | OAuth | -| ------------------ | ----------------------- | -------------------------------------- | -| **Nastavení** | Generate in Settings | Register a client, implement flow | -| **User context** | None (workspace-level) | Specific user's permissions | -| **Vhodné pro** | Scripts, internal tools | External apps, multi-user integrations | -| **Token rotation** | Ruční | Automatic via refresh tokens | -| **Scoped access** | Full API access | Granular via scopes | +| | API Klíče | OAuth | +| --------------------------- | ------------------------------------- | ------------------------------------------- | +| **Nastavení** | Generovat v Nastavení | Zaregistrovat klienta, implementovat tok | +| **Uživatelský kontext** | Žádný (na úrovni pracovního prostoru) | Oprávnění konkrétního uživatele | +| **Vhodné pro** | Skripty, interní nástroje | Externí aplikace, víceuživatelské integrace | +| **Rotace tokenů** | Ruční | Automaticky prostřednictvím refresh tokenů | +| **Přístup podle oprávnění** | Plný přístup k API | Jemně odstupňovaný pomocí oprávnění | diff --git a/packages/twenty-docs/l/cs/developers/extend/webhooks.mdx b/packages/twenty-docs/l/cs/developers/extend/webhooks.mdx index 747eef6ac4..4c5e754d8f 100644 --- a/packages/twenty-docs/l/cs/developers/extend/webhooks.mdx +++ b/packages/twenty-docs/l/cs/developers/extend/webhooks.mdx @@ -1,12 +1,12 @@ --- title: Webhooky icon: satellite-dish -description: Get notified when records change — HTTP POST to your endpoint on every create, update, or delete. +description: Dostávejte upozornění při změnách záznamů — HTTP POST na váš koncový bod při každém vytvoření, aktualizaci nebo smazání. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -Twenty sends an HTTP POST to your URL whenever a record is created, updated, or deleted. All object types are covered, including custom objects. +Twenty odešle HTTP POST na vaši adresu URL pokaždé, když je záznam vytvořen, aktualizován nebo smazán. Všechny typy objektů jsou podporovány, včetně vlastních objektů. ## Vytvořit Webhook diff --git a/packages/twenty-docs/l/cs/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/cs/developers/self-host/capabilities/troubleshooting.mdx index 5c7bc87c04..b687fffdc2 100644 --- a/packages/twenty-docs/l/cs/developers/self-host/capabilities/troubleshooting.mdx +++ b/packages/twenty-docs/l/cs/developers/self-host/capabilities/troubleshooting.mdx @@ -1,6 +1,6 @@ --- title: Řešení potíží -icon: wrench +icon: klíč --- ## Řešení potíží diff --git a/packages/twenty-docs/l/cs/user-guide/layout/capabilities/record-pages.mdx b/packages/twenty-docs/l/cs/user-guide/layout/capabilities/record-pages.mdx index d43d311df9..4910de4b7c 100644 --- a/packages/twenty-docs/l/cs/user-guide/layout/capabilities/record-pages.mdx +++ b/packages/twenty-docs/l/cs/user-guide/layout/capabilities/record-pages.mdx @@ -1,5 +1,5 @@ --- -title: Záznamové stránky},{ +title: Stránky záznamů description: Přizpůsobte rozvržení jednotlivých stránek detailu záznamu pomocí karet a widgetů. --- diff --git a/packages/twenty-docs/l/de/developers/contribute/style-guide.mdx b/packages/twenty-docs/l/de/developers/contribute/style-guide.mdx index e919303f15..71bc609a00 100644 --- a/packages/twenty-docs/l/de/developers/contribute/style-guide.mdx +++ b/packages/twenty-docs/l/de/developers/contribute/style-guide.mdx @@ -1,14 +1,14 @@ --- title: Styleguide icon: paintbrush -description: Code conventions and best practices for contributing to Twenty. +description: Code-Konventionen und bewährte Verfahren für Beiträge zu Twenty. --- ## React -### Functional components only +### Ausschließlich funktionale Komponenten -Always use TSX functional components with named exports. +Verwenden Sie immer TSX-Funktionskomponenten mit benannten Exporten. ```tsx // ❌ Bad @@ -25,7 +25,7 @@ export function MyComponent() { ### Props -Create a type named `{ComponentName}Props`. Use destructuring. Don't use `React.FC`. +Erstellen Sie einen Typ namens `{ComponentName}Props`. Verwenden Sie Destrukturierung. Verwenden Sie `React.FC` nicht. ```tsx type MyComponentProps = { @@ -35,7 +35,7 @@ type MyComponentProps = { export const MyComponent = ({ name }: MyComponentProps) =>
Hello {name}
; ``` -### No single-variable prop spreading +### Kein Prop-Spreading mit einer einzelnen Variablen ```tsx // ❌ Bad @@ -47,7 +47,7 @@ const MyComponent = ({ prop1, prop2 }: MyComponentProps) => ({ }); ``` -* Prefer atoms over prop drilling -* Don't use `useRef` for state — use `useState` or atoms -* Use atom families and selectors for lists +* Bevorzugen Sie Atome gegenüber Prop-Drilling +* Verwenden Sie `useRef` nicht für den Zustand — verwenden Sie `useState` oder Atome +* Verwenden Sie Atomfamilien und Selektoren für Listen -### Avoid unnecessary re-renders +### Vermeiden Sie unnötige Re-Renders -* Extract `useEffect` and data fetching into sibling sidecar components -* Prefer event handlers (`handleClick`, `handleChange`) over `useEffect` -* Don't use `React.memo()` — fix the root cause instead -* Limit `useCallback` / `useMemo` usage +* Lagern Sie `useEffect` und das Daten-Fetching in gleichrangige Sidecar-Komponenten aus +* Bevorzugen Sie Event-Handler (`handleClick`, `handleChange`) gegenüber `useEffect` +* Verwenden Sie `React.memo()` nicht — beheben Sie stattdessen die Grundursache +* Beschränken Sie die Nutzung von `useCallback`/`useMemo` ```tsx // ❌ Bad — useEffect in the same component causes re-renders @@ -94,11 +94,11 @@ export const Page = () => { ## TypeScript -* **`type` over `interface`** — more flexible, easier to compose -* **String literals over enums** — except for GraphQL codegen enums and internal library APIs -* **No `any`** — strict TypeScript enforced -* **No type imports** — use regular imports (enforced by Oxlint `typescript/consistent-type-imports`) -* **Use [Zod](https://github.com/colinhacks/zod)** for runtime validation of untyped objects +* **`type` statt `interface`** — flexibler, leichter zu kombinieren +* **String-Literale statt Enums** — außer für GraphQL-Codegen-Enums und interne Bibliotheks-APIs +* **Kein `any`** — striktes TypeScript wird durchgesetzt +* **Keine Type-Imports** — verwenden Sie reguläre Imports (erzwungen durch Oxlint `typescript/consistent-type-imports`) +* **Verwenden Sie [Zod](https://github.com/colinhacks/zod)** für die Laufzeitvalidierung ungetypter Objekte ## JavaScript @@ -112,17 +112,17 @@ onClick?.(); ## Namensgebung -* **Variables**: camelCase, descriptive (`email` not `value`, `fieldMetadata` not `fm`) -* **Constants**: SCREAMING_SNAKE_CASE -* **Types/Classes**: PascalCase -* **Files/directories**: kebab-case (`.component.tsx`, `.service.ts`, `.entity.ts`) -* **Event handlers**: `handleClick` (not `onClick` for the handler function) -* **Component props**: prefix with component name (`ButtonProps`) -* **Styled components**: prefix with `Styled` (`StyledTitle`) +* **Variablen**: camelCase, aussagekräftig (`email` statt `value`, `fieldMetadata` statt `fm`) +* **Konstanten**: SCREAMING_SNAKE_CASE +* **Typen/Klassen**: PascalCase +* **Dateien/Verzeichnisse**: kebab-case (`.component.tsx`, `.service.ts`, `.entity.ts`) +* **Event-Handler**: `handleClick` (nicht `onClick` für die Handler-Funktion) +* **Komponenten-Props**: mit dem Komponentennamen präfixieren (`ButtonProps`) +* **Styled Components**: mit `Styled` präfixieren (`StyledTitle`) ## Styling -Use [Linaria](https://github.com/callstack/linaria) styled components. Use theme values — avoid hardcoded `px`, `rem`, or colors. +Verwenden Sie [Linaria](https://github.com/callstack/linaria) Styled Components. Verwenden Sie Theme-Werte — vermeiden Sie hartkodierte `px`, `rem` oder Farben. ```tsx // ❌ Bad @@ -142,7 +142,7 @@ const StyledButton = styled.button` ## Importe -Use aliases instead of relative paths: +Verwenden Sie Aliase statt relativer Pfade: ```tsx // ❌ Bad @@ -153,7 +153,7 @@ import { Foo } from '~/testing/decorators/Foo'; import { Bar } from '@/modules/bar/components/Bar'; ``` -## Folder Structure +## Ordnerstruktur ``` front @@ -171,6 +171,6 @@ front └── ui/ # Reusable UI components (display, input, feedback, ...) ``` -* Modules can import from other modules, but `ui/` should stay dependency-free -* Use `internal/` subfolders for module-private code -* Components under 300 lines, services under 500 lines +* Module können aus anderen Modulen importieren, aber `ui/` sollte abhängigkeitsfrei bleiben +* Verwenden Sie `internal/`-Unterordner für modulinternen Code +* Komponenten unter 300 Zeilen, Services unter 500 Zeilen diff --git a/packages/twenty-docs/l/de/developers/extend/oauth.mdx b/packages/twenty-docs/l/de/developers/extend/oauth.mdx index f9790e0ffb..b616259b85 100644 --- a/packages/twenty-docs/l/de/developers/extend/oauth.mdx +++ b/packages/twenty-docs/l/de/developers/extend/oauth.mdx @@ -1,23 +1,23 @@ --- title: OAuth icon: schlüssel -description: Authorization code flow with PKCE and client credentials for server-to-server access. +description: Autorisierungscode-Flow mit PKCE und Client-Anmeldedaten für Server-zu-Server-Zugriff. --- -Twenty implements OAuth 2.0 with authorization code + PKCE for user-facing apps and client credentials for server-to-server access. Clients are registered dynamically via [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591) — no manual setup in a dashboard. +Twenty implementiert OAuth 2.0 mit Autorisierungscode + PKCE für benutzerorientierte Apps und Client-Anmeldedaten für Server-zu-Server-Zugriff. Clients werden dynamisch über [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591) registriert — keine manuelle Einrichtung in einem Dashboard. -## When to Use OAuth +## Wann Sie OAuth verwenden sollten -| Szenario | Auth Method | -| --------------------------------------- | -------------------------------------------------------------------------------- | -| Internal scripts, automation | [API Key](/l/de/developers/extend/api#authentication) | -| External app acting on behalf of a user | **OAuth — Authorization Code** | -| Server-to-server, no user context | **OAuth — Client Credentials** | -| Twenty App with UI extensions | [Apps](/l/de/developers/extend/apps/getting-started) (OAuth is handled automatically) | +| Szenario | Authentifizierungsmethode | +| ------------------------------------------------- | ----------------------------------------------------------------------------------- | +| Interne Skripte, Automatisierung | [API-Schlüssel](/l/de/developers/extend/api#authentication) | +| Externe App, die im Namen eines Benutzers handelt | **OAuth — Autorisierungscode** | +| Server-zu-Server, kein Benutzerkontext | **OAuth — Client-Anmeldedaten** | +| Twenty-App mit UI-Erweiterungen | [Apps](/l/de/developers/extend/apps/getting-started) (OAuth wird automatisch gehandhabt) | -## Register a Client +## Einen Client registrieren -Twenty supports **dynamic client registration** per [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591). No manual setup needed — register programmatically: +Twenty unterstützt die **dynamische Client-Registrierung** gemäß [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591). Keine manuelle Einrichtung erforderlich — registrieren Sie den Client programmgesteuert: ```bash POST /oauth/register @@ -31,7 +31,7 @@ Content-Type: application/json } ``` -**Response:** +**Antwort:** ```json { @@ -43,23 +43,23 @@ Content-Type: application/json ``` -Store the `client_secret` securely — it cannot be retrieved later. +Speichern Sie das `client_secret` sicher — es kann später nicht mehr abgerufen werden. ## Geltungsbereiche -| Scope | Zugriff | -| -------- | ---------------------------------------------------- | -| `api` | Full read/write access to the Core and Metadata APIs | -| `profil` | Read the authenticated user's profile information | +| Geltungsbereich | Zugriff | +| --------------- | ----------------------------------------------------------- | +| `api` | Voller Lese-/Schreibzugriff auf die Core- und Metadata-APIs | +| `profile` | Profilinformationen des authentifizierten Benutzers lesen | -Request scopes as a space-separated string: `scope=api profile` +Fordern Sie Geltungsbereiche als durch Leerzeichen getrennte Zeichenfolge an: `scope=api profile` -## Authorization Code Flow +## Autorisierungscode-Flow -Use this flow when your app acts on behalf of a Twenty user. +Verwenden Sie diesen Flow, wenn Ihre App im Namen eines Twenty-Benutzers handelt. -### 1. Redirect the user to authorize +### 1. Leiten Sie den Benutzer zur Autorisierung weiter ``` GET /oauth/authorize? @@ -72,29 +72,29 @@ GET /oauth/authorize? code_challenge_method=S256 ``` -| Parameter | Erforderlich | Beschreibung | -| ----------------------- | ------------ | ------------------------------------------------------------ | -| `client_id` | Ja | Your registered client ID | -| `response_type` | Ja | Must be `code` | -| `redirect_uri` | Ja | Must match a registered redirect URI | -| `scope` | Nein | Space-separated scopes (defaults to `api`) | -| `zustand` | Empfohlen | Random string to prevent CSRF attacks | -| `code_challenge` | Empfohlen | PKCE challenge (SHA-256 hash of verifier, base64url-encoded) | -| `code_challenge_method` | Empfohlen | Must be `S256` when using PKCE | +| Parameter | Erforderlich | Beschreibung | +| ----------------------- | ------------ | -------------------------------------------------------------- | +| `client_id` | Ja | Ihre registrierte Client-ID | +| `response_type` | Ja | Muss `code` sein | +| `redirect_uri` | Ja | Muss einer registrierten Redirect-URI entsprechen | +| `scope` | Nein | Durch Leerzeichen getrennte Geltungsbereiche (Standard: `api`) | +| `state` | Empfohlen | Zufällige Zeichenfolge zur Verhinderung von CSRF-Angriffen | +| `code_challenge` | Empfohlen | PKCE-Challenge (SHA-256-Hash des Verifiers, base64url-codiert) | +| `code_challenge_method` | Empfohlen | Muss bei Verwendung von PKCE `S256` sein | -The user sees a consent screen and approves or denies access. +Der Benutzer sieht einen Zustimmungsbildschirm und stimmt dem Zugriff zu oder lehnt ihn ab. -### 2. Handle the callback +### 2. Den Callback verarbeiten -After authorization, Twenty redirects back to your `redirect_uri`: +Nach der Autorisierung leitet Twenty zurück zu Ihrer `redirect_uri` weiter: ``` https://myapp.com/callback?code=AUTH_CODE&state=random_state_value ``` -Verify that `state` matches what you sent. +Überprüfen Sie, dass `state` mit dem übereinstimmt, was Sie gesendet haben. -### 3. Exchange the code for tokens +### 3. Tauschen Sie den Code gegen Token aus ```bash POST /oauth/token @@ -108,7 +108,7 @@ client_secret=YOUR_CLIENT_SECRET& code_verifier=YOUR_PKCE_VERIFIER ``` -**Response:** +**Antwort:** ```json { @@ -119,14 +119,14 @@ code_verifier=YOUR_PKCE_VERIFIER } ``` -### 4. Use the access token +### 4. Verwenden Sie das Zugriffstoken ```bash GET /rest/companies Authorization: Bearer ACCESS_TOKEN ``` -### 5. Refresh when expired +### 5. Aktualisieren, wenn abgelaufen ```bash POST /oauth/token @@ -138,9 +138,9 @@ client_id=YOUR_CLIENT_ID& client_secret=YOUR_CLIENT_SECRET ``` -## Client Credentials Flow +## Client-Anmeldedaten-Flow -For server-to-server integrations with no user interaction: +Für Server-zu-Server-Integrationen ohne Benutzerinteraktion: ```bash POST /oauth/token @@ -152,38 +152,38 @@ client_secret=YOUR_CLIENT_SECRET& scope=api ``` -The returned token has workspace-level access, not tied to any specific user. +Das zurückgegebene Token hat Zugriff auf Arbeitsbereichsebene und ist an keinen bestimmten Benutzer gebunden. -## Server Discovery +## Server-Ermittlung -Twenty publishes its OAuth configuration at a standard discovery endpoint: +Twenty veröffentlicht seine OAuth-Konfiguration an einem standardisierten Discovery-Endpunkt: ``` GET /.well-known/oauth-authorization-server ``` -This returns all endpoints, supported grant types, scopes, and capabilities — useful for building generic OAuth clients. +Dies liefert alle Endpunkte, unterstützte Grant-Typen, Geltungsbereiche und Fähigkeiten — nützlich, um generische OAuth-Clients zu erstellen. -## API Endpoints Summary +## Zusammenfassung der API-Endpunkte -| Endpunkt | Zweck | -| ----------------------------------------- | --------------------------- | -| `/.well-known/oauth-authorization-server` | Server metadata discovery | -| `/oauth/register` | Dynamic client registration | -| `/oauth/authorize` | User authorization | -| `/oauth/token` | Token exchange and refresh | +| Endpunkt | Zweck | +| ----------------------------------------- | ----------------------------------- | +| `/.well-known/oauth-authorization-server` | Ermittlung von Servermetadaten | +| `/oauth/register` | Dynamische Client-Registrierung | +| `/oauth/authorize` | Benutzerautorisierung | +| `/oauth/token` | Token-Austausch und -Aktualisierung | | Umgebung | Basis-URL | | ----------------- | ------------------------ | | **Cloud** | `https://api.twenty.com` | | **Selbsthosting** | `https://{your-domain}` | -## OAuth vs API Keys +## OAuth vs. API-Schlüssel -| | API-Schlüssel | OAuth | -| -------------------------- | ----------------------- | -------------------------------------- | -| **Einrichtung** | Generate in Settings | Register a client, implement flow | -| **User context** | None (workspace-level) | Specific user's permissions | -| **Am besten geeignet für** | Scripts, internal tools | External apps, multi-user integrations | -| **Token rotation** | Manuell | Automatic via refresh tokens | -| **Scoped access** | Full API access | Granular via scopes | +| | API-Schlüssel | OAuth | +| ------------------------------------- | ------------------------------- | ----------------------------------------- | +| **Einrichtung** | In den Einstellungen generieren | Client registrieren, Flow implementieren | +| **Benutzerkontext** | Keiner (Arbeitsbereichsebene) | Berechtigungen eines bestimmten Benutzers | +| **Am besten geeignet für** | Skripte, interne Tools | Externe Apps, Multi-User-Integrationen | +| **Token-Rotation** | Manuell | Automatisch über Refresh-Tokens | +| **Geltungsbereichsbasierter Zugriff** | Voller API-Zugriff | Granular über Geltungsbereiche | diff --git a/packages/twenty-docs/l/de/developers/extend/webhooks.mdx b/packages/twenty-docs/l/de/developers/extend/webhooks.mdx index 134be26d9e..8d1f54fd66 100644 --- a/packages/twenty-docs/l/de/developers/extend/webhooks.mdx +++ b/packages/twenty-docs/l/de/developers/extend/webhooks.mdx @@ -1,12 +1,12 @@ --- title: Webhooks icon: satellite-dish -description: Get notified when records change — HTTP POST to your endpoint on every create, update, or delete. +description: Lassen Sie sich benachrichtigen, wenn sich Datensätze ändern — HTTP POST an Ihren Endpunkt bei jeder Erstellung, Aktualisierung oder Löschung. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -Twenty sends an HTTP POST to your URL whenever a record is created, updated, or deleted. All object types are covered, including custom objects. +Twenty sendet einen HTTP POST an Ihre URL, wenn ein Datensatz erstellt, aktualisiert oder gelöscht wird. Alle Objekttypen sind abgedeckt, einschließlich benutzerdefinierter Objekte. ## Webhook erstellen diff --git a/packages/twenty-docs/l/de/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/de/developers/self-host/capabilities/troubleshooting.mdx index eee36964f1..f4fc0dcc06 100644 --- a/packages/twenty-docs/l/de/developers/self-host/capabilities/troubleshooting.mdx +++ b/packages/twenty-docs/l/de/developers/self-host/capabilities/troubleshooting.mdx @@ -1,6 +1,6 @@ --- title: Fehlerbehebung -icon: wrench +icon: Schraubenschlüssel --- ## Fehlerbehebung diff --git a/packages/twenty-docs/l/de/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/de/twenty-ui/input/block-editor.mdx index 6040c842af..44f4c764f5 100644 --- a/packages/twenty-docs/l/de/twenty-ui/input/block-editor.mdx +++ b/packages/twenty-docs/l/de/twenty-ui/input/block-editor.mdx @@ -26,9 +26,9 @@ export const MyComponent = () => { -| "Eigenschaften" | Typ | Beschreibung | -| --------------- | ----------------- | ------------------------------------------- | -| Editor | `BlockNoteEditor` | Instanz oder Konfiguration des Blockeditors | +| Props | Typ | Beschreibung | +| ------ | ----------------- | ------------------------------------------- | +| Editor | `BlockNoteEditor` | Instanz oder Konfiguration des Blockeditors | diff --git a/packages/twenty-docs/l/de/twenty-ui/navigation/breadcrumb.mdx b/packages/twenty-docs/l/de/twenty-ui/navigation/breadcrumb.mdx index 5351902f9d..2050b3a31f 100644 --- a/packages/twenty-docs/l/de/twenty-ui/navigation/breadcrumb.mdx +++ b/packages/twenty-docs/l/de/twenty-ui/navigation/breadcrumb.mdx @@ -35,10 +35,10 @@ export const MyComponent = () => { -| "Eigenschaften" | Typ | Beschreibung | -| --------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Klassenname | Zeichenkette | Optionaler Klassenname für zusätzliche Stilierung | -| Links | array | Ein Array von Objekten, die jeweils einen Breadcrumb-Link darstellen. Jedes Objekt hat eine `children`-Eigenschaft (den textlichen Inhalt des Links) und eine optionale `href`-Eigenschaft (die URL, zu der navigiert wird, wenn der Link angeklickt wird) | +| Props | Typ | Beschreibung | +| ----------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Klassenname | Zeichenkette | Optionaler Klassenname für zusätzliche Stilierung | +| Links | array | Ein Array von Objekten, die jeweils einen Breadcrumb-Link darstellen. Jedes Objekt hat eine `children`-Eigenschaft (den textlichen Inhalt des Links) und eine optionale `href`-Eigenschaft (die URL, zu der navigiert wird, wenn der Link angeklickt wird) | diff --git a/packages/twenty-docs/l/de/user-guide/layout/capabilities/navigation.mdx b/packages/twenty-docs/l/de/user-guide/layout/capabilities/navigation.mdx index b777f9c19a..6ea213d3df 100644 --- a/packages/twenty-docs/l/de/user-guide/layout/capabilities/navigation.mdx +++ b/packages/twenty-docs/l/de/user-guide/layout/capabilities/navigation.mdx @@ -3,7 +3,7 @@ title: Navigation description: Passen Sie die linke Seitenleiste an die Arbeitsweise Ihres Teams an. --- -Die linke Seitenleiste ist Ihre wichtigste Möglichkeit, sich in Twenty zu bewegen. Sie ist vollständig anpassbar — Sie können sie neu organisieren, damit sie zu Ihrem Workflow passt, ohne eine Einstellungsseite zu öffnen. +Die linke Seitenleiste ist Ihre wichtigste Möglichkeit, in Twenty zu navigieren. Sie ist vollständig anpassbar — Sie können sie neu organisieren, damit sie zu Ihrem Workflow passt, ohne eine Einstellungsseite zu öffnen. ## Einträge neu anordnen @@ -21,7 +21,7 @@ Objekte, die Sie nicht verwenden, können aus der Seitenleiste ausgeblendet werd ## Favoriten -Heften Sie Ansichten, Datensätze oder Suchvorgänge im Bereich Favoriten oben in der Seitenleiste an, um mit einem Klick darauf zuzugreifen. Favoriten sind persönlich — jeder Nutzer verwaltet seine eigenen. +Heften Sie Ansichten, Datensätze oder Suchvorgänge im Bereich Favoriten oben in der Seitenleiste an, um mit einem Klick darauf zuzugreifen. Favoriten sind persönlich — jeder Benutzer verwaltet seine eigenen. ## Benutzerdefinierte Links diff --git a/packages/twenty-docs/l/it/developers/contribute/style-guide.mdx b/packages/twenty-docs/l/it/developers/contribute/style-guide.mdx index 48fbef5e66..7d2decc3c7 100644 --- a/packages/twenty-docs/l/it/developers/contribute/style-guide.mdx +++ b/packages/twenty-docs/l/it/developers/contribute/style-guide.mdx @@ -140,7 +140,7 @@ const StyledButton = styled.button` `; ``` -## Importa +## Importazioni Use aliases instead of relative paths: diff --git a/packages/twenty-docs/l/it/developers/extend/oauth.mdx b/packages/twenty-docs/l/it/developers/extend/oauth.mdx index f06a05447c..8cabc42028 100644 --- a/packages/twenty-docs/l/it/developers/extend/oauth.mdx +++ b/packages/twenty-docs/l/it/developers/extend/oauth.mdx @@ -1,23 +1,23 @@ --- title: OAuth icon: chiave -description: Authorization code flow with PKCE and client credentials for server-to-server access. +description: Flusso del codice di autorizzazione con PKCE e credenziali client per l'accesso da server a server. --- -Twenty implements OAuth 2.0 with authorization code + PKCE for user-facing apps and client credentials for server-to-server access. Clients are registered dynamically via [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591) — no manual setup in a dashboard. +Twenty implementa OAuth 2.0 con codice di autorizzazione + PKCE per le app rivolte agli utenti e credenziali client per l'accesso da server a server. I client vengono registrati dinamicamente tramite [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591) — nessuna configurazione manuale in una dashboard. -## When to Use OAuth +## Quando utilizzare OAuth -| Scenario | Auth Method | -| --------------------------------------- | -------------------------------------------------------------------------------- | -| Internal scripts, automation | [API Key](/l/it/developers/extend/api#authentication) | -| External app acting on behalf of a user | **OAuth — Authorization Code** | -| Server-to-server, no user context | **OAuth — Client Credentials** | -| Twenty App with UI extensions | [Apps](/l/it/developers/extend/apps/getting-started) (OAuth is handled automatically) | +| Scenario | Metodo di autenticazione | +| ------------------------------------------------- | -------------------------------------------------------------------------------- | +| Script interni, automazioni | [Chiave API](/l/it/developers/extend/api#authentication) | +| App esterna che agisce per conto di un utente | **OAuth — Codice di autorizzazione** | +| Da server a server, nessun contesto utente | **OAuth — Credenziali client** | +| App Twenty con estensioni dell'interfaccia utente | [App](/l/it/developers/extend/apps/getting-started) (OAuth è gestito automaticamente) | -## Register a Client +## Registrare un client -Twenty supports **dynamic client registration** per [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591). No manual setup needed — register programmatically: +Twenty supporta la **registrazione dinamica dei client** secondo [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591). Non è necessaria alcuna configurazione manuale — registra a livello di codice: ```bash POST /oauth/register @@ -31,7 +31,7 @@ Content-Type: application/json } ``` -**Response:** +**Risposta:** ```json { @@ -43,23 +43,23 @@ Content-Type: application/json ``` -Store the `client_secret` securely — it cannot be retrieved later. +Conserva `client_secret` in modo sicuro — non potrà essere recuperato in seguito. ## Ambiti -| Scope | Accesso | -| --------- | ---------------------------------------------------- | -| `api` | Full read/write access to the Core and Metadata APIs | -| `profilo` | Read the authenticated user's profile information | +| Ambito | Accesso | +| --------- | -------------------------------------------------------------- | +| `api` | Accesso completo in lettura/scrittura alle API Core e Metadata | +| `profilo` | Legge le informazioni del profilo dell'utente autenticato | -Request scopes as a space-separated string: `scope=api profile` +Richiedi gli ambiti come stringa separata da spazi: `scope=api profile` -## Authorization Code Flow +## Flusso con codice di autorizzazione -Use this flow when your app acts on behalf of a Twenty user. +Usa questo flusso quando la tua app agisce per conto di un utente Twenty. -### 1. Redirect the user to authorize +### 1. Reindirizza l'utente per autorizzare ``` GET /oauth/authorize? @@ -72,29 +72,29 @@ GET /oauth/authorize? code_challenge_method=S256 ``` -| Parametro | Obbligatorio | Descrizione | -| ----------------------- | ------------ | ------------------------------------------------------------ | -| `client_id` | Sì | Your registered client ID | -| `response_type` | Sì | Must be `code` | -| `redirect_uri` | Sì | Must match a registered redirect URI | -| `scope` | No | Space-separated scopes (defaults to `api`) | -| `stato` | Consigliato | Random string to prevent CSRF attacks | -| `code_challenge` | Consigliato | PKCE challenge (SHA-256 hash of verifier, base64url-encoded) | -| `code_challenge_method` | Consigliato | Must be `S256` when using PKCE | +| Parametro | Obbligatorio | Descrizione | +| ----------------------- | ------------ | ------------------------------------------------------------------- | +| `client_id` | Sì | ID client registrato | +| `response_type` | Sì | Deve essere `code` | +| `redirect_uri` | Sì | Deve corrispondere a un URI di reindirizzamento registrato | +| `scope` | No | Ambiti separati da spazi (predefinito `api`) | +| `stato` | Consigliato | Stringa casuale per prevenire attacchi CSRF | +| `code_challenge` | Consigliato | Challenge PKCE (hash SHA-256 del verifier, codificato in base64url) | +| `code_challenge_method` | Consigliato | Deve essere `S256` quando si usa PKCE | -The user sees a consent screen and approves or denies access. +L'utente vede una schermata di consenso e approva o nega l'accesso. -### 2. Handle the callback +### 2. Gestisci la callback -After authorization, Twenty redirects back to your `redirect_uri`: +Dopo l'autorizzazione, Twenty reindirizza al tuo `redirect_uri`: ``` https://myapp.com/callback?code=AUTH_CODE&state=random_state_value ``` -Verify that `state` matches what you sent. +Verifica che `state` corrisponda a quanto inviato. -### 3. Exchange the code for tokens +### 3. Scambia il codice con i token ```bash POST /oauth/token @@ -108,7 +108,7 @@ client_secret=YOUR_CLIENT_SECRET& code_verifier=YOUR_PKCE_VERIFIER ``` -**Response:** +**Risposta:** ```json { @@ -119,14 +119,14 @@ code_verifier=YOUR_PKCE_VERIFIER } ``` -### 4. Use the access token +### 4. Usa il token di accesso ```bash GET /rest/companies Authorization: Bearer ACCESS_TOKEN ``` -### 5. Refresh when expired +### 5. Aggiorna alla scadenza ```bash POST /oauth/token @@ -138,9 +138,9 @@ client_id=YOUR_CLIENT_ID& client_secret=YOUR_CLIENT_SECRET ``` -## Client Credentials Flow +## Flusso delle credenziali del client -For server-to-server integrations with no user interaction: +Per integrazioni da server a server senza interazione dell'utente: ```bash POST /oauth/token @@ -152,38 +152,38 @@ client_secret=YOUR_CLIENT_SECRET& scope=api ``` -The returned token has workspace-level access, not tied to any specific user. +Il token restituito ha accesso a livello di spazio di lavoro, non legato a un utente specifico. -## Server Discovery +## Scoperta del server -Twenty publishes its OAuth configuration at a standard discovery endpoint: +Twenty pubblica la propria configurazione OAuth in un endpoint di discovery standard: ``` GET /.well-known/oauth-authorization-server ``` -This returns all endpoints, supported grant types, scopes, and capabilities — useful for building generic OAuth clients. +Questo restituisce tutti gli endpoint, i tipi di grant supportati, gli ambiti e le funzionalità — utile per creare client OAuth generici. -## API Endpoints Summary +## Riepilogo degli endpoint API -| Endpoint | Scopo | -| ----------------------------------------- | --------------------------- | -| `/.well-known/oauth-authorization-server` | Server metadata discovery | -| `/oauth/register` | Dynamic client registration | -| `/oauth/authorize` | User authorization | -| `/oauth/token` | Token exchange and refresh | +| Endpoint | Scopo | +| ----------------------------------------- | -------------------------------------- | +| `/.well-known/oauth-authorization-server` | Individuazione dei metadati del server | +| `/oauth/register` | Registrazione dinamica dei client | +| `/oauth/authorize` | Autorizzazione utente | +| `/oauth/token` | Scambio e aggiornamento dei token | | Ambiente | URL di base | | ----------------- | ------------------------ | | **Cloud** | `https://api.twenty.com` | | **Auto-ospitato** | `https://{your-domain}` | -## OAuth vs API Keys +## OAuth vs Chiavi API -| | API Keys | OAuth | -| ------------------ | ----------------------- | -------------------------------------- | -| **Impostazione** | Generate in Settings | Register a client, implement flow | -| **User context** | None (workspace-level) | Specific user's permissions | -| **Ideale per** | Scripts, internal tools | External apps, multi-user integrations | -| **Token rotation** | Manuale | Automatic via refresh tokens | -| **Scoped access** | Full API access | Granular via scopes | +| | API Keys | OAuth | +| ----------------------- | --------------------------------------- | ---------------------------------------- | +| **Impostazione** | Genera nelle Impostazioni | Registra un client, implementa il flusso | +| **Contesto utente** | Nessuno (a livello di spazio di lavoro) | Autorizzazioni dell'utente specifico | +| **Ideale per** | Script, strumenti interni | App esterne, integrazioni multiutente | +| **Rotazione dei token** | Manuale | Automatica tramite token di refresh | +| **Accesso con ambiti** | Accesso completo alle API | Granulare tramite ambiti | diff --git a/packages/twenty-docs/l/it/developers/extend/webhooks.mdx b/packages/twenty-docs/l/it/developers/extend/webhooks.mdx index 51856eba5f..c7e0f76d6a 100644 --- a/packages/twenty-docs/l/it/developers/extend/webhooks.mdx +++ b/packages/twenty-docs/l/it/developers/extend/webhooks.mdx @@ -1,12 +1,12 @@ --- title: Webhooks icon: satellite-dish -description: Get notified when records change — HTTP POST to your endpoint on every create, update, or delete. +description: Ricevi una notifica quando i record cambiano — HTTP POST al tuo endpoint a ogni creazione, aggiornamento o eliminazione. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -Twenty sends an HTTP POST to your URL whenever a record is created, updated, or deleted. All object types are covered, including custom objects. +Twenty invia un HTTP POST al tuo URL ogni volta che un record viene creato, aggiornato o eliminato. Tutti i tipi di oggetto sono supportati, inclusi gli oggetti personalizzati. ## Crea un Webhook diff --git a/packages/twenty-docs/l/it/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/it/twenty-ui/input/block-editor.mdx index b3ee4ffa75..9faddeb133 100644 --- a/packages/twenty-docs/l/it/twenty-ui/input/block-editor.mdx +++ b/packages/twenty-docs/l/it/twenty-ui/input/block-editor.mdx @@ -26,9 +26,9 @@ export const MyComponent = () => { -| Props | Tipo | Descrizione | -| ------ | ----------------- | ---------------------------------------------------- | -| editor | `BlockNoteEditor` | L'istanza o la configurazione dell'editor di blocchi | +| Proprietà | Tipo | Descrizione | +| --------- | ----------------- | ---------------------------------------------------- | +| editor | `BlockNoteEditor` | L'istanza o la configurazione dell'editor di blocchi | diff --git a/packages/twenty-docs/l/pt/developers/contribute/style-guide.mdx b/packages/twenty-docs/l/pt/developers/contribute/style-guide.mdx index 8b29c657f2..1cd23fe94a 100644 --- a/packages/twenty-docs/l/pt/developers/contribute/style-guide.mdx +++ b/packages/twenty-docs/l/pt/developers/contribute/style-guide.mdx @@ -110,7 +110,7 @@ const value = process.env.MY_VALUE ?? 'default'; onClick?.(); ``` -## Nomeação +## Nomenclatura * **Variables**: camelCase, descriptive (`email` not `value`, `fieldMetadata` not `fm`) * **Constants**: SCREAMING_SNAKE_CASE diff --git a/packages/twenty-docs/l/pt/developers/extend/webhooks.mdx b/packages/twenty-docs/l/pt/developers/extend/webhooks.mdx index 4583e49371..167611ca97 100644 --- a/packages/twenty-docs/l/pt/developers/extend/webhooks.mdx +++ b/packages/twenty-docs/l/pt/developers/extend/webhooks.mdx @@ -1,12 +1,12 @@ --- title: Webhooks icon: satellite-dish -description: Get notified when records change — HTTP POST to your endpoint on every create, update, or delete. +description: Receba notificações quando os registros mudarem — HTTP POST para o seu endpoint a cada criação, atualização ou exclusão. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -Twenty sends an HTTP POST to your URL whenever a record is created, updated, or deleted. All object types are covered, including custom objects. +Twenty envia um HTTP POST para sua URL sempre que um registro é criado, atualizado ou excluído. Todos os tipos de objeto estão cobertos, incluindo objetos personalizados. ## Criar Webhook diff --git a/packages/twenty-docs/l/ru/developers/contribute/style-guide.mdx b/packages/twenty-docs/l/ru/developers/contribute/style-guide.mdx index 81d0ce6871..3e9fd3356c 100644 --- a/packages/twenty-docs/l/ru/developers/contribute/style-guide.mdx +++ b/packages/twenty-docs/l/ru/developers/contribute/style-guide.mdx @@ -110,7 +110,7 @@ const value = process.env.MY_VALUE ?? 'default'; onClick?.(); ``` -## Называние +## Именование * **Variables**: camelCase, descriptive (`email` not `value`, `fieldMetadata` not `fm`) * **Constants**: SCREAMING_SNAKE_CASE diff --git a/packages/twenty-docs/l/ru/developers/extend/apps/cli-and-testing.mdx b/packages/twenty-docs/l/ru/developers/extend/apps/cli-and-testing.mdx index 8ed36a4455..8edef63f1c 100644 --- a/packages/twenty-docs/l/ru/developers/extend/apps/cli-and-testing.mdx +++ b/packages/twenty-docs/l/ru/developers/extend/apps/cli-and-testing.mdx @@ -1,6 +1,6 @@ --- -title: CLI & Testing -description: CLI commands, testing setup, public assets, npm packages, remotes, and CI configuration. +title: CLI и тестирование +description: Команды CLI, настройка тестирования, публичные ресурсы, пакеты npm, удалённые репозитории и конфигурация CI. icon: terminal --- diff --git a/packages/twenty-docs/l/ru/developers/extend/oauth.mdx b/packages/twenty-docs/l/ru/developers/extend/oauth.mdx index ee878866f5..28a7d3be17 100644 --- a/packages/twenty-docs/l/ru/developers/extend/oauth.mdx +++ b/packages/twenty-docs/l/ru/developers/extend/oauth.mdx @@ -51,7 +51,7 @@ Store the `client_secret` securely — it cannot be retrieved later. | Scope | Доступ | | --------- | ---------------------------------------------------- | | `api` | Full read/write access to the Core and Metadata APIs | -| `профиль` | Read the authenticated user's profile information | +| `profile` | Read the authenticated user's profile information | Request scopes as a space-separated string: `scope=api profile` @@ -78,7 +78,7 @@ GET /oauth/authorize? | `response_type` | Да | Must be `code` | | `redirect_uri` | Да | Must match a registered redirect URI | | `scope` | Нет | Space-separated scopes (defaults to `api`) | -| `состояние` | Рекомендуется | Random string to prevent CSRF attacks | +| `state` | Рекомендуется | Random string to prevent CSRF attacks | | `code_challenge` | Рекомендуется | PKCE challenge (SHA-256 hash of verifier, base64url-encoded) | | `code_challenge_method` | Рекомендуется | Must be `S256` when using PKCE | diff --git a/packages/twenty-docs/l/ru/developers/extend/webhooks.mdx b/packages/twenty-docs/l/ru/developers/extend/webhooks.mdx index 306fff4481..bc4b3c270e 100644 --- a/packages/twenty-docs/l/ru/developers/extend/webhooks.mdx +++ b/packages/twenty-docs/l/ru/developers/extend/webhooks.mdx @@ -1,12 +1,12 @@ --- title: Вебхуки icon: satellite-dish -description: Get notified when records change — HTTP POST to your endpoint on every create, update, or delete. +description: Получайте уведомления при изменении записей — HTTP POST на вашу конечную точку при каждом создании, обновлении или удалении. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -Twenty sends an HTTP POST to your URL whenever a record is created, updated, or deleted. All object types are covered, including custom objects. +Twenty отправляет запрос HTTP POST на ваш URL каждый раз, когда запись создаётся, обновляется или удаляется. Поддерживаются все типы объектов, включая пользовательские объекты. ## Создать вебхук diff --git a/packages/twenty-docs/l/tr/developers/extend/apps/cli-and-testing.mdx b/packages/twenty-docs/l/tr/developers/extend/apps/cli-and-testing.mdx index 326305af3d..d815565d3b 100644 --- a/packages/twenty-docs/l/tr/developers/extend/apps/cli-and-testing.mdx +++ b/packages/twenty-docs/l/tr/developers/extend/apps/cli-and-testing.mdx @@ -1,6 +1,6 @@ --- -title: CLI & Testing -description: CLI commands, testing setup, public assets, npm packages, remotes, and CI configuration. +title: CLI ve Testler +description: CLI komutları, test kurulumu, genel varlıklar, npm paketleri, uzaklar ve CI yapılandırması. icon: terminal --- diff --git a/packages/twenty-docs/l/tr/developers/extend/oauth.mdx b/packages/twenty-docs/l/tr/developers/extend/oauth.mdx index b998d0c74b..cc34aabe2e 100644 --- a/packages/twenty-docs/l/tr/developers/extend/oauth.mdx +++ b/packages/twenty-docs/l/tr/developers/extend/oauth.mdx @@ -48,10 +48,10 @@ Store the `client_secret` securely — it cannot be retrieved later. ## Kapsamlar -| Scope | Erişim | -| -------- | ---------------------------------------------------- | -| `api` | Full read/write access to the Core and Metadata APIs | -| `profil` | Read the authenticated user's profile information | +| Scope | Erişim | +| --------- | ---------------------------------------------------- | +| `api` | Full read/write access to the Core and Metadata APIs | +| `profile` | Read the authenticated user's profile information | Request scopes as a space-separated string: `scope=api profile` @@ -78,7 +78,7 @@ GET /oauth/authorize? | `response_type` | Evet | Must be `code` | | `redirect_uri` | Evet | Must match a registered redirect URI | | `scope` | Hayır | Space-separated scopes (defaults to `api`) | -| `durum` | Önerilen | Random string to prevent CSRF attacks | +| `state` | Önerilen | Random string to prevent CSRF attacks | | `code_challenge` | Önerilen | PKCE challenge (SHA-256 hash of verifier, base64url-encoded) | | `code_challenge_method` | Önerilen | Must be `S256` when using PKCE | diff --git a/packages/twenty-docs/l/tr/developers/extend/webhooks.mdx b/packages/twenty-docs/l/tr/developers/extend/webhooks.mdx index 13a9185f48..7db783764d 100644 --- a/packages/twenty-docs/l/tr/developers/extend/webhooks.mdx +++ b/packages/twenty-docs/l/tr/developers/extend/webhooks.mdx @@ -1,12 +1,12 @@ --- title: Webhook'lar icon: satellite-dish -description: Get notified when records change — HTTP POST to your endpoint on every create, update, or delete. +description: Kayıtlar değiştiğinde bildirim alın — her oluşturma, güncelleme veya silme işleminde uç noktanıza HTTP POST gönderilir. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -Twenty sends an HTTP POST to your URL whenever a record is created, updated, or deleted. All object types are covered, including custom objects. +Bir kayıt oluşturulduğunda, güncellendiğinde veya silindiğinde Twenty URL'inize bir HTTP POST gönderir. Özel nesneler dahil tüm nesne türleri kapsanır. ## Webhook oluştur diff --git a/packages/twenty-docs/l/tr/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/tr/developers/self-host/capabilities/troubleshooting.mdx index d5d499ef67..3dedd99b67 100644 --- a/packages/twenty-docs/l/tr/developers/self-host/capabilities/troubleshooting.mdx +++ b/packages/twenty-docs/l/tr/developers/self-host/capabilities/troubleshooting.mdx @@ -1,6 +1,6 @@ --- title: Sorun Giderme -icon: wrench +icon: anahtar --- ## Sorun Giderme diff --git a/packages/twenty-docs/l/tr/twenty-ui/display/icons.mdx b/packages/twenty-docs/l/tr/twenty-ui/display/icons.mdx index b74d434b1a..ed84cd38f8 100644 --- a/packages/twenty-docs/l/tr/twenty-ui/display/icons.mdx +++ b/packages/twenty-docs/l/tr/twenty-ui/display/icons.mdx @@ -1,6 +1,6 @@ --- title: İkonlar -icon: i̇konlar +icon: ikonlar --- diff --git a/packages/twenty-docs/l/zh/developers/extend/oauth.mdx b/packages/twenty-docs/l/zh/developers/extend/oauth.mdx index 7023de5485..df65b7ac5f 100644 --- a/packages/twenty-docs/l/zh/developers/extend/oauth.mdx +++ b/packages/twenty-docs/l/zh/developers/extend/oauth.mdx @@ -1,23 +1,23 @@ --- title: OAuth icon: 键 -description: Authorization code flow with PKCE and client credentials for server-to-server access. +description: 采用 PKCE 的授权码流程和用于服务器到服务器访问的客户端凭证。 --- -Twenty implements OAuth 2.0 with authorization code + PKCE for user-facing apps and client credentials for server-to-server access. Clients are registered dynamically via [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591) — no manual setup in a dashboard. +Twenty 对面向用户的应用采用授权码 + PKCE 实现 OAuth 2.0,对服务器到服务器访问采用客户端凭证。 客户端通过 [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591) 动态注册——无需在仪表板中手动设置。 -## When to Use OAuth +## 何时使用 OAuth -| 场景 | Auth Method | -| --------------------------------------- | -------------------------------------------------------------------------------- | -| Internal scripts, automation | [API Key](/l/zh/developers/extend/api#authentication) | -| External app acting on behalf of a user | **OAuth — Authorization Code** | -| Server-to-server, no user context | **OAuth — Client Credentials** | -| Twenty App with UI extensions | [Apps](/l/zh/developers/extend/apps/getting-started) (OAuth is handled automatically) | +| 场景 | 认证方式 | +| ------------------- | ----------------------------------------------------------- | +| 内部脚本、自动化 | [API 密钥](/l/zh/developers/extend/api#authentication) | +| 代表用户执行操作的外部应用 | **OAuth — 授权码** | +| 服务器到服务器,无用户上下文 | **OAuth — 客户端凭证** | +| 带有 UI 扩展的 Twenty 应用 | [应用](/l/zh/developers/extend/apps/getting-started) (OAuth 将自动处理) | -## Register a Client +## 注册客户端 -Twenty supports **dynamic client registration** per [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591). No manual setup needed — register programmatically: +根据 [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591),Twenty 支持**动态客户端注册**。 无需手动设置——以编程方式注册: ```bash POST /oauth/register @@ -31,7 +31,7 @@ Content-Type: application/json } ``` -**Response:** +**响应:** ```json { @@ -43,23 +43,23 @@ Content-Type: application/json ``` -Store the `client_secret` securely — it cannot be retrieved later. +安全存储 `client_secret`——之后无法再检索。 ## 范围 -| Scope | 访问 | -| ------ | ---------------------------------------------------- | -| `api` | Full read/write access to the Core and Metadata APIs | -| `个人资料` | Read the authenticated user's profile information | +| 范围 | 访问 | +| ------ | ------------------------------ | +| `api` | 对 Core 和 Metadata API 的完全读/写访问 | +| `个人资料` | 读取已认证用户的个人资料信息 | -Request scopes as a space-separated string: `scope=api profile` +以空格分隔的字符串请求范围:`scope=api profile` -## Authorization Code Flow +## 授权码流程 -Use this flow when your app acts on behalf of a Twenty user. +当你的应用代表某个 Twenty 用户执行操作时,请使用此流程。 -### 1. Redirect the user to authorize +### 1. 重定向用户以进行授权 ``` GET /oauth/authorize? @@ -72,29 +72,29 @@ GET /oauth/authorize? code_challenge_method=S256 ``` -| 参数 | 必填 | 描述 | -| ----------------------- | -- | ------------------------------------------------------------ | -| `client_id` | 是 | Your registered client ID | -| `response_type` | 是 | Must be `code` | -| `redirect_uri` | 是 | Must match a registered redirect URI | -| `scope` | 否 | Space-separated scopes (defaults to `api`) | -| `状态` | 推荐 | Random string to prevent CSRF attacks | -| `code_challenge` | 推荐 | PKCE challenge (SHA-256 hash of verifier, base64url-encoded) | -| `code_challenge_method` | 推荐 | Must be `S256` when using PKCE | +| 参数 | 必填 | 描述 | +| ----------------------- | -- | ------------------------------------- | +| `client_id` | 是 | 你已注册的客户端 ID | +| `response_type` | 是 | 必须为 `code` | +| `redirect_uri` | 是 | 必须与已注册的重定向 URI 匹配 | +| `scope` | 否 | 以空格分隔的范围(默认为 `api`) | +| `状态` | 推荐 | 用于防止 CSRF 攻击的随机字符串 | +| `code_challenge` | 推荐 | PKCE 质询(验证器的 SHA-256 哈希,base64url 编码) | +| `code_challenge_method` | 推荐 | 使用 PKCE 时必须为 `S256` | -The user sees a consent screen and approves or denies access. +用户将看到授权同意界面,并同意或拒绝访问。 -### 2. Handle the callback +### 2. 处理回调 -After authorization, Twenty redirects back to your `redirect_uri`: +授权后,Twenty 会重定向回你的 `redirect_uri`: ``` https://myapp.com/callback?code=AUTH_CODE&state=random_state_value ``` -Verify that `state` matches what you sent. +验证 `state` 与你发送的值一致。 -### 3. Exchange the code for tokens +### 3. 将授权码交换为令牌 ```bash POST /oauth/token @@ -108,7 +108,7 @@ client_secret=YOUR_CLIENT_SECRET& code_verifier=YOUR_PKCE_VERIFIER ``` -**Response:** +**响应:** ```json { @@ -119,14 +119,14 @@ code_verifier=YOUR_PKCE_VERIFIER } ``` -### 4. Use the access token +### 4. 使用访问令牌 ```bash GET /rest/companies Authorization: Bearer ACCESS_TOKEN ``` -### 5. Refresh when expired +### 5. 过期时刷新 ```bash POST /oauth/token @@ -138,9 +138,9 @@ client_id=YOUR_CLIENT_ID& client_secret=YOUR_CLIENT_SECRET ``` -## Client Credentials Flow +## 客户端凭证流程 -For server-to-server integrations with no user interaction: +适用于无用户交互的服务器到服务器集成: ```bash POST /oauth/token @@ -152,38 +152,38 @@ client_secret=YOUR_CLIENT_SECRET& scope=api ``` -The returned token has workspace-level access, not tied to any specific user. +返回的令牌具有工作区级访问权限,不绑定到任何特定用户。 -## Server Discovery +## 服务器发现 -Twenty publishes its OAuth configuration at a standard discovery endpoint: +Twenty 在标准发现端点发布其 OAuth 配置: ``` GET /.well-known/oauth-authorization-server ``` -This returns all endpoints, supported grant types, scopes, and capabilities — useful for building generic OAuth clients. +这将返回所有端点、支持的授权类型、范围和功能——有助于构建通用的 OAuth 客户端。 -## API Endpoints Summary +## API 端点概览 -| 端点 | 目的 | -| ----------------------------------------- | --------------------------- | -| `/.well-known/oauth-authorization-server` | Server metadata discovery | -| `/oauth/register` | Dynamic client registration | -| `/oauth/authorize` | User authorization | -| `/oauth/token` | Token exchange and refresh | +| 端点 | 目的 | +| ----------------------------------------- | -------- | +| `/.well-known/oauth-authorization-server` | 服务器元数据发现 | +| `/oauth/register` | 动态客户端注册 | +| `/oauth/authorize` | 用户授权 | +| `/oauth/token` | 令牌交换与刷新 | | 环境 | 基础 URL | | ------- | ------------------------ | | **云端** | `https://api.twenty.com` | | **自托管** | `https://{your-domain}` | -## OAuth vs API Keys +## OAuth 与 API 密钥对比 -| | API 密钥 | OAuth | -| ------------------ | ----------------------- | -------------------------------------- | -| **Setup** | Generate in Settings | Register a client, implement flow | -| **User context** | None (workspace-level) | Specific user's permissions | -| **Best for** | Scripts, internal tools | External apps, multi-user integrations | -| **Token rotation** | 手动 | Automatic via refresh tokens | -| **Scoped access** | Full API access | Granular via scopes | +| | API 密钥 | OAuth | +| ----------- | ---------- | ----------- | +| **设置** | 在设置中生成 | 注册客户端并实现流程 | +| **用户上下文** | 无(工作区级) | 特定用户的权限 | +| **最适合** | 脚本、内部工具 | 外部应用、多用户集成 | +| **令牌轮换** | 手动 | 通过刷新令牌自动完成 | +| **范围限定的访问** | 完整的 API 访问 | 通过范围实现细粒度控制 | diff --git a/packages/twenty-docs/l/zh/developers/extend/webhooks.mdx b/packages/twenty-docs/l/zh/developers/extend/webhooks.mdx index 0198b11e01..b82411fe83 100644 --- a/packages/twenty-docs/l/zh/developers/extend/webhooks.mdx +++ b/packages/twenty-docs/l/zh/developers/extend/webhooks.mdx @@ -1,12 +1,12 @@ --- title: Webhooks icon: satellite-dish -description: Get notified when records change — HTTP POST to your endpoint on every create, update, or delete. +description: 当记录更改时收到通知 — 在每次创建、更新或删除时向您的端点发送 HTTP POST。 --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -Twenty sends an HTTP POST to your URL whenever a record is created, updated, or deleted. All object types are covered, including custom objects. +每当记录被创建、更新或删除时,Twenty 会向您的 URL 发送 HTTP POST。 涵盖所有对象类型,包括自定义对象。 ## 创建 Webhook