From e3757f300afa2bee23c63e92f88dbc677e907b90 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 23 Dec 2025 17:06:38 +0100 Subject: [PATCH] i18n - docs translations (#16779) Created by Github action --------- Co-authored-by: github-actions --- packages/twenty-docs/docs.json | 126 ++-- .../backend-development/queue.mdx | 6 +- .../best-practices-front.mdx | 16 +- .../frontend-commands.mdx | 2 +- .../frontend-development/hotkeys.mdx | 30 +- .../frontend-development/style-guide.mdx | 32 +- .../l/ar/twenty-ui/input/image-input.mdx | 6 +- .../l/ar/twenty-ui/navigation/breadcrumb.mdx | 8 +- .../l/ar/twenty-ui/navigation/menu-item.mdx | 42 +- .../twenty-ui/navigation/navigation-bar.mdx | 18 +- .../l/ar/twenty-ui/navigation/step-bar.mdx | 6 +- .../l/ar/user-guide/billing/overview.mdx | 44 +- .../calendar-emails/capabilities/calendar.mdx | 30 +- .../dashboards/how-tos/dashboards-faq.mdx | 60 +- .../capabilities/field-mapping.mdx | 172 ++--- .../how-tos/migrating-from-other-crms.mdx | 2 +- .../how-tos/prepare-your-csv-files.mdx | 196 ++--- .../ar/user-guide/data-migration/overview.mdx | 2 +- .../how-tos/create-relation-fields.mdx | 68 +- .../how-tos/customize-your-data-model.mdx | 2 +- .../show-expected-amount-in-pipeline.mdx | 2 +- .../workflows/capabilities/workflow-runs.mdx | 118 +-- .../need-more-help/professional-services.mdx | 12 +- .../backend-development/feature-flags.mdx | 2 +- .../best-practices-front.mdx | 37 +- .../frontend-commands.mdx | 2 +- .../frontend-development/hotkeys.mdx | 58 +- .../frontend-development/style-guide.mdx | 40 +- .../l/cs/twenty-ui/input/checkbox.mdx | 22 +- .../l/cs/twenty-ui/navigation/breadcrumb.mdx | 8 +- .../l/cs/twenty-ui/navigation/links.mdx | 85 +-- .../l/cs/twenty-ui/navigation/menu-item.mdx | 18 +- .../twenty-ui/navigation/navigation-bar.mdx | 6 +- .../l/cs/twenty-ui/navigation/step-bar.mdx | 6 +- .../l/cs/user-guide/billing/overview.mdx | 44 +- .../calendar-emails/capabilities/calendar.mdx | 28 +- .../dashboards/how-tos/dashboards-faq.mdx | 62 +- .../capabilities/field-mapping.mdx | 172 ++--- .../how-tos/prepare-your-csv-files.mdx | 194 ++--- .../how-tos/create-relation-fields.mdx | 70 +- .../how-tos/restrict-access-to-your-view.mdx | 2 +- .../user-guide/views-pipelines/overview.mdx | 2 +- .../workflows/capabilities/workflow-runs.mdx | 118 +-- .../capabilities/workflow-versions.mdx | 2 +- .../backend-development/queue.mdx | 2 +- .../best-practices-front.mdx | 106 +-- .../frontend-commands.mdx | 2 +- .../frontend-development/hotkeys.mdx | 30 +- .../frontend-development/style-guide.mdx | 67 +- .../l/de/twenty-ui/input/icon-picker.mdx | 2 +- .../l/de/twenty-ui/navigation/breadcrumb.mdx | 8 +- .../l/de/twenty-ui/navigation/links.mdx | 10 +- .../l/de/twenty-ui/navigation/menu-item.mdx | 34 +- .../twenty-ui/navigation/navigation-bar.mdx | 10 +- .../l/de/twenty-ui/navigation/step-bar.mdx | 6 +- .../permissions-access-control.mdx | 2 +- .../l/de/user-guide/billing/overview.mdx | 42 +- .../calendar-emails/capabilities/calendar.mdx | 30 +- .../dashboards/how-tos/dashboards-faq.mdx | 60 +- .../capabilities/field-mapping.mdx | 164 ++-- .../how-tos/prepare-your-csv-files.mdx | 196 ++--- .../how-tos/create-relation-fields.mdx | 70 +- .../how-tos/restrict-access-to-your-view.mdx | 2 +- .../show-expected-amount-in-pipeline.mdx | 10 +- .../workflows/capabilities/workflow-runs.mdx | 118 +-- .../need-more-help/professional-services.mdx | 2 +- .../best-practices-server.mdx | 22 +- .../backend-development/custom-objects.mdx | 30 +- .../backend-development/feature-flags.mdx | 12 +- .../folder-architecture-server.mdx | 76 +- .../backend-development/queue.mdx | 26 +- .../backend-development/server-commands.mdx | 59 +- .../backend-development/zapier.mdx | 44 +- .../capabilities/bug-and-requests.mdx | 12 +- .../best-practices-front.mdx | 142 ++-- .../folder-architecture-front.mdx | 70 +- .../frontend-commands.mdx | 44 +- .../frontend-development/hotkeys.mdx | 176 ++--- .../frontend-development/storybook.mdx | 6 +- .../frontend-development/style-guide.mdx | 156 ++-- .../frontend-development/work-with-figma.mdx | 66 +- .../contribute/capabilities/local-setup.mdx | 178 ++--- .../l/es/developers/contribute/contribute.mdx | 6 +- .../developers/extend/capabilities/apis.mdx | 52 +- .../developers/extend/capabilities/apps.mdx | 10 +- .../extend/capabilities/webhooks.mdx | 30 +- .../l/es/developers/extend/extend.mdx | 6 +- .../capabilities/cloud-providers.mdx | 34 +- .../self-host/capabilities/docker-compose.mdx | 162 ++-- .../self-host/capabilities/setup.mdx | 170 ++--- .../capabilities/troubleshooting.mdx | 157 ++-- .../self-host/capabilities/upgrade-guide.mdx | 274 +++---- .../l/es/developers/self-host/self-host.mdx | 4 +- packages/twenty-docs/l/es/navigation.json | 28 +- .../l/es/twenty-ui/display/app-tooltip.mdx | 42 +- .../l/es/twenty-ui/display/checkmark.mdx | 28 +- .../l/es/twenty-ui/display/chip.mdx | 52 +- .../l/es/twenty-ui/display/icons.mdx | 48 +- .../l/es/twenty-ui/display/soon-pill.mdx | 2 +- .../l/es/twenty-ui/display/tag.mdx | 20 +- packages/twenty-docs/l/es/twenty-ui/input.mdx | 4 +- .../l/es/twenty-ui/input/block-editor.mdx | 14 +- .../l/es/twenty-ui/input/buttons.mdx | 230 +++--- .../l/es/twenty-ui/input/checkbox.mdx | 30 +- .../l/es/twenty-ui/input/color-scheme.mdx | 38 +- .../l/es/twenty-ui/input/icon-picker.mdx | 28 +- .../l/es/twenty-ui/input/image-input.mdx | 26 +- .../l/es/twenty-ui/input/radio.mdx | 46 +- .../l/es/twenty-ui/input/select.mdx | 24 +- .../twenty-docs/l/es/twenty-ui/input/text.mdx | 84 +-- .../l/es/twenty-ui/input/toggle.mdx | 20 +- .../l/es/twenty-ui/introduction.mdx | 6 +- .../twenty-docs/l/es/twenty-ui/navigation.mdx | 4 +- .../l/es/twenty-ui/navigation/breadcrumb.mdx | 24 +- .../l/es/twenty-ui/navigation/links.mdx | 91 +-- .../l/es/twenty-ui/navigation/menu-item.mdx | 312 ++++---- .../twenty-ui/navigation/navigation-bar.mdx | 16 +- .../l/es/twenty-ui/navigation/step-bar.mdx | 20 +- .../l/es/twenty-ui/progress-bar.mdx | 40 +- .../user-guide/ai/capabilities/ai-agents.mdx | 4 +- .../user-guide/ai/capabilities/ai-chatbot.mdx | 4 +- .../permissions-access-control.mdx | 44 +- .../l/es/user-guide/ai/overview.mdx | 10 +- .../billing/capabilities/pricing-plans.mdx | 92 +-- .../billing/capabilities/workflow-credits.mdx | 18 +- .../billing/how-tos/billing-faq.mdx | 64 +- .../l/es/user-guide/billing/overview.mdx | 4 +- .../calendar-emails/capabilities/calendar.mdx | 24 +- .../calendar-emails/capabilities/mailbox.mdx | 100 +-- ...-i-track-email-activity-on-all-objects.mdx | 6 +- .../connect-several-mailboxes-per-user.mdx | 2 +- .../how-tos/limit-emails-imported.mdx | 68 +- .../user-guide/calendar-emails/overview.mdx | 130 ++-- .../dashboards/capabilities/dashboards.mdx | 8 +- .../dashboards/capabilities/widgets.mdx | 2 +- .../dashboards/how-tos/dashboards-faq.mdx | 2 +- .../l/es/user-guide/dashboards/overview.mdx | 16 +- .../capabilities/error-handling.mdx | 2 +- .../capabilities/field-mapping.mdx | 4 +- .../capabilities/file-formats.mdx | 64 +- .../capabilities/import-relations.mdx | 6 +- .../capabilities/uniqueness-constraints.mdx | 14 +- .../how-tos/export-your-data.mdx | 10 +- .../how-tos/fix-import-errors.mdx | 36 +- .../how-tos/import-companies-via-csv.mdx | 14 +- .../how-tos/import-contacts-via-csv.mdx | 42 +- .../how-tos/import-data-via-api.mdx | 10 +- ...port-relations-between-objects-via-csv.mdx | 40 +- .../how-tos/migrating-from-other-crms.mdx | 34 +- .../migrating-from-self-hosted-to-cloud.mdx | 24 +- .../how-tos/prepare-your-csv-files.mdx | 106 +-- .../update-existing-records-via-import.mdx | 26 +- .../es/user-guide/data-migration/overview.mdx | 100 +-- .../data-model/capabilities/fields.mdx | 136 ++-- .../data-model/capabilities/objects.mdx | 34 +- .../capabilities/relation-fields.mdx | 12 +- .../how-tos/create-custom-fields.mdx | 2 +- .../how-tos/create-custom-objects.mdx | 2 +- .../how-tos/create-relation-fields.mdx | 4 +- .../how-tos/customize-your-data-model.mdx | 30 +- .../data-model/how-tos/data-model-faq.mdx | 58 +- .../l/es/user-guide/data-model/overview.mdx | 34 +- .../getting-started/capabilities/glossary.mdx | 84 +-- .../capabilities/implementation-services.mdx | 16 +- .../capabilities/what-is-twenty.mdx | 40 +- .../how-tos/configure-your-workspace.mdx | 90 +-- .../how-tos/create-workspace.mdx | 48 +- .../how-tos/navigate-around-twenty.mdx | 74 +- .../capabilities/permissions.mdx | 100 +-- .../capabilities/sso-configuration.mdx | 12 +- .../how-tos/permissions-faq.mdx | 2 +- .../permissions-access/overview.mdx | 42 +- .../capabilities/domains-settings.mdx | 16 +- .../capabilities/experience-settings.mdx | 48 +- .../capabilities/member-management.mdx | 20 +- .../capabilities/profile-settings.mdx | 50 +- .../capabilities/releases-settings.mdx | 4 +- .../capabilities/workspace-settings.mdx | 30 +- .../settings/how-tos/settings-faq.mdx | 22 +- .../l/es/user-guide/settings/overview.mdx | 8 +- .../capabilities/calendar-view.mdx | 2 +- .../capabilities/fields-and-columns.mdx | 6 +- .../capabilities/filters-and-sorting.mdx | 16 +- .../capabilities/kanban-views.mdx | 26 +- .../capabilities/table-views.mdx | 6 +- .../capabilities/view-settings.mdx | 2 +- .../create-a-calendar-view-for-tasks-due.mdx | 8 +- .../create-a-kanban-view-for-projects.mdx | 6 +- .../create-a-table-view-with-grouping.mdx | 6 +- .../how-tos/restrict-access-to-your-view.mdx | 40 +- .../how-tos/set-up-a-sales-pipeline.mdx | 4 +- .../show-expected-amount-in-pipeline.mdx | 198 ++--- .../how-tos/track-time-in-stage.mdx | 236 +++--- .../user-guide/views-pipelines/overview.mdx | 170 ++--- .../send-emails-from-workflows.mdx | 20 +- .../use-branches-in-workflows.mdx | 2 +- .../workflows/capabilities/use-iterator.mdx | 10 +- .../capabilities/workflow-actions.mdx | 132 ++-- .../capabilities/workflow-branches.mdx | 74 +- .../capabilities/workflow-credits.mdx | 66 +- .../workflows/capabilities/workflow-runs.mdx | 16 +- .../capabilities/workflow-triggers.mdx | 98 +-- .../capabilities/workflow-versions.mdx | 110 +-- .../bring-product-data-in-twenty.mdx | 6 +- .../bring-typeform-submissions-in-twenty.mdx | 6 +- .../generate-quote-or-invoice-from-twenty.mdx | 18 +- .../set-up-a-webhook-trigger.mdx | 14 +- .../closed-won-automations.mdx | 34 +- .../detect-stale-opportunities.mdx | 8 +- .../display-number-of-emails-received.mdx | 4 +- .../display-related-record-data.mdx | 18 +- .../crm-automations/formula-fields.mdx | 14 +- .../send-email-alerts-with-tasks-due.mdx | 6 +- .../need-more-help/professional-services.mdx | 32 +- .../workflow-troubleshooting.mdx | 16 +- .../how-tos/need-more-help/workflows-faq.mdx | 14 +- .../l/es/user-guide/workflows/overview.mdx | 28 +- .../best-practices-server.mdx | 22 +- .../backend-development/custom-objects.mdx | 39 + .../backend-development/feature-flags.mdx | 46 ++ .../folder-architecture-server.mdx | 125 ++++ .../backend-development/queue.mdx | 41 + .../backend-development/server-commands.mdx | 101 +++ .../backend-development/zapier.mdx | 83 +++ .../capabilities/bug-and-requests.mdx | 78 ++ .../best-practices-front.mdx | 325 ++++++++ .../folder-architecture-front.mdx | 90 +-- .../frontend-commands.mdx | 54 +- .../frontend-development/hotkeys.mdx | 178 +++++ .../frontend-development/storybook.mdx | 6 +- .../frontend-development/style-guide.mdx | 290 ++++++++ .../frontend-development/work-with-figma.mdx | 59 ++ .../contribute/capabilities/local-setup.mdx | 333 +++++++++ .../l/fr/developers/contribute/contribute.mdx | 32 + .../developers/extend/capabilities/apis.mdx | 147 ++++ .../developers/extend/capabilities/apps.mdx | 522 +++++++++++++ .../extend/capabilities/webhooks.mdx | 112 +++ .../l/fr/developers/extend/extend.mdx | 34 + .../l/fr/developers/introduction.mdx | 23 + .../capabilities/cloud-providers.mdx | 36 +- .../self-host/capabilities/docker-compose.mdx | 253 +++++++ .../self-host/capabilities/setup.mdx | 293 ++++++++ .../capabilities/troubleshooting.mdx | 227 ++++++ .../self-host/capabilities/upgrade-guide.mdx | 381 ++++++++++ .../l/fr/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/fr/navigation.json | 216 ++++-- .../l/fr/twenty-ui/display/app-tooltip.mdx | 52 +- .../l/fr/twenty-ui/display/checkmark.mdx | 58 ++ .../l/fr/twenty-ui/display/chip.mdx | 154 ++-- .../l/fr/twenty-ui/display/icons.mdx | 100 ++- .../l/fr/twenty-ui/display/soon-pill.mdx | 18 + .../l/fr/twenty-ui/display/tag.mdx | 38 + packages/twenty-docs/l/fr/twenty-ui/input.mdx | 4 +- .../l/fr/twenty-ui/input/block-editor.mdx | 37 +- .../l/fr/twenty-ui/input/buttons.mdx | 439 +++++++++++ .../l/fr/twenty-ui/input/checkbox.mdx | 32 +- .../l/fr/twenty-ui/input/color-scheme.mdx | 94 ++- .../l/fr/twenty-ui/input/icon-picker.mdx | 38 +- .../l/fr/twenty-ui/input/image-input.mdx | 28 +- .../l/fr/twenty-ui/input/radio.mdx | 143 ++-- .../l/fr/twenty-ui/input/select.mdx | 73 +- .../twenty-docs/l/fr/twenty-ui/input/text.mdx | 103 +-- .../l/fr/twenty-ui/input/toggle.mdx | 36 + .../l/fr/twenty-ui/introduction.mdx | 30 + .../twenty-docs/l/fr/twenty-ui/navigation.mdx | 2 +- .../l/fr/twenty-ui/navigation/breadcrumb.mdx | 26 +- .../l/fr/twenty-ui/navigation/links.mdx | 93 +-- .../l/fr/twenty-ui/navigation/menu-item.mdx | 700 +++++++++--------- .../twenty-ui/navigation/navigation-bar.mdx | 49 ++ .../l/fr/twenty-ui/navigation/step-bar.mdx | 22 +- .../l/fr/twenty-ui/progress-bar.mdx | 44 +- .../user-guide/ai/capabilities/ai-agents.mdx | 34 + .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 + .../permissions-access-control.mdx | 44 +- .../l/fr/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/fr/user-guide/ai/overview.mdx | 62 ++ .../billing/capabilities/pricing-plans.mdx | 90 +-- .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/fr/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 + .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../how-tos/limit-emails-imported.mdx | 68 +- .../user-guide/calendar-emails/overview.mdx | 132 ++++ .../dashboards/capabilities/dashboards.mdx | 74 ++ .../dashboards/capabilities/widgets.mdx | 131 ++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/fr/user-guide/dashboards/overview.mdx | 79 ++ .../capabilities/error-handling.mdx | 76 ++ .../capabilities/field-mapping.mdx | 198 +++++ .../capabilities/file-formats.mdx | 64 +- .../capabilities/import-relations.mdx | 148 ++++ .../capabilities/uniqueness-constraints.mdx | 72 ++ .../how-tos/export-your-data.mdx | 209 ++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++ .../how-tos/import-data-via-api.mdx | 176 +++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 +++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++ .../update-existing-records-via-import.mdx | 198 +++++ .../fr/user-guide/data-migration/overview.mdx | 100 +-- .../data-model/capabilities/fields.mdx | 136 ++-- .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 ++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../how-tos/customize-your-data-model.mdx | 30 +- .../data-model/how-tos/data-model-faq.mdx | 155 ++++ .../l/fr/user-guide/data-model/overview.mdx | 180 +++++ .../getting-started/capabilities/glossary.mdx | 108 +++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 ++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/fr/user-guide/introduction.mdx | 63 ++ .../capabilities/permissions.mdx | 198 +++++ .../capabilities/sso-configuration.mdx | 125 ++++ .../how-tos/permissions-faq.mdx | 126 ++++ .../permissions-access/overview.mdx | 38 +- .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/experience-settings.mdx | 46 +- .../capabilities/member-management.mdx | 87 +++ .../capabilities/profile-settings.mdx | 50 +- .../capabilities/releases-settings.mdx | 31 + .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 +++++ .../l/fr/user-guide/settings/overview.mdx | 67 ++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 ++ .../capabilities/kanban-views.mdx | 99 +++ .../capabilities/table-views.mdx | 64 ++ .../capabilities/view-settings.mdx | 74 ++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 ++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/restrict-access-to-your-view.mdx | 38 +- .../how-tos/set-up-a-sales-pipeline.mdx | 120 +++ .../show-expected-amount-in-pipeline.mdx | 198 ++--- .../how-tos/track-time-in-stage.mdx | 236 +++--- .../user-guide/views-pipelines/overview.mdx | 170 ++--- .../send-emails-from-workflows.mdx | 149 ++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 +++++ .../capabilities/workflow-actions.mdx | 311 ++++++++ .../capabilities/workflow-branches.mdx | 74 +- .../capabilities/workflow-credits.mdx | 76 ++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 136 ++++ .../capabilities/workflow-versions.mdx | 110 +-- .../handle-arrays-in-code-actions.mdx | 82 ++ .../bring-product-data-in-twenty.mdx | 182 +++++ .../bring-typeform-submissions-in-twenty.mdx | 130 ++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 ++++ .../set-up-a-webhook-trigger.mdx | 171 +++++ .../closed-won-automations.mdx | 179 +++++ .../detect-stale-opportunities.mdx | 136 ++++ .../display-number-of-emails-received.mdx | 74 ++ .../display-related-record-data.mdx | 170 +++++ .../crm-automations/formula-fields.mdx | 202 +++++ .../send-email-alerts-with-tasks-due.mdx | 106 +++ .../need-more-help/professional-services.mdx | 29 + .../workflow-troubleshooting.mdx | 170 +++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++ .../l/fr/user-guide/workflows/overview.mdx | 80 ++ .../frontend-development/hotkeys.mdx | 26 +- .../frontend-development/style-guide.mdx | 32 +- .../capabilities/troubleshooting.mdx | 2 +- .../l/it/twenty-ui/input/icon-picker.mdx | 2 +- .../l/it/twenty-ui/navigation/breadcrumb.mdx | 6 +- .../l/it/twenty-ui/navigation/menu-item.mdx | 41 +- .../twenty-ui/navigation/navigation-bar.mdx | 14 +- .../l/it/twenty-ui/navigation/step-bar.mdx | 6 +- .../l/it/user-guide/billing/overview.mdx | 42 +- .../calendar-emails/capabilities/calendar.mdx | 28 +- .../how-tos/limit-emails-imported.mdx | 2 +- .../dashboards/how-tos/dashboards-faq.mdx | 62 +- .../capabilities/field-mapping.mdx | 174 ++--- .../how-tos/prepare-your-csv-files.mdx | 192 ++--- .../how-tos/create-relation-fields.mdx | 70 +- .../how-tos/customize-your-data-model.mdx | 2 +- .../permissions-access/overview.mdx | 2 +- .../how-tos/restrict-access-to-your-view.mdx | 2 +- .../capabilities/workflow-branches.mdx | 2 +- .../workflows/capabilities/workflow-runs.mdx | 118 +-- .../need-more-help/professional-services.mdx | 4 +- .../best-practices-server.mdx | 22 + .../backend-development/custom-objects.mdx | 39 + .../backend-development/feature-flags.mdx | 24 +- .../folder-architecture-server.mdx | 125 ++++ .../backend-development/queue.mdx | 41 + .../backend-development/server-commands.mdx | 67 +- .../backend-development/zapier.mdx | 83 +++ .../capabilities/bug-and-requests.mdx | 78 ++ .../best-practices-front.mdx | 325 ++++++++ .../folder-architecture-front.mdx | 109 +++ .../frontend-commands.mdx | 48 +- .../frontend-development/hotkeys.mdx | 128 ++-- .../frontend-development/storybook.mdx | 8 +- .../frontend-development/style-guide.mdx | 290 ++++++++ .../frontend-development/work-with-figma.mdx | 143 +--- .../contribute/capabilities/local-setup.mdx | 333 +++++++++ .../l/ja/developers/contribute/contribute.mdx | 32 + .../developers/extend/capabilities/apis.mdx | 147 ++++ .../developers/extend/capabilities/apps.mdx | 522 +++++++++++++ .../extend/capabilities/webhooks.mdx | 112 +++ .../l/ja/developers/extend/extend.mdx | 34 + .../l/ja/developers/introduction.mdx | 23 + .../capabilities/cloud-providers.mdx | 37 +- .../self-host/capabilities/docker-compose.mdx | 253 +++++++ .../self-host/capabilities/setup.mdx | 293 ++++++++ .../capabilities/troubleshooting.mdx | 227 ++++++ .../self-host/capabilities/upgrade-guide.mdx | 381 ++++++++++ .../l/ja/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/ja/navigation.json | 216 ++++-- .../l/ja/twenty-ui/display/app-tooltip.mdx | 52 +- .../l/ja/twenty-ui/display/checkmark.mdx | 89 +-- .../l/ja/twenty-ui/display/chip.mdx | 154 ++-- .../l/ja/twenty-ui/display/icons.mdx | 73 ++ .../l/ja/twenty-ui/display/soon-pill.mdx | 18 + .../l/ja/twenty-ui/display/tag.mdx | 56 +- packages/twenty-docs/l/ja/twenty-ui/input.mdx | 4 +- .../l/ja/twenty-ui/input/block-editor.mdx | 37 +- .../l/ja/twenty-ui/input/buttons.mdx | 439 +++++++++++ .../l/ja/twenty-ui/input/checkbox.mdx | 44 ++ .../l/ja/twenty-ui/input/color-scheme.mdx | 63 ++ .../l/ja/twenty-ui/input/icon-picker.mdx | 30 +- .../l/ja/twenty-ui/input/image-input.mdx | 34 + .../l/ja/twenty-ui/input/radio.mdx | 97 +++ .../l/ja/twenty-ui/input/select.mdx | 51 ++ .../twenty-docs/l/ja/twenty-ui/input/text.mdx | 137 ++++ .../l/ja/twenty-ui/input/toggle.mdx | 36 + .../l/ja/twenty-ui/introduction.mdx | 30 + .../twenty-docs/l/ja/twenty-ui/navigation.mdx | 6 +- .../l/ja/twenty-ui/navigation/breadcrumb.mdx | 26 +- .../l/ja/twenty-ui/navigation/links.mdx | 93 +-- .../l/ja/twenty-ui/navigation/menu-item.mdx | 428 +++++++++++ .../twenty-ui/navigation/navigation-bar.mdx | 32 +- .../l/ja/twenty-ui/navigation/step-bar.mdx | 16 +- .../l/ja/twenty-ui/progress-bar.mdx | 66 ++ .../user-guide/ai/capabilities/ai-agents.mdx | 34 + .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 + .../permissions-access-control.mdx | 35 + .../l/ja/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/ja/user-guide/ai/overview.mdx | 62 ++ .../billing/capabilities/pricing-plans.mdx | 79 ++ .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/ja/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 + .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../how-tos/limit-emails-imported.mdx | 52 ++ .../user-guide/calendar-emails/overview.mdx | 132 ++++ .../dashboards/capabilities/dashboards.mdx | 74 ++ .../dashboards/capabilities/widgets.mdx | 131 ++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/ja/user-guide/dashboards/overview.mdx | 79 ++ .../capabilities/error-handling.mdx | 76 ++ .../capabilities/field-mapping.mdx | 198 +++++ .../capabilities/file-formats.mdx | 48 ++ .../capabilities/import-relations.mdx | 148 ++++ .../capabilities/uniqueness-constraints.mdx | 72 ++ .../how-tos/export-your-data.mdx | 209 ++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++ .../how-tos/import-data-via-api.mdx | 176 +++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 +++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++ .../update-existing-records-via-import.mdx | 198 +++++ .../ja/user-guide/data-migration/overview.mdx | 89 +++ .../data-model/capabilities/fields.mdx | 122 +++ .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 ++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../how-tos/customize-your-data-model.mdx | 22 + .../data-model/how-tos/data-model-faq.mdx | 155 ++++ .../l/ja/user-guide/data-model/overview.mdx | 180 +++++ .../getting-started/capabilities/glossary.mdx | 108 +++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 ++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/ja/user-guide/introduction.mdx | 63 ++ .../capabilities/permissions.mdx | 198 +++++ .../capabilities/sso-configuration.mdx | 125 ++++ .../how-tos/permissions-faq.mdx | 126 ++++ .../permissions-access/overview.mdx | 40 + .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/experience-settings.mdx | 48 +- .../capabilities/member-management.mdx | 87 +++ .../capabilities/profile-settings.mdx | 43 ++ .../capabilities/releases-settings.mdx | 31 + .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 +++++ .../l/ja/user-guide/settings/overview.mdx | 67 ++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 ++ .../capabilities/kanban-views.mdx | 99 +++ .../capabilities/table-views.mdx | 64 ++ .../capabilities/view-settings.mdx | 74 ++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 ++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/restrict-access-to-your-view.mdx | 32 + .../how-tos/set-up-a-sales-pipeline.mdx | 120 +++ .../show-expected-amount-in-pipeline.mdx | 149 ++++ .../how-tos/track-time-in-stage.mdx | 231 ++++++ .../user-guide/views-pipelines/overview.mdx | 137 ++++ .../send-emails-from-workflows.mdx | 149 ++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 +++++ .../capabilities/workflow-actions.mdx | 311 ++++++++ .../capabilities/workflow-branches.mdx | 66 ++ .../capabilities/workflow-credits.mdx | 76 ++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 136 ++++ .../capabilities/workflow-versions.mdx | 85 +++ .../handle-arrays-in-code-actions.mdx | 82 ++ .../bring-product-data-in-twenty.mdx | 182 +++++ .../bring-typeform-submissions-in-twenty.mdx | 130 ++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 ++++ .../set-up-a-webhook-trigger.mdx | 171 +++++ .../closed-won-automations.mdx | 179 +++++ .../detect-stale-opportunities.mdx | 136 ++++ .../display-number-of-emails-received.mdx | 74 ++ .../display-related-record-data.mdx | 170 +++++ .../crm-automations/formula-fields.mdx | 202 +++++ .../send-email-alerts-with-tasks-due.mdx | 106 +++ .../need-more-help/professional-services.mdx | 29 + .../workflow-troubleshooting.mdx | 170 +++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++ .../l/ja/user-guide/workflows/overview.mdx | 80 ++ .../best-practices-server.mdx | 22 +- .../backend-development/custom-objects.mdx | 39 + .../backend-development/feature-flags.mdx | 46 ++ .../folder-architecture-server.mdx | 125 ++++ .../backend-development/queue.mdx | 41 + .../backend-development/server-commands.mdx | 101 +++ .../backend-development/zapier.mdx | 83 +++ .../capabilities/bug-and-requests.mdx | 78 ++ .../best-practices-front.mdx | 325 ++++++++ .../folder-architecture-front.mdx | 72 +- .../frontend-commands.mdx | 58 +- .../frontend-development/hotkeys.mdx | 178 +++++ .../frontend-development/storybook.mdx | 8 + .../frontend-development/style-guide.mdx | 290 ++++++++ .../frontend-development/work-with-figma.mdx | 65 +- .../contribute/capabilities/local-setup.mdx | 333 +++++++++ .../l/ko/developers/contribute/contribute.mdx | 32 + .../developers/extend/capabilities/apis.mdx | 147 ++++ .../developers/extend/capabilities/apps.mdx | 522 +++++++++++++ .../extend/capabilities/webhooks.mdx | 112 +++ .../l/ko/developers/extend/extend.mdx | 34 + .../l/ko/developers/introduction.mdx | 23 + .../capabilities/cloud-providers.mdx | 45 ++ .../self-host/capabilities/docker-compose.mdx | 253 +++++++ .../self-host/capabilities/setup.mdx | 293 ++++++++ .../capabilities/troubleshooting.mdx | 227 ++++++ .../self-host/capabilities/upgrade-guide.mdx | 381 ++++++++++ .../l/ko/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/ko/navigation.json | 214 ++++-- .../l/ko/twenty-ui/display/app-tooltip.mdx | 78 +- .../l/ko/twenty-ui/display/checkmark.mdx | 87 +-- .../l/ko/twenty-ui/display/chip.mdx | 138 ++++ .../l/ko/twenty-ui/display/icons.mdx | 100 ++- .../l/ko/twenty-ui/display/soon-pill.mdx | 18 + .../l/ko/twenty-ui/display/tag.mdx | 56 +- packages/twenty-docs/l/ko/twenty-ui/input.mdx | 4 +- .../l/ko/twenty-ui/input/block-editor.mdx | 37 +- .../l/ko/twenty-ui/input/buttons.mdx | 439 +++++++++++ .../l/ko/twenty-ui/input/checkbox.mdx | 28 +- .../l/ko/twenty-ui/input/color-scheme.mdx | 94 ++- .../l/ko/twenty-ui/input/icon-picker.mdx | 52 ++ .../l/ko/twenty-ui/input/image-input.mdx | 28 +- .../l/ko/twenty-ui/input/radio.mdx | 145 ++-- .../l/ko/twenty-ui/input/select.mdx | 73 +- .../twenty-docs/l/ko/twenty-ui/input/text.mdx | 137 ++++ .../l/ko/twenty-ui/input/toggle.mdx | 36 + .../l/ko/twenty-ui/introduction.mdx | 30 + .../twenty-docs/l/ko/twenty-ui/navigation.mdx | 4 +- .../l/ko/twenty-ui/navigation/breadcrumb.mdx | 41 + .../l/ko/twenty-ui/navigation/links.mdx | 242 +++--- .../l/ko/twenty-ui/navigation/menu-item.mdx | 428 +++++++++++ .../twenty-ui/navigation/navigation-bar.mdx | 49 ++ .../l/ko/twenty-ui/navigation/step-bar.mdx | 22 +- .../l/ko/twenty-ui/progress-bar.mdx | 66 ++ .../user-guide/ai/capabilities/ai-agents.mdx | 34 + .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 + .../permissions-access-control.mdx | 35 + .../l/ko/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/ko/user-guide/ai/overview.mdx | 62 ++ .../billing/capabilities/pricing-plans.mdx | 79 ++ .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/ko/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 + .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../how-tos/limit-emails-imported.mdx | 52 ++ .../user-guide/calendar-emails/overview.mdx | 132 ++++ .../dashboards/capabilities/dashboards.mdx | 74 ++ .../dashboards/capabilities/widgets.mdx | 131 ++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/ko/user-guide/dashboards/overview.mdx | 79 ++ .../capabilities/error-handling.mdx | 76 ++ .../capabilities/field-mapping.mdx | 198 +++++ .../capabilities/file-formats.mdx | 48 ++ .../capabilities/import-relations.mdx | 148 ++++ .../capabilities/uniqueness-constraints.mdx | 72 ++ .../how-tos/export-your-data.mdx | 209 ++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++ .../how-tos/import-data-via-api.mdx | 176 +++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 +++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++ .../update-existing-records-via-import.mdx | 198 +++++ .../ko/user-guide/data-migration/overview.mdx | 89 +++ .../data-model/capabilities/fields.mdx | 122 +++ .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 ++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../how-tos/customize-your-data-model.mdx | 22 + .../data-model/how-tos/data-model-faq.mdx | 155 ++++ .../l/ko/user-guide/data-model/overview.mdx | 180 +++++ .../getting-started/capabilities/glossary.mdx | 108 +++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 ++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/ko/user-guide/introduction.mdx | 63 ++ .../capabilities/permissions.mdx | 198 +++++ .../capabilities/sso-configuration.mdx | 125 ++++ .../how-tos/permissions-faq.mdx | 126 ++++ .../permissions-access/overview.mdx | 40 + .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/experience-settings.mdx | 48 +- .../capabilities/member-management.mdx | 87 +++ .../capabilities/profile-settings.mdx | 43 ++ .../capabilities/releases-settings.mdx | 31 + .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 +++++ .../l/ko/user-guide/settings/overview.mdx | 67 ++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 ++ .../capabilities/kanban-views.mdx | 99 +++ .../capabilities/table-views.mdx | 64 ++ .../capabilities/view-settings.mdx | 74 ++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 ++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/restrict-access-to-your-view.mdx | 32 + .../how-tos/set-up-a-sales-pipeline.mdx | 120 +++ .../show-expected-amount-in-pipeline.mdx | 149 ++++ .../how-tos/track-time-in-stage.mdx | 231 ++++++ .../user-guide/views-pipelines/overview.mdx | 137 ++++ .../send-emails-from-workflows.mdx | 149 ++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 +++++ .../capabilities/workflow-actions.mdx | 311 ++++++++ .../capabilities/workflow-branches.mdx | 66 ++ .../capabilities/workflow-credits.mdx | 76 ++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 136 ++++ .../capabilities/workflow-versions.mdx | 85 +++ .../handle-arrays-in-code-actions.mdx | 82 ++ .../bring-product-data-in-twenty.mdx | 182 +++++ .../bring-typeform-submissions-in-twenty.mdx | 130 ++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 ++++ .../set-up-a-webhook-trigger.mdx | 171 +++++ .../closed-won-automations.mdx | 179 +++++ .../detect-stale-opportunities.mdx | 136 ++++ .../display-number-of-emails-received.mdx | 74 ++ .../display-related-record-data.mdx | 170 +++++ .../crm-automations/formula-fields.mdx | 202 +++++ .../send-email-alerts-with-tasks-due.mdx | 106 +++ .../need-more-help/professional-services.mdx | 29 + .../workflow-troubleshooting.mdx | 170 +++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++ .../l/ko/user-guide/workflows/overview.mdx | 80 ++ .../best-practices-server.mdx | 22 +- .../backend-development/custom-objects.mdx | 39 + .../backend-development/feature-flags.mdx | 46 ++ .../folder-architecture-server.mdx | 125 ++++ .../backend-development/queue.mdx | 52 +- .../backend-development/server-commands.mdx | 101 +++ .../backend-development/zapier.mdx | 40 +- .../capabilities/bug-and-requests.mdx | 78 ++ .../best-practices-front.mdx | 325 ++++++++ .../folder-architecture-front.mdx | 70 +- .../frontend-commands.mdx | 56 +- .../frontend-development/hotkeys.mdx | 98 +-- .../frontend-development/storybook.mdx | 6 +- .../frontend-development/style-guide.mdx | 290 ++++++++ .../frontend-development/work-with-figma.mdx | 59 ++ .../contribute/capabilities/local-setup.mdx | 333 +++++++++ .../l/pt/developers/contribute/contribute.mdx | 32 + .../developers/extend/capabilities/apis.mdx | 147 ++++ .../developers/extend/capabilities/apps.mdx | 522 +++++++++++++ .../extend/capabilities/webhooks.mdx | 112 +++ .../l/pt/developers/extend/extend.mdx | 34 + .../l/pt/developers/introduction.mdx | 23 + .../capabilities/cloud-providers.mdx | 36 +- .../self-host/capabilities/docker-compose.mdx | 253 +++++++ .../self-host/capabilities/setup.mdx | 293 ++++++++ .../capabilities/troubleshooting.mdx | 227 ++++++ .../self-host/capabilities/upgrade-guide.mdx | 381 ++++++++++ .../l/pt/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/pt/navigation.json | 216 ++++-- .../l/pt/twenty-ui/display/app-tooltip.mdx | 88 +-- .../l/pt/twenty-ui/display/checkmark.mdx | 58 ++ .../l/pt/twenty-ui/display/chip.mdx | 138 ++++ .../l/pt/twenty-ui/display/icons.mdx | 73 ++ .../l/pt/twenty-ui/display/soon-pill.mdx | 18 + .../l/pt/twenty-ui/display/tag.mdx | 38 + packages/twenty-docs/l/pt/twenty-ui/input.mdx | 4 +- .../l/pt/twenty-ui/input/block-editor.mdx | 37 +- .../l/pt/twenty-ui/input/buttons.mdx | 439 +++++++++++ .../l/pt/twenty-ui/input/checkbox.mdx | 44 ++ .../l/pt/twenty-ui/input/color-scheme.mdx | 63 ++ .../l/pt/twenty-ui/input/icon-picker.mdx | 52 ++ .../l/pt/twenty-ui/input/image-input.mdx | 34 + .../l/pt/twenty-ui/input/radio.mdx | 97 +++ .../l/pt/twenty-ui/input/select.mdx | 51 ++ .../twenty-docs/l/pt/twenty-ui/input/text.mdx | 137 ++++ .../l/pt/twenty-ui/input/toggle.mdx | 36 + .../l/pt/twenty-ui/introduction.mdx | 30 + .../twenty-docs/l/pt/twenty-ui/navigation.mdx | 4 +- .../l/pt/twenty-ui/navigation/breadcrumb.mdx | 41 + .../l/pt/twenty-ui/navigation/links.mdx | 90 +-- .../l/pt/twenty-ui/navigation/menu-item.mdx | 428 +++++++++++ .../twenty-ui/navigation/navigation-bar.mdx | 49 ++ .../l/pt/twenty-ui/navigation/step-bar.mdx | 22 +- .../l/pt/twenty-ui/progress-bar.mdx | 66 ++ .../user-guide/ai/capabilities/ai-agents.mdx | 34 + .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 + .../permissions-access-control.mdx | 35 + .../l/pt/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/pt/user-guide/ai/overview.mdx | 62 ++ .../billing/capabilities/pricing-plans.mdx | 79 ++ .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/pt/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 + .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../how-tos/limit-emails-imported.mdx | 52 ++ .../user-guide/calendar-emails/overview.mdx | 132 ++++ .../dashboards/capabilities/dashboards.mdx | 74 ++ .../dashboards/capabilities/widgets.mdx | 131 ++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/pt/user-guide/dashboards/overview.mdx | 79 ++ .../capabilities/error-handling.mdx | 76 ++ .../capabilities/field-mapping.mdx | 198 +++++ .../capabilities/file-formats.mdx | 48 ++ .../capabilities/import-relations.mdx | 148 ++++ .../capabilities/uniqueness-constraints.mdx | 72 ++ .../how-tos/export-your-data.mdx | 209 ++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++ .../how-tos/import-data-via-api.mdx | 176 +++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 +++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++ .../update-existing-records-via-import.mdx | 198 +++++ .../pt/user-guide/data-migration/overview.mdx | 89 +++ .../data-model/capabilities/fields.mdx | 122 +++ .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 ++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../how-tos/customize-your-data-model.mdx | 30 +- .../data-model/how-tos/data-model-faq.mdx | 155 ++++ .../l/pt/user-guide/data-model/overview.mdx | 180 +++++ .../getting-started/capabilities/glossary.mdx | 108 +++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 ++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/pt/user-guide/introduction.mdx | 63 ++ .../capabilities/permissions.mdx | 198 +++++ .../capabilities/sso-configuration.mdx | 125 ++++ .../how-tos/permissions-faq.mdx | 126 ++++ .../permissions-access/overview.mdx | 40 + .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/experience-settings.mdx | 48 +- .../capabilities/member-management.mdx | 87 +++ .../capabilities/profile-settings.mdx | 50 +- .../capabilities/releases-settings.mdx | 31 + .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 +++++ .../l/pt/user-guide/settings/overview.mdx | 67 ++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 ++ .../capabilities/kanban-views.mdx | 99 +++ .../capabilities/table-views.mdx | 64 ++ .../capabilities/view-settings.mdx | 74 ++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 ++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/restrict-access-to-your-view.mdx | 32 + .../how-tos/set-up-a-sales-pipeline.mdx | 120 +++ .../show-expected-amount-in-pipeline.mdx | 149 ++++ .../how-tos/track-time-in-stage.mdx | 231 ++++++ .../user-guide/views-pipelines/overview.mdx | 170 ++--- .../send-emails-from-workflows.mdx | 149 ++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 +++++ .../capabilities/workflow-actions.mdx | 311 ++++++++ .../capabilities/workflow-branches.mdx | 66 ++ .../capabilities/workflow-credits.mdx | 76 ++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 136 ++++ .../capabilities/workflow-versions.mdx | 85 +++ .../handle-arrays-in-code-actions.mdx | 82 ++ .../bring-product-data-in-twenty.mdx | 182 +++++ .../bring-typeform-submissions-in-twenty.mdx | 130 ++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 ++++ .../set-up-a-webhook-trigger.mdx | 171 +++++ .../closed-won-automations.mdx | 179 +++++ .../detect-stale-opportunities.mdx | 136 ++++ .../display-number-of-emails-received.mdx | 74 ++ .../display-related-record-data.mdx | 170 +++++ .../crm-automations/formula-fields.mdx | 202 +++++ .../send-email-alerts-with-tasks-due.mdx | 106 +++ .../need-more-help/professional-services.mdx | 29 + .../workflow-troubleshooting.mdx | 170 +++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++ .../l/pt/user-guide/workflows/overview.mdx | 80 ++ .../frontend-development/style-guide.mdx | 30 +- .../l/ro/twenty-ui/input/checkbox.mdx | 2 +- .../l/ro/twenty-ui/navigation/links.mdx | 5 +- .../l/ro/twenty-ui/navigation/menu-item.mdx | 22 +- .../twenty-ui/navigation/navigation-bar.mdx | 12 +- .../capabilities/workflow-branches.mdx | 2 +- .../backend-development/queue.mdx | 10 +- .../best-practices-front.mdx | 6 +- .../frontend-development/hotkeys.mdx | 26 +- .../frontend-development/style-guide.mdx | 26 +- .../l/ru/twenty-ui/display/app-tooltip.mdx | 6 +- .../l/ru/twenty-ui/input/icon-picker.mdx | 2 +- .../l/ru/twenty-ui/navigation/breadcrumb.mdx | 22 +- .../l/ru/twenty-ui/navigation/menu-item.mdx | 80 +- .../l/ru/twenty-ui/navigation/step-bar.mdx | 6 +- .../billing/capabilities/pricing-plans.mdx | 2 +- .../how-tos/limit-emails-imported.mdx | 2 +- .../how-tos/prepare-your-csv-files.mdx | 2 +- .../ru/user-guide/data-migration/overview.mdx | 2 +- .../permissions-access/overview.mdx | 2 +- .../show-expected-amount-in-pipeline.mdx | 2 +- .../how-tos/track-time-in-stage.mdx | 2 +- .../user-guide/views-pipelines/overview.mdx | 2 +- .../capabilities/workflow-branches.mdx | 2 +- .../backend-development/queue.mdx | 2 +- .../best-practices-front.mdx | 14 +- .../frontend-development/hotkeys.mdx | 8 +- .../frontend-development/style-guide.mdx | 32 +- .../l/tr/twenty-ui/display/app-tooltip.mdx | 6 +- .../l/tr/twenty-ui/input/checkbox.mdx | 4 +- .../l/tr/twenty-ui/input/icon-picker.mdx | 2 +- .../l/tr/twenty-ui/navigation/breadcrumb.mdx | 8 +- .../l/tr/twenty-ui/navigation/links.mdx | 4 +- .../l/tr/twenty-ui/navigation/menu-item.mdx | 35 +- .../twenty-ui/navigation/navigation-bar.mdx | 14 +- .../l/tr/twenty-ui/navigation/step-bar.mdx | 6 +- .../calendar-emails/capabilities/mailbox.mdx | 2 +- .../how-tos/import-companies-via-csv.mdx | 2 +- .../how-tos/import-contacts-via-csv.mdx | 2 +- .../how-tos/prepare-your-csv-files.mdx | 2 +- .../data-model/capabilities/fields.mdx | 2 +- .../how-tos/customize-your-data-model.mdx | 2 +- .../capabilities/kanban-views.mdx | 2 +- .../capabilities/table-views.mdx | 2 +- .../create-a-calendar-view-for-tasks-due.mdx | 2 +- .../create-a-kanban-view-for-projects.mdx | 2 +- .../use-branches-in-workflows.mdx | 2 +- .../capabilities/workflow-actions.mdx | 8 +- .../capabilities/workflow-branches.mdx | 2 +- .../display-number-of-emails-received.mdx | 2 +- .../send-email-alerts-with-tasks-due.mdx | 2 +- .../l/tr/user-guide/workflows/overview.mdx | 2 +- .../best-practices-server.mdx | 22 + .../backend-development/custom-objects.mdx | 39 + .../backend-development/feature-flags.mdx | 46 ++ .../folder-architecture-server.mdx | 125 ++++ .../backend-development/queue.mdx | 39 +- .../backend-development/server-commands.mdx | 101 +++ .../backend-development/zapier.mdx | 83 +++ .../capabilities/bug-and-requests.mdx | 78 ++ .../best-practices-front.mdx | 325 ++++++++ .../folder-architecture-front.mdx | 72 +- .../frontend-commands.mdx | 58 +- .../frontend-development/hotkeys.mdx | 98 +-- .../frontend-development/storybook.mdx | 6 +- .../frontend-development/style-guide.mdx | 290 ++++++++ .../frontend-development/work-with-figma.mdx | 59 ++ .../contribute/capabilities/local-setup.mdx | 333 +++++++++ .../l/zh/developers/contribute/contribute.mdx | 32 + .../developers/extend/capabilities/apis.mdx | 147 ++++ .../developers/extend/capabilities/apps.mdx | 522 +++++++++++++ .../extend/capabilities/webhooks.mdx | 112 +++ .../l/zh/developers/extend/extend.mdx | 34 + .../l/zh/developers/introduction.mdx | 23 + .../capabilities/cloud-providers.mdx | 45 ++ .../self-host/capabilities/docker-compose.mdx | 253 +++++++ .../self-host/capabilities/setup.mdx | 293 ++++++++ .../capabilities/troubleshooting.mdx | 227 ++++++ .../self-host/capabilities/upgrade-guide.mdx | 381 ++++++++++ .../l/zh/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/zh/navigation.json | 214 ++++-- .../l/zh/twenty-ui/display/app-tooltip.mdx | 124 ++-- .../l/zh/twenty-ui/display/checkmark.mdx | 58 ++ .../l/zh/twenty-ui/display/chip.mdx | 138 ++++ .../l/zh/twenty-ui/display/icons.mdx | 73 ++ .../l/zh/twenty-ui/display/soon-pill.mdx | 4 +- .../l/zh/twenty-ui/display/tag.mdx | 56 +- packages/twenty-docs/l/zh/twenty-ui/input.mdx | 4 +- .../l/zh/twenty-ui/input/block-editor.mdx | 37 +- .../l/zh/twenty-ui/input/buttons.mdx | 439 +++++++++++ .../l/zh/twenty-ui/input/checkbox.mdx | 44 ++ .../l/zh/twenty-ui/input/color-scheme.mdx | 63 ++ .../l/zh/twenty-ui/input/icon-picker.mdx | 52 +- .../l/zh/twenty-ui/input/image-input.mdx | 34 + .../l/zh/twenty-ui/input/radio.mdx | 145 ++-- .../l/zh/twenty-ui/input/select.mdx | 73 +- .../twenty-docs/l/zh/twenty-ui/input/text.mdx | 226 +++--- .../l/zh/twenty-ui/input/toggle.mdx | 36 + .../l/zh/twenty-ui/introduction.mdx | 30 + .../twenty-docs/l/zh/twenty-ui/navigation.mdx | 4 +- .../l/zh/twenty-ui/navigation/breadcrumb.mdx | 26 +- .../l/zh/twenty-ui/navigation/links.mdx | 153 ++-- .../l/zh/twenty-ui/navigation/menu-item.mdx | 428 +++++++++++ .../twenty-ui/navigation/navigation-bar.mdx | 32 +- .../l/zh/twenty-ui/navigation/step-bar.mdx | 22 +- .../l/zh/twenty-ui/progress-bar.mdx | 66 ++ .../user-guide/ai/capabilities/ai-agents.mdx | 34 + .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 + .../permissions-access-control.mdx | 35 + .../l/zh/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/zh/user-guide/ai/overview.mdx | 62 ++ .../billing/capabilities/pricing-plans.mdx | 79 ++ .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/zh/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 + .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../how-tos/limit-emails-imported.mdx | 52 ++ .../user-guide/calendar-emails/overview.mdx | 132 ++++ .../dashboards/capabilities/dashboards.mdx | 74 ++ .../dashboards/capabilities/widgets.mdx | 131 ++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/zh/user-guide/dashboards/overview.mdx | 79 ++ .../capabilities/error-handling.mdx | 76 ++ .../capabilities/field-mapping.mdx | 198 +++++ .../capabilities/file-formats.mdx | 48 ++ .../capabilities/import-relations.mdx | 148 ++++ .../capabilities/uniqueness-constraints.mdx | 72 ++ .../how-tos/export-your-data.mdx | 209 ++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++ .../how-tos/import-data-via-api.mdx | 176 +++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 +++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++ .../update-existing-records-via-import.mdx | 198 +++++ .../zh/user-guide/data-migration/overview.mdx | 89 +++ .../data-model/capabilities/fields.mdx | 122 +++ .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 ++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../how-tos/customize-your-data-model.mdx | 22 + .../data-model/how-tos/data-model-faq.mdx | 155 ++++ .../l/zh/user-guide/data-model/overview.mdx | 180 +++++ .../getting-started/capabilities/glossary.mdx | 108 +++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 ++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/zh/user-guide/introduction.mdx | 63 ++ .../capabilities/permissions.mdx | 198 +++++ .../capabilities/sso-configuration.mdx | 125 ++++ .../how-tos/permissions-faq.mdx | 126 ++++ .../permissions-access/overview.mdx | 40 + .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/experience-settings.mdx | 48 +- .../capabilities/member-management.mdx | 87 +++ .../capabilities/profile-settings.mdx | 50 +- .../capabilities/releases-settings.mdx | 31 + .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 +++++ .../l/zh/user-guide/settings/overview.mdx | 67 ++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 ++ .../capabilities/kanban-views.mdx | 99 +++ .../capabilities/table-views.mdx | 64 ++ .../capabilities/view-settings.mdx | 74 ++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 ++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/restrict-access-to-your-view.mdx | 32 + .../how-tos/set-up-a-sales-pipeline.mdx | 120 +++ .../show-expected-amount-in-pipeline.mdx | 149 ++++ .../how-tos/track-time-in-stage.mdx | 231 ++++++ .../user-guide/views-pipelines/overview.mdx | 137 ++++ .../send-emails-from-workflows.mdx | 149 ++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 +++++ .../capabilities/workflow-actions.mdx | 311 ++++++++ .../capabilities/workflow-branches.mdx | 66 ++ .../capabilities/workflow-credits.mdx | 76 ++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 136 ++++ .../capabilities/workflow-versions.mdx | 85 +++ .../handle-arrays-in-code-actions.mdx | 82 ++ .../bring-product-data-in-twenty.mdx | 182 +++++ .../bring-typeform-submissions-in-twenty.mdx | 130 ++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 ++++ .../set-up-a-webhook-trigger.mdx | 171 +++++ .../closed-won-automations.mdx | 179 +++++ .../detect-stale-opportunities.mdx | 136 ++++ .../display-number-of-emails-received.mdx | 74 ++ .../display-related-record-data.mdx | 170 +++++ .../crm-automations/formula-fields.mdx | 202 +++++ .../send-email-alerts-with-tasks-due.mdx | 106 +++ .../need-more-help/professional-services.mdx | 29 + .../workflow-troubleshooting.mdx | 170 +++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++ .../l/zh/user-guide/workflows/overview.mdx | 80 ++ 1080 files changed, 89730 insertions(+), 9944 deletions(-) create mode 100644 packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/custom-objects.mdx create mode 100644 packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/feature-flags.mdx create mode 100644 packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/queue.mdx create mode 100644 packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/server-commands.mdx create mode 100644 packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/zapier.mdx create mode 100644 packages/twenty-docs/l/fr/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/hotkeys.mdx create mode 100644 packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/work-with-figma.mdx create mode 100644 packages/twenty-docs/l/fr/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/fr/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/fr/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/fr/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/fr/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/fr/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/fr/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/fr/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/fr/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/fr/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/fr/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/fr/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/fr/twenty-ui/display/checkmark.mdx create mode 100644 packages/twenty-docs/l/fr/twenty-ui/display/soon-pill.mdx create mode 100644 packages/twenty-docs/l/fr/twenty-ui/display/tag.mdx create mode 100644 packages/twenty-docs/l/fr/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/fr/twenty-ui/input/toggle.mdx create mode 100644 packages/twenty-docs/l/fr/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/fr/twenty-ui/navigation/navigation-bar.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/need-more-help/professional-services.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/fr/user-guide/workflows/overview.mdx create mode 100644 packages/twenty-docs/l/ja/developers/contribute/capabilities/backend-development/best-practices-server.mdx create mode 100644 packages/twenty-docs/l/ja/developers/contribute/capabilities/backend-development/custom-objects.mdx create mode 100644 packages/twenty-docs/l/ja/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/ja/developers/contribute/capabilities/backend-development/queue.mdx create mode 100644 packages/twenty-docs/l/ja/developers/contribute/capabilities/backend-development/zapier.mdx create mode 100644 packages/twenty-docs/l/ja/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/ja/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/ja/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx create mode 100644 packages/twenty-docs/l/ja/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/ja/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/ja/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/ja/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/ja/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/ja/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/ja/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/ja/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/ja/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/ja/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/ja/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/ja/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/ja/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/display/icons.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/display/soon-pill.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/input/checkbox.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/input/color-scheme.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/input/image-input.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/input/radio.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/input/select.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/input/text.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/input/toggle.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/navigation/menu-item.mdx create mode 100644 packages/twenty-docs/l/ja/twenty-ui/progress-bar.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/ai/capabilities/permissions-access-control.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/billing/capabilities/pricing-plans.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/capabilities/file-formats.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-migration/overview.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-model/capabilities/fields.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-model/how-tos/customize-your-data-model.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/permissions-access/overview.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/settings/capabilities/profile-settings.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/views-pipelines/overview.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/capabilities/workflow-branches.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/capabilities/workflow-versions.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/need-more-help/professional-services.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/ja/user-guide/workflows/overview.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/capabilities/backend-development/custom-objects.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/capabilities/backend-development/feature-flags.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/capabilities/backend-development/queue.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/capabilities/backend-development/server-commands.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/capabilities/backend-development/zapier.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/capabilities/frontend-development/hotkeys.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/capabilities/frontend-development/storybook.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/ko/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/ko/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/ko/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/ko/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/ko/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/ko/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/ko/developers/self-host/capabilities/cloud-providers.mdx create mode 100644 packages/twenty-docs/l/ko/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/ko/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/ko/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/ko/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/ko/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/ko/twenty-ui/display/chip.mdx create mode 100644 packages/twenty-docs/l/ko/twenty-ui/display/soon-pill.mdx create mode 100644 packages/twenty-docs/l/ko/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/ko/twenty-ui/input/icon-picker.mdx create mode 100644 packages/twenty-docs/l/ko/twenty-ui/input/text.mdx create mode 100644 packages/twenty-docs/l/ko/twenty-ui/input/toggle.mdx create mode 100644 packages/twenty-docs/l/ko/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/ko/twenty-ui/navigation/breadcrumb.mdx create mode 100644 packages/twenty-docs/l/ko/twenty-ui/navigation/menu-item.mdx create mode 100644 packages/twenty-docs/l/ko/twenty-ui/navigation/navigation-bar.mdx create mode 100644 packages/twenty-docs/l/ko/twenty-ui/progress-bar.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/ai/capabilities/permissions-access-control.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/billing/capabilities/pricing-plans.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/capabilities/file-formats.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-migration/overview.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-model/capabilities/fields.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-model/how-tos/customize-your-data-model.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/permissions-access/overview.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/settings/capabilities/profile-settings.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/views-pipelines/overview.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/capabilities/workflow-branches.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/capabilities/workflow-versions.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/need-more-help/professional-services.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/ko/user-guide/workflows/overview.mdx create mode 100644 packages/twenty-docs/l/pt/developers/contribute/capabilities/backend-development/custom-objects.mdx create mode 100644 packages/twenty-docs/l/pt/developers/contribute/capabilities/backend-development/feature-flags.mdx create mode 100644 packages/twenty-docs/l/pt/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/pt/developers/contribute/capabilities/backend-development/server-commands.mdx create mode 100644 packages/twenty-docs/l/pt/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/pt/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/pt/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/pt/developers/contribute/capabilities/frontend-development/work-with-figma.mdx create mode 100644 packages/twenty-docs/l/pt/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/pt/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/pt/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/pt/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/pt/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/pt/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/pt/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/pt/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/pt/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/pt/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/pt/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/pt/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/display/checkmark.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/display/chip.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/display/icons.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/display/soon-pill.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/display/tag.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/input/checkbox.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/input/color-scheme.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/input/icon-picker.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/input/image-input.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/input/radio.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/input/select.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/input/text.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/input/toggle.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/navigation/breadcrumb.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/navigation/menu-item.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/navigation/navigation-bar.mdx create mode 100644 packages/twenty-docs/l/pt/twenty-ui/progress-bar.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/ai/capabilities/permissions-access-control.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/billing/capabilities/pricing-plans.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/capabilities/file-formats.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-migration/overview.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-model/capabilities/fields.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/permissions-access/overview.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/capabilities/workflow-branches.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/capabilities/workflow-versions.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/need-more-help/professional-services.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/pt/user-guide/workflows/overview.mdx create mode 100644 packages/twenty-docs/l/zh/developers/contribute/capabilities/backend-development/best-practices-server.mdx create mode 100644 packages/twenty-docs/l/zh/developers/contribute/capabilities/backend-development/custom-objects.mdx create mode 100644 packages/twenty-docs/l/zh/developers/contribute/capabilities/backend-development/feature-flags.mdx create mode 100644 packages/twenty-docs/l/zh/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/zh/developers/contribute/capabilities/backend-development/server-commands.mdx create mode 100644 packages/twenty-docs/l/zh/developers/contribute/capabilities/backend-development/zapier.mdx create mode 100644 packages/twenty-docs/l/zh/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/zh/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/zh/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/zh/developers/contribute/capabilities/frontend-development/work-with-figma.mdx create mode 100644 packages/twenty-docs/l/zh/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/zh/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/zh/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/zh/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/zh/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/zh/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/zh/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/zh/developers/self-host/capabilities/cloud-providers.mdx create mode 100644 packages/twenty-docs/l/zh/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/zh/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/zh/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/zh/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/zh/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/zh/twenty-ui/display/checkmark.mdx create mode 100644 packages/twenty-docs/l/zh/twenty-ui/display/chip.mdx create mode 100644 packages/twenty-docs/l/zh/twenty-ui/display/icons.mdx create mode 100644 packages/twenty-docs/l/zh/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/zh/twenty-ui/input/checkbox.mdx create mode 100644 packages/twenty-docs/l/zh/twenty-ui/input/color-scheme.mdx create mode 100644 packages/twenty-docs/l/zh/twenty-ui/input/image-input.mdx create mode 100644 packages/twenty-docs/l/zh/twenty-ui/input/toggle.mdx create mode 100644 packages/twenty-docs/l/zh/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/zh/twenty-ui/navigation/menu-item.mdx create mode 100644 packages/twenty-docs/l/zh/twenty-ui/progress-bar.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/ai/capabilities/permissions-access-control.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/billing/capabilities/pricing-plans.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/capabilities/file-formats.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-migration/overview.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-model/capabilities/fields.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-model/how-tos/customize-your-data-model.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/permissions-access/overview.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/views-pipelines/overview.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/capabilities/workflow-branches.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/capabilities/workflow-versions.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/need-more-help/professional-services.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/zh/user-guide/workflows/overview.mdx diff --git a/packages/twenty-docs/docs.json b/packages/twenty-docs/docs.json index a6d65aa339..9092b34278 100644 --- a/packages/twenty-docs/docs.json +++ b/packages/twenty-docs/docs.json @@ -471,7 +471,7 @@ "language": "fr", "tabs": [ { - "tab": "Guide de l'utilisateur", + "tab": "User Guide", "groups": [ { "group": "Discover Twenty", @@ -497,7 +497,7 @@ ] }, { - "group": "Modèle de données", + "group": "Data Model", "icon": "database", "pages": [ "l/fr/user-guide/data-model/overview", @@ -579,7 +579,7 @@ ] }, { - "group": "Flux de travail", + "group": "Workflows", "icon": "bolt", "pages": [ "l/fr/user-guide/workflows/overview", @@ -750,7 +750,7 @@ ] }, { - "group": "Paramètres", + "group": "Settings", "icon": "gear", "pages": [ "l/fr/user-guide/settings/overview", @@ -776,10 +776,10 @@ ] }, { - "tab": "Développeurs", + "tab": "Developers", "groups": [ { - "group": "Développeurs", + "group": "Developers", "pages": [ "l/fr/developers/introduction" ] @@ -827,7 +827,7 @@ "l/fr/developers/contribute/capabilities/local-setup", "l/fr/developers/contribute/capabilities/bug-and-requests", { - "group": "Développement du frontend", + "group": "Frontend Development", "pages": [ "l/fr/developers/contribute/capabilities/frontend-development/storybook", { @@ -835,7 +835,7 @@ "pages": [ "l/fr/twenty-ui/introduction", { - "group": "Afficher", + "group": "Display", "pages": [ "l/fr/twenty-ui/display/checkmark", "l/fr/twenty-ui/display/chip", @@ -846,7 +846,7 @@ ] }, { - "group": "Vos commentaires", + "group": "Feedback", "pages": [ "l/fr/twenty-ui/progress-bar" ] @@ -888,7 +888,7 @@ ] }, { - "group": "Développement du backend", + "group": "Backend Development", "pages": [ "l/fr/developers/contribute/capabilities/backend-development/server-commands", "l/fr/developers/contribute/capabilities/backend-development/feature-flags", @@ -2257,7 +2257,7 @@ ] }, { - "group": "Modelo de datos", + "group": "Data Model", "icon": "database", "pages": [ "l/es/user-guide/data-model/overview", @@ -2339,7 +2339,7 @@ ] }, { - "group": "Flujos de trabajo", + "group": "Workflows", "icon": "bolt", "pages": [ "l/es/user-guide/workflows/overview", @@ -2399,7 +2399,7 @@ ] }, { - "group": "IA", + "group": "AI", "icon": "robot", "pages": [ "l/es/user-guide/ai/overview", @@ -2450,7 +2450,7 @@ ] }, { - "group": "Tableros", + "group": "Dashboards", "icon": "chart-bar", "pages": [ "l/es/user-guide/dashboards/overview", @@ -2490,7 +2490,7 @@ ] }, { - "group": "Facturación", + "group": "Billing", "icon": "credit-card", "pages": [ "l/es/user-guide/billing/overview", @@ -2510,7 +2510,7 @@ ] }, { - "group": "Configuración", + "group": "Settings", "icon": "gear", "pages": [ "l/es/user-guide/settings/overview", @@ -2536,10 +2536,10 @@ ] }, { - "tab": "Desarrolladores", + "tab": "Developers", "groups": [ { - "group": "Desarrolladores", + "group": "Developers", "pages": [ "l/es/developers/introduction" ] @@ -2587,7 +2587,7 @@ "l/es/developers/contribute/capabilities/local-setup", "l/es/developers/contribute/capabilities/bug-and-requests", { - "group": "Desarrollo Frontend", + "group": "Frontend Development", "pages": [ "l/es/developers/contribute/capabilities/frontend-development/storybook", { @@ -2595,7 +2595,7 @@ "pages": [ "l/es/twenty-ui/introduction", { - "group": "Mostrar", + "group": "Display", "pages": [ "l/es/twenty-ui/display/checkmark", "l/es/twenty-ui/display/chip", @@ -2606,13 +2606,13 @@ ] }, { - "group": "Retroalimentación", + "group": "Feedback", "pages": [ "l/es/twenty-ui/progress-bar" ] }, { - "group": "Entrada", + "group": "Input", "pages": [ "l/es/twenty-ui/input/buttons", "l/es/twenty-ui/input/color-scheme", @@ -2627,7 +2627,7 @@ ] }, { - "group": "Navegación", + "group": "Navigation", "pages": [ "l/es/twenty-ui/navigation", "l/es/twenty-ui/navigation/breadcrumb", @@ -2648,7 +2648,7 @@ ] }, { - "group": "Desarrollo Backend", + "group": "Backend Development", "pages": [ "l/es/developers/contribute/capabilities/backend-development/server-commands", "l/es/developers/contribute/capabilities/backend-development/feature-flags", @@ -3111,7 +3111,7 @@ "language": "ja", "tabs": [ { - "tab": "ユーザーガイド", + "tab": "User Guide", "groups": [ { "group": "Discover Twenty", @@ -3137,7 +3137,7 @@ ] }, { - "group": "データモデル", + "group": "Data Model", "icon": "database", "pages": [ "l/ja/user-guide/data-model/overview", @@ -3219,7 +3219,7 @@ ] }, { - "group": "ワークフロー", + "group": "Workflows", "icon": "bolt", "pages": [ "l/ja/user-guide/workflows/overview", @@ -3390,7 +3390,7 @@ ] }, { - "group": "設定", + "group": "Settings", "icon": "gear", "pages": [ "l/ja/user-guide/settings/overview", @@ -3416,10 +3416,10 @@ ] }, { - "tab": "開発者", + "tab": "Developers", "groups": [ { - "group": "開発者", + "group": "Developers", "pages": [ "l/ja/developers/introduction" ] @@ -3467,7 +3467,7 @@ "l/ja/developers/contribute/capabilities/local-setup", "l/ja/developers/contribute/capabilities/bug-and-requests", { - "group": "フロントエンド開発", + "group": "Frontend Development", "pages": [ "l/ja/developers/contribute/capabilities/frontend-development/storybook", { @@ -3475,7 +3475,7 @@ "pages": [ "l/ja/twenty-ui/introduction", { - "group": "表示", + "group": "Display", "pages": [ "l/ja/twenty-ui/display/checkmark", "l/ja/twenty-ui/display/chip", @@ -3486,7 +3486,7 @@ ] }, { - "group": "フィードバック", + "group": "Feedback", "pages": [ "l/ja/twenty-ui/progress-bar" ] @@ -3528,7 +3528,7 @@ ] }, { - "group": "バックエンド開発", + "group": "Backend Development", "pages": [ "l/ja/developers/contribute/capabilities/backend-development/server-commands", "l/ja/developers/contribute/capabilities/backend-development/feature-flags", @@ -3577,7 +3577,7 @@ ] }, { - "group": "데이터 모델", + "group": "Data Model", "icon": "database", "pages": [ "l/ko/user-guide/data-model/overview", @@ -3830,7 +3830,7 @@ ] }, { - "group": "설정", + "group": "Settings", "icon": "gear", "pages": [ "l/ko/user-guide/settings/overview", @@ -3856,10 +3856,10 @@ ] }, { - "tab": "개발자", + "tab": "Developers", "groups": [ { - "group": "개발자", + "group": "Developers", "pages": [ "l/ko/developers/introduction" ] @@ -3907,7 +3907,7 @@ "l/ko/developers/contribute/capabilities/local-setup", "l/ko/developers/contribute/capabilities/bug-and-requests", { - "group": "프론트엔드 개발", + "group": "Frontend Development", "pages": [ "l/ko/developers/contribute/capabilities/frontend-development/storybook", { @@ -3915,7 +3915,7 @@ "pages": [ "l/ko/twenty-ui/introduction", { - "group": "표시", + "group": "Display", "pages": [ "l/ko/twenty-ui/display/checkmark", "l/ko/twenty-ui/display/chip", @@ -3926,13 +3926,13 @@ ] }, { - "group": "피드백", + "group": "Feedback", "pages": [ "l/ko/twenty-ui/progress-bar" ] }, { - "group": "입력", + "group": "Input", "pages": [ "l/ko/twenty-ui/input/buttons", "l/ko/twenty-ui/input/color-scheme", @@ -3947,7 +3947,7 @@ ] }, { - "group": "네비게이션", + "group": "Navigation", "pages": [ "l/ko/twenty-ui/navigation", "l/ko/twenty-ui/navigation/breadcrumb", @@ -3968,7 +3968,7 @@ ] }, { - "group": "백엔드 개발", + "group": "Backend Development", "pages": [ "l/ko/developers/contribute/capabilities/backend-development/server-commands", "l/ko/developers/contribute/capabilities/backend-development/feature-flags", @@ -3991,7 +3991,7 @@ "language": "pt", "tabs": [ { - "tab": "Manual do Usuário", + "tab": "User Guide", "groups": [ { "group": "Discover Twenty", @@ -4017,7 +4017,7 @@ ] }, { - "group": "Modelo de Dados", + "group": "Data Model", "icon": "database", "pages": [ "l/pt/user-guide/data-model/overview", @@ -4270,7 +4270,7 @@ ] }, { - "group": "Configurações", + "group": "Settings", "icon": "gear", "pages": [ "l/pt/user-guide/settings/overview", @@ -4296,10 +4296,10 @@ ] }, { - "tab": "Desenvolvedores", + "tab": "Developers", "groups": [ { - "group": "Desenvolvedores", + "group": "Developers", "pages": [ "l/pt/developers/introduction" ] @@ -4347,7 +4347,7 @@ "l/pt/developers/contribute/capabilities/local-setup", "l/pt/developers/contribute/capabilities/bug-and-requests", { - "group": "Desenvolvimento Frontend", + "group": "Frontend Development", "pages": [ "l/pt/developers/contribute/capabilities/frontend-development/storybook", { @@ -4355,7 +4355,7 @@ "pages": [ "l/pt/twenty-ui/introduction", { - "group": "Exibição", + "group": "Display", "pages": [ "l/pt/twenty-ui/display/checkmark", "l/pt/twenty-ui/display/chip", @@ -4408,7 +4408,7 @@ ] }, { - "group": "Desenvolvimento de backend", + "group": "Backend Development", "pages": [ "l/pt/developers/contribute/capabilities/backend-development/server-commands", "l/pt/developers/contribute/capabilities/backend-development/feature-flags", @@ -5777,7 +5777,7 @@ ] }, { - "group": "數據模型", + "group": "Data Model", "icon": "database", "pages": [ "l/zh/user-guide/data-model/overview", @@ -5859,7 +5859,7 @@ ] }, { - "group": "Workflow", + "group": "Workflows", "icon": "bolt", "pages": [ "l/zh/user-guide/workflows/overview", @@ -6030,7 +6030,7 @@ ] }, { - "group": "設置", + "group": "Settings", "icon": "gear", "pages": [ "l/zh/user-guide/settings/overview", @@ -6056,10 +6056,10 @@ ] }, { - "tab": "開發人員", + "tab": "Developers", "groups": [ { - "group": "開發人員", + "group": "Developers", "pages": [ "l/zh/developers/introduction" ] @@ -6107,7 +6107,7 @@ "l/zh/developers/contribute/capabilities/local-setup", "l/zh/developers/contribute/capabilities/bug-and-requests", { - "group": "前端開發", + "group": "Frontend Development", "pages": [ "l/zh/developers/contribute/capabilities/frontend-development/storybook", { @@ -6115,7 +6115,7 @@ "pages": [ "l/zh/twenty-ui/introduction", { - "group": "顯示", + "group": "Display", "pages": [ "l/zh/twenty-ui/display/checkmark", "l/zh/twenty-ui/display/chip", @@ -6126,13 +6126,13 @@ ] }, { - "group": "反饋", + "group": "Feedback", "pages": [ "l/zh/twenty-ui/progress-bar" ] }, { - "group": "輸入", + "group": "Input", "pages": [ "l/zh/twenty-ui/input/buttons", "l/zh/twenty-ui/input/color-scheme", @@ -6147,7 +6147,7 @@ ] }, { - "group": "導航", + "group": "Navigation", "pages": [ "l/zh/twenty-ui/navigation", "l/zh/twenty-ui/navigation/breadcrumb", @@ -6168,7 +6168,7 @@ ] }, { - "group": "後端開發", + "group": "Backend Development", "pages": [ "l/zh/developers/contribute/capabilities/backend-development/server-commands", "l/zh/developers/contribute/capabilities/backend-development/feature-flags", diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/queue.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/queue.mdx index 05f06fef0d..3173c1d9da 100644 --- a/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/queue.mdx +++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/queue.mdx @@ -21,12 +21,12 @@ class Resolver { constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {} async onSomeAction() { - //منطق العمل + //business logic await this.queue.add(someData); } } -//عامل غير متزامن +//async worker class CustomWorker { constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) { this.initWorker(); @@ -34,7 +34,7 @@ class CustomWorker { async initWorker() { await this.queue.work(async ({ id, data }) => { - //منطق العامل + //worker logic }); } } diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/best-practices-front.mdx index 36b08657ef..624d78159e 100644 --- a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/best-practices-front.mdx +++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/best-practices-front.mdx @@ -40,7 +40,7 @@ export const MyComponent = () => { تجنب استخدام `useRef` لتخزين الحالة. -إذا كنت ترغب في تخزين الحالة، يجب أن تستخدم `useState` أو `useRecoilState`. +If you want to store state, you should use `useState` or `useRecoilState`. انظر [كيفية إدارة إعادة العرض](#managing-re-renders) إذا شعرت أنك بحاجة إلى `useRef` لمنع بعض إعادة العرض من الحدوث. @@ -56,23 +56,23 @@ export const MyComponent = () => { تجنب إعادة العرض في الميزات الجديدة أصبح سهلاً الآن عن طريق إزالتها على المستوى الجذري. -مكون الجانب `PageChangeEffect` يحتوي فقط على `useEffect` واحد يقوم بعقد جميع المنطق لتنفيذه عند تغيير الصفحة. +The `PageChangeEffect` sidecar component contains just one `useEffect` that holds all the logic to execute on a page change. بهذه الطريقة، تعرف أن هناك مكان واحد فقط يمكنه تحفيز إعادة العرض. -### فكر جيدًا قبل إضافة `useEffect` في قاعدة التعليمات البرمجية الخاصة بك +### Always think twice before adding `useEffect` in your codebase -غالبًا ما تكون إعادة العرض ناجمة عن `useEffect` غير ضروري. +Re-renders are often caused by unnecessary `useEffect`. -يجب أن تفكر في ما إذا كنت بحاجة إلى `useEffect`، أو ما إذا كان بإمكانك نقل المنطق إلى وظيفة معالج الحدث. +You should think whether you need `useEffect`, or if you can move the logic in a event handler function. -ستجد أنه من السهل عمومًا نقل المنطق إلى وظيفة `handleClick` أو `handleChange`. +You'll find it generally easy to move the logic in a `handleClick` or `handleChange` function. يمكنك أيضًا العثور عليها في المكتبات مثل Apollo: `onCompleted`، `onError`، إلخ. -### استخدم مكونًا متماثلاً لاستخراج `useEffect` أو منطق استدعاء البيانات +### Use a sibling component to extract `useEffect` or data fetching logic -إذا شعرت أنك بحاجة إلى إضافة `useEffect` في مكون الجذر الخاص بك، يجب أن تفكر في استخراجه في مكون الجانب. +If you feel like you need to add a `useEffect` in your root component, you should consider extracting it in a sidecar component. يمكنك تطبيق نفس الشيء على منطق جلب البيانات، مع الخُطافات Apollo. diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/frontend-commands.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/frontend-commands.mdx index 5b88f6bae7..43c3e73743 100644 --- a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/frontend-commands.mdx +++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/frontend-commands.mdx @@ -69,7 +69,7 @@ title: أوامر الواجهة الأمامية "[React Router](https://reactrouter.com/) يتعامل مع التوجيه." -"لتجنب [إعادة العرض](/l/ar/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) غير الضرورية، يوجد منطق التوجيه في `useEffect` في `PageChangeEffect`." +To avoid unnecessary [re-renders](/l/ar/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) all the routing logic is in a `useEffect` in `PageChangeEffect`. ### "إدارة الحالة" diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/hotkeys.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/hotkeys.mdx index 3a44fe9491..e95a59ba23 100644 --- a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/hotkeys.mdx +++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/hotkeys.mdx @@ -45,29 +45,29 @@ const PageListeningEnter = () => { goBackToPreviousHotkeyScope, } = usePreviousHotkeyScope(); - // 1. تعيين نطاق المفتاح في استخدام التأثير + // 1. Set the hotkey scope in a useEffect useEffect(() => { setHotkeyScopeAndMemorizePreviousScope( ExampleHotkeyScopes.ExampleEnterPage, ); - // العودة إلى نطاق المفتاح السابق عند إلغاء تركيب المكون + // Revert to the previous hotkey scope when the component is unmounted return () => { goBackToPreviousHotkeyScope(); }; }, [goBackToPreviousHotkeyScope, setHotkeyScopeAndMemorizePreviousScope]); - // 2. استخدام خطاف useScopedHotkeys + // 2. Use the useScopedHotkeys hook useScopedHotkeys( Key.Enter, () => { - // بعض المنطق المنفذ في هذه الصفحة عند ضغط المستخدم على Enter + // Some logic executed on this page when the user presses Enter // ... }, ExampleHotkeyScopes.ExampleEnterPage, ); - return
صفحتي التي تستمع لمفتاح Enter
; + return
My page that listens for Enter
; }; ``` @@ -87,7 +87,7 @@ const ExamplePageWithModal = () => { } = usePreviousHotkeyScope(); const handleOpenModalClick = () => { - // 1. تعيين نطاق المفتاح عند فتح المستخدم المودال + // 1. Set the hotkey scope when user opens the modal setShowModal(true); setHotkeyScopeAndMemorizePreviousScope( ExampleHotkeyScopes.ExampleModal, @@ -95,14 +95,14 @@ const ExamplePageWithModal = () => { }; const handleModalClose = () => { - // 1. العودة إلى نطاق المفتاح السابق عند إغلاق المودال + // 1. Revert to the previous hotkey scope when the modal is closed setShowModal(false); goBackToPreviousHotkeyScope(); }; return
-

صفحتي التي تحتوي على مودال

- +

My page with a modal

+ {showModal && }
; }; @@ -112,9 +112,9 @@ const ExamplePageWithModal = () => { ```tsx const MyDropdownComponent = ({ onClose }: { onClose: () => void }) => { - // 2. استخدام خطاف useScopedHotkeys للاستماع لمفتاح Escape. - // لاحظ أن مفتاح Escape هو مفتاح اختصار شائع يمكن استخدامه من قبل مكونات أخرى كثيرة. - // لذلك من المهم استخدام نطاق مفتاح لتجنب التعارضات. + // 2. Use the useScopedHotkeys hook to listen for Escape. + // Note that escape is a common hotkey that could be used by many other components + // So it's important to use a hotkey scope to avoid conflicts useScopedHotkeys( Key.Escape, () => { @@ -123,13 +123,13 @@ const MyDropdownComponent = ({ onClose }: { onClose: () => void }) => { ExampleHotkeyScopes.ExampleModal, ); - return
مكون المودال الخاص بي
; + return
My modal component
; }; ``` -من المهم استخدام هذا النمط عندما لست متأكدًا من أن استخدام useEffect مع التركيب/إلغاء التركيب يكفي لتجنب التعارضات. +It's important to use this pattern when you're not sure that just using a useEffect with mount/unmount will be enough to avoid conflicts. -تلك التعارضات يمكن أن تكون صعبة التصحيح، وربما تحدث بشكل متكرر مع useEffects. +Those conflicts can be hard to debug, and it might happen more often than not with useEffects. ## ما هو نطاق المفتاح؟ diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/style-guide.mdx index 99b54139ad..c0c406a51e 100644 --- a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/style-guide.mdx +++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/style-guide.mdx @@ -21,14 +21,14 @@ The goal here is to have a consistent codebase, which is easy to read and easy t لا تستخدم `import` الافتراضي مع `const`، لأنه أصعب من حيث القراءة والدمج باستخدام إكمال التعليمات البرمجية. ```tsx -// ❌ سيئ، أصعب في القراءة، أصعب في الدمج باستخدام إكمال التعليمات البرمجية +// ❌ Bad, harder to read, harder to import with code completion const MyComponent = () => { return
Hello World
; }; export default MyComponent; -// ✅ جيد، سهل القراءة، سهل الدمج باستخدام إكمال التعليمات البرمجية +// ✅ Good, easy to read, easy to import with code completion export function MyComponent() { return
Hello World
; }; @@ -41,10 +41,10 @@ export function MyComponent() { استخدام تفكيك الخصائص. ```tsx -// ❌ سيئ، لا يوجد نوع +// ❌ Bad, no type export const MyComponent = (props) =>
Hello {props.name}
; -// ✅ جيد، النوع +// ✅ Good, type type MyComponentProps = { name: string; }; @@ -55,11 +55,11 @@ export const MyComponent = ({ name }: MyComponentProps) =>
Hello {name} ( تجنب استخدام انتشار متغير فردي للخصائص في عناصر JSX، مثل `{...props}`. غالبًا ما تؤدي هذه الممارسة إلى شكل تعليمي أقل قابلية للقراءة وأصعب في الصيانة لأنه من غير الواضح أي الخصائص يتلقاها المكون. ```tsx -/* ❌ - سيء، ينثر متغير فردي للخصائص في المكون الأساسي +/* ❌ - Bad, spreads a single variable prop into the underlying component */ const MyComponent = (props: OwnProps) => { return ; @@ -137,12 +137,12 @@ onClick?.(); استخدم دائمًا `type` بدلاً من `interface`، لأنهما تقريبًا دائمًا متداخلين، و `type` أكثر مرونة. ```tsx -// ❌ سيء +// ❌ Bad interface MyInterface { name: string; } -// ✅ جيد +// ✅ Good type MyType = { name: string; }; @@ -155,7 +155,7 @@ type MyType = { يمكنك معرفة السبب في أن TypeScript توصي بتجنب الأعداد [هنا](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums). ```tsx -// ❌ سيء، يستخدم عدد مخصص +// ❌ Bad, utilizes an enum enum Color { Red = "red", Green = "green", @@ -263,13 +263,13 @@ const StyledButton = styled.button` تجنب استيراد الأنواع. للحد من هذه الممارسة، تتحقق قاعدة ESLint وتبلغ عن أي استيرادات من هذا النوع. يساعد هذا على الحفاظ على الاتساق وقابلية القراءة في كود TypeScript. ```tsx -// ❌ سيء +// ❌ Bad import { type Meta, type StoryObj } from '@storybook/react'; -// ❌ سيء +// ❌ Bad import type { Meta, StoryObj } from '@storybook/react'; -// ✅ جيد +// ✅ Good import { Meta, StoryObj } from '@storybook/react'; ``` 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 67e24b7e08..39c2398a67 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 @@ -12,10 +12,10 @@ image: /images/user-guide/objects/objects.png ```jsx - 27332A4A31272F { 2A2F2E4A44 274435483129 } 4546 "@/ui/input/components/ImageInput"; + import { ImageInput } from "@/ui/input/components/ImageInput"; - 27352F31 45434852464A 27442E2735 = () => { - 39482F 2A2F2E44 274435483129/> + export const MyComponent = () => { + return ; }; ``` 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 33f7c87e2f..34c6b00418 100644 --- a/packages/twenty-docs/l/ar/twenty-ui/navigation/breadcrumb.mdx +++ b/packages/twenty-docs/l/ar/twenty-ui/navigation/breadcrumb.mdx @@ -17,10 +17,10 @@ Renders a breadcrumb navigation bar. export const MyComponent = () => { const breadcrumbLinks = [ - { children: "الصفحة الرئيسية", href: "/" }, - { children: "الفئة", href: "/category" }, - { children: "الفئة الفرعية", href: "/category/subcategory" }, - { children: "الصفحة الحالية" }, + { children: "Home", href: "/" }, + { children: "Category", href: "/category" }, + { children: "Subcategory", href: "/category/subcategory" }, + { children: "Current Page" }, ]; return ( diff --git a/packages/twenty-docs/l/ar/twenty-ui/navigation/menu-item.mdx b/packages/twenty-docs/l/ar/twenty-ui/navigation/menu-item.mdx index 8c3c4a1b67..f835efcfdb 100644 --- a/packages/twenty-docs/l/ar/twenty-ui/navigation/menu-item.mdx +++ b/packages/twenty-docs/l/ar/twenty-ui/navigation/menu-item.mdx @@ -71,13 +71,13 @@ image: /images/user-guide/kanban-views/kanban.png export const MyComponent = () => { const handleCommandClick = () => { - console.log("تم النقر على الأمر!"); + console.log("Command clicked!"); }; return ( { const handleMenuItemClick = (event) => { - console.log("تم النقر على عنصر القائمة!", event); + console.log("Menu item clicked!", event); }; return ( @@ -125,7 +125,7 @@ image: /images/user-guide/kanban-views/kanban.png iconButtons={[{ Icon: IconAlertCircle, onClick: handleButtonClick }]} isTooltipOpen={false} onClick={handleMenuItemClick} - text="عنصر القائمة القابل للسحب" + text="Menu item draggable" isDragDisabled={false} className /> @@ -163,7 +163,7 @@ image: /images/user-guide/kanban-views/kanban.png return ( @@ -198,8 +198,8 @@ image: /images/user-guide/kanban-views/kanban.png return ( } - text="الخيار الأول" + avatar={Avatar} + text="First Option" selected={false} className /> @@ -231,13 +231,13 @@ A menu item featuring an optional left icon, textual content, and a right-chevro export const MyComponent = () => { const handleNavigation = () => { - console.log("التنقل إلى صفحة أخرى"); + console.log("Navigate to another page"); }; return ( @@ -268,13 +268,13 @@ A menu item featuring an optional left icon, textual content, and a right-chevro export const MyComponent = () => { const handleSelection = () => { - console.log("تم اختيار عنصر القائمة"); + console.log("Menu item selected"); }; return ( ```jsx - استيراد {MenuItemSelectColor} من "twenty-ui/display"; + import { MenuItemSelectColor } from "twenty-ui/display"; - تصدير المكون الخاص بي = () => { + export const MyComponent = () => { const handleSelection = () => { - console.log("تم اختيار عنصر القائمة"); + console.log("Menu item selected"); }; return ( @@ -396,18 +396,18 @@ A selectable menu item with a color sample for scenarios where you want users to ```jsx - استيراد {IconBell} من '@tabler/icons-react'; + import { IconBell } from '@tabler/icons-react'; - استيراد {MenuItemToggle} من 'twenty-ui/display'; + import { MenuItemToggle } from 'twenty-ui/display'; - تصدير المكون الخاص بي = () => { + export const MyComponent = () => { return ( ); diff --git a/packages/twenty-docs/l/ar/twenty-ui/navigation/navigation-bar.mdx b/packages/twenty-docs/l/ar/twenty-ui/navigation/navigation-bar.mdx index 6b232d5662..87115368e4 100644 --- a/packages/twenty-docs/l/ar/twenty-ui/navigation/navigation-bar.mdx +++ b/packages/twenty-docs/l/ar/twenty-ui/navigation/navigation-bar.mdx @@ -12,30 +12,30 @@ image: /images/user-guide/table-views/table.png ```jsx - استيراد { IconHome, IconUser, IconSettings } من '@tabler/icons-react'; - استيراد { NavigationBar } من "@/ui/navigation/navigation-bar/components/NavigationBar"; + import { IconHome, IconUser, IconSettings } from '@tabler/icons-react'; + import { NavigationBar } from "@/ui/navigation/navigation-bar/components/NavigationBar"; export const MyComponent = () => { const navigationItems = [ { - name: "الصفحة الرئيسية", + name: "Home", Icon: IconHome, - onClick: () => console.log("تم النقر على الصفحة الرئيسية"), + onClick: () => console.log("Home clicked"), }, { - name: "الملف الشخصي", + name: "Profile", Icon: IconUser, - onClick: () => console.log("تم النقر على الملف الشخصي"), + onClick: () => console.log("Profile clicked"), }, { - name: "الإعدادات", + name: "Settings", Icon: IconSettings, - onClick: () => console.log("تم النقر على الإعدادات"), + onClick: () => console.log("Settings clicked"), }, ]; - return ; + return ; }; ``` 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 b639a94136..ddfe38c13a 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 @@ -17,9 +17,9 @@ image: /images/user-guide/api/api.png export const MyComponent = () => { return ( - الخطوة 1 - الخطوة 2 - الخطوة 3 + Step 1 + Step 2 + Step 3 ); }; diff --git a/packages/twenty-docs/l/ar/user-guide/billing/overview.mdx b/packages/twenty-docs/l/ar/user-guide/billing/overview.mdx index 9d3da7812d..1527aa0735 100644 --- a/packages/twenty-docs/l/ar/user-guide/billing/overview.mdx +++ b/packages/twenty-docs/l/ar/user-guide/billing/overview.mdx @@ -1,6 +1,6 @@ --- title: الفوترة -description: Understand Twenty pricing and manage your subscription. +description: تعرّف على تسعير Twenty وأدِر اشتراكك. image: /images/user-guide/setup/pricing.png --- @@ -8,38 +8,38 @@ image: /images/user-guide/setup/pricing.png الفوترة -Twenty offers flexible pricing plans to fit your team's needs. Manage your subscription, track workflow credits, and access invoices all from **Settings → Billing**. +تقدّم Twenty خطط تسعير مرنة لتلبية احتياجات فريقك. أدِر اشتراكك، وتتبع أرصدة سير العمل، واطّلع على الفواتير — وكل ذلك من **Settings → Billing**. -## What's in this section +## ما الذي يتضمنه هذا القسم - - Learn about Twenty's pricing plans and what's included. + + تعرّف على خطط تسعير Twenty وما تتضمنه. - - Frequently asked questions about pricing and billing. + + أسئلة شائعة حول التسعير والفوترة. -## At a glance +## نظرة سريعة -| الخطة | Key Features | -| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **Free (Self-Hosted)** | All Pro features, community support | -| **Pro (Cloud)** | Everything apart from the Premium features (SSO and row-level permissions), standard support | -| **Organization (Cloud)** | All from Pro + the Premium features (SSO and row-level permissions), priority support | -| **Organization (Self-Hosted)** | All from Pro + the Premium features (SSO, row-level permissions), Twenty team support, not required to publish your custom code as open-source before distributing | +| الخطة | الميزات الرئيسية | +| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| **مجانًا (مستضاف ذاتيًا)** | جميع ميزات Pro، ودعم المجتمع | +| **Pro (سحابي)** | كل شيء باستثناء ميزات Premium (SSO وأذونات على مستوى الصف)، دعم قياسي | +| **المؤسسة (سحابي)** | كل ما في Pro + ميزات Premium (SSO وأذونات على مستوى الصف)، دعم ذو أولوية | +| **المؤسسة (مستضاف ذاتيًا)** | كل ما في Pro + ميزات Premium (SSO وأذونات على مستوى الصف)، دعم فريق Twenty، ولا يُشترط نشر شيفرتك المخصصة كمصدر مفتوح قبل التوزيع | -## Quick answers +## إجابات سريعة -**Where do I manage billing?** -Go to **Settings → Billing** to view your plan, update payment methods, and access invoices. +**أين أدير الفوترة؟** +انتقل إلى **Settings → Billing** لعرض خطتك، وتحديث طرق الدفع، والوصول إلى الفواتير. -**Can I use Twenty for free?** -Yes! Self-host Twenty and get all Pro features at no cost. +**هل يمكنني استخدام Twenty مجانًا؟** +نعم! استضف Twenty ذاتيًا واحصل على جميع ميزات Pro دون تكلفة. -**How do I upgrade?** -Go to **Settings → Billing** and click **Switch to Organization** or **Switch to Yearly**. +**كيف أقوم بالترقية؟** +انتقل إلى **Settings → Billing** ثم انقر **Switch to Organization** أو **Switch to Yearly**. -For more questions, see the [Billing FAQ](/l/ar/user-guide/billing/how-tos/billing-faq). +لمزيد من الأسئلة، راجع [الأسئلة الشائعة حول الفوترة](/l/ar/user-guide/billing/how-tos/billing-faq). diff --git a/packages/twenty-docs/l/ar/user-guide/calendar-emails/capabilities/calendar.mdx b/packages/twenty-docs/l/ar/user-guide/calendar-emails/capabilities/calendar.mdx index 620926b3aa..0591c83765 100644 --- a/packages/twenty-docs/l/ar/user-guide/calendar-emails/capabilities/calendar.mdx +++ b/packages/twenty-docs/l/ar/user-guide/calendar-emails/capabilities/calendar.mdx @@ -1,19 +1,19 @@ --- title: تقويم -description: Understanding calendar integration features in Twenty. +description: فهم ميزات تكامل التقويم في Twenty. --- -**Note**: To connect your calendar and configure sync settings, visit [Email & Calendar Setup](/l/ar/user-guide/calendar-emails/overview). +**ملاحظة**: لربط تقويمك وتكوين إعدادات المزامنة، قم بزيارة [إعدادات البريد الإلكتروني والتقويم](/l/ar/user-guide/calendar-emails/overview). -## How Calendar Integration Works +## كيف يعمل تكامل التقويم -Twenty automatically syncs your calendar events and links them to the relevant CRM records, giving you a complete view of your meeting history with contacts and companies. +يقوم Twenty بمزامنة أحداث تقويمك تلقائيًا وربطها بسجلات CRM ذات الصلة، ما يمنحك عرضًا كاملاً لسجل اجتماعاتك مع جهات الاتصال والشركات. ## علامة تبويب التقويم -Next to the Emails tab on records, you'll find a `Calendar` tab that contains the history of meetings scheduled with the record. +بجانب علامة تبويب البريد الإلكتروني في السجلات، ستجد علامة تبويب `التقويم` التي تحتوي على سجلّ الاجتماعات المجدولة المرتبطة بذلك السجل. -### Available For +### متاح لـ * **الأشخاص**: عرض جميع الاجتماعات المجدولة مع جهة اتصال محددة * **الشركات**: راجع جميع الاجتماعات المتعلقة بشركة وموظفيها @@ -26,18 +26,18 @@ Next to the Emails tab on records, you'll find a `Calendar` tab that contains th 3. **تصفح تاريخ الاجتماعات**: عرض جميع الاجتماعات المجدولة وتفاصيلها 4. **الوصول إلى سياق الاجتماع**: شاهد المشاركين في الاجتماع، الأوقات، والمعلومات ذات الصلة -## Visibility Settings +## إعدادات الرؤية -Calendar data follows the same visibility settings as emails, ensuring consistent privacy controls across both communication channels. +تتبع بيانات التقويم نفس إعدادات الرؤية الخاصة بالبريد الإلكتروني، مما يضمن ضوابط خصوصية متسقة عبر كلتا قناتي التواصل. -## What Gets Synced +## ما الذي يتم مزامنته -* **External Meetings**: All meetings with contacts outside your organization -* **Automatic Linking**: Meetings connect to existing People and Company records based on attendee email addresses -* **Meeting Details**: Subject, time, duration, and participants -* **Updates**: New calendar events sync automatically +* **الاجتماعات الخارجية**: جميع الاجتماعات مع جهات الاتصال خارج مؤسستك +* **الربط التلقائي**: ترتبط الاجتماعات بسجلات الأشخاص والشركات الحالية بناءً على عناوين البريد الإلكتروني للحضور +* **تفاصيل الاجتماع**: الموضوع، الوقت، المدة، والمشاركون +* **التحديثات**: تتم مزامنة أحداث التقويم الجديدة تلقائيًا ## ما لا يتم مزامنته -* **Internal Meetings**: Meetings with only colleagues (same domain) remain private -* **Private Events**: Events marked as private in your calendar +* **الاجتماعات الداخلية**: تبقى الاجتماعات مع الزملاء فقط (نفس النطاق) خاصة +* **الأحداث الخاصة**: الأحداث المعلَّمة كخاصة في تقويمك diff --git a/packages/twenty-docs/l/ar/user-guide/dashboards/how-tos/dashboards-faq.mdx b/packages/twenty-docs/l/ar/user-guide/dashboards/how-tos/dashboards-faq.mdx index ed65d38510..4f5f85fb4b 100644 --- a/packages/twenty-docs/l/ar/user-guide/dashboards/how-tos/dashboards-faq.mdx +++ b/packages/twenty-docs/l/ar/user-guide/dashboards/how-tos/dashboards-faq.mdx @@ -1,59 +1,59 @@ --- title: Dashboards FAQ -description: Frequently asked questions about dashboards in Twenty. +description: أسئلة شائعة حول لوحات القيادة في Twenty. --- - - No, dashboards are currently visible to everyone with access to your Twenty workspace. Private dashboards are not yet available. + + لا، لوحات القيادة مرئية حاليًا لجميع من لديهم صلاحية الوصول إلى مساحة العمل الخاصة بك على Twenty. لوحات القيادة الخاصة غير متاحة بعد. - - Dashboards currently display data based on the viewer's timezone. If you're in different regions (e.g., APAC vs. US), you may see slightly different numbers for the same dashboard. We're working on adding a timezone setting per dashboard to ensure consistent data across teams. + + تعرض لوحات القيادة حاليًا البيانات بناءً على المنطقة الزمنية للعارض. إذا كنتم في مناطق مختلفة (على سبيل المثال، APAC مقابل US)، فقد ترون أرقامًا مختلفة قليلًا للوحة القيادة نفسها. نعمل على إضافة إعداد للمنطقة الزمنية لكل لوحة قيادة لضمان اتساق البيانات عبر الفرق. - - Exporting dashboards is not available at the moment. This feature is on our roadmap. + + تصدير لوحات القيادة غير متاح في الوقت الحالي. هذه الميزة مدرَجة على خارطة الطريق لدينا. - - No, sharing dashboards with users outside your Twenty workspace (non-Twenty users) is not currently supported. + + لا، مشاركة لوحات القيادة مع المستخدمين خارج مساحة العمل الخاصة بك على Twenty (غير مستخدمي Twenty) غير مدعومة حاليًا. - - Open the dashboard you want to favorite, then click the star icon. Favorites are personal—they won't affect other users. + + افتح لوحة القيادة التي تريد إضافتها إلى المفضلة، ثم انقر على أيقونة النجمة. المفضلة شخصية — ولن تؤثر في المستخدمين الآخرين. - - * **Tabs** organize your dashboard into sections (like pages within the dashboard) - * **Widgets** are the individual visualizations (charts, numbers, iFrames) within each tab + + * **علامات التبويب** تنظّم لوحة القيادة إلى أقسام (مثل صفحات داخل لوحة القيادة) + * **عناصر واجهة المستخدم** هي التصورات الفردية (مخططات، أرقام، وإطارات iFrame) داخل كل علامة تبويب - Structure: Dashboard → Tabs → Widgets + البنية: لوحة القيادة → علامات التبويب → عناصر واجهة المستخدم - - Bar charts have display limits: 100 bars for horizontal charts, 50 for vertical. If your data exceeds this, add filters to narrow down the results or change the grouping (e.g., group by week instead of day). + + لمخططات الأعمدة حدود عرض: 100 عمود للمخططات الأفقية، و50 للعمودية. إذا تجاوزت بياناتك ذلك، فأضِف عوامل تصفية لحصر النتائج أو غيّر أسلوب التجميع (على سبيل المثال، التجميع حسب الأسبوع بدلًا من اليوم). - - Dashboard-level filters are not available yet, but this feature is on our roadmap. Currently, you need to apply filters to each widget individually. + + عوامل التصفية على مستوى لوحة القيادة غير متاحة بعد، لكن هذه الميزة مدرَجة على خارطة الطريق لدينا. حاليًا، تحتاج إلى تطبيق عوامل التصفية على كل عنصر واجهة مستخدم على حدة. - - ليس بعد. Gauge charts and tables are on our roadmap and will be added in a future release. + + ليس بعد. مخططات العدّاد والجداول مدرَجة على خارطة الطريق لدينا وسيتم إضافتها في إصدار لاحق. - - 1. Make sure you're in view mode (not editing) - 2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows) - 3. Select **Duplicate dashboard** + + 1. تأكد من أنك في وضع العرض (وليس التحرير) + 2. افتح شريط الأوامر باستخدام **Cmd + K** (أو **Ctrl + K** على Windows) + 3. اختر **تكرار لوحة القيادة** - - Widgets update automatically as your CRM data changes: + + تتحدّث عناصر واجهة المستخدم تلقائيًا مع تغيّر بيانات نظام إدارة علاقات العملاء (CRM): - * Real-time updates for most metrics - * Use the refresh button for a manual update if needed - * Historical data is preserved for trend analysis + * تحديثات فورية لمعظم المقاييس + * استخدم زر التحديث لإجراء تحديث يدوي عند الحاجة + * تُحفَظ البيانات التاريخية لتحليل الاتجاهات diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/field-mapping.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/field-mapping.mdx index 903851b1a2..0b30414858 100644 --- a/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/field-mapping.mdx +++ b/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/field-mapping.mdx @@ -1,176 +1,176 @@ --- -title: Field Mapping -description: How field mapping works during data import. +title: تعيين الحقول +description: كيف يعمل تعيين الحقول أثناء استيراد البيانات. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## How Field Mapping Works +## كيف يعمل تعيين الحقول -When you upload a file, Twenty analyzes your columns and attempts to match them to existing fields. +عند تحميل ملف، يقوم Twenty بتحليل أعمدتك ومحاولة مطابقتها مع الحقول الموجودة. -### Automatic Mapping +### التعيين التلقائي -Twenty tries to match columns based on: +يحاول Twenty مطابقة الأعمدة استنادًا إلى: -* Column header names (exact or similar matches) -* Data type detection (dates, numbers, emails) -* Common field patterns +* أسماء رؤوس الأعمدة (مطابقات دقيقة أو متشابهة) +* اكتشاف نوع البيانات (تواريخ، أرقام، عناوين بريد إلكتروني) +* أنماط الحقول الشائعة -**Quick tip:** Export a few rows from the object you want to import. The exported file will have the exact column names Twenty expects, making automatic mapping seamless during import. +**نصيحة سريعة:** صدِّر بضعة صفوف من الكائن الذي تريد استيراده. سيحتوي الملف المصدَّر على أسماء الأعمدة الدقيقة التي يتوقعها Twenty، مما يجعل التعيين التلقائي سلسًا أثناء الاستيراد. -### Manual Mapping Options +### خيارات التعيين اليدوي -For each column, you can: +لكل عمود، يمكنك: -* **Map to a field**: Select the matching Twenty field from a dropdown -* **Do not map**: Skip the column entirely (data won't be imported) +* **تعيين إلى حقل**: اختر الحقل المطابق في Twenty من قائمة منسدلة +* **عدم التعيين**: تخطَّ العمود بالكامل (لن يتم استيراد البيانات) -**Fields must exist before import.** The import creates records, not fields. Create custom fields under **Settings → Data Model** before importing. +**يجب أن تكون الحقول موجودة قبل الاستيراد.** الاستيراد يُنشئ السجلات، لا الحقول. أنشئ الحقول المخصصة ضمن **الإعدادات → نموذج البيانات** قبل الاستيراد. -## Field Type Compatibility +## توافق أنواع الحقول -All field types available in the Data Model are supported for import. +جميع أنواع الحقول المتاحة في نموذج البيانات مدعومة للاستيراد. -You can also import `id` values to either assign a specific ID to new records or update existing ones. +يمكنك أيضًا استيراد قيم `id` إما لتعيين معرّف محدد للسجلات الجديدة أو لتحديث السجلات القائمة. -## Data Format Requirements +## متطلبات تنسيق البيانات -**Some fields have special syntax.** We recommend downloading the sample file before preparing your import to see the expected syntax for each field type. +**لبعض الحقول صياغة خاصة.** نوصي بتنزيل الملف النموذجي قبل إعداد عملية الاستيراد للاطلاع على الصياغة المتوقعة لكل نوع حقل. -### Address Fields +### حقول العنوان -Address is a nested field with multiple columns. Some can be left empty. +العنوان حقل متداخل يضم عدة أعمدة. يمكن ترك بعضِها فارغًا. -* **Address / Address 1**: Street address line 1 -* **Address / Address 2**: Street address line 2 -* **Address / City**: City name -* **Address / State**: State or province -* **Address / Country**: Country name -* **Address / Post Code**: Postal/ZIP code +* **Address / Address 1**: سطر عنوان الشارع 1 +* **Address / Address 2**: سطر عنوان الشارع 2 +* **Address / City**: اسم المدينة +* **Address / State**: الولاية أو المقاطعة +* **Address / Country**: اسم الدولة +* **Address / Post Code**: الرمز البريدي/ZIP -### Array Fields +### حقول المصفوفة -Use the following format: +استخدم التنسيق التالي: ``` -["value1","value2"] +[\"value1\",\"value2\"] ``` -### Boolean Fields +### حقول القيم المنطقية -Use `TRUE` or `FALSE` (uppercase) - not `true` or `false` +استخدم `TRUE` أو `FALSE` (أحرف كبيرة) - وليس `true` أو `false` -### Currency Fields +### حقول العملة -Currency is a nested field with two columns that **both must be filled**: +العملة حقل متداخل يحتوي على عمودين يجب **ملؤهما كلاهما**: -* **Amount / Amount**: The numeric value (e.g., `1234.56`) -* **Amount / Currency**: The currency code (e.g., `USD`, `EUR`) +* **Amount / Amount**: القيمة الرقمية (مثال: `1234.56`) +* **Amount / Currency**: رمز العملة (مثال: `USD`، `EUR`) -### Date Fields +### حقول التاريخ -Supported formats: +التنسيقات المدعومة: -* `YYYY-MM-DD` (recommended) +* `YYYY-MM-DD` (موصى به) * `MM/DD/YYYY` * `DD/MM/YYYY` -* ISO 8601 format +* تنسيق ISO 8601 -### Domain Fields +### حقول النطاق -* It is recommended to use the format `https://domain.com` to avoid creating duplicates, as this is the format used for Companies created by the mailbox and calendar synchronizations -* A `Domain Label` and `Domain URL` can be filled: best practice is to fill `domain.com` in the label and `https://domain.com` in the url -* Domains must be unique within the Companies object -* **Domains must be unique within the file to import** +* يُوصى باستخدام التنسيق `https://domain.com` لتجنب إنشاء التكرارات، إذ إن هذا هو التنسيق المستخدم للشركات التي يتم إنشاؤها عبر مزامنة صندوق البريد والتقويم +* يمكن ملء حقلي `Domain Label` و`Domain URL`: وأفضل ممارسة هي وضع `domain.com` في التسمية و`https://domain.com` في عنوان URL +* يجب أن تكون النطاقات فريدة داخل كائن الشركات +* **يجب أن تكون النطاقات فريدة داخل الملف المُراد استيراده** -### Email Fields +### حقول البريد الإلكتروني -* Must be valid email format -* Emails must be unique within the People object -* **Emails must be unique within the file to import** -* For additional emails: use **Emails / Primary Email** for the main email, and **Emails / Additional Emails** with this format: +* يجب أن تكون بتنسيق بريد إلكتروني صحيح +* يجب أن تكون عناوين البريد الإلكتروني فريدة داخل كائن الأشخاص +* **يجب أن تكون عناوين البريد الإلكتروني فريدة داخل الملف المُراد استيراده** +* للبريد الإلكتروني الإضافي: استخدم **Emails / Primary Email** للبريد الرئيسي، و**Emails / Additional Emails** بهذا التنسيق: ``` -["jane@twenty.com","jane.doe@twenty.com"] +[\"jane@twenty.com\",\"jane.doe@twenty.com\"] ``` -### Id Fields +### حقول المعرّف -Specifying an `id` during import is optional. Twenty auto-generates one if not provided. +تحديد `id` أثناء الاستيراد اختياري. يقوم Twenty بإنشاء واحد تلقائيًا إذا لم يتم توفيره. -Use cases for mapping an `id` column: +حالات استخدام لتعيين عمود `id`: -* **Set a specific ID**: Choose the UUID for newly created records -* **Update existing records**: Match against existing records to update them instead of creating duplicates. In that case, it is recommended to not map the other unique fields: mapping only one unique field ensures a smoother import. +* **تعيين معرّف محدد**: اختر UUID للسجلات التي سيتم إنشاؤها +* **تحديث السجلات الحالية**: طابِق السجلات الحالية لتحديثها بدلاً من إنشاء تكرارات. في هذه الحالة، يُنصح بعدم تعيين الحقول الفريدة الأخرى: فاقتصار التعيين على حقل فريد واحد يضمن عملية استيراد أكثر سلاسة. -If you provide an `id`, it must be in UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`). +إذا قدّمت قيمة `id`، فيجب أن تكون بتنسيق UUID (مثال: `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`). -### JSON Fields +### حقول JSON -Use valid JSON format: +استخدم تنسيق JSON صالحًا: ``` {"key":"value","key2":"value2"} ``` -### Links Fields +### حقول الروابط -Similar to Domain fields: +مشابه لحقول النطاق: -* Fill both the label and URL columns: **Links / Link URL** and **Links / Link Label** -* Use full URL format: `https://example.com` -* For secondary links, use **Links / Secondary Links** column with this format: +* املأ عمودي التسمية والرابط معًا: **Links / Link URL** و**Links / Link Label** +* استخدم تنسيق الرابط الكامل: `https://example.com` +* للروابط الثانوية، استخدم عمود **Links / Secondary Links** بهذا التنسيق: ``` -[{"url":"https://twenty.com","label":"Twenty"}] +[{\"url\":\"https://twenty.com\",\"label\":\"Twenty\"}] ``` -### Multi-Select Fields +### حقول التحديد المتعدد -Use the **API names** (not the display labels) in the following format: +استخدم **أسماء واجهة برمجة التطبيقات (API)** (وليس تسميات العرض) بالتنسيق التالي: ``` -["VALUE1","VALUE2"] +[\"VALUE1\",\"VALUE2\"] ``` -See [here](#finding-api-names-for-select-fields) where to find the API names. +اطّلع [هنا](#finding-api-names-for-select-fields) لمعرفة مكان العثور على أسماء واجهة برمجة التطبيقات. -New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing. +لن يتم إنشاء خيارات التحديد الجديدة تلقائيًا بواسطة الاستيراد. يجب إضافتها ضمن **الإعدادات → نموذج البيانات** قبل الاستيراد. - **Import overwrites, it does not add.** + **الاستيراد يستبدل، لا يضيف.** - If a record already has `VALUE2` and `VALUE3` selected, and you import `["VALUE1"]`, the record will only have `VALUE1` after import. The previous selections are replaced, not merged. + إذا كان السجل يحتوي بالفعل على `VALUE2` و`VALUE3` محدّدين، ثم استوردت `[\"VALUE1\"]`، فسيحتوي السجل على `VALUE1` فقط بعد الاستيراد. يتم استبدال التحديدات السابقة، وليس دمجها. -### Number Fields +### حقول الأرقام -* Numbers only -* Decimals use period: `1234.56` -* No thousands separators +* أرقام فقط +* تُكتب الكسور العشرية بنقطة: `1234.56` +* من دون فواصل آلاف -### Phone Fields +### حقول الهاتف -Phone is a nested field with multiple columns that **must be filled** +الهاتف حقل متداخل يضم عدة أعمدة يجب **ملؤها** -* **Phones / Primary Phone Number**: The phone number (e.g., `4159095555`) -* **Phones / Primary Phone Country Code**: Country code (e.g., `US`) -* **Phones / Primary Phone Calling Code**: Dialing code (e.g., `+1`) +* **Phones / Primary Phone Number**: رقم الهاتف (مثال: `4159095555`) +* **Phones / Primary Phone Country Code**: رمز الدولة (مثال: `US`) +* **Phones / Primary Phone Calling Code**: رمز الاتصال (مثال: `+1`) -### Rating Fields +### حقول التقييم -Use the API name format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5` +استخدم تنسيق اسم واجهة برمجة التطبيقات: `RATING_1`، `RATING_2`، `RATING_3`، `RATING_4`، `RATING_5` ### حقول العلاقات -Please see our dedicated article: [Import Relations Between Objects](/l/ar/user-guide/data-migration/capabilities/import-relations) +يرجى الاطّلاع على مقالتنا المخصّصة: [استيراد العلاقات بين الكائنات](/l/ar/user-guide/data-migration/capabilities/import-relations) ### حقول الاختيار -Use the **API name** of the option (not the display label): +استخدم **اسم واجهة برمجة التطبيقات** للخيار (وليس تسمية العرض): ``` VALUE1 diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx index a6eed7611c..54e62c46c6 100644 --- a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx +++ b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx @@ -1,5 +1,5 @@ --- -title: التحويل من أنظمة إدارة علاقات العملاء الأخرى},{ +title: Migrating from Other CRMs description: Step-by-step guide to migrate your data from any CRM to Twenty. --- diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx index 7db7a8b36e..150245ee0c 100644 --- a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx +++ b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx @@ -1,5 +1,5 @@ --- -title: حضِّر ملفات CSV الخاصة بك},{ +title: Prepare Your CSV Files description: دليل كامل خطوة بخطوة لتنسيق بياناتك لاستيرادها إلى Twenty. --- @@ -87,114 +87,114 @@ description: دليل كامل خطوة بخطوة لتنسيق بياناتك | **Phones / Primary Phone Country Code** | `US` | | **Phones / Primary Phone Calling Code** | `+1` | -### Address Fields +### حقول العنوان -Address is a **nested field** with multiple columns (some can be left empty): +العنوان هو **حقل متداخل** يحتوي على أعمدة متعددة (يمكن ترك بعضها فارغًا): -* **Address / Address 1**: Street address line 1 -* **Address / Address 2**: Street address line 2 (optional) -* **Address / City**: City name -* **Address / State**: State or province -* **Address / Country**: Country name -* **Address / Post Code**: Postal/ZIP code +* **العنوان / العنوان 1**: السطر الأول لعنوان الشارع +* **العنوان / العنوان 2**: السطر الثاني لعنوان الشارع (اختياري) +* **العنوان / المدينة**: اسم المدينة +* **العنوان / الولاية**: ولاية أو مقاطعة +* **العنوان / البلد**: اسم البلد +* **العنوان / الرمز البريدي**: رمز بريدي/ZIP -### Date Fields +### حقول التاريخ -Use consistent formatting throughout your file: +استخدم تنسيقًا موحدًا في كامل ملفك: -* `YYYY-MM-DD` (recommended): `2024-03-15` +* `YYYY-MM-DD` (مُوصى به): `2024-03-15` * `MM/DD/YYYY`: `03/15/2024` * `DD/MM/YYYY`: `15/03/2024` * ISO 8601: `2024-03-15T10:30:00Z` -### Number Fields +### حقول الأرقام -* Numbers only (no text) -* Use period for decimals: `1234.56` -* No thousands separators (not `1,234.56`) +* أرقام فقط (بدون نص) +* استخدم النقطة للفواصل العشرية: `1234.56` +* بدون فواصل لآلاف الأرقام (ليس `1,234.56`) -### Currency Fields +### حقول العملة -Currency is a **nested field** requiring two columns that **both must be filled**: +العملة هي **حقل متداخل** يتطلب عمودين يجب **ملؤهما كليهما**: -| Column | مثال | -| --------------------- | --------- | -| **Amount / Amount** | `1234.56` | -| **Amount / Currency** | `USD` | +| العمود | مثال | +| ------------------- | --------- | +| **المبلغ / المبلغ** | `1234.56` | +| **المبلغ / العملة** | `USD` | -### Boolean Fields +### حقول منطقية -Use uppercase: `TRUE` or `FALSE` +استخدم أحرفًا كبيرة: `TRUE` أو `FALSE` -Lowercase `true` or `false` will not work. +الأحرف الصغيرة `true` أو `false` لن تعمل. ### اختر الحقول -Use the **API name** of the option, not the display label. +استخدم **اسم واجهة برمجة التطبيقات (API)** للخيار، وليس اسم العرض. -**How to find API names:** +**كيفية العثور على أسماء واجهة برمجة التطبيقات (API):** -1. Go to **Settings → Data Model** -2. Select the object and field -3. Enable **Advanced mode** (toggle at bottom right) -4. Copy the API name (e.g., `OPTION_1`, not "Option 1") +1. انتقل إلى **الإعدادات → نموذج البيانات** +2. اختر الكائن والحقل +3. فعّل **الوضع المتقدم** (المبدّل في أسفل اليمين) +4. انسخ اسم واجهة برمجة التطبيقات (مثال: `OPTION_1`، وليس "Option 1") -New select options are not created automatically. Add them in **Settings → Data Model** before importing. +خيارات الاختيار الجديدة لا يتم إنشاؤها تلقائيًا. أضِفها في **الإعدادات → نموذج البيانات** قبل الاستيراد. -### Multi-Select Fields +### حقول متعددة الاختيار -Use API names in array format: +استخدم أسماء واجهة برمجة التطبيقات بصيغة المصفوفة: ``` ["VALUE1","VALUE2"] ``` -### Array Fields +### حقول المصفوفة -Use JSON array format: +استخدم صيغة مصفوفة JSON: ``` ["value1","value2"] ``` -### Rating Fields +### حقول التقييم -Use the format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, or `RATING_5` +استخدم الصيغة: `RATING_1` و`RATING_2` و`RATING_3` و`RATING_4` أو `RATING_5` -### Links/URL Fields +### حقول الروابط/عناوين URL -Fill both columns: +املأ كلا العمودين: -* **Links / Link Label**: `Twenty` -* **Links / Link URL**: `https://twenty.com` +* **الروابط / تسمية الرابط**: `Twenty` +* **الروابط / عنوان URL للرابط**: `https://twenty.com` -For secondary links, use the **Links / Secondary Links** column: +بالنسبة للروابط الثانوية، استخدم عمود **الروابط / الروابط الثانوية**: ``` [{"url":"https://twenty.com","label":"Twenty"}] ``` -### JSON Fields +### حقول JSON -Use valid JSON format: +استخدم تنسيق JSON صالحًا: ``` {"key":"value","key2":"value2"} ``` -### ID Fields +### حقول المعرّف -* **Optional**: Twenty auto-generates IDs if not provided -* **Format**: UUID (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`) -* **Use case**: Include ID to update existing records instead of creating new ones +* **اختياري**: يقوم Twenty بإنشاء المعرّفات تلقائيًا إذا لم تُوفَّر +* **التنسيق**: UUID (مثلًا: `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`) +* **حالة الاستخدام**: تضمين المعرّف لتحديث السجلات الموجودة بدلًا من إنشاء سجلات جديدة -## Step 5: Add Relation Columns (If Linking Records) +## الخطوة 5: إضافة أعمدة العلاقات (إذا كنت تربط السجلات) -To link records to other objects (e.g., People to Companies), add a column with the unique identifier of the related record. +لربط السجلات بكائنات أخرى (مثل الأشخاص بالشركات)، أضِف عمودًا يحتوي على المعرّف الفريد للسجل المرتبط. -**Example**: Linking People to Companies +**مثال**: ربط الأشخاص بالشركات -Add a column to your People CSV: +أضِف عمودًا إلى ملف CSV الخاص بالأشخاص: ``` firstName,lastName,email,companyDomain @@ -202,69 +202,69 @@ John,Smith,john@acme.com,https://acme.com Jane,Doe,jane@widgets.co,https://widgets.co ``` -**Important rules for relations:** +**قواعد مهمة للعلاقات:** -* The parent record must already exist in Twenty -* Use the **Domain URL** format (`https://domain.com`), not the label -* Map only ONE unique identifier (don't include both `companyId` AND `companyDomain`) -* For Workspace Members, use their **email** (not name) +* يجب أن يكون السجل الأب موجودًا مسبقًا في Twenty +* استخدم صيغة **عنوان المجال (Domain URL)** (`https://domain.com`) وليس التسمية +* قم بربط مُعرّف فريد واحد فقط (لا تُدرج كلاً من `companyId` و`companyDomain`) +* بالنسبة لأعضاء مساحة العمل، استخدم **البريد الإلكتروني** الخاص بهم (وليس الاسم) - **Import Order Matters!** + **ترتيب الاستيراد مهم!** - Import the "one" side before the "many" side: + استورد طرف "الواحد" قبل طرف "الكثير": - 1. **Companies** first - 2. **People** second (with company reference) - 3. **Opportunities** third + 1. **الشركات** أولاً + 2. **الأشخاص** ثانيًا (مع مرجع الشركة) + 3. **الفرص** ثالثًا - The parent record must exist before you can reference it. + يجب أن يوجد السجل الأب قبل أن تتمكن من الإشارة إليه. -See [How to Import Relations](/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions. +اطلع على [كيفية استيراد العلاقات](/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) للحصول على تعليمات مفصلة. -## Step 6: Ensure Fields Exist in Twenty +## الخطوة 6: تأكد من وجود الحقول في Twenty -The import creates **records**, not **fields**. All fields you want to import must already exist in your data model. +تقوم عملية الاستيراد بإنشاء **سجلات**، وليس **حقولًا**. يجب أن تكون جميع الحقول التي تريد استيرادها موجودة مسبقًا في نموذج البيانات لديك. -**Before importing:** +**قبل الاستيراد:** -1. Go to **Settings → Data Model** -2. Select your object -3. Create any custom fields you need -4. Note the exact field names (they must match your column headers) +1. انتقل إلى **الإعدادات → نموذج البيانات** +2. اختر الكائن الخاص بك +3. أنشئ أي حقول مخصصة تحتاجها +4. دوّن أسماء الحقول بدقة (يجب أن تتطابق مع عناوين أعمدتك) -## Step 7: Final Checklist +## الخطوة 7: قائمة التحقق النهائية -Before uploading your file, verify: +قبل رفع ملفك، تحقّق مما يلي: -File is CSV, XLSX, or XLS format -File has fewer than 10,000 records -Encoding is UTF-8 -No duplicate emails (for People) or domains (for Companies) -Dates use consistent format throughout -Domains use `https://domain.com` format -Boolean fields use `TRUE` or `FALSE` (uppercase) -Select fields use API names, not display labels -All custom fields exist in Settings → Data Model -Parent records imported before child records -Relation columns reference existing records +الملف بصيغة CSV أو XLSX أو XLS +يحتوي الملف على أقل من 10,000 سجل +الترميز UTF-8 +لا توجد رسائل بريد إلكتروني مكررة (للأشخاص) أو نطاقات (للشركات) +التواريخ تستخدم تنسيقًا موحدًا طوال الملف +النطاقات تستخدم الصيغة `https://domain.com` +الحقول المنطقية تستخدم `TRUE` أو `FALSE` (أحرف كبيرة) +حقول الاختيار تستخدم أسماء واجهة برمجة التطبيقات، وليس أسماء العرض +جميع الحقول المخصصة موجودة في الإعدادات → نموذج البيانات +تم استيراد السجلات الأصلية قبل السجلات الفرعية +أعمدة العلاقات تشير إلى سجلات موجودة -## Common Mistakes to Avoid +## أخطاء شائعة يجب تجنبها -| Mistake | Solution | -| -------------------------------------------- | ------------------------------------- | -| Using `true` instead of `TRUE` | Boolean values must be uppercase | -| Using display labels for Select fields | Find and use API names in Settings | -| Importing People before Companies | Always import parent objects first | -| Missing currency code for Currency fields | Fill both Amount and Currency columns | -| Wrong domain format | Use `https://domain.com` consistently | -| Mapping multiple unique fields for relations | Map only ONE (domain OR id, not both) | +| الخطأ | الحل | +| ---------------------------------- | ----------------------------------------------------------- | +| استخدام `true` بدلًا من `TRUE` | يجب أن تكون القيم المنطقية بأحرف كبيرة | +| استخدام أسماء العرض لحقول الاختيار | اعثر على أسماء واجهة برمجة التطبيقات في الإعدادات واستخدمها | +| استيراد الأشخاص قبل الشركات | احرص دائمًا على استيراد الكائنات الأصل أولًا | +| رمز العملة مفقود لحقول العملة | املأ عمودي المبلغ والعملة معًا | +| تنسيق نطاق غير صحيح | استخدم `https://domain.com` بصورة متسقة | +| ربط عدة حقول فريدة للعلاقات | اربط حقلًا واحدًا فقط (النطاق أو المعرّف، وليس كليهما) | ## الخطوات التالية -Your file is ready! Now: +ملفك جاهز! الآن: -* [Import Companies](/l/ar/user-guide/data-migration/how-tos/import-companies-via-csv) (import these first) -* [Import Contacts](/l/ar/user-guide/data-migration/how-tos/import-contacts-via-csv) -* [Fix any import errors](/l/ar/user-guide/data-migration/how-tos/fix-import-errors) +* [استيراد الشركات](/l/ar/user-guide/data-migration/how-tos/import-companies-via-csv) (قم باستيرادها أولًا) +* [استيراد جهات الاتصال](/l/ar/user-guide/data-migration/how-tos/import-contacts-via-csv) +* [إصلاح أي أخطاء في الاستيراد](/l/ar/user-guide/data-migration/how-tos/fix-import-errors) diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/overview.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/overview.mdx index 4266ff2216..dacad8f3cf 100644 --- a/packages/twenty-docs/l/ar/user-guide/data-migration/overview.mdx +++ b/packages/twenty-docs/l/ar/user-guide/data-migration/overview.mdx @@ -1,5 +1,5 @@ --- -title: ترحيل البيانات},{ +title: Data Migration description: استيراد وتصدير بيانات CRM عبر ملفات CSV أو عبر API. image: /images/user-guide/import-export-data/cloud.png --- diff --git a/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-relation-fields.mdx b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-relation-fields.mdx index a055bb05b1..b94e758037 100644 --- a/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-relation-fields.mdx +++ b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-relation-fields.mdx @@ -1,60 +1,60 @@ --- title: Create Relation Fields -description: Step-by-step guide to connecting objects with relation fields. +description: دليل خطوة بخطوة لربط الكائنات باستخدام حقول العلاقة. --- -Relation fields connect records from different objects—for example, linking People to Companies. +تربط حقول العلاقة السجلات من كائنات مختلفة—على سبيل المثال، ربط الأشخاص بالشركات. - **Relation names cannot be changed after creation** (they affect the API). Plan your names carefully. + **لا يمكن تغيير أسماء العلاقات بعد إنشائها** (إذ تؤثر في واجهة برمجة التطبيقات API). خطط لأسماء العلاقات بعناية. ## قبل أن تبدأ -Decide: +قرّر: -* Which objects are you connecting? (e.g., People → Companies) -* Which is the "one" side? (e.g., Company) -* Which is the "many" side? (e.g., People — many people work at one company) -* What should the field be named on each side? +* ما الكائنات التي تقوم بربطها؟ (مثال: الأشخاص → الشركات) +* أيّهما جانب "الواحد"؟ (مثال: شركة) +* أيّهما جانب "المتعدد"؟ (مثال: الأشخاص — يعمل العديد من الأشخاص في شركة واحدة) +* ما الاسم الذي يجب أن يحمله الحقل في كل جانب؟ -See [Relation Fields](/l/ar/user-guide/data-model/capabilities/relation-fields) for relation types explained. +راجع [حقول العلاقة](/l/ar/user-guide/data-model/capabilities/relation-fields) لشرح أنواع العلاقات. -## Steps +## الخطوات -1. Go to **Settings → Data Model** -2. Select the object where you want the relation (typically the "many" side) -3. Click **+ Add Field** -4. Select **Relation** as the field type -5. Choose the **target object** -6. Select **One-to-Many** or **Many-to-One** -7. Enter field names for **both sides** of the relation +1. اذهب إلى **الإعدادات → نموذج البيانات** +2. حدّد الكائن الذي تريد فيه العلاقة (عادةً جانب "المتعدد") +3. انقر **+ إضافة حقل** +4. اختر **علاقة** كنوع الحقل +5. اختر **الكائن المستهدف** +6. اختر **واحد إلى متعدد** أو **متعدد إلى واحد** +7. أدخل أسماء الحقول ل**كلا الجانبين** من العلاقة 8. انقر على **حفظ** -## Example: People → Companies +## مثال: الأشخاص → الشركات -* Go to **Settings → Data Model → People** -* Add a Relation field -* Target: **Companies** -* Type: **Many-to-One** -* Field on People: **Company** -* Field on Companies: **Employees** +* اذهب إلى **الإعدادات → نموذج البيانات → الأشخاص** +* أضف حقل علاقة +* الهدف: **الشركات** +* النوع: **متعدد إلى واحد** +* الحقل في الأشخاص: **الشركة** +* الحقل في الشركات: **الموظفون** -Now each Person can be linked to a Company, and each Company shows its People. +يمكن الآن ربط كل شخص بشركة، وتعرض كل شركة موظفيها. -## Deleting a Relation +## حذف علاقة -1. Go to **Settings → Data Model** -2. Find the relation field -3. Click **⋮ → Deactivate** +1. اذهب إلى **الإعدادات → نموذج البيانات** +2. اعثر على حقل العلاقة +3. انقر **⋮ → إلغاء التنشيط** -Links are preserved but hidden. Reactivate to restore. +تظل الروابط محفوظة لكنها مخفية. أعد التنشيط لاستعادتها. - **Deleting a relation doesn't delete records.** Only the link between them is removed. + **حذف العلاقة لا يحذف السجلات.** تتم إزالة الرابط بينهما فقط. -## Related +## ذات صلة -* [Relation Fields](/l/ar/user-guide/data-model/capabilities/relation-fields) — types and limitations -* [How to Import Relations](/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — bulk import linked records +* [حقول العلاقة](/l/ar/user-guide/data-model/capabilities/relation-fields) — الأنواع والقيود +* [كيفية استيراد العلاقات](/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — الاستيراد الدفعي للسجلات المرتبطة diff --git a/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/customize-your-data-model.mdx b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/customize-your-data-model.mdx index 735c586544..c24cf962f2 100644 --- a/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/customize-your-data-model.mdx +++ b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/customize-your-data-model.mdx @@ -1,5 +1,5 @@ --- -title: تخصيص نموذج البيانات الخاص بك},{ +title: Customize Your Data Model description: نظرة عامة على خيارات تخصيص نموذج البيانات. --- diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx index 5e83a7ccd9..5d0cd4a2de 100644 --- a/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx +++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx @@ -1,5 +1,5 @@ --- -title: إظهار المبلغ المتوقع في خط سير المبيعات لديك},{ +title: Show Expected Amount in Your Pipeline description: احسب واعرض قيم الصفقات الموزونة استنادًا إلى احتمال المرحلة. --- diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-runs.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-runs.mdx index aeb2115223..25f679edb7 100644 --- a/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-runs.mdx +++ b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-runs.mdx @@ -1,92 +1,92 @@ --- title: عمليات تشغيل سير العمل -description: Monitor and manage workflow executions. +description: راقِب وأدِر عمليات تنفيذ سير العمل. image: /images/user-guide/workflows/workflow.png --- -## About Runs +## حول عمليات التشغيل -A **Run** is a record of a workflow execution. Every time a workflow is triggered—whether by a record event, schedule, manual action, or webhook—a new run is created. +**تشغيل** هو سجل لتنفيذ سير العمل. في كل مرة يتم فيها تشغيل سير عمل—سواءً بواسطة حدث سجل، أو جدول زمني، أو إجراء يدوي، أو خطاف ويب—يتم إنشاء عملية تشغيل جديدة. -## Viewing Runs +## عرض عمليات التشغيل -### From the Workflow Editor +### من محرر سير العمل -1. Open the workflow you want to monitor -2. Click the **Runs** panel on the right side -3. See a list of recent runs with their status +1. افتح سير العمل الذي تريد مراقبته +2. انقر على لوحة **التشغيل** في الجانب الأيمن +3. اطلع على قائمة بأحدث عمليات التشغيل مع حالتها -### From the Workflow Runs View +### من عرض عمليات تشغيل سير العمل -1. Go to **Workflow Runs** in the sidebar -2. View runs across all workflows -3. Filter by status, workflow, or date +1. انتقل إلى **عمليات تشغيل سير العمل** في الشريط الجانبي +2. اعرض عمليات التشغيل عبر جميع سير العمل +3. رشّح حسب الحالة أو سير العمل أو التاريخ -## Run Statuses +## حالات التشغيل -| الحالة | الوصف | -| ---------------- | ------------------------------------------------------------------------ | -| **جارٍ التنفيذ** | Workflow is currently executing | -| **Completed** | Workflow finished successfully | -| **Failed** | Workflow encountered an error and stopped | -| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) | +| الحالة | الوصف | +| ---------------- | ----------------------------------------------------------------- | +| **جارٍ التنفيذ** | سير العمل قيد التنفيذ حاليًا | +| **مكتمل** | انتهى سير العمل بنجاح | +| **فشل** | واجه سير العمل خطأً وتوقّف | +| **في انتظار** | سير العمل متوقف مؤقتًا (مثال: ينتظر إجراء التأخير أو إرسال نموذج) | -## Run Details +## تفاصيل عملية التشغيل -Click on any run to see: +انقر على أي عملية تشغيل للاطلاع على: -* **Status**: Current state of the run -* **Started at**: When the run began -* **Duration**: How long the run took -* **Trigger data**: The input that started the workflow -* **Step outputs**: Data returned by each step -* **Error messages**: If the run failed, what went wrong +* **الحالة**: الوضع الحالي لعملية التشغيل +* **وقت البدء**: وقت بدء عملية التشغيل +* **المدة**: الوقت الذي استغرقته عملية التشغيل +* **بيانات المُشغِّل**: المُدخل الذي بدأ سير العمل +* **مخرجات الخطوة**: البيانات التي ترجعها كل خطوة +* **رسائل الخطأ**: إذا فشلت عملية التشغيل، ما الخطأ الذي حدث -## Step-by-Step Execution +## تنفيذ خطوة بخطوة -Each run shows the progression through your workflow: +تعرض كل عملية تشغيل التقدم خلال سير عملك: -1. See which steps completed successfully -2. Identify where failures occurred -3. View the data passed between steps -4. Debug issues by examining step inputs and outputs +1. اطلع على الخطوات التي اكتملت بنجاح +2. حدّد مواضع حدوث الفشل +3. اعرض البيانات الممررة بين الخطوات +4. استكشف المشكلات وأصلحها بفحص مدخلات الخطوات ومخرجاتها -## Error Handling +## التعامل مع الأخطاء -When a run fails: +عند فشل عملية تشغيل: -1. Open the failed run -2. Find the step that caused the failure -3. Check the error message for details -4. Common issues: - * Missing required fields +1. افتح عملية التشغيل الفاشلة +2. حدّد الخطوة التي تسببت في الفشل +3. تحقق من رسالة الخطأ للتفاصيل +4. مشكلات شائعة: + * حقول مطلوبة مفقودة * تنسيق بيانات غير صالح - * External API errors - * Permission issues + * أخطاء واجهة برمجة التطبيقات الخارجية + * مشكلات الأذونات -## Re-running Workflows +## إعادة تشغيل سير العمل -If a run fails, you can: +إذا فشلت عملية تشغيل، يمكنك: -* Fix the underlying issue and wait for the next trigger -* For manual workflows, trigger again with the same or updated data -* Review the workflow logic to prevent future failures +* أصلح المشكلة الأساسية وانتظر المُشغِّل التالي +* بالنسبة لسير العمل اليدوي، شغّل مرة أخرى باستخدام البيانات نفسها أو بيانات محدَّثة +* راجع منطق سير العمل لمنع حالات الفشل المستقبلية -## Performance Tips +## نصائح الأداء -### Managing Run History +### إدارة محفوظات التشغيل -* Runs are retained for historical reference -* Very old runs may be archived automatically -* Export run data if you need to keep records +* تُحتفظ بعمليات التشغيل كمرجع تاريخي +* قد تُؤرشف عمليات التشغيل القديمة جدًا تلقائيًا +* صدّر بيانات التشغيل إذا كنت بحاجة إلى الاحتفاظ بسجلات -### Monitoring Best Practices +### أفضل ممارسات المراقبة -* Check runs regularly after activating new workflows -* Review failed runs to identify patterns +* تحقق بانتظام من عمليات التشغيل بعد تفعيل سير عمل جديدة +* راجع عمليات التشغيل الفاشلة لتحديد الأنماط -## Related +## ذات صلة -* [Workflow Triggers](/l/ar/user-guide/workflows/capabilities/workflow-triggers) -* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions) -* [Workflow Troubleshooting](/l/ar/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting) +* [مشغلات سير العمل](/l/ar/user-guide/workflows/capabilities/workflow-triggers) +* [إجراءات سير العمل](/l/ar/user-guide/workflows/capabilities/workflow-actions) +* [استكشاف مشكلات سير العمل وإصلاحها](/l/ar/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting) diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/professional-services.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/professional-services.mdx index 005a2a3a3c..d31930a93e 100644 --- a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/professional-services.mdx +++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/professional-services.mdx @@ -1,15 +1,15 @@ --- -title: Professional Services -description: Get professional help building complex workflows and automations from Twenty's team and certified partners. +title: خدمات احترافية +description: احصل على مساعدة احترافية لبناء مسارات عمل وأتمتة معقدة من فريق Twenty وشركائه المعتمدين. --- ## متى تحتاج إلى مساعدة احترافية؟ -Consider professional services for: +فكّر في الاستفادة من الخدمات الاحترافية من أجل: * تكامل أنظمة متعددة ومعقدة * منطق الأعمال المتقدم وقواعد الأتمتة -* Large-scale data processing workflows +* مسارات عمل لمعالجة البيانات على نطاق واسع * تطوير واجهة برمجة التطبيقات المخصصة * تدريب الفريق وتحسين سير العمل * عندما تكون الموارد الداخلية غير متوفرة @@ -18,7 +18,7 @@ Consider professional services for: ### حزم الانضمام -Get help from our core team with our 4-hour [Onboarding packs](https://twenty.com/onboarding-packages): +احصل على مساعدة من فريقنا الأساسي باستخدام [حزم الانضمام](https://twenty.com/onboarding-packages) لمدة 4 ساعات: * **إنشاء سير العمل**: بناء سير عمل مخصصة لعمليات عملك * **تصميم نموذج البيانات**: تحسين هيكل البيانات الخاصة بك لأتمتة سير العمل @@ -26,4 +26,4 @@ Get help from our core team with our 4-hour [Onboarding packs](https://twenty.co ### شركاء التنفيذ -Work with certified partners for advanced customizations. Contact us at contact@twenty.com to connect with our [implementation partners](https://twenty.com/partners). +اعمل مع شركاء معتمدين من أجل تخصيصات متقدمة. تواصل معنا عبر contact@twenty.com للتواصل مع [شركائنا في التنفيذ](https://twenty.com/partners). diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/feature-flags.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/feature-flags.mdx index 1bb5e8640c..75a7ff07f1 100644 --- a/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/feature-flags.mdx +++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/feature-flags.mdx @@ -18,7 +18,7 @@ Také jej přidejte do výčtu v `feature-flag.entity.ts`: ```ts enum FeatureFlagKeys { - IsFeatureNameEnabled = 'IS_FUNKCEPOVOLENA', + IsFeatureNameEnabled = 'IS_FEATURENAME_ENABLED', ... } ``` diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/best-practices-front.mdx index e1e5da752b..5737188086 100644 --- a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/best-practices-front.mdx +++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/best-practices-front.mdx @@ -19,7 +19,7 @@ Je dobrým zvykem vytvořit tolik atomů, kolik potřebujete ke správě stavu. ```tsx export const myAtomState = atom({ key: 'myAtomState', - výchozí: 'výchozí hodnota', + default: 'default value', }); export const MyComponent = () => { @@ -40,7 +40,7 @@ export const MyComponent = () => { Vyhněte se používání `useRef` k ukládání stavu. -Pokud chcete ukládat stav, měli byste použít `useState` nebo `useRecoilState`. +If you want to store state, you should use `useState` or `useRecoilState`. Podívejte se, jak spravovat překreslení, pokud máte pocit, že potřebujete `useRef`, abyste zabránili některým překreslením. @@ -56,23 +56,23 @@ Pamatujte, že můžete **vždy** zabránit opakovanému renderování pochopen Vyhýbání se překreslení v nových funkcích je nyní snadné tím, že je eliminujete na úrovni kořene. -Komponenta sidecar `PageChangeEffect` obsahuje pouze jedno `useEffect`, kde drží veškerou logiku vykonávanou při změně stránky. +The `PageChangeEffect` sidecar component contains just one `useEffect` that holds all the logic to execute on a page change. Tímto způsobem víte, že existuje pouze jedno místo, které může spustit překreslování. -### Vždy přemýšlejte dvakrát, než přidáte `useEffect` do svého kódu +### Always think twice before adding `useEffect` in your codebase -Překreslování je často způsobeno zbytečným `useEffect`. +Re-renders are often caused by unnecessary `useEffect`. -Měli byste přemýšlet, zda potřebujete `useEffect`, nebo jestli můžete logiku přesunout do funkce obsluhy událostí. +You should think whether you need `useEffect`, or if you can move the logic in a event handler function. -Obecně budete snadno moci přesunout logiku do funkce `handleClick` nebo `handleChange`. +You'll find it generally easy to move the logic in a `handleClick` or `handleChange` function. Můžete je také najít v knihovnách jako Apollo: `onCompleted`, `onError` atd. -### Použijte sourozenou komponentu k extrakci logiky `useEffect` nebo získávání dat +### Use a sibling component to extract `useEffect` or data fetching logic -Pokud máte pocit, že potřebujete přidat `useEffect` do svého základního komponentu, měli byste zvážit jeho extrakci do sidecar komponenty. +If you feel like you need to add a `useEffect` in your root component, you should consider extracting it in a sidecar component. Stejný postup můžete aplikovat na logiku získávání dat pomocí Apollo hooks. @@ -168,12 +168,13 @@ Jména proměnných by měla přesně zobrazovat účel nebo funkci proměnné. Generická jména v programování nejsou ideální, protože postrádají specifikaci, což vede k nejednoznačnosti a snižuje čitelnost kódu. Taková jména neposkytnou informace o účelu proměnné nebo funkce, čímž ztěžují vývojářům pochopení záměru kódu bez hlubšího zkoumání. To může vést ke zvýšené době ladění, vyšší náchylnosti k chybám a obtížím při údržbě a spolupráci. Mezitím, použití popisných jmen činí kód samozřejmým a snadněji navigovatelným, čímž se zvyšuje jeho kvalita a produktivita vývojáře. ```tsx -// ❌ Špatně, používá generický název, který jasně nekomunikuje svůj účel ani obsah +// ❌ Bad, uses a generic name that doesn't communicate its +// purpose or content clearly const [value, setValue] = useState(''); ``` ```tsx -// ✅ Dobře, používá popisný název +// ✅ Good, uses a descriptive name const [email, setEmail] = useState(''); ``` @@ -186,14 +187,14 @@ const [email, setEmail] = useState(''); Jména obsluhovačů událostí by měla začínat `handle`, zatímco `on` je prefix používaný k pojmenování událostí v komponentech props. ```tsx -// ❌ Špatně +// ❌ Bad const onEmailChange = (val: string) => { // ... }; ``` ```tsx -// ✅ Dobře +// ✅ Good const handleEmailChange = (val: string) => { // ... }; @@ -221,12 +222,12 @@ const EmailField = ({ value, disabled = false }: EmailFieldProps) => ( **Použití** ```tsx -// ❌ Špatně, předání stejné hodnoty jako výchozí nepřidává žádnou hodnotu +// ❌ Bad, passing in the same value as the default value adds no value const Form = () => ; ``` ```tsx -// ✅ Dobře, předpokládá výchozí hodnotu +// ✅ Good, assumes the default value const Form = () => ; ``` @@ -284,7 +285,7 @@ Při importu, upřednostněte určené aliasy před upřesňováním úplných **Použití** ```tsx -// ❌ Špatně, specifikuje celou relativní cestu +// ❌ Bad, specifies the entire relative path import { CatalogDecorator } from '../../../../../testing/decorators/CatalogDecorator'; @@ -309,10 +310,10 @@ const validationSchema = z exist: z.boolean(), email: z .string() - .email('Email musí být platný email'), + .email('Email must be a valid email'), password: z .string() - .regex(PASSWORD_REGEX, 'Heslo musí obsahovat alespoň 8 znaků'), + .regex(PASSWORD_REGEX, 'Password must contain at least 8 characters'), }) .required(); diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/frontend-commands.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/frontend-commands.mdx index c9cac72736..f0fe9d5634 100644 --- a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/frontend-commands.mdx +++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/frontend-commands.mdx @@ -73,7 +73,7 @@ Projekt má čistý a jednoduchý stack s minimálním počtem šablonových kó [React Router](https://reactrouter.com/) zajišťuje směrování. -Aby se předešlo zbytečnému [překreslování](/l/cs/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) je veškerá logika směrování v `useEffect` v `PageChangeEffect`. +To avoid unnecessary [re-renders](/l/cs/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) all the routing logic is in a `useEffect` in `PageChangeEffect`. ### Správa stavu diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/hotkeys.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/hotkeys.mdx index 53c860b687..2a566c2cbe 100644 --- a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/hotkeys.mdx +++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/hotkeys.mdx @@ -45,29 +45,29 @@ const PageListeningEnter = () => { goBackToPreviousHotkeyScope, } = usePreviousHotkeyScope(); - // 1. Nastavte rozsah klávesových zkratek v useEffect + // 1. Set the hotkey scope in a useEffect useEffect(() => { setHotkeyScopeAndMemorizePreviousScope( ExampleHotkeyScopes.ExampleEnterPage, ); - // Vraťte se k předchozímu rozsahu klávesových zkratek, když se komponenta odpojí + // Revert to the previous hotkey scope when the component is unmounted return () => { goBackToPreviousHotkeyScope(); }; }, [goBackToPreviousHotkeyScope, setHotkeyScopeAndMemorizePreviousScope]); - // 2. Použijte hook useScopedHotkeys + // 2. Use the useScopedHotkeys hook useScopedHotkeys( Key.Enter, () => { - // Nějaká logika vykonaná na této stránce, když uživatel stiskne Enter + // Some logic executed on this page when the user presses Enter // ... }, ExampleHotkeyScopes.ExampleEnterPage, ); - return
Moje stránka, která poslouchá Enter
; + return
My page that listens for Enter
; }; ``` @@ -87,7 +87,7 @@ const ExamplePageWithModal = () => { } = usePreviousHotkeyScope(); const handleOpenModalClick = () => { - // 1. Nastavte rozsah klávesových zkratek, když uživatel otevře modal + // 1. Set the hotkey scope when user opens the modal setShowModal(true); setHotkeyScopeAndMemorizePreviousScope( ExampleHotkeyScopes.ExampleModal, @@ -95,14 +95,14 @@ const ExamplePageWithModal = () => { }; const handleModalClose = () => { - // 1. Vraťte se k předchozímu rozsahu klávesových zkratek, když se modal zavře + // 1. Revert to the previous hotkey scope when the modal is closed setShowModal(false); goBackToPreviousHotkeyScope(); }; return
-

Moje stránka s modálem

- +

My page with a modal

+ {showModal && }
; }; @@ -112,9 +112,9 @@ Pak v komponentě modalu : ```tsx const MyDropdownComponent = ({ onClose }: { onClose: () => void }) => { - // 2. Použijte hook useScopedHotkeys k poslouchání Escape. - // Všimněte si, že escape je běžná klávesová zkratka, kterou může použít mnoho jiných komponent - // Je tedy důležité používat rozsah klávesových zkratek, aby se předešlo konfliktům + // 2. Use the useScopedHotkeys hook to listen for Escape. + // Note that escape is a common hotkey that could be used by many other components + // So it's important to use a hotkey scope to avoid conflicts useScopedHotkeys( Key.Escape, () => { @@ -123,13 +123,13 @@ const MyDropdownComponent = ({ onClose }: { onClose: () => void }) => { ExampleHotkeyScopes.ExampleModal, ); - return
Moje komponenta modalu
; + return
My modal component
; }; ``` -Je důležité používat tento vzor, když si nejste jisti, že samotné použití useEffect pro nastavení a odebrání bude dostatečné k zabránění konfliktům. +It's important to use this pattern when you're not sure that just using a useEffect with mount/unmount will be enough to avoid conflicts. -Tyto konflikty mohou být těžké ladit a mohou se vyskytovat častěji než ne u useEffects. +Those conflicts can be hard to debug, and it might happen more often than not with useEffects. ## Co je to hotkey scope? @@ -143,20 +143,20 @@ Například rozsahy klávesových zkratek pro každou stránku jsou definovány ```tsx export enum PageHotkeyScope { - Nastavení = 'settings', - VytvořitPracovníProstor = 'create-workspace', - PřihlášeníRegistrace = 'sign-in-up', - VytvořitProfil = 'create-profile', - PožadovánoPlán = 'plan-required', - ZobrazitStránku = 'show-page', - OsobníZobrazitStránku = 'person-show-page', - FiremníZobrazitStránku = 'company-show-page', - FirmyStránka = 'companies-page', - LidéStránka = 'people-page', - PříležitostiStránka = 'opportunities-page', - ProfilStránka = 'profile-page', - ČlenPracovníhoProstoruStránka = 'workspace-member-page', - ÚkolStránka = 'task-page', + Settings = 'settings', + CreateWorkspace = 'create-workspace', + SignInUp = 'sign-in-up', + CreateProfile = 'create-profile', + PlanRequired = 'plan-required', + ShowPage = 'show-page', + PersonShowPage = 'person-show-page', + CompanyShowPage = 'company-show-page', + CompaniesPage = 'companies-page', + PeoplePage = 'people-page', + OpportunitiesPage = 'opportunities-page', + ProfilePage = 'profile-page', + WorkspaceMemberPage = 'workspace-member-page', + TaskPage = 'task-page', } ``` diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/style-guide.mdx index 35a95c6b21..8380443b28 100644 --- a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/style-guide.mdx +++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/style-guide.mdx @@ -21,16 +21,16 @@ Vždy používejte funkcionální komponenty TSX. Nepoužívejte implicitní `import` s `const`, protože je obtížnější číst a importovat s automatickým dokončováním kódu. ```tsx -// ❌ Špatné, obtížnější číst a importovat s automatickým doplňkem kódu +// ❌ Bad, harder to read, harder to import with code completion const MyComponent = () => { - return
Ahoj světe
; + return
Hello World
; }; export default MyComponent; -// ✅ Dobré, snadné čtení a import s automatickým dokončováním kódu +// ✅ Good, easy to read, easy to import with code completion export function MyComponent() { - return
Ahoj světe
; + return
Hello World
; }; ``` @@ -41,25 +41,25 @@ Create the type of the props and call it `(ComponentName)Props` if there's no ne Use props destructuring. ```tsx -// ❌ Špatné, žádný typ -export const MyComponent = (props) =>
Ahoj {props.name}
; +// ❌ Bad, no type +export const MyComponent = (props) =>
Hello {props.name}
; -// ✅ Dobré, typ +// ✅ Good, type type MyComponentProps = { name: string; }; -export const MyComponent = ({ name }: MyComponentProps) =>
Ahoj {name}
; +export const MyComponent = ({ name }: MyComponentProps) =>
Hello {name}
; ``` #### Upusťte od používání `React.FC` nebo `React.FunctionComponent` k definování typů rekvizit ```tsx -/* ❌ - Špatné, definuje anotace typů komponent s `FC` - * - S `React.FC` komponent implicitně přijímá rekvizitu `children` - * i když není definována v typu rekvizity. To nemusí být vždy - * žádoucí, zejména pokud komponenta nemá v úmyslu vykreslovat - * podřízené komponenty. +/* ❌ - Bad, defines the component type annotations with `FC` + * - With `React.FC`, the component implicitly accepts a `children` prop + * even if it's not defined in the prop type. This might not always be + * desirable, especially if the component doesn't intend to render + * children. */ const EmailField: React.FC<{ value: string; @@ -86,7 +86,7 @@ const EmailField = ({ value }: EmailFieldProps) => ( Avoid using single variable prop spreading in JSX elements, like `{...props}`. Tato praxe často vede k tomu, že kód je méně čitelný a obtížnější udržovat, protože není jasné, které rekvizity komponenta přijímá. ```tsx -/* ❌ - Špatné, šíří jedinou proměnnou prop do základní komponenty +/* ❌ - Bad, spreads a single variable prop into the underlying component */ const MyComponent = (props: OwnProps) => { return ; @@ -137,12 +137,12 @@ onClick?.(); Vždy používejte `type` místo `interface`, protože se téměř vždy překrývají a `type` je flexibilnější. ```tsx -// ❌ Špatné +// ❌ Bad interface MyInterface { name: string; } -// ✅ Dobré +// ✅ Good type MyType = { name: string; }; @@ -155,7 +155,7 @@ type MyType = { Proč TypeScript doporučuje vyhnout se výčtům zjistíte [zde](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums). ```tsx -// ❌ Špatné, využívá výčet +// ❌ Bad, utilizes an enum enum Color { Red = "red", Green = "green", @@ -263,13 +263,13 @@ const StyledButton = styled.button` Vyhýbejte se typovým importům. K prosazení tohoto standardu pravidlo ESLint kontroluje a hlásí jakékoli typové importy. To pomáhá udržovat konzistenci a čitelnost v TypeScript kódu. ```tsx -// ❌ Špatné +// ❌ Bad import { type Meta, type StoryObj } from '@storybook/react'; -// ❌ Špatné +// ❌ Bad import type { Meta, StoryObj } from '@storybook/react'; -// ✅ Dobré +// ✅ Good import { Meta, StoryObj } from '@storybook/react'; ``` diff --git a/packages/twenty-docs/l/cs/twenty-ui/input/checkbox.mdx b/packages/twenty-docs/l/cs/twenty-ui/input/checkbox.mdx index 713fbaca44..447b3c598b 100644 --- a/packages/twenty-docs/l/cs/twenty-ui/input/checkbox.mdx +++ b/packages/twenty-docs/l/cs/twenty-ui/input/checkbox.mdx @@ -15,17 +15,17 @@ Používané, když uživatel potřebuje vybrat více hodnot z několika možnos import { Checkbox } from "twenty-ui/display"; export const MyComponent = () => { - return ( - console.log("onChange function fired")} - onCheckedChange={() => console.log("onCheckedChange function fired")} - variant="primary" - size="small" - shape="squared" - /> - ); + return ( + console.log("onChange function fired")} + onCheckedChange={() => console.log("onCheckedChange function fired")} + variant="primary" + size="small" + shape="squared" + /> + ); }; ```
diff --git a/packages/twenty-docs/l/cs/twenty-ui/navigation/breadcrumb.mdx b/packages/twenty-docs/l/cs/twenty-ui/navigation/breadcrumb.mdx index 0b32596f2f..04e8a7d904 100644 --- a/packages/twenty-docs/l/cs/twenty-ui/navigation/breadcrumb.mdx +++ b/packages/twenty-docs/l/cs/twenty-ui/navigation/breadcrumb.mdx @@ -17,10 +17,10 @@ Zobrazuje drobečkovou navigační lištu. export const MyComponent = () => { const breadcrumbLinks = [ - { children: "Domů", href: "/" }, - { children: "Kategorie", href: "/category" }, - { children: "Podkategorie", href: "/category/subcategory" }, - { children: "Aktuální stránka" }, + { children: "Home", href: "/" }, + { children: "Category", href: "/category" }, + { children: "Subcategory", href: "/category/subcategory" }, + { children: "Current Page" }, ]; return ( diff --git a/packages/twenty-docs/l/cs/twenty-ui/navigation/links.mdx b/packages/twenty-docs/l/cs/twenty-ui/navigation/links.mdx index ea3e720205..ebe45c4c1d 100644 --- a/packages/twenty-docs/l/cs/twenty-ui/navigation/links.mdx +++ b/packages/twenty-docs/l/cs/twenty-ui/navigation/links.mdx @@ -19,21 +19,21 @@ Stylizovaná komponenta odkazu pro zobrazení kontaktních informací. import { ContactLink } from 'twenty-ui/navigation'; export const MyComponent = () => { - const handleLinkClick = (event) => { - console.log('Odkaz na kontakt kliknut!', event); - }; + const handleLinkClick = (event) => { + console.log('Contact link clicked!', event); + }; - return ( - - - example@example.com - - - ); + return ( + + + example@example.com + + + ); }; ```
@@ -59,18 +59,19 @@ Stylizovaná komponenta odkazu pro zobrazení odkazů. import { BrowserRouter as Router } from "react-router-dom"; export const MyComponent = () => { - const handleLinkClick = (event) => { - console.log("Odkaz na kontakt kliknut!", event); - }; + const handleLinkClick = (event) => { + console.log("Contact link clicked!", event); + }; - return ( - - - Kontaktujte nás - - - ); + return ( + + + Contact Us + + + ); }; + ``` @@ -95,17 +96,17 @@ Zaobleně stylizovaný odkaz s komponentou Chip pro odkazy. import { BrowserRouter as Router } from "react-router-dom"; export const MyComponent = () => { - const handleLinkClick = (event) => { - console.log("Odkaz na kontakt kliknut!", event); - }; + const handleLinkClick = (event) => { + console.log("Contact link clicked!", event); + }; - return ( - - - Kontaktujte nás - - - ); + return ( + + + Contact Us + + + ); }; ``` @@ -130,14 +131,14 @@ Stylizované sociální odkazy s podporou různých typů sociálních odkazů, import { BrowserRouter as Router } from "react-router-dom"; export const MyComponent = () => { - return ( - - - - ); + return ( + + + + ); }; ``` diff --git a/packages/twenty-docs/l/cs/twenty-ui/navigation/menu-item.mdx b/packages/twenty-docs/l/cs/twenty-ui/navigation/menu-item.mdx index c3a6eab483..8a3d25ba73 100644 --- a/packages/twenty-docs/l/cs/twenty-ui/navigation/menu-item.mdx +++ b/packages/twenty-docs/l/cs/twenty-ui/navigation/menu-item.mdx @@ -199,7 +199,7 @@ A multi-select menu item with an avatar, a checkbox for selection, and textual c return ( } - text="První možnost" + text="First Option" selected={false} className /> @@ -231,13 +231,13 @@ Položka menu s volitelnou levou ikonou, textovým obsahem a ikonou šipky vprav export const MyComponent = () => { const handleNavigation = () => { - console.log("Přejít na jinou stránku"); + console.log("Navigate to another page"); }; return ( @@ -268,13 +268,13 @@ Výběrová položka menu, s volitelným levým obsahem (ikonou a textem) a indi export const MyComponent = () => { const handleSelection = () => { - console.log("Položka menu byla vybrána"); + console.log("Menu item selected"); }; return ( } - text="První možnost" + text="First Option" selected={true} disabled={false} hovered={false} @@ -358,7 +358,7 @@ Volitelná položka menu s ukázkou barvy pro situace, kdy chcete, aby uživatel export const MyComponent = () => { const handleSelection = () => { - console.log("Položka menu vybrána"); + console.log("Menu item selected"); }; return ( @@ -405,7 +405,7 @@ Položka menu s přidruženým přepínačem k umožnění nebo zakázání urč return ( console.log("Domů kliknuto"), + onClick: () => console.log("Home clicked"), }, { name: "Profile", Icon: IconUser, - onClick: () => console.log("Profil kliknuto"), + onClick: () => console.log("Profile clicked"), }, { name: "Settings", Icon: IconSettings, - onClick: () => console.log("Nastavení kliknuto"), + onClick: () => console.log("Settings clicked"), }, ]; diff --git a/packages/twenty-docs/l/cs/twenty-ui/navigation/step-bar.mdx b/packages/twenty-docs/l/cs/twenty-ui/navigation/step-bar.mdx index 227ff3c15a..e080d90dae 100644 --- a/packages/twenty-docs/l/cs/twenty-ui/navigation/step-bar.mdx +++ b/packages/twenty-docs/l/cs/twenty-ui/navigation/step-bar.mdx @@ -17,9 +17,9 @@ Zobrazuje postup přes sekvenci číslovaných kroků zvýrazněním aktuálníh export const MyComponent = () => { return ( - Krok 1 - Krok 2 - Krok 3 + Step 1 + Step 2 + Step 3 ); }; diff --git a/packages/twenty-docs/l/cs/user-guide/billing/overview.mdx b/packages/twenty-docs/l/cs/user-guide/billing/overview.mdx index dd2219f27e..5db7137159 100644 --- a/packages/twenty-docs/l/cs/user-guide/billing/overview.mdx +++ b/packages/twenty-docs/l/cs/user-guide/billing/overview.mdx @@ -1,6 +1,6 @@ --- title: Fakturace -description: Understand Twenty pricing and manage your subscription. +description: Seznamte se s cenami Twenty a spravujte své předplatné. image: /images/user-guide/setup/pricing.png --- @@ -8,38 +8,38 @@ image: /images/user-guide/setup/pricing.png Fakturace -Twenty offers flexible pricing plans to fit your team's needs. Manage your subscription, track workflow credits, and access invoices all from **Settings → Billing**. +Twenty nabízí flexibilní cenové plány, které vyhoví potřebám vašeho týmu. Spravujte své předplatné, sledujte kredity pracovních postupů a přistupujte k fakturám — to vše v **Nastavení → Fakturace**. -## What's in this section +## Co najdete v této sekci - - Learn about Twenty's pricing plans and what's included. + + Zjistěte více o cenových plánech Twenty a o tom, co je zahrnuto. - - Frequently asked questions about pricing and billing. + + Nejčastější dotazy k cenám a fakturaci. -## At a glance +## Stručný přehled -| Plán | Key Features | -| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **Free (Self-Hosted)** | All Pro features, community support | -| **Pro (Cloud)** | Everything apart from the Premium features (SSO and row-level permissions), standard support | -| **Organization (Cloud)** | All from Pro + the Premium features (SSO and row-level permissions), priority support | -| **Organization (Self-Hosted)** | All from Pro + the Premium features (SSO, row-level permissions), Twenty team support, not required to publish your custom code as open-source before distributing | +| Plán | Klíčové funkce | +| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Zdarma (vlastní hosting)** | Všechny funkce Pro, podpora komunity | +| **Pro (Cloud)** | Vše kromě funkcí Premium (SSO a oprávnění na úrovni řádků), standardní podpora | +| **Organizace (Cloud)** | Vše z Pro + funkce Premium (SSO a oprávnění na úrovni řádků), prioritní podpora | +| **Organizace (vlastní hosting)** | Vše z Pro + funkce Premium (SSO, oprávnění na úrovni řádků), podpora týmu Twenty, není vyžadováno publikování vašeho vlastního kódu jako open-source před distribucí | -## Quick answers +## Rychlé odpovědi -**Where do I manage billing?** -Go to **Settings → Billing** to view your plan, update payment methods, and access invoices. +**Kde spravuji fakturaci?** +Přejděte do **Nastavení → Fakturace**, kde uvidíte svůj plán, aktualizujete platební metody a získáte přístup k fakturám. -**Can I use Twenty for free?** -Yes! Self-host Twenty and get all Pro features at no cost. +**Mohu používat Twenty zdarma?** +Ano! Hostujte Twenty sami a získejte všechny funkce Pro zdarma. -**How do I upgrade?** -Go to **Settings → Billing** and click **Switch to Organization** or **Switch to Yearly**. +**Jak provedu upgrade?** +Přejděte do **Nastavení → Fakturace** a klikněte na **Přepnout na Organizaci** nebo **Přepnout na Roční**. -For more questions, see the [Billing FAQ](/l/cs/user-guide/billing/how-tos/billing-faq). +Další otázky najdete v [FAQ k fakturaci](/l/cs/user-guide/billing/how-tos/billing-faq). diff --git a/packages/twenty-docs/l/cs/user-guide/calendar-emails/capabilities/calendar.mdx b/packages/twenty-docs/l/cs/user-guide/calendar-emails/capabilities/calendar.mdx index 7219da8969..960def2fa9 100644 --- a/packages/twenty-docs/l/cs/user-guide/calendar-emails/capabilities/calendar.mdx +++ b/packages/twenty-docs/l/cs/user-guide/calendar-emails/capabilities/calendar.mdx @@ -1,19 +1,19 @@ --- title: Kalendář -description: Understanding calendar integration features in Twenty. +description: Přehled funkcí integrace kalendáře v Twenty. --- -**Note**: To connect your calendar and configure sync settings, visit [Email & Calendar Setup](/l/cs/user-guide/calendar-emails/overview). +**Poznámka**: Chcete-li připojit svůj kalendář a konfigurovat nastavení synchronizace, navštivte [Nastavení Emailu a Kalendáře](/l/cs/user-guide/calendar-emails/overview). -## How Calendar Integration Works +## Jak funguje integrace kalendáře -Twenty automatically syncs your calendar events and links them to the relevant CRM records, giving you a complete view of your meeting history with contacts and companies. +Twenty automaticky synchronizuje vaše události v kalendáři a propojuje je s příslušnými záznamy v CRM, čímž poskytuje úplný přehled o historii vašich schůzek s kontakty a společnostmi. ## Záložka kalendáře -Next to the Emails tab on records, you'll find a `Calendar` tab that contains the history of meetings scheduled with the record. +Vedle záložky Emailů na záznamech najdete záložku `Kalendář`, která obsahuje historii naplánovaných schůzek se záznamem. -### Available For +### Dostupné pro * **Osoby**: Prohlédněte si všechny naplánované schůzky s konkrétním kontaktem * **Společnosti**: Zobrazte si všechny schůzky týkající se společnosti a jejích zaměstnanců @@ -26,18 +26,18 @@ Next to the Emails tab on records, you'll find a `Calendar` tab that contains th 3. **Procházení historie schůzek**: Zobrazte si všechny naplánované schůzky a jejich detaily 4. **Přístup k detailům schůzek**: Zobrazte si účastníky schůzek, časy a související informace -## Visibility Settings +## Nastavení viditelnosti -Calendar data follows the same visibility settings as emails, ensuring consistent privacy controls across both communication channels. +Údaje kalendáře se řídí stejným nastavením viditelnosti jako emaily, což zajišťuje konzistentní kontrolu soukromí napříč oběma komunikačními kanály. ## Co se synchronizuje -* **External Meetings**: All meetings with contacts outside your organization -* **Automatic Linking**: Meetings connect to existing People and Company records based on attendee email addresses -* **Meeting Details**: Subject, time, duration, and participants -* **Updates**: New calendar events sync automatically +* **Externí schůzky**: Všechny schůzky s kontakty mimo vaši organizaci +* **Automatické propojení**: Schůzky se propojí s existujícími záznamy Osoby a Společnosti na základě emailových adres účastníků +* **Podrobnosti schůzky**: Předmět, čas, délka a účastníci +* **Aktualizace**: Nové události v kalendáři se synchronizují automaticky ## Co se nesynchronizuje -* **Internal Meetings**: Meetings with only colleagues (same domain) remain private -* **Private Events**: Events marked as private in your calendar +* **Interní schůzky**: Schůzky pouze s kolegy (stejná doména) zůstávají soukromé +* **Soukromé události**: Události označené jako soukromé ve vašem kalendáři diff --git a/packages/twenty-docs/l/cs/user-guide/dashboards/how-tos/dashboards-faq.mdx b/packages/twenty-docs/l/cs/user-guide/dashboards/how-tos/dashboards-faq.mdx index f0f017cb94..9c4e0c7335 100644 --- a/packages/twenty-docs/l/cs/user-guide/dashboards/how-tos/dashboards-faq.mdx +++ b/packages/twenty-docs/l/cs/user-guide/dashboards/how-tos/dashboards-faq.mdx @@ -1,59 +1,59 @@ --- -title: Dashboards FAQ -description: Frequently asked questions about dashboards in Twenty. +title: Nejčastější dotazy k panelům +description: Nejčastější dotazy k panelům v Twenty. --- - - No, dashboards are currently visible to everyone with access to your Twenty workspace. Private dashboards are not yet available. + + Ne, panely jsou nyní viditelné pro všechny, kteří mají přístup do vašeho pracovního prostoru Twenty. Soukromé panely zatím nejsou k dispozici. - - Dashboards currently display data based on the viewer's timezone. If you're in different regions (e.g., APAC vs. US), you may see slightly different numbers for the same dashboard. We're working on adding a timezone setting per dashboard to ensure consistent data across teams. + + Panely v současnosti zobrazují data podle časového pásma uživatele, který je prohlíží. Pokud jste v různých regionech (např. APAC vs. USA), můžete u stejného panelu vidět mírně odlišná čísla. Pracujeme na přidání nastavení časového pásma pro každý panel, aby byla data napříč týmy konzistentní. - - Exporting dashboards is not available at the moment. This feature is on our roadmap. + + Export panelů není v tuto chvíli k dispozici. Tato funkce je v našem plánu. - - No, sharing dashboards with users outside your Twenty workspace (non-Twenty users) is not currently supported. + + Ne, sdílení panelů s uživateli mimo váš pracovní prostor Twenty (uživatelé mimo Twenty) zatím není podporováno. - - Open the dashboard you want to favorite, then click the star icon. Favorites are personal—they won't affect other users. + + Otevřete panel, který chcete přidat mezi oblíbené, a klikněte na ikonu hvězdy. Oblíbené jsou osobní — neovlivní ostatní uživatele. - - * **Tabs** organize your dashboard into sections (like pages within the dashboard) - * **Widgets** are the individual visualizations (charts, numbers, iFrames) within each tab + + * **Karty** organizují váš panel do sekcí (jako stránky v rámci panelu) + * **Widgety** jsou jednotlivé vizualizace (grafy, čísla, iFramy) v rámci každé karty - Structure: Dashboard → Tabs → Widgets + Struktura: Panel → Karty → Widgety - - Bar charts have display limits: 100 bars for horizontal charts, 50 for vertical. If your data exceeds this, add filters to narrow down the results or change the grouping (e.g., group by week instead of day). + + Sloupcové grafy mají limity zobrazení: 100 sloupců pro vodorovné grafy, 50 pro svislé. Pokud vaše data tento limit překročí, přidejte filtry pro zúžení výsledků nebo změňte seskupení (např. seskupovat podle týdne namísto dne). - - Dashboard-level filters are not available yet, but this feature is on our roadmap. Currently, you need to apply filters to each widget individually. + + Filtry na úrovni panelu zatím nejsou k dispozici, ale tato funkce je v našem plánu. Momentálně musíte filtry aplikovat na každý widget zvlášť. - - Ještě ne. Gauge charts and tables are on our roadmap and will be added in a future release. + + Ještě ne. Ukazatelové grafy a tabulky jsou v našem plánu a budou přidány v některé z budoucích verzí. - - 1. Make sure you're in view mode (not editing) - 2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows) - 3. Select **Duplicate dashboard** + + 1. Ujistěte se, že jste v režimu zobrazení (nikoli v režimu úprav) + 2. Otevřete příkazovou lištu pomocí **Cmd + K** (nebo **Ctrl + K** ve Windows) + 3. Vyberte **Duplikovat panel** - - Widgets update automatically as your CRM data changes: + + Widgety se aktualizují automaticky, jakmile se změní vaše data v CRM: - * Real-time updates for most metrics - * Use the refresh button for a manual update if needed - * Historical data is preserved for trend analysis + * Aktualizace v reálném čase pro většinu metrik + * V případě potřeby použijte tlačítko pro obnovení k ruční aktualizaci + * Historická data jsou zachována pro analýzu trendů diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/field-mapping.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/field-mapping.mdx index e4b4bd2f6b..2810a160a3 100644 --- a/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/field-mapping.mdx +++ b/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/field-mapping.mdx @@ -1,176 +1,176 @@ --- -title: Field Mapping -description: How field mapping works during data import. +title: Mapování polí +description: Jak funguje mapování polí při importu dat. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## How Field Mapping Works +## Jak funguje mapování polí -When you upload a file, Twenty analyzes your columns and attempts to match them to existing fields. +Když nahrajete soubor, Twenty analyzuje vaše sloupce a pokusí se je spárovat s existujícími poli. -### Automatic Mapping +### Automatické mapování -Twenty tries to match columns based on: +Twenty se snaží spárovat sloupce na základě: -* Column header names (exact or similar matches) -* Data type detection (dates, numbers, emails) -* Common field patterns +* Názvů záhlaví sloupců (přesné nebo podobné shody) +* Detekce typů dat (datumů, čísel, e‑mailů) +* Běžné vzory polí -**Quick tip:** Export a few rows from the object you want to import. The exported file will have the exact column names Twenty expects, making automatic mapping seamless during import. +**Rychlý tip:** Exportujte několik řádků z objektu, který chcete importovat. Exportovaný soubor bude mít přesně takové názvy sloupců, jaké Twenty očekává, což při importu usnadní automatické mapování. -### Manual Mapping Options +### Možnosti ručního mapování -For each column, you can: +U každého sloupce můžete: -* **Map to a field**: Select the matching Twenty field from a dropdown -* **Do not map**: Skip the column entirely (data won't be imported) +* **Namapovat na pole**: Vyberte odpovídající pole Twenty z rozbalovací nabídky +* **Nemapovat**: Sloupec úplně přeskočte (data nebudou importována) -**Fields must exist before import.** The import creates records, not fields. Create custom fields under **Settings → Data Model** before importing. +**Pole musí existovat před importem.** Import vytváří záznamy, nikoli pole. Vytvořte vlastní pole v **Nastavení → Datový model** před importem. -## Field Type Compatibility +## Kompatibilita typů polí -All field types available in the Data Model are supported for import. +Všechny typy polí dostupné v Datovém modelu jsou pro import podporovány. -You can also import `id` values to either assign a specific ID to new records or update existing ones. +Můžete také importovat hodnoty `id` a přiřadit konkrétní ID novým záznamům nebo aktualizovat stávající. -## Data Format Requirements +## Požadavky na formát dat -**Some fields have special syntax.** We recommend downloading the sample file before preparing your import to see the expected syntax for each field type. +**Některá pole mají speciální syntaxi.** Před přípravou importu doporučujeme stáhnout ukázkový soubor, abyste viděli očekávanou syntaxi pro každý typ pole. -### Address Fields +### Adresová pole -Address is a nested field with multiple columns. Some can be left empty. +Adresa je vnořené pole s více sloupci. Některé lze ponechat prázdné. -* **Address / Address 1**: Street address line 1 -* **Address / Address 2**: Street address line 2 -* **Address / City**: City name -* **Address / State**: State or province -* **Address / Country**: Country name -* **Address / Post Code**: Postal/ZIP code +* **Adresa / Adresa 1**: První řádek adresy (ulice) +* **Adresa / Adresa 2**: Druhý řádek adresy (ulice) +* **Adresa / Město**: Název města +* **Adresa / Stát**: Stát nebo provincie +* **Adresa / Země**: Název země +* **Adresa / PSČ**: Poštovní směrovací číslo -### Array Fields +### Pole typu Array -Use the following format: +Použijte následující formát: ``` -["value1","value2"] +[\"value1\",\"value2\"] ``` -### Boolean Fields +### Booleovská pole -Use `TRUE` or `FALSE` (uppercase) - not `true` or `false` +Použijte `TRUE` nebo `FALSE` (velkými písmeny) – ne `true` ani `false` -### Currency Fields +### Měnová pole -Currency is a nested field with two columns that **both must be filled**: +Měna je vnořené pole se dvěma sloupci, které je nutné **vyplnit obě**: -* **Amount / Amount**: The numeric value (e.g., `1234.56`) -* **Amount / Currency**: The currency code (e.g., `USD`, `EUR`) +* **Částka / Částka**: Číselná hodnota (např. `1234.56`) +* **Částka / Měna**: Kód měny (např. `USD`, `EUR`) -### Date Fields +### Datumová pole -Supported formats: +Podporované formáty: -* `YYYY-MM-DD` (recommended) +* `YYYY-MM-DD` (doporučeno) * `MM/DD/YYYY` * `DD/MM/YYYY` -* ISO 8601 format +* Formát ISO 8601 -### Domain Fields +### Doménová pole -* It is recommended to use the format `https://domain.com` to avoid creating duplicates, as this is the format used for Companies created by the mailbox and calendar synchronizations -* A `Domain Label` and `Domain URL` can be filled: best practice is to fill `domain.com` in the label and `https://domain.com` in the url -* Domains must be unique within the Companies object -* **Domains must be unique within the file to import** +* Doporučujeme používat formát `https://domain.com`, abyste předešli vytváření duplicit, protože tento formát se používá u Společností vytvořených synchronizací poštovní schránky a kalendáře +* Lze vyplnit `Domain Label` a `Domain URL`: osvědčený postup je zadat do popisku `domain.com` a do URL `https://domain.com` +* Domény musí být v objektu Společnosti jedinečné +* **Domény musí být jedinečné v rámci importovaného souboru** -### Email Fields +### E‑mailová pole -* Must be valid email format -* Emails must be unique within the People object -* **Emails must be unique within the file to import** -* For additional emails: use **Emails / Primary Email** for the main email, and **Emails / Additional Emails** with this format: +* Musí mít platný formát e‑mailu +* E‑maily musí být v objektu Osoby jedinečné +* **E‑maily musí být jedinečné v rámci importovaného souboru** +* Pro další e‑maily: použijte **E‑maily / Primární e‑mail** pro hlavní e‑mail a **E‑maily / Další e‑maily** v tomto formátu: ``` -["jane@twenty.com","jane.doe@twenty.com"] +[\"jane@twenty.com\",\"jane.doe@twenty.com\"] ``` -### Id Fields +### Pole ID -Specifying an `id` during import is optional. Twenty auto-generates one if not provided. +Zadání `id` při importu je volitelné. Pokud není uvedeno, Twenty jej automaticky vygeneruje. -Use cases for mapping an `id` column: +Příklady použití mapování sloupce `id`: -* **Set a specific ID**: Choose the UUID for newly created records -* **Update existing records**: Match against existing records to update them instead of creating duplicates. In that case, it is recommended to not map the other unique fields: mapping only one unique field ensures a smoother import. +* **Nastavit konkrétní ID**: Zvolte UUID pro nově vytvářené záznamy +* **Aktualizovat existující záznamy**: Spárujte je s existujícími záznamy, abyste je aktualizovali místo vytváření duplicit. V takovém případě doporučujeme nemapovat další jedinečná pole: mapování pouze jednoho jedinečného pole zajistí hladší import. -If you provide an `id`, it must be in UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`). +Pokud zadáte `id`, musí být ve formátu UUID (např. `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`). -### JSON Fields +### Pole JSON -Use valid JSON format: +Použijte platný formát JSON: ``` {"key":"value","key2":"value2"} ``` -### Links Fields +### Pole odkazů -Similar to Domain fields: +Podobně jako u doménových polí: -* Fill both the label and URL columns: **Links / Link URL** and **Links / Link Label** -* Use full URL format: `https://example.com` -* For secondary links, use **Links / Secondary Links** column with this format: +* Vyplňte oba sloupce s popiskem a adresou URL: **Odkazy / URL odkazu** a **Odkazy / Popisek odkazu** +* Použijte úplný formát URL: `https://example.com` +* Pro sekundární odkazy použijte sloupec **Odkazy / Sekundární odkazy** v tomto formátu: ``` -[{"url":"https://twenty.com","label":"Twenty"}] +[{\"url\":\"https://twenty.com\",\"label\":\"Twenty\"}] ``` -### Multi-Select Fields +### Pole s vícenásobným výběrem -Use the **API names** (not the display labels) in the following format: +Použijte **názvy API** (nikoli zobrazované popisky) v následujícím formátu: ``` -["VALUE1","VALUE2"] +[\"VALUE1\",\"VALUE2\"] ``` -See [here](#finding-api-names-for-select-fields) where to find the API names. +Viz [zde](#finding-api-names-for-select-fields), kde najdete názvy API. -New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing. +Nové možnosti výběru se importem automaticky nevytvoří. Před importem je musíte přidat v **Nastavení → Datový model**. - **Import overwrites, it does not add.** + **Import přepisuje, nepřidává.** - If a record already has `VALUE2` and `VALUE3` selected, and you import `["VALUE1"]`, the record will only have `VALUE1` after import. The previous selections are replaced, not merged. + Pokud má záznam již vybrány `VALUE2` a `VALUE3` a vy importujete `[\"VALUE1\"]`, bude mít po importu pouze `VALUE1`. Předchozí výběry se nahrazují, neslučují. -### Number Fields +### Číselná pole -* Numbers only -* Decimals use period: `1234.56` -* No thousands separators +* Pouze čísla +* Desetinná místa se oddělují tečkou: `1234.56` +* Bez oddělovačů tisíců -### Phone Fields +### Telefonní pole -Phone is a nested field with multiple columns that **must be filled** +Telefon je vnořené pole s více sloupci, které je **nutné vyplnit** -* **Phones / Primary Phone Number**: The phone number (e.g., `4159095555`) -* **Phones / Primary Phone Country Code**: Country code (e.g., `US`) -* **Phones / Primary Phone Calling Code**: Dialing code (e.g., `+1`) +* **Telefony / Primární telefonní číslo**: Telefonní číslo (např. `4159095555`) +* **Telefony / Kód země primárního telefonu**: Kód země (např. `US`) +* **Telefony / Mezinárodní předvolba primárního telefonu**: Volací kód (např. `+1`) -### Rating Fields +### Hodnoticí pole -Use the API name format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5` +Použijte název API ve formátu: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5` ### Relační pole -Please see our dedicated article: [Import Relations Between Objects](/l/cs/user-guide/data-migration/capabilities/import-relations) +Podívejte se prosím na náš samostatný článek: [Import relací mezi objekty](/l/cs/user-guide/data-migration/capabilities/import-relations) ### Výběrová Pole -Use the **API name** of the option (not the display label): +Použijte **název API** možnosti (nikoli zobrazovaný popisek): ``` VALUE1 diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx index 4c088cb542..fca61fc2f7 100644 --- a/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx +++ b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx @@ -87,114 +87,114 @@ Telefon je **vnořené pole**, které vyžaduje více sloupců: | **Telefony / Kód země hlavního telefonu** | `US` | | **Telefony / Mezinárodní předvolba hlavního telefonu** | `+1` | -### Address Fields +### Adresní pole -Address is a **nested field** with multiple columns (some can be left empty): +Adresa je **vnořené pole** s více sloupci (některé mohou zůstat prázdné): -* **Address / Address 1**: Street address line 1 -* **Address / Address 2**: Street address line 2 (optional) -* **Address / City**: City name -* **Address / State**: State or province -* **Address / Country**: Country name -* **Address / Post Code**: Postal/ZIP code +* **Adresa / Adresa 1**: Řádek adresy 1 +* **Adresa / Adresa 2**: Řádek adresy 2 (volitelné) +* **Adresa / Město**: Název města +* **Adresa / Stát**: Stát nebo provincie +* **Adresa / Země**: Název země +* **Adresa / PSČ**: Poštovní/ZIP kód -### Date Fields +### Datumová pole -Use consistent formatting throughout your file: +Používejte jednotný formát v celém souboru: -* `YYYY-MM-DD` (recommended): `2024-03-15` +* `YYYY-MM-DD` (doporučeno): `2024-03-15` * `MM/DD/YYYY`: `03/15/2024` * `DD/MM/YYYY`: `15/03/2024` * ISO 8601: `2024-03-15T10:30:00Z` -### Number Fields +### Číselná pole -* Numbers only (no text) -* Use period for decimals: `1234.56` -* No thousands separators (not `1,234.56`) +* Pouze čísla (bez textu) +* Pro desetinná místa použijte tečku: `1234.56` +* Bez oddělovačů tisíců (ne `1,234.56`) -### Currency Fields +### Měnová pole -Currency is a **nested field** requiring two columns that **both must be filled**: +Měna je **vnořené pole** vyžadující dva sloupce, které musí být oba vyplněny: -| Column | Příklad | -| --------------------- | --------- | -| **Amount / Amount** | `1234.56` | -| **Amount / Currency** | `USD` | +| Sloupec | Příklad | +| ------------------- | --------- | +| **Částka / Částka** | `1234.56` | +| **Částka / Měna** | `USD` | -### Boolean Fields +### Booleovská pole -Use uppercase: `TRUE` or `FALSE` +Používejte velká písmena: `TRUE` nebo `FALSE` -Lowercase `true` or `false` will not work. +Malá písmena `true` nebo `false` nebudou fungovat. ### Výběrová Pole -Use the **API name** of the option, not the display label. +Použijte název API možnosti, nikoli zobrazovaný štítek. -**How to find API names:** +**Jak najít názvy API:** -1. Go to **Settings → Data Model** -2. Select the object and field -3. Enable **Advanced mode** (toggle at bottom right) -4. Copy the API name (e.g., `OPTION_1`, not "Option 1") +1. Přejděte na **Nastavení → Datový model** +2. Vyberte objekt a pole +3. Zapněte **Pokročilý režim** (přepínač vpravo dole) +4. Zkopírujte název API (např. `OPTION_1`, nikoli "Option 1") -New select options are not created automatically. Add them in **Settings → Data Model** before importing. +Nové možnosti výběru se nevytvářejí automaticky. Přidejte je v **Nastavení → Datový model** před importem. -### Multi-Select Fields +### Pole s vícenásobným výběrem -Use API names in array format: +Použijte názvy API ve formátu pole: ``` ["VALUE1","VALUE2"] ``` -### Array Fields +### Pole typu array -Use JSON array format: +Použijte formát JSON pole: ``` ["value1","value2"] ``` -### Rating Fields +### Hodnoticí pole -Use the format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, or `RATING_5` +Použijte formát: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4` nebo `RATING_5` -### Links/URL Fields +### Pole odkazů/URL -Fill both columns: +Vyplňte oba sloupce: -* **Links / Link Label**: `Twenty` -* **Links / Link URL**: `https://twenty.com` +* **Odkazy / Štítek odkazu**: `Twenty` +* **Odkazy / URL odkazu**: `https://twenty.com` -For secondary links, use the **Links / Secondary Links** column: +Pro sekundární odkazy použijte sloupec **Odkazy / Sekundární odkazy**: ``` [{"url":"https://twenty.com","label":"Twenty"}] ``` -### JSON Fields +### JSON pole -Use valid JSON format: +Použijte platný formát JSON: ``` {"key":"value","key2":"value2"} ``` -### ID Fields +### ID pole -* **Optional**: Twenty auto-generates IDs if not provided -* **Format**: UUID (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`) -* **Use case**: Include ID to update existing records instead of creating new ones +* **Volitelné**: Twenty automaticky generuje ID, pokud nejsou zadána +* **Formát**: UUID (např. `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`) +* **Využití**: Zahrňte ID pro aktualizaci existujících záznamů místo vytváření nových -## Step 5: Add Relation Columns (If Linking Records) +## Krok 5: Přidejte relační sloupce (pokud propojujete záznamy) -To link records to other objects (e.g., People to Companies), add a column with the unique identifier of the related record. +Chcete-li propojit záznamy s jinými objekty (např. lidi se společnostmi), přidejte sloupec s jedinečným identifikátorem souvisejícího záznamu. -**Example**: Linking People to Companies +**Příklad**: Propojení lidí se společnostmi -Add a column to your People CSV: +Přidejte do svého souboru CSV s lidmi sloupec: ``` firstName,lastName,email,companyDomain @@ -202,69 +202,69 @@ John,Smith,john@acme.com,https://acme.com Jane,Doe,jane@widgets.co,https://widgets.co ``` -**Important rules for relations:** +**Důležitá pravidla pro relace:** -* The parent record must already exist in Twenty -* Use the **Domain URL** format (`https://domain.com`), not the label -* Map only ONE unique identifier (don't include both `companyId` AND `companyDomain`) -* For Workspace Members, use their **email** (not name) +* Nadřazený záznam musí v Twenty již existovat +* Použijte formát **Domain URL** (`https://domain.com`), nikoli štítek +* Mapujte pouze JEDEN jedinečný identifikátor (nezahrnujte zároveň `companyId` i `companyDomain`) +* U členů pracovního prostoru použijte jejich **e-mail** (ne jméno) - **Import Order Matters!** + **Pořadí importu je důležité!** - Import the "one" side before the "many" side: + Importujte stranu "one" před stranou "many": - 1. **Companies** first - 2. **People** second (with company reference) - 3. **Opportunities** third + 1. **Společnosti** jako první + 2. **Lidé** jako druzí (s odkazem na společnost) + 3. **Příležitosti** jako třetí - The parent record must exist before you can reference it. + Nadřazený záznam musí existovat dříve, než na něj můžete odkazovat. -See [How to Import Relations](/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions. +Podrobné pokyny najdete v [Jak importovat relace](/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv). -## Step 6: Ensure Fields Exist in Twenty +## Krok 6: Ujistěte se, že pole v Twenty existují -The import creates **records**, not **fields**. All fields you want to import must already exist in your data model. +Import vytváří záznamy, nikoli pole. Všechna pole, která chcete importovat, musí již existovat ve vašem datovém modelu. -**Before importing:** +**Před importem:** -1. Go to **Settings → Data Model** -2. Select your object -3. Create any custom fields you need -4. Note the exact field names (they must match your column headers) +1. Přejděte na **Nastavení → Datový model** +2. Vyberte požadovaný objekt +3. Vytvořte všechna vlastní pole, která potřebujete +4. Poznamenejte si přesné názvy polí (musí odpovídat názvům sloupců) -## Step 7: Final Checklist +## Krok 7: Závěrečný kontrolní seznam -Before uploading your file, verify: +Před nahráním souboru ověřte: -File is CSV, XLSX, or XLS format -File has fewer than 10,000 records -Encoding is UTF-8 -No duplicate emails (for People) or domains (for Companies) -Dates use consistent format throughout -Domains use `https://domain.com` format -Boolean fields use `TRUE` or `FALSE` (uppercase) -Select fields use API names, not display labels -All custom fields exist in Settings → Data Model -Parent records imported before child records -Relation columns reference existing records +Soubor je ve formátu CSV, XLSX nebo XLS +Soubor obsahuje méně než 10 000 záznamů +Kódování je UTF-8 +Žádné duplicitní e-maily (pro lidi) nebo domény (pro společnosti) +Data používají jednotný formát v celém souboru +Domény používají formát `https://domain.com` +Booleovská pole používají `TRUE` nebo `FALSE` (velká písmena) +Výběrová pole používají názvy API, nikoli zobrazované štítky +Všechna vlastní pole existují v Nastavení → Datový model +Nadřazené záznamy byly importovány před podřízenými +Relační sloupce odkazují na existující záznamy -## Common Mistakes to Avoid +## Časté chyby, kterým se vyhnout -| Mistake | Solution | -| -------------------------------------------- | ------------------------------------- | -| Using `true` instead of `TRUE` | Boolean values must be uppercase | -| Using display labels for Select fields | Find and use API names in Settings | -| Importing People before Companies | Always import parent objects first | -| Missing currency code for Currency fields | Fill both Amount and Currency columns | -| Wrong domain format | Use `https://domain.com` consistently | -| Mapping multiple unique fields for relations | Map only ONE (domain OR id, not both) | +| Chyba | Řešení | +| ---------------------------------------------- | ---------------------------------------------- | +| Použití `true` místo `TRUE` | Booleovské hodnoty musí být velkými písmeny | +| Použití zobrazovaných štítků u výběrových polí | V Nastavení najděte a používejte názvy API | +| Importování lidí před společnostmi | Vždy nejprve importujte nadřazené objekty | +| Chybějící kód měny u měnových polí | Vyplňte sloupce Částka i Měna | +| Nesprávný formát domény | Používejte konzistentně `https://domain.com` | +| Mapování více jedinečných polí pro relace | Mapujte pouze JEDNO (doména NEBO id, ne obojí) | ## Další kroky -Your file is ready! Now: +Váš soubor je připraven! Nyní: -* [Import Companies](/l/cs/user-guide/data-migration/how-tos/import-companies-via-csv) (import these first) -* [Import Contacts](/l/cs/user-guide/data-migration/how-tos/import-contacts-via-csv) -* [Fix any import errors](/l/cs/user-guide/data-migration/how-tos/fix-import-errors) +* [Importovat společnosti](/l/cs/user-guide/data-migration/how-tos/import-companies-via-csv) (importujte je jako první) +* [Importovat kontakty](/l/cs/user-guide/data-migration/how-tos/import-contacts-via-csv) +* [Opravit chyby importu](/l/cs/user-guide/data-migration/how-tos/fix-import-errors) diff --git a/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-relation-fields.mdx b/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-relation-fields.mdx index 2a750d4901..baefb270b6 100644 --- a/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-relation-fields.mdx +++ b/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-relation-fields.mdx @@ -1,60 +1,60 @@ --- -title: Create Relation Fields -description: Step-by-step guide to connecting objects with relation fields. +title: Vytvoření relačních polí +description: Návod krok za krokem k propojení objektů pomocí relačních polí. --- -Relation fields connect records from different objects—for example, linking People to Companies. +Relační pole propojují záznamy z různých objektů — například propojení lidí se společnostmi. - **Relation names cannot be changed after creation** (they affect the API). Plan your names carefully. + **Názvy relací nelze po vytvoření změnit** (ovlivňují rozhraní API). Názvy si pečlivě naplánujte. ## Než začnete -Decide: +Rozhodněte se: -* Which objects are you connecting? (e.g., People → Companies) -* Which is the "one" side? (e.g., Company) -* Which is the "many" side? (e.g., People — many people work at one company) -* What should the field be named on each side? +* Které objekty propojujete? (např. Lidé → Společnosti) +* Která strana je „jedna“? (např. Společnost) +* Která strana je „mnoho“? (např. Lidé — mnoho lidí pracuje v jedné společnosti) +* Jak se má pole jmenovat na každé straně? -See [Relation Fields](/l/cs/user-guide/data-model/capabilities/relation-fields) for relation types explained. +Viz [Relační pole](/l/cs/user-guide/data-model/capabilities/relation-fields) s vysvětlením typů relací. -## Steps +## Postup -1. Go to **Settings → Data Model** -2. Select the object where you want the relation (typically the "many" side) -3. Click **+ Add Field** -4. Select **Relation** as the field type -5. Choose the **target object** -6. Select **One-to-Many** or **Many-to-One** -7. Enter field names for **both sides** of the relation +1. Přejděte do **Nastavení → Datový model** +2. Vyberte objekt, ve kterém chcete relaci (obvykle strana „mnoho“) +3. Klikněte na **+ Přidat pole** +4. Vyberte jako typ pole **Relace** +5. Vyberte **cílový objekt** +6. Vyberte **Jedna ku mnoha** nebo **Mnoho ku jedné** +7. Zadejte názvy polí pro **obě strany** relace 8. Klikněte na **Uložit** -## Example: People → Companies +## Příklad: Lidé → Společnosti -* Go to **Settings → Data Model → People** -* Add a Relation field -* Target: **Companies** -* Type: **Many-to-One** -* Field on People: **Company** -* Field on Companies: **Employees** +* Přejděte do **Nastavení → Datový model → Lidé** +* Přidejte relační pole +* Cíl: **Společnosti** +* Typ: **Mnoho ku jedné** +* Pole u lidí: **Společnost** +* Pole u společností: **Zaměstnanci** -Now each Person can be linked to a Company, and each Company shows its People. +Nyní lze každou osobu propojit se společností a každá společnost zobrazuje své lidi. -## Deleting a Relation +## Smazání relace -1. Go to **Settings → Data Model** -2. Find the relation field -3. Click **⋮ → Deactivate** +1. Přejděte do **Nastavení → Datový model** +2. Najděte relační pole +3. Klikněte na **⋮ → Deaktivovat** -Links are preserved but hidden. Reactivate to restore. +Propojení se zachovají, ale jsou skrytá. Znovu aktivujte pro obnovení. - **Deleting a relation doesn't delete records.** Only the link between them is removed. + **Smazání relace nemaže záznamy.** Odstraní se pouze propojení mezi nimi. -## Related +## Související -* [Relation Fields](/l/cs/user-guide/data-model/capabilities/relation-fields) — types and limitations -* [How to Import Relations](/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — bulk import linked records +* [Relační pole](/l/cs/user-guide/data-model/capabilities/relation-fields) — typy a omezení +* [Jak importovat relace](/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — hromadný import propojených záznamů diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx index 1a96069842..a3f1dc5bcd 100644 --- a/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx +++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx @@ -1,5 +1,5 @@ --- -title: Omezte přístup ke svému zobrazení},{ +title: Restrict Access to Your View description: Ovládejte, kdo může vidět vaše vlastní zobrazení. --- diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/overview.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/overview.mdx index b47e6d2eab..de28a7fb63 100644 --- a/packages/twenty-docs/l/cs/user-guide/views-pipelines/overview.mdx +++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/overview.mdx @@ -23,7 +23,7 @@ Zobrazení jsou uložená nastavení, která určují, jak se vaše data zobrazu ### Zobrazení tabulky -Výchozí zobrazení podobné tabulkovému procesoru zobrazující záznamy v řádcích s přizpůsobitelnými sloupci. +Výchozí zobrazení podobné tabulkovému procesoru zobrazující záznamy v řádcích s přizpůsobitelnými sloupci. ### Zobrazení Kanban diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-runs.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-runs.mdx index 1b356ac862..004fc9a5bd 100644 --- a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-runs.mdx +++ b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-runs.mdx @@ -1,92 +1,92 @@ --- title: Běhy průběhu práce -description: Monitor and manage workflow executions. +description: Sledujte a spravujte běhy pracovních postupů. image: /images/user-guide/workflows/workflow.png --- -## About Runs +## O bězích -A **Run** is a record of a workflow execution. Every time a workflow is triggered—whether by a record event, schedule, manual action, or webhook—a new run is created. +**Běh** je záznam provedení pracovního postupu. Při každém spuštění pracovního postupu—ať už událostí záznamu, plánem, ruční akcí nebo webhookem—se vytvoří nový běh. -## Viewing Runs +## Zobrazení běhů -### From the Workflow Editor +### Z editoru pracovních postupů -1. Open the workflow you want to monitor -2. Click the **Runs** panel on the right side -3. See a list of recent runs with their status +1. Otevřete pracovní postup, který chcete sledovat +2. Klikněte na panel **Běhů** na pravé straně +3. Zobrazte seznam nedávných běhů s jejich stavem -### From the Workflow Runs View +### Ze zobrazení běhů pracovních postupů -1. Go to **Workflow Runs** in the sidebar -2. View runs across all workflows -3. Filter by status, workflow, or date +1. V postranním panelu přejděte na **Běhy pracovních postupů** +2. Zobrazte běhy napříč všemi pracovními postupy +3. Filtrujte podle stavu, pracovního postupu nebo data -## Run Statuses +## Stavy běhů -| Stav | Popis | -| ------------- | ------------------------------------------------------------------------ | -| **Běží** | Workflow is currently executing | -| **Completed** | Workflow finished successfully | -| **Failed** | Workflow encountered an error and stopped | -| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) | +| Stav | Popis | +| ------------- | ----------------------------------------------------------------------------------- | +| **Běží** | Pracovní postup se právě provádí | +| **Dokončeno** | Pracovní postup byl úspěšně dokončen | +| **Selhalo** | Pracovní postup narazil na chybu a zastavil se | +| **Čekání** | Pracovní postup je pozastaven (např. čeká na akci Zpoždění nebo odeslání formuláře) | -## Run Details +## Podrobnosti běhu -Click on any run to see: +Kliknutím na libovolný běh zobrazíte: -* **Status**: Current state of the run -* **Started at**: When the run began -* **Duration**: How long the run took -* **Trigger data**: The input that started the workflow -* **Step outputs**: Data returned by each step -* **Error messages**: If the run failed, what went wrong +* **Stav**: Aktuální stav běhu +* **Zahájeno**: Kdy běh začal +* **Doba trvání**: Jak dlouho běh trval +* **Data spouštěče**: Vstup, který spustil pracovní postup +* **Výstupy kroků**: Data vrácená jednotlivými kroky +* **Chybové zprávy**: Pokud běh selhal, co se pokazilo -## Step-by-Step Execution +## Provádění krok za krokem -Each run shows the progression through your workflow: +Každý běh ukazuje průchod vaším pracovním postupem: -1. See which steps completed successfully -2. Identify where failures occurred -3. View the data passed between steps -4. Debug issues by examining step inputs and outputs +1. Zjistěte, které kroky byly úspěšně dokončeny +2. Zjistěte, kde došlo k selhání +3. Zobrazte data předávaná mezi kroky +4. Laděte problémy zkoumáním vstupů a výstupů kroků -## Error Handling +## Zpracování chyb -When a run fails: +Když běh selže: -1. Open the failed run -2. Find the step that caused the failure -3. Check the error message for details -4. Common issues: - * Missing required fields +1. Otevřete neúspěšný běh +2. Najděte krok, který selhání způsobil +3. Zkontrolujte podrobnosti v chybové zprávě +4. Běžné problémy: + * Chybí povinná pole * Neplatný formát dat - * External API errors - * Permission issues + * Chyby externího rozhraní API + * Problémy s oprávněními -## Re-running Workflows +## Opětovné spuštění pracovních postupů -If a run fails, you can: +Pokud běh selže, můžete: -* Fix the underlying issue and wait for the next trigger -* For manual workflows, trigger again with the same or updated data -* Review the workflow logic to prevent future failures +* Odstraňte základní problém a počkejte na další spuštění +* U ručních pracovních postupů spusťte znovu se stejnými nebo aktualizovanými daty +* Zkontrolujte logiku pracovního postupu, abyste předešli budoucím selháním -## Performance Tips +## Tipy k výkonu -### Managing Run History +### Správa historie běhů -* Runs are retained for historical reference -* Very old runs may be archived automatically -* Export run data if you need to keep records +* Běhy jsou uchovávány pro historické účely +* Velmi staré běhy mohou být automaticky archivovány +* Exportujte data běhů, pokud potřebujete uchovávat záznamy -### Monitoring Best Practices +### Osvědčené postupy pro monitorování -* Check runs regularly after activating new workflows -* Review failed runs to identify patterns +* Po aktivaci nových pracovních postupů pravidelně kontrolujte běhy +* Prohlédněte si neúspěšné běhy a hledejte opakující se vzorce -## Related +## Související -* [Workflow Triggers](/l/cs/user-guide/workflows/capabilities/workflow-triggers) -* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions) -* [Workflow Troubleshooting](/l/cs/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting) +* [Spouštěče pracovních postupů](/l/cs/user-guide/workflows/capabilities/workflow-triggers) +* [Akce pracovních postupů](/l/cs/user-guide/workflows/capabilities/workflow-actions) +* [Odstraňování problémů s pracovními postupy](/l/cs/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting) diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-versions.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-versions.mdx index ec78c0cc27..e953646ddb 100644 --- a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-versions.mdx +++ b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-versions.mdx @@ -1,5 +1,5 @@ --- -title: Verze pracovního postupu},{ +title: Workflow Versions description: Spravujte verze a koncepty pracovních postupů. image: /images/user-guide/workflows/workflow.png --- diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/queue.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/queue.mdx index 9552e9c144..c9d766d869 100644 --- a/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/queue.mdx +++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/queue.mdx @@ -26,7 +26,7 @@ class Resolver { } } -// async-WorKer +//async worker class CustomWorker { constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) { this.initWorker(); diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/best-practices-front.mdx index 788012b39b..876600cdfd 100644 --- a/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/best-practices-front.mdx +++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/best-practices-front.mdx @@ -18,21 +18,21 @@ Es ist eine gute Praxis, so viele Atome zu erstellen, wie Sie benötigen, um Ihr ```tsx export const myAtomState = atom({ - key: 'myAtomState', - default: 'Standardwert', + key: 'myAtomState', + default: 'default value', }); export const MyComponent = () => { - const [myAtom, setMyAtom] = useRecoilState(myAtomState); + const [myAtom, setMyAtom] = useRecoilState(myAtomState); - return ( -
- setMyAtom(e.target.value)} - /> -
- ); + return ( +
+ setMyAtom(e.target.value)} + /> +
+ ); } ``` @@ -40,7 +40,7 @@ export const MyComponent = () => { Vermeiden Sie die Verwendung von `useRef`, um den Zustand zu speichern. -Wenn Sie den Zustand speichern möchten, sollten Sie `useState` oder `useRecoilState` verwenden. +If you want to store state, you should use `useState` or `useRecoilState`. Sehen Sie sich [an, wie Re-Renderings verwaltet werden können](#managing-re-renders), falls Sie das Gefühl haben, dass Sie `useRef` benötigen, um einige Re-Renderings zu verhindern. @@ -56,23 +56,23 @@ Beachten Sie, dass Sie **immer** Re-Renderings vermeiden können, indem Sie dere Das Vermeiden von Re-Renderings in neuen Funktionen wird jetzt erleichtert, indem sie auf Root-Ebene eliminiert werden. -Die `PageChangeEffect`-Sidecar-Komponente enthält nur einen `useEffect`-Hook, der die gesamte Logik für den Seitenwechsel enthält. +The `PageChangeEffect` sidecar component contains just one `useEffect` that holds all the logic to execute on a page change. Auf diese Weise wissen Sie, dass es nur einen Ort gibt, der ein Re-Rendering auslösen kann. -### Denken Sie immer zweimal nach, bevor Sie `useEffect` in Ihre Codebasis aufnehmen. +### Always think twice before adding `useEffect` in your codebase -Re-Renderings werden oft durch unnötige `useEffect`-Verwendungen verursacht. +Re-renders are often caused by unnecessary `useEffect`. -Sie sollten überlegen, ob Sie `useEffect` benötigen oder ob Sie die Logik in eine Event-Handler-Funktion verschieben können. +You should think whether you need `useEffect`, or if you can move the logic in a event handler function. -Es ist in der Regel einfach, die Logik in eine `handleClick` oder `handleChange`-Funktion zu verschieben. +You'll find it generally easy to move the logic in a `handleClick` or `handleChange` function. Sie können sie auch in Bibliotheken wie Apollo finden: `onCompleted`, `onError`, usw. -### Verwenden Sie eine Geschwisterkomponente, um `useEffect`- oder Datenabruf-Logik auszulagern. +### Use a sibling component to extract `useEffect` or data fetching logic -Wenn Sie das Gefühl haben, Ihrer Root-Komponente einen `useEffect` hinzufügen zu müssen, sollten Sie erwägen, ihn in eine Sidecar-Komponente auszulagern. +If you feel like you need to add a `useEffect` in your root component, you should consider extracting it in a sidecar component. Dasselbe können Sie auch für die Datenabruflogik mit Apollo-Hooks anwenden. @@ -187,16 +187,16 @@ const [email, setEmail] = useState(''); Ereignis-Handler-Namen sollten mit `handle` beginnen, während `on` als Präfix dient, um Ereignisse in Komponenten-Props zu benennen. ```tsx -// ❌ Schlecht +// ❌ Bad const onEmailChange = (val: string) => { - // ... + // ... }; ``` ```tsx -// ✅ Gut +// ✅ Good const handleEmailChange = (val: string) => { - // ... + // ... }; ``` @@ -210,24 +210,24 @@ Betrachten Sie die unten definierte `EmailField`-Komponente: ```tsx type EmailFieldProps = { - value: string; - disabled?: boolean; + value: string; + disabled?: boolean; }; const EmailField = ({ value, disabled = false }: EmailFieldProps) => ( - + ); ``` **Verwendung** ```tsx -// ❌ Schlecht, den gleichen Wert wie den Standardwert übergeben, fügt keinen Wert hinzu +// ❌ Bad, passing in the same value as the default value adds no value const Form = () => ; ``` ```tsx -// ✅ Gut, nimmt den Standardwert an +// ✅ Good, assumes the default value const Form = () => ; ``` @@ -242,13 +242,13 @@ const SomeParentComponent = () => ; // In MyComponent const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => { - const theme = useTheme(); + const theme = useTheme(); - return ( -
- -
- ) + return ( +
+ +
+ ) }; ``` @@ -274,28 +274,28 @@ Beim Importieren sollten Sie die vorgesehenen Aliase anstelle der vollständigen ```js { - alias: { - "~": path.resolve(__dirname, "src"), - "@": path.resolve(__dirname, "src/modules"), - "@testing": path.resolve(__dirname, "src/testing"), - }, + alias: { + "~": path.resolve(__dirname, "src"), + "@": path.resolve(__dirname, "src/modules"), + "@testing": path.resolve(__dirname, "src/testing"), + }, } ``` **Verwendung** ```tsx -// ❌ Schlecht, gibt den vollständigen relativen Pfad an +// ❌ Bad, specifies the entire relative path import { - CatalogDecorator + CatalogDecorator } from '../../../../../testing/decorators/CatalogDecorator'; import { - ComponentDecorator + ComponentDecorator } from '../../../../../testing/decorators/ComponentDecorator'; ``` ```tsx -// ✅ Gut, nutzt die vorgesehenen Aliase +// ✅ Good, utilises the designated aliases import { CatalogDecorator } from '~/testing/decorators/CatalogDecorator'; import { ComponentDecorator } from 'twenty-ui/testing'; ``` @@ -306,16 +306,16 @@ import { ComponentDecorator } from 'twenty-ui/testing'; ```js const validationSchema = z - .object({ - exist: z.boolean(), - email: z - .string() - .email('Email muss eine gültige E-Mail sein'), - password: z - .string() - .regex(PASSWORD_REGEX, 'Passwort muss mindestens 8 Zeichen enthalten'), - }) - .required(); + .object({ + exist: z.boolean(), + email: z + .string() + .email('Email must be a valid email'), + password: z + .string() + .regex(PASSWORD_REGEX, 'Password must contain at least 8 characters'), + }) + .required(); type Form = z.infer; ``` diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/frontend-commands.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/frontend-commands.mdx index 1501dab325..db7ee3f76e 100644 --- a/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/frontend-commands.mdx +++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/frontend-commands.mdx @@ -73,7 +73,7 @@ Das Projekt hat einen sauberen und einfachen Stack mit minimalem Boilerplate-Cod [React Router](https://reactrouter.com/) übernimmt das Routing. -Um unnötige [Re-Renders](/l/de/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) zu vermeiden, befindet sich die gesamte Routing-Logik in einem `useEffect` in `PageChangeEffect`. +To avoid unnecessary [re-renders](/l/de/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) all the routing logic is in a `useEffect` in `PageChangeEffect`. ### Zustandsverwaltung diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/hotkeys.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/hotkeys.mdx index 510174523c..7b1ec7350e 100644 --- a/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/hotkeys.mdx +++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/hotkeys.mdx @@ -45,29 +45,29 @@ const PageListeningEnter = () => { goBackToPreviousHotkeyScope, } = usePreviousHotkeyScope(); - // 1. Setze den Tastenkombinationsbereich in einem useEffect + // 1. Set the hotkey scope in a useEffect useEffect(() => { setHotkeyScopeAndMemorizePreviousScope( ExampleHotkeyScopes.ExampleEnterPage, ); - // Zurückkehren zum vorherigen Tastenkombinationsbereich, wenn die Komponente entfernt wird + // Revert to the previous hotkey scope when the component is unmounted return () => { goBackToPreviousHotkeyScope(); }; }, [goBackToPreviousHotkeyScope, setHotkeyScopeAndMemorizePreviousScope]); - // 2. Verwenden Sie den useScopedHotkeys Hook + // 2. Use the useScopedHotkeys hook useScopedHotkeys( Key.Enter, () => { - // Eine Logik, die auf dieser Seite ausgeführt wird, wenn der Benutzer Enter drückt + // Some logic executed on this page when the user presses Enter // ... }, ExampleHotkeyScopes.ExampleEnterPage, ); - return
Meine Seite, die auf Enter hört
; + return
My page that listens for Enter
; }; ``` @@ -87,7 +87,7 @@ const ExamplePageWithModal = () => { } = usePreviousHotkeyScope(); const handleOpenModalClick = () => { - // 1. Setze den Tastenkombinationsbereich, wenn der Benutzer das Modal öffnet + // 1. Set the hotkey scope when user opens the modal setShowModal(true); setHotkeyScopeAndMemorizePreviousScope( ExampleHotkeyScopes.ExampleModal, @@ -95,14 +95,14 @@ const ExamplePageWithModal = () => { }; const handleModalClose = () => { - // 1. Zurückkehren zum vorherigen Tastenkombinationsbereich, wenn das Modal geschlossen wird + // 1. Revert to the previous hotkey scope when the modal is closed setShowModal(false); goBackToPreviousHotkeyScope(); }; return
-

Meine Seite mit einem Modal

- +

My page with a modal

+ {showModal && }
; }; @@ -112,9 +112,9 @@ Dann in der Modalkomponente: ```tsx const MyDropdownComponent = ({ onClose }: { onClose: () => void }) => { - // 2. Verwenden Sie den useScopedHotkeys Hook, um auf Escape zu hören. - // Beachten Sie, dass Escape eine gängige Tastenkombination ist, die von vielen anderen Komponenten verwendet werden könnte - // Daher ist es wichtig, einen Tastenkombinationsbereich zu verwenden, um Konflikte zu vermeiden + // 2. Use the useScopedHotkeys hook to listen for Escape. + // Note that escape is a common hotkey that could be used by many other components + // So it's important to use a hotkey scope to avoid conflicts useScopedHotkeys( Key.Escape, () => { @@ -123,13 +123,13 @@ const MyDropdownComponent = ({ onClose }: { onClose: () => void }) => { ExampleHotkeyScopes.ExampleModal, ); - return
Meine Modalkomponente
; + return
My modal component
; }; ``` -Es ist wichtig, dieses Muster zu verwenden, wenn Sie sich nicht sicher sind, ob das einfache Benutzen eines useEffect bei Ein-/Ausbindung ausreicht, um Konflikte zu vermeiden. +It's important to use this pattern when you're not sure that just using a useEffect with mount/unmount will be enough to avoid conflicts. -Diese Konflikte können schwer zu debuggen sein und treten möglicherweise häufiger auf, als man denkt, mit useEffects. +Those conflicts can be hard to debug, and it might happen more often than not with useEffects. ## Was ist ein Tastenkombinationsbereich? diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/style-guide.mdx index 4ce27c0680..9b0876df73 100644 --- a/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/style-guide.mdx +++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/style-guide.mdx @@ -21,16 +21,16 @@ Verwenden Sie immer TSX-Funktionskomponenten. Vermeiden Sie `import` mit `const`, da es schwieriger zu lesen und schwerer mit Code-Vervollständigung zu importieren ist. ```tsx -// ❌ Schlecht, schwerer zu lesen, schwerer zu importieren mit Code-Vervollständigung -const MeineKomponente = () => { - return
Hallo Welt
; +// ❌ Bad, harder to read, harder to import with code completion +const MyComponent = () => { + return
Hello World
; }; -export default MeineKomponente; +export default MyComponent; -// ✅ Gut, leicht zu lesen, leicht zu importieren mit Code-Vervollständigung -export function MeineKomponente() { - return
Hallo Welt
; +// ✅ Good, easy to read, easy to import with code completion +export function MyComponent() { + return
Hello World
; }; ``` @@ -41,26 +41,27 @@ Erstellen Sie den Typ der Eigenschaften (props) und nennen Sie ihn `(ComponentNa Verwenden Sie Destrukturierung der Props. ```tsx -// ❌ Schlecht, ohne Typ -export const MeineKomponente = (props) =>
Hallo {props.name}
; +// ❌ Bad, no type +export const MyComponent = (props) =>
Hello {props.name}
; -// ✅ Gut, mit Typ -type MeineKomponenteProps = { +// ✅ Good, type +type MyComponentProps = { name: string; }; -export const MeineKomponente = ({ name }: MeineKomponenteProps) =>
Hallo {name}
; +export const MyComponent = ({ name }: MyComponentProps) =>
Hello {name}
; ``` #### Vermeiden Sie die Verwendung von `React.FC` oder `React.FunctionComponent`, um Prop-Typen zu definieren ```tsx -/* ❌ - Schlecht, definiert die Komponententyp-Anmerkungen mit `FC` - * - Mit `React.FC` akzeptiert die Komponente implizit ein `children`-Prop, - * selbst wenn es nicht im Prop-Typ definiert ist. Dies ist nicht immer gewünscht, - * insbesondere wenn die Komponente nicht beabsichtigt, Kinder zu rendern. +/* ❌ - Bad, defines the component type annotations with `FC` + * - With `React.FC`, the component implicitly accepts a `children` prop + * even if it's not defined in the prop type. This might not always be + * desirable, especially if the component doesn't intend to render + * children. */ -const EmailFeld: React.FC<{ +const EmailField: React.FC<{ value: string; }> = ({ value }) => ; ``` @@ -85,10 +86,10 @@ const EmailField = ({ value }: EmailFieldProps) => ( Vermeiden Sie das Propspreading einzelner Variablen in JSX-Elementen, wie `{...props}`. Diese Praxis führt oft zu weniger lesbarem und schwer wartbarem Code, da unklar ist, welche Props die Komponente erhält. ```tsx -/* ❌ - Schlecht, spreadet ein einzelnes Variablen-Prop in die darunterliegende Komponente +/* ❌ - Bad, spreads a single variable prop into the underlying component */ -const MeineKomponente = (props: EigeneProps) => { - return ; +const MyComponent = (props: OwnProps) => { + return ; } ``` @@ -136,13 +137,13 @@ onClick?.(); Verwenden Sie immer `type` anstelle von `interface`, da sie fast immer überlappen und `type` flexibler ist. ```tsx -// ❌ Schlecht -interface MeinInterface { +// ❌ Bad +interface MyInterface { name: string; } -// ✅ Gut -type MeinTyp = { +// ✅ Good +type MyType = { name: string; }; ``` @@ -154,14 +155,14 @@ type MeinTyp = { Warum TypeScript empfiehlt, Enums zu vermeiden, sehen Sie [hier](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums). ```tsx -// ❌ Schlecht, verwendet ein Enum -enum Farbe { - Rot = "red", - Grün = "green", - Blau = "blue", +// ❌ Bad, utilizes an enum +enum Color { + Red = "red", + Green = "green", + Blue = "blue", } -let farbe = Farbe.Rot; +let color = Color.Red; ``` ```tsx @@ -262,13 +263,13 @@ const StyledButton = styled.button` Vermeiden Sie Typ-Importe. Um diesen Standard durchzusetzen, überprüft eine ESLint-Regel alle Typ-Importe und meldet sie. Dies trägt zur Konsistenz und Lesbarkeit des TypeScript-Codes bei. ```tsx -// ❌ Schlecht +// ❌ Bad import { type Meta, type StoryObj } from '@storybook/react'; -// ❌ Schlecht +// ❌ Bad import type { Meta, StoryObj } from '@storybook/react'; -// ✅ Gut +// ✅ Good import { Meta, StoryObj } from '@storybook/react'; ``` diff --git a/packages/twenty-docs/l/de/twenty-ui/input/icon-picker.mdx b/packages/twenty-docs/l/de/twenty-ui/input/icon-picker.mdx index be505d335f..1c8797a8a4 100644 --- a/packages/twenty-docs/l/de/twenty-ui/input/icon-picker.mdx +++ b/packages/twenty-docs/l/de/twenty-ui/input/icon-picker.mdx @@ -20,7 +20,7 @@ A dropdown-based icon picker that allows users to select an icon from a list. const [selectedIcon, setSelectedIcon] = useState(""); const handleIconChange = ({ iconKey, Icon }) => { - console.log("Gewähltes Symbol:", iconKey); + console.log("Selected Icon:", iconKey); setSelectedIcon(iconKey); }; 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 0c542e787d..995ccea198 100644 --- a/packages/twenty-docs/l/de/twenty-ui/navigation/breadcrumb.mdx +++ b/packages/twenty-docs/l/de/twenty-ui/navigation/breadcrumb.mdx @@ -17,10 +17,10 @@ Erstellt eine Navigationsleiste mit Brotkrumen. export const MyComponent = () => { const breadcrumbLinks = [ - { children: "Startseite", href: "/" }, - { children: "Kategorie", href: "/category" }, - { children: "Unterkategorie", href: "/category/subcategory" }, - { children: "Aktuelle Seite" }, + { children: "Home", href: "/" }, + { children: "Category", href: "/category" }, + { children: "Subcategory", href: "/category/subcategory" }, + { children: "Current Page" }, ]; return ( diff --git a/packages/twenty-docs/l/de/twenty-ui/navigation/links.mdx b/packages/twenty-docs/l/de/twenty-ui/navigation/links.mdx index 359760d9a9..fc6cdc4a27 100644 --- a/packages/twenty-docs/l/de/twenty-ui/navigation/links.mdx +++ b/packages/twenty-docs/l/de/twenty-ui/navigation/links.mdx @@ -20,7 +20,7 @@ A stylized link component for displaying contact information. export const MyComponent = () => { const handleLinkClick = (event) => { - console.log('Kontaktlink geklickt!', event); + console.log('Contact link clicked!', event); }; return ( @@ -60,13 +60,13 @@ A stylized link component for displaying links. export const MyComponent = () => { const handleLinkClick = (event) => { - console.log("Kontaktlink geklickt!", event); + console.log("Contact link clicked!", event); }; return ( - Kontaktieren Sie uns + Contact Us ); @@ -97,13 +97,13 @@ A rounded-styled link with a Chip component for links. export const MyComponent = () => { const handleLinkClick = (event) => { - console.log("Kontaktlink geklickt!", event); + console.log("Contact link clicked!", event); }; return ( - Kontaktieren Sie uns + Contact Us ); diff --git a/packages/twenty-docs/l/de/twenty-ui/navigation/menu-item.mdx b/packages/twenty-docs/l/de/twenty-ui/navigation/menu-item.mdx index c92f61992e..57853dfd96 100644 --- a/packages/twenty-docs/l/de/twenty-ui/navigation/menu-item.mdx +++ b/packages/twenty-docs/l/de/twenty-ui/navigation/menu-item.mdx @@ -18,18 +18,18 @@ Ein vielseitiger Menüpunkt, der in einem Menü oder einer Navigationsliste verw export const MyComponent = () => { const handleMenuItemClick = (event) => { - console.log("Menüpunkt angeklickt!", event); + console.log("Menu item clicked!", event); }; const handleButtonClick = (event) => { - console.log("Symbolschaltfläche angeklickt!", event); + console.log("Icon button clicked!", event); }; return ( { const handleCommandClick = () => { - console.log("Befehl geklickt!"); + console.log("Command clicked!"); }; return ( { const handleMenuItemClick = (event) => { - console.log("Menüelement geklickt!", event); + console.log("Menu item clicked!", event); }; return ( @@ -125,7 +125,7 @@ Ein verschiebbares Menüelement, das in einem Menü oder einer Liste verwendet w iconButtons={[{ Icon: IconAlertCircle, onClick: handleButtonClick }]} isTooltipOpen={false} onClick={handleMenuItemClick} - text="Menüelement verschiebbar" + text="Menu item draggable" isDragDisabled={false} className /> @@ -163,7 +163,7 @@ Bietet eine Möglichkeit, eine Mehrfachauswahl-Funktionalität mit einem zugehö return ( @@ -199,7 +199,7 @@ Ein Mehrfachauswahl-Menüelement mit einem Avatar, einem Kontrollkästchen zur A return ( } - text="Erste Option" + text="First Option" selected={false} className /> @@ -231,13 +231,13 @@ Ein Menüelement mit einem optionalen linken Symbol, Textinhalt und einem nach r export const MyComponent = () => { const handleNavigation = () => { - console.log("Zu einer anderen Seite navigieren"); + console.log("Navigate to another page"); }; return ( @@ -268,13 +268,13 @@ Ein auswählbares Menüelement mit optionalem linken Inhalt (Symbol und Text) un export const MyComponent = () => { const handleSelection = () => { - console.log("Menüelement ausgewählt"); + console.log("Menu item selected"); }; return ( } - text="Erste Option" + text="First Option" selected={true} disabled={false} hovered={false} @@ -358,7 +358,7 @@ Ein wählbares Menüelement mit Farbbeispiel für Situationen, in denen Benutzer export const MyComponent = () => { const handleSelection = () => { - console.log("Menüpunkt ausgewählt"); + console.log("Menu item selected"); }; return ( @@ -405,7 +405,7 @@ Ein Menüelement mit einem zugehörigen Umschalter, mit dem Benutzer eine bestim return ( console.log("Home geklickt"), + onClick: () => console.log("Home clicked"), }, { - name: "Profil", + name: "Profile", Icon: IconUser, - onClick: () => console.log("Profil geklickt"), + onClick: () => console.log("Profile clicked"), }, { - name: "Einstellungen", + name: "Settings", Icon: IconSettings, - onClick: () => console.log("Einstellungen geklickt"), + onClick: () => console.log("Settings clicked"), }, ]; diff --git a/packages/twenty-docs/l/de/twenty-ui/navigation/step-bar.mdx b/packages/twenty-docs/l/de/twenty-ui/navigation/step-bar.mdx index c5dd7d17d0..24c1b4031f 100644 --- a/packages/twenty-docs/l/de/twenty-ui/navigation/step-bar.mdx +++ b/packages/twenty-docs/l/de/twenty-ui/navigation/step-bar.mdx @@ -17,9 +17,9 @@ Zeigt den Fortschritt durch eine Folge von nummerierten Schritten, indem der akt export const MyComponent = () => { return ( - Schritt 1 - Schritt 2 - Schritt 3 + Step 1 + Step 2 + Step 3 ); }; diff --git a/packages/twenty-docs/l/de/user-guide/ai/capabilities/permissions-access-control.mdx b/packages/twenty-docs/l/de/user-guide/ai/capabilities/permissions-access-control.mdx index 9df712a10a..e60f7a3058 100644 --- a/packages/twenty-docs/l/de/user-guide/ai/capabilities/permissions-access-control.mdx +++ b/packages/twenty-docs/l/de/user-guide/ai/capabilities/permissions-access-control.mdx @@ -1,5 +1,5 @@ --- -title: Berechtigungen & Zugriffskontrolle},{ +title: Permissions & Access Control description: Steuern Sie, auf welche Daten KI-Agenten in Ihrem Arbeitsbereich zugreifen und was sie dort ändern können. --- diff --git a/packages/twenty-docs/l/de/user-guide/billing/overview.mdx b/packages/twenty-docs/l/de/user-guide/billing/overview.mdx index ee12587e41..1b14036e26 100644 --- a/packages/twenty-docs/l/de/user-guide/billing/overview.mdx +++ b/packages/twenty-docs/l/de/user-guide/billing/overview.mdx @@ -1,6 +1,6 @@ --- title: Abrechnung -description: Understand Twenty pricing and manage your subscription. +description: Verstehen Sie die Preisgestaltung von Twenty und verwalten Sie Ihr Abonnement. image: /images/user-guide/setup/pricing.png --- @@ -8,38 +8,38 @@ image: /images/user-guide/setup/pricing.png Abrechnung -Twenty offers flexible pricing plans to fit your team's needs. Manage your subscription, track workflow credits, and access invoices all from **Settings → Billing**. +Twenty bietet flexible Preispläne, die den Bedürfnissen Ihres Teams entsprechen. Verwalten Sie Ihr Abonnement, verfolgen Sie Workflow-Guthaben und greifen Sie auf Rechnungen zu – alles über **Einstellungen → Abrechnung**. -## What's in this section +## Was enthält dieser Abschnitt - - Learn about Twenty's pricing plans and what's included. + + Erfahren Sie mehr über die Preispläne von Twenty und was enthalten ist. - Frequently asked questions about pricing and billing. + Häufig gestellte Fragen zu Preisen und Abrechnung. -## At a glance +## Auf einen Blick -| Plan | Key Features | -| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **Free (Self-Hosted)** | All Pro features, community support | -| **Pro (Cloud)** | Everything apart from the Premium features (SSO and row-level permissions), standard support | -| **Organization (Cloud)** | All from Pro + the Premium features (SSO and row-level permissions), priority support | -| **Organization (Self-Hosted)** | All from Pro + the Premium features (SSO, row-level permissions), Twenty team support, not required to publish your custom code as open-source before distributing | +| Plan | Wichtige Funktionen | +| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Kostenlos (Selbstgehostet)** | Alle Pro-Funktionen, Community-Support | +| **Pro (Cloud)** | Alles außer den Premium-Funktionen (SSO und zeilenbezogene Berechtigungen), Standardsupport | +| **Organisation (Cloud)** | Alles aus Pro + die Premium-Funktionen (SSO und zeilenbezogene Berechtigungen), priorisierter Support | +| **Organisation (Selbstgehostet)** | Alles aus Pro + die Premium-Funktionen (SSO, zeilenbezogene Berechtigungen), Support durch das Twenty-Team, keine Pflicht, Ihren benutzerdefinierten Code vor der Verteilung als Open Source zu veröffentlichen | -## Quick answers +## Schnelle Antworten -**Where do I manage billing?** -Go to **Settings → Billing** to view your plan, update payment methods, and access invoices. +**Wo verwalte ich die Abrechnung?** +Gehen Sie zu **Einstellungen → Abrechnung**, um Ihren Plan anzusehen, Zahlungsmethoden zu aktualisieren und auf Rechnungen zuzugreifen. -**Can I use Twenty for free?** -Yes! Self-host Twenty and get all Pro features at no cost. +**Kann ich Twenty kostenlos nutzen?** +Ja! Hosten Sie Twenty selbst und erhalten Sie alle Pro-Funktionen kostenlos. -**How do I upgrade?** -Go to **Settings → Billing** and click **Switch to Organization** or **Switch to Yearly**. +**Wie führe ich ein Upgrade durch?** +Gehen Sie zu **Einstellungen → Abrechnung** und klicken Sie auf **Zu Organisation wechseln** oder **Zum Jahresplan wechseln**. -For more questions, see the [Billing FAQ](/l/de/user-guide/billing/how-tos/billing-faq). +Weitere Fragen finden Sie in den [Abrechnungs-FAQs](/l/de/user-guide/billing/how-tos/billing-faq). diff --git a/packages/twenty-docs/l/de/user-guide/calendar-emails/capabilities/calendar.mdx b/packages/twenty-docs/l/de/user-guide/calendar-emails/capabilities/calendar.mdx index a84a2165cb..2c814e601c 100644 --- a/packages/twenty-docs/l/de/user-guide/calendar-emails/capabilities/calendar.mdx +++ b/packages/twenty-docs/l/de/user-guide/calendar-emails/capabilities/calendar.mdx @@ -1,23 +1,23 @@ --- title: Kalender -description: Understanding calendar integration features in Twenty. +description: Die Funktionen der Kalenderintegration in Twenty verstehen. --- -**Note**: To connect your calendar and configure sync settings, visit [Email & Calendar Setup](/l/de/user-guide/calendar-emails/overview). +**Hinweis**: Um Ihren Kalender zu verbinden und die Synchronisierungseinstellungen zu konfigurieren, besuchen Sie [E-Mail- & Kalendereinrichtung](/l/de/user-guide/calendar-emails/overview). -## How Calendar Integration Works +## Wie die Kalenderintegration funktioniert -Twenty automatically syncs your calendar events and links them to the relevant CRM records, giving you a complete view of your meeting history with contacts and companies. +Twenty synchronisiert Ihre Kalendertermine automatisch und verknüpft sie mit den entsprechenden CRM-Datensätzen, sodass Sie einen vollständigen Überblick über Ihre Meeting-Historie mit Kontakten und Unternehmen erhalten. ## Kalender-Reiter -Next to the Emails tab on records, you'll find a `Calendar` tab that contains the history of meetings scheduled with the record. +Neben dem Reiter E-Mails in Datensätzen finden Sie einen Reiter `Kalender`, der die Historie der mit dem Datensatz geplanten Meetings enthält. -### Available For +### Verfügbar für * **Personen**: Alle mit einem bestimmten Kontakt geplanten Meetings anzeigen * **Unternehmen**: Alle Meetings im Zusammenhang mit einem Unternehmen und seinen Mitarbeitern anzeigen -* **Opportunities**: Access meeting history related to the company linked to this opportunity +* **Chancen**: Zugriff auf die Meeting-Historie zur Firma, die mit dieser Chance verknüpft ist ### Meeting-Historie anzeigen @@ -26,18 +26,18 @@ Next to the Emails tab on records, you'll find a `Calendar` tab that contains th 3. **Durchsuchen Sie die Meeting-Historie**: Alle geplanten Meetings und deren Details anzeigen 4. **Auf Meeting-Kontext zugreifen**: Teilnehmer, Zeiten und verwandte Informationen einsehen -## Visibility Settings +## Sichtbarkeitseinstellungen -Calendar data follows the same visibility settings as emails, ensuring consistent privacy controls across both communication channels. +Kalenderdaten folgen denselben Sichtbarkeitseinstellungen wie E-Mails und gewährleisten konsistente Datenschutzkontrollen in beiden Kommunikationskanälen. ## Was synchronisiert wird -* **External Meetings**: All meetings with contacts outside your organization -* **Automatic Linking**: Meetings connect to existing People and Company records based on attendee email addresses -* **Meeting Details**: Subject, time, duration, and participants -* **Updates**: New calendar events sync automatically +* **Externe Meetings**: Alle Meetings mit Kontakten außerhalb Ihrer Organisation +* **Automatische Verknüpfung**: Meetings werden basierend auf den E-Mail-Adressen der Teilnehmer mit bestehenden Personen- und Firmendatensätzen verknüpft +* **Meeting-Details**: Betreff, Uhrzeit, Dauer und Teilnehmer +* **Aktualisierungen**: Neue Kalendertermine werden automatisch synchronisiert ## Was nicht synchronisiert wird -* **Internal Meetings**: Meetings with only colleagues (same domain) remain private -* **Private Events**: Events marked as private in your calendar +* **Interne Meetings**: Meetings zwischen Kollegen (gleiche Domain) bleiben privat +* **Private Termine**: Termine, die in Ihrem Kalender als privat markiert sind diff --git a/packages/twenty-docs/l/de/user-guide/dashboards/how-tos/dashboards-faq.mdx b/packages/twenty-docs/l/de/user-guide/dashboards/how-tos/dashboards-faq.mdx index 4f50185c4a..317355deca 100644 --- a/packages/twenty-docs/l/de/user-guide/dashboards/how-tos/dashboards-faq.mdx +++ b/packages/twenty-docs/l/de/user-guide/dashboards/how-tos/dashboards-faq.mdx @@ -1,59 +1,59 @@ --- title: Dashboards FAQ -description: Frequently asked questions about dashboards in Twenty. +description: Häufig gestellte Fragen zu Dashboards in Twenty. --- - - No, dashboards are currently visible to everyone with access to your Twenty workspace. Private dashboards are not yet available. + + Nein, Dashboards sind derzeit für alle sichtbar, die Zugriff auf deinen Twenty-Arbeitsbereich haben. Private Dashboards sind noch nicht verfügbar. - - Dashboards currently display data based on the viewer's timezone. If you're in different regions (e.g., APAC vs. US), you may see slightly different numbers for the same dashboard. We're working on adding a timezone setting per dashboard to ensure consistent data across teams. + + Dashboards zeigen derzeit Daten basierend auf der Zeitzone der betrachtenden Person. Befinden sich Personen in unterschiedlichen Regionen (z. B. APAC vs. USA), können für dasselbe Dashboard leicht unterschiedliche Zahlen angezeigt werden. Wir arbeiten daran, eine Zeitzonen-Einstellung pro Dashboard hinzuzufügen, um teamübergreifend konsistente Daten sicherzustellen. - - Exporting dashboards is not available at the moment. This feature is on our roadmap. + + Das Exportieren von Dashboards ist derzeit nicht verfügbar. Diese Funktion steht auf unserer Roadmap. - - No, sharing dashboards with users outside your Twenty workspace (non-Twenty users) is not currently supported. + + Nein, das Teilen von Dashboards mit Benutzerinnen und Benutzern außerhalb deines Twenty-Arbeitsbereichs (Nicht-Twenty-Benutzer) wird derzeit nicht unterstützt. - - Open the dashboard you want to favorite, then click the star icon. Favorites are personal—they won't affect other users. + + Öffne das Dashboard, das du zu den Favoriten hinzufügen möchtest, und klicke dann auf das Sternsymbol. Favoriten sind persönlich – sie wirken sich nicht auf andere Benutzer aus. - - * **Tabs** organize your dashboard into sections (like pages within the dashboard) - * **Widgets** are the individual visualizations (charts, numbers, iFrames) within each tab + + * **Tabs** organisieren dein Dashboard in Abschnitte (ähnlich wie Seiten innerhalb des Dashboards) + * **Widgets** sind die einzelnen Visualisierungen (Diagramme, Zahlen, iFrames) innerhalb jedes Tabs - Structure: Dashboard → Tabs → Widgets + Struktur: Dashboard → Tabs → Widgets - - Bar charts have display limits: 100 bars for horizontal charts, 50 for vertical. If your data exceeds this, add filters to narrow down the results or change the grouping (e.g., group by week instead of day). + + Balkendiagramme haben Anzeigegrenzen: 100 Balken bei horizontalen Diagrammen, 50 bei vertikalen. Wenn deine Daten darüber hinausgehen, füge Filter hinzu, um die Ergebnisse einzugrenzen, oder ändere die Gruppierung (z. B. nach Woche statt nach Tag gruppieren). - - Dashboard-level filters are not available yet, but this feature is on our roadmap. Currently, you need to apply filters to each widget individually. + + Filter auf Dashboard-Ebene sind noch nicht verfügbar, aber diese Funktion steht auf unserer Roadmap. Derzeit musst du Filter für jedes Widget einzeln anwenden. - - Noch nicht. Gauge charts and tables are on our roadmap and will be added in a future release. + + Noch nicht. Tachometerdiagramme und Tabellen stehen auf unserer Roadmap und werden in einer zukünftigen Version hinzugefügt. - - 1. Make sure you're in view mode (not editing) - 2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows) - 3. Select **Duplicate dashboard** + + 1. Stelle sicher, dass du im Ansichtsmodus bist (nicht im Bearbeitungsmodus) + 2. Öffne die Befehlspalette mit **Cmd + K** (oder **Strg + K** unter Windows) + 3. Wähle **Dashboard duplizieren** - - Widgets update automatically as your CRM data changes: + + Widgets aktualisieren sich automatisch, wenn sich deine CRM-Daten ändern: - * Real-time updates for most metrics - * Use the refresh button for a manual update if needed - * Historical data is preserved for trend analysis + * Echtzeitaktualisierungen für die meisten Kennzahlen + * Verwende bei Bedarf die Schaltfläche zum Aktualisieren für eine manuelle Aktualisierung + * Historische Daten bleiben für Trendanalysen erhalten diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/field-mapping.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/field-mapping.mdx index 487a955154..69d342f9bb 100644 --- a/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/field-mapping.mdx +++ b/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/field-mapping.mdx @@ -1,176 +1,176 @@ --- -title: Field Mapping -description: How field mapping works during data import. +title: Feldzuordnung +description: Wie die Feldzuordnung beim Datenimport funktioniert. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## How Field Mapping Works +## Wie die Feldzuordnung funktioniert -When you upload a file, Twenty analyzes your columns and attempts to match them to existing fields. +Wenn Sie eine Datei hochladen, analysiert Twenty Ihre Spalten und versucht, sie bestehenden Feldern zuzuordnen. -### Automatic Mapping +### Automatische Zuordnung -Twenty tries to match columns based on: +Twenty versucht, Spalten anhand der folgenden Kriterien abzugleichen: -* Column header names (exact or similar matches) -* Data type detection (dates, numbers, emails) -* Common field patterns +* Spaltenüberschriften (genaue oder ähnliche Übereinstimmungen) +* Erkennung des Datentyps (Datum, Zahlen, E-Mails) +* Häufige Feldmuster -**Quick tip:** Export a few rows from the object you want to import. The exported file will have the exact column names Twenty expects, making automatic mapping seamless during import. +**Schneller Tipp:** Exportieren Sie ein paar Zeilen aus dem Objekt, das Sie importieren möchten. Die exportierte Datei enthält genau die Spaltennamen, die Twenty erwartet, sodass die automatische Zuordnung beim Import reibungslos funktioniert. -### Manual Mapping Options +### Optionen für die manuelle Zuordnung -For each column, you can: +Für jede Spalte können Sie: -* **Map to a field**: Select the matching Twenty field from a dropdown -* **Do not map**: Skip the column entirely (data won't be imported) +* **Einem Feld zuordnen**: Wählen Sie das passende Twenty-Feld aus einem Dropdown aus +* **Nicht zuordnen**: Überspringen Sie die Spalte vollständig (Daten werden nicht importiert) -**Fields must exist before import.** The import creates records, not fields. Create custom fields under **Settings → Data Model** before importing. +**Felder müssen vor dem Import existieren.** Der Import erzeugt Datensätze, nicht Felder. Erstellen Sie benutzerdefinierte Felder vor dem Import unter **Einstellungen → Datenmodell**. -## Field Type Compatibility +## Kompatibilität der Feldtypen -All field types available in the Data Model are supported for import. +Alle im Datenmodell verfügbaren Feldtypen werden für den Import unterstützt. -You can also import `id` values to either assign a specific ID to new records or update existing ones. +Sie können auch `id`-Werte importieren, um neuen Datensätzen eine bestimmte ID zuzuweisen oder vorhandene zu aktualisieren. -## Data Format Requirements +## Anforderungen an das Datenformat -**Some fields have special syntax.** We recommend downloading the sample file before preparing your import to see the expected syntax for each field type. +**Einige Felder haben eine spezielle Syntax.** Wir empfehlen, vor der Vorbereitung Ihres Imports die Beispieldatei herunterzuladen, um die erwartete Syntax für jeden Feldtyp zu sehen. -### Address Fields +### Adressfelder -Address is a nested field with multiple columns. Some can be left empty. +Adresse ist ein verschachteltes Feld mit mehreren Spalten. Einige können leer bleiben. -* **Address / Address 1**: Street address line 1 -* **Address / Address 2**: Street address line 2 -* **Address / City**: City name -* **Address / State**: State or province -* **Address / Country**: Country name -* **Address / Post Code**: Postal/ZIP code +* **Adresse / Adresszeile 1**: Adresszeile 1 +* **Adresse / Adresszeile 2**: Adresszeile 2 +* **Adresse / Stadt**: Stadtname +* **Adresse / Bundesland**: Bundesland oder Provinz +* **Adresse / Land**: Ländername +* **Adresse / Postleitzahl**: Postleitzahl/ZIP-Code -### Array Fields +### Array-Felder -Use the following format: +Verwenden Sie folgendes Format: ``` ["value1","value2"] ``` -### Boolean Fields +### Boolesche Felder -Use `TRUE` or `FALSE` (uppercase) - not `true` or `false` +Verwenden Sie `TRUE` oder `FALSE` (Großbuchstaben) – nicht `true` oder `false` -### Currency Fields +### Währungsfelder -Currency is a nested field with two columns that **both must be filled**: +Währung ist ein verschachteltes Feld mit zwei Spalten, die **beide ausgefüllt werden müssen**: -* **Amount / Amount**: The numeric value (e.g., `1234.56`) -* **Amount / Currency**: The currency code (e.g., `USD`, `EUR`) +* **Betrag / Betrag**: Der Zahlenwert (z. B. `1234.56`) +* **Betrag / Währung**: Der Währungscode (z. B. `USD`, `EUR`) -### Date Fields +### Datumsfelder -Supported formats: +Unterstützte Formate: -* `YYYY-MM-DD` (recommended) +* `YYYY-MM-DD` (empfohlen) * `MM/DD/YYYY` * `DD/MM/YYYY` -* ISO 8601 format +* ISO-8601-Format -### Domain Fields +### Domain-Felder -* It is recommended to use the format `https://domain.com` to avoid creating duplicates, as this is the format used for Companies created by the mailbox and calendar synchronizations -* A `Domain Label` and `Domain URL` can be filled: best practice is to fill `domain.com` in the label and `https://domain.com` in the url -* Domains must be unique within the Companies object -* **Domains must be unique within the file to import** +* Es wird empfohlen, das Format `https://domain.com` zu verwenden, um Duplikate zu vermeiden, da dies das Format für Unternehmen ist, die durch die Postfach- und Kalender-Synchronisierungen erstellt werden. +* Es können ein `Domain Label` und eine `Domain URL` ausgefüllt werden: Best Practice ist, im Label `domain.com` und in der URL `https://domain.com` anzugeben +* Domains müssen im Objekt Unternehmen eindeutig sein +* **Domains müssen innerhalb der zu importierenden Datei eindeutig sein** -### Email Fields +### E-Mail-Felder -* Must be valid email format -* Emails must be unique within the People object -* **Emails must be unique within the file to import** -* For additional emails: use **Emails / Primary Email** for the main email, and **Emails / Additional Emails** with this format: +* Müssen ein gültiges E-Mail-Format haben +* E-Mails müssen im Objekt Personen eindeutig sein +* **E-Mails müssen innerhalb der zu importierenden Datei eindeutig sein** +* Für zusätzliche E-Mails: Verwenden Sie **E-Mails / Primäre E-Mail** für die Haupt-E-Mail und **E-Mails / Zusätzliche E-Mails** mit diesem Format: ``` ["jane@twenty.com","jane.doe@twenty.com"] ``` -### Id Fields +### ID-Felder -Specifying an `id` during import is optional. Twenty auto-generates one if not provided. +Die Angabe einer `id` während des Imports ist optional. Twenty erzeugt automatisch eine, wenn keine angegeben wird. -Use cases for mapping an `id` column: +Anwendungsfälle für die Zuordnung einer `id`-Spalte: -* **Set a specific ID**: Choose the UUID for newly created records -* **Update existing records**: Match against existing records to update them instead of creating duplicates. In that case, it is recommended to not map the other unique fields: mapping only one unique field ensures a smoother import. +* **Spezifische ID festlegen**: Wählen Sie die UUID für neu erstellte Datensätze +* **Vorhandene Datensätze aktualisieren**: Gegen vorhandene Datensätze abgleichen, um sie zu aktualisieren, anstatt Duplikate zu erstellen. In diesem Fall wird empfohlen, die anderen eindeutigen Felder nicht zuzuordnen: Die Zuordnung nur eines eindeutigen Feldes sorgt für einen reibungsloseren Import. -If you provide an `id`, it must be in UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`). +Wenn Sie eine `id` angeben, muss sie im UUID-Format sein (z. B. `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`). -### JSON Fields +### JSON-Felder -Use valid JSON format: +Verwenden Sie gültiges JSON-Format: ``` {"key":"value","key2":"value2"} ``` -### Links Fields +### Link-Felder -Similar to Domain fields: +Ähnlich wie Domain-Felder: -* Fill both the label and URL columns: **Links / Link URL** and **Links / Link Label** -* Use full URL format: `https://example.com` -* For secondary links, use **Links / Secondary Links** column with this format: +* Füllen Sie sowohl die Spalten für Label und URL aus: **Links / Link-URL** und **Links / Link-Label** +* Verwenden Sie das vollständige URL-Format: `https://example.com` +* Für sekundäre Links verwenden Sie die Spalte **Links / Sekundäre Links** mit diesem Format: ``` [{"url":"https://twenty.com","label":"Twenty"}] ``` -### Multi-Select Fields +### Mehrfachauswahl-Felder -Use the **API names** (not the display labels) in the following format: +Verwenden Sie die **API-Namen** (nicht die Anzeigenamen) in folgendem Format: ``` ["VALUE1","VALUE2"] ``` -See [here](#finding-api-names-for-select-fields) where to find the API names. +Siehe [hier](#finding-api-names-for-select-fields), wo Sie die API-Namen finden. -New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing. +Neue Auswahloptionen werden durch den Import nicht automatisch erstellt. Sie müssen vor dem Import unter **Einstellungen → Datenmodell** hinzugefügt werden. - **Import overwrites, it does not add.** + **Der Import überschreibt, er fügt nichts hinzu.** - If a record already has `VALUE2` and `VALUE3` selected, and you import `["VALUE1"]`, the record will only have `VALUE1` after import. The previous selections are replaced, not merged. + Wenn ein Datensatz bereits `VALUE2` und `VALUE3` ausgewählt hat und Sie `[\"VALUE1\"]` importieren, hat der Datensatz nach dem Import nur noch `VALUE1`. Die bisherigen Auswahlen werden ersetzt, nicht zusammengeführt. -### Number Fields +### Zahlenfelder -* Numbers only -* Decimals use period: `1234.56` -* No thousands separators +* Nur Zahlen +* Dezimalzahlen verwenden einen Punkt: `1234.56` +* Keine Tausendertrennzeichen -### Phone Fields +### Telefonfelder -Phone is a nested field with multiple columns that **must be filled** +Telefon ist ein verschachteltes Feld mit mehreren Spalten, die **ausgefüllt werden müssen** -* **Phones / Primary Phone Number**: The phone number (e.g., `4159095555`) -* **Phones / Primary Phone Country Code**: Country code (e.g., `US`) -* **Phones / Primary Phone Calling Code**: Dialing code (e.g., `+1`) +* **Telefone / Primäre Telefonnummer**: Die Telefonnummer (z. B. `4159095555`) +* **Telefone / Ländercode der primären Telefonnummer**: Ländercode (z. B. `US`) +* **Telefone / Vorwahl der primären Telefonnummer**: Vorwahl (z. B. `+1`) -### Rating Fields +### Bewertungsfelder -Use the API name format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5` +Verwenden Sie das API-Namensformat: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5` ### Relationsfelder -Please see our dedicated article: [Import Relations Between Objects](/l/de/user-guide/data-migration/capabilities/import-relations) +Weitere Informationen finden Sie in unserem dedizierten Artikel: [Beziehungen zwischen Objekten importieren](/l/de/user-guide/data-migration/capabilities/import-relations) ### Auswahlfelder -Use the **API name** of the option (not the display label): +Verwenden Sie den **API-Namen** der Option (nicht den Anzeigenamen): ``` VALUE1 diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx index 8f0c3825e2..c6806c79ba 100644 --- a/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx +++ b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx @@ -1,5 +1,5 @@ --- -title: Bereiten Sie Ihre CSV-Dateien vor},{ +title: Prepare Your CSV Files description: Vollständige Schritt-für-Schritt-Anleitung zum Formatieren deiner Daten für den Import in Twenty. --- @@ -87,114 +87,114 @@ Telefon ist ein **verschachteltes Feld**, das mehrere Spalten benötigt: | **Phones / Primary Phone Country Code** | `US` | | **Phones / Primary Phone Calling Code** | `+1` | -### Address Fields +### Adressfelder -Address is a **nested field** with multiple columns (some can be left empty): +Adresse ist ein **verschachteltes Feld** mit mehreren Spalten (einige können leer bleiben): -* **Address / Address 1**: Street address line 1 -* **Address / Address 2**: Street address line 2 (optional) -* **Address / City**: City name -* **Address / State**: State or province -* **Address / Country**: Country name -* **Address / Post Code**: Postal/ZIP code +* **Adresse / Adresse 1**: Straßenadresse Zeile 1 +* **Adresse / Adresse 2**: Straßenadresse Zeile 2 (optional) +* **Adresse / Stadt**: Stadtname +* **Adresse / Bundesland**: Bundesstaat oder Provinz +* **Adresse / Land**: Name des Landes +* **Adresse / Postleitzahl**: Postleitzahl/ZIP-Code -### Date Fields +### Datumsfelder -Use consistent formatting throughout your file: +Verwenden Sie in Ihrer Datei ein einheitliches Format: -* `YYYY-MM-DD` (recommended): `2024-03-15` +* `YYYY-MM-DD` (empfohlen): `2024-03-15` * `MM/DD/YYYY`: `03/15/2024` * `DD/MM/YYYY`: `15/03/2024` * ISO 8601: `2024-03-15T10:30:00Z` -### Number Fields +### Zahlenfelder -* Numbers only (no text) -* Use period for decimals: `1234.56` -* No thousands separators (not `1,234.56`) +* Nur Zahlen (kein Text) +* Verwenden Sie den Punkt für Dezimalstellen: `1234.56` +* Keine Tausendertrennzeichen (nicht `1,234.56`) -### Currency Fields +### Währungsfelder -Currency is a **nested field** requiring two columns that **both must be filled**: +Währung ist ein **verschachteltes Feld** und erfordert zwei Spalten, die **beide ausgefüllt werden müssen**: -| Column | Beispiel | -| --------------------- | --------- | -| **Amount / Amount** | `1234.56` | -| **Amount / Currency** | `USD` | +| Spalte | Beispiel | +| -------------------- | --------- | +| **Betrag / Betrag** | `1234.56` | +| **Betrag / Währung** | `USD` | -### Boolean Fields +### Boolesche Felder -Use uppercase: `TRUE` or `FALSE` +Großschreibung verwenden: `TRUE` oder `FALSE` -Lowercase `true` or `false` will not work. +Kleinschreibung `true` oder `false` funktioniert nicht. ### Auswahlfelder -Use the **API name** of the option, not the display label. +Verwenden Sie den **API-Namen** der Option, nicht den Anzeigenamen. -**How to find API names:** +**So finden Sie API-Namen:** -1. Go to **Settings → Data Model** -2. Select the object and field -3. Enable **Advanced mode** (toggle at bottom right) -4. Copy the API name (e.g., `OPTION_1`, not "Option 1") +1. Gehen Sie zu **Einstellungen → Datenmodell** +2. Wählen Sie das Objekt und das Feld aus +3. Aktivieren Sie den **Erweiterten Modus** (Schalter unten rechts) +4. Kopieren Sie den API-Namen (z. B. `OPTION_1`, nicht "Option 1") -New select options are not created automatically. Add them in **Settings → Data Model** before importing. +Neue Auswahloptionen werden nicht automatisch erstellt. Fügen Sie sie vor dem Import unter **Einstellungen → Datenmodell** hinzu. -### Multi-Select Fields +### Mehrfachauswahlfelder -Use API names in array format: +Verwenden Sie API-Namen im Array-Format: ``` ["VALUE1","VALUE2"] ``` -### Array Fields +### Array-Felder -Use JSON array format: +Verwenden Sie das JSON-Array-Format: ``` ["value1","value2"] ``` -### Rating Fields +### Bewertungsfelder -Use the format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, or `RATING_5` +Verwenden Sie das Format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4` oder `RATING_5` -### Links/URL Fields +### Links/URL-Felder -Fill both columns: +Füllen Sie beide Spalten aus: -* **Links / Link Label**: `Twenty` -* **Links / Link URL**: `https://twenty.com` +* **Links / Link-Label**: `Twenty` +* **Links / Link-URL**: `https://twenty.com` -For secondary links, use the **Links / Secondary Links** column: +Für sekundäre Links verwenden Sie die Spalte **Links / Sekundäre Links**: ``` [{"url":"https://twenty.com","label":"Twenty"}] ``` -### JSON Fields +### JSON-Felder -Use valid JSON format: +Verwenden Sie ein gültiges JSON-Format: ``` {"key":"value","key2":"value2"} ``` -### ID Fields +### ID-Felder -* **Optional**: Twenty auto-generates IDs if not provided -* **Format**: UUID (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`) -* **Use case**: Include ID to update existing records instead of creating new ones +* **Optional**: Twenty erstellt IDs automatisch, wenn sie nicht angegeben werden +* **Format**: UUID (z. B. `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`) +* **Anwendungsfall**: ID angeben, um bestehende Datensätze zu aktualisieren, statt neue zu erstellen -## Step 5: Add Relation Columns (If Linking Records) +## Schritt 5: Beziehungsspalten hinzufügen (bei Verknüpfung von Datensätzen) -To link records to other objects (e.g., People to Companies), add a column with the unique identifier of the related record. +Um Datensätze mit anderen Objekten zu verknüpfen (z. B. Personen mit Unternehmen), fügen Sie eine Spalte mit dem eindeutigen Bezeichner des zugehörigen Datensatzes hinzu. -**Example**: Linking People to Companies +**Beispiel**: Verknüpfung von Personen mit Unternehmen -Add a column to your People CSV: +Fügen Sie Ihrer Personen-CSV eine Spalte hinzu: ``` firstName,lastName,email,companyDomain @@ -202,69 +202,69 @@ John,Smith,john@acme.com,https://acme.com Jane,Doe,jane@widgets.co,https://widgets.co ``` -**Important rules for relations:** +**Wichtige Regeln für Beziehungen:** -* The parent record must already exist in Twenty -* Use the **Domain URL** format (`https://domain.com`), not the label -* Map only ONE unique identifier (don't include both `companyId` AND `companyDomain`) -* For Workspace Members, use their **email** (not name) +* Der übergeordnete Datensatz muss bereits in Twenty vorhanden sein +* Verwenden Sie das **Domain-URL**-Format (`https://domain.com`), nicht die Bezeichnung +* Ordnen Sie nur EINEN eindeutigen Bezeichner zu (nicht sowohl `companyId` ALS AUCH `companyDomain`) +* Für Workspace-Mitglieder verwenden Sie deren **E-Mail** (nicht den Namen) - **Import Order Matters!** + **Die Importreihenfolge ist wichtig!** - Import the "one" side before the "many" side: + Importieren Sie die "One"-Seite vor der "Many"-Seite: - 1. **Companies** first - 2. **People** second (with company reference) - 3. **Opportunities** third + 1. **Unternehmen** zuerst + 2. **Personen** als Zweites (mit Unternehmensreferenz) + 3. **Opportunities** als Drittes - The parent record must exist before you can reference it. + Der übergeordnete Datensatz muss vorhanden sein, bevor Sie darauf verweisen können. -See [How to Import Relations](/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions. +Siehe [Beziehungen importieren](/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) für detaillierte Anleitungen. -## Step 6: Ensure Fields Exist in Twenty +## Schritt 6: Sicherstellen, dass Felder in Twenty vorhanden sind -The import creates **records**, not **fields**. All fields you want to import must already exist in your data model. +Der Import erstellt **Datensätze**, nicht **Felder**. Alle Felder, die Sie importieren möchten, müssen bereits in Ihrem Datenmodell vorhanden sein. -**Before importing:** +**Vor dem Import:** -1. Go to **Settings → Data Model** -2. Select your object -3. Create any custom fields you need -4. Note the exact field names (they must match your column headers) +1. Gehen Sie zu **Einstellungen → Datenmodell** +2. Wählen Sie Ihr Objekt aus +3. Erstellen Sie alle benötigten benutzerdefinierten Felder +4. Notieren Sie die exakten Feldnamen (sie müssen mit Ihren Spaltenüberschriften übereinstimmen) -## Step 7: Final Checklist +## Schritt 7: Abschluss-Checkliste -Before uploading your file, verify: +Überprüfen Sie vor dem Hochladen Ihrer Datei: -File is CSV, XLSX, or XLS format -File has fewer than 10,000 records -Encoding is UTF-8 -No duplicate emails (for People) or domains (for Companies) -Dates use consistent format throughout -Domains use `https://domain.com` format -Boolean fields use `TRUE` or `FALSE` (uppercase) -Select fields use API names, not display labels -All custom fields exist in Settings → Data Model -Parent records imported before child records -Relation columns reference existing records +Datei ist im CSV-, XLSX- oder XLS-Format +Datei enthält weniger als 10.000 Datensätze +Zeichencodierung ist UTF-8 +Keine doppelten E-Mails (für Personen) oder Domains (für Unternehmen) +Datumsangaben verwenden durchgehend ein einheitliches Format +Domains verwenden das Format `https://domain.com` +Boolesche Felder verwenden `TRUE` oder `FALSE` (Großschreibung) +Auswahlfelder verwenden API-Namen, nicht Anzeigenamen +Alle benutzerdefinierten Felder existieren in Einstellungen → Datenmodell +Übergeordnete Datensätze vor untergeordneten Datensätzen importiert +Beziehungsspalten verweisen auf vorhandene Datensätze -## Common Mistakes to Avoid +## Häufige Fehler, die Sie vermeiden sollten -| Mistake | Solution | -| -------------------------------------------- | ------------------------------------- | -| Using `true` instead of `TRUE` | Boolean values must be uppercase | -| Using display labels for Select fields | Find and use API names in Settings | -| Importing People before Companies | Always import parent objects first | -| Missing currency code for Currency fields | Fill both Amount and Currency columns | -| Wrong domain format | Use `https://domain.com` consistently | -| Mapping multiple unique fields for relations | Map only ONE (domain OR id, not both) | +| Fehler | Lösung | +| ----------------------------------------------------- | -------------------------------------------------------------- | +| Verwendung von `true` statt `TRUE` | Boolesche Werte müssen in Großbuchstaben sein | +| Verwendung von Anzeigenamen für Auswahlfelder | API-Namen in den Einstellungen suchen und verwenden | +| Import von Personen vor Unternehmen | Importieren Sie stets zuerst die übergeordneten Objekte | +| Fehlender Währungscode für Währungsfelder | Sowohl die Spalte Betrag als auch die Spalte Währung ausfüllen | +| Falsches Domain-Format | `https://domain.com` konsequent verwenden | +| Zuordnung mehrerer eindeutiger Felder für Beziehungen | Nur EINES zuordnen (Domain ODER ID, nicht beides) | ## Nächste Schritte -Your file is ready! Now: +Ihre Datei ist bereit! Jetzt: -* [Import Companies](/l/de/user-guide/data-migration/how-tos/import-companies-via-csv) (import these first) -* [Import Contacts](/l/de/user-guide/data-migration/how-tos/import-contacts-via-csv) -* [Fix any import errors](/l/de/user-guide/data-migration/how-tos/fix-import-errors) +* [Unternehmen importieren](/l/de/user-guide/data-migration/how-tos/import-companies-via-csv) (diese zuerst importieren) +* [Kontakte importieren](/l/de/user-guide/data-migration/how-tos/import-contacts-via-csv) +* [Importfehler beheben](/l/de/user-guide/data-migration/how-tos/fix-import-errors) diff --git a/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-relation-fields.mdx b/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-relation-fields.mdx index 2e136e5bce..c8a369d79e 100644 --- a/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-relation-fields.mdx +++ b/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-relation-fields.mdx @@ -1,60 +1,60 @@ --- -title: Create Relation Fields -description: Step-by-step guide to connecting objects with relation fields. +title: Relationsfelder erstellen +description: Schritt-für-Schritt-Anleitung zum Verbinden von Objekten mit Relationsfeldern. --- -Relation fields connect records from different objects—for example, linking People to Companies. +Relationsfelder verbinden Datensätze aus verschiedenen Objekten — zum Beispiel Personen mit Unternehmen. - **Relation names cannot be changed after creation** (they affect the API). Plan your names carefully. + **Relationsnamen können nach dem Erstellen nicht geändert werden** (sie wirken sich auf die API aus). Planen Sie Ihre Namen sorgfältig. ## Bevor Sie beginnen -Decide: +Entscheiden Sie: -* Which objects are you connecting? (e.g., People → Companies) -* Which is the "one" side? (e.g., Company) -* Which is the "many" side? (e.g., People — many people work at one company) -* What should the field be named on each side? +* Welche Objekte verbinden Sie? (z. B. Personen → Unternehmen) +* Welche ist die "One"-Seite? (z. B. Unternehmen) +* Welche ist die "Many"-Seite? (z. B. Personen — viele Personen arbeiten bei einem Unternehmen) +* Wie soll das Feld auf beiden Seiten heißen? -See [Relation Fields](/l/de/user-guide/data-model/capabilities/relation-fields) for relation types explained. +Siehe [Relationsfelder](/l/de/user-guide/data-model/capabilities/relation-fields) für Erläuterungen zu Relationstypen. -## Steps +## Schritte -1. Go to **Settings → Data Model** -2. Select the object where you want the relation (typically the "many" side) -3. Click **+ Add Field** -4. Select **Relation** as the field type -5. Choose the **target object** -6. Select **One-to-Many** or **Many-to-One** -7. Enter field names for **both sides** of the relation +1. Gehen Sie zu **Einstellungen → Datenmodell** +2. Wählen Sie das Objekt aus, in dem Sie die Relation benötigen (typischerweise die "Many"-Seite) +3. Klicken Sie auf **+ Feld hinzufügen** +4. Wählen Sie **Relation** als Feldtyp aus +5. Wählen Sie das **Zielobjekt** aus +6. Wählen Sie **One-to-Many** oder **Many-to-One** +7. Geben Sie Feldnamen für **beide Seiten** der Relation ein 8. Klicken Sie auf **Speichern** -## Example: People → Companies +## Beispiel: Personen → Unternehmen -* Go to **Settings → Data Model → People** -* Add a Relation field -* Target: **Companies** -* Type: **Many-to-One** -* Field on People: **Company** -* Field on Companies: **Employees** +* Gehen Sie zu **Einstellungen → Datenmodell → Personen** +* Fügen Sie ein Relationsfeld hinzu +* Ziel: **Unternehmen** +* Typ: **Many-to-One** +* Feld bei Personen: **Unternehmen** +* Feld bei Unternehmen: **Mitarbeitende** -Now each Person can be linked to a Company, and each Company shows its People. +Jetzt kann jede Person mit einem Unternehmen verknüpft werden, und jedes Unternehmen zeigt seine Mitarbeitenden. -## Deleting a Relation +## Eine Relation löschen -1. Go to **Settings → Data Model** -2. Find the relation field -3. Click **⋮ → Deactivate** +1. Gehen Sie zu **Einstellungen → Datenmodell** +2. Suchen Sie das Relationsfeld +3. Klicken Sie auf **⋮ → Deaktivieren** -Links are preserved but hidden. Reactivate to restore. +Verknüpfungen bleiben erhalten, sind jedoch verborgen. Reaktivieren, um wiederherzustellen. - **Deleting a relation doesn't delete records.** Only the link between them is removed. + **Das Löschen einer Relation löscht keine Datensätze.** Es wird nur die Verknüpfung zwischen ihnen entfernt. -## Related +## Verwandt -* [Relation Fields](/l/de/user-guide/data-model/capabilities/relation-fields) — types and limitations -* [How to Import Relations](/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — bulk import linked records +* [Relationsfelder](/l/de/user-guide/data-model/capabilities/relation-fields) — Typen und Einschränkungen +* [Relationen importieren](/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — verknüpfte Datensätze im Stapel importieren diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx index b6e2fd94ad..e5efacd032 100644 --- a/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx +++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx @@ -1,5 +1,5 @@ --- -title: Zugriff auf Ihre Ansicht beschränken},{ +title: Restrict Access to Your View description: Steuern Sie, wer Ihre benutzerdefinierten Ansichten sehen kann. --- diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx index a3e56b818f..1a3589270a 100644 --- a/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx +++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx @@ -1,5 +1,5 @@ --- -title: Erwarteten Betrag in Ihrer Pipeline anzeigen},{ +title: Show Expected Amount in Your Pipeline description: Gewichtete Deal‑Werte basierend auf der Phasenwahrscheinlichkeit berechnen und anzeigen. --- @@ -45,7 +45,7 @@ Wenn Benutzer diese berechneten Felder nicht manuell bearbeiten sollen: Dadurch können nur die Workflows diese Werte aktualisieren. -## Schritt 2: Workflow #1 erstellen — Probability bei Phasenwechsel aktualisieren +## Schritt 2: Workflow #1 erstellen — Probability bei Phasenwechsel aktualisieren Dieser Workflow setzt die Probability automatisch, wenn eine Opportunity in eine neue Phase wechselt. @@ -97,7 +97,7 @@ Nachdem die Verzweigungen wieder zusammengeführt wurden: * Feld: Expected Amount * Wert: Amount × Probability -## Schritt 3: Workflow #2 erstellen — Bei Änderung von Amount neu berechnen +## Schritt 3: Workflow #2 erstellen — Bei Änderung von Amount neu berechnen Dieser Workflow aktualisiert den Expected Amount, wenn sich der Amount des Deals ändert. @@ -138,8 +138,8 @@ Jede Spalte zeigt nun den insgesamt gewichteten Pipeline‑Wert für diese Phase | -------------------------- | ----------------------------------------------------------------------------------------- | | **Feld „Probability“** | Speichert die phasenbasierte Gewinnwahrscheinlichkeit | | **Feld „Expected Amount“** | Speichert Amount × Probability | -| **Workflow #1** | Aktualisiert Probability bei Phasenwechsel und berechnet anschließend Expected Amount neu | -| **Workflow #2** | Berechnet Expected Amount neu, wenn sich Amount ändert | +| **Workflow #1** | Aktualisiert Probability bei Phasenwechsel und berechnet anschließend Expected Amount neu | +| **Workflow #2** | Berechnet Expected Amount neu, wenn sich Amount ändert | | **Aggregation** | Zeigt die Summe des Expected Amount pro Phase an | ## Verwandt diff --git a/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-runs.mdx b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-runs.mdx index 61d1572a06..2feeacd721 100644 --- a/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-runs.mdx +++ b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-runs.mdx @@ -1,92 +1,92 @@ --- title: Workflow-Läufe -description: Monitor and manage workflow executions. +description: Workflow-Ausführungen überwachen und verwalten. image: /images/user-guide/workflows/workflow.png --- -## About Runs +## Über Läufe -A **Run** is a record of a workflow execution. Every time a workflow is triggered—whether by a record event, schedule, manual action, or webhook—a new run is created. +Ein **Lauf** ist ein Protokoll einer Workflow-Ausführung. Jedes Mal, wenn ein Workflow ausgelöst wird – sei es durch ein Datensatzereignis, einen Zeitplan, eine manuelle Aktion oder einen Webhook – wird ein neuer Lauf erstellt. -## Viewing Runs +## Läufe anzeigen -### From the Workflow Editor +### Im Workflow-Editor -1. Open the workflow you want to monitor -2. Click the **Runs** panel on the right side -3. See a list of recent runs with their status +1. Öffnen Sie den Workflow, den Sie überwachen möchten +2. Klicken Sie auf das **Läufe**-Panel auf der rechten Seite +3. Sehen Sie eine Liste der letzten Läufe mit ihrem Status -### From the Workflow Runs View +### In der Ansicht Workflow-Läufe -1. Go to **Workflow Runs** in the sidebar -2. View runs across all workflows -3. Filter by status, workflow, or date +1. Gehen Sie in der Seitenleiste zu **Workflow-Läufe** +2. Zeigen Sie Läufe über alle Workflows hinweg an +3. Filtern Sie nach Status, Workflow oder Datum -## Run Statuses +## Laufstatus -| Status | Beschreibung | -| ------------------- | ------------------------------------------------------------------------ | -| **Wird ausgeführt** | Workflow is currently executing | -| **Completed** | Workflow finished successfully | -| **Failed** | Workflow encountered an error and stopped | -| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) | +| Status | Beschreibung | +| ------------------- | ------------------------------------------------------------------------------------------------- | +| **Wird ausgeführt** | Workflow wird derzeit ausgeführt | +| **Abgeschlossen** | Workflow wurde erfolgreich abgeschlossen | +| **Fehlgeschlagen** | Beim Workflow ist ein Fehler aufgetreten und wurde angehalten | +| **Wartend** | Workflow ist angehalten (z. B. wartet auf eine Verzögerungsaktion oder eine Formularübermittlung) | -## Run Details +## Laufdetails -Click on any run to see: +Klicken Sie auf einen beliebigen Lauf, um Folgendes zu sehen: -* **Status**: Current state of the run -* **Started at**: When the run began -* **Duration**: How long the run took -* **Trigger data**: The input that started the workflow -* **Step outputs**: Data returned by each step -* **Error messages**: If the run failed, what went wrong +* **Status**: Aktueller Zustand des Laufs +* **Gestartet am**: Wann der Lauf begonnen hat +* **Dauer**: Wie lange der Lauf gedauert hat +* **Triggerdaten**: Die Eingabe, die den Workflow gestartet hat +* **Schrittausgaben**: Daten, die von jedem Schritt zurückgegeben wurden +* **Fehlermeldungen**: Falls der Lauf fehlgeschlagen ist – was schiefgelaufen ist -## Step-by-Step Execution +## Ausführung Schritt für Schritt -Each run shows the progression through your workflow: +Jeder Lauf zeigt den Fortschritt in Ihrem Workflow: -1. See which steps completed successfully -2. Identify where failures occurred -3. View the data passed between steps -4. Debug issues by examining step inputs and outputs +1. Sehen Sie, welche Schritte erfolgreich abgeschlossen wurden +2. Ermitteln Sie, wo Fehler aufgetreten sind +3. Sehen Sie sich die zwischen den Schritten übergebenen Daten an +4. Beheben Sie Probleme, indem Sie die Eingaben und Ausgaben der Schritte untersuchen -## Error Handling +## Fehlerbehandlung -When a run fails: +Wenn ein Lauf fehlschlägt: -1. Open the failed run -2. Find the step that caused the failure -3. Check the error message for details -4. Common issues: - * Missing required fields +1. Öffnen Sie den fehlgeschlagenen Lauf +2. Finden Sie den Schritt, der den Fehler verursacht hat +3. Prüfen Sie die Fehlermeldung auf Details +4. Häufige Probleme: + * Fehlende erforderliche Felder * Ungültiges Datenformat - * External API errors - * Permission issues + * Externe API-Fehler + * Berechtigungsprobleme -## Re-running Workflows +## Workflows erneut ausführen -If a run fails, you can: +Wenn ein Lauf fehlschlägt, können Sie: -* Fix the underlying issue and wait for the next trigger -* For manual workflows, trigger again with the same or updated data -* Review the workflow logic to prevent future failures +* Beheben Sie das zugrunde liegende Problem und warten Sie auf den nächsten Trigger +* Bei manuellen Workflows erneut auslösen – mit denselben oder aktualisierten Daten +* Überprüfen Sie die Workflow-Logik, um künftige Fehler zu vermeiden -## Performance Tips +## Tipps zur Leistung -### Managing Run History +### Laufhistorie verwalten -* Runs are retained for historical reference -* Very old runs may be archived automatically -* Export run data if you need to keep records +* Läufe werden zu Referenzzwecken aufbewahrt +* Sehr alte Läufe können automatisch archiviert werden +* Exportieren Sie Laufdaten, wenn Sie Aufzeichnungen aufbewahren müssen -### Monitoring Best Practices +### Best Practices für das Monitoring -* Check runs regularly after activating new workflows -* Review failed runs to identify patterns +* Überprüfen Sie Läufe regelmäßig, nachdem Sie neue Workflows aktiviert haben +* Überprüfen Sie fehlgeschlagene Läufe, um Muster zu erkennen -## Related +## Verwandte Themen -* [Workflow Triggers](/l/de/user-guide/workflows/capabilities/workflow-triggers) -* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions) -* [Workflow Troubleshooting](/l/de/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting) +* [Workflow-Trigger](/l/de/user-guide/workflows/capabilities/workflow-triggers) +* [Workflow-Aktionen](/l/de/user-guide/workflows/capabilities/workflow-actions) +* [Workflow-Fehlerbehebung](/l/de/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting) diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/professional-services.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/professional-services.mdx index 3e9ad2be4b..d3b484c049 100644 --- a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/professional-services.mdx +++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/professional-services.mdx @@ -18,7 +18,7 @@ Erwägen Sie professionelle Dienstleistungen für: ### Einführungspakete -Get help from our core team with our 4-hour [Onboarding packs](https://twenty.com/onboarding-packages): +Holen Sie sich Unterstützung von unserem Kernteam mit unseren 4-stündigen [Einführungspaketen](https://twenty.com/onboarding-packages): * **Workflow-Erstellung**: Erstellen Sie benutzerdefinierte Workflows für Ihre Geschäftsprozesse * **Datenmodell-Design**: Optimieren Sie Ihre Datenstruktur für Workflow-Automatisierung diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/best-practices-server.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/best-practices-server.mdx index b476a16282..d8f5c5ea7c 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/best-practices-server.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/best-practices-server.mdx @@ -1,22 +1,22 @@ --- -title: Mejores prácticas +title: Best Practices --- -Este documento describe las mejores prácticas que debe seguir al trabajar en el backend. +This document outlines the best practices you should follow when working on the backend. -## Siga un enfoque modular +## Follow a modular approach -El backend sigue un enfoque modular, que es un principio fundamental al trabajar con NestJS. Asegúrese de descomponer su código en módulos reutilizables para mantener una base de código limpia y organizada. -Cada módulo debe encapsular una característica o funcionalidad particular y tener un alcance bien definido. Este enfoque modular permite una clara separación de responsabilidades y elimina complejidades innecesarias. +The backend follows a modular approach, which is a fundamental principle when working with NestJS. Make sure you break down your code into reusable modules to maintain a clean and organized codebase. +Each module should encapsulate a particular feature or functionality and have a well-defined scope. This modular approach enables clear separation of concerns and removes unnecessary complexities. -## Exponer servicios para usar en módulos +## Expose services to use in modules -Siempre cree servicios que tengan una responsabilidad clara y única, lo que mejora la legibilidad y mantenibilidad del código. Nombre los servicios de manera descriptiva y consistente. +Always create services that have a clear and single responsibility, which enhances code readability and maintainability. Name the services descriptively and consistently. -También debe exponer servicios que desee usar en otros módulos. Exponer servicios a otros módulos es posible a través del poderoso sistema de inyección de dependencias de NestJS, y promueve un acoplamiento débil entre los componentes. +You should also expose services that you want to use in other modules. Exposing services to other modules is possible through NestJS's powerful dependency injection system, and promotes loose coupling between components. -## Evitar usar el tipo `any` +## Avoid using `any` type -Cuando declara una variable como `any`, el verificador de tipos de TypeScript no realiza ninguna comprobación de tipos, lo que hace posible asignar cualquier tipo de valores a la variable. TypeScript utiliza la inferencia de tipos para determinar el tipo de la variable a partir del valor. Al declararlo como `any`, TypeScript ya no puede inferir el tipo. Esto dificulta la captura de errores relacionados con el tipo durante el desarrollo, lo que lleva a errores en tiempo de ejecución y hace que el código sea menos mantenible, menos fiable y más difícil de entender para otros. +When you declare a variable as `any`, TypeScript's type checker doesn't perform any type checking, making it possible to assign any type of values to the variable. TypeScript uses type inference to determine the type of variable based on the value. By declaring it as `any`, TypeScript can no longer infer the type. This makes it hard to catch type-related errors during development, leading to runtime errors and makes the code less maintainable, less reliable, and harder to understand for others. -Por eso todo debe tener un tipo. Entonces, si crea un nuevo objeto con un nombre y apellido, debe crear una interfaz o tipo que contenga un nombre y apellido y defina la forma del objeto que está manipulando. +This is why everything should have a type. So if you create a new object with a first name and last name, you should create an interface or type that contains a first name and last name that defines the shape of the object you are manipulating. diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/custom-objects.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/custom-objects.mdx index 7ce5c14c0b..7feec7a639 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/custom-objects.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/custom-objects.mdx @@ -1,39 +1,39 @@ --- -title: Objetos personalizados +title: Custom Objects --- -Los objetos son estructuras que te permiten almacenar datos (registros, atributos y valores) específicos de una organización. Twenty proporciona tanto objetos estándar como personalizados. +Objects are structures that allow you to store data (records, attributes, and values) specific to an organization. Twenty provides both standard and custom objects. -Los objetos estándar son objetos incorporados con un conjunto de atributos disponibles para todos los usuarios. Ejemplos de objetos estándar en Twenty incluyen Empresa y Persona. Los objetos estándar tienen campos estándar que también están disponibles para todos los usuarios de Twenty, como Company.displayName. +Standard objects are in-built objects with a set of attributes available for all users. Examples of standard objects in Twenty include Company and Person. Standard objects have standard fields that are also available for all Twenty users, like Company.displayName. -Los objetos personalizados son objetos que puedes crear para almacenar información que es única para tu organización. No están incorporados; los miembros de tu espacio de trabajo pueden crear y personalizar objetos personalizados para albergar información para la cual los objetos estándar no son aptos. +Custom objects are objects that you can create to store information that is unique to your organization. They are not built-in; members of your workspace can create and customize custom objects to hold information that standard objects aren't suitable for. -## Esquema de alto nivel +## High-level schema
- Esquema de alto nivel + High level schema

-## Cómo funciona +## How it works -Los objetos personalizados provienen de tablas de metadatos que determinan la forma, el nombre y el tipo de los objetos. Toda esta información está presente en la base de datos del esquema de metadatos, que consta de tablas: +Custom objects come from metadata tables that determine the shape, name, and type of the objects. All this information is present in the metadata schema database, consisting of tables: -* **DataSource**: Detalles de dónde se encuentra la información. -* **Object**: Describe el objeto y lo vincula a un DataSource. -* **Field**: Describe los campos de un objeto y lo conecta al objeto. +* **DataSource**: Details where the data is present. +* **Object**: Describes the object and links to a DataSource. +* **Field**: Outlines an Object's fields and connects to the Object. -Para añadir un objeto personalizado, el workspaceMember consultará la API de /metadata. Esto actualiza los metadatos de acuerdo y calcula un esquema GraphQL basado en los metadatos, almacenándolo en un caché de GQL para su uso posterior. +To add a custom object, the workspaceMember will query the /metadata API. This updates the metadata accordingly and computes a GraphQL schema based on the metadata, storing it in a GQL cache for later use.
- Consultando la API de /metadata para añadir objetos personalizados + Query the /metadata API to add custom objects

-Para obtener datos, el proceso implica hacer consultas a través del endpoint /graphql y pasarlos a través del Query Resolver. +To fetch data, the process involves making queries through the /graphql endpoint and passing them through the Query Resolver.
- Consulta el endpoint /graphql para obtener datos + Query the /graphql endpoint to fetch data
diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/feature-flags.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/feature-flags.mdx index 94da2aedd2..a261cfec3c 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/feature-flags.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/feature-flags.mdx @@ -2,7 +2,7 @@ title: Feature Flags --- -Feature flags are used to hide experimental features. Para Twenty, se configuran a nivel de espacio de trabajo y no a nivel de usuario. +Feature flags are used to hide experimental features. For Twenty, they are set on workspace level and not on a user level. ## Adding a new feature flag @@ -14,7 +14,7 @@ type FeatureFlagKey = | ...; ``` -También agrégalo al enum en `feature-flag.entity.ts`: +Also add it to the enum in `feature-flag.entity.ts`: ```ts enum FeatureFlagKeys { @@ -39,8 +39,8 @@ const isFeatureNameEnabled = useIsFeatureEnabled('IS_FEATURENAME_ENABLED'); ## Configure feature flags for the deployment -Cambie el registro correspondiente en la Tabla `core.featureFlag`: +Change the corresponding record in the Table `core.featureFlag`: -| iD | clave | workspaceId | valor | -| --------- | ------------------------ | ------------------------- | ----------- | -| Aleatorio | `IS_FEATURENAME_ENABLED` | ID del espacio de trabajo | `verdadero` | +| id | key | workspaceId | value | +| ------ | ------------------------ | ----------- | ------ | +| Random | `IS_FEATURENAME_ENABLED` | WorkspaceID | `true` | diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx index 027471a869..233d92ac8a 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx @@ -1,9 +1,9 @@ --- -title: Arquitectura de Carpetas -info: Una mirada detallada a la arquitectura de carpetas de nuestro servidor +title: Folder Architecture +info: A detailed look into our server folder architecture --- -La estructura del directorio backend es la siguiente: +The backend directory structure is as follows: ``` server @@ -23,35 +23,35 @@ server ## Ability -Define permisos e incluye gestores para cada entidad. +Defines permissions and includes handlers for each entity. -## Decoradores +## Decorators -Define decoradores personalizados en NestJS para funcionalidad adicional. +Defines custom decorators in NestJS for added functionality. -Ver [decoradores personalizados](https://docs.nestjs.com/custom-decorators) para más detalles. +See [custom decorators](https://docs.nestjs.com/custom-decorators) for more details. -## Filtros +## Filters -Incluye filtros de excepciones para manejar excepciones que puedan ocurrir en endpoints de GraphQL. +Includes exception filters to handle exceptions that might occur in GraphQL endpoints. -## Guardias +## Guards -Ver [guardias](https://docs.nestjs.com/guards) para más detalles. +See [guards](https://docs.nestjs.com/guards) for more details. ## Health -Incluye una API REST públicamente disponible (healthz) que devuelve un JSON para confirmar si la base de datos está funcionando como se esperaba. +Includes a publicly available REST API (healthz) that returns a JSON to confirm whether the database is working as expected. -## Metadatos +## Metadata -Define objetos personalizados y hace disponible una API de GraphQL (graphql/metadata). +Defines custom objects and makes available a GraphQL API (graphql/metadata). -## Espacio de trabajo +## Workspace -Genera y sirve un esquema GraphQL personalizado basado en los metadatos. +Generates and serves custom GraphQL schema based on the metadata. -### Estructura del Directorio de Espacio de Trabajo +### Workspace Directory Structure ``` workspace @@ -83,43 +83,43 @@ workspace └───workspace.factory.ts ``` -La raíz del directorio de espacio de trabajo incluye el `espacio.trabajo.factory.ts`, un archivo que contiene la función `createGraphQLSchema`. Esta función genera un esquema específico para el espacio de trabajo utilizando los metadatos para adaptar un esquema para espacios de trabajo individuales. By separating the schema and resolver construction, we use the `makeExecutableSchema` function, which combines these discrete elements. +The root of the workspace directory includes the `workspace.factory.ts`, a file containing the `createGraphQLSchema` function. This function generates workspace-specific schema by using the metadata to tailor a schema for individual workspaces. By separating the schema and resolver construction, we use the `makeExecutableSchema` function, which combines these discrete elements. -Esta estrategia no solo se trata de organización, sino que también ayuda con la optimización, como el almacenamiento en caché de definiciones de tipos generados para mejorar el rendimiento y la escalabilidad. +This strategy is not just about organization, but also helps with optimization, such as caching generated type definitions to enhance performance and scalability. -### Constructor de Esquema de Espacio de Trabajo +### Workspace Schema builder -Genera el esquema GraphQL, e incluye: +Generates the GraphQL schema, and includes: -#### Fábricas: +#### Factories: -Constructores especializados para generar constructos relacionados con GraphQL. +Specialised constructors to generate GraphQL-related constructs. -* La fábrica de tipos traduce los metadatos de los campos en tipos GraphQL utilizando `TypeMapperService`. -* La fábrica de definiciones de tipos crea objetos de entrada o salida de GraphQL derivados de `objectMetadata`. +* The type.factory translates field metadata into GraphQL types using `TypeMapperService`. +* The type-definition.factory creates GraphQL input or output objects derived from `objectMetadata`. -#### Tipos GraphQL +#### GraphQL Types -Incluye enumeraciones, entradas, objetos y escalares, y sirve como bloques de construcción para la construcción del esquema. +Includes enumerations, inputs, objects, and scalars, and serves as the building blocks for the schema construction. -#### Interfaces y Definiciones de Objetos +#### Interfaces and Object Definitions -Contiene los planos para entidades GraphQL, e incluye tanto tipos predefinidos como personalizados como `MONEY` o `URL`. +Contains the blueprints for GraphQL entities, and includes both predefined and custom types like `MONEY` or `URL`. -#### Servicios +#### Services -Contiene el servicio responsable de asociar FieldMetadataType con su escalar de GraphQL apropiado o modificadores de consulta. +Contains the service responsible for associating FieldMetadataType with its appropriate GraphQL scalar or query modifiers. -#### Almacenamiento +#### Storage -Incluye la clase `TypeDefinitionsStorage` que contiene definiciones de tipos reutilizables, previniendo duplicación de tipos GraphQL. +Includes the `TypeDefinitionsStorage` class that contains reusable type definitions, preventing duplication of GraphQL types. -### Constructor de Resolver de Espacio de Trabajo +### Workspace Resolver Builder -Crea funciones de resolutor para consultar y modificar el esquema GraphQL. +Creates resolver functions for querying and mutating the GraphQL schema. -Cada fábrica en este directorio es responsable de producir un tipo de resolutor distinto, como el `FindManyResolverFactory`, diseñado para aplicación adaptable a través de varias tablas. +Each factory in this directory is responsible for producing a distinct resolver type, such as the `FindManyResolverFactory`, designed for adaptable application across various tables. -### Ejecutor de Consultas de Espacio de Trabajo +### Workspace Query Runner -Ejecuta las consultas generadas en la base de datos y analiza el resultado. +Runs the generated queries on the database and parses the result. diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/queue.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/queue.mdx index 886d867a5f..6148c0fbf0 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/queue.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/queue.mdx @@ -1,32 +1,32 @@ --- -title: Cola de Mensajes +title: Message Queue --- -Las colas facilitan la realización de operaciones asíncronas. Se pueden utilizar para realizar tareas en segundo plano, como enviar un correo de bienvenida al registrarse. -Cada caso de uso tendrá su propia clase de cola extendida de `MessageQueueServiceBase`. +Queues facilitate async operations to be performed. They can be used for performing background tasks such as sending a welcome email on register. +Each use case will have its own queue class extended from `MessageQueueServiceBase`. -Actualmente, solo soportamos `bull-mq`[bull-mq](https://bullmq.io/) como el controlador de cola. +Currently, we only support `bull-mq`[bull-mq](https://bullmq.io/) as the queue driver. -## Pasos para crear y usar una nueva cola +## Steps to create and use a new queue -1. Agregue un nombre de cola para su nueva cola en la enumeración `MESSAGE_QUEUES`. -2. Proporcione la implementación de fábrica de la cola con el nombre de la cola como el token de dependencia. -3. Inyecte la cola que creó en el módulo/servicio requerido con el nombre de la cola como el token de dependencia. -4. Agregue una clase de trabajador con inyección basada en token, al igual que el productor. +1. Add a queue name for your new queue under enum `MESSAGE_QUEUES`. +2. Provide the factory implementation of the queue with the queue name as the dependency token. +3. Inject the queue that you created in the required module/service with the queue name as the dependency token. +4. Add worker class with token based injection just like producer. -### Ejemplo de uso +### Example usage ```ts class Resolver { constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {} async onSomeAction() { - //lógica de negocio + //business logic await this.queue.add(someData); } } -//trabajador asíncrono +//async worker class CustomWorker { constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) { this.initWorker(); @@ -34,7 +34,7 @@ class CustomWorker { async initWorker() { await this.queue.work(async ({ id, data }) => { - //lógica del trabajador + //worker logic }); } } diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/server-commands.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/server-commands.mdx index 8ff23cd86e..6951909788 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/server-commands.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/server-commands.mdx @@ -1,19 +1,19 @@ --- -title: Comandos de Backend +title: Backend Commands --- -## Comandos útiles +## Useful commands -Estos comandos deben ejecutarse desde la carpeta packages/twenty-server. +These commands should be executed from packages/twenty-server folder. From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`). -### Configuración inicial +### First time setup ``` -npx nx database:reset twenty-server # configurar la base de datos con semillas de desarrollo +npx nx database:reset twenty-server # setup the database with dev seeds ``` -### Iniciando el servidor +### Starting the server ``` npx nx run twenty-server:start @@ -22,55 +22,56 @@ npx nx run twenty-server:start ### Lint ``` -npx nx run twenty-server:lint # pasar --fix para corregir errores de lint +npx nx run twenty-server:lint # pass --fix to fix lint errors ``` -### Prueba +### Test ``` -npx nx run twenty-server:test:unit # ejecutar pruebas unitarias -npx nx run twenty-server:test:integration # ejecutar pruebas de integración +npx nx run twenty-server:test:unit # run unit tests +npx nx run twenty-server:test:integration # run integration tests ``` -Nota: puedes ejecutar `npx nx run twenty-server:test:integration:with-db-reset` en caso de que necesites restablecer la base de datos antes de ejecutar las pruebas de integración. +Note: you can run `npx nx run twenty-server:test:integration:with-db-reset` in case you need to reset the database before running the integration tests. -### Restablecer la base de datos +### Resetting the database -Si deseas restablecer y sembrar la base de datos, puedes ejecutar el siguiente comando: +If you want to reset and seed the database, you can run the following command: ```bash npx nx run twenty-server:database:reset ``` -### Migraciones +### Migrations -#### Para objetos en esquemas Core/Metadata (TypeORM) +#### For objects in Core/Metadata schemas (TypeORM) ```bash npx nx run twenty-server:typeorm migration:generate src/database/typeorm/core/migrations/nameOfYourMigration -d src/database/typeorm/core/core.datasource.ts ``` -#### Para objetos de Workspace +#### For Workspace objects -No hay archivos de migraciones, las migraciones se generan automáticamente para cada espacio de trabajo, se almacenan en la base de datos y se aplican con este comando +There are no migrations files, migration are generated automatically for each workspace, +stored in the database, and applied with this command ```bash npx nx run twenty-server:command workspace:sync-metadata -f ``` - Esto eliminará la base de datos y volverá a ejecutar las migraciones y semillas. + This will drop the database and re-run the migrations and seed. - Asegúrate de respaldar cualquier dato que desees conservar antes de ejecutar este comando. + Make sure to back up any data you want to keep before running this command. -## Stack Tecnológico +## Tech Stack -Twenty utiliza principalmente NestJS para el backend. +Twenty primarily uses NestJS for the backend. -Prisma fue el primer ORM que usamos. Pero para permitir a los usuarios crear campos y objetos personalizados, un nivel más bajo tenía más sentido ya que necesitamos tener un control detallado. El proyecto ahora usa TypeORM. +Prisma was the first ORM we used. But in order to allow users to create custom fields and custom objects, a lower-level made more sense as we need to have fine-grained control. The project now uses TypeORM. -Así es como se ve la pila tecnológica ahora. +Here's what the tech stack now looks like. **Core** @@ -78,23 +79,23 @@ Así es como se ve la pila tecnológica ahora. * [TypeORM](https://typeorm.io/) * [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server) -**Base de datos** +**Database** * [Postgres](https://www.postgresql.org/) -**Integraciones de terceros** +**Third-party integrations** -* [Sentry](https://sentry.io/welcome/) para rastrear errores +* [Sentry](https://sentry.io/welcome/) for tracking bugs -**Pruebas** +**Testing** * [Jest](https://jestjs.io/) -**Herramientas** +**Tooling** * [Yarn](https://yarnpkg.com/) * [ESLint](https://eslint.org/) -**Desarrollo** +**Development** * [AWS EKS](https://aws.amazon.com/eks/) diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/zapier.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/zapier.mdx index e48563c818..46bcd563fc 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/zapier.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/zapier.mdx @@ -1,50 +1,52 @@ --- -title: Aplicación Zapier +title: Zapier App --- -Sincroniza sin esfuerzo Twenty con más de 3000 aplicaciones usando [Zapier](https://zapier.com/). ¡Automatiza tareas, mejora la productividad y potencia tus relaciones con los clientes! +Effortlessly sync Twenty with 3000+ apps using [Zapier](https://zapier.com/). Automate tasks, boost productivity, and supercharge your customer relationships! -## Acerca de Zapier +## About Zapier -Zapier is a tool that allows you to automate workflows by connecting the apps that your team uses every day. El concepto fundamental de Zapier son los flujos de trabajo automatizados, llamados Zaps, que incluyen desencadenantes y acciones. +Zapier is a tool that allows you to automate workflows by connecting the apps that your team uses every day. The fundamental concept of Zapier is automation workflows, called Zaps, and include triggers and actions. -Puedes aprender más sobre cómo funciona Zapier [aquí](https://zapier.com/how-it-works). +You can learn more about how Zapier works [here](https://zapier.com/how-it-works). -## Configuración +## Setup -### Paso 1: Instalar paquetes de Zapier +### Step 1: Install Zapier packages ```bash -cd packages/twenty-zapier\n\nyarn +cd packages/twenty-zapier + +yarn ``` -### Paso 2: Iniciar sesión con la CLI +### Step 2: Login with the CLI -Utiliza tus credenciales de Zapier para iniciar sesión usando la CLI: +Use your Zapier credentials to log in using the CLI: ```bash zapier login ``` -### Paso 3: Configurar variables de entorno +### Step 3: Set environment variables -Desde la carpeta `packages/twenty-zapier`, ejecuta: +From the `packages/twenty-zapier` folder, run: ```bash cp .env.example .env ``` -Ejecuta la aplicación localmente, ve a [http://localhost:3000/settings/api-webhooks](http://localhost:3000/settings/api-webhooks) y genera una clave API. +Run the application locally, go to [http://localhost:3000/settings/api-webhooks](http://localhost:3000/settings/api-webhooks), and generate an API key. -Reemplaza el valor de **YOUR_API_KEY** en el archivo `.env` con la clave API que acabas de generar. +Replace the **YOUR_API_KEY** value in the `.env` file with the API key you just generated. -## Desarrollo +## Development - Asegúrate de ejecutar `yarn build` antes de cualquier comando `zapier`. + Make sure to run `yarn build` before any `zapier` command. -### Prueba +### Test ```bash yarn test @@ -56,25 +58,25 @@ yarn test yarn format ``` -### Observa y compila mientras editas el código +### Watch and compile as you edit code ```bash yarn watch ``` -### Valida tu aplicación Zapier +### Validate your Zapier app ```bash yarn validate ``` -### Despliega tu aplicación Zapier +### Deploy your Zapier app ```bash yarn deploy ``` -### Lista todos los comandos de Zapier CLI +### List all Zapier CLI commands ```bash zapier diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/bug-and-requests.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/bug-and-requests.mdx index 89beb92596..4db64b703d 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/bug-and-requests.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/bug-and-requests.mdx @@ -3,21 +3,21 @@ title: Bugs, Requests & Pull Requests info: Report issues, request features, and contribute code --- -## Reportar errores +## Reporting Bugs -Para reportar un error, por favor [crea un problema en GitHub](https://github.com/twentyhq/twenty/issues/new). +To report a bug, please [create an issue on GitHub](https://github.com/twentyhq/twenty/issues/new). -También puedes pedir ayuda en [Discord](https://discord.gg/cx5n4Jzs57). +You can also ask for help on [Discord](https://discord.gg/cx5n4Jzs57). -## Solicitudes de funciones +## Feature Requests -Si no estás seguro de si es un error y sientes que está más cerca de una solicitud de función, entonces probablemente deberías [abrir una discusión en su lugar](https://github.com/twentyhq/twenty/discussions/new). +If you're not sure if it's a bug, and you feel it's closer to a feature request, then you should probably [open a discussion instead](https://github.com/twentyhq/twenty/discussions/new). ## Submit a Pull Request Contributing code to Twenty starts with a pull request (PR). -### Antes de empezar +### Before You Start 1. Check [existing issues](https://github.com/twentyhq/twenty/issues) for related work 2. For new features, open an issue first to discuss diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/best-practices-front.mdx index 04ca6f0237..187c2d848c 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/best-practices-front.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/best-practices-front.mdx @@ -1,19 +1,19 @@ --- -title: Mejores prácticas +title: Best Practices --- -Este documento describe las mejores prácticas que debes seguir al trabajar en el frontend. +This document outlines the best practices you should follow when working on the frontend. -## Gestión de estado +## State management -React y Recoil manejan la gestión de estado en la base de código. +React and Recoil handle state management in the codebase. -### Usa `useRecoilState` para almacenar el estado +### Use `useRecoilState` to store state -Es buena práctica crear tantos átomos como necesites para almacenar tu estado. +It's good practice to create as many atoms as you need to store your state. - Es mejor usar átomos adicionales que intentar ser demasiado concisos con la perforación de props. + It's better to use extra atoms than trying to be too concise with props drilling. ```tsx @@ -36,45 +36,45 @@ export const MyComponent = () => { } ``` -### No uses `useRef` para almacenar el estado +### Do not use `useRef` to store state -Evita usar `useRef` para almacenar el estado. +Avoid using `useRef` to store state. -Si deseas almacenar el estado, deberías usar `useState` o `useRecoilState`. +If you want to store state, you should use `useState` or `useRecoilState`. -Consulta [cómo gestionar las re-renderizaciones](#managing-re-renders) si sientes que necesitas `useRef` para evitar algunas re-renderizaciones. +See [how to manage re-renders](#managing-re-renders) if you feel like you need `useRef` to prevent some re-renders from happening. -## Gestión de las re-renderizaciones +## Managing re-renders -Las re-renderizaciones pueden ser difíciles de gestionar en React. +Re-renders can be hard to manage in React. -Aquí hay algunas reglas a seguir para evitar re-renderizaciones innecesarias. +Here are some rules to follow to avoid unnecessary re-renders. -Ten en cuenta que siempre puedes evitar re-renderizaciones comprendiendo su causa. +Keep in mind that you can **always** avoid re-renders by understanding their cause. -### Trabaja a nivel de raíz +### Work at the root level -Ahora es fácil evitar re-renderizaciones en nuevas funciones eliminándolas a nivel de raíz. +Avoiding re-renders in new features is now made easy by eliminating them at the root level. -El componente acompañante `PageChangeEffect` contiene solo un `useEffect` que alberga toda la lógica para ejecutar en un cambio de página. +The `PageChangeEffect` sidecar component contains just one `useEffect` that holds all the logic to execute on a page change. -De esa manera, sabes que solo hay un lugar que puede desencadenar una re-renderización. +That way you know that there's just one place that can trigger a re-render. -### Siempre piensa dos veces antes de añadir `useEffect` en tu base de código. +### Always think twice before adding `useEffect` in your codebase -Las re-renderizaciones son a menudo causadas por `useEffect` innecesarios. +Re-renders are often caused by unnecessary `useEffect`. -Deberías pensar si necesitas `useEffect`, o si puedes mover la lógica a una función manejadora de eventos. +You should think whether you need `useEffect`, or if you can move the logic in a event handler function. -Por lo general, encontrarás fácil mover la lógica a una función `handleClick` o `handleChange`. +You'll find it generally easy to move the logic in a `handleClick` or `handleChange` function. -También puedes encontrarlas en bibliotecas como Apollo: `onCompleted`, `onError`, etc. +You can also find them in libraries like Apollo: `onCompleted`, `onError`, etc. -### Usa un componente hermano para extraer `useEffect` o lógica de obtención de datos +### Use a sibling component to extract `useEffect` or data fetching logic -Si sientes que necesitas añadir un `useEffect` en tu componente raíz, deberías considerar extraerlo en un componente acompañante. +If you feel like you need to add a `useEffect` in your root component, you should consider extracting it in a sidecar component. -Puedes aplicar lo mismo para la lógica de obtención de datos, con hooks de Apollo. +You can apply the same for data fetching logic, with Apollo hooks. ```tsx // ❌ Bad, will cause re-renders even if data is not changing, @@ -129,43 +129,43 @@ export const App = () => ( ); ``` -### Usa estados de familia de recoil y selectores de familia de recoil +### Use recoil family states and recoil family selectors -Los estados y selectores de familia de recoil son una gran manera de evitar re-renderizaciones. +Recoil family states and selectors are a great way to avoid re-renders. -Son útiles cuando necesitas almacenar una lista de elementos. +They are useful when you need to store a list of items. -### No deberías usar `React.memo(MyComponent)` +### You shouldn't use `React.memo(MyComponent)` -Evita usar `React.memo()` porque no resuelve la causa de la re-renderización, sino que rompe la cadena de re-renderización, lo que puede llevar a un comportamiento inesperado y hacer que el código sea muy difícil de refactorizar. +Avoid using `React.memo()` because it does not solve the cause of the re-render, but instead breaks the re-render chain, which can lead to unexpected behavior and make the code very hard to refactor. -### Limita el uso de `useCallback` o `useMemo` +### Limit `useCallback` or `useMemo` usage -A menudo no son necesarios y harán que el código sea más difícil de leer y mantener para una ganancia de rendimiento que es imperceptible. +They are often not necessary and will make the code harder to read and maintain for a gain of performance that is unnoticeable. ## Console.logs -Las declaraciones `console.log` son valiosas durante el desarrollo, ofreciendo información en tiempo real sobre los valores de las variables y el flujo de código. Pero, dejarlas en el código de producción puede llevar a varios problemas: +`console.log` statements are valuable during development, offering real-time insights into variable values and code flow. But, leaving them in production code can lead to several issues: -1. **Rendimiento**: El registro excesivo puede afectar el rendimiento en tiempo de ejecución, especialmente en aplicaciones del lado del cliente. +1. **Performance**: Excessive logging can affect the runtime performance, especially on client-side applications. -2. **Seguridad**: Registrar datos sensibles puede exponer información crítica a cualquier persona que inspeccione la consola del navegador. +2. **Security**: Logging sensitive data can expose critical information to anyone who inspects the browser's console. -3. **Limpieza**: Llenar la consola con registros puede oscurecer advertencias o errores importantes que los desarrolladores o herramientas necesitan ver. +3. **Cleanliness**: Filling up the console with logs can obscure important warnings or errors that developers or tools need to see. -4. **Profesionalismo**: Los usuarios finales o clientes que revisen la consola y vean una miríada de declaraciones de registros podrían cuestionar la calidad y el acabado del código. +4. **Professionalism**: End users or clients checking the console and seeing a myriad of log statements might question the code's quality and polish. -Asegúrate de eliminar todos los `console.logs` antes de enviar el código a producción. +Make sure you remove all `console.logs` before pushing the code to production. -## Nomenclatura +## Naming -### Nombres de variables +### Variable Naming -Los nombres de variables deben describir con precisión el propósito o función de la variable. +Variable names ought to precisely depict the purpose or function of the variable. -#### El problema con los nombres genéricos +#### The issue with generic names -Los nombres genéricos en programación no son ideales porque carecen de especificidad, lo que lleva a la ambigüedad y reduce la legibilidad del código. Tales nombres no transmiten el propósito de la variable o función, lo que dificulta a los desarrolladores entender la intención del código sin una investigación más profunda. Esto puede resultar en un aumento del tiempo de depuración, una mayor susceptibilidad a errores y dificultades en el mantenimiento y colaboración. Mientras tanto, la nomenclatura descriptiva hace que el código sea autoexplicativo y más fácil de navegar, mejorando la calidad del código y la productividad del desarrollador. +Generic names in programming are not ideal because they lack specificity, leading to ambiguity and reduced code readability. Such names fail to convey the variable or function's purpose, making it challenging for developers to understand the code's intent without deeper investigation. This can result in increased debugging time, higher susceptibility to errors, and difficulties in maintenance and collaboration. Meanwhile, descriptive naming makes the code self-explanatory and easier to navigate, enhancing code quality and developer productivity. ```tsx // ❌ Bad, uses a generic name that doesn't communicate its @@ -178,13 +178,13 @@ const [value, setValue] = useState(''); const [email, setEmail] = useState(''); ``` -#### Algunas palabras a evitar en los nombres de variables +#### Some words to avoid in variable names * dummy -### Manejadores de eventos +### Event handlers -Los nombres de manejadores de eventos deben comenzar con `handle`, mientras que `on` es un prefijo usado para nombrar eventos en las props de los componentes. +Event handler names should start with `handle`, while `on` is a prefix used to name events in components props. ```tsx // ❌ Bad @@ -200,13 +200,13 @@ const handleEmailChange = (val: string) => { }; ``` -## Props opcionales +## Optional Props -Evita pasar el valor predeterminado para una prop opcional. +Avoid passing the default value for an optional prop. -**EJEMPLO** +**EXAMPLE** -Toma el componente `EmailField` definido a continuación: +Take the`EmailField` component defined below: ```tsx type EmailFieldProps = { @@ -219,7 +219,7 @@ const EmailField = ({ value, disabled = false }: EmailFieldProps) => ( ); ``` -**Uso** +**Usage** ```tsx // ❌ Bad, passing in the same value as the default value adds no value @@ -231,11 +231,11 @@ const Form = () => ; const Form = () => ; ``` -## Componente como props +## Component as props -Intenta tanto como sea posible pasar componentes no instanciados como propiedades, para que los hijos puedan decidir por sí mismos qué propiedades necesitan pasar. +Try as much as possible to pass uninstantiated components as props, so children can decide on their own of what props they need to pass. -El ejemplo más común de esto son los componentes de icono: +The most common example for that is icon components: ```tsx const SomeParentComponent = () => ; @@ -252,25 +252,25 @@ const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => { }; ``` -Para que React entienda que el componente es un componente, necesitas usar PascalCase, para luego instanciarlo con `` +For React to understand that the component is a component, you need to use PascalCase, to later instantiate it with `` -## Prop Drilling: Mantenlo Minimalista +## Prop Drilling: Keep It Minimal -El prop drilling, en el contexto de React, se refiere a la práctica de pasar variables de estado y sus setters a través de muchas capas de componentes, incluso si los componentes intermedios no los usan. Aunque a veces es necesario, el exceso de prop drilling puede llevar a: +Prop drilling, in the React context, refers to the practice of passing state variables and their setters through many component layers, even if intermediary components don't use them. While sometimes necessary, excessive prop drilling can lead to: -1. **Readabilidad Reducida**: Rastrear de dónde proviene una propiedad o dónde se utiliza puede volverse complicado en una estructura de componentes muy anidada. +1. **Decreased Readability**: Tracing where a prop originates or where it's utilized can become convoluted in a deeply nested component structure. -2. **Desafíos de Mantenimiento**: Los cambios en la estructura de propiedades de un componente podrían requerir ajustes en varios componentes, incluso si no utilizan directamente la propiedad. +2. **Maintenance Challenges**: Changes in one component's prop structure might require adjustments in several components, even if they don't directly use the prop. -3. **Reducción de la Reusabilidad del Componente**: Un componente que recibe muchas propiedades solo para pasarlas se vuelve menos general y más difícil de reutilizar en diferentes contextos. +3. **Reduced Component Reusability**: A component receiving a lot of props solely for passing them down becomes less general-purpose and harder to reuse in different contexts. -Si sientes que estás usando en exceso el prop drilling, consulta [mejores prácticas de gestión de estado](#state-management). +If you feel that you are using excessive prop drilling, see [state management best practices](#state-management). -## Importar +## Imports -Al importar, opta por los alias designados en lugar de especificar rutas completas o relativas. +When importing, opt for the designated aliases rather than specifying complete or relative paths. -**Alias del identificador** +**The Aliases** ```js { @@ -282,7 +282,7 @@ Al importar, opta por los alias designados en lugar de especificar rutas complet } ``` -**Uso** +**Usage** ```tsx // ❌ Bad, specifies the entire relative path @@ -300,9 +300,9 @@ import { CatalogDecorator } from '~/testing/decorators/CatalogDecorator'; import { ComponentDecorator } from 'twenty-ui/testing'; ``` -## Validación de Esquema +## Schema Validation -[Zod](https://github.com/colinhacks/zod) es el validador de esquemas para objetos no tipados: +[Zod](https://github.com/colinhacks/zod) is the schema validator for untyped objects: ```js const validationSchema = z @@ -320,6 +320,6 @@ const validationSchema = z type Form = z.infer; ``` -## Cambios Cruciales +## Breaking Changes -Siempre ejecuta pruebas manuales exhaustivas antes de proceder para garantizar que las modificaciones no hayan causado interrupciones en otras partes, dado que las pruebas aún no se han integrado extensivamente. +Always perform thorough manual testing before proceeding to guarantee that modifications haven’t caused disruptions elsewhere, given that tests have not yet been extensively integrated. diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx index ae0c15a604..064ac5c256 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx @@ -1,11 +1,11 @@ --- -title: Arquitectura de Carpetas +title: Folder Architecture info: A detailed look into our folder architecture --- -En esta guía, explorarás los detalles de la estructura del directorio del proyecto y cómo contribuye a la organización y mantenibilidad de Twenty. +In this guide, you will explore the details of the project directory structure and how it contributes to the organization and maintainability of Twenty. -Siguiendo esta convención de arquitectura de carpetas, es más fácil encontrar los archivos relacionados con funciones específicas y asegurar que la aplicación sea escalable y mantenible. +By following this folder architecture convention, it's easier to find the files related to specific features and ensure that the application is scalable and maintainable. ``` front @@ -22,14 +22,14 @@ front └───... ``` -## Páginas +## Pages -Incluye los componentes de alto nivel definidos por las rutas de la aplicación. Importan más componentes de bajo nivel de la carpeta de módulos (más detalles abajo). +Includes the top-level components defined by the application routes. They import more low-level components from the modules folder (more details below). -## Módulos +## Modules -Cada módulo representa una función o un grupo de funciones, comprendiendo sus componentes específicos, estados y lógica operativa. -Todos deberían seguir la estructura siguiente. Puedes anidar módulos dentro de módulos (denominados submódulos) y se aplicarán las mismas reglas. +Each module represents a feature or a group of feature, comprising its specific components, states, and operational logic. +They should all follow the structure below. You can nest modules within modules (referred to as submodules) and the same rules will apply. ``` module1 @@ -50,60 +50,60 @@ module1 └───utils ``` -### Contextos +### Contexts -Un contexto es una manera de pasar datos a través del árbol de componentes sin tener que pasar propiedades manualmente en cada nivel. +A context is a way to pass data through the component tree without having to pass props down manually at every level. -Ver [React Context](https://react.dev/reference/react#context-hooks) para más detalles. +See [React Context](https://react.dev/reference/react#context-hooks) for more details. ### GraphQL -Incluye fragmentos, consultas y mutaciones. +Includes fragments, queries, and mutations. -Ver [GraphQL](https://graphql.org/learn/) para más detalles. +See [GraphQL](https://graphql.org/learn/) for more details. -* Fragmentos +* Fragments -Un fragmento es una parte reutilizable de una consulta, que puedes usar en diferentes lugares. Usando fragmentos, es más fácil evitar la duplicación de código. +A fragment is a reusable piece of a query, which you can use in different places. By using fragments, it's easier to avoid duplicating code. -Ver [GraphQL Fragments](https://graphql.org/learn/queries/#fragments) para más detalles. +See [GraphQL Fragments](https://graphql.org/learn/queries/#fragments) for more details. -* Consultas +* Queries -Ver [GraphQL Queries](https://graphql.org/learn/queries/) para más detalles. +See [GraphQL Queries](https://graphql.org/learn/queries/) for more details. -* Mutaciones +* Mutations -Ver [GraphQL Mutations](https://graphql.org/learn/queries/#mutations) para más detalles. +See [GraphQL Mutations](https://graphql.org/learn/queries/#mutations) for more details. ### Hooks -Ver [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks) para más detalles. +See [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks) for more details. -### Estados +### States -Contiene la lógica de gestión de estado. [RecoilJS](https://recoiljs.org) maneja esto. +Contains the state management logic. [RecoilJS](https://recoiljs.org) handles this. -* Selectores: Ver [RecoilJS Selectors](https://recoiljs.org/docs/basic-tutorial/selectors) para más detalles. +* Selectors: See [RecoilJS Selectors](https://recoiljs.org/docs/basic-tutorial/selectors) for more details. -La gestión de estado incorporada de React todavía maneja el estado dentro de un componente. +React's built-in state management still handles state within a component. -### Utilidades +### Utils -Debería contener solo funciones puras reutilizables. De lo contrario, crea hooks personalizados en la carpeta `hooks`. +Should just contain reusable pure functions. Otherwise, create custom hooks in the `hooks` folder. -## Interfaz de usuario +## UI -Contiene todos los componentes de interfaz de usuario reutilizables utilizados en la aplicación. +Contains all the reusable UI components used in the application. -Esta carpeta puede contener subcarpetas, como `datos`, `visualización`, `retroalimentación` y `entrada` para tipos específicos de componentes. Cada componente debe ser autónomo y reutilizable, para que puedas usarlo en diferentes partes de la aplicación. +This folder can contain sub-folders, like `data`, `display`, `feedback`, and `input` for specific types of components. Each component should be self-contained and reusable, so that you can use it in different parts of the application. -Al separar los componentes de la interfaz de usuario de otros componentes en la carpeta `modules`, es más fácil mantener un diseño consistente y realizar cambios en la interfaz de usuario sin afectar otras partes (lógica de negocio) del código base. +By separating the UI components from the other components in the `modules` folder, it's easier to maintain a consistent design and to make changes to the UI without affecting other parts (business logic) of the codebase. -## Interfaz y dependencias +## Interface and dependencies -Puedes importar otro código de módulo desde cualquier módulo excepto desde la carpeta `ui`. Esto mantendrá su código fácil de probar. +You can import other module code from any module except for the `ui` folder. This will keep its code easy to test. -### Interno +### Internal -Cada parte (hooks, estados, ...) de un módulo puede tener una carpeta `internal`, que contiene partes que se usan solo dentro del módulo. +Each part (hooks, states, ...) of a module can have an `internal` folder, which contains parts that are just used within the module. diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/frontend-commands.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/frontend-commands.mdx index aa7771dbcc..dfbe97af88 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/frontend-commands.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/frontend-commands.mdx @@ -1,22 +1,22 @@ --- -title: Comandos del Frontend +title: Frontend Commands --- -## Comandos útiles +## Useful commands -### Iniciando la aplicación +### Starting the app ```bash npx nx start twenty-front ``` -### Regenerar el esquema de graphql basado en el esquema API graphql +### Regenerate graphql schema based on API graphql schema ```bash npx nx run twenty-front:graphql:generate --configuration=metadata ``` -O +OR ```bash npx nx run twenty-front:graphql:generate @@ -28,14 +28,14 @@ npx nx run twenty-front:graphql:generate npx nx run twenty-front:lint # pass --fix to fix lint errors ``` -## Traducciones +## Translations ```bash npx nx run twenty-front:lingui:extract npx nx run twenty-front:lingui:compile ``` -### Prueba +### Test ```bash npx nx run twenty-front:test # run jest tests @@ -44,11 +44,11 @@ npx nx run twenty-front:storybook:test # run tests # (needs yarn storybook:serve npx nx run twenty-front:storybook:coverage # (needs yarn storybook:serve:dev to be running) ``` -## Stack Tecnológico +## Tech Stack The project has a clean and simple stack, with minimal boilerplate code. -**Aplicación** +**App** * [React](https://react.dev/) * [Apollo](https://www.apollographql.com/docs/) @@ -56,35 +56,35 @@ The project has a clean and simple stack, with minimal boilerplate code. * [Recoil](https://recoiljs.org/docs/introduction/core-concepts) * [TypeScript](https://www.typescriptlang.org/) -**Pruebas** +**Testing** * [Jest](https://jestjs.io/) * [Storybook](https://storybook.js.org/) -**Herramientas** +**Tooling** * [Yarn](https://yarnpkg.com/) * [Craco](https://craco.js.org/docs/) * [ESLint](https://eslint.org/) -## Arquitectura +## Architecture -### Enrutamiento +### Routing -[React Router](https://reactrouter.com/) maneja el enrutamiento. +[React Router](https://reactrouter.com/) handles the routing. -Para evitar [re-renderizados](/l/es/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) innecesarios toda la lógica de enrutamiento está en un `useEffect` en `PageChangeEffect`. +To avoid unnecessary [re-renders](/l/es/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) all the routing logic is in a `useEffect` in `PageChangeEffect`. -### Gestión del Estado +### State Management -[Recoil](https://recoiljs.org/docs/introduction/core-concepts) maneja la gestión del estado. +[Recoil](https://recoiljs.org/docs/introduction/core-concepts) handles state management. -Ver [mejores prácticas](/l/es/developers/contribute/capabilities/frontend-development/best-practices-front#state-management) para más información sobre la gestión del estado. +See [best practices](/l/es/developers/contribute/capabilities/frontend-development/best-practices-front#state-management) for more information on state management. -## Pruebas +## Testing -[Jest](https://jestjs.io/) sirve como la herramienta para pruebas unitarias mientras [Storybook](https://storybook.js.org/) es para pruebas de componentes. +[Jest](https://jestjs.io/) serves as the tool for unit testing while [Storybook](https://storybook.js.org/) is for component testing. -Jest es principalmente para probar funciones utilitarias, y no los componentes en sí mismos. +Jest is mainly for testing utility functions, and not components themselves. -Storybook es para probar el comportamiento de componentes aislados, así como mostrar el sistema de diseño. +Storybook is for testing the behavior of isolated components, as well as displaying the design system. diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/hotkeys.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/hotkeys.mdx index 4264b4afe0..43cde50e63 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/hotkeys.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/hotkeys.mdx @@ -1,178 +1,178 @@ --- -title: Atajos de teclado +title: Hotkeys --- -## Introducción +## Introduction -Cuando necesitas escuchar una tecla de acceso rápido, normalmente usarías el evento `onKeyDown`. +When you need to listen to a hotkey, you would normally use the `onKeyDown` event listener. -En `twenty-front`, sin embargo, podrías tener conflictos entre los mismos atajos de teclado utilizados en diferentes componentes, montados al mismo tiempo. +In `twenty-front` however, you might have conflicts between same hotkeys that are used in different components, mounted at the same time. -Por ejemplo, si tienes una página que escucha la tecla Enter y un modal que escucha la tecla Enter, con un componente Select dentro de ese modal que también escucha la tecla Enter, podrías tener un conflicto cuando todos están montados al mismo tiempo. +For example, if you have a page that listens for the Enter key, and a modal that listens for the Enter key, with a Select component inside that modal that listens for the Enter key, you might have a conflict when all are mounted at the same time. -## El gancho `useScopedHotkeys` +## The `useScopedHotkeys` hook -Para manejar este problema, tenemos un gancho personalizado que hace posible escuchar atajos de teclado sin ningún conflicto. +To handle this problem, we have a custom hook that makes it possible to listen to hotkeys without any conflict. -Lo colocas en un componente, y escuchará los atajos de teclado solo cuando el componente está montado Y cuando el **ámbito del atajo de teclado** especificado está activo. +You place it in a component, and it will listen to the hotkeys only when the component is mounted AND when the specified **hotkey scope** is active. -## ¿Cómo escuchar atajos de teclado en la práctica? +## How to listen for hotkeys in practice? -Hay dos pasos involucrados en configurar la escucha de atajos de teclado: +There are two steps involved in setting up hotkey listening : -1. Establece el [ámbito del atajo de teclado](#qué-es-un-ambito-de-atajo-de-teclado-) que escuchará los atajos de teclado -2. Usa el gancho `useScopedHotkeys` para escuchar atajos de teclado +1. Set the [hotkey scope](#what-is-a-hotkey-scope-) that will listen to hotkeys +2. Use the `useScopedHotkeys` hook to listen to hotkeys -Configurar los ámbitos de atajos de teclado es necesario incluso en páginas simples, porque otros elementos de la interfaz de usuario como el menú lateral o el menú de comandos también podrían escuchar atajos de teclado. +Setting up hotkey scopes is required even in simple pages, because other UI elements like left menu or command menu might also listen to hotkeys. -## Casos de uso para atajos de teclado +## Use cases for hotkeys -En general, tendrás dos casos de uso que requieren atajos de teclado: +In general, you'll have two use cases that require hotkeys : -1. En una página o un componente montado en una página -2. En un componente tipo modal que toma el enfoque debido a la acción del usuario +1. In a page or a component mounted in a page +2. In a modal-type component that takes the focus due to a user action -El segundo caso de uso puede ocurrir recursivamente: un desplegable en un modal, por ejemplo. +The second use case can happen recursively : a dropdown in a modal for example. -### Escuchando atajos de teclado en una página +### Listening to hotkeys in a page -Ejemplo: +Example : ```tsx -const EscuchaEnterEnPagina = () => { +const PageListeningEnter = () => { const { - estableceAmbitoDeAtajoYMemorizaAmbitoAnterior, - regresaAlAmbitoDeAtajoAnterior, + setHotkeyScopeAndMemorizePreviousScope, + goBackToPreviousHotkeyScope, } = usePreviousHotkeyScope(); - // 1. Establece el ámbito de atajo en un useEffect + // 1. Set the hotkey scope in a useEffect useEffect(() => { - estableceAmbitoDeAtajoYMemorizaAmbitoAnterior( - EjemploAmbitosDeAtajo.EjemploEnterPagina, + setHotkeyScopeAndMemorizePreviousScope( + ExampleHotkeyScopes.ExampleEnterPage, ); - // Revertir al ámbito de atajo anterior cuando se desmonte el componente + // Revert to the previous hotkey scope when the component is unmounted return () => { - regresaAlAmbitoDeAtajoAnterior(); + goBackToPreviousHotkeyScope(); }; - }, [regresaAlAmbitoDeAtajoAnterior, estableceAmbitoDeAtajoYMemorizaAmbitoAnterior]); + }, [goBackToPreviousHotkeyScope, setHotkeyScopeAndMemorizePreviousScope]); - // 2. Usa el gancho useScopedHotkeys + // 2. Use the useScopedHotkeys hook useScopedHotkeys( Key.Enter, () => { - // Alguna lógica ejecutada en esta página cuando el usuario presiona Enter + // Some logic executed on this page when the user presses Enter // ... }, - EjemploAmbitosDeAtajo.EjemploEnterPagina, + ExampleHotkeyScopes.ExampleEnterPage, ); - return
Mi página que escucha Enter
; + return
My page that listens for Enter
; }; ``` -### Escuchando atajos de teclado en un componente tipo modal +### Listening to hotkeys in a modal-type component -Para este ejemplo utilizaremos un componente modal que escucha la tecla Escape para indicar a su padre que lo cierre. +For this example we'll use a modal component that listens for the Escape key to tell its parent to close it. -Aquí la interacción del usuario está cambiando el ámbito. +Here the user interaction is changing the scope. ```tsx -const PaginaEjemploConModal = () => { - const [mostrarModal, establecerMostrarModal] = useState(false); +const ExamplePageWithModal = () => { + const [showModal, setShowModal] = useState(false); const { - estableceAmbitoDeAtajoYMemorizaAmbitoAnterior, - regresaAlAmbitoDeAtajoAnterior, + setHotkeyScopeAndMemorizePreviousScope, + goBackToPreviousHotkeyScope, } = usePreviousHotkeyScope(); - const manejarClicAbrirModal = () => { - // 1. Establece el ámbito de atajo cuando el usuario abre el modal - establecerMostrarModal(true); - estableceAmbitoDeAtajoYMemorizaAmbitoAnterior( - EjemploAmbitosDeAtajo.EjemploModal, + const handleOpenModalClick = () => { + // 1. Set the hotkey scope when user opens the modal + setShowModal(true); + setHotkeyScopeAndMemorizePreviousScope( + ExampleHotkeyScopes.ExampleModal, ); }; - const manejarCierreModal = () => { - // 1. Revertir al ámbito de atajo anterior cuando se cierra el modal - establecerMostrarModal(false); - regresaAlAmbitoDeAtajoAnterior(); + const handleModalClose = () => { + // 1. Revert to the previous hotkey scope when the modal is closed + setShowModal(false); + goBackToPreviousHotkeyScope(); }; return
-

Mi página con un modal

- - {mostrarModal && } +

My page with a modal

+ + {showModal && }
; }; ``` -Luego, en el componente modal: +Then in the modal component : ```tsx -const MiComponenteDesplegable = ({ onClose }: { onClose: () => void }) => { - // 2. Usa el gancho useScopedHotkeys para escuchar la tecla Escape. - // Tenga en cuenta que Escape es una tecla de acceso rápido común que podría usarse en muchos otros componentes - // Por lo tanto, es importante usar un ámbito de atajo para evitar conflictos +const MyDropdownComponent = ({ onClose }: { onClose: () => void }) => { + // 2. Use the useScopedHotkeys hook to listen for Escape. + // Note that escape is a common hotkey that could be used by many other components + // So it's important to use a hotkey scope to avoid conflicts useScopedHotkeys( Key.Escape, () => { onClose() }, - EjemploAmbitosDeAtajo.EjemploModal, + ExampleHotkeyScopes.ExampleModal, ); - return
Mi componente modal
; + return
My modal component
; }; ``` -Es importante usar este patrón cuando no estás seguro de que solo usar un useEffect con mount/unmount será suficiente para evitar conflictos. +It's important to use this pattern when you're not sure that just using a useEffect with mount/unmount will be enough to avoid conflicts. -Esos conflictos pueden ser difíciles de depurar, y puede suceder más a menudo de lo que crees con useEffects. +Those conflicts can be hard to debug, and it might happen more often than not with useEffects. -## ¿Qué es un ámbito de atajo de teclado? +## What is a hotkey scope? -Un ámbito de atajo de teclado es una cadena que representa un contexto en el que los atajos de teclado están activos. Por lo general, se codifica como un enum. +A hotkey scope is a string that represents a context in which the hotkeys are active. It is generally encoded as an enum. -Cuando cambias el ámbito del atajo de teclado, se habilitarán los atajos que están escuchando este ámbito y se deshabilitarán los atajos que escuchan otros ámbitos. +When you change the hotkey scope, the hotkeys that are listening to this scope will be enabled and the hotkeys that are listening to other scopes will be disabled. -Solo puedes establecer un ámbito a la vez. +You can set only one scope at a time. -Como ejemplo, los ámbitos de atajos de teclado para cada página se definen en el enum `PageHotkeyScope`: +As an example, the hotkey scopes for each page are defined in the `PageHotkeyScope` enum: ```tsx export enum PageHotkeyScope { - Configuración = 'configuración', - CrearEspacioTrabajo = 'crear-espacio-trabajo', - IniciarSesion = 'iniciar-sesión', - CrearPerfil = 'crear-perfil', - PlanRequerido = 'plan-requerido', - MostrarPagina = 'mostrar-pagina', - MostrarPersonaPagina = 'mostrar-persona-pagina', - MostrarEmpresaPagina = 'mostrar-empresa-pagina', - PaginaEmpresas = 'pagina-empresas', - PaginaPersonas = 'pagina-personas', - PaginaOportunidades = 'pagina-oportunidades', - PaginaPerfil = 'pagina-perfil', - PaginaMiembroEspacioTrabajo = 'pagina-miembro-espacio-trabajo', - PaginaTareas = 'pagina-tareas', + Settings = 'settings', + CreateWorkspace = 'create-workspace', + SignInUp = 'sign-in-up', + CreateProfile = 'create-profile', + PlanRequired = 'plan-required', + ShowPage = 'show-page', + PersonShowPage = 'person-show-page', + CompanyShowPage = 'company-show-page', + CompaniesPage = 'companies-page', + PeoplePage = 'people-page', + OpportunitiesPage = 'opportunities-page', + ProfilePage = 'profile-page', + WorkspaceMemberPage = 'workspace-member-page', + TaskPage = 'task-page', } ``` -Internamente, el ámbito seleccionado se almacena en un estado de Recoil que se comparte en toda la aplicación: +Internally, the currently selected scope is stored in a Recoil state that is shared across the application : ```tsx -export const estadoActualDeAmbitoDeAtajo = createState({ - key: 'estadoActualDeAmbitoDeAtajo', - defaultValue: AMBITO_INICIAL_ATAJOS, +export const currentHotkeyScopeState = createState({ + key: 'currentHotkeyScopeState', + defaultValue: INITIAL_HOTKEYS_SCOPE, }); ``` -¡Pero este estado de Recoil nunca debe manejarse manualmente! Veremos cómo usarlo en la siguiente sección. +But this Recoil state should never be handled manually ! We'll see how to use it in the next section. -## ¿Cómo funciona internamente? +## How is it working internally? -Hicimos un contenedor delgado sobre [react-hotkeys-hook](https://react-hotkeys-hook.vercel.app/docs/intro) que lo hace más eficiente y evita renders innecesarios. +We made a thin wrapper on top of [react-hotkeys-hook](https://react-hotkeys-hook.vercel.app/docs/intro) that makes it more performant and avoids unnecessary re-renders. -También creamos un estado de Recoil para manejar el estado del ámbito de atajos de teclado y hacerlo disponible en toda la aplicación. +We also create a Recoil state to handle the hotkey scope state and make it available everywhere in the application. diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/storybook.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/storybook.mdx index f6e770b67b..5c7f5fa52a 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/storybook.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/storybook.mdx @@ -1,8 +1,8 @@ --- title: Storybook -description: Navegar por la biblioteca de componentes de interfaz de Twenty +description: Browse Twenty's UI component library --- -Ver nuestra biblioteca completa de componentes y documentación en Storybook. +View our complete component library and documentation in Storybook. -[Abrir Storybook →](https://storybook.twenty.com) +[Open Storybook →](https://storybook.twenty.com) diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/style-guide.mdx index cdfe35a132..e3ba4a44f0 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/style-guide.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/style-guide.mdx @@ -1,64 +1,64 @@ --- -title: Guía de Estilo +title: Style Guide --- -Este documento incluye las reglas a seguir al escribir código. +This document includes the rules to follow when writing code. -El objetivo aquí es tener una base de código coherente, que sea fácil de leer y de mantener. +The goal here is to have a consistent codebase, which is easy to read and easy to maintain. -Para esto, es mejor ser un poco más detallado que ser demasiado conciso. +For this, it's better to be a bit more verbose than to be too concise. -Ten siempre en cuenta que la gente lee código más a menudo de lo que lo escribe, especialmente en un proyecto de código abierto, donde cualquiera puede contribuir. +Always keep in mind that people read code more often than they write it, specially on an open source project, where anyone can contribute. -Hay muchas reglas que no están definidas aquí, pero que son verificadas automáticamente por linters. +There are a lot of rules that are not defined here, but that are automatically checked by linters. ## React -### Usar componentes funcionales +### Use functional components -Siempre usa componentes funcionales TSX. +Always use TSX functional components. Do not use default `import` with `const`, because it's harder to read and harder to import with code completion. ```tsx -// ❌ Malo, más difícil de leer, más difícil de importar con autocompletación de código +// ❌ Bad, harder to read, harder to import with code completion const MyComponent = () => { - return
Hola Mundo
; + return
Hello World
; }; export default MyComponent; -// ✅ Bueno, fácil de leer, fácil de importar con autocompletación de código +// ✅ Good, easy to read, easy to import with code completion export function MyComponent() { - return
Hola Mundo
; + return
Hello World
; }; ``` -### "Props" +### Props -Crea el tipo de las props y llámalo `(NombreDelComponente)Props` si no hay necesidad de exportarlo. +Create the type of the props and call it `(ComponentName)Props` if there's no need to export it. -Usa la desestructuración de props. +Use props destructuring. ```tsx -// ❌ Malo, sin tipo -export const MyComponent = (props) =>
Hola {props.name}
; +// ❌ Bad, no type +export const MyComponent = (props) =>
Hello {props.name}
; -// ✅ Bueno, con tipo +// ✅ Good, type type MyComponentProps = { name: string; }; -export const MyComponent = ({ name }: MyComponentProps) =>
Hola {name}
; +export const MyComponent = ({ name }: MyComponentProps) =>
Hello {name}
; ``` -#### Evita usar `React.FC` o `React.FunctionComponent` para definir tipos de props +#### Refrain from using `React.FC` or `React.FunctionComponent` to define prop types ```tsx -/* ❌ - Malo, define las anotaciones de tipo de componente con `FC` - * - Con `React.FC`, el componente acepta implícitamente una prop `children` - * incluso si no está definida en el tipo de prop. Esto podría no ser siempre - * deseable, especialmente si el componente no tiene la intención de renderizar +/* ❌ - Bad, defines the component type annotations with `FC` + * - With `React.FC`, the component implicitly accepts a `children` prop + * even if it's not defined in the prop type. This might not always be + * desirable, especially if the component doesn't intend to render * children. */ const EmailField: React.FC<{ @@ -81,12 +81,12 @@ const EmailField = ({ value }: EmailFieldProps) => ( ); ``` -#### Sin Propagación de una sola variable de Props en Elementos JSX +#### No Single Variable Prop Spreading in JSX Elements -Evita usar la propagación de una sola variable de props en elementos JSX, como `{...props}`. Esta práctica a menudo resulta en un código que es menos legible y más difícil de mantener porque no está claro qué props está recibiendo el componente. +Avoid using single variable prop spreading in JSX elements, like `{...props}`. This practice often results in code that is less readable and harder to maintain because it's unclear which props the component is receiving. ```tsx -/* ❌ - Malo, propaga una sola variable de prop en el componente subyacente +/* ❌ - Bad, spreads a single variable prop into the underlying component */ const MyComponent = (props: OwnProps) => { return ; @@ -102,25 +102,25 @@ const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => { }; ``` -Razonamiento: +Rationale: -* A simple vista, es más claro qué props se está pasando, lo que hace que sea más fácil de entender y mantener. -* Ayuda a prevenir el acoplamiento estricto entre componentes mediante sus props. -* Las herramientas de linting facilitan la identificación de props mal escritas o sin uso al listar props explícitamente. +* At a glance, it's clearer which props the code passes down, making it easier to understand and maintain. +* It helps to prevent tight coupling between components via their props. +* Linting tools make it easier to identify misspelled or unused props when you list props explicitly. ## JavaScript -### Usar el operador de fusión nula `??` +### Use nullish-coalescing operator `??` ```tsx -// ❌ Malo, puede devolver "default" incluso si el valor es 0 o '' +// ❌ Bad, can return 'default' even if value is 0 or '' const value = process.env.MY_VALUE || 'default'; -// ✅ Bueno, devolverá "default" sólo si el valor es null o undefined +// ✅ Good, will return 'default' only if value is null or undefined const value = process.env.MY_VALUE ?? 'default'; ``` -### Usar encadenamiento opcional `?.` +### Use optional chaining `?.` ```tsx // ❌ Bad @@ -132,30 +132,30 @@ onClick?.(); ## TypeScript -### Usar `type` en lugar de `interface` +### Use `type` instead of `interface` -Siempre usa `type` en lugar de `interface`, porque casi siempre se superponen y `type` es más flexible. +Always use `type` instead of `interface`, because they almost always overlap, and `type` is more flexible. ```tsx -// ❌ Malo +// ❌ Bad interface MyInterface { name: string; } -// ✅ Bueno +// ✅ Good type MyType = { name: string; }; ``` -### Usar literales de cadena en lugar de enums +### Use string literals instead of enums -[Los literales de cadena](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types) son la manera preferida para manejar valores tipo enum en TypeScript. Son más fáciles de extender con Pick y Omit, y ofrecen una mejor experiencia de desarrollo, especialmente con la autocompletación de código. +[String literals](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types) are the go-to way to handle enum-like values in TypeScript. They are easier to extend with Pick and Omit, and offer a better developer experience, specially with code completion. -Puedes ver por qué TypeScript recomienda evitar enums [aquí](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums). +You can see why TypeScript recommends avoiding enums [here](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums). ```tsx -// ❌ Malo, utiliza un enum +// ❌ Bad, utilizes an enum enum Color { Red = "red", Green = "green", @@ -166,18 +166,18 @@ let color = Color.Red; ``` ```tsx -// ✅ Bueno, utiliza un literal de cadena +// ✅ Good, utilizes a string literal let color: "red" | "green" | "blue" = "red"; ``` -#### GraphQL y bibliotecas internas +#### GraphQL and internal libraries -Deberías usar enums que genera el codegen de GraphQL. +You should use enums that GraphQL codegen generates. -También es mejor usar un enum al usar una biblioteca interna, para que la biblioteca interna no tenga que exponer un tipo de literal de cadena que no está relacionado con la API interna. +It's also better to use an enum when using an internal library, so the internal library doesn't have to expose a string literal type that is not related to the internal API. -Ejemplo: +Example: ```TSX const { @@ -190,54 +190,54 @@ setHotkeyScopeAndMemorizePreviousScope( ); ``` -## Estilo +## Styling -### Usar StyledComponents +### Use StyledComponents -Estiliza los componentes con [styled-components](https://emotion.sh/docs/styled). +Style the components with [styled-components](https://emotion.sh/docs/styled). ```tsx -// ❌ Malo -
Hola Mundo
+// ❌ Bad +
Hello World
``` ```tsx -// ✅ Bueno +// ✅ Good const StyledTitle = styled.div` color: red; `; ``` -Prefija los componentes estilizados con "Styled" para diferenciarlos de los componentes "reales". +Prefix styled components with "Styled" to differentiate them from "real" components. ```tsx -// ❌ Malo +// ❌ Bad const Title = styled.div` color: red; `; ``` ```tsx -// ✅ Bueno +// ✅ Good const StyledTitle = styled.div` color: red; `; ``` -### Tematización +### Theming -Utilizar el tema para la mayor parte de la estilización de los componentes es el enfoque preferido. +Utilizing the theme for the majority of component styling is the preferred approach. -#### Unidades de medida +#### Units of measurement -Evita usar valores `px` o `rem` directamente dentro de los componentes estilizados. Los valores necesarios suelen estar ya definidos en el tema, por lo que se recomienda usar el tema para estos fines. +Avoid using `px` or `rem` values directly within the styled components. The necessary values are generally already defined in the theme, so it’s recommended to make use of the theme for these purposes. -#### Colores +#### Colors -Abstente de introducir nuevos colores; en su lugar, utiliza la paleta existente del tema. Si hay una situación en la que la paleta no se ajusta, deja un comentario para que el equipo pueda corregirlo. +Refrain from introducing new colors; instead, use the existing palette from the theme. Should there be a situation where the palette does not align, please leave a comment so that the team can rectify it. ```tsx -// ❌ Malo, especifica directamente los valores de estilo sin utilizar el tema +// ❌ Bad, directly specifies style values without utilizing the theme const StyledButton = styled.button` color: #333333; font-size: 1rem; @@ -248,7 +248,7 @@ const StyledButton = styled.button` ``` ```tsx -// ✅ Bueno, utiliza el tema +// ✅ Good, utilizes the theme const StyledButton = styled.button` color: ${({ theme }) => theme.font.color.primary}; font-size: ${({ theme }) => theme.font.size.md}; @@ -258,33 +258,33 @@ const StyledButton = styled.button` `; ``` -## Aplicando No-Type Imports +## Enforcing No-Type Imports -Evita las importaciones de tipo. Para reforzar este estándar, una regla de ESLint verifica y reporta cualquier importación de tipo. Esto ayuda a mantener la consistencia y la legibilidad en el código TypeScript. +Avoid type imports. To enforce this standard, an ESLint rule checks for and reports any type imports. This helps maintain consistency and readability in the TypeScript code. ```tsx -// ❌ Malo +// ❌ Bad import { type Meta, type StoryObj } from '@storybook/react'; -// ❌ Malo +// ❌ Bad import type { Meta, StoryObj } from '@storybook/react'; -// ✅ Bueno +// ✅ Good import { Meta, StoryObj } from '@storybook/react'; ``` -### Por qué No-Type Imports +### Why No-Type Imports -* **Consistencia**: Al evitar las importaciones de tipo y usar un solo enfoque tanto para las importaciones de tipo como de valor, la base de código se mantiene consistente en su estilo de importación de módulos. +* **Consistency**: By avoiding type imports and using a single approach for both type and value imports, the codebase remains consistent in its module import style. -* **Legibilidad**: Las no-importaciones de tipo mejoran la legibilidad del código al dejar claro cuándo se están importando valores o tipos. Esto reduce la ambigüedad y hace más fácil entender el propósito de los símbolos importados. +* **Readability**: No-type imports improve code readability by making it clear when you're importing values or types. This reduces ambiguity and makes it easier to understand the purpose of imported symbols. -* **Mantenibilidad**: Mejora la mantenibilidad de la base de código porque los desarrolladores pueden identificar y localizar importaciones solo de tipo al revisar o modificar el código. +* **Maintainability**: It enhances codebase maintainability because developers can identify and locate type-only imports when reviewing or modifying code. -### Regla de ESLint +### ESLint Rule -An ESLint rule, `@typescript-eslint/consistent-type-imports`, enforces the no-type import standard. Esta regla generará errores o advertencias sobre cualquier violación de importación de tipo. +An ESLint rule, `@typescript-eslint/consistent-type-imports`, enforces the no-type import standard. This rule will generate errors or warnings for any type import violations. -Por favor, ten en cuenta que esta regla específicamente aborda extraños casos límite donde ocurren importaciones de tipo no intencionadas. TypeScript en sí mismo desaconseja esta práctica, como se menciona en las [notas de lanzamiento de TypeScript 3.8](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html). En la mayoría de situaciones, no deberías necesitar usar importaciones solo de tipo. +Please note that this rule specifically addresses rare edge cases where unintentional type imports occur. TypeScript itself discourages this practice, as mentioned in the [TypeScript 3.8 release notes](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html). In most situations, you should not need to use type-only imports. -Para asegurarte de que tu código cumpla con esta regla, asegúrate de ejecutar ESLint como parte de tu flujo de trabajo de desarrollo. +To ensure your code complies with this rule, make sure to run ESLint as part of your development workflow. diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/work-with-figma.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/work-with-figma.mdx index 85382f32b1..6cffcc405e 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/work-with-figma.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/work-with-figma.mdx @@ -1,59 +1,59 @@ --- -title: Trabajar con Figma -info: Aprende cómo puedes colaborar con Twenty en Figma +title: Work with Figma +info: Learn how you can collaborate with Twenty's Figma --- -Figma es una herramienta de diseño de interfaces colaborativa que ayuda a superar la barrera de comunicación entre diseñadores y desarrolladores. -Esta guía explica cómo puedes colaborar con Figma. +Figma is a collaborative interface design tool that aids in bridging the communication barrier between designers and developers. +This guide explains how you can collaborate with Figma. -## Acceso +## Access -1. **Accede al enlace compartido:** Puedes acceder al archivo de Figma del proyecto [aquí](https://www.figma.com/file/xt8O9mFeLl46C5InWwoMrN/Twenty). -2. **Inicia sesión:** Si aún no has iniciado sesión, Figma te pedirá que lo hagas. - Las características clave solo están disponibles para usuarios registrados, como el modo desarrollador y la capacidad de seleccionar un marco dedicado. +1. **Access the shared link:** You can access the project's Figma file [here](https://www.figma.com/file/xt8O9mFeLl46C5InWwoMrN/Twenty). +2. **Sign in:** If you're not already signed in, Figma will prompt you to do so. + Key features are only available to logged-in users, such as the developer mode and the ability to select a dedicated frame. - No podrás colaborar efectivamente sin una cuenta. + You will not be able to collaborate effectively without an account. -## Estructura de Figma +## Figma structure -En la barra lateral izquierda, puedes acceder a las diferentes páginas del Figma de Twenty. Así es como están organizadas: +On the left sidebar, you can access the different pages of Twenty's Figma. This is how they're organized: -* **Página de componentes:** Esta es la primera página. El diseñador la utiliza para crear y organizar los elementos de diseño reutilizables que se usan en todo el archivo de diseño. Por ejemplo, botones, íconos, símbolos u otros componentes reutilizables. Sirve para mantener la consistencia a lo largo del diseño. -* **Página principal:** La segunda página es la página principal, que muestra la interfaz de usuario completa del proyecto. Puedes presionar ***Play*** para usar el prototipo completo de la aplicación. -* **Páginas de características:** Las otras páginas están típicamente dedicadas a características en progreso. Contienen el diseño de características específicas o módulos de la aplicación o sitio web. Normalmente, aún están en desarrollo. +* **Components page:** This is the first page. The designer uses it to create and organize the reusable design elements used throughout the design file. For example, buttons, icons, symbols, or any other reusable components. It serves to maintain consistency across the design. +* **Main page:** The second page is the main page, which shows the complete user interface of the project. You can press ***Play*** to use the full app prototype. +* **Features pages:** The other pages are typically dedicated to features in progress. They contain the design of specific features or modules of the application or website. They are typically still in progress. -## Consejos útiles +## Useful Tips -Con acceso de solo lectura, no puedes editar el diseño, pero puedes acceder a todas las características que serán útiles para convertir los diseños en código. +With read-only access, you can't edit the design, but you can access all features that will be useful to convert the designs into code. -### Usa el modo Dev +### Use the Dev mode -El Modo Dev de Figma mejora la productividad de los desarrolladores al proporcionar una navegación fácil por el diseño, una gestión eficaz de assets, herramientas de comunicación eficientes, integraciones de caja de herramientas, fragmentos de código rápidos e información clave de capas, superando la brecha entre diseño y desarrollo. Puedes aprender más sobre el Modo Dev [aquí](https://www.figma.com/dev-mode/). +Figma's Dev Mode enhances developers' productivity by providing easy design navigation, effective asset management, efficient communication tools, toolbox integrations, quick code snippets, and key layer information, bridging the gap between design and development. You can learn more about Dev Mode [here](https://www.figma.com/dev-mode/). -Cambia al modo "Desarrollador" en la parte derecha de la barra de herramientas para ver las especificaciones de diseño, copiar CSS y acceder a los assets. +Switch to the "Developer" mode in the right part of the toolbar to see design specs, copy CSS, and access assets. -### Usar el prototipo +### Use the Prototype -Haz clic en cualquier elemento del lienzo y presiona el botón "Play" en el extremo superior derecho de la interfaz para acceder a la vista del prototipo. El modo de prototipo te permite interactuar con el diseño como si fuera el producto final. Demuestra el flujo entre pantallas y cómo los elementos de la interfaz, como botones, enlaces o menús, se comportan al interactuar con ellos. +Click on any element on the canvas and press the “Play” button at the top right edge of the interface to access the prototype view. Prototype mode allows you to interact with the design as if it were the final product. It demonstrates the flow between screens and how interface elements like buttons, links, or menus behave when interacted with. -1. **Entendiendo las transiciones y animaciones:** En el modo Prototipo, puedes ver cualquier transición o animación añadida por un diseñador entre pantallas o elementos de UI, proporcionando instrucciones visuales claras a los desarrolladores sobre la conducta y el estilo intencionados. -2. **Aclaración de implementación:** Un prototipo también puede ayudar a reducir las ambigüedades. Los desarrolladores pueden interactuar con él para obtener una mejor comprensión de la funcionalidad o apariencia de elementos particulares. +1. **Understanding transitions and animations:** In the Prototype mode, you can view any transitions or animations added by a designer between screens or UI elements, providing clear visual instructions to developers on the intended behavior and style. +2. **Implementation clarification:** A prototype can also help reduce ambiguities. Developers can interact with it to gain a better understanding of the functionality or appearance of particular elements. -Para más detalles y orientación sobre el aprendizaje de la plataforma Figma, puedes visitar la [Documentación Oficial de Figma](https://help.figma.com/hc/en-us). +For more comprehensive details and guidance on learning the Figma platform, you can visit the official [Figma Documentation](https://help.figma.com/hc/en-us). -### Medir distancias +### Measure distances -Selecciona un elemento, mantén presionada la tecla `Option` (Mac) o `Alt` (Windows), luego pasa el cursor sobre otro elemento para ver la distancia entre ellos. +Select an element, hold `Option` key (Mac) or `Alt` key (Windows), then hover over another element to see the distance between them. -### Extensión Figma para VSCode (Recomendado) +### Figma extension for VSCode (Recommended) -[Figma para VS Code](https://marketplace.visualstudio.com/items?itemName=figma.figma-vscode-extension) -te permite navegar e inspeccionar archivos de diseño, colaborar con diseñadores, rastrear cambios y acelerar la implementación, todo sin salir de tu editor de texto. -Forma parte de nuestras extensiones recomendadas. +[Figma for VS Code](https://marketplace.visualstudio.com/items?itemName=figma.figma-vscode-extension) +lets you navigate and inspect design files, collaborate with designers, track changes, and speed up implementation - all without leaving your text editor. +It's part of our recommended extensions. -## Colaboración +## Collaboration -1. **Uso de Comentarios:** Puedes utilizar la función de comentarios haciendo clic en el ícono de burbuja en la parte izquierda de la barra de herramientas. -2. **Chat de Cursor:** Una característica agradable de Figma es el Chat de Cursor. Simplemente presiona `;` en Mac y `/` en Windows para enviar un mensaje si ves a alguien más usando Figma al mismo tiempo que tú. +1. **Using Comments:** You are welcome to use the comment feature by clicking on the bubble icon in the left part of the toolbar. +2. **Cursor chat:** A nice feature of Figma is the Cursor chat. Just press `;` on Mac and `/` on Windows to send a message if you see someone else using Figma as the same time as you. diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/local-setup.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/local-setup.mdx index bdcd6f6b97..cabd274d46 100644 --- a/packages/twenty-docs/l/es/developers/contribute/capabilities/local-setup.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/local-setup.mdx @@ -1,13 +1,13 @@ --- -title: Configuración Local -description: La guía para los colaboradores (o desarrolladores curiosos) que quieren ejecutar Twenty localmente. +title: Local Setup +description: The guide for contributors (or curious developers) who want to run Twenty locally. --- -## Prerrequisitos +## Prerequisites - - Antes de que puedas instalar y usar Twenty, asegúrate de instalar lo siguiente en tu computadora: + + Before you can install and use Twenty, make sure you install the following on your computer: * [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) * [Node v24.5.0](https://nodejs.org/en/download) @@ -15,38 +15,38 @@ description: La guía para los colaboradores (o desarrolladores curiosos) que qu * [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md) - `npm` no funcionará, deberías usar `yarn` en su lugar. Yarn ahora se envía con Node.js, por lo que no necesitas instalarlo por separado. - Solo tienes que ejecutar `corepack enable` para habilitar Yarn si aún no lo has hecho. + `npm` won't work, you should use `yarn` instead. Yarn is now shipped with Node.js, so you don't need to install it separately. + You only have to run `corepack enable` to enable Yarn if you haven't done it yet. - 1. Instalar WSL - Abre PowerShell como Administrador y ejecuta: + 1. Install WSL + Open PowerShell as Administrator and run: ```powershell wsl --install ``` - Ahora deberías ver un aviso para reiniciar tu computadora. Si no, reiníciala manualmente. + You should now see a prompt to restart your computer. If not, restart it manually. - Al reiniciar, se abrirá una ventana de PowerShell e instalará Ubuntu. Esto puede tomar algo de tiempo. - Verás un aviso para crear un nombre de usuario y contraseña para tu instalación de Ubuntu. + Upon restart, a powershell window will open and install Ubuntu. This may take up some time. + You'll see a prompt to create a username and password for your Ubuntu installation. - 2. Instalar y configurar git + 2. Install and configure git ```bash sudo apt-get install git - git config --global user.name "Tu Nombre" + git config --global user.name "Your Name" - git config --global user.email "tuemail@dominio.com" + git config --global user.email "youremail@domain.com" ``` - 3. Instalar nvm, node.js y yarn + 3. Install nvm, node.js and yarn - Usa `nvm` para instalar la versión correcta de `node`. El `.nvmrc` asegura que todos los colaboradores usen la misma versión. + Use `nvm` to install the correct `node` version. The `.nvmrc` ensures all contributors use the same version. ```bash @@ -55,13 +55,13 @@ description: La guía para los colaboradores (o desarrolladores curiosos) que qu curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash ``` - Cierra y vuelve a abrir tu terminal para usar nvm. Luego ejecuta los siguientes comandos. + Close and reopen your terminal to use nvm. Then run the following commands. ```bash - nvm install # instala la versión recomendada de node + nvm install # installs recommended node version - nvm use # usa la versión recomendada de node + nvm use # use recommended node version corepack enable ``` @@ -70,13 +70,13 @@ description: La guía para los colaboradores (o desarrolladores curiosos) que qu --- -## Paso 1: Clonar con Git +## Step 1: Git Clone -En tu terminal, ejecuta el siguiente comando. +In your terminal, run the following command. - - Si aún no has configurado claves SSH, puedes aprender cómo hacerlo [aquí](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh). + + If you haven't already set up SSH keys, you can learn how to do so [here](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh). ```bash git clone git@github.com:twentyhq/twenty.git @@ -90,28 +90,28 @@ En tu terminal, ejecuta el siguiente comando. -## Paso 2: Ubícate en la raíz +## Step 2: Position yourself at the root ```bash cd twenty ``` -Debes ejecutar todos los comandos de los siguientes pasos desde la raíz del proyecto. +You should run all commands in the following steps from the root of the project. -## Paso 3: Configurar una Base de Datos PostgreSQL +## Step 3: Set up a PostgreSQL Database - **Opción 1 (preferido):** Para aprovisionar tu base de datos localmente: - Usa el siguiente enlace para instalar PostgreSQL en tu máquina Linux: [Instalación de PostgreSQL](https://www.postgresql.org/download/linux/) + **Option 1 (preferred):** To provision your database locally: + Use the following link to install Postgresql on your Linux machine: [Postgresql Installation](https://www.postgresql.org/download/linux/) ```bash psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;" ``` - Nota: Puede que necesites agregar `sudo -u postgres` antes del comando `psql` para evitar errores de permisos. + Note: You might need to add `sudo -u postgres` to the command before `psql` to avoid permission errors. - **Opción 2:** Si tienes Docker instalado: + **Option 2:** If you have docker installed: ```bash make postgres-on-docker @@ -119,7 +119,7 @@ Debes ejecutar todos los comandos de los siguientes pasos desde la raíz del pro - **Opción 1 (preferido):** Para aprovisionar tu base de datos localmente con `brew`: + **Option 1 (preferred):** To provision your database locally with `brew`: ```bash brew install postgresql@16 @@ -128,49 +128,49 @@ Debes ejecutar todos los comandos de los siguientes pasos desde la raíz del pro psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;" ``` - Puedes verificar si el servidor PostgreSQL está corriendo ejecutando: + You can verify if the PostgreSQL server is running by executing: ```bash brew services list ``` - El instalador puede que no cree el usuario `postgres` por defecto al instalar - vía Homebrew en macOS. En cambio, crea un rol de PostgreSQL que coincide con tu - nombre de usuario de macOS (por ejemplo, "john"). - Para comprobar y crear el usuario `postgres` si es necesario, sigue estos pasos: + The installer might not create the `postgres` user by default when installing + via Homebrew on MacOS. Instead, it creates a PostgreSQL role that matches your macOS + username (e.g., "john"). + To check and create the `postgres` user if necessary, follow these steps: ```bash - # Conectar a PostgreSQL + # Connect to PostgreSQL psql postgres - o + or psql -U $(whoami) -d postgres ``` - Una vez en el comando psql (postgres=#), ejecuta: + Once at the psql prompt (postgres=#), run: ```bash - # Lista los roles de PostgreSQL existentes + # List existing PostgreSQL roles \du ``` - Verás una salida similar a: + You'll see output similar to: ```bash - Nombre del rol | Atributos | Miembro de + Role name | Attributes | Member of -----------+-------------+----------- john | Superuser | {} ``` - Si no ves un rol `postgres` listado, procede al siguiente paso. - Crea el rol `postgres` manualmente: + If you do not see a `postgres` role listed, proceed to the next step. + Create the `postgres` role manually: ```bash CREATE ROLE postgres WITH SUPERUSER LOGIN; ``` - Esto crea un rol de superusuario llamado `postgres` con acceso de inicio de sesión. + This creates a superuser role named `postgres` with login access. - **Opción 2:** Si tienes Docker instalado: + **Option 2:** If you have docker installed: ```bash make postgres-on-docker @@ -178,20 +178,20 @@ Debes ejecutar todos los comandos de los siguientes pasos desde la raíz del pro - Todos los siguientes pasos deben ejecutarse en la terminal de WSL (dentro de tu máquina virtual) + All the following steps are to be run in the WSL terminal (within your virtual machine) - **Opción 1:** Para aprovisionar tu PostgreSQL localmente: - Usa el siguiente enlace para instalar PostgreSQL en tu máquina virtual Linux: [Instalación de PostgreSQL](https://www.postgresql.org/download/linux/) + **Option 1:** To provision your Postgresql locally: + Use the following link to install Postgresql on your Linux virtual machine: [Postgresql Installation](https://www.postgresql.org/download/linux/) ```bash psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;" ``` - Nota: Puede que necesites agregar `sudo -u postgres` antes del comando `psql` para evitar errores de permisos. + Note: You might need to add `sudo -u postgres` to the command before `psql` to avoid permission errors. - **Opción 2:** Si tienes Docker instalado: - Ejecutar Docker en WSL agrega una capa extra de complejidad. - Solo usa esta opción si estás cómodo con los pasos extras involucrados, incluyendo activar [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl). + **Option 2:** If you have docker installed: + Running Docker on WSL adds an extra layer of complexity. + Only use this option if you are comfortable with the extra steps involved, including turning on [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl). ```bash make postgres-on-docker @@ -199,18 +199,18 @@ Debes ejecutar todos los comandos de los siguientes pasos desde la raíz del pro -Ahora puedes acceder a la base de datos en [localhost:5432](localhost:5432), con usuario `postgres` y contraseña `postgres`. +You can now access the database at [localhost:5432](localhost:5432), with user `postgres` and password `postgres` . -## Paso 4: Configurar una Base de Datos Redis (cache) +## Step 4: Set up a Redis Database (cache) -Twenty requiere un caché de redis para proporcionar el mejor rendimiento +Twenty requires a redis cache to provide the best performance - **Opción 1:** Para aprovisionar tu Redis localmente: - Usa el siguiente enlace para instalar Redis en tu máquina Linux: [Instalación de Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/) + **Option 1:** To provision your Redis locally: + Use the following link to install Redis on your Linux machine: [Redis Installation](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/) - **Opción 2:** Si tienes Docker instalado: + **Option 2:** If you have docker installed: ```bash make redis-on-docker @@ -218,16 +218,16 @@ Twenty requiere un caché de redis para proporcionar el mejor rendimiento - **Opción 1 (preferido):** Para aprovisionar tu Redis localmente con `brew`: + **Option 1 (preferred):** To provision your Redis locally with `brew`: ```bash brew install redis ``` - Inicia tu servidor redis: + Start your redis server: `brew services start redis` - **Opción 2:** Si tienes Docker instalado: + **Option 2:** If you have docker installed: ```bash make redis-on-docker @@ -235,10 +235,10 @@ Twenty requiere un caché de redis para proporcionar el mejor rendimiento - **Opción 1:** Para aprovisionar tu Redis localmente: - Usa el siguiente enlace para instalar Redis en tu máquina virtual Linux: [Instalación de Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/) + **Option 1:** To provision your Redis locally: + Use the following link to install Redis on your Linux virtual machine: [Redis Installation](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/) - **Opción 2:** Si tienes Docker instalado: + **Option 2:** If you have docker installed: ```bash make redis-on-docker @@ -248,11 +248,11 @@ Twenty requiere un caché de redis para proporcionar el mejor rendimiento If you need a Client GUI, we recommend [redis insight](https://redis.io/insight/) (free version available) -## Paso 5: Configurar las variables de entorno +## Step 5: Setup environment variables -Usa variables de entorno o archivos `.env` para configurar tu proyecto. Más información [aquí](/l/es/developers/self-host/capabilities/setup) +Use environment variables or `.env` files to configure your project. More info [here](/l/es/developers/self-host/capabilities/setup) -Copia los archivos `.env.example` en `/front` y `/server`: +Copy the `.env.example` files in `/front` and `/server`: ```bash cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env @@ -263,26 +263,26 @@ cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env **Multi-Workspace Mode:** By default, Twenty runs in single-workspace mode where only one workspace can be created. To enable multi-workspace support (useful for testing subdomain-based features), set `IS_MULTIWORKSPACE_ENABLED=true` in your server `.env` file. See [Multi-Workspace Mode](/l/es/developers/self-host/capabilities/setup#multi-workspace-mode) for details. -## Paso 6: Instalación de dependencias +## Step 6: Installing dependencies -Para compilar el servidor de Twenty e ingresar algunos datos en tu base de datos, ejecuta el siguiente comando: +To build Twenty server and seed some data into your database, run the following command: ```bash yarn ``` -Ten en cuenta que `npm` o `pnpm` no funcionarán +Note that `npm` or `pnpm` won't work -## Paso 7: Ejecutar el proyecto +## Step 7: Running the project - Dependiendo de tu distribución de Linux, el servidor Redis podría iniciarse automáticamente. - Si no, revisa la [guía de instalación de Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) para tu distribución. + Depending on your Linux distribution, Redis server might be started automatically. + If not, check the [Redis installation guide](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) for your distro. - Redis ya debería estar funcionando. Si no, ejecuta: + Redis should already be running. If not, run: ```bash brew services start redis @@ -290,18 +290,18 @@ Ten en cuenta que `npm` o `pnpm` no funcionarán - Dependiendo de tu distribución de Linux, el servidor Redis podría iniciarse automáticamente. - Si no es así, consulte la [guía de instalación de Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) para su distribución. + Depending on your Linux distribution, Redis server might be started automatically. + If not, check the [Redis installation guide](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) for your distro. -Configure su base de datos con el siguiente comando: +Set up your database with the following command: ```bash npx nx database:reset twenty-server ``` -Inicie el servidor, el trabajador y los servicios frontend: +Start the server, the worker and the frontend services: ```bash npx nx start twenty-server @@ -309,25 +309,25 @@ npx nx worker twenty-server npx nx start twenty-front ``` -Alternativamente, puede iniciar todos los servicios a la vez: +Alternatively, you can start all services at once: ```bash npx nx start ``` -## Paso 8: Use Twenty +## Step 8: Use Twenty **Frontend** -El frontend de Twenty estará ejecutándose en [http://localhost:3001](http://localhost:3001). -Puede iniciar sesión usando la cuenta demo por defecto: `tim@apple.dev` (contraseña: `tim@apple.dev`) +Twenty's frontend will be running at [http://localhost:3001](http://localhost:3001). +You can log in using the default demo account: `tim@apple.dev` (password: `tim@apple.dev`) **Backend** -* El servidor de Twenty estará operativo en [http://localhost:3000](http://localhost:3000) -* La API GraphQL puede ser accedida en [http://localhost:3000/graphql](http://localhost:3000/graphql) -* La API REST puede ser alcanzada en [http://localhost:3000/rest](http://localhost:3000/rest) +* Twenty's server will be up and running at [http://localhost:3000](http://localhost:3000) +* The GraphQL API can be accessed at [http://localhost:3000/graphql](http://localhost:3000/graphql) +* The REST API can be reached at [http://localhost:3000/rest](http://localhost:3000/rest) -## Solución de Problemas +## Troubleshooting -Si encuentras algún problema, consulta [Solución de Problemas](/l/es/developers/self-host/capabilities/troubleshooting) para ver soluciones. +If you encounter any problem, check [Troubleshooting](/l/es/developers/self-host/capabilities/troubleshooting) for solutions. diff --git a/packages/twenty-docs/l/es/developers/contribute/contribute.mdx b/packages/twenty-docs/l/es/developers/contribute/contribute.mdx index b488f76c4a..79742b6f2c 100644 --- a/packages/twenty-docs/l/es/developers/contribute/contribute.mdx +++ b/packages/twenty-docs/l/es/developers/contribute/contribute.mdx @@ -4,10 +4,10 @@ description: Contribute to Twenty's open-source development. --- - IA + AI -## Resumen +## Overview Twenty is open-source and welcomes contributions from the community. Whether you're fixing bugs, adding features, or improving documentation, your contributions help make Twenty better for everyone. @@ -26,7 +26,7 @@ Twenty is open-source and welcomes contributions from the community. Whether you Report issues or request features - + Contribute to the UI diff --git a/packages/twenty-docs/l/es/developers/extend/capabilities/apis.mdx b/packages/twenty-docs/l/es/developers/extend/capabilities/apis.mdx index 880aeed794..b436ae7425 100644 --- a/packages/twenty-docs/l/es/developers/extend/capabilities/apis.mdx +++ b/packages/twenty-docs/l/es/developers/extend/capabilities/apis.mdx @@ -5,16 +5,16 @@ description: Query and modify your CRM data programmatically using REST or Graph import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -Twenty fue creado para ser amigable con los desarrolladores, ofreciendo APIs potentes que se adaptan a tu modelo de datos personalizado. Proveemos cuatro tipos de API distintos para satisfacer diferentes necesidades de integración. +Twenty was built to be developer-friendly, offering powerful APIs that adapt to your custom data model. We provide four distinct API types to meet different integration needs. -## Enfoque centrado en el desarrollador +## Developer-First Approach Twenty generates APIs specifically for your data model: -* **No se requieren IDs largos**: Usa los nombres de tus objetos y campos directamente en los endpoints. -* **Objetos estándar y personalizados tratados por igual**: Tus objetos personalizados reciben el mismo tratamiento de API que los incorporados. -* **Endpoints dedicados**: Cada objeto y campo recibe su propio endpoint de API. -* **Documentación personalizada**: Generada específicamente para el modelo de datos de tu espacio de trabajo. +* **No long IDs required**: Use your object and field names directly in endpoints +* **Standard and custom objects treated equally**: Your custom objects get the same API treatment as built-in ones +* **Dedicated endpoints**: Each object and field gets its own API endpoint +* **Custom documentation**: Generated specifically for your workspace's data model Your personalized API documentation is available under **Settings → API & Webhooks** after creating an API key. Since Twenty generates APIs that match your custom data model, the documentation is unique to your workspace. @@ -22,45 +22,45 @@ Twenty generates APIs specifically for your data model: ## The Two API Types -### API Principal +### Core API -Accesible en `/rest/` o `/graphql/` +Accessed on `/rest/` or `/graphql/` Work with your actual **records** (the data): * Create, read, update, delete People, Companies, Opportunities, etc. * Query and filter data -* Gestionar relaciones de registros +* Manage record relationships -### API de Metadatos +### Metadata API -Accesible en `/rest/metadata/` o `/metadata/` +Accessed on `/rest/metadata/` or `/metadata/` Manage your **workspace and data model**: -* Crear, modificar o eliminar objetos y campos -* Configurar ajustes del espacio de trabajo +* Create, modify, or delete objects and fields +* Configure workspace settings * Define relationships between objects ## REST vs GraphQL Both Core and Metadata APIs are available in REST and GraphQL formats: -| Formato | Available Operations | +| Format | Available Operations | | ----------- | ---------------------------------------------------------- | | **REST** | CRUD, batch operations, upserts | | **GraphQL** | Same + **batch upserts**, relationship queries in one call | Choose based on your needs — both formats access the same data. -## Puntos de Acceso de API +## API Endpoints | Environment | Base URL | | --------------- | ------------------------- | | **Cloud** | `https://api.twenty.com/` | | **Self-Hosted** | `https://{your-domain}/` | -## Autenticación +## Authentication Every API request requires an API key in the header: @@ -68,14 +68,14 @@ Every API request requires an API key in the header: Authorization: Bearer YOUR_API_KEY ``` -### Crear una Clave de API +### Create an API Key -1. Ve a **Configuración → APIs y Webhooks** +1. Go to **Settings → APIs & Webhooks** 2. Click **+ Create key** -3. Configurar: +3. Configure: * **Name**: Descriptive name for the key * **Expiration Date**: When the key expires -4. Haga clic en **Guardar** +4. Click **Save** 5. **Copy immediately** — the key is only shown once @@ -90,13 +90,13 @@ For better security, assign a specific role to limit access: 1. Go to **Settings → Roles** 2. Click on the role to assign -3. Abre la pestaña **Asignación** +3. Open the **Assignment** tab 4. Under **API Keys**, click **+ Assign to API key** 5. Select the API key The key will inherit that role's permissions. See [Permissions](/l/es/user-guide/permissions-access/capabilities/permissions) for details. -### Gestionar Claves de API +### Manage API Keys **Regenerate**: Settings → APIs & Webhooks → Click key → **Regenerate** @@ -108,7 +108,7 @@ Test your APIs directly in the browser with our built-in playground — availabl ### Access the Playground -1. Ve a **Configuración → APIs y Webhooks** +1. Go to **Settings → APIs & Webhooks** 2. Create an API key (required) 3. Click on **REST API** or **GraphQL API** to open the playground @@ -121,11 +121,11 @@ Test your APIs directly in the browser with our built-in playground — availabl The playground reflects your custom objects and fields, so documentation is always accurate for your workspace. -## Operaciones por Lotes +## Batch Operations Both REST and GraphQL support batch operations: -* **Tamaño del lote**: Hasta 60 registros por solicitud +* **Batch size**: Up to 60 records per request * **Operations**: Create, update, delete multiple records **GraphQL-only features:** @@ -137,7 +137,7 @@ Both REST and GraphQL support batch operations: API requests are throttled to ensure platform stability: -| Límite | Valor | +| Limit | Value | | -------------- | -------------------- | | **Requests** | 100 calls per minute | | **Batch size** | 60 records per call | diff --git a/packages/twenty-docs/l/es/developers/extend/capabilities/apps.mdx b/packages/twenty-docs/l/es/developers/extend/capabilities/apps.mdx index e8b200e225..dc528fa780 100644 --- a/packages/twenty-docs/l/es/developers/extend/capabilities/apps.mdx +++ b/packages/twenty-docs/l/es/developers/extend/capabilities/apps.mdx @@ -21,7 +21,7 @@ Apps let you build and manage Twenty customizations **as code**. Instead of conf * Custom UI layouts and components -## Prerrequisitos +## Prerequisites * Node.js 24+ and Yarn 4 * A Twenty workspace and an API key (create one at https://app.twenty.com/settings/api-webhooks) @@ -42,7 +42,7 @@ yarn auth yarn dev ``` -Desde aquí usted puede: +From here you can: ```bash filename="Terminal" # Add a new entity to your application (guided) @@ -115,7 +115,7 @@ Later commands will add more files and folders: * `yarn generate` will create a `generated/` folder (typed Twenty client + workspace types). * `yarn create-entity` will add entity definition files under `src/` for your custom objects. -## Autenticación +## Authentication The first time you run `yarn auth`, you'll be prompted for: @@ -124,7 +124,7 @@ The first time you run `yarn auth`, you'll be prompted for: Your credentials are stored per-user in `~/.twenty/config.json`. You can maintain multiple profiles and switch using `--workspace `. -Ejemplos: +Examples: ```bash filename="Terminal" # Login interactively (recommended) @@ -512,7 +512,7 @@ Then add scripts like these: Now you can run the same commands via Yarn, e.g. `yarn dev`, `yarn sync`, etc. -## Solución de problemas +## Troubleshooting * Authentication errors: run `yarn auth` and ensure your API key has the required permissions. * Cannot connect to server: verify the API URL and that the Twenty server is reachable. diff --git a/packages/twenty-docs/l/es/developers/extend/capabilities/webhooks.mdx b/packages/twenty-docs/l/es/developers/extend/capabilities/webhooks.mdx index 094b66f320..e8ee19e955 100644 --- a/packages/twenty-docs/l/es/developers/extend/capabilities/webhooks.mdx +++ b/packages/twenty-docs/l/es/developers/extend/capabilities/webhooks.mdx @@ -7,28 +7,28 @@ import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts. -## Crear un Webhook +## Create a Webhook -1. Ve a **Configuración → APIs y Webhooks → Webhooks** -2. Haga clic en **+ Crear webhook** +1. Go to **Settings → APIs & Webhooks → Webhooks** +2. Click **+ Create webhook** 3. Enter your webhook URL (must be publicly accessible) -4. Haga clic en **Guardar** +4. Click **Save** The webhook activates immediately and starts sending notifications. -### Gestionar Webhooks +### Manage Webhooks **Edit**: Click the webhook → Update URL → **Save** **Delete**: Click the webhook → **Delete** → Confirm -## Eventos +## Events Twenty sends webhooks for these event types: -| Evento | Ejemplo | +| Event | Example | | ------------------ | ---------------------------------------------------------- | | **Record Created** | `person.created`, `company.created`, `note.created` | | **Record Updated** | `person.updated`, `company.updated`, `opportunity.updated` | @@ -55,23 +55,23 @@ Each webhook sends an HTTP POST with a JSON body: } ``` -| Campo | Descripción | -| ----------------- | ------------------------------------------------ | -| `evento` | What happened (e.g., `person.created`) | -| `datos` | The full record that was created/updated/deleted | -| `marca de tiempo` | When the event occurred (UTC) | +| Field | Description | +| ----------- | ------------------------------------------------ | +| `event` | What happened (e.g., `person.created`) | +| `data` | The full record that was created/updated/deleted | +| `timestamp` | When the event occurred (UTC) | Respond with a **2xx HTTP status** (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures. -## Validación de Webhook +## Webhook Validation Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic. ### Headers -| Encabezado | Descripción | +| Header | Description | | ---------------------------- | --------------------- | | `X-Twenty-Webhook-Signature` | HMAC SHA256 signature | | `X-Twenty-Webhook-Timestamp` | Request timestamp | @@ -103,7 +103,7 @@ const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"]; ## Webhooks vs Workflows -| Método | Dirección | Use Case | +| Method | Direction | Use Case | | ---------------------------- | --------- | ---------------------------------------------------------- | | **Webhooks** | OUT | Automatically notify external systems of any record change | | **Workflow + HTTP Request** | OUT | Send data out with custom logic (filters, transformations) | diff --git a/packages/twenty-docs/l/es/developers/extend/extend.mdx b/packages/twenty-docs/l/es/developers/extend/extend.mdx index 362e14f89c..5d5cedc184 100644 --- a/packages/twenty-docs/l/es/developers/extend/extend.mdx +++ b/packages/twenty-docs/l/es/developers/extend/extend.mdx @@ -4,10 +4,10 @@ description: Extend Twenty's functionality with APIs, webhooks, and custom apps. --- - IA + AI -## Resumen +## Overview Twenty is designed to be extensible. Use our APIs, webhooks, and app framework to integrate with your existing tools and build custom functionality. @@ -20,7 +20,7 @@ Twenty is designed to be extensible. Use our APIs, webhooks, and app framework t ## Getting Started - + Connect to Twenty programmatically diff --git a/packages/twenty-docs/l/es/developers/self-host/capabilities/cloud-providers.mdx b/packages/twenty-docs/l/es/developers/self-host/capabilities/cloud-providers.mdx index 51726da414..809388612a 100644 --- a/packages/twenty-docs/l/es/developers/self-host/capabilities/cloud-providers.mdx +++ b/packages/twenty-docs/l/es/developers/self-host/capabilities/cloud-providers.mdx @@ -1,45 +1,45 @@ --- -title: Otros métodos +title: Other methods --- - Este documento es mantenido por la comunidad. Podría contener problemas. + This document is maintained by the community. It might contain issues. -## Kubernetes vía Terraform y Manifests +## Kubernetes via Terraform and Manifests -Documentación comunitaria para la implementación de Kubernetes está disponible [aquí](https://github.com/twentyhq/twenty/tree/main/packages/twenty-docker/k8s) +Community-led documentation for Kubernetes deployment is available [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-docker/k8s) ### Coolify -Despliega Twenty en servidores usando Coolify. (la imagen oficial en Coolify estará disponible pronto) +Deploy Twenty on servers using Coolify. (official image on Coolify will be available soon) -[Documentación de Coolify](https://coolify.io/docs/get-started/introduction) +[Coolify documentation](https://coolify.io/docs/get-started/introduction) ### EasyPanel -Despliega Twenty en EasyPanel con la plantilla mantenida por la comunidad a continuación. +Deploy Twenty on EasyPanel with the community maintained template below. -[Desplegar en EasyPanel](https://easypanel.io/docs/templates/twenty) +[Deploy on EasyPanel](https://easypanel.io/docs/templates/twenty) ### Elest.io -Despliega Twenty en servidores con Elest.io utilizando el enlace a continuación. +Deploy Twenty on servers with Elest.io using link below. -[Desplegar en Elest.io](https://elest.io/open-source/twenty) +[Deploy on Elest.io](https://elest.io/open-source/twenty) -### Twenty en Railway +### Twenty on Railway -Despliega Twenty en Railway con la plantilla mantenida por la comunidad a continuación. +Deploy Twenty on Railway with the community maintained template below. -[![Desplegar en Railway](https://railway.com/button.svg)](https://railway.com/deploy/nAL3hA) +[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/nAL3hA) -### Twenty en Sealos +### Twenty on Sealos -Despliega Twenty en Sealos con la plantilla mantenida por la comunidad a continuación. +Deploy Twenty on Sealos with the community maintained template below. -[![Desplegar en Sealos](https://sealos.io/Deploy-on-Sealos.svg)](https://sealos.io/products/app-store/twenty) +[![Deploy on Sealos](https://sealos.io/Deploy-on-Sealos.svg)](https://sealos.io/products/app-store/twenty) -## Otros +## Others Please feel free to Open a PR to add more Cloud Provider options. diff --git a/packages/twenty-docs/l/es/developers/self-host/capabilities/docker-compose.mdx b/packages/twenty-docs/l/es/developers/self-host/capabilities/docker-compose.mdx index 5d5e66e1cb..3791b5e48b 100644 --- a/packages/twenty-docs/l/es/developers/self-host/capabilities/docker-compose.mdx +++ b/packages/twenty-docs/l/es/developers/self-host/capabilities/docker-compose.mdx @@ -1,207 +1,207 @@ --- -title: 1-Clic con Docker Compose +title: 1-Click w/ Docker Compose --- - Los contenedores de Docker son para alojamiento en producción o autoalojamiento, para la contribución por favor revise la [Configuración Local](/l/es/developers/contribute/capabilities/local-setup). + Docker containers are for production hosting or self-hosting, for the contribution please check the [Local Setup](/l/es/developers/contribute/capabilities/local-setup). -## Resumen +## Overview -Esta guía proporciona instrucciones paso a paso para instalar y configurar la aplicación Twenty utilizando Docker Compose. El objetivo es simplificar el proceso y prevenir errores comunes que podrían arruinar tu configuración. +This guide provides step-by-step instructions to install and configure the Twenty application using Docker Compose. The aim is to make the process straightforward and prevent common pitfalls that could break your setup. -**Importante:** Solo modifica configuraciones explícitamente mencionadas en esta guía. Alterar otras configuraciones puede causar problemas. +**Important:** Only modify settings explicitly mentioned in this guide. Altering other configurations may lead to issues. -Consulta los documentos [Configurar Variables de Entorno](/l/es/developers/self-host/capabilities/setup) para configuraciones avanzadas. Todas las variables de entorno deben ser declaradas en el archivo docker-compose.yml en el nivel del servidor y/o trabajador dependiendo de la variable. +See docs [Setup Environment Variables](/l/es/developers/self-host/capabilities/setup) for advanced configuration. All environment variables must be declared in the docker-compose.yml file at the server and / or worker level depending on the variable. -## Requisitos del sistema +## System Requirements -* RAM: Asegúrate de que tu entorno tenga al menos 2GB de RAM. La memoria insuficiente puede causar que los procesos se bloqueen. -* Docker & Docker Compose: Asegúrate de que ambos estén instalados y actualizados. +* RAM: Ensure your environment has at least 2GB of RAM. Insufficient memory can cause processes to crash. +* Docker & Docker Compose: Make sure both are installed and up-to-date. -## Opción 1: Script de una línea +## Option 1: One-line script -Instala la última versión estable de Twenty con un solo comando: +Install the latest stable version of Twenty with a single command: ```bash bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh) ``` -Para instalar una versión o rama específica: +To install a specific version or branch: ```bash VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh) ``` -* Reemplace x.y.z con el número de versión deseado. -* Reemplace branch-name con el nombre de la rama que desea instalar. +* Replace x.y.z with the desired version number. +* Replace branch-name with the name of the branch you want to install. -## Opción 2: Pasos manuales +## Option 2: Manual steps -Sigue estos pasos para una configuración manual. +Follow these steps for a manual setup. -### Paso 1: Configurar el archivo de entorno +### Step 1: Set Up the Environment File 1. **Create the .env File** - Copia el archivo de entorno de ejemplo a tu directorio de trabajo a un nuevo archivo .env: + Copy the example environment file to a new .env file in your working directory: ```bash curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example ``` -2. **Generar tokens secretos** +2. **Generate Secret Tokens** - Ejecuta el siguiente comando para generar una cadena única aleatoria: + Run the following command to generate a unique random string: ```bash openssl rand -base64 32 ``` - **Importante:** Mantén este valor en secreto / no lo compartas. + **Important:** Keep this value secret / do not share it. -3. **Actualiza el `.env`** +3. **Update the `.env`** - Reemplaza el valor de marcador de posición en tu archivo .env con el token generado: + Replace the placeholder value in your .env file with the generated token: ```ini - APP_SECRET=primera_cadena_aleatoria + APP_SECRET=first_random_string ``` -4. **Establecer la contraseña de Postgres** +4. **Set the Postgres Password** - Actualiza el valor de `PG_DATABASE_PASSWORD` en el archivo .env con una contraseña fuerte sin caracteres especiales. + Update the `PG_DATABASE_PASSWORD` value in the .env file with a strong password without special characters. ```ini - PG_DATABASE_PASSWORD=mi_contraseña_fuerte + PG_DATABASE_PASSWORD=my_strong_password ``` -### Paso 2: Obtener el archivo Docker Compose +### Step 2: Obtain the Docker Compose File -Descarga el archivo `docker-compose.yml` en tu directorio de trabajo: +Download the `docker-compose.yml` file to your working directory: ```bash curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml ``` -### Paso 3: Lanza la aplicación +### Step 3: Launch the Application -Inicia los contenedores Docker: +Start the Docker containers: ```bash docker compose up -d ``` -### Paso 4: Acceder a la aplicación +### Step 4: Access the Application -Si alojas twentyCRM en tu propia computadora, abre tu navegador y navega a [http://localhost:3000](http://localhost:3000). +If you host twentyCRM on your own computer, open your browser and navigate to [http://localhost:3000](http://localhost:3000). -Si lo alojas en un servidor, verifica que el servidor esté en funcionamiento y que todo esté bien con +If you host it on a server, check that the server is running and that everything is ok with ```bash curl http://localhost:3000 ``` -## Configuración +## Configuration -### Exponer Twenty para acceso externo +### Expose Twenty to External Access -Por defecto, Twenty se ejecuta en `localhost` en el puerto `3000`. Para acceder a él mediante un dominio externo o dirección IP, necesitas configurar `SERVER_URL` en tu archivo `.env`. +By default, Twenty runs on `localhost` at port `3000`. To access it via an external domain or IP address, you need to configure the `SERVER_URL` in your `.env` file. -#### Entendiendo `SERVER_URL` +#### Understanding `SERVER_URL` -* **Protocolo:** Usa `http` o `https` dependiendo de tu configuración. - * Usa `http` si no has configurado SSL. - * Usa `https` si tienes SSL configurado. -* **Dominio/IP:** Este es el nombre de dominio o dirección IP donde tu aplicación es accesible. -* **Puerto:** Incluye el número de puerto si no estás usando los puertos predeterminados (`80` para `http`, `443` para `https`). +* **Protocol:** Use `http` or `https` depending on your setup. + * Use `http` if you haven't set up SSL. + * Use `https` if you have SSL configured. +* **Domain/IP:** This is the domain name or IP address where your application is accessible. +* **Port:** Include the port number if you're not using the default ports (`80` for `http`, `443` for `https`). -### Requisitos de SSL +### SSL Requirements -SSL (HTTPS) es requerido para que ciertas características del navegador funcionen correctamente. Aunque estas características podrían funcionar durante el desarrollo local (ya que los navegadores tratan localhost de manera diferente), se requiere una configuración SSL adecuada al alojar Twenty en un dominio regular. +SSL (HTTPS) is required for certain browser features to work properly. While these features might work during local development (as browsers treat localhost differently), a proper SSL setup is needed when hosting Twenty on a regular domain. -Por ejemplo, es posible que la API del portapapeles requiera un contexto seguro: algunas características como los botones de copia en toda la aplicación pueden no funcionar sin HTTPS habilitado. +For example, the clipboard API might require a secure context - some features like copy buttons throughout the application might not work without HTTPS enabled. -Recomendamos encarecidamente configurar Twenty detrás de un proxy inverso con terminación SSL para una seguridad y funcionalidad óptimas. +We strongly recommend setting up Twenty behind a reverse proxy with SSL termination for optimal security and functionality. -#### Configurando `SERVER_URL` +#### Configuring `SERVER_URL` -1. **Determine su URL de acceso** - * **Sin proxy inverso (Acceso directo):** +1. **Determine Your Access URL** + * **Without Reverse Proxy (Direct Access):** - Si estás accediendo a la aplicación directamente sin un proxy inverso: + If you're accessing the application directly without a reverse proxy: ```ini - SERVER_URL=http://tu-dominio-o-ip:3000 + SERVER_URL=http://your-domain-or-ip:3000 ``` - * **Con proxy inverso (Puertos estándar):** + * **With Reverse Proxy (Standard Ports):** - Si estás usando un proxy inverso como Nginx o Traefik y tienes SSL configurado: + If you're using a reverse proxy like Nginx or Traefik and have SSL configured: ```ini - SERVER_URL=https://tu-dominio-o-ip + SERVER_URL=https://your-domain-or-ip ``` - * **Con proxy inverso (Puertos personalizados):** + * **With Reverse Proxy (Custom Ports):** - Si estás usando puertos no estándar: + If you're using non-standard ports: ```ini - SERVER_URL=https://tu-dominio-o-ip:puerto-personalizado + SERVER_URL=https://your-domain-or-ip:custom-port ``` -2. **Actualiza el archivo `.env`** +2. **Update the `.env` File** - Abre tu archivo `.env` y actualiza el `SERVER_URL`: + Open your `.env` file and update the `SERVER_URL`: ```ini - SERVER_URL=http(s)://tu-dominio-o-ip:tu-puerto + SERVER_URL=http(s)://your-domain-or-ip:your-port ``` - **Ejemplos:** + **Examples:** - * Acceso directo sin SSL: + * Direct access without SSL: ```ini SERVER_URL=http://123.45.67.89:3000 ``` - * Acceso vía dominio con SSL: + * Access via domain with SSL: ```ini - SERVER_URL=https://miappdetwenty.com + SERVER_URL=https://mytwentyapp.com ``` -3. **Reiniciar la aplicación** +3. **Restart the Application** - Para que los cambios surtan efecto, reinicia los contenedores Docker: + For changes to take effect, restart the Docker containers: ```bash docker compose down docker compose up -d ``` -#### Consideraciones +#### Considerations -* **Configuración del Proxy Inverso:** +* **Reverse Proxy Configuration:** - Asegúrese de que su proxy inverso envíe las solicitudes al puerto interno correcto (`3000` por defecto). Configure la terminación SSL y cualquier cabecera necesaria. + Ensure your reverse proxy forwards requests to the correct internal port (`3000` by default). Configure SSL termination and any necessary headers. -* **Configuración del Cortafuegos:** +* **Firewall Settings:** - Abra los puertos necesarios en su cortafuegos para permitir el acceso externo. + Open necessary ports in your firewall to allow external access. -* **Consistencia:** +* **Consistency:** - La `SERVER_URL` debe coincidir con cómo los usuarios acceden a su aplicación en sus navegadores. + The `SERVER_URL` must match how users access your application in their browsers. -#### Persistencia +#### Persistence -* **Volúmenes de Datos:** +* **Data Volumes:** - La configuración de Docker Compose utiliza volúmenes para persistir datos para la base de datos y el almacenamiento del servidor. + The Docker Compose configuration uses volumes to persist data for the database and server storage. -* **Entornos Sin Estado:** +* **Stateless Environments:** - Si se despliega en un entorno sin estado (por ejemplo, ciertos servicios en la nube), configure un almacenamiento externo para persistir los datos. + If deploying to a stateless environment (e.g., certain cloud services), configure external storage to persist data. ## Backup and Restore @@ -248,6 +248,6 @@ docker compose up -d * **Encrypt sensitive data** — protect backups with encryption * **Retain multiple copies** — keep daily, weekly, and monthly backups -## Solución de Problemas +## Troubleshooting -Si encuentras algún problema, consulta [Solución de Problemas](/l/es/developers/self-host/capabilities/troubleshooting) para ver soluciones. +If you encounter any problem, check [Troubleshooting](/l/es/developers/self-host/capabilities/troubleshooting) for solutions. diff --git a/packages/twenty-docs/l/es/developers/self-host/capabilities/setup.mdx b/packages/twenty-docs/l/es/developers/self-host/capabilities/setup.mdx index 127d8f8003..f706378ad2 100644 --- a/packages/twenty-docs/l/es/developers/self-host/capabilities/setup.mdx +++ b/packages/twenty-docs/l/es/developers/self-host/capabilities/setup.mdx @@ -1,64 +1,64 @@ --- -title: Configuración +title: Setup --- -# Gestión de Configuración +# Configuration Management - **¿Instalando por primera vez?** Siga la [guía de instalación de Docker Compose](/l/es/developers/self-host/capabilities/docker-compose) para ejecutar Twenty, luego regrese aquí para la configuración. + **First time installing?** Follow the [Docker Compose installation guide](/l/es/developers/self-host/capabilities/docker-compose) to get Twenty running, then return here for configuration. -Twenty ofrece **dos modos de configuración** para adaptarse a diferentes necesidades de implementación: +Twenty offers **two configuration modes** to suit different deployment needs: -**Acceso al panel de administración:** Solo los usuarios con privilegios de administrador (`canAccessFullAdminPanel: true`) pueden acceder a la interfaz de configuración. +**Admin panel access:** Only users with admin privileges (`canAccessFullAdminPanel: true`) can access the configuration interface. -## 1. Configuración del Panel de Administración (Predeterminado) +## 1. Admin Panel Configuration (Default) ```bash -IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # predeterminado +IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # default ``` -**La mayoría de las configuraciones se realizan a través de la interfaz** después de la instalación: +**Most configuration happens through the UI** after installation: -1. Acceda a su instancia de Twenty (normalmente `http://localhost:3000`) -2. Vaya a **Configuración / Panel de Administración / Variables de Configuración** -3. Configure integraciones, correo electrónico, almacenamiento y más -4. Los cambios se aplican inmediatamente (dentro de 15 segundos para implementaciones multicontenedor) +1. Access your Twenty instance (usually `http://localhost:3000`) +2. Go to **Settings / Admin Panel / Configuration Variables** +3. Configure integrations, email, storage, and more +4. Changes take effect immediately (within 15 seconds for multi-container deployments) - **Implementaciones Multicontenedor:** Al usar la configuración de base de datos (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`), tanto los contenedores del servidor como los de trabajo leen de la misma base de datos. Los cambios en el panel de administración afectan a ambos automáticamente, eliminando la necesidad de duplicar las variables de entorno entre contenedores (excepto para las variables de infraestructura). + **Multi-Container Deployments:** When using database configuration (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`), both server and worker containers read from the same database. Admin panel changes affect both automatically, eliminating the need to duplicate environment variables between containers (except for infrastructure variables). -**Qué se puede configurar a través del panel de administración:** +**What you can configure through the admin panel:** -* **Autenticación** - OAuth de Google/Microsoft, configuración de contraseñas -* **Correo Electrónico** - Configuración de SMTP, plantillas, verificación -* **Almacenamiento** - Configuración S3, rutas de almacenamiento local -* **Integraciones** - Gmail, Google Calendar, servicios de Microsoft -* **Flujo de Trabajo y Limitación de Tasas** - Límites de ejecución, restricción de API -* **Y mucho más...** +* **Authentication** - Google/Microsoft OAuth, password settings +* **Email** - SMTP settings, templates, verification +* **Storage** - S3 configuration, local storage paths +* **Integrations** - Gmail, Google Calendar, Microsoft services +* **Workflow & Rate Limiting** - Execution limits, API throttling +* **And much more...** -![Variables de Configuración del Panel de Administración](/images/user-guide/setup/admin-panel-config-variables.png) +![Admin Panel Configuration Variables](/images/user-guide/setup/admin-panel-config-variables.png) - Cada variable está documentada con descripciones en su panel de administración en **Configuración → Panel de Administración → Variables de Configuración**. - Algunas configuraciones de infraestructura como las conexiones de base de datos (`PG_DATABASE_URL`), URLs del servidor (`SERVER_URL`), y secretos de la aplicación (`APP_SECRET`) solo se pueden configurar a través del archivo `.env`. + Each variable is documented with descriptions in your admin panel at **Settings → Admin Panel → Configuration Variables**. + Some infrastructure settings like database connections (`PG_DATABASE_URL`), server URLs (`SERVER_URL`), and app secrets (`APP_SECRET`) can only be configured via `.env` file. - [Referencia técnica completa →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts) + [Complete technical reference →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts) -## 2. Configuración Solo de Entorno +## 2. Environment-Only Configuration ```bash IS_CONFIG_VARIABLES_IN_DB_ENABLED=false ``` -**Toda la configuración se gestiona a través de archivos `.env`:** +**All configuration managed through `.env` files:** -1. Establezca `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` en su archivo `.env` -2. Agregue todas las variables de configuración a su archivo `.env` -3. Reinicie los contenedores para que los cambios tengan efecto -4. El panel de administración mostrará los valores actuales pero no podrá modificarlos +1. Set `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` in your `.env` file +2. Add all configuration variables to your `.env` file +3. Restart containers for changes to take effect +4. Admin panel will show current values but cannot modify them ## Multi-Workspace Mode @@ -116,31 +116,31 @@ IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true When enabled, only users with `canAccessFullAdminPanel` can create additional workspaces. Users can still create their first workspace during initial signup. -## Integración con Gmail y Google Calendar +## Gmail & Google Calendar Integration -### Crear Proyecto en Google Cloud +### Create Google Cloud Project -1. Vaya a [Google Cloud Console](https://console.cloud.google.com/) -2. Cree un nuevo proyecto o seleccione uno existente -3. Habilite estas APIs: +1. Go to [Google Cloud Console](https://console.cloud.google.com/) +2. Create a new project or select existing one +3. Enable these APIs: * [Gmail API](https://console.cloud.google.com/apis/library/gmail.googleapis.com) * [Google Calendar API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com) * [People API](https://console.cloud.google.com/apis/library/people.googleapis.com) -### Configurar OAuth +### Configure OAuth -1. Vaya a [Credenciales](https://console.cloud.google.com/apis/credentials) -2. Cree un ID de Cliente OAuth 2.0 -3. Agregue estas URIs de redirección: +1. Go to [Credentials](https://console.cloud.google.com/apis/credentials) +2. Create OAuth 2.0 Client ID +3. Add these redirect URIs: * `https://{your-domain}/auth/google/redirect` (for SSO) * `https://{your-domain}/auth/google-apis/get-access-token` (for integrations) -### Configurar en Twenty +### Configure in Twenty -1. Vaya a **Configuración → Panel de Administración → Variables de Configuración** -2. Encuentre la sección **Google Auth** -3. Establezca estas variables: +1. Go to **Settings → Admin Panel → Configuration Variables** +2. Find the **Google Auth** section +3. Set these variables: * `MESSAGING_PROVIDER_GMAIL_ENABLED=true` * `CALENDAR_PROVIDER_GOOGLE_ENABLED=true` * `AUTH_GOOGLE_CLIENT_ID={client-id}` @@ -149,35 +149,35 @@ When enabled, only users with `canAccessFullAdminPanel` can create additional wo * `AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token` - **Modo solo de entorno:** Si establece `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, agregue estas variables a su archivo `.env` en su lugar. + **Environment-only mode:** If you set `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, add these variables to your `.env` file instead. -**Ámbitos requeridos** (configurados automáticamente): -[Ver código fuente relevante](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10) +**Required scopes** (automatically configured): +[See relevant source code](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10) * `https://www.googleapis.com/auth/calendar.events` * `https://www.googleapis.com/auth/gmail.readonly` * `https://www.googleapis.com/auth/profile.emails.read` -### Si su aplicación está en modo de prueba +### If your app is in test mode -Si su aplicación está en modo de prueba, deberá agregar usuarios de prueba a su proyecto. +If your app is in test mode, you will need to add test users to your project. -En [Pantalla de consentimiento OAuth](https://console.cloud.google.com/apis/credentials/consent), agregue sus usuarios de prueba en la sección "Usuarios de prueba". +Under [OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent), add your test users to the "Test users" section. -## Integración con Microsoft 365 +## Microsoft 365 Integration - Los usuarios deben tener una [licencia de Microsoft 365](https://admin.microsoft.com/Adminportal/Home) para poder usar la API de Calendar y Messaging. No podrán sincronizar su cuenta en Twenty sin una. + Users must have a [Microsoft 365 Licence](https://admin.microsoft.com/Adminportal/Home) to be able to use the Calendar and Messaging API. They will not be able to sync their account on Twenty without one. -### Cree un proyecto en Microsoft Azure +### Create a project in Microsoft Azure -Necesitará crear un proyecto en [Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) y obtener las credenciales. +You will need to create a project in [Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) and get the credentials. -### Habilitar APIs +### Enable APIs -En la Consola de Microsoft Azure habilite las siguientes APIs en "Permisos": +On Microsoft Azure Console enable the following APIs in "Permissions": * Microsoft Graph: Mail.ReadWrite * Microsoft Graph: Mail.Send @@ -188,20 +188,20 @@ En la Consola de Microsoft Azure habilite las siguientes APIs en "Permisos": * Microsoft Graph: profile * Microsoft Graph: offline_access -Nota: "Mail.ReadWrite" y "Mail.Send" solo son obligatorios si desea enviar correos electrónicos usando nuestras acciones de flujo de trabajo. Puede usar "Mail.Read" en su lugar si solo desea recibir correos electrónicos. +Note: "Mail.ReadWrite" and "Mail.Send" are only mandatory if you want to send emails using our workflow actions. You can use "Mail.Read" instead if you only want to receive emails. -### URIs de redirección autorizadas +### Authorized redirect URIs -Necesita agregar las siguientes URIs de redirección a su proyecto: +You need to add the following redirect URIs to your project: * `https://{your-domain}/auth/microsoft/redirect` if you want to use Microsoft SSO * `https://{your-domain}/auth/microsoft-apis/get-access-token` -### Configurar en Twenty +### Configure in Twenty -1. Vaya a **Configuración → Panel de Administración → Variables de Configuración** -2. Encuentre la sección **Microsoft Auth** -3. Establezca estas variables: +1. Go to **Settings → Admin Panel → Configuration Variables** +2. Find the **Microsoft Auth** section +3. Set these variables: * `MESSAGING_PROVIDER_MICROSOFT_ENABLED=true` * `CALENDAR_PROVIDER_MICROSOFT_ENABLED=true` * `AUTH_MICROSOFT_ENABLED=true` @@ -211,35 +211,35 @@ Necesita agregar las siguientes URIs de redirección a su proyecto: * `AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token` - **Modo solo de entorno:** Si establece `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, agregue estas variables a su archivo `.env` en su lugar. + **Environment-only mode:** If you set `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, add these variables to your `.env` file instead. -### Configurar ámbitos +### Configure scopes -[Ver código fuente relevante](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9) +[See relevant source code](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9) * 'openid' -* 'correo Electrónico' -* 'perfil' +* 'email' +* 'profile' * 'offline_access' * 'Mail.ReadWrite' * 'Mail.Send' * 'Calendars.Read' -### Si su aplicación está en modo de prueba +### If your app is in test mode -Si su aplicación está en modo de prueba, deberá agregar usuarios de prueba a su proyecto. +If your app is in test mode, you will need to add test users to your project. -Agregue sus usuarios de prueba a la sección "Usuarios y grupos". +Add your test users to the "Users and groups" section. -## Trabajos en segundo plano para Calendarios y Mensajes +## Background Jobs for Calendar & Messaging -Después de configurar las integraciones de Gmail, Google Calendar, o Microsoft 365, necesita iniciar los trabajos en segundo plano que sincronizan los datos. +After configuring Gmail, Google Calendar, or Microsoft 365 integrations, you need to start the background jobs that sync data. -Registre los siguientes trabajos recurrentes en su contenedor de trabajo: +Register the following recurring jobs in your worker container: ```bash -# desde su contenedor de trabajo +# from your worker container yarn command:prod cron:messaging:messages-import yarn command:prod cron:messaging:message-list-fetch yarn command:prod cron:calendar:calendar-event-list-fetch @@ -249,15 +249,15 @@ yarn command:prod cron:calendar:ongoing-stale yarn command:prod cron:workflow:automated-cron-trigger ``` -## Configuración de Correo Electrónico +## Email Configuration -1. Vaya a **Configuración → Panel de Administración → Variables de Configuración** -2. Encuentre la sección **Correo Electrónico** -3. Configure su configuración SMTP: +1. Go to **Settings → Admin Panel → Configuration Variables** +2. Find the **Email** section +3. Configure your SMTP settings: - Necesitará proporcionar una [Contraseña de Aplicación](https://support.google.com/accounts/answer/185833). + You will need to provision an [App Password](https://support.google.com/accounts/answer/185833). * EMAIL_DRIVER=smtp * EMAIL_SMTP_HOST=smtp.gmail.com @@ -267,7 +267,7 @@ yarn command:prod cron:workflow:automated-cron-trigger - Tenga en cuenta que si tiene la autenticación de dos factores habilitada, necesitará proporcionar una [Contraseña de Aplicación](https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9). + Keep in mind that if you have 2FA enabled, you will need to provision an [App Password](https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9). * EMAIL_DRIVER=smtp * EMAIL_SMTP_HOST=smtp.office365.com @@ -277,11 +277,11 @@ yarn command:prod cron:workflow:automated-cron-trigger - **smtp4dev** es un servidor de correo SMTP falso para desarrollo y pruebas. + **smtp4dev** is a fake SMTP email server for development and testing. - * Ejecute la imagen de smtp4dev: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev` - * Acceda a la interfaz de smtp4dev aquí: [http://localhost:8090](http://localhost:8090) - * Establezca las siguientes variables: + * Run the smtp4dev image: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev` + * Access the smtp4dev ui here: [http://localhost:8090](http://localhost:8090) + * Set the following variables: * EMAIL_DRIVER=smtp * EMAIL_SMTP_HOST=localhost * EMAIL_SMTP_PORT=2525 @@ -289,5 +289,5 @@ yarn command:prod cron:workflow:automated-cron-trigger - **Modo solo de entorno:** Si establece `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, agregue estas variables a su archivo `.env` en su lugar. + **Environment-only mode:** If you set `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, add these variables to your `.env` file instead. diff --git a/packages/twenty-docs/l/es/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/es/developers/self-host/capabilities/troubleshooting.mdx index 759c9b0f18..d2187aedac 100644 --- a/packages/twenty-docs/l/es/developers/self-host/capabilities/troubleshooting.mdx +++ b/packages/twenty-docs/l/es/developers/self-host/capabilities/troubleshooting.mdx @@ -1,33 +1,34 @@ --- -title: Solución de problemas +title: Troubleshooting --- -## Solución de Problemas +## Troubleshooting -Si encuentra algún problema al configurar el entorno para el desarrollo, al actualizar su instancia o al autoalojar, aquí hay algunas soluciones para problemas comunes. +If you encounter any problem while setting up environment for development, upgrading your instance or self-hosting, +here are some solutions for common problems. ### Self-hosting -#### La primera instalación resulta en `fallo de autenticación de contraseña para el usuario "postgres"` +#### First install results in `password authentication failed for user "postgres"` -🚨 **IMPORTANTE: Esta solución es SOLO para instalaciones nuevas** 🚨 -Si tiene una instancia de Twenty existente con datos de producción, **NO** siga estos pasos ya que borrarán permanentemente su base de datos. +🚨 **IMPORTANT: This solution is ONLY for fresh installations** 🚨 +If you have an existing Twenty instance with production data, **DO NOT** follow these steps as they will permanently delete your database! -Al instalar Twenty por primera vez, es posible que desee cambiar la contraseña predeterminada de la base de datos. -La contraseña que establezca durante la primera instalación se almacena permanentemente en el volumen de base de datos. Si más tarde intenta cambiar esta contraseña en su configuración sin eliminar el volumen anterior, obtendrá errores de autenticación porque la base de datos todavía está usando la contraseña original. +While installing Twenty for the first time, you might want to change the default database password. +The password you set during the first installation becomes permanently stored in the database volume. If you later try to change this password in your configuration without removing the old volume, you'll get authentication errors because the database is still using the original password. -⚠️ ADVERTENCIA: ¡Seguir los pasos borrará PERMANENTEMENTE todos los datos de la base de datos! ⚠️ -Prosiga solo si se trata de una instalación nueva sin datos importantes. +⚠️ WARNING: Following steps will PERMANENTLY DELETE all database data! ⚠️ +Only proceed if this is a fresh installation with no important data. -Para actualizar el `PG_DATABASE_PASSWORD` necesita: +In order to update the `PG_DATABASE_PASSWORD` you need to: ```sh -# Actualizar el PG_DATABASE_PASSWORD en .env +# Update the PG_DATABASE_PASSWORD in .env docker compose down --volumes docker compose up -d ``` -#### Rupturas de línea de CR encontradas [Windows] +#### CR line breaks found [Windows] This is due to the line break characters of Windows and the git configuration. Try running: @@ -35,25 +36,25 @@ This is due to the line break characters of Windows and the git configuration. T git config --global core.autocrlf false ``` -Luego elimine el repositorio y clónelo de nuevo. +Then delete the repository and clone it again. -#### Esquema de metadatos faltante +#### Missing metadata schema -Durante la instalación de Twenty, debe aprovisionar su base de datos postgres con los esquemas, extensiones y usuarios correctos. -Si ha ejecutado con éxito este aprovisionamiento, debería tener esquemas `default` y `metadata` en su base de datos. -Si no los tiene, asegúrese de no tener más de una instancia de postgres ejecutándose en su computadora. +During Twenty installation, you need to provision your postgres database with the right schemas, extensions, and users. +If you're successful in running this provisioning, you should have `default` and `metadata` schemas in your database. +If you don't, make sure you don't have more than one postgres instance running on your computer. -#### No se puede encontrar el módulo 'twenty-emails' o sus declaraciones de tipo correspondientes. +#### Cannot find module 'twenty-emails' or its corresponding type declarations. -Tienes que construir el paquete `twenty-emails` antes de ejecutar la inicialización de la base de datos con `npx nx run twenty-emails:build` +You have to build the package `twenty-emails` before running the initialization of the database with `npx nx run twenty-emails:build` #### Missing twenty-x package -Asegúrese de ejecutar yarn en el directorio raíz y luego ejecute `npx nx server:dev twenty-server`. Si esto aún no funciona, intente construir el paquete faltante manualmente. +Make sure to run yarn in the root directory and then run `npx nx server:dev twenty-server`. If this still doesn't work try building the missing package manually. -#### Lint on Save no funciona +#### Lint on Save not working -This should work out of the box with the eslint extension installed. Si esto no funciona, intente agregar esto a su configuración de vscode (en el ámbito del contenedor de desarrollo): +This should work out of the box with the eslint extension installed. If this doesn't work try adding this to your vscode setting (on the dev container scope): ``` "editor.codeActionsOnSave": { @@ -65,83 +66,83 @@ This should work out of the box with the eslint extension installed. Si esto no #### While running `npx nx start` or `npx nx start twenty-front`, Out of memory error is thrown -En `packages/twenty-front/.env` descomente `VITE_DISABLE_TYPESCRIPT_CHECKER=true` y `VITE_DISABLE_ESLINT_CHECKER=true` para deshabilitar las comprobaciones en segundo plano y así reducir la cantidad de RAM necesaria. +In `packages/twenty-front/.env` uncomment `VITE_DISABLE_TYPESCRIPT_CHECKER=true` to disable background checks thus reducing amount of needed RAM. **If it does not work:** -Run only the services you need, instead of `npx nx start`. Por ejemplo, si trabaja en el servidor, ejecute solo `npx nx worker twenty-server` +Run only the services you need, instead of `npx nx start`. For instance, if you work on the server, run only `npx nx worker twenty-server` **If it does not work:** If you tried to run only `npx nx run twenty-server:start` on WSL and it's failing with the below memory error: -`ERROR FATAL: Las marcas compactas ineficaces cercanas al límite del montón Falló la asignación - JavaScript heap out of memory` +`FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory` -La solución es ejecutar el siguiente comando en el terminal o agregarlo en el perfil .bashrc para configurarlo automáticamente: +Workaround is to execute below command in terminal or add it in .bashrc profile to get setup automatically: `export NODE_OPTIONS="--max-old-space-size=8192"` -La bandera --max-old-space-size=8192 establece un límite superior de 8GB para el montón de Node.js; su uso escala con la demanda de la aplicación. -Referencia: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048 +The --max-old-space-size=8192 flag sets an upper limit of 8GB for the Node.js heap; usage scales with application demand. +Reference: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048 **If it does not work:** -Investigate which processes are taking you most of your machine RAM. En Twenty, notamos que algunas extensiones de VScode estaban ocupando mucha RAM, por lo que las desactivamos temporalmente. +Investigate which processes are taking you most of your machine RAM. At Twenty, we noticed that some VScode extensions were taking a lot of RAM so we temporarily disable them. **If it does not work:** Restart your machine helps to clean up ghost processes. -#### Mientras ejecuta `npx nx start` hay [0] y [1] extraños en los registros +#### While running `npx nx start` there are weird [0] and [1] in logs -Es esperado, ya que el comando `npx nx start` está ejecutando más comandos detrás de escena. +That's expected as command `npx nx start` is running more commands under the hood -#### No se envían correos electrónicos +#### No emails are sent -La mayoría de las veces, se debe a que el `worker` no se está ejecutando en segundo plano. Intente ejecutar +Most of the time, it's because the `worker` is not running in the background. Try to run ``` npx nx worker twenty-server ``` -#### No se puede conectar mi cuenta de Microsoft 365 +#### Cannot connect my Microsoft 365 account -La mayoría de las veces, se debe a que su administrador no ha habilitado la licencia de Microsoft 365 para su cuenta. Verifique [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home). +Most of the time, it's because your admin has not enabled the Microsoft 365 Licence for your account. Check [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home). -Si tiene un código de error `AADSTS50020`, probablemente significa que está usando una cuenta de Microsoft personal. Esto aún no es compatible. Más información [aquí](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist) +If you have an error code `AADSTS50020`, it probably means that you are using a personal Microsoft account. This is not supported yet. More info [here](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist) -#### Mientras ejecuta `yarn` aparecen advertencias en la consola +#### While running `yarn` warnings appear in console -Las advertencias informan sobre la carga de dependencias adicionales que no están explicitadas en `package.json`, así que mientras no aparezca un error crítico, todo debería funcionar como se espera. +Warnings are informing about pulling additional dependencies which aren't explicitly stated in `package.json`, so as long as no breaking error appears, everything should work as expected. -#### Cuando el usuario accede a la página de inicio de sesión, aparece un error sobre un usuario no autorizado que intenta acceder al espacio de trabajo en los registros +#### When user accesses login page, error about unauthorized user trying to access workspace appears in logs -Es esperado ya que el usuario no está autorizado cuando cierra sesión porque su identidad no está verificada. +That's expected as user is unauthorized when logged out since its identity is not verified. -#### ¿Cómo comprobar si su worker está funcionando? +#### How to check if your worker is running? -* Vaya a [webhook-test.com](https://webhook-test.com/) y copie **Su URL de Webhook Única**. +* Go to [webhook-test.com](https://webhook-test.com/) and copy **Your Unique Webhook URL**.
- Prueba de webhook + Webhook test
-* Abra la aplicación Twenty, navegue a `/settings` y active el interruptor **Avanzado** en la parte inferior izquierda de la pantalla. -* Cree un nuevo webhook. -* Pegue **Su URL de Webhook Única** en el campo **Url de EndPoint** en Twenty. Establezca los **Filtros** en `Companies` y `Created`. +* Open your Twenty app, navigate to `/settings`, and enable the **Advanced** toggle at the bottom left of the screen. +* Create a new webhook. +* Paste **Your Unique Webhook URL** in the **Endpoint Url** field in Twenty. Set the **Filters** to `Companies` and `Created`.
- Configuraciones del webhook + Webhook settings
-* Vaya a `/objects/companies` y cree un nuevo registro de empresa. -* Regrese a [webhook-test.com](https://webhook-test.com/) y verifique si se ha recibido una nueva **solicitud POST**. +* Go to `/objects/companies` and create a new company record. +* Return to [webhook-test.com](https://webhook-test.com/) and check if a new **POST request** has been received.
- Resultado de la prueba del webhook + Webhook test result
-* Si se recibe una **solicitud POST**, su worker está funcionando con éxito. De lo contrario, debe solucionar problemas de su worker. +* If a **POST request** is received, your worker is running successfully. Otherwise, you need to troubleshoot your worker. -#### El front-end no comienza y devuelve el error TS5042: La opción 'project' no se puede mezclar con archivos fuente en una línea de comando +#### Front-end fails to start and returns error TS5042: Option 'project' cannot be mixed with source files on a command line -Comente el plugin checker en `packages/twenty-ui/vite-config.ts` como en el ejemplo a continuación +Comment out checker plugin in `packages/twenty-ui/vite-config.ts` like in example below ``` plugins: [ @@ -165,62 +166,62 @@ plugins: [ ], ``` -#### Panel de administración no accesible +#### Admin panel not accessible -Ejecute `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` en el contenedor de la base de datos para obtener acceso al panel de administración. +Run `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` in database container to get access to admin panel. ### 1-click Docker compose -#### No se puede iniciar sesión +#### Unable to Log In -Si no puedes iniciar sesión después de la configuración: +If you can't log in after setup: -1. Ejecución de los siguientes comandos: +1. Run the following commands: ```bash docker exec -it twenty-server-1 yarn docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed ``` -2. Reinicie los contenedores de Docker: +2. Restart the Docker containers: ```bash docker compose down docker compose up -d ``` -Tenga en cuenta que el comando database:reset borrará toda su base de datos y la recreará desde cero. +Note the database:reset command will completely erase your database and recreate it from scratch. -#### Problemas de conexión detrás de un Proxy Reverso +#### Connection Issues Behind a Reverse Proxy -Si está ejecutando Twenty detrás de un proxy inverso y experimenta problemas de conexión: +If you're running Twenty behind a reverse proxy and experiencing connection issues: -1. **Verifique SERVER_URL:** +1. **Verify SERVER_URL:** - Asegúrese de que `SERVER_URL` en su archivo `.env` coincida con su URL de acceso externa, incluyendo `https` si SSL está habilitado. + Ensure `SERVER_URL` in your `.env` file matches your external access URL, including `https` if SSL is enabled. -2. **Verifique la configuración del Proxy Reverso:** +2. **Check Reverse Proxy Settings:** - * Confirme que su proxy reverso está reenviando correctamente las solicitudes al servidor de Twenty. - * Asegúrese de que los encabezados como `X-Forwarded-For` y `X-Forwarded-Proto` estén configurados correctamente. + * Confirm that your reverse proxy is correctly forwarding requests to the Twenty server. + * Ensure headers like `X-Forwarded-For` and `X-Forwarded-Proto` are properly set. -3. **Reinicie los Servicios:** +3. **Restart Services:** - Después de hacer cambios, reinicie tanto el proxy inverso como los contenedores de Twenty. + After making changes, restart both the reverse proxy and Twenty containers. -#### Error al cargar una imagen - permiso denegado +#### Error when uploading an image - permission denied -Cambiar la propiedad de la carpeta de datos en el host de raíz a otro usuario y grupo resuelve este problema. +Switching the data folder ownership on the host from root to another user and group resolves this problem. -## Obtención de Ayuda +## Getting Help -Si enfrenta problemas no cubiertos en esta guía: +If you encounter issues not covered in this guide: -* Verifique los Registros: +* Check Logs: - Vea los registros del contenedor por mensajes de error: + View container logs for error messages: ```bash docker compose logs ``` -* Soporte Comunitario: +* Community Support: - Póngase en contacto con la [comunidad de Twenty](https://github.com/twentyhq/twenty/issues) o [los canales de soporte](https://discord.gg/cx5n4Jzs57) para obtener asistencia. + Reach out to the [Twenty community](https://github.com/twentyhq/twenty/issues) or [support channels](https://discord.gg/cx5n4Jzs57) for assistance. diff --git a/packages/twenty-docs/l/es/developers/self-host/capabilities/upgrade-guide.mdx b/packages/twenty-docs/l/es/developers/self-host/capabilities/upgrade-guide.mdx index df79483163..03a53f5685 100644 --- a/packages/twenty-docs/l/es/developers/self-host/capabilities/upgrade-guide.mdx +++ b/packages/twenty-docs/l/es/developers/self-host/capabilities/upgrade-guide.mdx @@ -1,40 +1,40 @@ --- -title: Guía de actualización +title: Upgrade guide --- -## Guías generales +## General guidelines **Always make sure to back up your database before starting the upgrade process** by running `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`. To restore backup, run `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`. -Si usó Docker Compose, siga estos pasos: +If you used Docker Compose, follow these steps: -1. En una terminal, en el host donde Twenty está funcionando, apague Twenty: `docker compose down` +1. In a terminal, on the host where Twenty is running, turn off Twenty: `docker compose down` -2. Actualice la versión cambiando el valor de `TAG` en el archivo .env cerca de su docker-compose. ( Recomendamos consumir la versión `major.minor` como `v0.53` ) +2. Upgrade the version by changing the `TAG` value in the .env file near your docker-compose. ( We recommend consuming `major.minor` version such as `v0.53` ) -3. Vuelva a conectar Twenty con `docker compose up -d` +3. Bring Twenty back online with `docker compose up -d` -Si desea actualizar su instancia por algunas versiones, por ejemplo de v0.33.0 a v0.35.0, debe actualizar su instancia secuencialmente, en este ejemplo de v0.33.0 a v0.34.0, luego de v0.34.0 a v0.35.0. +If you want to upgrade your instance by few versions, e.g. from v0.33.0 to v0.35.0, you have to upgrade your instance sequentially, in this example from v0.33.0 to v0.34.0, then from v0.34.0 to v0.35.0. -**Asegúrese de que después de cada versión actualizada tenga una copia de respaldo no corrupta.** +**Make sure that after each upgraded version you have non-corrupted backup.** -## Pasos de actualización específicos por versión +## Version-specific upgrade steps ## v1.0 -¡Hola Twenty v1.0! 🎉 +Hello Twenty v1.0! 🎉 ## v0.60 -### Mejoras de rendimiento +### Performance Enhancements -Todas las interacciones con la API de metadatos han sido optimizadas para un mejor rendimiento, particularmente para la manipulación de metadatos de objetos y operaciones de creación de espacios de trabajo. +All interactions with the metadata API have been optimized for better performance, particularly for object metadata manipulation and workspace creation operations. -Hemos reestructurado nuestra estrategia de almacenamiento en caché para priorizar los aciertos de caché sobre las consultas de base de datos cuando sea posible, mejorando significativamente el rendimiento de las operaciones de la API de metadatos. +We've refactored our caching strategy to prioritize cache hits over database queries when possible, significantly improving the performance of metadata API operations. -Si encuentra problemas de ejecución después de actualizar, es posible que deba vaciar su caché para asegurar que esté sincronizado con los cambios más recientes. Ejecute este comando en su contenedor del servidor de twenty: +If you encounter any runtime issues after upgrading, you may need to flush your cache to ensure it's synchronized with the latest changes. Run this command in your twenty-server container: ```bash yarn command:prod cache:flush @@ -42,113 +42,113 @@ yarn command:prod cache:flush ### v0.55 -Actualice su instancia de Twenty para usar la imagen v0.55 +Upgrade your Twenty instance to use v0.55 image -Ya no necesita ejecutar ningún comando, la nueva imagen se encargará automáticamente de ejecutar todas las migraciones necesarias. +You don't need to run any command anymore, the new image will automatically care about running all required migrations. -### Error: `El usuario no tiene permiso` +### `User does not have permission` error -Si encuentra errores de autorización en la mayoría de solicitudes después de actualizar, es posible que deba vaciar su caché para recalcular los permisos más recientes. +If you encounter authorization errors on most requests after upgrading, you may need to flush your cache to recompute the latest permissions. -En su contenedor `twenty-server`, ejecute: +In your `twenty-server` container, run: ```bash yarn command:prod cache:flush ``` -Este problema es específico de esta versión de Twenty y no debería ser necesario para futuras actualizaciones. +This issue is specific to this Twenty version and should not be required for future upgrades. ### v0.54 -Desde la versión `0.53`, no se necesitan acciones manuales. +Since version `0.53`, no manual actions needed. -#### Desaparición del esquema de metadatos +#### Metadata schema deprecation -Hemos fusionado el esquema `metadata` en el esquema `core` para simplificar la recuperación de datos desde `TypeORM`. -Hemos fusionado el paso del comando `migrate` dentro del comando `upgrade`. No recomendamos ejecutar `migrate` manualmente dentro de ninguno de sus contenedores de servidor/trabajador. +We've merged the `metadata` schema into the `core` one to simplify data retrieval from `TypeORM`. +We have merged the `migrate` command step within the `upgrade` command. We do not recommend running `migrate` manually within any of your server/worker containers. -### Desde v0.53 +### Since v0.53 -A partir de `0.53`, la actualización se realiza de forma programática dentro del `DockerFile`, esto significa que de ahora en adelante, no debería necesitar ejecutar ningún comando manualmente. +Starting from `0.53`, upgrade is programmatically done within the `DockerFile`, this means from now on, you shouldn't have to run any command manually anymore. -Asegúrese de seguir actualizando su instancia secuencialmente, sin omitir ninguna versión principal (por ejemplo, de `0.43.3` a `0.44.0` está permitido, pero de `0.43.1` a `0.45.0` no lo está), de lo contrario, podría provocar un desincronización de la versión del espacio de trabajo que podría resultar en errores de ejecución y funciones faltantes. +Make sure to keep upgrading your instance sequentially, without skipping any major version (e.g. `0.43.3` to `0.44.0` is allowed, but `0.43.1` to `0.45.0` isn't), else could lead to workspace version desynchronization that could result in runtime error and missing functionality. -Para verificar si un espacio de trabajo se ha migrado correctamente, puede revisar su versión en la base de datos en la tabla `core.workspace`. +To check if a workspace has been correctly migrated you can review its version in database in `core.workspace` table. -Siempre debería estar dentro del rango de la versión `major.minor` actual de su instancia de Twenty; puede ver la versión de su instancia en el panel de administración (en `/settings/admin-panel`, accesible si su usuario tiene la propiedad `canAccessFullAdminPanel` establecida en verdadero en la base de datos) o ejecutando `echo $APP_VERSION` en su contenedor `twenty-server`. +It should always be in the range of your current Twenty's instance `major.minor` version, you can view your instance version in the admin panel (at `/settings/admin-panel`, accessible if your user has `canAccessFullAdminPanel` property set to true in the database) or by running `echo $APP_VERSION` in your `twenty-server` container. -Para corregir una versión de espacio de trabajo desincronizada, tendrá que actualizar desde la correspondiente versión de twenty siguiendo la guía de actualización relacionada secuencialmente, y así sucesivamente hasta alcanzar la versión deseada. +To fix a desynchronized workspace version, you will have to upgrade from the corresponding twenty's version following related upgrade guide sequentially and so on until it reaches desired version. -#### Eliminación de `auditLog` +#### `auditLog` removal -Hemos eliminado el objeto estándar auditLog, lo que significa que el tamaño de su copia de seguridad podría reducirse significativamente después de esta migración. +We've removed the auditLog standard object, which means your backup size might be significantly reduced after this migration. -### v0.51 a v0.52 +### v0.51 to v0.52 -Actualice su instancia de Twenty para usar la imagen v0.52 +Upgrade your Twenty instance to use v0.52 image ``` yarn database:migrate:prod yarn command:prod upgrade ``` -#### Tengo un espacio de trabajo bloqueado en la versión entre `0.52.0` y `0.52.6` +#### I have a workspace blocked in version between `0.52.0` and `0.52.6` -Desafortunadamente, `0.52.0` y `0.52.6` se han eliminado completamente de dockerHub. -Tendrá que actualizar manualmente la versión de su espacio de trabajo a `0.51.0` en la base de datos y actualizar usando la versión twenty `0.52.11` siguiendo su guía de actualización justo arriba. +Unfortunately `0.52.0` and `0.52.6` have been completely removed from dockerHub. +You will have to manually update your workspace version to `0.51.0` in database and upgrade using twenty version `0.52.11` following its just above upgrade guide. -### v0.50 a v0.51 +### v0.50 to v0.51 -Actualice su instancia de Twenty para usar la imagen v0.51 +Upgrade your Twenty instance to use v0.51 image ``` yarn database:migrate:prod yarn command:prod upgrade ``` -### v0.44.0 a v0.50.0 +### v0.44.0 to v0.50.0 -Actualice su instancia de Twenty para usar la imagen v0.50.0 +Upgrade your Twenty instance to use v0.50.0 image ``` yarn database:migrate:prod yarn command:prod upgrade ``` -#### Mutación del docker-compose.yml +#### Docker-compose.yml mutation -Esta versión incluye una mutación del `docker-compose.yml` para dar acceso al servicio `worker` al volumen `server-local-data`. -Actualice su `docker-compose.yml` local con el [docker-compose.yml de v0.50.0](https://github.com/twentyhq/twenty/blob/v0.50.0/packages/twenty-docker/docker-compose.yml) +This version includes a `docker-compose.yml` mutation to give `worker` service access to the `server-local-data` volume. +Please update your local `docker-compose.yml` with [v0.50.0 docker-compose.yml](https://github.com/twentyhq/twenty/blob/v0.50.0/packages/twenty-docker/docker-compose.yml) -### v0.43.0 a v0.44.0 +### v0.43.0 to v0.44.0 -Actualice su instancia de Twenty para usar la imagen v0.44.0 +Upgrade your Twenty instance to use v0.44.0 image ``` yarn database:migrate:prod yarn command:prod upgrade ``` -### v0.42.0 a v0.43.0 +### v0.42.0 to v0.43.0 -Actualice su instancia de Twenty para usar la imagen v0.43.0 +Upgrade your Twenty instance to use v0.43.0 image ``` yarn database:migrate:prod yarn command:prod upgrade ``` -En esta versión, también hemos cambiado a la imagen de postgres:16 en docker-compose.yml. +In this version, we have also switched to postgres:16 image in docker-compose.yml. -#### (Opción 1) Migración de base de datos +#### (Option 1) Database migration -Mantener la imagen postgres-spilo existente está bien, pero tendrá que congelar la versión en su docker-compose.yml a 0.43.0. +Keeping the existing postgres-spilo image is fine, but you will have to freeze the version in your docker-compose.yml to be 0.43.0. -#### (Opción 2) Migración de base de datos +#### (Option 2) Database migration -Si desea migrar su base de datos a la nueva imagen de postgres:16, siga estos pasos: +If you want to migrate your database to the new postgres:16 image, please follow these steps: -1. Descargue su base de datos del contenedor antiguo de postgres-spilo +1. Dump your database from the old postgres-spilo container ``` docker exec -it twenty-db-1 sh @@ -157,11 +157,11 @@ exit docker cp twenty-db-1:/home/postgres/databases_backup.sql . ``` -Asegúrese de que su archivo de respaldo no esté vacío. +Make sure your dump file is not empty. -2. Actualice su docker-compose.yml para usar la imagen de postgres:16 como en el archivo [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml). +2. Upgrade your docker-compose.yml to use postgres:16 image as in the [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) file. -3. Restaure la base de datos al nuevo contenedor postgres:16 +3. Restore the database to the new postgres:16 container ``` docker cp databases_backup.sql twenty-db-1:/databases_backup.sql @@ -170,86 +170,86 @@ psql -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} -f databases_backup.sql exit ``` -### v0.41.0 a v0.42.0 +### v0.41.0 to v0.42.0 -Actualice su instancia de Twenty para usar la imagen v0.42.0 +Upgrade your Twenty instance to use v0.42.0 image ``` yarn database:migrate:prod yarn command:prod upgrade-0.42 ``` -**Variables del entorno** +**Environment Variables** -* Removidos: `FRONT_PORT`, `FRONT_PROTOCOL`, `FRONT_DOMAIN`, `PORT` -* Agregados: `FRONTEND_URL`, `NODE_PORT`, `MAX_NUMBER_OF_WORKSPACES_DELETED_PER_EXECUTION`, `MESSAGING_PROVIDER_MICROSOFT_ENABLED`, `CALENDAR_PROVIDER_MICROSOFT_ENABLED`, `IS_MICROSOFT_SYNC_ENABLED` +* Removed: `FRONT_PORT`, `FRONT_PROTOCOL`, `FRONT_DOMAIN`, `PORT` +* Added: `FRONTEND_URL`, `NODE_PORT`, `MAX_NUMBER_OF_WORKSPACES_DELETED_PER_EXECUTION`, `MESSAGING_PROVIDER_MICROSOFT_ENABLED`, `CALENDAR_PROVIDER_MICROSOFT_ENABLED`, `IS_MICROSOFT_SYNC_ENABLED` -### v0.40.0 a v0.41.0 +### v0.40.0 to v0.41.0 -Actualice su instancia de Twenty para usar la imagen v0.41.0 +Upgrade your Twenty instance to use v0.41.0 image ``` yarn database:migrate:prod yarn command:prod upgrade-0.41 ``` -**Variables del entorno** +**Environment Variables** -* Removido: `AUTH_MICROSOFT_TENANT_ID` +* Removed: `AUTH_MICROSOFT_TENANT_ID` -### v0.35.0 a v0.40.0 +### v0.35.0 to v0.40.0 -Actualice su instancia de Twenty para usar la imagen v0.40.0 +Upgrade your Twenty instance to use v0.40.0 image ``` yarn database:migrate:prod yarn command:prod upgrade-0.40 ``` -**Variables del entorno** +**Environment Variables** -* Agregados: `IS_EMAIL_VERIFICATION_REQUIRED`, `EMAIL_VERIFICATION_TOKEN_EXPIRES_IN`, `WORKFLOW_EXEC_THROTTLE_LIMIT`, `WORKFLOW_EXEC_THROTTLE_TTL` +* Added: `IS_EMAIL_VERIFICATION_REQUIRED`, `EMAIL_VERIFICATION_TOKEN_EXPIRES_IN`, `WORKFLOW_EXEC_THROTTLE_LIMIT`, `WORKFLOW_EXEC_THROTTLE_TTL` -### v0.34.0 a v0.35.0 +### v0.34.0 to v0.35.0 -Actualice su instancia de Twenty para usar la imagen v0.35.0 +Upgrade your Twenty instance to use v0.35.0 image ``` yarn database:migrate:prod yarn command:prod upgrade-0.35 ``` -El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata) -El `yarn command:prod upgrade-0.35` se encarga de la migración de datos de todos los espacios de trabajo. +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.35` takes care of the data migration of all workspaces. -**Variables del entorno** +**Environment Variables** -* Reemplazamos `ENABLE_DB_MIGRATIONS` por `DISABLE_DB_MIGRATIONS` (valor predeterminado ahora es `false`, probablemente no tenga que establecer nada) +* We replaced `ENABLE_DB_MIGRATIONS` with `DISABLE_DB_MIGRATIONS` (default value is now `false`, you probably don't have to set anything) -### v0.33.0 a v0.34.0 +### v0.33.0 to v0.34.0 -Actualice su instancia de Twenty para usar la imagen v0.34.0 +Upgrade your Twenty instance to use v0.34.0 image ``` yarn database:migrate:prod yarn command:prod upgrade-0.34 ``` -El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata) -El `yarn command:prod upgrade-0.34` se encarga de la migración de datos de todos los espacios de trabajo. +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.34` takes care of the data migration of all workspaces. -**Variables del entorno** +**Environment Variables** -* Removido: `FRONT_BASE_URL` -* Agregados: `FRONT_DOMAIN`, `FRONT_PROTOCOL`, `FRONT_PORT` +* Removed: `FRONT_BASE_URL` +* Added: `FRONT_DOMAIN`, `FRONT_PROTOCOL`, `FRONT_PORT` -Hemos actualizado la forma en que manejamos la URL del frontend. -Ahora puede configurar la URL del frontend usando las variables `FRONT_DOMAIN`, `FRONT_PROTOCOL` y `FRONT_PORT`. -Si FRONT_DOMAIN no está configurado, la URL del frontend volverá a `SERVER_URL`. +We have updated the way we handle the frontend URL. +You can now set the frontend URL using the `FRONT_DOMAIN`, `FRONT_PROTOCOL` and `FRONT_PORT` variables. +If FRONT_DOMAIN is not set, the frontend URL will fall back to `SERVER_URL`. -### v0.32.0 a v0.33.0 +### v0.32.0 to v0.33.0 -Actualice su instancia de Twenty para usar la imagen v0.33.0 +Upgrade your Twenty instance to use v0.33.0 image ``` yarn command:prod cache:flush @@ -257,68 +257,68 @@ yarn database:migrate:prod yarn command:prod upgrade-0.33 ``` -El comando `yarn command:prod cache:flush` eliminará la caché de Redis. -El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata) -El `yarn command:prod upgrade-0.33` se encarga de la migración de datos de todos los espacios de trabajo. +The `yarn command:prod cache:flush` command will flush the Redis cache. +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.33` takes care of the data migration of all workspaces. -A partir de esta versión, la imagen twenty-postgres para DB quedó obsoleta y ahora se usa twenty-postgres-spilo. -Si desea seguir usando la imagen twenty-postgres, simplemente reemplace `twentycrm/twenty-postgres:${TAG}` con `twentycrm/twenty-postgres` en docker-compose.yml. +Starting from this version, twenty-postgres image for DB became deprecated and twenty-postgres-spilo is used instead. +If you want to keep using twenty-postgres image, simply replace `twentycrm/twenty-postgres:${TAG}` with `twentycrm/twenty-postgres` in docker-compose.yml. -### v0.31.0 a v0.32.0 +### v0.31.0 to v0.32.0 -Actualice su instancia de Twenty para usar la imagen v0.32.0 +Upgrade your Twenty instance to use v0.32.0 image -**Migración de esquemas y datos** +**Schema and data migration** ``` yarn database:migrate:prod yarn command:prod upgrade-0.32 ``` -El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata) -El `yarn command:prod upgrade-0.32` se encarga de la migración de datos de todos los espacios de trabajo. +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.32` takes care of the data migration of all workspaces. -**Variables del entorno** +**Environment Variables** -Hemos actualizado la forma en que manejamos la conexión Redis. +We have updated the way we handle the Redis connection. -* Removidos: `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD` -* Agregado: `REDIS_URL` +* Removed: `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD` +* Added: `REDIS_URL` -Actualice su archivo `.env` para usar la nueva variable `REDIS_URL` en lugar de los parámetros de conexión individuales de Redis. +Update your `.env` file to use the new `REDIS_URL` variable instead of the individual Redis connection parameters. -También hemos simplificado la forma en que manejamos los tokens JWT. +We have also simplified the way we handle the JWT tokens. -* Removidos: `ACCESS_TOKEN_SECRET`, `LOGIN_TOKEN_SECRET`, `REFRESH_TOKEN_SECRET`, `FILE_TOKEN_SECRET` -* Agregado: `APP_SECRET` +* Removed: `ACCESS_TOKEN_SECRET`, `LOGIN_TOKEN_SECRET`, `REFRESH_TOKEN_SECRET`, `FILE_TOKEN_SECRET` +* Added: `APP_SECRET` -Actualice su archivo `.env` para usar la nueva variable `APP_SECRET` en lugar de los secretos de tokens individuales (puede usar el mismo secreto que antes o generar una nueva cadena aleatoria) +Update your `.env` file to use the new `APP_SECRET` variable instead of the individual tokens secrets (you can use the same secret as before or generate a new random string) -**Cuenta conectada** +**Connected Account** -Si está utilizando cuentas conectadas para sincronizar sus correos electrónicos y calendarios de Google, deberá activar la [API de People](https://developers.google.com/people) en su consola de administración de Google. +If you are using connected account to synchronize your Google emails and calendars, you will need to activate the [People API](https://developers.google.com/people) on your Google Admin console. -### v0.30.0 a v0.31.0 +### v0.30.0 to v0.31.0 -Actualice su instancia de Twenty para usar la imagen v0.31.0 +Upgrade your Twenty instance to use v0.31.0 image -**Migración de esquemas y datos:** +**Schema and data migration**: ``` yarn database:migrate:prod yarn command:prod upgrade-0.31 ``` -El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata) -El `yarn command:prod upgrade-0.31` se encarga de la migración de datos de todos los espacios de trabajo. +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.31` takes care of the data migration of all workspaces. -### v0.24.0 a v0.30.0 +### v0.24.0 to v0.30.0 -Actualice su instancia de Twenty para usar la imagen v0.30.0 +Upgrade your Twenty instance to use v0.30.0 image **Breaking change**: -To enhance performances, Twenty now requires redis cache to be configured. Hemos actualizado nuestro [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) para reflejar esto. -Asegúrese de actualizar su configuración y sus variables de entorno en consecuencia: +To enhance performances, Twenty now requires redis cache to be configured. We have updated our [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) to reflect this. +Make sure to update your configuration and to update your environment variables accordingly: ``` REDIS_HOST={your-redis-host} @@ -326,49 +326,49 @@ REDIS_PORT={your-redis-port} CACHE_STORAGE_TYPE=redis ``` -**Migración de esquemas y datos:** +**Schema and data migration**: ``` yarn database:migrate:prod yarn command:prod upgrade-0.30 ``` -El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata) -El `yarn command:prod upgrade-0.30` se encarga de la migración de datos de todos los espacios de trabajo. +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.30` takes care of the data migration of all workspaces. -### v0.23.0 a v0.24.0 +### v0.23.0 to v0.24.0 -Actualice su instancia de Twenty para usar la imagen v0.24.0 +Upgrade your Twenty instance to use v0.24.0 image -Ejecución de los siguientes comandos: +Run the following commands: ``` yarn database:migrate:prod yarn command:prod upgrade-0.24 ``` -El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata) -El `yarn command:prod upgrade-0.24` se encarga de la migración de datos de todos los espacios de trabajo. +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.24` takes care of the data migration of all workspaces. -### v0.22.0 a v0.23.0 +### v0.22.0 to v0.23.0 -Actualice su instancia de Twenty para usar la imagen v0.23.0 +Upgrade your Twenty instance to use v0.23.0 image -Ejecución de los siguientes comandos: +Run the following commands: ``` yarn database:migrate:prod yarn command:prod upgrade-0.23 ``` -El comando `yarn database:migrate:prod` aplicará las migraciones a la base de datos. -El `yarn command:prod upgrade-0.23` se encarga de la migración de datos, incluyendo la transferencia de actividades a tareas/notas. +The `yarn database:migrate:prod` command will apply the migrations to the Database. +The `yarn command:prod upgrade-0.23` takes care of the data migration, including transferring activities to tasks/notes. -### v0.21.0 a v0.22.0 +### v0.21.0 to v0.22.0 -Actualice su instancia de Twenty para usar la imagen v0.22.0 +Upgrade your Twenty instance to use v0.22.0 image -Ejecución de los siguientes comandos: +Run the following commands: ``` yarn database:migrate:prod @@ -376,6 +376,6 @@ yarn command:prod workspace:sync-metadata -f yarn command:prod upgrade-0.22 ``` -El comando `yarn database:migrate:prod` aplicará las migraciones a la base de datos. -El comando `yarn command:prod workspace:sync-metadata -f` sincronizará la definición de objetos estándar a las tablas de metadatos y aplicará las migraciones requeridas a los espacios de trabajo existentes. -El comando `yarn command:prod upgrade-0.22` aplicará transformaciones de datos específicas para adaptarse a las nuevas opciones predeterminadas de instrumentación de solicitud de objetos. +The `yarn database:migrate:prod` command will apply the migrations to the Database. +The `yarn command:prod workspace:sync-metadata -f` command will sync the definition of standard objects to the metadata tables and apply to required migrations to existing workspaces. +The `yarn command:prod upgrade-0.22` command will apply specific data transformations to adapt to the new object defaultRequestInstrumentationOptions. diff --git a/packages/twenty-docs/l/es/developers/self-host/self-host.mdx b/packages/twenty-docs/l/es/developers/self-host/self-host.mdx index 1c754825d1..86d3072999 100644 --- a/packages/twenty-docs/l/es/developers/self-host/self-host.mdx +++ b/packages/twenty-docs/l/es/developers/self-host/self-host.mdx @@ -4,10 +4,10 @@ description: Deploy and manage Twenty on your own infrastructure. --- - IA + AI -## Resumen +## Overview Twenty can be self-hosted on your own infrastructure, giving you full control over your data and deployment. diff --git a/packages/twenty-docs/l/es/navigation.json b/packages/twenty-docs/l/es/navigation.json index f1eaf39da7..8096fbf4ac 100644 --- a/packages/twenty-docs/l/es/navigation.json +++ b/packages/twenty-docs/l/es/navigation.json @@ -15,7 +15,7 @@ } }, "dataModel": { - "label": "Modelo de datos", + "label": "Data Model", "groups": { "dataModelCapabilities": { "label": "Capabilities" @@ -48,7 +48,7 @@ } }, "workflows": { - "label": "Flujos de trabajo", + "label": "Workflows", "groups": { "workflowsCapabilities": { "label": "Capabilities" @@ -73,7 +73,7 @@ } }, "ai": { - "label": "IA", + "label": "AI", "groups": { "aiCapabilities": { "label": "Capabilities" @@ -95,7 +95,7 @@ } }, "dashboards": { - "label": "Tableros", + "label": "Dashboards", "groups": { "dashboardsCapabilities": { "label": "Capabilities" @@ -117,7 +117,7 @@ } }, "billing": { - "label": "Facturación", + "label": "Billing", "groups": { "billingCapabilities": { "label": "Capabilities" @@ -128,7 +128,7 @@ } }, "settings": { - "label": "Configuración", + "label": "Settings", "groups": { "settingsCapabilities": { "label": "Capabilities" @@ -141,10 +141,10 @@ } }, "developers": { - "label": "Desarrolladores", + "label": "Developers", "groups": { "developersGroup": { - "label": "Desarrolladores" + "label": "Developers" }, "extend": { "label": "Extend", @@ -169,29 +169,29 @@ "label": "Capabilities", "groups": { "frontendDevelopment": { - "label": "Desarrollo Frontend", + "label": "Frontend Development", "groups": { "twentyUi": { "label": "Twenty UI", "groups": { "display": { - "label": "Mostrar" + "label": "Display" }, "feedback": { - "label": "Retroalimentación" + "label": "Feedback" }, "input": { - "label": "Entrada" + "label": "Input" }, "navigation": { - "label": "Navegación" + "label": "Navigation" } } } } }, "backendDevelopment": { - "label": "Desarrollo Backend" + "label": "Backend Development" } } } diff --git a/packages/twenty-docs/l/es/twenty-ui/display/app-tooltip.mdx b/packages/twenty-docs/l/es/twenty-ui/display/app-tooltip.mdx index ced09dc767..4e620eedc7 100644 --- a/packages/twenty-docs/l/es/twenty-ui/display/app-tooltip.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/display/app-tooltip.mdx @@ -1,16 +1,16 @@ --- -title: Consejo de la aplicación +title: App Tooltip image: /images/user-guide/tips/light-bulb.png --- - Encabezado + Header -Un breve mensaje que muestra información adicional cuando un usuario interactúa con un elemento. +A brief message that displays additional information when a user interacts with an element. - + ```jsx import { AppTooltip } from "@/ui/display/tooltip/AppTooltip"; @@ -38,26 +38,26 @@ Un breve mensaje que muestra información adicional cuando un usuario interactú - | Props | Tipo | Descripción | - | ------------------ | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | - | nombreDeClase | cadena | Clase CSS opcional para estilo adicional | - | anchorSelect | Selector CSS | Selector para el ancla del consejo (el elemento que activa el consejo) | - | contenido | cadena | El contenido que desea mostrar dentro del consejo | - | delayHide | número | The delay in seconds before hiding the tooltip after the cursor leaves the anchor | - | desplazamiento | número | El desplazamiento en píxeles para posicionar el consejo | - | sinFlecha | booleano | Si es `true`, oculta la flecha en el consejo | - | estáAbierto | booleano | Si es `true`, el consejo está abierto por defecto | - | lugar | Cadena `PlacesType` de `react-tooltip` | Especifica la colocación del consejo. Los valores incluyen `inferior`, `izquierda`, `derecha`, `superior`, `superior-inicio`, `superior-fin`, `derecha-inicio`, `derecha-fin`, `inferior-inicio`, `inferior-fin`, `izquierda-inicio` y `izquierda-fin` | - | estrategiaPosicion | Cadena `PositionStrategy` de `react-tooltip` | Estrategia de posición para el consejo. Tiene dos valores: `absoluto` y `fijo` | + | Props | Type | Description | + | ---------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | className | string | Optional CSS class for additional styling | + | anchorSelect | CSS selector | Selector for the tooltip anchor (the element that triggers the tooltip) | + | content | string | The content you want to display within the tooltip | + | delayHide | number | The delay in seconds before hiding the tooltip after the cursor leaves the anchor | + | offset | number | The offset in pixels for positioning the tooltip | + | noArrow | boolean | If `true`, hides the arrow on the tooltip | + | isOpen | boolean | If `true`, the tooltip is open by default | + | place | `PlacesType` string from `react-tooltip` | Specifies the placement of the tooltip. Values include `bottom`, `left`, `right`, `top`, `top-start`, `top-end`, `right-start`, `right-end`, `bottom-start`, `bottom-end`, `left-start`, and `left-end` | + | positionStrategy | `PositionStrategy` string from `react-tooltip` | Position strategy for the tooltip. Has two values: `absolute` and `fixed` | -## Texto Desbordante con Consejo +## Overflowing Text with Tooltip -Maneja texto desbordante y muestra un consejo cuando el texto se desborda. +Handles overflowing text and displays a tooltip when the text overflows. - + ```jsx import { OverflowingTextWithTooltip } from 'twenty-ui/display'; @@ -71,8 +71,8 @@ Maneja texto desbordante y muestra un consejo cuando el texto se desborda. - | Props | Tipo | Descripción | - | ----- | ------ | -------------------------------------------------------------- | - | texto | cadena | El contenido que desea mostrar en el área de texto desbordante | + | Props | Type | Description | + | ----- | ------ | ------------------------------------------------------------ | + | text | string | The content you want to display in the overflowing text area | diff --git a/packages/twenty-docs/l/es/twenty-ui/display/checkmark.mdx b/packages/twenty-docs/l/es/twenty-ui/display/checkmark.mdx index 7726dabf92..ef84d5c2d5 100644 --- a/packages/twenty-docs/l/es/twenty-ui/display/checkmark.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/display/checkmark.mdx @@ -1,16 +1,16 @@ --- -title: Marca de verificación +title: Checkmark image: /images/user-guide/tasks/tasks_header.png --- - Encabezado + Header -Representa una acción exitosa o completada. +Represents a successful or completed action. - + ```jsx import { Checkmark } from 'twenty-ui/display'; @@ -21,16 +21,16 @@ Representa una acción exitosa o completada. - Extiende `React.ComponentPropsWithoutRef<'div'>` y acepta todas las propiedades de un elemento `div` regular. + Extends `React.ComponentPropsWithoutRef<'div'>` and accepts all the props of a regular `div` element. -## Marca de verificación animada +## Animated Checkmark -Representa un ícono de marca de verificación con la característica adicional de animación. +Represents a checkmark icon with the added feature of animation. - + ```jsx import { AnimatedCheckmark } from 'twenty-ui/display'; @@ -48,11 +48,11 @@ Representa un ícono de marca de verificación con la característica adicional - | Props | Tipo | Descripción | Predeterminado | - | ----------- | -------- | -------------------------------------------------- | -------------- | - | isAnimating | booleano | Controla si la marca de verificación está animando | falso | - | color | cadena | Color de la marca de verificación | | - | duración | número | La duración de la animación en segundos | 0.5 segundos | - | tamaño | número | El tamaño de la marca de verificación | 28 píxeles | + | Props | Type | Description | Default | + | ----------- | ------- | ------------------------------------------- | ----------- | + | isAnimating | boolean | Controls whether the checkmark is animating | false | + | color | string | Color of the checkmark | | + | duration | number | The duration of the animation in seconds | 0.5 seconds | + | size | number | The size of the checkmark | 28 pixels | diff --git a/packages/twenty-docs/l/es/twenty-ui/display/chip.mdx b/packages/twenty-docs/l/es/twenty-ui/display/chip.mdx index 7fccdec997..ded2fd1c77 100644 --- a/packages/twenty-docs/l/es/twenty-ui/display/chip.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/display/chip.mdx @@ -4,13 +4,13 @@ image: /images/user-guide/github/github-header.png --- - Encabezado + Header A visual element that you can use as a clickable or non-clickable container with a label, optional left and right components, and various styling options to display labels and tags. - + ```jsx import { Chip } from 'twenty-ui/components'; @@ -34,21 +34,21 @@ A visual element that you can use as a clickable or non-clickable container with - | Props | Tipo | Descripción | - | ------------ | ------------------------ | ------------------------------------------------------------------------------------------------ | - | linkToEntity | cadena | El enlace a la entidad | - | entityId | cadena | El identificador único de la entidad | - | nombre | cadena | El nombre de la entidad | - | pictureUrl | cadena | s picture", | - | avatarType | Tipo de Avatar | El tipo de avatar que quieres mostrar. Tiene dos opciones: `redondeado` y `cuadrado` | - | variante | `EntityChipVariant` enum | Variante del chip de entidad que quieres mostrar. Tiene dos opciones: `regular` y `transparente` | - | LeftIcon | IconComponent | Un componente de React que representa un ícono. Mostrado en el lado izquierdo del chip | + | Props | Type | Description | + | ------------ | ------------------------ | -------------------------------------------------------------------------------------------- | + | linkToEntity | string | The link to the entity | + | entityId | string | The unique identifier for the entity | + | name | string | The name of the entity | + | pictureUrl | string | s picture", | + | avatarType | Avatar Type | The type of avatar you want to display. Has two options: `rounded` and `squared` | + | variant | `EntityChipVariant` enum | Variant of the entity chip you want to display. Has two options: `regular` and `transparent` | + | LeftIcon | IconComponent | A React component representing an icon. Displayed on the left side of the chip | -## Ejemplos +## Examples -### Chip Transparente Deshabilitado +### Transparent Disabled Chip ```jsx import { Chip } from 'twenty-ui/components'; @@ -73,7 +73,7 @@ export const MyComponent = () => {
-### Chip Deshabilitado con Tooltip +### Disabled Chip with Tooltip ```jsx import { Chip } from "twenty-ui/components"; @@ -95,12 +95,12 @@ export const MyComponent = () => { }; ``` -## Chip de Entidad +## Entity Chip -Un elemento tipo Chip para mostrar información sobre una entidad. +A Chip-like element to display information about an entity. - + ```jsx import { BrowserRouter as Router } from 'react-router-dom'; import { IconTwentyStar } from 'twenty-ui/display'; @@ -125,14 +125,14 @@ Un elemento tipo Chip para mostrar información sobre una entidad. - | Props | Tipo | Descripción | - | ------------ | ------------------------ | ------------------------------------------------------------------------------------------------ | - | linkToEntity | cadena | El enlace a la entidad | - | entityId | cadena | El identificador único de la entidad | - | nombre | cadena | El nombre de la entidad | - | pictureUrl | cadena | s picture", | - | avatarType | Tipo de Avatar | El tipo de avatar que quieres mostrar. Tiene dos opciones: `redondeado` y `cuadrado` | - | variante | `EntityChipVariant` enum | Variante del chip de entidad que quieres mostrar. Tiene dos opciones: `regular` y `transparente` | - | LeftIcon | IconComponent | Un componente de React que representa un ícono. Mostrado en el lado izquierdo del chip | + | Props | Type | Description | + | ------------ | ------------------------ | -------------------------------------------------------------------------------------------- | + | linkToEntity | string | The link to the entity | + | entityId | string | The unique identifier for the entity | + | name | string | The name of the entity | + | pictureUrl | string | s picture", | + | avatarType | Avatar Type | The type of avatar you want to display. Has two options: `rounded` and `squared` | + | variant | `EntityChipVariant` enum | Variant of the entity chip you want to display. Has two options: `regular` and `transparent` | + | LeftIcon | IconComponent | A React component representing an icon. Displayed on the left side of the chip | diff --git a/packages/twenty-docs/l/es/twenty-ui/display/icons.mdx b/packages/twenty-docs/l/es/twenty-ui/display/icons.mdx index 9e7646d32e..2d73154c8d 100644 --- a/packages/twenty-docs/l/es/twenty-ui/display/icons.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/display/icons.mdx @@ -1,20 +1,20 @@ --- -title: Iconos +title: Icons image: /images/user-guide/objects/objects.png --- - Encabezado + Header -Una lista de iconos utilizados en toda nuestra aplicación. +A list of icons used throughout our app. -## Iconos Tabler +## Tabler Icons -Usamos iconos Tabler para React en toda la aplicación. +We use Tabler icons for React throughout the app. - +
``` @@ -22,8 +22,8 @@ Usamos iconos Tabler para React en toda la aplicación. ```
- - Puede importar cada icono como un componente. Aquí hay un ejemplo: + + You can import each icon as a component. Here's an example:
@@ -36,25 +36,25 @@ Usamos iconos Tabler para React en toda la aplicación. ```
- - | Propiedades | Tipo | Descripción | Predeterminado | - | ----------- | ------ | ----------------------------------------- | -------------- | - | tamaño | número | La altura y el ancho del icono en píxeles | 24 | - | color | cadena | El color de los iconos | currentColor | - | trazo | número | El ancho del trazo del icono en píxeles | 2 | + + | Props | Type | Description | Default | + | ------ | ------ | ------------------------------------------ | ------------ | + | size | number | The height and width of the icon in pixels | 24 | + | color | string | The color of the icons | currentColor | + | stroke | number | The stroke width of the icon in pixels | 2 |
-## Iconos Personalizados +## Custom Icons -Además de los iconos Tabler, la aplicación también utiliza algunos iconos personalizados. +In addition to Tabler icons, the app also uses some custom icons. -### Icono de Libreta de Direcciones +### Icon Address Book -Muestra un icono de libreta de direcciones. +Displays an address book icon. - + ```jsx import { IconAddressBook } from 'twenty-ui/display'; @@ -64,10 +64,10 @@ Muestra un icono de libreta de direcciones. ``` - - | "Props" | Tipo | Descripción | Predeterminado | - | ------- | ------ | ----------------------------------------- | -------------- | - | tamaño | número | La altura y el ancho del icono en píxeles | 24 | - | trazo | número | El ancho del trazo del icono en píxeles | 2 | + + | Props | Type | Description | Default | + | ------ | ------ | ------------------------------------------ | ------- | + | size | number | The height and width of the icon in pixels | 24 | + | stroke | number | The stroke width of the icon in pixels | 2 | diff --git a/packages/twenty-docs/l/es/twenty-ui/display/soon-pill.mdx b/packages/twenty-docs/l/es/twenty-ui/display/soon-pill.mdx index 5c23b5b7e0..56ace0bae7 100644 --- a/packages/twenty-docs/l/es/twenty-ui/display/soon-pill.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/display/soon-pill.mdx @@ -4,7 +4,7 @@ image: /images/user-guide/kanban-views/kanban.png --- - Encabezado + Header A small badge or "pill" to indicate something is coming soon. diff --git a/packages/twenty-docs/l/es/twenty-ui/display/tag.mdx b/packages/twenty-docs/l/es/twenty-ui/display/tag.mdx index 421e926bf9..a2226c88d4 100644 --- a/packages/twenty-docs/l/es/twenty-ui/display/tag.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/display/tag.mdx @@ -1,16 +1,16 @@ --- -title: Etiqueta +title: Tag image: /images/user-guide/table-views/table.png --- - Encabezado + Header -Componente para categorizar o etiquetar contenido visualmente. +Component to visually categorize or label content. - + ```jsx import { Tag } from "@/ui/display/tag/components/Tag"; @@ -28,11 +28,11 @@ Componente para categorizar o etiquetar contenido visualmente. - | Props | Tipo | Descripción | - | ------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------- | - | nombreDeClase | cadena | Nombre opcional para estilo adicional | - | color | cadena | Color de la etiqueta. Las opciones incluyen: `verde`, `turquesa`, `cielo`, `azul`, `púrpura`, `rosa`, `rojo`, `naranja`, `amarillo`, `gris` | - | texto | cadena | El contenido de la etiqueta | - | enClic | función | Función opcional llamada cuando un usuario hace clic en la etiqueta | + | Props | Type | Description | + | --------- | -------- | --------------------------------------------------------------------------------------------------------------------------- | + | className | string | Optional name for additional styling | + | color | string | Color of the tag. Options include: `green`, `turquoise`, `sky`, `blue`, `purple`, `pink`, `red`, `orange`, `yellow`, `gray` | + | text | string | The content of the tag | + | onClick | function | Optional function called when a user clicks on the tag | diff --git a/packages/twenty-docs/l/es/twenty-ui/input.mdx b/packages/twenty-docs/l/es/twenty-ui/input.mdx index a2550d107a..2da701caf5 100644 --- a/packages/twenty-docs/l/es/twenty-ui/input.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/input.mdx @@ -1,8 +1,8 @@ --- -title: Entrada +title: Input image: /images/user-guide/tips/light-bulb.png --- - Encabezado + Header diff --git a/packages/twenty-docs/l/es/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/es/twenty-ui/input/block-editor.mdx index 2934ad9fac..9943fa5f5d 100644 --- a/packages/twenty-docs/l/es/twenty-ui/input/block-editor.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/input/block-editor.mdx @@ -1,16 +1,16 @@ --- -title: Editor de Bloques +title: Block Editor image: /images/user-guide/api/api.png --- - Encabezado + Header -Usa un editor de texto enriquecido basado en bloques de [BlockNote](https://www.blocknotejs.org/) para permitir a los usuarios editar y ver bloques de contenido. +Uses a block-based rich text editor from [BlockNote](https://www.blocknotejs.org/) to allow users to edit and view blocks of content. - + ```jsx import { useBlockNote } from "@blocknote/react"; import { BlockEditor } from "@/ui/input/editor/components/BlockEditor"; @@ -24,8 +24,8 @@ Usa un editor de texto enriquecido basado en bloques de [BlockNote](https://www. - | Props | Tipo | Descripción | - | ------ | ----------------- | -------------------------------------------------- | - | editor | `BlockNoteEditor` | La instancia o configuración del editor de bloques | + | Props | Type | Description | + | ------ | ----------------- | ------------------------------------------ | + | editor | `BlockNoteEditor` | The block editor instance or configuration | diff --git a/packages/twenty-docs/l/es/twenty-ui/input/buttons.mdx b/packages/twenty-docs/l/es/twenty-ui/input/buttons.mdx index f56538997d..1c53eb1816 100644 --- a/packages/twenty-docs/l/es/twenty-ui/input/buttons.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/input/buttons.mdx @@ -1,18 +1,18 @@ --- -title: Botones +title: Buttons image: /images/user-guide/views/filter.png --- - Encabezado + Header -Una lista de botones y grupos de botones utilizados en toda la aplicación. +A list of buttons and button groups used throughout the app. -## Botón +## Button - + ```jsx import { Button } from "@/ui/input/button/components/Button"; @@ -37,28 +37,28 @@ Una lista de botones y grupos de botones utilizados en toda la aplicación. ``` - - | "Props" | Tipo | Descripción | - | ------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------- | - | "className" | string | Nombre de clase opcional para estilos adicionales | - | Ícono | `React.ComponentType` | Un componente de ícono opcional que se muestra dentro del botón | - | título | cadena | El contenido de texto del botón | - | "fullWidth" | booleano | Define si el botón debe ocupar todo el ancho de su contenedor | - | variante | cadena | La variante de estilo visual del botón. Las opciones incluyen `primario`, `secundario` y `terciario` | - | tamaño | cadena | El tamaño del botón. Tiene dos opciones: `pequeño` y `mediano` | - | posición | cadena | La posición del botón en relación con sus compañeros. Las opciones incluyen: `independiente`, `izquierda`, `derecha` y `central` | - | acento | cadena | El color de acento del botón. Las opciones incluyen: `predeterminado`, `azul` y `peligro` | - | próximamente | booleano | Indica si el botón está marcado como "pronto" (como para funciones próximas) | - | deshabilitado | booleano | Especifica si el botón está deshabilitado o no | - | enfoque | booleano | Determina si el botón tiene foco | - | alHacerClic | función | Una función de callback que se activa cuando el usuario hace clic en el botón | + + | Props | Type | Description | + | --------- | --------------------- | -------------------------------------------------------------------------------------------------------------------- | + | className | string | Optional class name for additional styling | + | Icon | `React.ComponentType` | An optional icon component that's displayed within the button | + | title | string | The text content of the button | + | fullWidth | boolean | Defines whether the button should span the whole width of its container | + | variant | string | The visual style variant of the button. Options include `primary`, `secondary`, and `tertiary` | + | size | string | The size of the button. Has two options: `small` and `medium` | + | position | string | The position of the button in relation to its siblings. Options include: `standalone`, `left`, `right`, and `middle` | + | accent | string | The accent color of the button. Options include: `default`, `blue`, and `danger` | + | soon | boolean | Indicates if the button is marked as "soon" (such as for upcoming features) | + | disabled | boolean | Specifies whether the button is disabled or not | + | focus | boolean | Determines if the button has focus | + | onClick | function | A callback function that triggers when the user clicks on the button | -## Grupo de Botones +## Button Group - + ```jsx import { Button } from "@/ui/input/button/components/Button"; import { ButtonGroup } from "@/ui/input/button/components/ButtonGroup"; @@ -116,20 +116,20 @@ Una lista de botones y grupos de botones utilizados en toda la aplicación. - | Props | Tipo | Descripción | - | --------- | --------- | -------------------------------------------------------------------------------------------------------------------------- | - | variante | cadena | La variante de estilo visual de los botones dentro del grupo. Las opciones incluyen `primario`, `secundario` y `terciario` | - | tamaño | cadena | El tamaño de los botones dentro del grupo. Tiene dos opciones: `mediano` y `pequeño` | - | acento | cadena | El color de acento de los botones dentro del grupo. Las opciones incluyen `predeterminado`, `azul` y `peligro` | - | className | cadena | Nombre de clase opcional para estilos adicionales | - | hijos | ReactNode | Una matriz de elementos React que representan los botones individuales dentro del grupo | + | Props | Type | Description | + | --------- | --------- | ---------------------------------------------------------------------------------------------------------------- | + | variant | string | The visual style variant of the buttons within the group. Options include `primary`, `secondary`, and `tertiary` | + | size | string | The size of the buttons within the group. Has two options: `medium` and `small` | + | accent | string | The accent color of the buttons within the group. Options include `default`, `blue` and `danger` | + | className | string | Optional class name for additional styling | + | children | ReactNode | An array of React elements representing the individual buttons within the group | -## Botón Flotante +## Floating Button - + ```jsx import { FloatingButton } from "@/ui/input/button/components/FloatingButton"; import { IconSearch } from "@tabler/icons-react"; @@ -153,24 +153,24 @@ Una lista de botones y grupos de botones utilizados en toda la aplicación. - | Props | Tipo | Descripción | - | ----------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------- | - | className | cadena | Nombre opcional para estilos adicionales | - | Ícono | `React.ComponentType` | Un componente de ícono opcional que se muestra dentro del botón | - | título | cadena | El contenido de texto del botón | - | tamaño | cadena | El tamaño del botón. Tiene dos opciones: `pequeño` y `mediano` | - | posición | cadena | La posición del botón en relación con sus compañeros. Las opciones incluyen: `independiente`, `izquierda`, `central`, `derecha` | - | aplicarSombra | booleano | Determina si se aplica sombra a un botón | - | aplicarDesenfoque | booleano | Determina si se aplica un efecto de desenfoque al botón | - | deshabilitado | booleano | Determina si el botón está deshabilitado | - | enfoque | booleano | Indica si el botón tiene foco | + | Props | Type | Description | + | ----------- | --------------------- | ---------------------------------------------------------------------------------------------------------------- | + | className | string | Optional name for additional styling | + | Icon | `React.ComponentType` | An optional icon component that's displayed within the button | + | title | string | The text content of the button | + | size | string | The size of the button. Has two options: `small` and `medium` | + | position | string | The position of the button in relation to its siblings. Options include: `standalone`, `left`, `middle`, `right` | + | applyShadow | boolean | Determines whether to apply shadow to a button | + | applyBlur | boolean | Determines whether to apply a blur effect to the button | + | disabled | boolean | Determines whether the button is disabled | + | focus | boolean | Indicates if the button has focus | -## Grupo de Botones Flotantes +## Floating Button Group - + ```jsx import { FloatingButton } from "@/ui/input/button/components/FloatingButton"; import { FloatingButtonGroup } from "@/ui/input/button/components/FloatingButtonGroup"; @@ -206,18 +206,18 @@ Una lista de botones y grupos de botones utilizados en toda la aplicación. ``` - - | "Props" | Tipo | Descripción | Predeterminado | - | ------- | --------- | --------------------------------------------------------------------------------------- | -------------- | - | tamaño | cadena | El tamaño del botón. Tiene dos opciones: `pequeño` y `mediano` | pequeño | - | hijos | ReactNode | Una matriz de elementos React que representan los botones individuales dentro del grupo | | + + | Props | Type | Description | Default | + | -------- | --------- | ------------------------------------------------------------------------------- | ------- | + | size | string | The size of the button. Has two options: `small` and `medium` | small | + | children | ReactNode | An array of React elements representing the individual buttons within the group | | -## Botón de Ícono Flotante +## Floating Icon Button - + ```jsx import { FloatingIconButton } from "@/ui/input/button/components/FloatingIconButton"; import { IconSearch } from "@tabler/icons-react"; @@ -242,25 +242,25 @@ Una lista de botones y grupos de botones utilizados en toda la aplicación. - | Props | Tipo | Descripción | - | ----------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------- | - | className | cadena | "Nombre opcional para estilización adicional" | - | Ícono | `React.ComponentType` | Un componente de ícono opcional que se muestra dentro del botón | - | tamaño | cadena | El tamaño del botón. Tiene dos opciones: `pequeño` y `mediano` | - | posición | cadena | La posición del botón en relación con sus compañeros. Las opciones incluyen: `independiente`, `izquierda`, `derecha` y `central` | - | aplicarSombra | booleano | Determina si se aplica sombra a un botón | - | aplicarDesenfoque | booleano | Determina si se aplica un efecto de desenfoque al botón | - | deshabilitado | booleano | Determina si el botón está deshabilitado | - | enfoque | booleano | Indica si el botón tiene foco | - | alHacerClic | función | Una función de callback que se activa cuando el usuario hace clic en el botón | - | esActivo | booleano | Determina si el botón está en estado activo | + | Props | Type | Description | + | ----------- | --------------------- | -------------------------------------------------------------------------------------------------------------------- | + | className | string | Optional name for additional styling | + | Icon | `React.ComponentType` | An optional icon component that's displayed within the button | + | size | string | The size of the button. Has two options: `small` and `medium` | + | position | string | The position of the button in relation to its siblings. Options include: `standalone`, `left`, `right`, and `middle` | + | applyShadow | boolean | Determines whether to apply shadow to a button | + | applyBlur | boolean | Determines whether to apply a blur effect to the button | + | disabled | boolean | Determines whether the button is disabled | + | focus | boolean | Indicates if the button has focus | + | onClick | function | A callback function that triggers when the user clicks on the button | + | isActive | boolean | Determines if the button is in an active state | -## Grupo de Botones de Ícono Flotante +## Floating Icon Button Group - + ```jsx import { FloatingIconButtonGroup } from "@/ui/input/button/components/FloatingIconButtonGroup"; import { IconClipboardText, IconCheckbox } from "@tabler/icons-react"; @@ -291,18 +291,18 @@ Una lista de botones y grupos de botones utilizados en toda la aplicación. - | Props | Tipo | Descripción | - | ----------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | - | className | cadena | "Nombre opcional para estilización adicional" | - | tamaño | cadena | El tamaño del botón. Tiene dos opciones: `pequeño` y `mediano` | - | iconButtons | array | An array of objects, each representing an icon button in the group. Cada objeto debe incluir el componente de ícono que desea mostrar en el botón, la función que desea llamar cuando un usuario hace clic en el botón y si el botón debe estar activo o no. | + | Props | Type | Description | + | ----------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | className | string | Optional name for additional styling | + | size | string | The size of the button. Has two options: `small` and `medium` | + | iconButtons | array | An array of objects, each representing an icon button in the group. Each object should include the icon component you want to display in the button, the function you want to call when a user clicks on the button, and whether the button should be active or not. | -## Botón Claro +## Light Button - + ```jsx import { LightButton } from "@/ui/input/button/components/LightButton"; @@ -322,23 +322,23 @@ Una lista de botones y grupos de botones utilizados en toda la aplicación. - | Props | Tipo | Descripción | - | ------------- | ----------------- | ------------------------------------------------------------------------------- | - | className | cadena | "Nombre opcional para estilización adicional" | - | ícono | `React.ReactNode` | El ícono que desea mostrar en el botón | - | título | cadena | El contenido de texto del botón | - | acento | "cadena" | El color de acento del botón. Las opciones incluyen: `secundario` y `terciario` | - | activo | booleano | Determina si el botón está en estado activo | - | deshabilitado | booleano | Determina si el botón está deshabilitado | - | enfoque | booleano | Indica si el botón tiene foco | - | alHacerClic | función | Una función de callback que se activa cuando el usuario hace clic en el botón | + | Props | Type | Description | + | --------- | ----------------- | --------------------------------------------------------------------------- | + | className | string | Optional name for additional styling | + | icon | `React.ReactNode` | The icon you want to display in the button | + | title | string | The text content of the button | + | accent | string | The accent color of the button. Options include: `secondary` and `tertiary` | + | active | boolean | Determines if the button is in an active state | + | disabled | boolean | Determines whether the button is disabled | + | focus | boolean | Indicates if the button has focus | + | onClick | function | A callback function that triggers when the user clicks on the button | -## Botón de Ícono Claro +## Light Icon Button - + ```jsx import { LightIconButton } from "@/ui/input/button/components/LightIconButton"; import { IconSearch } from "@tabler/icons-react"; @@ -362,26 +362,26 @@ Una lista de botones y grupos de botones utilizados en toda la aplicación. ``` - - | "Props" | Tipo | Descripción | - | ------------- | --------------------- | ----------------------------------------------------------------------------- | - | "className" | cadena | "Nombre opcional para estilización adicional" | - | testId | "cadena" | Identificador de prueba para el botón | - | Ícono | `React.ComponentType` | Un componente de ícono opcional que se muestra dentro del botón | - | título | "cadena" | El contenido de texto del botón | - | tamaño | "cadena" | El tamaño del botón. Tiene dos opciones: `pequeño` y `mediano` | - | acento | "cadena" | El color de acento del botón. Opciones incluyen: `secundario` y `terciario` | - | activo | booleano | Determina si el botón está en estado activo | - | "desactivado" | booleano | Determina si el botón está deshabilitado | - | enfoque | booleano | Indica si el botón tiene foco | - | alHacerClic | función | Una función de callback que se activa cuando el usuario hace clic en el botón | + + | Props | Type | Description | + | --------- | --------------------- | --------------------------------------------------------------------------- | + | className | string | Optional name for additional styling | + | testId | string | Test identifier for the button | + | Icon | `React.ComponentType` | An optional icon component that's displayed within the button | + | title | string | The text content of the button | + | size | string | The size of the button. Has two options: `small` and `medium` | + | accent | string | The accent color of the button. Options include: `secondary` and `tertiary` | + | active | boolean | Determines if the button is in an active state | + | disabled | boolean | Determines whether the button is disabled | + | focus | boolean | Indicates if the button has focus | + | onClick | function | A callback function that triggers when the user clicks on the button | -## Botón Principal +## Main Button - + ```jsx import { MainButton } from "@/ui/input/button/components/MainButton"; import { IconCheckbox } from "@tabler/icons-react"; @@ -400,22 +400,22 @@ Una lista de botones y grupos de botones utilizados en toda la aplicación. ``` - - | Propiedades | Tipo | Descripción | - | -------------------------- | -------------------------------- | --------------------------------------------------------------------------------- | - | título | "cadena" | El contenido de texto del botón | - | anchoCompleto | booleano | Define si el botón debe abarcar todo el ancho de su contenedor | - | variante | "cadena" | La variante de estilo visual del botón. Options include `primary` and `secondary` | - | próximamente | booleano | Indica si el botón está marcado como "próximamente" (como para funciones futuras) | - | Ícono | `React.ComponentType` | Un componente de ícono opcional que se muestra dentro del botón | - | Propiedades React `button` | `React.ComponentProps<'button'>` | Se admiten todas las propiedades estándar del botón HTML | + + | Props | Type | Description | + | -------------------- | -------------------------------- | --------------------------------------------------------------------------------- | + | title | string | The text content of the button | + | fullWidth | boolean | Defines whether the button should span the whole width of its container | + | variant | string | The visual style variant of the button. Options include `primary` and `secondary` | + | soon | boolean | Indicates if the button is marked as "soon" (such as for upcoming features) | + | Icon | `React.ComponentType` | An optional icon component that's displayed within the button | + | React `button` props | `React.ComponentProps<'button'>` | All standard HTML button props are supported | -## Botón de Icono Redondeado +## Rounded Icon Button - + ```jsx import { RoundedIconButton } from "@/ui/input/button/components/RoundedIconButton"; import { IconSearch } from "@tabler/icons-react"; @@ -430,10 +430,10 @@ Una lista de botones y grupos de botones utilizados en toda la aplicación. ``` - - | "Props" | Tipo | Descripción | - | -------------------------- | ----------------------------------------------- | ----------- | - | Ícono | `React.ComponentType` | | - | Propiedades React `button` | `React.ButtonHTMLAttributes` | | + + | Props | Type | Description | + | -------------------- | ----------------------------------------------- | ----------- | + | Icon | `React.ComponentType` | | + | React `button` props | `React.ButtonHTMLAttributes` | | diff --git a/packages/twenty-docs/l/es/twenty-ui/input/checkbox.mdx b/packages/twenty-docs/l/es/twenty-ui/input/checkbox.mdx index f01ee51116..b25eeba052 100644 --- a/packages/twenty-docs/l/es/twenty-ui/input/checkbox.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/input/checkbox.mdx @@ -1,16 +1,16 @@ --- -title: Caja de selección +title: Checkbox image: /images/user-guide/tasks/tasks_header.png --- - Encabezado + Header -Usado cuando un usuario necesita seleccionar múltiples valores entre varias opciones. +Used when a user needs to select multiple values from several options. - + ```jsx import { Checkbox } from "twenty-ui/display"; @@ -19,8 +19,8 @@ Usado cuando un usuario necesita seleccionar múltiples valores entre varias opc console.log("función onChange ejecutada")} - onCheckedChange={() => console.log("función onCheckedChange ejecutada")} + onChange={() => console.log("onChange function fired")} + onCheckedChange={() => console.log("onCheckedChange function fired")} variant="primary" size="small" shape="squared" @@ -31,14 +31,14 @@ Usado cuando un usuario necesita seleccionar múltiples valores entre varias opc - | Props | Tipo | Descripción | - | --------------- | -------- | ------------------------------------------------------------------------------------------------------ | - | marcado | booleano | Indica si la caja de selección está marcada | - | indeterminado | booleano | Indica si la caja de selección está en un estado indeterminado (ni marcada ni desmarcada) | - | onChange | función | La función de devolución de llamada que desea activar cuando cambia el estado de la caja de selección | - | onCheckedChange | función | La función de devolución de llamada que desea activar cuando cambia el estado `marcado` | - | variante | cadena | La variante de estilo visual de la caja. Las opciones incluyen: `primario`, `secundario` y `terciario` | - | tamaño | cadena | El tamaño de la caja de selección. Tiene dos opciones: `pequeño` y `grande` | - | forma | cadena | La forma de la caja de selección. Tiene dos opciones: `cuadrado` y `redondeado` | + | Props | Type | Description | + | --------------- | -------- | -------------------------------------------------------------------------------------------- | + | checked | boolean | Indicates whether the checkbox is checked | + | indeterminate | boolean | Indicates whether the checkbox is in an indeterminate state (neither checked nor unchecked) | + | onChange | function | The callback function you want to trigger when the checkbox state changes | + | onCheckedChange | function | The callback function you want to trigger when the `checked` state changes | + | variant | string | The visual style variant of the box. Options include: `primary`, `secondary`, and `tertiary` | + | size | string | The size of the checkbox. Has two options: `small` and `large` | + | shape | string | The shape of the checkbox. Has two options: `squared` and `rounded` | diff --git a/packages/twenty-docs/l/es/twenty-ui/input/color-scheme.mdx b/packages/twenty-docs/l/es/twenty-ui/input/color-scheme.mdx index daedad71b2..1b1505d481 100644 --- a/packages/twenty-docs/l/es/twenty-ui/input/color-scheme.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/input/color-scheme.mdx @@ -1,18 +1,18 @@ --- -title: Esquema de colores +title: Color Scheme image: /images/user-guide/fields/field.png --- - Encabezado + Header -## Tarjeta de Esquema de Color +## Color Scheme Card -Representa diferentes esquemas de color y está diseñado especialmente para temas claros y oscuros. +Represents different color schemes and is specially tailored for light and dark themes. - + ```jsx import { ColorSchemeCard } from "twenty-ui/display"; @@ -27,21 +27,21 @@ Representa diferentes esquemas de color y está diseñado especialmente para tem ``` - - | "Props" | Tipo | Descripción | Predeterminado | - | ----------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------- | - | variante | string | La variante del esquema de color. Las opciones incluyen `Oscuro`, `Claro` y `Sistema` | claro | - | seleccionado | booleano | Si es `verdadero`, muestra una marca de verificación para indicar el esquema de color seleccionado | | - | props adicionales | `React.ComponentPropsWithoutRef<'div'>` | Props del elemento HTML estándar `div` | | + + | Props | Type | Description | Default | + | ---------------- | --------------------------------------- | ----------------------------------------------------------------------- | ------- | + | variant | string | The color scheme variant. Options include `Dark`, `Light`, and `System` | light | + | selected | boolean | If `true`, displays a checkmark to indicate the selected color scheme | | + | additional props | `React.ComponentPropsWithoutRef<'div'>` | Standard HTML `div` element props | | -## Selector de Esquema de Color +## Color Scheme Picker -Permite a los usuarios elegir entre diferentes esquemas de color. +Allows users to choose between different color schemes. - + ```jsx import { ColorSchemePicker } from "twenty-ui/display"; @@ -54,10 +54,10 @@ Permite a los usuarios elegir entre diferentes esquemas de color. ``` - - | "Props" | Tipo | Descripción | - | ---------- | -------------------- | ---------------------------------------------------------------------------- | - | valor | `Esquema de colores` | El esquema de color actualmente seleccionado | - | "onChange" | función | The callback function you want to trigger when a user selects a color scheme | + + | Props | Type | Description | + | -------- | -------------- | ---------------------------------------------------------------------------- | + | value | `Color Scheme` | The currently selected color scheme | + | onChange | function | The callback function you want to trigger when a user selects a color scheme | diff --git a/packages/twenty-docs/l/es/twenty-ui/input/icon-picker.mdx b/packages/twenty-docs/l/es/twenty-ui/input/icon-picker.mdx index d006f718e0..59d269242e 100644 --- a/packages/twenty-docs/l/es/twenty-ui/input/icon-picker.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/input/icon-picker.mdx @@ -1,16 +1,16 @@ --- -title: Selector de Íconos +title: Icon Picker image: /images/user-guide/github/github-header.png --- - Encabezado + Header -Un selector de íconos basado en un menú desplegable que permite a los usuarios seleccionar un ícono de una lista. +A dropdown-based icon picker that allows users to select an icon from a list. - + ```jsx import { RecoilRoot } from "recoil"; import React, { useState } from "react"; @@ -20,7 +20,7 @@ Un selector de íconos basado en un menú desplegable que permite a los usuarios const [selectedIcon, setSelectedIcon] = useState(""); const handleIconChange = ({ iconKey, Icon }) => { - console.log("Ícono Seleccionado:", iconKey); + console.log("Selected Icon:", iconKey); setSelectedIcon(iconKey); }; @@ -39,14 +39,14 @@ Un selector de íconos basado en un menú desplegable que permite a los usuarios - | Props | Tipo | Descripción | - | --------------- | -------- | ---------------------------------------------------------------------------------------------------------------------- | - | deshabilitado | booleano | Desactiva el selector de íconos si está configurado en `true` | - | "onChange" | función | The callback function triggered when the user selects an icon. Recibe un objeto con las propiedades `iconKey` y `Icon` | - | selectedIconKey | cadena | La clave del ícono seleccionado inicialmente | - | onClickOutside | función | Callback function triggered when the user clicks outside the dropdown | - | onClose | función | Callback function triggered when the dropdown is closed | - | onOpen | función | Callback function triggered when the dropdown is opened | - | variante | cadena | La variante de estilo visual del ícono clicable. Las opciones incluyen: `primario`, `secundario` y `terciario` | + | Props | Type | Description | + | --------------- | -------- | ------------------------------------------------------------------------------------------------------------------------- | + | disabled | boolean | Disables the icon picker if set to `true` | + | onChange | function | The callback function triggered when the user selects an icon. It receives an object with `iconKey` and `Icon` properties | + | selectedIconKey | string | The key of the initially selected icon | + | onClickOutside | function | Callback function triggered when the user clicks outside the dropdown | + | onClose | function | Callback function triggered when the dropdown is closed | + | onOpen | function | Callback function triggered when the dropdown is opened | + | variant | string | The visual style variant of the clickable icon. Options include: `primary`, `secondary`, and `tertiary` | diff --git a/packages/twenty-docs/l/es/twenty-ui/input/image-input.mdx b/packages/twenty-docs/l/es/twenty-ui/input/image-input.mdx index c06de9c4a0..0d563d7c37 100644 --- a/packages/twenty-docs/l/es/twenty-ui/input/image-input.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/input/image-input.mdx @@ -1,16 +1,16 @@ --- -title: Entrada de imagen +title: Image Input image: /images/user-guide/objects/objects.png --- - Encabezado + Header -Permite a los usuarios subir y eliminar una imagen. +Allows users to upload and remove an image. - + ```jsx import { ImageInput } from "@/ui/input/components/ImageInput"; @@ -21,14 +21,14 @@ Permite a los usuarios subir y eliminar una imagen. - | Props | Tipo | Descripción | - | ------------- | -------- | ---------------------------------------------------------------------------------------------------------- | - | foto | cadena | La URL de origen de la imagen | - | onUpload | función | La función que se llama cuando un usuario sube una nueva imagen. Recibe el objeto `File` como un parámetro | - | onRemove | función | La función que se llama cuando el usuario hace clic en el botón eliminar | - | onAbort | función | La función que se llama cuando un usuario hace clic en el botón de abortar durante la subida de imagen | - | isUploading | booleano | Indica si una imagen se está cargando actualmente | - | errorMessage | cadena | Un mensaje de error opcional para mostrar debajo de la entrada de imagen | - | "desactivado" | booleano | Si es `true`, toda la entrada está deshabilitada y los botones no son clicables | + | Props | Type | Description | + | ------------ | -------- | ------------------------------------------------------------------------------------------------- | + | picture | string | The image source URL | + | onUpload | function | The function called when a user uploads a new image. It receives the `File` object as a parameter | + | onRemove | function | The function called when the user clicks on the remove button | + | onAbort | function | The function called when a user clicks on the abort button during image upload | + | isUploading | boolean | Indicates whether an image is currently being uploaded | + | errorMessage | string | An optional error message to display below the image input | + | disabled | boolean | If `true`, the entire input is disabled, and the buttons are not clickable | diff --git a/packages/twenty-docs/l/es/twenty-ui/input/radio.mdx b/packages/twenty-docs/l/es/twenty-ui/input/radio.mdx index 3574a906aa..e6246e631f 100644 --- a/packages/twenty-docs/l/es/twenty-ui/input/radio.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/input/radio.mdx @@ -4,13 +4,13 @@ image: /images/user-guide/create-workspace/workspace-cover.png --- - Encabezado + Header -Usado cuando los usuarios solo pueden elegir una opción de una serie de opciones. +Used when users may only choose one option from a series of options. - + ```jsx import { Radio } from "twenty-ui/display"; @@ -42,26 +42,26 @@ Usado cuando los usuarios solo pueden elegir una opción de una serie de opcione - | Props | Tipo | Descripción | - | --------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------- | - | estilo | propiedades de `React.CSS` | Estilos en línea adicionales para el componente. | - | "className" | cadena | Clase CSS opcional para estilo adicional. | - | marcado | booleano | Indicates whether the radio button is checked | - | valor | cadena | La etiqueta o texto asociado con el botón de opción. | - | "onChange" | función | La función que se llama cuando se cambia el botón de opción seleccionado. | - | onCheckedChange | función | La función que se llama cuando el estado de `seleccionado` del botón de opción cambia. | - | tamaño | cadena | El tamaño del botón de opción. Las opciones incluyen: `grande` y `pequeño`. | - | "desactivado" | booleano | Si es `verdadero`, el botón de opción está deshabilitado y no se puede hacer clic. | - | labelPosition | cadena | La posición del texto de la etiqueta en relación con el botón de opción. Tiene dos opciones: `izquierda` y `derecha`. | + | Props | Type | Description | + | --------------- | ---------------------- | ------------------------------------------------------------------------------------------------ | + | style | `React.CSS` properties | Additional inline styles for the component | + | className | string | Optional CSS class for additional styling | + | checked | boolean | Indicates whether the radio button is checked | + | value | string | The label or text associated with the radio button | + | onChange | function | The function called when the selected radio button is changed | + | onCheckedChange | function | The function called when the `checked` state of the radio button changes | + | size | string | The size of the radio button. Options include: `large` and `small` | + | disabled | boolean | If `true`, the radio button is disabled and not clickable | + | labelPosition | string | The position of the label text relative to the radio button. Has two options: `left` and `right` | -## Grupo de Radio +## Radio Group -Agrupa botones de opción relacionados. +Groups together related radio buttons. - + ```jsx import React, { useState } from "react"; import { Radio, RadioGroup } from "twenty-ui/display"; @@ -87,11 +87,11 @@ Agrupa botones de opción relacionados. - | Props | Tipo | Descripción | - | --------------- | ----------------- | ----------------------------------------------------------------------------------------------------- | - | valor | cadena | El valor del botón de opción seleccionado actualmente. | - | "onChange" | función | La función de devolución de llamada que se activa cuando se cambia el botón de opción. | - | alCambioDeValor | función | La función de devolución de llamada que se activa cuando se cambia el valor seleccionado en el grupo. | - | hijos | `React.ReactNode` | Allows you to pass React components (such as Radio) as children to the Radio Group | + | Props | Type | Description | + | ------------- | ----------------- | ---------------------------------------------------------------------------------- | + | value | string | The value of the currently selected radio button | + | onChange | function | The callback function triggered when the radio button is changed | + | onValueChange | function | The callback function triggered when the selected value in the group changes. | + | children | `React.ReactNode` | Allows you to pass React components (such as Radio) as children to the Radio Group | diff --git a/packages/twenty-docs/l/es/twenty-ui/input/select.mdx b/packages/twenty-docs/l/es/twenty-ui/input/select.mdx index 541050eaad..d685bf4012 100644 --- a/packages/twenty-docs/l/es/twenty-ui/input/select.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/input/select.mdx @@ -1,16 +1,16 @@ --- -title: Seleccionar +title: Select image: /images/user-guide/what-is-twenty/20.png --- - Encabezado + Header -Permite a los usuarios seleccionar un valor de una lista de opciones predefinidas. +Allows users to pick a value from a list of predefined options. - + ```jsx import { RecoilRoot } from 'recoil'; import { IconTwentyStar } from 'twenty-ui/display'; @@ -39,13 +39,13 @@ Permite a los usuarios seleccionar un valor de una lista de opciones predefinida - | Props | Tipo | Descripción | - | ------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | nombreDeClase | cadena | Clase CSS opcional para estilo adicional | - | "desactivado" | booleano | Cuando se establece en `true`, desactiva la interacción del usuario con el componente | - | etiqueta | cadena | La etiqueta para describir el propósito del componente `Seleccionar` | - | "onChange" | función | La función que se llama cuando los valores seleccionados cambian | - | opciones | array | Represents the options available for the `Selected` component. Es un arreglo de objetos donde cada objeto tiene un `valor` (el identificador único), `etiqueta` (el identificador único), y un `Icono` opcional | - | valor | cadena | Representa el valor actualmente seleccionado. Debe coincidir con una de las propiedades `valor` en el arreglo de `opciones`. | + | Props | Type | Description | + | --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | className | string | Optional CSS class for additional styling | + | disabled | boolean | When set to `true`, disables user interaction with the component | + | label | string | The label to describe the purpose of the `Select` component | + | onChange | function | The function called when the selected values change | + | options | array | Represents the options available for the `Selected` component. It's an array of objects where each object has a `value` (the unique identifier), `label` (the unique identifier), and an optional `Icon` | + | value | string | Represents the currently selected value. It should match one of the `value` properties in the `options` array | diff --git a/packages/twenty-docs/l/es/twenty-ui/input/text.mdx b/packages/twenty-docs/l/es/twenty-ui/input/text.mdx index bf03046bf1..8cad1352ae 100644 --- a/packages/twenty-docs/l/es/twenty-ui/input/text.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/input/text.mdx @@ -1,18 +1,18 @@ --- -title: Texto -image: '"/images/user-guide/notes/notes_header.png"' +title: Text +image: /images/user-guide/notes/notes_header.png --- - Encabezado + Header -## "Entrada de Texto" +## Text Input -"Permite a los usuarios ingresar y editar texto." +Allows users to enter and edit text. - + ```jsx import { RecoilRoot } from "recoil"; import { TextInput } from "@/ui/input/components/TextInput"; @@ -45,28 +45,28 @@ image: '"/images/user-guide/notes/notes_header.png"' ``` - - | "Props" | Tipo | Descripción | - | -------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | - | "className" | string | "Nombre opcional para estilización adicional" | - | etiqueta | string | "Representa la etiqueta para la entrada" | - | "onChange" | "función" | "La función que se llama cuando el valor de entrada cambia" | - | "fullWidth" | booleano | "Indica si la entrada debe ocupar el 100% del ancho" | - | disableHotkeys | booleano | "Indica si las teclas rápidas están habilitadas para la entrada" | - | error | cadena | "Representa el mensaje de error que se mostrará." "Cuando se proporciona, también se añade un icono de error en el lado derecho de la entrada" | - | "onKeyDown" | "función" | "Se llama cuando se presiona una tecla mientras el campo de entrada está enfocado." "Recibe un `React.KeyboardEvent` como argumento" | - | RightIcon | "ComponenteIcono" | "Un componente opcional de icono que se muestra en el lado derecho de la entrada" | + + | Props | Type | Description | + | -------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------- | + | className | string | Optional name for additional styling | + | label | string | Represents the label for the input | + | onChange | function | The function called when the input value changes | + | fullWidth | boolean | Indicates whether the input should take up 100% of the width | + | disableHotkeys | boolean | Indicates whether hotkeys are enabled for the input | + | error | string | Represents the error message to be displayed. When provided, it also adds an icon error on the right side of the input | + | onKeyDown | function | Called when a key is pressed down while the input field is focused. Receives a `React.KeyboardEvent` as an argument | + | RightIcon | IconComponent | An optional icon component displayed on the right side of the input | - "El componente también acepta otras props de elementos de entrada HTML." + The component also accepts other HTML input element props. -## "Entrada de Texto que se ajusta automáticamente" +## Autosize Text Input -"Componente de entrada de texto que ajusta automáticamente su altura según el contenido." +Text input component that automatically adjusts its height based on the content. - + ```jsx import { RecoilRoot } from "recoil"; import { AutosizeTextInput } from "@/ui/input/components/AutosizeTextInput"; @@ -89,25 +89,25 @@ image: '"/images/user-guide/notes/notes_header.png"' ``` - - | "Props" | Tipo | Descripción | - | -------------------- | --------- | ---------------------------------------------------------------------------------------- | - | "onValidate" | "función" | The callback function you want to trigger when the user validates the input | - | minRows | número | "El número mínimo de filas para el área de texto" | - | marcador de posición | "cadena" | "El texto de marcador de posición que deseas mostrar cuando el área de texto está vacía" | - | onFocus | "función" | "La función de retorno que deseas activar cuando el área de texto gana el foco" | - | variante | "cadena" | "La variante de la entrada." "Las opciones incluyen: `default`, `icon`, y `button`" | - | buttonTitle | "cadena" | "El título para el botón (solo aplicable para la variante de botón)" | - | valor | "cadena" | "El valor inicial para el área de texto" | + + | Props | Type | Description | + | ----------- | -------- | --------------------------------------------------------------------------- | + | onValidate | function | The callback function you want to trigger when the user validates the input | + | minRows | number | The minimum number of rows for the text area | + | placeholder | string | The placeholder text you want to display when the text area is empty | + | onFocus | function | The callback function you want to trigger when the text area gains focus | + | variant | string | The variant of the input. Options include: `default`, `icon`, and `button` | + | buttonTitle | string | The title for the button (only applicable for the button variant) | + | value | string | The initial value for the text area | -## "Área de Texto" +## Text Area -"Te permite crear entradas de texto de varias líneas." +Allows you to create multi-line text inputs. - + ```jsx import { TextArea } from "@/ui/input/components/TextArea"; @@ -125,13 +125,13 @@ image: '"/images/user-guide/notes/notes_header.png"' ``` - - | "Props" | Tipo | Descripción | - | -------------------- | --------- | --------------------------------------------------------------------------- | - | "desactivado" | booleano | "Indica si el área de texto está desactivada" | - | minRows | número | "Número mínimo de filas visibles para el área de texto." | - | "onChange" | "función" | Función de llamada activada cuando cambia el contenido del área de texto. | - | marcador de posición | cadena | Texto del marcador de posición mostrado cuando el área de texto está vacía. | - | valor | cadena | El valor actual del área de texto. | + + | Props | Type | Description | + | ----------- | -------- | -------------------------------------------------------------- | + | disabled | boolean | Indicates whether the text area is disabled | + | minRows | number | Minimum number of visible rows for the text area. | + | onChange | function | Callback function triggered when the text area content changes | + | placeholder | string | Placeholder text displayed when the text area is empty | + | value | string | The current value of the text area | diff --git a/packages/twenty-docs/l/es/twenty-ui/input/toggle.mdx b/packages/twenty-docs/l/es/twenty-ui/input/toggle.mdx index 26abf5b35b..39f1645abd 100644 --- a/packages/twenty-docs/l/es/twenty-ui/input/toggle.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/input/toggle.mdx @@ -1,14 +1,14 @@ --- -title: Cambiar +title: Toggle image: /images/user-guide/table-views/table.png --- - Encabezado + Header - + ```jsx import { Toggle } from "twenty-ui/input"; @@ -25,12 +25,12 @@ image: /images/user-guide/table-views/table.png ``` - - | "Props" | Tipo | Descripción | Predeterminado | - | --------------- | -------- | ----------------------------------------------------------------------------------------------- | -------------- | - | valor | booleano | The current state of the toggle | `falso` | - | "onChange" | función | Callback function triggered when the toggle state changes | | - | color | cadena | Color of the toggle when it\ | s blue color | - | tamañoConmutado | cadena | Size of the toggle, affecting both height and weight. Tiene dos opciones: `pequeño` y `mediano` | mediano | + + | Props | Type | Description | Default | + | ---------- | -------- | ------------------------------------------------------------------------------------------- | ------------ | + | value | boolean | The current state of the toggle | `false` | + | onChange | function | Callback function triggered when the toggle state changes | | + | color | string | Color of the toggle when it\ | s blue color | + | toggleSize | string | Size of the toggle, affecting both height and weight. Has two options: `small` and `medium` | medium | diff --git a/packages/twenty-docs/l/es/twenty-ui/introduction.mdx b/packages/twenty-docs/l/es/twenty-ui/introduction.mdx index 26fa6a0704..bb7bec7ea8 100644 --- a/packages/twenty-docs/l/es/twenty-ui/introduction.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/introduction.mdx @@ -1,11 +1,11 @@ --- -title: Resumen -description: Biblioteca de componentes para Twenty CRM +title: Overview +description: Component library for Twenty CRM --- import { CardTitle } from "/snippets/card-title.mdx" -## Componentes +## Components diff --git a/packages/twenty-docs/l/es/twenty-ui/navigation.mdx b/packages/twenty-docs/l/es/twenty-ui/navigation.mdx index d604ffba0c..b17dad4220 100644 --- a/packages/twenty-docs/l/es/twenty-ui/navigation.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/navigation.mdx @@ -1,8 +1,8 @@ --- -title: Navegación +title: Navigation image: /images/user-guide/tasks/tasks_header.png --- - Encabezado + Header diff --git a/packages/twenty-docs/l/es/twenty-ui/navigation/breadcrumb.mdx b/packages/twenty-docs/l/es/twenty-ui/navigation/breadcrumb.mdx index bf908a95df..aadbee8ee4 100644 --- a/packages/twenty-docs/l/es/twenty-ui/navigation/breadcrumb.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/navigation/breadcrumb.mdx @@ -1,26 +1,26 @@ --- -title: Migaja de pan +title: Breadcrumb image: /images/user-guide/fields/field.png --- - Encabezado + Header -Renderiza una barra de navegación de migas de pan. +Renders a breadcrumb navigation bar. - + ```jsx import { BrowserRouter } from "react-router-dom"; import { Breadcrumb } from "@/ui/navigation/bread-crumb/components/Breadcrumb"; export const MyComponent = () => { const breadcrumbLinks = [ - { children: "Inicio", href: "/" }, - { children: "Categoría", href: "/category" }, - { children: "Subcategoría", href: "/category/subcategory" }, - { children: "Página Actual" }, + { children: "Home", href: "/" }, + { children: "Category", href: "/category" }, + { children: "Subcategory", href: "/category/subcategory" }, + { children: "Current Page" }, ]; return ( @@ -33,9 +33,9 @@ Renderiza una barra de navegación de migas de pan. - | Props | Tipo | Descripción | - | ------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | nombreDeClase | cadena | Nombre de clase opcional para estilos adicionales | - | enlaces | matriz | An array of objects, each representing a breadcrumb link. Cada objeto tiene una propiedad `children` (el contenido de texto del enlace) y una propiedad `href` opcional (la URL a la que navegar cuando se hace clic en el enlace) | + | Props | Type | Description | + | --------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | className | string | Optional class name for additional styling | + | links | array | An array of objects, each representing a breadcrumb link. Each object has a `children` property (the text content of the link) and an optional `href` property (the URL to navigate to when the link is clicked) | diff --git a/packages/twenty-docs/l/es/twenty-ui/navigation/links.mdx b/packages/twenty-docs/l/es/twenty-ui/navigation/links.mdx index 03e007339a..e9f7e3d80f 100644 --- a/packages/twenty-docs/l/es/twenty-ui/navigation/links.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/navigation/links.mdx @@ -1,18 +1,18 @@ --- -title: Enlaces +title: Links image: /images/user-guide/what-is-twenty/20.png --- - Encabezado + Header -## Enlace de Contacto +## Contact Link -Un componente de enlace estilizado para mostrar información de contacto. +A stylized link component for displaying contact information. - + ```jsx import { BrowserRouter as Router } from 'react-router-dom'; @@ -20,7 +20,7 @@ Un componente de enlace estilizado para mostrar información de contacto. export const MyComponent = () => { const handleLinkClick = (event) => { - console.log('¡Enlace de contacto pulsado!', event); + console.log('Contact link clicked!', event); }; return ( @@ -38,71 +38,72 @@ Un componente de enlace estilizado para mostrar información de contacto. ``` - - | "Props" | Tipo | Descripción | - | ----------- | ----------------- | ------------------------------------------------------------------------------- | - | "className" | string | "Nombre opcional para estilización adicional" | - | href | string | La URL o ruta objetivo del enlace | - | onClick | "función" | Función de devolución de llamada que se activa cuando se hace clic en el enlace | - | hijos | `React.ReactNode` | El contenido que se mostrará dentro del enlace | + + | Props | Type | Description | + | --------- | ----------------- | ---------------------------------------------------------- | + | className | string | Optional name for additional styling | + | href | string | The target URL or path for the link | + | onClick | function | Callback function to be triggered when the link is clicked | + | children | `React.ReactNode` | The content to be displayed inside the link | -## Enlace Sin Estilo +## Raw Link -Un componente de enlace estilizado para mostrar enlaces. +A stylized link component for displaying links. - + ```jsx import { RawLink } from "/navigation"; import { BrowserRouter as Router } from "react-router-dom"; export const MyComponent = () => { const handleLinkClick = (event) => { - console.log("¡Enlace de contacto pulsado!", event); + console.log("Contact link clicked!", event); }; return ( - Contáctanos + Contact Us ); }; + ``` - - | "Props" | Tipo | Descripción | - | ------------- | ----------------- | ------------------------------------------------------------------------------- | - | nombreDeClase | string | Nombre opcional para estilo adicional | - | href | string | La URL o ruta objetivo del enlace | - | onClick | función | Función de devolución de llamada que se activa cuando se hace clic en el enlace | - | hijos | `React.ReactNode` | El contenido que se mostrará dentro del enlace | + + | Props | Type | Description | + | --------- | ----------------- | ---------------------------------------------------------- | + | className | string | Optional name for additional styling | + | href | string | The target URL or path for the link | + | onClick | function | Callback function to be triggered when the link is clicked | + | children | `React.ReactNode` | The content to be displayed inside the link | -## Enlace Redondeado +## Rounded Link -Un enlace de estilo redondeado con un componente Chip para enlaces. +A rounded-styled link with a Chip component for links. - + ```jsx import { RoundedLink } from "/navigation"; import { BrowserRouter as Router } from "react-router-dom"; export const MyComponent = () => { const handleLinkClick = (event) => { - console.log("¡Enlace de contacto pulsado!", event); + console.log("Contact link clicked!", event); }; return ( - Contáctanos + Contact Us ); @@ -110,21 +111,21 @@ Un enlace de estilo redondeado con un componente Chip para enlaces. ``` - - | "Props" | Tipo | Descripción | - | ------- | ----------------- | ------------------------------------------------------------------------------- | - | href | cadena | La URL o ruta objetivo del enlace | - | hijos | `React.ReactNode` | El contenido que se mostrará dentro del enlace | - | onClick | "función" | Función de devolución de llamada que se activa cuando se hace clic en el enlace | + + | Props | Type | Description | + | -------- | ----------------- | ---------------------------------------------------------- | + | href | string | The target URL or path for the link | + | children | `React.ReactNode` | The content to be displayed inside the link | + | onClick | function | Callback function to be triggered when the link is clicked | -## Enlace Social +## Social Link -Enlaces sociales estilizados, con soporte para varios tipos de enlaces sociales, como URLs, LinkedIn y X (o Twitter). +Stylized social links, with support for various social link types, such as URLs, LinkedIn, and X (or Twitter). - + ```jsx import { SocialLink } from "twenty-ui/navigation"; import { BrowserRouter as Router } from "react-router-dom"; @@ -143,11 +144,11 @@ Enlaces sociales estilizados, con soporte para varios tipos de enlaces sociales, - | Props | Tipo | Descripción | - | ------- | ----------------- | ---------------------------------------------------------------------------------- | - | href | string | La URL o ruta objetivo del enlace | - | hijos | `React.ReactNode` | El contenido que se mostrará dentro del enlace | - | tipo | string | El tipo de enlaces sociales. Las opciones incluyen: `url`, `LinkedIn`, y `Twitter` | - | onClick | función | Función de devolución de llamada que se activa cuando se hace clic en el enlace | + | Props | Type | Description | + | -------- | ----------------- | --------------------------------------------------------------------------- | + | href | string | The target URL or path for the link | + | children | `React.ReactNode` | The content to be displayed inside the link | + | type | string | The type of social links. Options include: `url`, `LinkedIn`, and `Twitter` | + | onClick | function | Callback function to be triggered when the link is clicked | diff --git a/packages/twenty-docs/l/es/twenty-ui/navigation/menu-item.mdx b/packages/twenty-docs/l/es/twenty-ui/navigation/menu-item.mdx index a8aafdc7d5..209c6270ea 100644 --- a/packages/twenty-docs/l/es/twenty-ui/navigation/menu-item.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/navigation/menu-item.mdx @@ -1,16 +1,16 @@ --- -title: Elemento del menú +title: Menu Item image: /images/user-guide/kanban-views/kanban.png --- - Encabezado + Header -Un elemento de menú versátil diseñado para ser utilizado en un menú o lista de navegación. +A versatile menu item designed to be used in a menu or navigation list. - + ```jsx import { IconBell } from "@tabler/icons-react"; import { IconAlertCircle } from "@tabler/icons-react"; @@ -18,18 +18,18 @@ Un elemento de menú versátil diseñado para ser utilizado en un menú o lista export const MyComponent = () => { const handleMenuItemClick = (event) => { - console.log("¡Elemento de menú clicado!", event); + console.log("Menu item clicked!", event); }; const handleButtonClick = (event) => { - console.log("¡Botón de icono clicado!", event); + console.log("Icon button clicked!", event); }; return ( - | Props | Tipo | Descripción | - | -------------- | ----------------- | --------------------------------------------------------------------------------------------------------------- | - | IconoIzquierdo | "ComponenteIcono" | Un icono izquierdo opcional que se muestra antes del texto en el elemento de menú | - | acento | cadena | Especifica el color de acento del elemento de menú. Las opciones incluyen: `default`, `danger`, y `placeholder` | - | texto | cadena | El contenido de texto del elemento de menú | - | iconButtons | array | An array of objects representing additional icon buttons associated with the menu item | - | isToolTipOpen | booleano | Controls the visibility of the tooltip associated with the menu item | - | testId | cadena | El atributo data-testid para propósitos de prueba | - | alHacerClic | función | Callback function triggered when the menu item is clicked | - | nombreDeClase | cadena | Nombre opcional para el estilo adicional | + | Props | Type | Description | + | ------------- | ------------- | ---------------------------------------------------------------------------------------------------- | + | LeftIcon | IconComponent | An optional left icon displayed before the text in the menu item | + | accent | string | Specifies the accent color of the menu item. Options include: `default`, `danger`, and `placeholder` | + | text | string | The text content of the menu item | + | iconButtons | array | An array of objects representing additional icon buttons associated with the menu item | + | isTooltipOpen | boolean | Controls the visibility of the tooltip associated with the menu item | + | testId | string | The data-testid attribute for testing purposes | + | onClick | function | Callback function triggered when the menu item is clicked | + | className | string | Optional name for additional styling | -## Variantes +## Variants -Las diferentes variantes del componente de elemento de menú incluyen las siguientes: +The different variants of the menu item component include the following: -### Comando +### Command -Un elemento de menú estilo comando en un menú para indicar atajos de teclado. +A command-style menu item within a menu to indicate keyboard shortcuts. - + ```jsx import { IconBell } from "@tabler/icons-react"; import { MenuItemCommand } from "twenty-ui/display"; - export const MiComponente = () => { - const manejarClicDeComando = () => { - console.log("¡Comando clicado!"); + export const MyComponent = () => { + const handleCommandClick = () => { + console.log("Command clicked!"); }; return ( ); @@ -90,32 +90,32 @@ Un elemento de menú estilo comando en un menú para indicar atajos de teclado. - | Props | Tipo | Descripción | - | -------------- | ------------- | ---------------------------------------------------------------------------------- | - | IconoIzquierdo | IconComponent | Un icono izquierdo opcional que se muestra antes del texto en el elemento del menú | - | texto | "cadena" | El contenido de texto del elemento del menú | - | firstHotKey | cadena | El primer atajo de teclado asociado con el comando | - | secondHotKey | cadena | El segundo atajo de teclado asociado con el comando | - | isSelected | booleano | Indica si el elemento del menú está seleccionado o resaltado | - | alHacerClic | función | Callback function triggered when the menu item is clicked | - | nombreDeClase | cadena | Nombre opcional para estilo adicional | + | Props | Type | Description | + | ------------ | ------------- | ---------------------------------------------------------------- | + | LeftIcon | IconComponent | An optional left icon displayed before the text in the menu item | + | text | string | The text content of the menu item | + | firstHotKey | string | The first keyboard shortcut associated with the command | + | secondHotKey | string | The second keyboard shortcut associated with the command | + | isSelected | boolean | Indicates whether the menu item is selected or highlighted | + | onClick | function | Callback function triggered when the menu item is clicked | + | className | string | Optional name for additional styling | ### Draggable -Un componente de elemento de menú arrastrable diseñado para ser utilizado en un menú o lista donde los elementos se pueden arrastrar y se pueden realizar acciones adicionales a través de botones de iconos. +A draggable menu item component designed to be used in a menu or list where items can be dragged, and additional actions can be performed through icon buttons. - + ```jsx import { IconBell } from "@tabler/icons-react"; import { IconAlertCircle } from "@tabler/icons-react"; import { MenuItemDraggable } from "twenty-ui/display"; - export const MiComponente = () => { - const manejarClicDeElementoDeMenú = (event) => { - console.log("¡Elemento del menú clicado!", event); + export const MyComponent = () => { + const handleMenuItemClick = (event) => { + console.log("Menu item clicked!", event); }; return ( @@ -124,8 +124,8 @@ Un componente de elemento de menú arrastrable diseñado para ser utilizado en u accent="default" iconButtons={[{ Icon: IconAlertCircle, onClick: handleButtonClick }]} isTooltipOpen={false} - onClick={manejarClicDeElementoDeMenú} - text="Elemento del menú arrastrable" + onClick={handleMenuItemClick} + text="Menu item draggable" isDragDisabled={false} className /> @@ -134,36 +134,36 @@ Un componente de elemento de menú arrastrable diseñado para ser utilizado en u ``` - - | Propiedades | Tipo | Descripción | - | -------------- | ------------- | --------------------------------------------------------------------------------------- | - | IconoIzquierdo | IconComponent | Un icono izquierdo opcional que se muestra antes del texto en el elemento del menú | - | accent | cadena | El color de acento del elemento del menú. Puede ser `default`, `placeholder` y `danger` | - | iconButtons | matriz | An array of objects representing additional icon buttons associated with the menu item | - | isTooltipOpen | booleano | Controls the visibility of the tooltip associated with the menu item | - | alHacerClic | función | Función de devolución de llamada para activar cuando se haga clic en el enlace | - | texto | cadena | El contenido de texto del elemento del menú | - | isDragDisabled | booleano | Indica si el arrastre está desactivado | - | nombreDeClase | cadena | Nombre opcional para estilo adicional | + + | Props | Type | Description | + | -------------- | ------------- | ------------------------------------------------------------------------------------------ | + | LeftIcon | IconComponent | An optional left icon displayed before the text in the menu item | + | accent | string | The accent color of the menu item. It can either be `default`, `placeholder`, and `danger` | + | iconButtons | array | An array of objects representing additional icon buttons associated with the menu item | + | isTooltipOpen | boolean | Controls the visibility of the tooltip associated with the menu item | + | onClick | function | Callback function to be triggered when the link is clicked | + | text | string | The text content of the menu item | + | isDragDisabled | boolean | Indicates whether dragging is disabled | + | className | string | Optional name for additional styling | -### Multi Selección +### Multi Select -Proporciona una manera para implementar la funcionalidad de selección múltiple con una casilla de verificación asociada. +Provides a way to implement multi-select functionality with an associated checkbox. - + ```jsx import { IconBell } from "@tabler/icons-react"; import { MenuItemMultiSelect } from "twenty-ui/display"; - export const MiComponente = () => { + export const MyComponent = () => { return ( @@ -173,33 +173,33 @@ Proporciona una manera para implementar la funcionalidad de selección múltiple - | Props | Tipo | Descripción | - | -------------- | ------------- | ----------------------------------------------------------------------------------------------- | - | LeftIcon | IconComponent | Un icono opcional a la izquierda mostrado antes del texto en el elemento del menú | - | texto | cadena | El contenido de texto del elemento del menú | - | selected | booleano | Indica si el elemento del menú está seleccionado (marcado) | - | onSelectChange | función | Función de devolución de llamada activada cuando el estado de la casilla de verificación cambia | - | nombreDeClase | cadena | Nombre opcional para estilo adicional | + | Props | Type | Description | + | -------------- | ------------- | ---------------------------------------------------------------- | + | LeftIcon | IconComponent | An optional left icon displayed before the text in the menu item | + | text | string | The text content of the menu item | + | selected | boolean | Indicates whether the menu item is selected (checked) | + | onSelectChange | function | Callback function triggered when the checkbox state changes | + | className | string | Optional name for additional styling | -### Multi Selección con Avatar +### Multi Select Avatar -Un elemento de menú de selección múltiple con un avatar, una casilla para selección y contenido textual. +A multi-select menu item with an avatar, a checkbox for selection, and textual content. - + ```jsx import { MenuItemMultiSelectAvatar } from "twenty-ui/display"; - export const MiComponente = () => { + export const MyComponent = () => { const imageUrl = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k="; return ( } - text="Primera Opción" + text="First Option" selected={false} className /> @@ -208,37 +208,37 @@ Un elemento de menú de selección múltiple con un avatar, una casilla para sel ``` - - | Propiedades | Tipo | Descripción | - | -------------- | ----------- | ----------------------------------------------------------------------------------------------- | - | avatar | `ReactNode` | El avatar o icono que se mostrará en el lado izquierdo del elemento del menú | - | texto | cadena | El contenido de texto del elemento del menú | - | selected | booleano | Indica si el elemento del menú está seleccionado (marcado) | - | onSelectChange | función | Función de devolución de llamada activada cuando el estado de la casilla de verificación cambia | - | nombreDeClase | cadena | Nombre opcional para estilo adicional | + + | Props | Type | Description | + | -------------- | ----------- | -------------------------------------------------------------------- | + | avatar | `ReactNode` | The avatar or icon to be displayed on the left side of the menu item | + | text | string | The text content of the menu item | + | selected | boolean | Indicates whether the menu item is selected (checked) | + | onSelectChange | function | Callback function triggered when the checkbox state changes | + | className | string | Optional name for additional styling | -### Navegar +### Navigate -Un elemento de menú que presenta un icono opcional a la izquierda, contenido textual y un icono de chevron a la derecha. +A menu item featuring an optional left icon, textual content, and a right-chevron icon. - + ```jsx import { IconBell } from "@tabler/icons-react"; import { MenuItemNavigate } from "twenty-ui/display"; - export const MiComponente = () => { - const manejarNavegación = () => { - console.log("Navegar a otra página"); + export const MyComponent = () => { + const handleNavigation = () => { + console.log("Navigate to another page"); }; return ( ); @@ -246,39 +246,39 @@ Un elemento de menú que presenta un icono opcional a la izquierda, contenido te ``` - - | Propiedades | Tipo | Descripción | - | ------------- | ------------- | ---------------------------------------------------------------------------------------------- | - | LeftIcon | IconComponent | Un icono opcional a la izquierda mostrado antes del texto en el elemento del menú | - | texto | cadena | El contenido de texto del elemento del menú | - | enClic | función | Función de devolución de llamada para ser activada cuando se haga clic en el elemento del menú | - | nombreDeClase | cadena | Nombre opcional para estilo adicional | + + | Props | Type | Description | + | --------- | ------------- | ---------------------------------------------------------------- | + | LeftIcon | IconComponent | An optional left icon displayed before the text in the menu item | + | text | string | The text content of the menu item | + | onClick | function | Callback function to be triggered when the menu item is clicked | + | className | string | Optional name for additional styling | -### Seleccionar +### Select -Un elemento de menú seleccionable, que presenta contenido opcional a la izquierda (icono y texto) y un indicador (icono de verificación) para el estado seleccionado. +A selectable menu item, featuring optional left content (icon and text) and an indicator (check icon) for the selected state. - + ```jsx import { IconBell } from "@tabler/icons-react"; import { MenuItemSelect } from "twenty-ui/display"; - export const MiComponente = () => { - const manejarSelección = () => { - console.log("Elemento del menú seleccionado"); + export const MyComponent = () => { + const handleSelection = () => { + console.log("Menu item selected"); }; return ( ); @@ -286,25 +286,25 @@ Un elemento de menú seleccionable, que presenta contenido opcional a la izquier ``` - - | Propiedades | Tipo | Descripción | - | ------------- | ------------- | ---------------------------------------------------------------------------------------------- | - | LeftIcon | IconComponent | Un icono opcional a la izquierda mostrado antes del texto en el elemento del menú | - | texto | cadena | El contenido de texto del elemento del menú | - | selected | booleano | Indica si el elemento del menú está seleccionado (marcado) | - | disabled | booleano | Indica si el elemento del menú está desactivado | - | hovered | booleano | Indica si el elemento del menú está actualmente siendo sobrevolado | - | enClic | función | Función de devolución de llamada para ser activada cuando se haga clic en el elemento del menú | - | nombreDeClase | cadena | Nombre opcional para estilo adicional | + + | Props | Type | Description | + | --------- | ------------- | ---------------------------------------------------------------- | + | LeftIcon | IconComponent | An optional left icon displayed before the text in the menu item | + | text | string | The text content of the menu item | + | selected | boolean | Indicates whether the menu item is selected (checked) | + | disabled | boolean | Indicates whether the menu item is disabled | + | hovered | boolean | Indicates whether the menu item is currently being hovered over | + | onClick | function | Callback function to be triggered when the menu item is clicked | + | className | string | Optional name for additional styling | ### Select Avatar -Un elemento de menú seleccionable con un avatar, que presenta contenido opcional a la izquierda (avatar y texto) y un indicador (icono de verificación) para el estado seleccionado. +A selectable menu item with an avatar, featuring optional left content (avatar and text) and an indicator (check icon) for the selected state. - + ```jsx import { MenuItemSelectAvatar } from "twenty-ui/display"; @@ -313,13 +313,13 @@ Un elemento de menú seleccionable con un avatar, que presenta contenido opciona "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k="; const handleSelection = () => { - console.log("Elemento de menú seleccionado"); + console.log("Menu item selected"); }; return ( } - text="Primera Opción" + text="First Option" selected={true} disabled={false} hovered={false} @@ -333,37 +333,37 @@ Un elemento de menú seleccionable con un avatar, que presenta contenido opciona ``` - - | Propiedades | Tipo | Descripción | - | ------------- | ----------- | ------------------------------------------------------------------------------ | - | avatar | `ReactNode` | El avatar o icono que se mostrará en el lado izquierdo del elemento del menú | - | texto | cadena | El contenido de texto del elemento del menú | - | seleccionado | booleano | Indica si el elemento del menú está seleccionado (marcado) | - | deshabilitado | booleano | Indica si el elemento del menú está deshabilitado | - | hovered | booleano | Indica si el elemento del menú está actualmente siendo sobrevolado | - | idPrueba | cadena | El atributo data-testid para propósitos de prueba | - | enClic | función | Función de retorno que se activará cuando se haga clic en el elemento del menú | - | nombreDeClase | cadena | Nombre opcional para estilo adicional | + + | Props | Type | Description | + | --------- | ----------- | -------------------------------------------------------------------- | + | avatar | `ReactNode` | The avatar or icon to be displayed on the left side of the menu item | + | text | string | The text content of the menu item | + | selected | boolean | Indicates whether the menu item is selected (checked) | + | disabled | boolean | Indicates whether the menu item is disabled | + | hovered | boolean | Indicates whether the menu item is currently being hovered over | + | testId | string | The data-testid attribute for testing purposes | + | onClick | function | Callback function to be triggered when the menu item is clicked | + | className | string | Optional name for additional styling | -### Seleccionar Color +### Select Color -Un elemento de menú seleccionable con una muestra de color para situaciones donde se desea que los usuarios elijan un color del menú. +A selectable menu item with a color sample for scenarios where you want users to choose a color from a menu. - + ```jsx - import { MenuItemSelectColor } desde "twenty-ui/display"; + import { MenuItemSelectColor } from "twenty-ui/display"; export const MyComponent = () => { const handleSelection = () => { - console.log("Elemento de menú seleccionado"); + console.log("Menu item selected"); }; return ( - - | Propiedades | Tipo | Descripción | - | ------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | color | cadena | The theme color to be displayed as a sample in the menu item. Las opciones incluyen: `verde`, `turquesa`, `cielo`, `azul`, `púrpura`, `rosa`, `rojo`, `naranja`, `amarillo`, `gris` | - | seleccionado | booleano | Indica si el elemento del menú está seleccionado (marcado) | - | deshabilitado | booleano | Indica si el elemento del menú está deshabilitado | - | hovered | booleano | Indica si el elemento del menú está actualmente siendo sobrevolado | - | variante | cadena | La variante de la muestra de color. Puede ser `default` o `pipeline` | - | enClic | función | Función de retorno que se activará cuando se haga clic en el elemento del menú | - | nombreDeClase | cadena | Nombre opcional para estilo adicional | + + | Props | Type | Description | + | --------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | color | string | The theme color to be displayed as a sample in the menu item. Options include: `green`, `turquoise`, `sky`, `blue`, `purple`, `pink`, `red`, `orange`, `yellow`, and `gray` | + | selected | boolean | Indicates whether the menu item is selected (checked) | + | disabled | boolean | Indicates whether the menu item is disabled | + | hovered | boolean | Indicates whether the menu item is currently being hovered over | + | variant | string | The variant of the color sample. It can either be `default` or `pipeline` | + | onClick | function | Callback function to be triggered when the menu item is clicked | + | className | string | Optional name for additional styling | -### Conmutar +### Toggle -Un elemento de menú con un interruptor de palanca asociado para permitir a los usuarios habilitar o deshabilitar una característica específica +A menu item with an associated toggle switch to allow users to enable or disable a specific feature - + ```jsx import { IconBell } from '@tabler/icons-react'; @@ -405,7 +405,7 @@ Un elemento de menú con un interruptor de palanca asociado para permitir a los return ( - - | Propiedades | Tipo | Descripción | - | --------------- | --------------- | ----------------------------------------------------------------------------------- | - | IconoIzquierdo | ComponenteIcono | Un icono izquierdo opcional que se muestra antes del texto en el elemento del menú | - | texto | cadena | El contenido de texto del elemento del menú | - | conmutado | booleano | Indica si el interruptor de palanca está en el estado "encendido" o "apagado" | - | cambioConmutado | función | Función de retorno que se activa cuando el estado del interruptor de palanca cambia | - | tamañoConmutado | cadena | El tamaño del interruptor de palanca. It can be either \ | - | nombreDeClase | cadena | Nombre opcional para estilo adicional | + + | Props | Type | Description | + | -------------- | ------------- | ----------------------------------------------------------------- | + | LeftIcon | IconComponent | An optional left icon displayed before the text in the menu item | + | text | string | The text content of the menu item | + | toggled | boolean | Indicates whether the toggle switch is in the "on" or "off" state | + | onToggleChange | function | Callback function triggered when the toggle switch state changes | + | toggleSize | string | The size of the toggle switch. It can be either \ | + | className | string | Optional name for additional styling | diff --git a/packages/twenty-docs/l/es/twenty-ui/navigation/navigation-bar.mdx b/packages/twenty-docs/l/es/twenty-ui/navigation/navigation-bar.mdx index 191b6504f7..a77e9f34e6 100644 --- a/packages/twenty-docs/l/es/twenty-ui/navigation/navigation-bar.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/navigation/navigation-bar.mdx @@ -1,16 +1,16 @@ --- -title: Barra de navegación +title: Navigation Bar image: /images/user-guide/table-views/table.png --- - Encabezado + Header -Renderiza una barra de navegación que contiene varios componentes `NavigationBarItem`. +Renders a navigation bar that contains multiple `NavigationBarItem` components. - + ```jsx import { IconHome, IconUser, IconSettings } from '@tabler/icons-react'; import { NavigationBar } from "@/ui/navigation/navigation-bar/components/NavigationBar"; @@ -41,9 +41,9 @@ Renderiza una barra de navegación que contiene varios componentes `NavigationBa - | Props | Tipo | Descripción | - | ----------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | nombreDelElementoActivo | cadena | El nombre del elemento de navegación actualmente activo | - | elementos | matriz | Una matriz de objetos que representan cada elemento de navegación. Cada objeto contiene el `nombre` del elemento, el componente `Icono` a mostrar y una función `cuandoHagaClick` que se llamará al hacer clic en el elemento | + | Props | Type | Description | + | -------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | activeItemName | string | The name of the currently active navigation item | + | items | array | An array of objects representing each navigation item. Each object contains the `name` of the item, the `Icon` component to display, and an `onClick` function to be called when the item is clicked | diff --git a/packages/twenty-docs/l/es/twenty-ui/navigation/step-bar.mdx b/packages/twenty-docs/l/es/twenty-ui/navigation/step-bar.mdx index 80fc8c89e4..66c420f561 100644 --- a/packages/twenty-docs/l/es/twenty-ui/navigation/step-bar.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/navigation/step-bar.mdx @@ -1,25 +1,25 @@ --- -title: Barra de Paso +title: Step Bar image: /images/user-guide/api/api.png --- - Encabezado + Header -Muestra el progreso a través de una secuencia de pasos numerados resaltando el paso activo. Renderiza un contenedor con pasos, cada uno representado por el componente `Step`. +Displays progress through a sequence of numbered steps by highlighting the active step. It renders a container with steps, each represented by the `Step` component. - + ```jsx import { StepBar } from "@/ui/navigation/step-bar/components/StepBar"; export const MyComponent = () => { return ( - Paso 1 - Paso 2 - Paso 3 + Step 1 + Step 2 + Step 3 ); }; @@ -27,8 +27,8 @@ Muestra el progreso a través de una secuencia de pasos numerados resaltando el - | Props | Tipo | Descripción | - | ---------- | ------ | ------------------------------------------------------------------------------------------ | - | activeStep | número | El índice del paso actualmente activo. Esto determina qué paso debe resaltarse visualmente | + | Props | Type | Description | + | ---------- | ------ | ------------------------------------------------------------------------------------------------- | + | activeStep | number | The index of the currently active step. This determines which step should be visually highlighted | diff --git a/packages/twenty-docs/l/es/twenty-ui/progress-bar.mdx b/packages/twenty-docs/l/es/twenty-ui/progress-bar.mdx index 87c450d275..2e4735ab30 100644 --- a/packages/twenty-docs/l/es/twenty-ui/progress-bar.mdx +++ b/packages/twenty-docs/l/es/twenty-ui/progress-bar.mdx @@ -1,16 +1,16 @@ --- -title: Retroalimentación +title: Feedback image: /images/user-guide/emails/emails_header.png --- - Encabezado + Header -Indica el progreso o la cuenta regresiva y se mueve de derecha a izquierda. +Indicates progress or countdown and moves from right to left. - + ```jsx import { ProgressBar } from "twenty-ui/feedback"; @@ -30,23 +30,23 @@ Indica el progreso o la cuenta regresiva y se mueve de derecha a izquierda. - | Props | Tipo | Descripción | Predeterminado | - | ---------------- | -------- | --------------------------------------------------------------------------------------------------------- | -------------- | - | duración | número | La duración total de la animación de la barra de progreso en milisegundos | 3 | - | retraso | número | El retraso en el inicio de la animación de la barra de progreso en milisegundos | 0 | - | aceleración | cadena | Función de aceleración para la animación de la barra de progreso | easeInOut | - | alturaDeBarra | número | La altura de la barra en píxeles | 24 | - | colorDeBarra | cadena | El color de la barra | gray80 | - | inicioAutomático | booleano | Si es `true`, la animación de la barra de progreso comienza automáticamente cuando el componente se monta | `verdadero` | + | Props | Type | Description | Default | + | --------- | ------- | ------------------------------------------------------------------------------------ | --------- | + | duration | number | The total duration of the progress bar animation in milliseconds | 3 | + | delay | number | The delay in starting the progress bar animation in milliseconds | 0 | + | easing | string | Easing function for the progress bar animation | easeInOut | + | barHeight | number | The height of the bar in pixels | 24 | + | barColor | string | The color of the bar | gray80 | + | autoStart | boolean | If `true`, the progress bar animation starts automatically when the component mounts | `true` | -## Barra de Progreso Circular +## Circular Progress Bar -Indica el progreso de una tarea, a menudo se usa en pantallas de carga o áreas donde se desea comunicar procesos en curso al usuario. +Indicates the progress of a task, often used in loading screens or areas where you want to communicate ongoing processes to the user. - + ```jsx import { CircularProgressBar } from "@/ui/feedback/progress-bar/components/CircularProgressBar"; @@ -57,10 +57,10 @@ Indica el progreso de una tarea, a menudo se usa en pantallas de carga o áreas - | Props | Tipo | Descripción | Predeterminado | - | ------------ | ------ | -------------------------------------------- | -------------- | - | tamaño | número | El tamaño de la barra de progreso circular | 50 | - | anchoDeBarra | número | El ancho de la línea de la barra de progreso | 5 | - | colorDeBarra | cadena | El color de la barra de progreso | currentColor | + | Props | Type | Description | Default | + | -------- | ------ | ------------------------------------- | ------------ | + | size | number | The size of the circular progress bar | 50 | + | barWidth | number | The width of the progress bar line | 5 | + | barColor | string | The color of the progress bar | currentColor | diff --git a/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-agents.mdx b/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-agents.mdx index f624db4b90..4bb94d05c4 100644 --- a/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-agents.mdx +++ b/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-agents.mdx @@ -7,13 +7,13 @@ description: Integrate AI capabilities directly into your automation workflows. This feature is in development and will be available in beta soon.
-## Resumen +## Overview Integrate AI capabilities directly into your automation workflows for intelligent data processing and decision-making. ## Capabilities -| Feature | Descripción | +| Feature | Description | | ------------------- | ------------------------------------------------ | | **AI actions** | Add AI-powered steps to any workflow | | **Data enrichment** | Automatically enhance records with external data | diff --git a/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-chatbot.mdx b/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-chatbot.mdx index 5bac35365f..d7cbbc04fc 100644 --- a/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-chatbot.mdx +++ b/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-chatbot.mdx @@ -7,13 +7,13 @@ description: An intelligent assistant that helps you interact with your CRM data This feature is in development and will be available in beta soon. -## Resumen +## Overview An intelligent assistant that helps you interact with your CRM data using natural language. ## Capabilities -| Feature | Descripción | +| Feature | Description | | ---------------------------- | ------------------------------------------------------------------------- | | **Natural language queries** | Ask questions in plain English instead of building filters | | **Full data access** | Query records, relationships, and metrics across your workspace | diff --git a/packages/twenty-docs/l/es/user-guide/ai/capabilities/permissions-access-control.mdx b/packages/twenty-docs/l/es/user-guide/ai/capabilities/permissions-access-control.mdx index d007828250..9684098eb3 100644 --- a/packages/twenty-docs/l/es/user-guide/ai/capabilities/permissions-access-control.mdx +++ b/packages/twenty-docs/l/es/user-guide/ai/capabilities/permissions-access-control.mdx @@ -1,35 +1,35 @@ --- -title: Permisos y control de acceso -description: Controla a qué pueden acceder y qué pueden modificar los agentes de IA en tu espacio de trabajo. +title: Permissions & Access Control +description: Control what AI agents can access and modify in your workspace. --- -## Resumen +## Overview -Los agentes de IA respetan tu estructura de permisos existente. Esto es especialmente importante para los equipos que desean controlar exactamente a qué pueden acceder o qué pueden modificar los procesos de IA automatizados en su espacio de trabajo. +AI agents respect your existing permission structure. This is particularly important for teams who want to control exactly what automated AI processes can access or modify in their workspace. -## Asignar un rol a un agente de IA +## Assign a Role to an AI Agent -1. Ir a **Ajustes → Roles** -2. Haz clic en el rol que deseas asignar -3. Abre la pestaña **Asignación** -4. En **Agentes de IA**, haz clic en **+ Asignar a agente de IA** -5. Selecciona el agente de IA de la lista -6. Confirma la asignación +1. Go to **Settings → Roles** +2. Click on the role you want to assign +3. Open the **Assignment** tab +4. Under **AI Agents**, click **+ Assign to AI agent** +5. Select the AI agent from the list +6. Confirm the assignment -## ¿Por qué asignar roles a los agentes de IA? +## Why Assign Roles to AI Agents? -| Beneficio | Descripción | -| ----------------- | --------------------------------------------------------------- | -| **Seguridad** | Limita a qué datos pueden acceder o modificar los agentes de IA | -| **Cumplimiento** | Garantiza que la IA solo procese los datos que necesita | -| **Control** | Evita acciones no deseadas de las automatizaciones de IA | -| **Auditabilidad** | Haz un seguimiento de qué acciones realizó cada agente | +| Benefit | Description | +| ---------------- | ------------------------------------------------- | +| **Security** | Limit what data AI agents can access or modify | +| **Compliance** | Ensure AI only processes the data it needs | +| **Control** | Prevent unintended actions from AI automations | +| **Auditability** | Track which actions were performed by which agent | - Para los agentes de IA que se ejecutan dentro de flujos de trabajo, la asignación de roles garantiza que el agente no pueda acceder ni modificar datos fuera de su ámbito previsto—incluso si el flujo de trabajo tiene permisos más amplios. + For AI agents running within workflows, role assignment ensures the agent cannot access or modify data outside its intended scope—even if the workflow has broader permissions. -## Relacionado +## Related -* [Permisos](/l/es/user-guide/permissions-access/capabilities/permissions) — información detallada sobre la creación y gestión de roles -* [Agentes de IA](/l/es/user-guide/ai/capabilities/ai-agents) — capacidades de IA en flujos de trabajo +* [Permissions](/l/es/user-guide/permissions-access/capabilities/permissions) — detailed information on creating and managing roles +* [AI Agents](/l/es/user-guide/ai/capabilities/ai-agents) — AI capabilities in workflows diff --git a/packages/twenty-docs/l/es/user-guide/ai/overview.mdx b/packages/twenty-docs/l/es/user-guide/ai/overview.mdx index c1c467099e..bd4ee68a79 100644 --- a/packages/twenty-docs/l/es/user-guide/ai/overview.mdx +++ b/packages/twenty-docs/l/es/user-guide/ai/overview.mdx @@ -1,13 +1,13 @@ --- -title: IA +title: AI description: AI-powered features coming soon to Twenty. --- - IA + AI -## Lo que Viene +## What's Coming Twenty is building AI capabilities to help your team work smarter. We're focusing on two major areas: @@ -37,7 +37,7 @@ Extend your workflows with AI-powered actions and autonomous agents. * **Autonomous agents**: Let agents execute multi-step tasks within a workflow * **Custom prompts**: Define exactly how AI should process your data -**Casos de uso:** +**Use cases:** * Automatically categorize inbound leads * Enrich company data from public sources @@ -54,7 +54,7 @@ AI agents will be managed through the existing permissions system: This ensures AI agents respect your data governance policies and only access what they need. -## Manténgase Actualizado +## Stay Updated We'll update this section as AI features become available. In the meantime: diff --git a/packages/twenty-docs/l/es/user-guide/billing/capabilities/pricing-plans.mdx b/packages/twenty-docs/l/es/user-guide/billing/capabilities/pricing-plans.mdx index 1de0d238e1..90bf7e7cbb 100644 --- a/packages/twenty-docs/l/es/user-guide/billing/capabilities/pricing-plans.mdx +++ b/packages/twenty-docs/l/es/user-guide/billing/capabilities/pricing-plans.mdx @@ -1,79 +1,79 @@ --- -title: Planes de precios},{ -description: Obtén información sobre los planes de precios de Twenty y cómo cambiar entre ellos. +title: Pricing Plans +description: Learn about Twenty's pricing plans and how to switch between them. --- -## Resumen +## Overview -Twenty ofrece precios flexibles para adaptarse a equipos de todos los tamaños, tanto si prefieres alojamiento en la nube como autoalojamiento. +Twenty offers flexible pricing to fit teams of all sizes, whether you prefer cloud hosting or self-hosting. -## Planes en la nube +## Cloud Plans -### Pro (Nube) +### Pro (Cloud) -Para equipos listos para escalar: +For teams ready to scale: -* Todas las funciones principales de CRM -* Sincronización de correo electrónico y calendario -* Flujos de trabajo y automatizaciones -* Soporte estándar +* All core CRM features +* Email and calendar sync +* Workflows and automations +* Standard support - Las funciones premium (SSO y permisos a nivel de fila) no están incluidas en el plan Pro. + Premium features (SSO and row-level permissions) are not included in the Pro plan. -### Organización (Nube) +### Organization (Cloud) -Para equipos más grandes con necesidades avanzadas: +For larger teams with advanced needs: -* Todo lo de Pro -* **Funciones premium**: integración de SSO y permisos a nivel de fila -* Soporte prioritario +* Everything in Pro +* **Premium features**: SSO integration and row-level permissions +* Priority support -## Planes de autoalojamiento +## Self-Hosted Plans -### Gratis (Autoalojado) +### Free (Self-Hosted) -Aloja Twenty en tu propia infraestructura sin costo: +Host Twenty on your own infrastructure at no cost: -* Incluye todas las funciones de Pro -* Soporte de la comunidad a través de Discord -* Control total sobre tus datos +* All Pro features included +* Community support via Discord +* Full control over your data -### Organización (Autoalojado) +### Organization (Self-Hosted) -Para equipos que necesitan funciones premium mientras se autoalojan: +For teams who need premium features while self-hosting: -* Todas las funciones de Pro -* **Funciones premium**: integración de SSO y permisos a nivel de fila -* Soporte del equipo de Twenty -* No es obligatorio publicar el código personalizado como código abierto antes de distribuirlo +* All Pro features +* **Premium features**: SSO integration and row-level permissions +* Twenty team support +* No requirement to publish custom code as open-source before distributing -## Funciones premium +## Premium Features -Las funciones premium solo están disponibles en los planes de Organización (Nube o Autoalojado): +Premium features are only available on the Organization plans (Cloud or Self-Hosted): -* **Integración de SSO**: inicio de sesión único con tu proveedor de identidad -* **Permisos a nivel de fila**: control de acceso granular a nivel de registro +* **SSO integration**: Single Sign-On with your identity provider +* **Row-level permissions**: Fine-grained access control at the record level -## Cambiar de plan +## Switching Plans -### Actualizar a Organización +### Upgrade to Organization -1. Ir a **Ajustes → Facturación** -2. Haz clic en **Cambiar a Organización** -3. Confirma tu actualización +1. Go to **Settings → Billing** +2. Click **Switch to Organization** +3. Confirm your upgrade -### Reducir a Pro +### Downgrade to Pro -Contacta al equipo de soporte para reducir tu plan. +Contact support to downgrade your plan. -### Cambiar a facturación anual +### Switch to Yearly Billing -1. Ir a **Ajustes → Facturación** -2. Haz clic en **Cambiar a anual** -3. Ahorra con la facturación anual +1. Go to **Settings → Billing** +2. Click **Switch to Yearly** +3. Save with annual billing -### Cambiar a facturación mensual +### Switch to Monthly Billing -Contacta al equipo de soporte para volver a la facturación mensual. +Contact support to switch back to monthly billing. diff --git a/packages/twenty-docs/l/es/user-guide/billing/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/es/user-guide/billing/capabilities/workflow-credits.mdx index f4691c1ab1..0ce8e3be72 100644 --- a/packages/twenty-docs/l/es/user-guide/billing/capabilities/workflow-credits.mdx +++ b/packages/twenty-docs/l/es/user-guide/billing/capabilities/workflow-credits.mdx @@ -1,9 +1,9 @@ --- -title: Créditos de Workflow +title: Workflow Credits description: Understanding workflow credits, consumption, and how to purchase more. --- -## Resumen +## Overview Credits power your workflow automations in Twenty. Every workflow action consumes credits based on its complexity. @@ -13,8 +13,8 @@ Credits are based on your billing cycle, not your plan: | Billing Cycle | Credits | | ------------- | --------------- | -| Mensual | 5 million/month | -| Anual | 50 million/year | +| Monthly | 5 million/month | +| Yearly | 50 million/year | The 5 million monthly credits are designed to empower you to run automations without worrying about costs. For most workflows using standard actions, this is more than enough. You'll only need additional credits when running advanced code nodes or AI-powered features. @@ -24,26 +24,26 @@ Credits are based on your billing cycle, not your plan: Different actions consume different amounts of credits: -| Action Type | Uso de Crédito | +| Action Type | Credit Usage | | ------------------------------------------------------- | ----------------------- | | **Basic operations** (search, update, create records) | Minimal | | **Complex operations** (code nodes, external API calls) | More credits | | **AI prompts** (coming soon) | Variable based on usage | -Los créditos se deducen en tiempo real cuando se ejecutan los flujos de trabajo. +Credits are deducted in real-time when workflows execute. ## Monitoring Usage Track your credit consumption: -1. Ir a **Ajustes → Facturación** +1. Go to **Settings → Billing** 2. View your current usage and remaining credits 3. Monitor trends to plan for additional credits if needed -## Adquirir Créditos Adicionales +## Purchasing Additional Credits Need more credits? -1. Ir a **Ajustes → Facturación** +1. Go to **Settings → Billing** 2. Click on the option to purchase additional credit packs 3. Select the amount you need diff --git a/packages/twenty-docs/l/es/user-guide/billing/how-tos/billing-faq.mdx b/packages/twenty-docs/l/es/user-guide/billing/how-tos/billing-faq.mdx index 6024a3db08..ee1d560cb1 100644 --- a/packages/twenty-docs/l/es/user-guide/billing/how-tos/billing-faq.mdx +++ b/packages/twenty-docs/l/es/user-guide/billing/how-tos/billing-faq.mdx @@ -3,11 +3,11 @@ title: Billing FAQ description: Frequently asked questions about Twenty pricing and billing. --- -## Precios +## Pricing - - Sí, puedes usar Twenty gratis mientras lo alojas por tu cuenta. You will get access to everything included in the Pro (Cloud) plan, except the support from our core-team. El soporte está disponible a través de nuestra comunidad en Discord. + + Yes, you can use Twenty for free while self-hosting. You will get access to everything included in the Pro (Cloud) plan, except the support from our core-team. Support is accessible via our Discord community. If you want to self-host and need the Premium features (SSO and row-level permissions), you can choose the paid Organization (Self-Hosted) license. This also includes support from the Twenty team and removes the requirement to publish custom code as open-source before distributing. @@ -20,67 +20,67 @@ description: Frequently asked questions about Twenty pricing and billing. - No ofrecemos asientos gratuitos. El precio es por usuario y cada usuario necesita una licencia para acceder a Twenty. + We do not offer free seats. Pricing is per user and each user needs a licence to access Twenty. - - Puedes hacerlo en `Configuración → Facturación`. Luego haz clic en `Cambiar a Organización`. + + You can do so under `Settings → Billing`. Then click on `Switch to Organization`. - - Por favor, comunícate directamente con nuestro equipo a través del Soporte, no hay una forma sencilla de hacer esto utilizando la IU en este momento. + + Please reach out to our team directly via the Support, there is no easy way to do this using the UI at the moment. - - Puedes hacerlo en `Configuración → Facturación`. Luego haz clic en `Cambiar a Anual`. + + You can do so under `Settings → Billing`. Then click on `Switch to Yearly`. - - Por favor, comunícate directamente con nuestro equipo a través del Soporte, no hay una forma sencilla de hacer esto utilizando la IU en este momento. + + Please reach out to our team directly via the Support, there is no easy way to do this using the UI at the moment. - - Lo encontrarás en `Configuración → Facturación`. + + You will find this under `Settings → Billing`. - + The number of credits depends on your billing cycle, not your plan: * **Monthly subscriptions**: 5 million credits per month * **Yearly subscriptions**: 50 million credits per year - - Cada acción de flujo de trabajo consume créditos según su complejidad: + + Each workflow action consumes credits based on its complexity: - * Las **operaciones internas básicas** (como búsqueda, actualización, creación de registros) consumen muy pocos créditos. - * Las **operaciones más complejas** como nodos de código y solicitudes a servicios externos consumen más créditos. - * **Consultas de IA** (próximamente) también consumirán más créditos según el uso. + * **Basic internal operations** (such as search, update, create records) consume very few credits + * **More complex operations** like code nodes and requests to external services consume more credits + * **AI prompts** (coming soon!) will also consume more credits based on usage - Los créditos se deducen en tiempo real cuando se ejecutan los flujos de trabajo. Puedes monitorear tu uso en **Configuración → Facturación** para seguir el consumo y los créditos restantes. + Credits are deducted in real-time when workflows execute. You can monitor your usage in **Settings → Billing** to track consumption and remaining credits. - - Puedes comprar créditos adicionales en `Configuración → Facturación`. + + You can buy additional credits under `Settings → Billing`. -## Facturación +## Billing - - Puedes hacerlo en `Configuración → Facturación`. + + You can do so under `Settings → Billing`. - - Puedes hacerlo en `Configuración → Facturación`. Luego haz clic en `Ver detalles de facturación`. Allí podrás agregar un nuevo método de pago. + + You can do so under `Settings → Billing`. Then click on `View billing details`. You'll be able to add a new payment method there. - - Puedes hacerlo en `Configuración → Facturación`. Luego haz clic en `Ver detalles de facturación`. Allí podrás editar la información de facturación. + + You can do so under `Settings → Billing`. Then click on `View billing details`. You'll be able to edit the billing information there. - - Puedes hacerlo en `Configuración → Facturación`. Luego haz clic en `Ver detalles de facturación`. Verás todas tus facturas al final de la pantalla. + + You can do so under `Settings → Billing`. Then click on `View billing details`. You'll see all your invoices at the bottom of the screen. diff --git a/packages/twenty-docs/l/es/user-guide/billing/overview.mdx b/packages/twenty-docs/l/es/user-guide/billing/overview.mdx index 062d2b3289..604b9bb11d 100644 --- a/packages/twenty-docs/l/es/user-guide/billing/overview.mdx +++ b/packages/twenty-docs/l/es/user-guide/billing/overview.mdx @@ -1,11 +1,11 @@ --- -title: Facturación +title: Billing description: Understand Twenty pricing and manage your subscription. image: /images/user-guide/setup/pricing.png --- - Facturación + Billing Twenty offers flexible pricing plans to fit your team's needs. Manage your subscription, track workflow credits, and access invoices all from **Settings → Billing**. diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/calendar.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/calendar.mdx index 1176e261ec..ace7c62f10 100644 --- a/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/calendar.mdx +++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/calendar.mdx @@ -1,5 +1,5 @@ --- -title: Calendario +title: Calendar description: Understanding calendar integration features in Twenty. --- @@ -9,35 +9,35 @@ description: Understanding calendar integration features in Twenty. Twenty automatically syncs your calendar events and links them to the relevant CRM records, giving you a complete view of your meeting history with contacts and companies. -## Pestaña de Calendario +## Calendar Tab Next to the Emails tab on records, you'll find a `Calendar` tab that contains the history of meetings scheduled with the record. ### Available For -* **Personas**: Vea todas las reuniones programadas con un contacto específico -* **Empresas**: Vea todas las reuniones relacionadas con una empresa y sus empleados -* **Oportunidades**: Acceda al historial de reuniones relacionadas con la empresa conectada a esta oportunidad +* **People**: View all meetings scheduled with a specific contact +* **Companies**: See all meetings related to a company and its employees +* **Opportunities**: Access meeting history related to the company linked to this opportunity -### Visualización del Historial de Reuniones +### Viewing Meeting History -1. **Navegue hacia un Registro**: Vaya a cualquier registro de Persona, Empresa u Oportunidad -2. **Seleccione la Pestaña de Calendario**: Haga clic en la pestaña `Calendario` junto a la pestaña de Correos Electrónicos -3. **Explore el Historial de Reuniones**: Vea todas las reuniones programadas y sus detalles -4. **Acceda al Contexto de la Reunión**: Vea los participantes, horarios e información relacionada +1. **Navigate to a Record**: Go to any Person, Company, or Opportunity record +2. **Select the Calendar Tab**: Click on the `Calendar` tab next to the Emails tab +3. **Browse Meeting History**: View all scheduled meetings and their details +4. **Access Meeting Context**: See meeting participants, times, and related information ## Visibility Settings Calendar data follows the same visibility settings as emails, ensuring consistent privacy controls across both communication channels. -## Qué Se Sincroniza +## What Gets Synced * **External Meetings**: All meetings with contacts outside your organization * **Automatic Linking**: Meetings connect to existing People and Company records based on attendee email addresses * **Meeting Details**: Subject, time, duration, and participants * **Updates**: New calendar events sync automatically -## Qué No Se Sincroniza +## What Doesn't Get Synced * **Internal Meetings**: Meetings with only colleagues (same domain) remain private * **Private Events**: Events marked as private in your calendar diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/mailbox.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/mailbox.mdx index 7730c39072..eea8346340 100644 --- a/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/mailbox.mdx +++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/mailbox.mdx @@ -3,83 +3,83 @@ title: Mailbox description: Understanding email integration features in Twenty. --- -**Nota**: Para conectar sus cuentas de correo electrónico y configurar los ajustes de sincronización, visite [Configuración de Correo Electrónico y Calendario](/l/es/user-guide/calendar-emails/overview). +**Note**: To connect your email accounts and configure sync settings, visit [Email & Calendar Setup](/l/es/user-guide/calendar-emails/overview). -## Cómo Funciona la Integración del Correo Electrónico +## How Email Integration Works -Twenty vincula automáticamente los correos electrónicos de sus buzones conectados a los registros CRM relevantes, manteniendo todo el historial de comunicación en un solo lugar. +Twenty automatically links emails from your connected mailboxes to the relevant CRM records, keeping all communication history in one place. ### Objects Where Emails Can Be Found -Las conversaciones de correo electrónico aparecen en tres objetos principales: +Email conversations appear in three main objects: -* **Personas**: Vea todos los correos electrónicos intercambiados con un contacto específico -* **Empresas**: Vea todos los correos electrónicos relacionados con una empresa y sus empleados -* **Oportunidades**: Acceda a hilos de correo electrónico relacionados con la empresa vinculada a esta oportunidad. Aún no se muestran los hilos de correo electrónico de personas individuales en la oportunidad. +* **People**: View all emails exchanged with a specific contact +* **Companies**: See all emails related to a company and its employees +* **Opportunities**: Access email threads related to the company linked to this opportunity. Email threads from individual people on the opportunity are not shown yet. -### Visualización de Conversaciones de Correo Electrónico +### Viewing Email Threads -1. **Navegue hacia un Registro**: Vaya a cualquier registro de Persona, Empresa u Oportunidad -2. **Seleccione la Pestaña de Correos Electrónicos**: Haga clic en la pestaña `Correos Electrónicos` para ver los correos sincronizados -3. **Abra un Hilo de Correo Electrónico**: Haga clic en cualquier correo electrónico para abrir y leer la conversación completa -4. **Explorar el Historial**: Desplácese por el historial completo de correos electrónicos con ese contacto +1. **Navigate to a Record**: Go to any Person, Company, or Opportunity record +2. **Select the Emails Tab**: Click on the `Emails` tab to view synced emails +3. **Open an Email Thread**: Click on any email to open and read the full conversation +4. **Browse History**: Scroll through the complete email history with that contact -## Lo Que Verás +## What You'll See -### Vista de Hilo de Correo Electrónico +### Email Thread View -Cuando abres un hilo de correo electrónico, puedes: +When you open an email thread, you can: -* **Leer Conversaciones Completas**: Vea el intercambio completo de correos electrónicos -* **Ver Participantes**: Vea a todas las personas involucradas en el hilo de correo electrónico -* **Verificar Tiempos**: Sepa exactamente cuándo se envió cada correo electrónico -* **Acceder al Contexto**: Comprenda todo el historial de comunicación +* **Read Full Conversations**: See the complete email exchange +* **View Participants**: See all people involved in the email thread +* **Check Timestamps**: Know exactly when each email was sent +* **Access Context**: Understand the full communication history -### Visibilidad del Correo Electrónico +### Email Visibility -Dependiendo de las configuraciones de su buzón, puede ver: +Depending on your mailbox settings, you might see: -* **Contenido Completo**: Texto completo del correo electrónico y detalles -* **Asunto + Metadata**: Línea de asunto, remitente, destinatario y hora -* **Solo Metadata**: Información básica sin contenido de correo electrónico +* **Full Content**: Complete email text and details +* **Subject + Metadata**: Subject line, sender, recipient, and timestamp +* **Metadata Only**: Basic information without email content -## Comportamiento de Sincronización de Correos Electrónicos +## Email Sync Behavior -### Qué Se Sincroniza +### What Gets Synced -* **Correos Externos**: Todos los correos con contactos fuera de su organización -* **Vinculación Automática**: Los correos se conectan a los registros de Personas y Empresas existentes -* **Direcciones Múltiples**: Los correos de cualquier dirección se vinculan al mismo registro de contacto -* **Actualizaciones**: Los nuevos correos aparecen en 5 minutos +* **External Emails**: All emails with contacts outside your organization +* **Automatic Linking**: Emails connect to existing People and Company records +* **Multiple Addresses**: Emails from any address link to the same contact record +* **Updates**: New emails appear within 5 minutes -### Qué No Se Sincroniza +### What Doesn't Get Synced -* **Correos Internos**: Los correos entre colegas (mismo dominio) permanecen privados -* **Correos Grupales**: No se incluyen las listas de distribución y correos grupales -* **Carpetas Excluidas**: Carpetas que ha elegido no sincronizar (configuradas en Configuración → Cuentas → Correo Electrónico) +* **Internal Emails**: Emails between colleagues (same domain) remain private +* **Group Emails**: Distribution lists and group emails are excluded +* **Excluded Folders**: Folders you've chosen not to sync (configured under Settings → Accounts → Email) -### Sincronización Selectiva de Carpetas (Función de Laboratorio) +### Selective Folder Sync (Lab Feature) -Controle qué carpetas de correo electrónico se sincronizan con Twenty: +Control which email folders sync with Twenty: -1. Habilitar `Carpeta de Mensajes` en Configuración → Lanzamientos → Laboratorio -2. Configure las carpetas en Configuración → Cuentas → Correo Electrónico -3. Elija carpetas específicas para incluir o excluir (Bandeja de entrada, Enviados, Archivo, carpetas personalizadas) +1. Enable `Message Folder` in Settings → Releases → Lab +2. Configure folders under Settings → Accounts → Email +3. Choose specific folders to include or exclude (Inbox, Sent, Archive, custom folders) -## Resolución de Problemas de Sincronización de Correos Electrónicos +## Troubleshooting Email Sync -### Problemas Comunes de Sincronización +### Common Sync Issues -* **Retrasos en la Sincronización**: Los correos aparecen en 5 minutos, pero las importaciones iniciales tardan más -* **Correos Faltantes**: Compruebe si: - * Las carpetas están excluidas en la configuración del Carpeta de Mensajes - * La creación automática de contactos está desactivada (los correos necesitan registros existentes de Twenty) - * El correo es de colegas (mismo dominio) o listas grupales - * El buzón aún está completando la sincronización inicial +* **Sync Delays**: Emails appear within 5 minutes, but initial imports take longer +* **Missing Emails**: Check if: + * Folders are excluded in Message Folder settings + * Contact auto-creation is disabled (emails need existing Twenty records) + * Email is from colleagues (same domain) or group lists + * Mailbox is still completing initial sync -### Limitaciones del Correo Electrónico +### Email Limitations -* **Carpetas del Sistema**: Algunas carpetas de correo no están disponibles para sincronización -* **Alias**: Solo se pueden conectar buzones verdaderos (no alias de correo electrónico) +* **System Folders**: Some email folders may not be available for sync +* **Aliases**: Only true mailboxes can be connected (not email aliases) diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx index bf2da6e184..de258baef3 100644 --- a/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx +++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx @@ -7,11 +7,11 @@ description: Understanding email activity tracking across different objects. Email activity is currently available on **three standard objects**: -| Objeto | What You See | +| Object | What You See | | ----------------- | ---------------------------------------------------------------- | | **People** | All emails exchanged with that specific contact | | **Companies** | All emails with anyone from that company (based on email domain) | -| **Oportunidades** | Emails related to the company linked to the opportunity | +| **Opportunities** | Emails related to the company linked to the opportunity | ## Why Only These Objects? @@ -21,7 +21,7 @@ People, Companies, and Opportunities are the core relationship objects where ema * **Email domain** → matched to Company records * **Company relation** → linked to Opportunities -## Objetos personalizados +## Custom Objects **Email tracking is not available on custom objects** at this time. diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx index ed2000c365..83da30bd83 100644 --- a/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx +++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx @@ -3,7 +3,7 @@ title: Connect Several Mailboxes per User description: Connect multiple email accounts for a single user. --- -## Resumen +## Overview Twenty supports **unlimited email accounts per user**. This is useful if you manage multiple inboxes, such as: diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx index 46fb847661..9569d2651a 100644 --- a/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx +++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx @@ -1,52 +1,52 @@ --- -title: Limitar los correos electrónicos importados},{ -description: Controla qué correos electrónicos se importan en Twenty. +title: Limit Emails Imported +description: Control which emails are imported into Twenty. --- -## Resumen +## Overview -De forma predeterminada, Twenty sincroniza todos los correos electrónicos externos de tu buzón conectado. Puedes limitar lo que se importa usando la **selección de carpetas** y los **ajustes de visibilidad**. +By default, Twenty syncs all external emails from your connected mailbox. You can limit what gets imported using **folder selection** and **visibility settings**. -## Método 1: Selección de carpetas (Recomendado) +## Method 1: Folder Selection (Recommended) -Controle qué carpetas de correo electrónico se sincronizan con Twenty: +Control which email folders sync with Twenty: -1. Ir a **Ajustes → Releases → Lab** -2. Activa **Carpeta de mensajes** -3. Volver a **Ajustes → Cuentas** -4. Selecciona tu cuenta de correo conectada -5. Elige qué carpetas sincronizar: +1. Go to **Settings → Releases → Lab** +2. Enable **Message Folder** +3. Return to **Settings → Accounts** +4. Select your connected email account +5. Choose which folders to sync: -| Carpeta | Descripción | -| --------------------------- | ---------------------------------------- | -| **Bandeja de entrada** | Correos entrantes principales | -| **Enviados** | Correos salientes que has enviado | -| **Archivo** | Mensajes archivados | -| **Carpetas personalizadas** | Cualquier carpeta específica que quieras | +| Folder | Description | +| ------------------ | ----------------------------- | +| **Inbox** | Primary incoming emails | +| **Sent** | Outgoing emails you've sent | +| **Archive** | Archived messages | +| **Custom Folders** | Any specific folders you want | -6. Excluye las carpetas que no quieras sincronizar (Spam, Papelera, carpetas personales) +6. Exclude folders you don't want synced (Spam, Trash, personal folders) -Esto te da un control preciso sobre qué correos aparecen en tu CRM sin sincronizar todo. +This gives you precise control over which emails appear in your CRM without syncing everything. -## Método 2: Ajustes de creación automática de contactos +## Method 2: Contact Auto-Creation Settings -Controla cuándo se crean contactos a partir de correos: +Control when contacts are created from emails: -1. Ir a **Ajustes → Cuentas** -2. Selecciona tu buzón conectado -3. Elige una opción: - * **Desactivado**: No se crean contactos, pero los correos siguen sincronizándose con los contactos existentes - * **Enviados y recibidos**: Crea contactos a partir de todos los correos externos - * **Solo enviados**: Crea contactos únicamente a partir de los correos que envías +1. Go to **Settings → Accounts** +2. Select your connected mailbox +3. Choose an option: + * **Deactivated**: No contacts created, but emails still sync to existing contacts + * **Sent & Received**: Create contacts from all external emails + * **Sent Only**: Only create contacts from emails you send -## Qué se excluye siempre +## What's Always Excluded -Estos correos nunca se sincronizan, independientemente de los ajustes: +These emails are never synced, regardless of settings: -* **Correos internos**: Mensajes entre colegas (mismo dominio) -* **Correos grupales**: Listas de distribución y mensajes de grupo -* **Spam/Papelera**: Las carpetas del sistema generalmente se excluyen +* **Internal emails**: Messages between colleagues (same domain) +* **Group emails**: Distribution lists and group messages +* **Spam/Trash**: System folders are typically excluded -## Nota importante +## Important Note -No proporcionamos una dirección de correo electrónico en CC para la sincronización selectiva. Usa la función de selección de carpetas anterior para lograr el mismo nivel de control. +We don't provide a CC email address for selective syncing. Use the folder selection feature above to achieve the same level of control. diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/overview.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/overview.mdx index d0ded1b874..fd6d928dd0 100644 --- a/packages/twenty-docs/l/es/user-guide/calendar-emails/overview.mdx +++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/overview.mdx @@ -8,125 +8,125 @@ image: /images/user-guide/emails/emails_header.png Calendar & Emails -## Opciones de conexión +## Connection Options -### Cuenta de Google (Gmail y Calendario de Google) +### Google Account (Gmail & Google Calendar) 1. Go to **Settings → Accounts** 2. Click **Add account** -3. Seleccionar **Continuar con Google** -4. Autorizar a Twenty para acceder a tu Gmail y Calendario de Google +3. Select **Continue with Google** +4. Authorize Twenty to access your Gmail and Google Calendar 5. Configure email sync settings (visibility, auto-creation) → click **Next** 6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account** -7. Tus correos y eventos del calendario comenzarán a sincronizarse automáticamente +7. Your emails and calendar events will start syncing automatically -### Cuenta de Microsoft (Outlook y Calendario de Microsoft) +### Microsoft Account (Outlook & Microsoft Calendar) 1. Go to **Settings → Accounts** 2. Click **Add account** -3. Seleccionar **Continuar con Microsoft** -4. Autorizar a Twenty para acceder a tu Outlook y Calendario de Microsoft +3. Select **Continue with Microsoft** +4. Authorize Twenty to access your Outlook and Microsoft Calendar 5. Configure email sync settings (visibility, auto-creation) → click **Next** 6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account** -7. Tus correos y eventos del calendario comenzarán a sincronizarse automáticamente +7. Your emails and calendar events will start syncing automatically -### Configuración SMTP/CalDAV (Otros Proveedores) +### SMTP/CalDAV Setup (Other Providers) -Para otros proveedores de correo y calendario: +For other email and calendar providers: -1. Ir a **Ajustes → Lanzamientos → Lab** para habilitar la función -2. Volver a **Ajustes → Cuentas** -3. Configurar los ajustes SMTP para el correo -4. Configurar los ajustes CalDAV para el calendario -5. Probar la conexión +1. Go to **Settings → Releases → Lab** to enable the feature +2. Return to **Settings → Accounts** +3. Configure SMTP settings for email +4. Configure CalDAV settings for calendar +5. Test the connection -### Múltiples Buzones +### Multiple Mailboxes -* **Cuentas Ilimitadas**: Conecta múltiples cuentas de correo por usuario -* **Gestión de Cuentas**: Cambiar entre diferentes buzones -* **Ajustes de Sincronización**: Configura diferentes ajustes por buzón +* **Unlimited Accounts**: Connect multiple email accounts per user +* **Account Management**: Switch between different mailboxes +* **Sync Settings**: Configure different settings per mailbox - Solo se pueden conectar verdaderos buzones (por ejemplo, soporte@dominio.com con su propia bandeja de entrada). Email aliases that forward to another mailbox cannot be connected to Twenty. + Only true mailboxes can be connected (e.g., support@domain.com with its own inbox). Email aliases that forward to another mailbox cannot be connected to Twenty. -## Configuración de Correo +## Email Configuration -### Visibilidad del Mensaje +### Message Visibility -Elige diferentes niveles de visibilidad para tus correos: +Choose different levels of visibility for your emails: -* **Solo Metadatos**: Comparte solo información básica (remitente, destinatario, fecha, hora) -* **Asunto y Metadatos**: Comparte la línea de asunto junto con los metadatos -* **Todo el Contenido del Correo**: Comparte todo el contenido del correo incluyendo adjuntos +* **Metadata Only**: Share only basic information (sender, recipient, date, time) +* **Subject and Metadata**: Share subject line along with metadata +* **All Email Content**: Share entire email content including attachments -### Creación Automática de Contactos +### Contact Auto-Creation -* **Desactivado**: No se crean contactos automáticamente -* **Para mensajes enviados y recibidos**: Crea contactos para todas las interacciones externas por correo electrónico -* **Solo para mensajes enviados**: Crea contactos solo para los correos que envías -* **Nota**: Los correos internos (mismo dominio) nunca se sincronizan para mantener la privacidad +* **Deactivated**: No automatic contact creation +* **For messages sent & received**: Create contacts for all external email interactions +* **For messages sent only**: Create contacts only for emails you send +* **Note**: Internal emails (same domain) are never synced to maintain privacy When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you. -### Controla qué correos se sincronizan con la selección de carpetas de mensajes (Función Lab) +### Control which emails get sync with Message Folder Selection (Lab Feature) -Controle qué carpetas de correo electrónico se sincronizan con Twenty: +Control which email folders sync with Twenty: -1. Ir a **Ajustes → Lanzamientos → Lab** y habilitar la **Carpeta de Mensajes** -2. Volver a **Ajustes → Cuentas** y seleccionar la cuenta de correo conectada -3. Elige qué carpetas sincronizar: - * **Bandeja de Entrada**: Correos entrantes principales - * **Enviados**: Correos salientes que has enviado - * **Carpetas Personalizadas**: Cualquier carpeta específica que desees incluir - * **Excluir Carpetas**: Omitir carpetas como Spam, Papelera o carpetas personales +1. Go to **Settings → Releases → Lab** and enable **Message Folder** +2. Return to **Settings → Accounts** and select your connected email account +3. Choose which folders to sync: + * **Inbox**: Primary incoming emails + * **Sent**: Outgoing emails you've sent + * **Custom Folders**: Any specific folders you want to include + * **Exclude Folders**: Skip folders like Spam, Trash, or personal folders -Esto te da un control preciso sobre qué correos aparecen en tu CRM sin sincronizar todo. +This gives you precise control over which emails appear in your CRM without syncing everything. -**Qué se Sincroniza:** +**What Gets Synced:** -* **Correos Externos**: Todos los correos con contactos externos de carpetas seleccionadas -* **Correos Internos**: No se sincronizan (los correos del mismo dominio permanecen privados) -* **Adjuntos**: Se incluyen en la actualización del H1 2026 +* **External Emails**: All emails with external contacts from selected folders +* **Internal Emails**: Not synced (same domain emails remain private) +* **Attachments**: Coming in H1 2026 -**Nota**: No proporcionamos una dirección de correo CC para la sincronización selectiva. En su lugar, usa la función de carpeta de mensajes para lograr el mismo nivel de control sobre qué correos sincronizar con Twenty. +**Note**: We don't provide a CC email address for selective syncing. Instead, use the Message Folder feature above to achieve the same level of control over which emails sync with Twenty. -## Configuración del Calendario +## Calendar Configuration -### Visibilidad del Evento +### Event Visibility -Elige qué será visible para otros usuarios en tu espacio de trabajo: +Choose what will be visible to other users in your workspace: -* **Todo**: Los detalles completos del evento se compartirán con tu equipo -* **Metadatos**: Solo se compartirán con tu equipo la fecha y los participantes +* **Everything**: The whole event details will be shared with your team +* **Metadata**: Only date & participants will be shared with your team -### Creación Automática de Contactos para Reuniones +### Contact Auto-Creation for Meetings -* **Sí**: Crea automáticamente contactos para participantes de reuniones que no están en tu CRM -* **No**: Solo vincule reuniones a contactos existentes +* **Yes**: Automatically create contacts for meeting participants not in your CRM +* **No**: Only link meetings to existing contacts When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you. -### Controla qué eventos se sincronizan +### Control which events get sync -* **Importación de Reuniones**: Importa automáticamente los eventos del calendario -* **Enlace de Contactos**: Vincula las reuniones a los registros de Personas y Empresas +* **Meeting Import**: Automatically import calendar events +* **Contact Linking**: Link meetings to People and Company records -**Qué se Sincroniza:** +**What Gets Synced:** -* **Reuniones**: Eventos de calendario con participantes externos -* **Enlace de Contactos**: Eventos vinculados automáticamente a los registros del CRM -* **Eventos de Equipos**: Visibilidad compartida del calendario +* **Meetings**: Calendar events with external participants +* **Contact Linking**: Events automatically linked to CRM records +* **Team Events**: Shared calendar visibility -## Frecuencia de Sincronización +## Sync Frequency -**Actualizaciones cada 5 minutos**: Tanto el correo como el calendario se sincronizan automáticamente cada 5 minutos después de la importación inicial. +**Updates every 5 minutes**: Both email and calendar data sync automatically every 5 minutes after the initial import. **Initial sync timing**: Calendar sync completes quickly (usually within minutes), while email sync takes longer for large mailboxes—up to a few hours depending on volume. Don't worry if you see contacts from calendar events appearing before your email contacts; this is normal behavior. -## Próximos Pasos +## Next Steps * [Mailbox capabilities](/l/es/user-guide/calendar-emails/capabilities/mailbox) * [Troubleshoot missing emails](/l/es/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records) diff --git a/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/dashboards.mdx b/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/dashboards.mdx index 58fe0e83a5..b3d731e668 100644 --- a/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/dashboards.mdx +++ b/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/dashboards.mdx @@ -1,9 +1,9 @@ --- -title: Tableros +title: Dashboards description: Create and organize dashboards with tabs to visualize your CRM data. --- -## Resumen +## Overview Dashboards in Twenty are organized in a hierarchy: **Dashboards → Tabs → Widgets**. Each dashboard can contain multiple tabs, and each tab contains widgets (charts, numbers, iFrames). @@ -43,7 +43,7 @@ Tabs help you organize your dashboard into logical sections. 2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows) 3. Select **Duplicate dashboard** -### Mejores prácticas +### Best Practices * **Logical flow**: Arrange from overview to detail * **Visual hierarchy**: Larger charts for key metrics @@ -55,7 +55,7 @@ Tabs help you organize your dashboard into logical sections. Dashboards are visible to everyone who has access to your Twenty workspace. There is no private dashboard option at the moment. -### Favoritos +### Favorites You can add dashboards to your favorites for quick access. This is a personal setting—your favorites are not visible to other users. diff --git a/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/widgets.mdx b/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/widgets.mdx index 5826d77a5a..fc12e61339 100644 --- a/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/widgets.mdx +++ b/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/widgets.mdx @@ -116,7 +116,7 @@ Group data by: * Time periods (day, week, month, quarter) * Custom segments -### Estilo +### Styling Customize your charts with: diff --git a/packages/twenty-docs/l/es/user-guide/dashboards/how-tos/dashboards-faq.mdx b/packages/twenty-docs/l/es/user-guide/dashboards/how-tos/dashboards-faq.mdx index 2067d298d0..7af41b4efa 100644 --- a/packages/twenty-docs/l/es/user-guide/dashboards/how-tos/dashboards-faq.mdx +++ b/packages/twenty-docs/l/es/user-guide/dashboards/how-tos/dashboards-faq.mdx @@ -40,7 +40,7 @@ description: Frequently asked questions about dashboards in Twenty. - Aún no. Gauge charts and tables are on our roadmap and will be added in a future release. + Not yet. Gauge charts and tables are on our roadmap and will be added in a future release. diff --git a/packages/twenty-docs/l/es/user-guide/dashboards/overview.mdx b/packages/twenty-docs/l/es/user-guide/dashboards/overview.mdx index 1dfc31ae6f..d4fa305650 100644 --- a/packages/twenty-docs/l/es/user-guide/dashboards/overview.mdx +++ b/packages/twenty-docs/l/es/user-guide/dashboards/overview.mdx @@ -1,22 +1,22 @@ --- -title: Tableros +title: Dashboards description: Learn the basics of reporting and dashboards in Twenty. image: /images/user-guide/reporting/pie-chart.png --- - Tableros + Dashboards ## Understanding Dashboards Dashboards in Twenty provide a visual way to track your key performance metrics and gain insights from your CRM data. -Tableros +Dashboards ## Key Concepts -### Tableros +### Dashboards A dashboard is a collection of tabs that display your CRM data at a glance. You can create multiple dashboards for different purposes: @@ -25,7 +25,7 @@ A dashboard is a collection of tabs that display your CRM data at a glance. You * Pipeline health * Custom metrics -### Pestañas +### Tabs Tabs allow you to organize your dashboard into sections. Each tab contains one or more widgets. @@ -55,7 +55,7 @@ Widgets are individual visualizations that display specific data. Types include: 3. Give your dashboard a name 4. Add tabs to organize your content 5. Add widgets to display your data -6. Guardar +6. Save ### Adding Widgets @@ -66,14 +66,14 @@ Widgets are individual visualizations that display specific data. Types include: 5. Configure the widget settings 6. Save and view your widget -## Mejores prácticas +## Best Practices * **Start simple**: Begin with a few key metrics and add more over time * **Focus on actionable data**: Display metrics that drive decisions * **Regular review**: Check your dashboards regularly to spot trends * **Share with team**: Make dashboards visible to relevant team members -## Próximos Pasos +## Next Steps * [Widgets and visualizations](/l/es/user-guide/dashboards/capabilities/widgets) * [Dashboards FAQ](/l/es/user-guide/dashboards/how-tos/dashboards-faq) diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/error-handling.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/error-handling.mdx index 86e2ed15e2..38a1217311 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/error-handling.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/error-handling.mdx @@ -9,7 +9,7 @@ import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; After uploading your file and mapping fields, Twenty validates your data **before** importing. This allows you to catch and fix errors without affecting your existing data. -## Cómo Funciona +## How It Works 1. **Upload** your CSV file 2. **Map** your columns to Twenty fields diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/field-mapping.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/field-mapping.mdx index edae49b93e..f369554bee 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/field-mapping.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/field-mapping.mdx @@ -164,11 +164,11 @@ Phone is a nested field with multiple columns that **must be filled** Use the API name format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5` -### Campos de Relación +### Relation Fields Please see our dedicated article: [Import Relations Between Objects](/l/es/user-guide/data-migration/capabilities/import-relations) -### Campos de Selección +### Select Fields Use the **API name** of the option (not the display label): diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/file-formats.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/file-formats.mdx index ad37266af9..7187faa960 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/file-formats.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/file-formats.mdx @@ -1,48 +1,48 @@ --- -title: Formatos de archivo compatibles -description: Formatos de archivo compatibles para la importación de datos en Twenty. +title: Supported File Formats +description: File formats supported for data import in Twenty. --- -## Formatos compatibles +## Supported Formats -Twenty admite tres formatos de archivo para la importación: +Twenty supports three file formats for import: -| Formato | Extensión | Notas | -| -------------------- | --------- | ------------------------------ | -| **CSV** | .csv | Recomendado, el más compatible | -| **Excel** | .xlsx | Formato de Excel moderno | -| **Excel (heredado)** | .xls | Formato de Excel antiguo | +| Format | Extension | Notes | +| ------------------ | --------- | ---------------------------- | +| **CSV** | .csv | Recommended, most compatible | +| **Excel** | .xlsx | Modern Excel format | +| **Excel (Legacy)** | .xls | Older Excel format | -## Requisitos del archivo +## File Requirements -| Requisito | Valor | -| ----------------------- | -------------------------------------------------------- | -| **Codificación** | Se recomienda UTF-8 | -| **Límite de registros** | 10.000 registros por archivo | -| **Estructura** | La primera fila debe contener los encabezados de columna | -| **Contenido** | Un tipo de objeto por archivo | +| Requirement | Value | +| ---------------- | ------------------------------------- | +| **Encoding** | UTF-8 recommended | +| **Record limit** | 10,000 records per file | +| **Structure** | First row must contain column headers | +| **Content** | One object type per file | -## Mejores prácticas para CSV +## CSV Best Practices -* **Delimitador**: Use coma (`,`) o punto y coma (`;`) -* **Calificador de texto**: Use comillas dobles (`"`) para texto que contenga comas -* **Finales de línea**: Windows (CRLF) o Unix (LF), ambos compatibles -* **Valores vacíos**: Deje las celdas vacías; no use "NULL" ni "N/A" +* **Delimiter**: Use comma (`,`) or semicolon (`;`) +* **Text qualifier**: Use double quotes (`"`) for text containing commas +* **Line endings**: Windows (CRLF) or Unix (LF) both supported +* **Empty values**: Leave cells empty, don't use "NULL" or "N/A" -## Mejores prácticas para Excel +## Excel Best Practices -Al exportar desde Excel: +When exporting from Excel: -* Elimine las fórmulas (exporte solo valores) -* Elimine las filas vacías al final -* Asegúrese de que no haya celdas combinadas -* Use solo la primera hoja +* Remove formulas (export values only) +* Delete empty rows at the end +* Ensure no merged cells +* Use the first sheet only -## Conjuntos de datos grandes +## Large Datasets -Para conjuntos de datos de más de 10.000 registros: +For datasets larger than 10,000 records: -* Divídalos en varios archivos -* O use la [importación mediante API](/l/es/user-guide/data-migration/how-tos/import-data-via-api) para registros ilimitados +* Split into multiple files +* Or use the [API import](/l/es/user-guide/data-migration/how-tos/import-data-via-api) for unlimited records -Para migraciones muy grandes (100.000+ registros), la API es significativamente más rápida y más fiable que las importaciones CSV. +For very large migrations (100,000+ records), the API is significantly faster and more reliable than CSV imports. diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/import-relations.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/import-relations.mdx index 148b2d2ce1..a7f21e5e86 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/import-relations.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/import-relations.mdx @@ -3,7 +3,7 @@ title: Import Relations Between Objects description: Import relationships between records via CSV. --- -## Resumen +## Overview Twenty supports importing relationships between objects during CSV import. This allows you to link records (e.g., attach People to Companies) as part of your data migration. @@ -121,11 +121,11 @@ If it doesn't exist: ### Available Unique Fields for Relations -| Objeto | Unique Fields Available | +| Object | Unique Fields Available | | ------------------------------------- | --------------------------------------- | | **Companies** | `id`, `domain`, any custom unique field | | **People** | `id`, `email`, any custom unique field | -| **Miembros del espacio de trabajo** | `id`, `email` (not name) | +| **Workspace Members** | `id`, `email` (not name) | | **Other standard and custom objects** | `id`, any field marked as unique | **Linking to Workspace Members**: When the relation points to Workspace Members (your team logging into Twenty), reference them by their **email address**, not their name. diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/uniqueness-constraints.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/uniqueness-constraints.mdx index b10945dce0..5f6d05701b 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/uniqueness-constraints.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/uniqueness-constraints.mdx @@ -5,17 +5,17 @@ description: How Twenty enforces data uniqueness during import. import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## Resumen +## Overview Twenty enforces uniqueness on certain fields to prevent duplicate records and ensure data integrity. Understanding these constraints is essential for successful imports. ## Default Unique Fields -| Objeto | Unique Fields | -| -------------------------- | ---------------------- | -| **People** | `id`, `email` | -| **Companies** | `id`, `domain` | -| **Objetos personalizados** | `id` only (by default) | +| Object | Unique Fields | +| ------------------ | ---------------------- | +| **People** | `id`, `email` | +| **Companies** | `id`, `domain` | +| **Custom objects** | `id` only (by default) | The `id` field is Twenty's internal identifier, auto-generated for each record. It uses UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`). @@ -64,7 +64,7 @@ During the validation phase: -## Mejores prácticas +## Best Practices 1. **Remove duplicates** from your file before importing 2. **Check for existing records** in Twenty before importing diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/export-your-data.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/export-your-data.mdx index 6c2f3dde84..0b4ba0781e 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/export-your-data.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/export-your-data.mdx @@ -5,11 +5,11 @@ description: Complete step-by-step guide to exporting data from Twenty. import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## Resumen +## Overview Export your workspace data to CSV for backups, reporting, or migration. -**Casos de uso:** +**Use cases:** * **Regular backups** — keep copies of your data * **External reporting** — analyze data in Excel, Google Sheets, or BI tools @@ -26,7 +26,7 @@ Export your workspace data to CSV for backups, reporting, or migration. For larger exports (20,000+ records), use filters to export in batches or use the [API](/l/es/developers/extend/capabilities/apis). -### Permisos +### Permissions You need the **"Export CSV"** permission to export data. Contact your workspace admin if you don't have this option. @@ -81,7 +81,7 @@ If you only need a subset of data: | Record IDs | File attachments | | Relation IDs | Images | -### Campos de Relación +### Relation Fields Relation IDs are only exported on the **"many" side** of a relationship: @@ -202,7 +202,7 @@ Exported files may contain sensitive data: -## Próximos Pasos +## Next Steps * [How to Update Existing Records](/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import) — edit and re-import your export * [How to Import Data via API](/l/es/user-guide/data-migration/how-tos/import-data-via-api) — for large datasets diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/fix-import-errors.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/fix-import-errors.mdx index a1accce61a..b23783baa6 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/fix-import-errors.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/fix-import-errors.mdx @@ -3,7 +3,7 @@ title: Fix Import Errors description: Complete troubleshooting guide for resolving CSV import errors. --- -## Resumen +## Overview Import not working? This guide helps you identify and fix common import errors step by step. @@ -24,7 +24,7 @@ After uploading your file and mapping columns, Twenty validates your data: Click on a highlighted row to see the specific error message. Common error types: -| Mensaje de error | What It Means | +| Error Message | What It Means | | --------------------------------------------------------------------- | ------------------------------------------------------------ | | Duplicate values highlighted in yellow | Value already exists in Twenty or appears twice in your file | | `{field} is not a valid {type}` (hover on yellow cell) | Data doesn't match expected format | @@ -40,7 +40,7 @@ Follow the specific instructions below for each error type. ## Error: Duplicate Value -### Lo Que Verás +### What You'll See Rows with duplicate values are **highlighted in yellow** in the import UI before the import starts. @@ -99,7 +99,7 @@ For more details: [Uniqueness Constraints](/l/es/user-guide/data-migration/capab ## Error: Invalid Format -### Lo Que Verás +### What You'll See The cell value is highlighted in yellow. Hover over it to see the error message: @@ -113,7 +113,7 @@ The data doesn't match the expected format for that field type. ### How to Fix — By Field Type -#### Correo electrónico +#### Email **Problem:** Invalid email format **Solution:** Use format `name@domain.com` @@ -124,7 +124,7 @@ The data doesn't match the expected format for that field type. ✓ john.smith@acme.com ``` -#### Dominio +#### Domain **Problem:** Inconsistent format may cause duplicates **Solution:** Use `https://domain.com` format (recommended) @@ -137,7 +137,7 @@ The data doesn't match the expected format for that field type. All formats are valid, but `https://domain.com` is recommended because it matches the format used by email/calendar sync. Using other formats may create duplicate companies. -#### Fecha +#### Date **Problem:** Unrecognized date format **Solution:** Use consistent format throughout file @@ -148,18 +148,18 @@ The data doesn't match the expected format for that field type. ✓ 15/03/2024 (DD/MM/YYYY) ``` -#### Teléfono +#### Phone **Problem:** Missing required columns **Solution:** Include all phone columns -| Column | Ejemplo | +| Column | Example | | --------------------------------------- | ------------ | | **Phones / Primary Phone Number** | `4159095555` | | **Phones / Primary Phone Country Code** | `US` | | **Phones / Primary Phone Calling Code** | `+1` | -#### Booleano +#### Boolean **Problem:** Wrong boolean value **Solution:** Use uppercase `TRUE` or `FALSE` @@ -189,17 +189,17 @@ How to find API names: ✓ HIGH_PRIORITY ``` -#### Moneda +#### Currency **Problem:** Missing amount or currency code **Solution:** Fill both columns -| Column | Ejemplo | +| Column | Example | | --------------------- | --------- | | **Amount / Amount** | `1234.56` | | **Amount / Currency** | `USD` | -#### Número +#### Number **Problem:** Non-numeric characters **Solution:** Numbers only, period for decimals @@ -216,7 +216,7 @@ For complete format reference: [Field Mapping](/l/es/user-guide/data-migration/c ## Error: Required Field Missing -### Lo Que Verás +### What You'll See The row is highlighted in yellow with the required field cell marked. @@ -248,7 +248,7 @@ Before importing, identify required fields: ## Error: Relation Not Found -### Lo Que Verás +### What You'll See This error appears **after the import starts** — the import fails with a message like: @@ -307,7 +307,7 @@ For more details: [Import Relations](/l/es/user-guide/data-migration/capabilitie ## Error: File Too Large -### Lo Que Verás +### What You'll See This error appears **when uploading your file** — the upload is blocked entirely: @@ -403,13 +403,13 @@ Avoid errors by checking these before importing: Phone fields have all required columns Currency fields have both Amount and Currency Code -### Relaciones +### Relations Parent records imported before child records Relation columns reference existing records Domain format matches Twenty's format exactly -### Modelo de datos +### Data Model All custom fields exist in Settings → Data Model Select options exist before importing diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-companies-via-csv.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-companies-via-csv.mdx index a67c126503..204aacffe1 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-companies-via-csv.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-companies-via-csv.mdx @@ -3,11 +3,11 @@ title: Import Companies via CSV description: Complete step-by-step guide to importing companies into Twenty. --- -## Resumen +## Overview This guide walks you through importing your companies into Twenty. **Companies should be imported first** because People and Opportunities link to Companies. -## Antes de empezar +## Before You Start ### Prerequisites Checklist @@ -35,12 +35,12 @@ This guide walks you through importing your companies into Twenty. **Companies s ### Required and Recommended Fields -| Campo | Required? | Formato | Notas | +| Field | Required? | Format | Notes | | ----------------- | ----------- | -------------------- | ------------------------ | -| **Name** | Recommended | Texto | Company display name | +| **Name** | Recommended | Text | Company display name | | **Domain** | Recommended | `https://domain.com` | Unique identifier | | **Address** | Optional | Multiple columns | See below | -| **Employees** | Optional | Número | Employee count | +| **Employees** | Optional | Number | Employee count | | **Custom fields** | Optional | Varies | Must exist in Data Model | ### Domain Format @@ -180,7 +180,7 @@ See [How to Update Existing Records](/l/es/user-guide/data-migration/how-tos/upd - ¡Sí! You can import companies first, then import People later and link them using the company domain. + Yes! You can import companies first, then import People later and link them using the company domain. @@ -192,7 +192,7 @@ See [How to Update Existing Records](/l/es/user-guide/data-migration/how-tos/upd -## Solución de Problemas +## Troubleshooting Having issues? Check: diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx index 7432ddd138..c40355c0d6 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx @@ -3,11 +3,11 @@ title: Import Contacts via CSV description: Complete step-by-step guide to importing people/contacts into Twenty. --- -## Resumen +## Overview This guide walks you through importing your contacts (People) into Twenty. **Import Companies first** if you want to link People to Companies. -## Antes de empezar +## Before You Start ### Prerequisites Checklist @@ -41,15 +41,15 @@ This guide walks you through importing your contacts (People) into Twenty. **Imp ### Required and Recommended Fields -| Campo | Required? | Formato | Notas | -| ---------------------- | ----------- | ----------------- | ------------------------- | -| **Correo Electrónico** | Recommended | `name@domain.com` | Must be unique | -| **First Name** | Recommended | Texto | | -| **Last Name** | Recommended | Texto | | -| **Company** | Optional | Domain or ID | Links to existing Company | -| **Phone** | Optional | Multiple columns | See below | -| **Job Title** | Optional | Texto | | -| **Custom fields** | Optional | Varies | Must exist in Data Model | +| Field | Required? | Format | Notes | +| ----------------- | ----------- | ----------------- | ------------------------- | +| **Email** | Recommended | `name@domain.com` | Must be unique | +| **First Name** | Recommended | Text | | +| **Last Name** | Recommended | Text | | +| **Company** | Optional | Domain or ID | Links to existing Company | +| **Phone** | Optional | Multiple columns | See below | +| **Job Title** | Optional | Text | | +| **Custom fields** | Optional | Varies | Must exist in Data Model | ### Email Format @@ -65,7 +65,7 @@ This guide walks you through importing your contacts (People) into Twenty. **Imp Phone is a **nested field** requiring multiple columns: -| Column | Ejemplo | +| Column | Example | | --------------------------------------- | ------------ | | **Phones / Primary Phone Number** | `4159095555` | | **Phones / Primary Phone Country Code** | `US` | @@ -75,7 +75,7 @@ Phone is a **nested field** requiring multiple columns: Add a column with the Company's unique identifier: -| Column Name | Formato | Ejemplo | +| Column Name | Format | Example | | --------------- | ---------- | -------------------------------------- | | `companyDomain` | URL format | `https://acme.com` | | `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` | @@ -127,12 +127,12 @@ Twenty automatically tries to match your columns to fields. Review and adjust: ### Important Mapping Rules -| Column Type | Map To | Notas | -| ------------------ | ------------------------------ | ---------------------------------- | -| Company reference | **Company** relation field | Use domain OR id, not both | -| Correo electrónico | **Correo Electrónico** | Primary email address | -| Additional emails | **Emails / Additional Emails** | Array format | -| Teléfono | Separate columns | Number, Country Code, Calling Code | +| Column Type | Map To | Notes | +| ----------------- | ------------------------------ | ---------------------------------- | +| Company reference | **Company** relation field | Use domain OR id, not both | +| Email | **Email** | Primary email address | +| Additional emails | **Emails / Additional Emails** | Array format | +| Phone | Separate columns | Number, Country Code, Calling Code | @@ -225,7 +225,7 @@ See [How to Update Existing Records](/l/es/user-guide/data-migration/how-tos/upd - ¡Sí! Create a custom field marked as "unique" in your data model to store the external ID. Note: the field name `id` is reserved for Twenty's internal ID. + Yes! Create a custom field marked as "unique" in your data model to store the external ID. Note: the field name `id` is reserved for Twenty's internal ID. @@ -233,7 +233,7 @@ See [How to Update Existing Records](/l/es/user-guide/data-migration/how-tos/upd -## Solución de Problemas +## Troubleshooting Having issues? Check: diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-data-via-api.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-data-via-api.mdx index 426081f264..6318a32a6d 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-data-via-api.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-data-via-api.mdx @@ -3,7 +3,7 @@ title: Import Data via API description: When and how to use Twenty's APIs for large-scale data imports. --- -## Resumen +## Overview Twenty provides both **GraphQL** and **REST APIs** for programmatic data import. Use the API when CSV import isn't practical for your data volume or when you need automated, recurring imports. @@ -25,7 +25,7 @@ Twenty provides both **GraphQL** and **REST APIs** for programmatic data import. Twenty enforces rate limits to ensure system stability: -| Límite | Valor | +| Limit | Value | | -------------------------- | --------------------- | | **Requests per minute** | 100 | | **Records per batch call** | 60 | @@ -57,7 +57,7 @@ Twenty enforces rate limits to ensure system stability: Twenty supports two API types: -| API | Best For | Documentación | +| API | Best For | Documentation | | ----------- | ----------------------------------------------------------- | ------------------------------------------------ | | **GraphQL** | Flexible queries, fetching related data, complex operations | [API Docs](/l/es/developers/extend/capabilities/apis) | | **REST** | Simple CRUD operations, familiar REST patterns | [API Docs](/l/es/developers/extend/capabilities/apis) | @@ -79,7 +79,7 @@ Just like CSV imports, **order matters** for relations: 4. **Tasks/Notes** (can link to any of the above) 5. **Custom objects** (following their dependencies) -## Mejores prácticas +## Best Practices ### Batch Your Requests @@ -153,7 +153,7 @@ Contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Im - ¡Sí! Use update mutations (GraphQL) or PUT/PATCH requests (REST) with the record's `id`. + Yes! Use update mutations (GraphQL) or PUT/PATCH requests (REST) with the record's `id`. diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx index e05d11e73e..2ad12f1c89 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx @@ -3,7 +3,7 @@ title: Import Relations Between Objects via CSV description: Complete step-by-step guide to linking records during CSV import. --- -## Resumen +## Overview This guide walks you through importing relations between objects—for example, linking People to Companies, or Opportunities to People. @@ -23,12 +23,12 @@ The "one" side is the **parent**. The "many" side is the **child**. ### Common Relations in Twenty -| Relación | "One" Side (Parent) | "Many" Side (Child) | +| Relation | "One" Side (Parent) | "Many" Side (Child) | | ------------------------- | ------------------- | ------------------- | -| Companies → People | Empresa | Personas | -| Companies → Opportunities | Empresa | Oportunidades | -| People → Tasks | Persona | Tareas | -| People → Notes | Persona | Notas | +| Companies → People | Company | People | +| Companies → Opportunities | Company | Opportunities | +| People → Tasks | Person | Tasks | +| People → Notes | Person | Notes | ## Step 1: Identify the "One" and "Many" Sides @@ -60,12 +60,12 @@ The parent ("one" side) must exist in Twenty before you can reference it. You need to reference the parent record using a **unique identifier**. Available options: -| Parent Object | Available Unique Identifiers | -| ----------------------------------- | --------------------------------------------------------------- | -| **Companies** | `id` (UUID), `domain` (recommended), or any custom unique field | -| **People** | `id` (UUID), `email`, or any custom unique field | -| **Miembros del espacio de trabajo** | `id` (UUID), `email` (not name) | -| **Objetos personalizados** | `id` (UUID), or any field marked as unique | +| Parent Object | Available Unique Identifiers | +| --------------------- | --------------------------------------------------------------- | +| **Companies** | `id` (UUID), `domain` (recommended), or any custom unique field | +| **People** | `id` (UUID), `email`, or any custom unique field | +| **Workspace Members** | `id` (UUID), `email` (not name) | +| **Custom Objects** | `id` (UUID), or any field marked as unique | **Recommended:** Use `domain` for Companies and `email` for People. These are human-readable and easy to verify in your spreadsheet. @@ -110,11 +110,11 @@ The `companyDomain` column references the Company's domain. ### Format Requirements -| Identificador | Formato | Ejemplo | -| ------------------ | -------------- | -------------------------------------- | -| Dominio | URL format | `https://acme.com` | -| Correo electrónico | Standard email | `john@acme.com` | -| ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` | +| Identifier | Format | Example | +| ---------- | -------------- | -------------------------------------- | +| Domain | URL format | `https://acme.com` | +| Email | Standard email | `john@acme.com` | +| ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` | **Domain format matters!** @@ -184,7 +184,7 @@ Review proposal,jane@yourcompany.com - ¡Sí! Include the child record's unique identifier (e.g., `email` for People) and the new relation value. The import will update the relation. + Yes! Include the child record's unique identifier (e.g., `email` for People) and the new relation value. The import will update the relation. @@ -196,7 +196,7 @@ Review proposal,jane@yourcompany.com - The import will show an error for that row. Puedes hacerlo de las siguientes maneras: + The import will show an error for that row. You can either: * Import the parent record first, then re-import * Fix the reference value @@ -219,7 +219,7 @@ Review proposal,jane@yourcompany.com If you're getting "not found" errors but the record seems to exist, check Command Menu → See deleted records. The parent may have been soft-deleted. -## Solución de Problemas +## Troubleshooting Having issues? Check: diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx index 667ce1a133..5a845ead29 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx @@ -1,9 +1,9 @@ --- -title: Migración desde otros CRM +title: Migrating from Other CRMs description: Step-by-step guide to migrate your data from any CRM to Twenty. --- -## Resumen +## Overview This guide walks you through migrating your data from any CRM to Twenty. The process involves auditing your data, preparing your Twenty workspace, exporting from your current system, and importing into Twenty. @@ -72,7 +72,7 @@ Before importing data, prepare your Twenty workspace: If your data includes user references (Account Owner, Assignee, etc.), those users must exist in Twenty before import. Otherwise, those relations cannot be mapped. -1. Ir a **Ajustes → Miembros** +1. Go to **Settings → Members** 2. Invite all team members 3. **Wait for everyone to accept** their invitation 4. Verify all users appear in your Members list @@ -92,7 +92,7 @@ Export your data from your current CRM: 2. Contacts / People 3. Deals / Opportunities 4. Notes and Activities -5. Objetos personalizados +5. Custom objects ## Step 5: Clean and Format Your Data @@ -106,14 +106,14 @@ Open each exported CSV in a spreadsheet application and prepare it for Twenty. ### Format Fields Correctly -| Field Type | Required Format | -| ---------------------- | ------------------------------------------------- | -| **Domain** | `https://domain.com` | -| **Correo Electrónico** | `name@domain.com` (must be unique) | -| **Date** | `YYYY-MM-DD` | -| **Phone** | Three columns: Number, Country Code, Calling Code | -| **Boolean** | `TRUE` or `FALSE` (uppercase) | -| **Select fields** | Use API names, not display labels | +| Field Type | Required Format | +| ----------------- | ------------------------------------------------- | +| **Domain** | `https://domain.com` | +| **Email** | `name@domain.com` (must be unique) | +| **Date** | `YYYY-MM-DD` | +| **Phone** | Three columns: Number, Country Code, Calling Code | +| **Boolean** | `TRUE` or `FALSE` (uppercase) | +| **Select fields** | Use API names, not display labels | **Domain format is critical.** @@ -207,7 +207,7 @@ After importing data, complete your workspace configuration: * Set up saved views with filters, sorts, and column configurations * Create any kanban or calendar views you need -### Recrear flujos de trabajo +### Recreate Workflows * Rebuild your automations in **Settings → Workflows** * Start with the most critical workflows @@ -229,7 +229,7 @@ After importing data, complete your workspace configuration: * Walk through the new interface together * Document any team-specific processes -## Problemas Comunes y Soluciones +## Common Issues and Solutions | Issue | Cause | Solution | | ----------------------- | --------------------------- | ------------------------------------------------------------------------------------ | @@ -241,7 +241,7 @@ After importing data, complete your workspace configuration: See [How to Fix Import Errors](/l/es/user-guide/data-migration/how-tos/fix-import-errors) for detailed troubleshooting steps. -## Lista de verificación post-migración +## Post-Migration Checklist ### Data Integrity @@ -251,7 +251,7 @@ See [How to Fix Import Errors](/l/es/user-guide/data-migration/how-tos/fix-impor Custom fields populated No unexpected duplicates -### Configuración +### Configuration Views recreated Workflows recreated and tested @@ -283,7 +283,7 @@ See [How to Fix Import Errors](/l/es/user-guide/data-migration/how-tos/fix-impor -## ¿Necesitas Ayuda? +## Need Help? For complex migrations or large datasets: diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx index 57584facbe..56a4be072a 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx @@ -1,9 +1,9 @@ --- -title: Migración de autogestionado a la nube +title: Migrating from Self-Hosted to Cloud description: Step-by-step guide to migrate your Twenty self-hosted instance to Twenty Cloud. --- -## Resumen +## Overview This guide walks you through migrating your data from a Twenty self-hosted instance to Twenty Cloud. The process involves setting up your cloud workspace, exporting your data, and re-importing it. @@ -50,9 +50,9 @@ Export each object from your self-hosted instance: **Export in this order** (for reference when importing): -1. Empresas -2. Personas -3. Oportunidades +1. Companies +2. People +3. Opportunities 4. Custom objects (following their dependencies) 5. Tasks, Notes @@ -69,14 +69,14 @@ The exported CSVs contain user IDs from your self-hosted instance. These IDs won **Example:** -Antes: +Before: ```csv name,domain,accountOwnerId Acme Corp,https://acme.com,old-uuid-123 ``` -Después: +After: ```csv name,domain,accountOwnerEmail @@ -115,12 +115,12 @@ For each CSV file, in order: After importing data, manually recreate: -### Vistas +### Views * Recreate saved views with filters, sorts, and column configurations * Set up any kanban or calendar views -### Flujos de trabajo +### Workflows * Recreate automations in **Settings → Workflows** * Test each workflow before relying on it @@ -130,12 +130,12 @@ After importing data, manually recreate: * Configure roles in **Settings → Roles** * Assign users to appropriate roles -### Integraciones +### Integrations * Reconnect email and calendar sync for each user * Reconfigure any API integrations with new API keys -## Lista de verificación post-migración +## Post-Migration Checklist All data imported successfully Relations between objects working correctly @@ -166,6 +166,6 @@ After importing data, manually recreate: -## ¿Necesitas Ayuda? +## Need Help? For complex migrations or large datasets, contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/es/user-guide/getting-started/capabilities/implementation-services). diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx index a2d96203ce..f8793eaf22 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx @@ -1,87 +1,87 @@ --- -title: Prepara tus archivos CSV},{ -description: Guía completa paso a paso para dar formato a tus datos para importarlos en Twenty. +title: Prepare Your CSV Files +description: Complete step-by-step guide to format your data for import into Twenty. --- -## Resumen +## Overview -Esta guía te explica cómo preparar tu archivo CSV para una importación exitosa. Sigue estos pasos para evitar errores. +This guide walks you through preparing your CSV file for a successful import. Follow these steps in order to avoid errors. -## Paso 1: Comprueba los requisitos del archivo +## Step 1: Check File Requirements -Antes de empezar, asegúrate de que tu archivo cumpla estos requisitos: +Before you start, ensure your file meets these requirements: -| Requisito | Detalles | -| -------------------- | ----------------------------- | -| **Formato** | CSV, XLSX o XLS | -| **Límite de tamaño** | 10.000 registros por archivo | -| **Codificación** | Se recomienda UTF-8 | -| **Estructura** | Un tipo de objeto por archivo | +| Requirement | Details | +| -------------- | ------------------------ | +| **Format** | CSV, XLSX, or XLS | +| **Size limit** | 10,000 records per file | +| **Encoding** | UTF-8 recommended | +| **Structure** | One object type per file | -Para conjuntos de datos de más de 10.000 registros, divídelos en varios archivos o usa la [importación por API](/l/es/user-guide/data-migration/how-tos/import-data-via-api). +For datasets larger than 10,000 records, split into multiple files or use the [API import](/l/es/user-guide/data-migration/how-tos/import-data-via-api). -## Paso 2: Descarga el archivo de ejemplo +## Step 2: Download the Sample File -**Este es el paso más importante.** El archivo de ejemplo te muestra los nombres de columna y el formato exactos que Twenty espera. +**This is the most important step.** The sample file shows you the exact column names and format Twenty expects. -1. Ve a la vista del objeto (Personas, Empresas, etc.) -2. Haz clic en **⋮** → **Importar registros** -3. Haz clic en **Descargar archivo de ejemplo** -4. Utiliza este archivo como plantilla +1. Go to the object view (People, Companies, etc.) +2. Click **⋮** → **Import records** +3. Click **Download sample file** +4. Use this file as your template -**Consejo práctico:** En su lugar, exporta algunos registros existentes. Esto te proporciona ejemplos reales de cómo debe darse formato a los datos, y los nombres de las columnas se asignarán automáticamente durante la importación. +**Pro tip:** Export a few existing records instead. This gives you real examples of how data should be formatted, and the column names will map automatically during import. -## Paso 3: Eliminar valores duplicados +## Step 3: Remove Duplicate Values -Twenty exige unicidad en determinados campos. Los duplicados provocarán errores de importación. +Twenty enforces uniqueness on certain fields. Duplicates will cause import errors. -| Objeto | Campos únicos | -| -------------------------- | ------------------------------------------------------------ | -| **Personas** | `id`, `email` | -| **Empresas** | `id`, `domain` | -| **Objetos personalizados** | `id`, además de cualquier campo que hayas marcado como único | +| Object | Unique Fields | +| ------------------ | ----------------------------------------- | +| **People** | `id`, `email` | +| **Companies** | `id`, `domain` | +| **Custom objects** | `id`, plus any field you marked as unique | -**Antes de importar:** +**Before importing:** -1. Ordena tu hoja de cálculo por el campo único (correo electrónico o dominio) -2. Elimina o fusiona las filas duplicadas -3. Comprueba si hay duplicados que ya existan en Twenty +1. Sort your spreadsheet by the unique field (email or domain) +2. Remove or merge duplicate rows +3. Check for duplicates that already exist in Twenty -**Los registros eliminados lógicamente cuentan para la unicidad.** Los registros en Menú de comandos → Ver registros eliminados provocarán errores de duplicados. Elimínalos de forma permanente o restáuralos y actualízalos. +**Soft-deleted records count toward uniqueness.** Records in Command Menu → See deleted records will cause duplicate errors. Delete them permanently or restore and update them. -## Paso 4: Formatea correctamente cada tipo de campo +## Step 4: Format Each Field Type Correctly -Los distintos tipos de campos requieren formatos específicos. Aquí tienes la referencia completa: +Different field types require specific formats. Here's the complete reference: -### Campos de texto +### Text Fields -* No se requiere un formato especial -* Los espacios iniciales y finales se eliminan automáticamente +* No special formatting required +* Leading/trailing spaces are automatically trimmed -### Campos de correo electrónico +### Email Fields -* Debe tener un formato de correo electrónico válido: `name@domain.com` -* Debe ser único (sin duplicados en el archivo ni en Twenty) -* Para correos electrónicos adicionales, utiliza este formato en la columna **Emails / Additional Emails**: +* Must be valid email format: `name@domain.com` +* Must be unique (no duplicates in file or in Twenty) +* For additional emails, use this format in the **Emails / Additional Emails** column: ``` -[\"jane@twenty.com\",\"jane.doe@twenty.com\"] +["jane@twenty.com","jane.doe@twenty.com"] ``` -### Campos de dominio +### Domain Fields -* **Formato recomendado**: `https://domain.com` -* Esto coincide con el formato usado por la sincronización del buzón/calendario (evita duplicados) -* Rellena ambas columnas: +* **Recommended format**: `https://domain.com` +* This matches the format used by mailbox/calendar sync (prevents duplicates) +* Fill both columns: * **Domain / Domain Label**: `domain.com` * **Domain / Domain URL**: `https://domain.com` -* Debe ser único dentro de tu archivo y en Twenty +* Must be unique within your file and in Twenty -### Campos de teléfono +### Phone Fields -El campo de teléfono es un **campo anidado** que requiere varias columnas: +Phone is a **nested field** requiring multiple columns: -| Columna | Ejemplo | +| Column | Example | | --------------------------------------- | ------------ | | **Phones / Primary Phone Number** | `4159095555` | | **Phones / Primary Phone Country Code** | `US` | @@ -117,7 +117,7 @@ Use consistent formatting throughout your file: Currency is a **nested field** requiring two columns that **both must be filled**: -| Column | Ejemplo | +| Column | Example | | --------------------- | --------- | | **Amount / Amount** | `1234.56` | | **Amount / Currency** | `USD` | @@ -128,7 +128,7 @@ Use uppercase: `TRUE` or `FALSE` Lowercase `true` or `false` will not work. -### Campos de Selección +### Select Fields Use the **API name** of the option, not the display label. @@ -261,7 +261,7 @@ Before uploading your file, verify: | Wrong domain format | Use `https://domain.com` consistently | | Mapping multiple unique fields for relations | Map only ONE (domain OR id, not both) | -## Próximos Pasos +## Next Steps Your file is ready! Now: diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx index 3834b6fcf2..8fc9a9c108 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx @@ -3,18 +3,18 @@ title: Update Existing Records via Import description: Complete step-by-step guide to bulk updating records using CSV import. --- -## Resumen +## Overview Need to update many records at once? Instead of editing them one by one, use the CSV import to bulk update existing records. -**Casos de uso:** +**Use cases:** * Update job titles for multiple people * Change company information in bulk * Add data to new custom fields * Correct data errors across many records -## Cómo Funciona +## How It Works When you import a file containing a **unique identifier** that matches an existing record, Twenty updates that record instead of creating a duplicate. @@ -99,11 +99,11 @@ Twenty matches records by the unique identifier and updates them with new values ## Choosing the Right Unique Identifier -| Objeto | Recommended | Alternative | Notas | -| -------------------------- | -------------------- | ----------- | ---------------------------- | -| **People** | `correo Electrónico` | `id` | Email is human-readable | -| **Companies** | `dominio` | `id` | Domain is human-readable | -| **Objetos personalizados** | Any unique field | `id` | Use your custom unique field | +| Object | Recommended | Alternative | Notes | +| ------------------ | ---------------- | ----------- | ---------------------------- | +| **People** | `email` | `id` | Email is human-readable | +| **Companies** | `domain` | `id` | Domain is human-readable | +| **Custom objects** | Any unique field | `id` | Use your custom unique field | **Use only ONE unique identifier.** Don't map both `email` AND `id`. This can cause confusion and errors. @@ -127,7 +127,7 @@ After importing: **Fields not included in your import file remain unchanged.** -| Your file includes... | Resultado | +| Your file includes... | Result | | ---------------------------- | ------------------------------------------------------ | | `email`, `jobTitle` | Only `jobTitle` is updated; other fields stay the same | | `email`, `jobTitle`, `phone` | `jobTitle` and `phone` are updated | @@ -146,7 +146,7 @@ newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match) ## Common Mistakes to Avoid -| Mistake | Problem | Resultado | Solution | +| Mistake | Problem | Result | Solution | | ------------------------------ | ------------------------------------------------------- | -------------------------------------- | ----------------------------------------- | | **Changing unique identifier** | Changed `john@acme.com` to `john.smith@acme.com` | Creates new record instead of updating | Keep unique identifiers unchanged | | **Multiple unique fields** | Mapping both `email` AND `id` | Potential matching conflicts | Map only ONE unique identifier | @@ -169,7 +169,7 @@ newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match) - ¡Sí! Include the relation's unique identifier (e.g., `companyDomain`) and map it to the relation field. The relation will be updated. + Yes! Include the relation's unique identifier (e.g., `companyDomain`) and map it to the relation field. The relation will be updated. @@ -181,7 +181,7 @@ newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match) -## Mejores prácticas +## Best Practices 1. **Export first** — always start from an export to ensure correct format 2. **Backup before updating** — export your data before making bulk changes @@ -189,7 +189,7 @@ newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match) 4. **Use human-readable identifiers** — `email` and `domain` are easier to verify than `id` 5. **Only include necessary columns** — fewer columns means less chance for errors -## Solución de Problemas +## Troubleshooting Having issues? Check: diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/overview.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/overview.mdx index 2500fd7da2..ed05000a51 100644 --- a/packages/twenty-docs/l/es/user-guide/data-migration/overview.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-migration/overview.mdx @@ -1,89 +1,89 @@ --- -title: Migración de datos -description: Importe y exporte sus datos de CRM mediante archivos CSV o la API. +title: Data Migration +description: Import and export your CRM data via CSV files or API. image: /images/user-guide/import-export-data/cloud.png --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; - Migración de datos + Data Migration -## Métodos de importación +## Import Methods -Twenty admite dos métodos principales para importar datos: +Twenty supports two main methods for importing data: -| Método | Ideal para | Límite de volumen | -| ---------------------------- | ------------------------------------------------ | ---------------------------- | -| **Importación CSV** | Migraciones estándar, actualizaciones periódicas | 10.000 registros por archivo | -| **Importación mediante API** | Migraciones a gran escala, automatización | Ilimitado | +| Method | Best For | Volume Limit | +| -------------- | ------------------------------------ | ----------------------- | +| **CSV Import** | Standard migrations, regular updates | 10,000 records per file | +| **API Import** | Large-scale migrations, automation | Unlimited | -Para conjuntos de datos muy grandes (cientos de miles de registros), use la API. Nuestros [socios de implementación](/l/es/user-guide/getting-started/capabilities/implementation-services) pueden ayudar a ejecutar estos scripts si es necesario. +For very large datasets (hundreds of thousands of records), use the API. Our [implementation partners](/l/es/user-guide/getting-started/capabilities/implementation-services) can help run these scripts if needed. -## Conceptos básicos de la importación CSV +## CSV Import Basics -Puede importar datos de cualquier objeto mediante archivos CSV, XLSX o XLS. Cada archivo debe contener **solo un tipo de objeto** (por ejemplo, solo registros de Personas). +You can import data for any object using CSV, XLSX, or XLS files. Each file should contain **only one type of object** (e.g., only People records). -**Los campos deben existir antes de la importación.** Cargar un CSV crea registros, pero no crea campos. Si necesita campos personalizados, créelos primero en **Configuración → Modelo de datos**. +**Fields must exist before import.** Uploading a CSV creates records but does not create fields. If you need custom fields, create them first under **Settings → Data Model**. -### Pasos +### Steps -1. Vaya al objeto en el que desea importar datos -2. Haga clic en el icono **⋮** en la esquina superior derecha (este es el Menú de comandos) y haga clic en **Importar registros** -3. Descargue el archivo de plantilla para asegurarse de que sus datos estén en el formato esperado -4. Cargue su archivo CSV con el formato correcto -5. Asigne sus columnas a los campos de Twenty -6. Revise los errores (resaltados en amarillo) y corríjalos, editando directamente en la interfaz de usuario -7. Confirme la importación +1. Navigate to the object where you want to import data +2. Click the **⋮** icon on the top right (this is the Command Menu) and click on **Import records** +3. Download the template file to ensure your data is in the expected format +4. Upload your formatted CSV file +5. Map your columns to Twenty fields +6. Review errors (highlighted in yellow) and fix them, directly editing in the UI +7. Confirm the import -### Importación de relaciones entre objetos +### Importing relations between objects -Puede importar relaciones entre objetos utilizando la función de importación CSV. Debe hacer referencia al objeto relacionado utilizando un campo único de ese objeto: el `id`, el `email` para Personas y Miembros del espacio de trabajo, el `domain` para empresas, cualquier otro campo establecido como único en el modelo de datos para cualquier otro objeto. +You can import relations between objects using the csv import function. You need to reference the related object using a unique field from this object: the `id`, the `email` for People and Workspace Members, the `domain` for companies, any other field set as unique in the data model for any other object. -**Los registros eliminados cuentan para la unicidad.** Los registros eliminados lógicamente (visibles en Menú de comandos → Ver registros eliminados) se incluyen en las comprobaciones de unicidad. Si importa un registro con el mismo valor único que un registro eliminado, el registro eliminado se restaurará. +**Deleted records count toward uniqueness.** Soft-deleted records (visible under Command Menu → See deleted records) are included in uniqueness checks. If you import a record with the same unique value as a deleted record, the deleted record will be restored. - **¡Importa el orden de importación!** + **Import Order Matters!** - Al importar objetos relacionados, cargue los archivos en este orden: + When importing related objects, upload files in this order: - 1. **Empresas** primero (el lado "uno" de las relaciones) - 2. **Personas** segundo (vinculadas a empresas mediante companyId) - 3. **Oportunidades** tercero (vinculadas a empresas/personas) - 4. **Objetos personalizados** con relaciones al final + 1. **Companies** first (the "one" side of relationships) + 2. **People** second (linked to companies via companyId) + 3. **Opportunities** third (linked to companies/people) + 4. **Custom objects** with relations last - ¿Por qué? El lado "uno" de una relación de uno a muchos debe existir antes de que pueda hacer referencia a él. Por ejemplo, el registro de Empresa debe existir antes de importar una Persona con el ID de esa empresa. + Why? The "one" side of a one-to-many relationship must exist before you can reference it. For example, the Company record must exist before you import a Person with that company's ID. -Consulte [este artículo](/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) para ver una guía paso a paso sobre cómo proceder. +Please refer to [this article](/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for a step-by-step guide on how to proceed. -## Exportar Datos +## Export Data -Exporte los datos de su espacio de trabajo para copias de seguridad, informes o migración. +Export your workspace data for backups, reporting, or migration. -### Pasos +### Steps -1. Vaya al objeto que desea exportar -2. Configure la vista con las columnas que necesita -3. Haga clic en **⋮** → **Exportar vista** -4. Guarde el archivo CSV +1. Navigate to the object you want to export +2. Configure the view with the columns you need +3. Click **⋮** → **Export view** +4. Save the CSV file -**Solo se exportan las columnas visibles.** El archivo CSV contendrá únicamente las columnas que se muestran en su vista actual. Agregue u oculte columnas antes de exportar para controlar qué datos se incluyen. +**Only visible columns are exported.** The CSV file will only contain the columns displayed in your current view. Add or hide columns before exporting to control what data is included. -**Límites de exportación**: hasta 20.000 registros por exportación. +**Export limits**: Up to 20,000 records per export. -## Permisos +## Permissions -La importación y exportación de datos requieren permisos específicos: +Data import and export require specific permissions: -* **Importación**: requiere el permiso "Importar CSV" -* **Exportación**: requiere el permiso "Exportar CSV" +* **Import**: Requires "Import CSV" permission +* **Export**: Requires "Export CSV" permission -Póngase en contacto con el administrador de su espacio de trabajo si no tiene estos permisos. +Contact your workspace admin if you don't have these permissions. -## Próximos Pasos +## Next Steps -* [Prepare sus archivos CSV](/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files) -* [Importe relaciones entre objetos](/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) -* [Importe mediante API para conjuntos de datos grandes](/l/es/user-guide/data-migration/how-tos/import-data-via-api) +* [Prepare your CSV files](/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files) +* [Import relations between objects](/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) +* [Import via API for large datasets](/l/es/user-guide/data-migration/how-tos/import-data-via-api) diff --git a/packages/twenty-docs/l/es/user-guide/data-model/capabilities/fields.mdx b/packages/twenty-docs/l/es/user-guide/data-model/capabilities/fields.mdx index 0166d8e489..ef477158c2 100644 --- a/packages/twenty-docs/l/es/user-guide/data-model/capabilities/fields.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-model/capabilities/fields.mdx @@ -1,122 +1,122 @@ --- -title: Campos -description: Comprenda el papel de los campos y cómo gestionarlos. +title: Fields +description: Understand the role of fields and how to manage them. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## Acerca de los Campos +## About Fields -Los campos son como columnas en una hoja de cálculo. Almacenan diferentes tipos de datos como texto, números o fechas. Los campos pueden ser estándar (integrados) o personalizados (los que usted crea). +Fields are like columns in a spreadsheet. They store different types of data like text, numbers, or dates. Fields can be standard (built-in) or custom (the ones you create). -### Campos Estándar +### Standard Fields -Los campos estándar vienen integrados con Twenty para cubrir necesidades empresariales comunes. +Standard fields come built-in with Twenty to handle common business needs. -Por ejemplo, `Nombre` y `Apellido` son campos estándar en el objeto `Personas`. Almacenan datos de texto para nombres individuales. +For example, `First Name` and `Last Name` are standard fields in the `People` object. They store text data for individual names. -No puede eliminar campos estándar, pero puede desactivarlos si no los necesita. +You cannot delete standard fields, but you can deactivate them if you don't need them. -También puede personalizar las opciones de los campos estándar de tipo `SELECT`, por ejemplo, las opciones para la `Etapa` en Oportunidades. +You can also customize the options of the standard `SELECT` type fields, for example the options for the `Stage` on Opportunities. -### Campos Personalizados +### Custom Fields -Se pueden añadir campos personalizados a cualquier objeto. Puede almacenar texto, números, fechas, selecciones desplegables y más. Utilice campos personalizados para rastrear información específica de su negocio. +Custom fields can be added to any object. You can store text, numbers, dates, dropdown selections, and more. Use custom fields to track information that's specific to your business. -Por ejemplo, un campo personalizado para SpaceX podría ser `Estado Activo del Cohete`, indicando si un cohete está operativo. +For instance, a custom field for SpaceX could be `Rocket Active Status`, indicating if a rocket is operational. -## Tipos de campo +## Field Types -Twenty admite varios tipos de campo: +Twenty supports various field types: -| Tipo | Descripción | Ejemplo | -| ------------------ | --------------------------------------------------------------------- | ------------------------------- | -| Dirección | Dirección estructurada con calle, ciudad, estado, país, código postal | Dirección de la oficina | -| Array | Lista de valores de texto | Etiquetas | -| Booleano | Casilla de verificación verdadero/falso | Activo | -| Moneda | Valor monetario con código de moneda | Importe del acuerdo (USD) | -| Fecha | Valores de fecha | Fecha de cierre | -| Fecha y hora | Fecha con hora | Hora de la reunión | -| Dominio | Dominio del sitio web (usado para Empresas) | acme.com | -| Correo electrónico | Direcciones de correo electrónico (con principal + adicionales) | Correo electrónico del contacto | -| JSON | Datos JSON estructurados | Metadatos personalizados | -| Enlaces | URLs con etiquetas (principal + secundaria) | Sitio web, LinkedIn | -| Texto largo | Texto multilínea | Descripción, notas | -| Selección múltiple | Varias opciones de una lista predefinida | Etiquetas, categorías | -| Número | Valores numéricos (enteros o decimales) | Cantidad, puntuación | -| Teléfono | Números de teléfono con código de país | Teléfono del trabajo | -| Valoración | Valoración por estrellas (1-5) | Prioridad, puntuación | -| Relación | Enlaces a registros en otros objetos | Empresa → Personas | -| Selección | Una sola opción de una lista predefinida | Etapa, estado | -| Texto | Una sola línea de texto | Nombre, título | +| Type | Description | Example | +| ------------ | ----------------------------------------------------------------- | ------------------ | +| Address | Structured address with street, city, state, country, postal code | Office Address | +| Array | List of text values | Tags | +| Boolean | True/false checkbox | Is Active | +| Currency | Monetary value with currency code | Deal Amount (USD) | +| Date | Date values | Close Date | +| Date & Time | Date with time | Meeting Time | +| Domain | Website domain (used for Companies) | acme.com | +| Email | Email addresses (with primary + additional) | Contact Email | +| JSON | Structured JSON data | Custom metadata | +| Links | URLs with labels (primary + secondary) | Website, LinkedIn | +| Long Text | Multi-line text | Description, Notes | +| Multi-Select | Multiple choices from a predefined list | Tags, Categories | +| Number | Numeric values (integers or decimals) | Quantity, Score | +| Phone | Phone numbers with country code | Work Phone | +| Rating | Star rating (1-5) | Priority, Score | +| Relation | Links to records in other objects | Company → People | +| Select | Single choice from a predefined list | Stage, Status | +| Text | Single line of text | Name, Title | -## Crear un Campo Personalizado +## Create a Custom Field -Para agregar un campo personalizado a cualquier objeto, siga estos pasos: +To add a custom field to any object, follow these steps: -1. Vaya a `Configuración` en la barra lateral izquierda. -2. Vaya a `Modelo de Datos`, luego seleccione el objeto que desea personalizar. -3. Proceda haciendo clic en `Agregar Campo`. -4. Elija un nombre de campo y tipo que se adapten a sus requisitos. Considere agregar una descripción de campo para una mejor comprensión. +1. Go to `Settings` in the left sidebar. +2. Go to `Data Model`, then select the object you wish to customize. +3. Proceed by clicking on `Add Field`. +4. Choose a field name and type that suits your requirements. Consider adding a field description for better understanding. -Su nuevo campo creado ahora está disponible dentro de los campos de la aplicación. Para mostrarlo en una vista específica, haga clic en el menú de opciones, luego seleccione `Campos`. +Your newly created field is now available within the application's fields. To display it on a specific view, click on the options menu, then select `Fields`. - + -**Forma rápida:** Haga clic en el botón **+** en la esquina superior derecha de cualquier tabla de objetos, luego seleccione `Personalizar campos`. Esto lo lleva directamente a la configuración del Modelo de Datos. +**Quick way:** Click the **+** button at the top right of any object table, then select `Customize fields`. This takes you directly to the Data Model settings. -## Desactivar un campo +## Deactivate a Field -Puede desactivar un campo para ocultarlo de la aplicación sin perder sus datos. Piense en ello como ocultar el campo en lugar de eliminarlo. +You can deactivate a field to hide it from the app without losing your data. Think of it as hiding the field rather than deleting it. -Así es como puede hacerlo: +Here's how you can do it: -1. Encuentre el campo que desea desactivar en la configuración de su objeto. +1. Find the field you want to deactivate in your object settings. -2. Haga clic en los tres puntos `⋮` junto al campo para abrir el menú. +2. Click the three dots `⋮` next to the field to open the menu. -3. Seleccione `Desactivar` en el menú desplegable. +3. Select `Deactivate` from the dropdown. -¿Qué ocurre cuando desactiva un campo? +What happens when you deactivate a field? -1. **En la aplicación:** El campo desaparece y no puede añadir nuevos valores. +1. **In the app:** The field disappears and you can't add new values to it. -2. **Relaciones existentes:** Si es un campo de relación, las conexiones existentes permanecen, pero no puede crear nuevas. +2. **Existing relationships:** If it's a relation field, existing connections stay but you can't create new ones. -3. **Acceso API:** Aún puede acceder al campo y sus datos a través de la API. +3. **API access:** You can still access the field and its data through the API. -Puede reactivar los Campos Estándar y Personalizados o tener la opción de eliminarlos permanentemente. +You can reactivate Standard and Custom Fields or have the option to permanently delete them. -## Hacer Campos Únicos +## Make Fields Unique -Haga un campo único para asegurar que registros distintos no puedan tener el mismo valor. Por ejemplo, las direcciones de correo electrónico son únicas para cada persona. +Make a field unique to ensure distinct records cannot have the same value. For example, email addresses are unique for each person. -Si recibe un error al establecer la unicidad, verifique los valores duplicados en sus datos (incluso registros eliminados). +If you get an error when setting uniqueness, check for duplicate values in your data (including deleted records). -## Mejores Prácticas de Configuración de Campos +## Field Configuration Best Practices -### Convenciones y Limitaciones de Nombres +### Naming Conventions and Limitations -* **Los nombres singulares y plurales deben ser distintos**: Nuestra API GraphQL necesita nombres distintos para mutaciones -* **Nombres de campos protegidos**: algunos nombres están reservados para uso del sistema (p. ej., `Type`, `Application`) +* **Singular and plural named must be distinct**: Our GraphQL API needs distinct names for mutations +* **Protected field names**: some names are reserved for system usage (e.g., `Type`, `Application`) -### Campos de Moneda y Teléfono +### Currency and Phone Fields -* **Moneda predeterminada:** se puede configurar a través del modelo de datos -* **Códigos de país predeterminados:** se pueden configurar para campos de teléfono a través del modelo de datos +* **Default currency**: can be configured via the data model +* **Default country codes**: can be configured for phone fields via the data model -### Campos de Selección +### Select Fields -* **Se puede seleccionar una opción predeterminada** para cada campo de Selección +* **A default option can be selected** for each Select field -### Campos de Texto del Registro +### Record Text Fields -* **Cada objeto tiene un campo principal de visualización**: Este campo aparece en la columna más a la izquierda y representa el registro cuando se vincula a otros objetos. Debe ser un campo de texto. Por ejemplo, las Personas utilizan `Nombre` como el campo principal, por lo que cuando vincula una persona a una empresa, verá su nombre en la vista de la empresa. +* **Each object has one main display field**: This field appears in the leftmost column and represents the record when linked to other objects. It must be a text field. For example, People uses `Name` as the main field, so when you link a person to a company, you'll see their name in the company's view. diff --git a/packages/twenty-docs/l/es/user-guide/data-model/capabilities/objects.mdx b/packages/twenty-docs/l/es/user-guide/data-model/capabilities/objects.mdx index 7259a445ef..f2f1105277 100644 --- a/packages/twenty-docs/l/es/user-guide/data-model/capabilities/objects.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-model/capabilities/objects.mdx @@ -1,5 +1,5 @@ --- -title: Objetos +title: Objects description: Learn about standard and custom objects in Twenty. --- @@ -7,46 +7,46 @@ import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; ## Standard Objects -Objetos estándar son entidades predefinidas en tu espacio de trabajo para ayudarte a comenzar. Forman parte de un modelo de datos compartido accesible para todos los usuarios de Twenty. Puedes usarlos tal cual, personalizarlos o desactivarlos. +Standard objects are predefined entities in your workspace to help you get started. They're part of a shared data model accessible to all users of Twenty. You can use them as-is, customize them or deactivate them. -### Personas +### People -El objeto `Personas` almacena tus contactos. Incluye detalles de contacto y el historial de interacciones, para que puedas ver todas tus interacciones con clientes en un solo lugar. +The `People` object stores your contacts. It includes contact details and interaction history, so you can see all your customer interactions in one place. -### Empresa +### Company -El objeto `Empresas` almacena las cuentas de tu negocio. Incluye detalles como industria, tamaño y ubicación. Las empresas se conectan tanto a los objetos `Personas` como `Oportunidades`. +The `Companies` object stores your business accounts. It includes details like industry, size and location. Companies connect to both `People` and `Opportunities` objects. -### Oportunidades +### Opportunities -El objeto `Oportunidades` almacena datos relacionados con acuerdos. It tracks the progression of potential sales, from prospecting to closure, recording stages, deal sizes, associated account, and expected close date. Puedes ver tu canal de ventas en un diseño kanban. +The `Opportunities` object stores deal-related data. It tracks the progression of potential sales, from prospecting to closure, recording stages, deal sizes, associated account, and expected close date. You can view your sales pipeline in a kanban layout. -### Notas +### Notes The `Notes` object stores free-form notes that can be attached to People, Companies, Opportunities, and other records. Use notes to capture meeting summaries, important details, or any contextual information. -### Tareas +### Tasks The `Tasks` object stores to-dos and action items. Tasks can be linked to People, Companies, Opportunities, and other records. Track due dates, assignees, and completion status to stay on top of your follow-ups. -## Objetos personalizados +## Custom Objects -Los objetos personalizados te permiten almacenar información que es única para tu organización y que los objetos estándar no pueden manejar. Por ejemplo, si eres SpaceX, puedes querer crear un objeto personalizado para Cohetes y Lanzamientos. +Custom objects let you store information that's unique to your organization and that standard objects can't handle. For example, if you're SpaceX, you may want to create a custom object for Rockets and Launches. ### Creating a New Custom Object -Para crear un nuevo objeto personalizado: +To create a new custom object: -1. Ve a Configuración en la barra lateral a la izquierda. -2. Under Workspace, go to Data model. Aquí podrás ver una visión general de todos tus objetos Estándar y Personalizados (tanto activos como desactivados). +1. Go to Settings in the sidebar on the left. +2. Under Workspace, go to Data model. Here you'll be able to see an overview of all your existing Standard and Custom objects (both active and disabled). -3. Haz clic en `+ Nuevo objeto` en la parte superior. Ingresa el nombre (tanto singular como plural), elige un ícono y añade una descripción para tu objeto personalizado y presiona Guardar (en la parte superior derecha). Usando Listado como un ejemplo de objeto personalizado, el singular sería "listado" y el plural sería "listados" junto con una descripción como "Listados que los anfitriones crearon para mostrar sus propiedades." +3. Click on `+ New object` at the top. Enter the name (both singular and plural), choose an icon, and add a description for your custom object and hit Save (at the top right). Using Listing as an example of custom object, the singular would be "listing" and the plural would be "listings" along with a description like "Listings that hosts created to showcase their property." 4. Your custom object is now created and will appear in your sidebar. You can start adding records to it right away. @@ -70,7 +70,7 @@ To bring back a deactivated object: 3. Click the toggle to reactivate it 4. The object and all its data will be restored -## Mejores prácticas +## Best Practices ### When to Create Custom Objects diff --git a/packages/twenty-docs/l/es/user-guide/data-model/capabilities/relation-fields.mdx b/packages/twenty-docs/l/es/user-guide/data-model/capabilities/relation-fields.mdx index 6d68918b34..ddcd3c709e 100644 --- a/packages/twenty-docs/l/es/user-guide/data-model/capabilities/relation-fields.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-model/capabilities/relation-fields.mdx @@ -1,5 +1,5 @@ --- -title: Campos de Relación +title: Relation Fields description: Connect records across different objects using relation fields. --- @@ -56,7 +56,7 @@ Many records in Object A can be linked to many records in Object B. * **Field name on source object**: The name of the relation field on the object you're editing * **Field name on destination object**: The name of the relation field that will appear on the target object * Relation type (one-to-many, many-to-one) -7. Haga clic en **Guardar** +7. Click **Save** ## Standard Relations @@ -64,11 +64,11 @@ Twenty comes with pre-built relations between standard objects: | From Object | To Object | Relation Type | | ------------- | --------- | ------------- | -| Personas | Empresas | Many-to-One | -| Oportunidades | Empresas | Many-to-One | -| Oportunidades | Personas | Many-to-One | +| People | Companies | Many-to-One | +| Opportunities | Companies | Many-to-One | +| Opportunities | People | Many-to-One | -## Mejores prácticas +## Best Practices ### Planning Relations diff --git a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-fields.mdx b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-fields.mdx index be0e5f9a40..5d4e98bc80 100644 --- a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-fields.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-fields.mdx @@ -13,7 +13,7 @@ Custom fields let you capture information specific to your business. Add them to 4. Choose a **field type** (see [Fields](/l/es/user-guide/data-model/capabilities/fields) for all types) 5. Enter the **field name** and optional description 6. Configure field-specific settings (see below) -7. Haga clic en **Guardar** +7. Click **Save** **Quick method:** Click the **+** at the end of column headers in any table view → **Customize fields**. diff --git a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-objects.mdx b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-objects.mdx index a7cde059e2..eee722f9dc 100644 --- a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-objects.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-objects.mdx @@ -18,7 +18,7 @@ Custom objects let you store information unique to your business that standard o * **Plural name** (e.g., "Listings") * **Icon** * **Description** (optional) -4. Haga clic en **Guardar** +4. Click **Save** Your object appears in the sidebar immediately. diff --git a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-relation-fields.mdx b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-relation-fields.mdx index 553f883996..8c153c3962 100644 --- a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-relation-fields.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-relation-fields.mdx @@ -9,7 +9,7 @@ Relation fields connect records from different objects—for example, linking Pe **Relation names cannot be changed after creation** (they affect the API). Plan your names carefully. -## Antes de empezar +## Before You Start Decide: @@ -29,7 +29,7 @@ See [Relation Fields](/l/es/user-guide/data-model/capabilities/relation-fields) 5. Choose the **target object** 6. Select **One-to-Many** or **Many-to-One** 7. Enter field names for **both sides** of the relation -8. Haga clic en **Guardar** +8. Click **Save** ## Example: People → Companies diff --git a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/customize-your-data-model.mdx b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/customize-your-data-model.mdx index ef09faddb6..aff43da0a3 100644 --- a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/customize-your-data-model.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/customize-your-data-model.mdx @@ -1,22 +1,22 @@ --- -title: Personaliza tu modelo de datos -description: Descripción general de las opciones de personalización del modelo de datos. +title: Customize Your Data Model +description: Overview of data model customization options. --- -El modelo de datos de Twenty es totalmente personalizable. Crea objetos, campos y relaciones que se ajusten a tu empresa. +Twenty's data model is fully customizable. Create objects, fields, and relations to match your business. -## Enlaces rápidos +## Quick Links -| Quiero... | Guía | -| -------------------------- | ----------------------------------------------------------------------------------------- | -| Crear un nuevo objeto | [Cómo crear objetos personalizados](/l/es/user-guide/data-model/how-tos/create-custom-objects) | -| Agregar campos a un objeto | [Cómo crear campos personalizados](/l/es/user-guide/data-model/how-tos/create-custom-fields) | -| Conectar objetos entre sí | [Cómo crear campos de relación](/l/es/user-guide/data-model/how-tos/create-relation-fields) | +| I want to... | Guide | +| ------------------------ | -------------------------------------------------------------------------------------- | +| Create a new object | [How to Create Custom Objects](/l/es/user-guide/data-model/how-tos/create-custom-objects) | +| Add fields to an object | [How to Create Custom Fields](/l/es/user-guide/data-model/how-tos/create-custom-fields) | +| Connect objects together | [How to Create Relation Fields](/l/es/user-guide/data-model/how-tos/create-relation-fields) | -## Más información +## Learn More -* [Comprender tu modelo de datos](/l/es/user-guide/data-model/overview) — conceptos clave y consejos de planificación -* [Objetos](/l/es/user-guide/data-model/capabilities/objects) — objetos estándar vs personalizados -* [Campos](/l/es/user-guide/data-model/capabilities/fields) — todos los tipos de campo -* [Campos de relación](/l/es/user-guide/data-model/capabilities/relation-fields) — conectar objetos -* [Preguntas frecuentes sobre el modelo de datos](/l/es/user-guide/data-model/how-tos/data-model-faq) — preguntas comunes +* [Understanding Your Data Model](/l/es/user-guide/data-model/overview) — key concepts and planning tips +* [Objects](/l/es/user-guide/data-model/capabilities/objects) — standard vs custom objects +* [Fields](/l/es/user-guide/data-model/capabilities/fields) — all field types +* [Relation Fields](/l/es/user-guide/data-model/capabilities/relation-fields) — connecting objects +* [Data Model FAQ](/l/es/user-guide/data-model/how-tos/data-model-faq) — common questions diff --git a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/data-model-faq.mdx b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/data-model-faq.mdx index 59b01a0e1f..39baa4df9c 100644 --- a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/data-model-faq.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/data-model-faq.mdx @@ -1,16 +1,16 @@ --- -title: Preguntas Frecuentes del Modelo de Datos +title: Data Model FAQ description: Frequently asked questions about Twenty's data model. --- -## Gestión de Objetos +## Object Management Yes, custom objects can be deleted. You can also deactivate them first, which hides the object and its data from the interface while preserving the data. - + No, standard objects cannot be deleted. You can only deactivate them, which hides them from the interface but preserves the data. @@ -26,33 +26,33 @@ description: Frequently asked questions about Twenty's data model. Yes, you can change the icon for both standard and custom objects in **Settings → Data Model**. - - Aún no. La ordenación de objetos en la navegación está actualmente fijada, pero esta función está prevista para una futura versión. + + Not yet. Object ordering in the navigation is currently fixed, but this feature is planned for a future release. - - Todos los objetos activos aparecen en la navegación. Puedes desactivar los objetos que no necesites en **Configuración → Modelo de Datos**. + + All active objects appear in the navigation. You can deactivate objects you don't need under **Settings → Data Model**. -## Capacidades de Campos +## Field Capabilities No, field types cannot be changed after creation. If you need a different type, create a new field with the correct type, migrate your data, then deactivate the old field. - - Nuestra API de GraphQL usa ambas formas para diferentes operaciones: + + Our GraphQL API uses both forms for different operations: - * `createPerson` (singular) para acciones de registro único - * `createPeople` (plural) para operaciones en masa + * `createPerson` (singular) for single record actions + * `createPeople` (plural) for bulk operations - Esto crea limitaciones cuando las formas singulares y plurales son iguales, pero mejora la experiencia del desarrollador. + This creates limitations when singular and plural forms are the same, but it improves the developer experience. - - Ciertos nombres de campo como `Tipo` o `Aplicación` están reservados para uso del sistema. Elige nombres alternativos como `Categoría` o `Clasificación`. + + Certain field names like `Type` or `Application` are reserved for system use. Choose alternative names like `Category` or `Classification` instead. @@ -72,27 +72,27 @@ description: Frequently asked questions about Twenty's data model. * **Required**: The field must have a value (not currently supported for custom fields) - - Los campos de fórmula llegarán en **Q1 2026**. Mientras tanto, puedes usar flujos de trabajo para calcular y actualizar automáticamente los valores de los campos. + + Formula fields are coming in **Q1 2026**. In the meantime, you can use workflows to calculate and update field values automatically. - - Los campos anidados llegarán en **Q1 2026**. Actualmente, puedes usar flujos de trabajo para traer valores de campo de objetos relacionados. Por ejemplo, para mostrar la industria de una empresa en un registro de Persona, crea un campo personalizado en Personas y usa un flujo de trabajo para sincronizar el valor. + + Nested fields are coming in **Q1 2026**. Currently, you can use workflows to bring field values from related objects. For example, to display a company's industry on a Person record, create a custom field on People and use a workflow to synchronize the value. - - El reordenamiento de campos estará disponible con diseños personalizados en **Q4 2025**. Currently, fields appear in alphabetical order. + + Field reordering will be available with custom layouts in **Q4 2025**. Currently, fields appear in alphabetical order. -## Relaciones +## Relations - ¡Sí! Self-referencing relations are supported and recommended for use cases like account hierarchies. For example, create a relation from Companies to Companies to track parent/child accounts. + Yes! Self-referencing relations are supported and recommended for use cases like account hierarchies. For example, create a relation from Companies to Companies to track parent/child accounts. - + Many-to-many relationships are coming in **H1 2026**. Currently, create an intermediate object with two one-to-many relationships as a workaround. For example, to link People and Projects (many-to-many), create a "Project Assignments" object with: @@ -122,15 +122,15 @@ description: Frequently asked questions about Twenty's data model. -## Acceso y Permisos +## Access and Permissions - + Go to **Settings → Data Model** to view and edit all your objects and fields. - - Comunícate con tu administrador de espacio de trabajo. El acceso al modelo de datos suele estar restringido solo a administradores. + + Reach out to your workspace administrator. Data model access is usually restricted to administrators only. @@ -150,6 +150,6 @@ description: Frequently asked questions about Twenty's data model. -## ¿Necesitas más ayuda? +## Need More Help? Check our [Implementation Services](/l/es/user-guide/getting-started/capabilities/implementation-services) for help with complex data model design. diff --git a/packages/twenty-docs/l/es/user-guide/data-model/overview.mdx b/packages/twenty-docs/l/es/user-guide/data-model/overview.mdx index 7aae118500..f60f73ba25 100644 --- a/packages/twenty-docs/l/es/user-guide/data-model/overview.mdx +++ b/packages/twenty-docs/l/es/user-guide/data-model/overview.mdx @@ -1,20 +1,20 @@ --- -title: Modelo de datos +title: Data Model description: Learn what a data model is and how to design one that fits your business. image: /images/user-guide/fields/custom_data_model.png --- - Modelo de datos + Data Model ## What is a Data Model? -Un modelo de datos es la estructura que define cómo se organiza la información en tu CRM. Think of it as the **blueprint** of your customer data — you design it once, then fill it with your actual data. +A data model is the structure that defines how information is organized in your CRM. Think of it as the **blueprint** of your customer data — you design it once, then fill it with your actual data. ## Key Concepts -### Objetos +### Objects **Objects** are the main categories of data in your CRM. Each object represents a type of thing you want to track. @@ -28,25 +28,25 @@ Twenty comes with standard objects: You can also create **custom objects** for anything specific to your business (e.g., Projects, Subscriptions, Events). -### Campos +### Fields **Fields** are the properties or attributes that describe each object. They store the actual information. For example, the **People** object has fields like: -* Nombre -* Correo electrónico -* Teléfono -* Título del puesto +* Name +* Email +* Phone +* Job Title * Company (a relation to the Companies object) Fields have different **types**: text, number, date, select, multi-select, relation, and more. You can add custom fields to any object. -### Registros +### Records **Records** are the individual entries within an object — the actual data you create and manage. -Por ejemplo: +For example: * "John Smith" is a **record** in the People object * "Acme Corp" is a **record** in the Companies object @@ -56,14 +56,14 @@ Por ejemplo: | Data Model Concept | Real-World Analogy | | ------------------ | ------------------------------------------ | | **Objects** | Sections in a book (the categories) | -| **Campos** | Columns in a spreadsheet (the properties) | +| **Fields** | Columns in a spreadsheet (the properties) | | **Records** | Rows in a spreadsheet (the actual entries) | You design the data model (objects + fields) once, then create many records within that structure. ## Why Customize Your Data Model? -Cada empresa funciona de manera diferente. Customizing your data model means you can shape Twenty around **your** processes instead of forcing yours into a rigid system. +Every business works differently. Customizing your data model means you can shape Twenty around **your** processes instead of forcing yours into a rigid system. Twenty offers full flexibility: @@ -107,7 +107,7 @@ If the concept has its own lifecycle, properties, or relationships, it deserves * **Subscriptions** — connect companies, products, and invoices * **Events** — involve attendees and follow-up actions -Estos van más allá de un solo campo porque tienen su propio conjunto de datos y relaciones. +These go beyond a single field because they carry their own data and relationships. ### 4. Create an Object When Records Are Open-Ended @@ -145,7 +145,7 @@ Start with fields. Move to new objects only when you feel the limits: ## Questions to Guide Your Choice -Pregúntate: +Ask yourself: Is this just a property of something I already have, or does it need its own properties? Will I ever need to track multiple of these per record, without knowing how many? @@ -167,7 +167,7 @@ If the answer is "yes" to one or more, it's probably time for a new object. Access to the data model is usually restricted to administrators. Contact your workspace admin if you need access. -## Próximos Pasos +## Next Steps Once you've planned your data model: @@ -175,6 +175,6 @@ Once you've planned your data model: * [How to Create Custom Fields](/l/es/user-guide/data-model/how-tos/create-custom-fields) * [How to Create Relation Fields](/l/es/user-guide/data-model/how-tos/create-relation-fields) -## ¿Necesitas Ayuda? +## Need Help? Our team can help you design and create the data model you need. Discover our [Implementation Services](/l/es/user-guide/getting-started/capabilities/implementation-services). diff --git a/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/glossary.mdx b/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/glossary.mdx index cab9b4c39f..71ac91622f 100644 --- a/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/glossary.mdx +++ b/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/glossary.mdx @@ -1,11 +1,11 @@ --- -title: Glosario -description: Familiarízate con la terminología esencial utilizada en Twenty. +title: Glossary +description: Get familiar with essential terminology used in Twenty. --- ## API -La API (Interfaz de Programación de Aplicaciones) permite conectar Twenty con otros sistemas de software y construir integraciones personalizadas. +API (Application Programming Interface) allows you to connect Twenty with other software systems and build custom integrations. ## Apps @@ -15,76 +15,76 @@ Apps are custom extensions built as code that can define data models and serverl Code Actions are workflow steps that let you write custom JavaScript to transform data, make calculations, or perform complex logic that isn't possible with built-in actions. -## Menú de Comandos +## Command Menu -El Menú de Comandos es una interfaz de acceso rápido (se abre con `Cmd + K` en Mac y `Ctrl + K` en Windows) que te permite realizar acciones, crear registros y navegar por tu espacio de trabajo de manera eficiente. +The Command Menu is a quick-access interface (opened with `Cmd + K` on Mac and `Ctrl + K` on Windows) that lets you perform actions, create records, and navigate your workspace efficiently. -## Empresa y Personas +## Company & People -El CRM tiene dos tipos fundamentales de registros: +The CRM has two fundamental types of records: -* Una `Empresa` representa un negocio u organización. -* `Personas` representan los clientes o prospectos actuales de tu empresa. +* A `Company` represents a business or organization. +* `People` represent your company's current and prospective customers or clients. -## Campos Personalizados +## Custom Fields -Los Campos Personalizados son campos de datos que creas para capturar información específica según las necesidades y procesos de tu negocio. +Custom Fields are data fields you create to capture information specific to your business needs and processes. -## Modelo de datos +## Data Model -Un Modelo de Datos es la estructura que define cómo se organiza la información en tu CRM, incluyendo qué objetos existen, sus propiedades (campos) y cómo se relacionan entre ellos. +A Data Model is the structure that defines how information is organized in your CRM, including what objects exist, their properties (fields), and how they relate to each other. -## Favoritos +## Favorites -Los Favoritos son registros que has marcado para acceso rápido, apareciendo en tu barra lateral para una navegación instantánea a datos importantes. +Favorites are records you've marked for quick access, appearing in your sidebar for instant navigation to important data. -## Campo +## Field -Un campo se refiere a un área específica donde se almacenan datos particulares de una entidad. +A field refers to a specific area where particular data is stored for an entity. ## Integration Integrations are built-in tools that allow you to link Twenty with other software or systems. -## Iterador +## Iterator An Iterator is a workflow action that loops through an array of items, executing subsequent actions for each item in the list. ## Kanban -Un `Kanban` es una manera visual de rastrear los procesos de tu negocio utilizando tarjetas y columnas. Cada columna representa una etapa en tu proceso (por ejemplo: nuevo, en curso, ganado, perdido), y se mueven los registros a través de estas etapas a medida que progresan. +A `Kanban` is a visual way to track your business processes using cards and columns. Each column represents a stage in your process (for example: new, ongoing, won, lost), and you move records through these stages as they progress. -## Objeto +## Object -Un Objeto es una estructura de datos que representa un tipo específico de entidad en tu CRM (como Personas, Empresas u Oportunidades). Los Objetos pueden ser estándar (integrados) o personalizados (creados por ti). +An Object is a data structure that represents a specific type of entity in your CRM (like People, Companies, or Opportunities). Objects can be standard (built-in) or custom (created by you). -## Oportunidades +## Opportunities -Las Oportunidades en el CRM de Twenty son posibles tratos o ventas con cuentas o contactos. +Opportunities in Twenty CRM are potential deals or sales with accounts or contacts. -## Registro +## Record -Un Registro indica una instancia de un objeto, como una cuenta o contacto específico. +A Record indicates an instance of an object, like a specific account or contact. -## Campos de Relación +## Relation Fields -Los Campos de Relación crean conexiones entre diferentes objetos, permitiendo vincular registros (como conectar una Persona a una Empresa). +Relation Fields create connections between different objects, allowing you to link records together (like connecting a Person to a Company). -## Campos Estándar +## Standard Fields -Los Campos Estándar son campos de datos preconstruidos que vienen con los objetos por defecto y proporcionan funcionalidad común en todos los espacios de trabajo. +Standard Fields are pre-built data fields that come with objects by default and provide common functionality across all workspaces. -## Tareas +## Tasks -Las Tareas en el CRM de Twenty son actividades asignadas relacionadas con contactos, cuentas u oportunidades. +Tasks in Twenty CRM are assigned activities relating to contacts, accounts, or opportunities. -## Disparadores +## Triggers Triggers are the starting point of a workflow — the event or condition that initiates the automation. Examples include record creation, record updates, webhooks, or scheduled times. -## Vistas +## Views -Puedes personalizar la visualización de tus registros usando vistas, configurando diferentes filtros, diseños y opciones de clasificación para cada vista. +You can customize the display of your records using views, setting different filters, layouts and sorting options for each view. ## Upsert @@ -92,17 +92,17 @@ Upsert is an operation that combines "update" and "insert" — it updates an exi ## Webhooks -Los Webhooks son mensajes automatizados que se envían desde Twenty a otras aplicaciones cuando ocurren eventos específicos, habilitando la sincronización de datos en tiempo real. +Webhooks are automated messages sent from Twenty to other applications when specific events occur, enabling real-time data synchronization. -## Flujos de trabajo +## Workflows -Los Flujos de Trabajo son procesos automatizados que desencadenan acciones basadas en condiciones específicas, ayudándote a automatizar tareas repetitivas y procesos empresariales. +Workflows are automated processes that trigger actions based on specific conditions, helping you automate repetitive tasks and business processes. -## Espacio de trabajo +## Workspace -Un `Espacio de Trabajo` típicamente representa una empresa que usa Twenty. Contiene todos los registros y datos que tú y los miembros de tu equipo añaden a Twenty. -Tiene un único nombre de dominio, que generalmente es el nombre de dominio que tu empresa utiliza para las direcciones de correo electrónico de los empleados. +A `Workspace` typically represents a company using Twenty. It holds all the records and data that you and your team members add to Twenty. +It has a single domain name, which is typically the domain name your company uses for employee email addresses. -## Miembros del espacio de trabajo +## Workspace Members -Los Miembros del Espacio de Trabajo son los usuarios de Twenty de tu equipo que tienen acceso a tu espacio de trabajo. Pueden asignarse como propietarios o responsables de registros. +Workspace Members are the Twenty users from your team who have access to your workspace. They can be assigned as owners or assignees for records. diff --git a/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/implementation-services.mdx b/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/implementation-services.mdx index c466d96332..706de4d2a0 100644 --- a/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/implementation-services.mdx +++ b/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/implementation-services.mdx @@ -1,16 +1,16 @@ --- -title: Servicios de Implementación -description: Ya sea que necesites ayuda para comenzar o crear personalizaciones avanzadas, tenemos una solución. +title: Implementation Services +description: Whether you need help getting started or creating advanced customizations, we have a solution. --- -## Paquetes de Incorporación +## Onboarding Packs Get help from our core team to set up your Twenty workspace with our 4-hour Onboarding packs: -* **Diseño del Modelo de Datos**: Diseña y crea tu modelo de datos personalizado con objetos, campos y relaciones -* **Migración de Datos**: Migra tus datos existentes desde tu CRM actual a Twenty -* **Creación de Flujos de Trabajo**: Crea flujos de trabajo personalizados para apoyar tus procesos de negocio +* **Data Model Design**: Design and create your custom data model with objects, fields, and relationships +* **Data Migration**: Migrate your existing data from your current CRM to Twenty +* **Workflow Creation**: Create custom workflows to support your business processes -## Socios de Implementación +## Implementation Partners -Trabaja con socios certificados de Twenty para personalizaciones e integraciones más avanzadas. Reach out to our team via [contact@twenty.com](mailto:contact@twenty.com) to be matched with our partners. +Work with certified Twenty partners for more advanced customizations and integrations. Reach out to our team via [contact@twenty.com](mailto:contact@twenty.com) to be matched with our partners. diff --git a/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/what-is-twenty.mdx b/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/what-is-twenty.mdx index 70c1f56ad0..102a0860c2 100644 --- a/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/what-is-twenty.mdx +++ b/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/what-is-twenty.mdx @@ -1,42 +1,42 @@ --- -title: ¿Qué es Twenty +title: What is Twenty description: Twenty is an open-source CRM that gives you the building blocks to create exactly what your business needs. --- -## Visión +## Vision -Crear un buen CRM es difícil porque es un acto de equilibrio. -Para cada negocio, los requisitos parecen sencillos, pero las necesidades de todos son distintas. -El resultado es un CRM que es demasiado básico, o uno que intenta ser un todoterreno pero termina siendo un maestro de nada. +Creating a good CRM is hard because it's a balancing act. +For each business, the requirements seem straightforward, yet everyone's needs are distinct. +The result is a CRM that's either too basic, or one that's attempting to be a jack-of-all-trades but ending up as a master of none. -Al principio, Twenty parece como la mayoría de los CRMs que ya conoces: puedes rastrear ofertas, organizar contactos, gestionar tareas y notas. -**Pero lo que lo distingue es nuestro enfoque de extensibilidad. Estamos construyendo una plataforma abierta que proporciona los bloques de construcción para que resuelvas los problemas únicos de tu negocio.** +At first, Twenty looks like most CRMs you already know: you can track deals, organize contacts, manage tasks and notes. +**But what sets it apart is our approach to extensibility. We are building an open platform that provides the building blocks for you to solve your unique business problems.** -Priorizamos principios universales y patrones comunes sobre las listas de características. -No intentamos tener todas las respuestas, sino que empoderamos a los usuarios para encontrar lo que mejor les funciona. -El código abierto es la base de nuestro enfoque, asegurando que Twenty evoluciona con su comunidad, para su comunidad. +We prioritize universal principles and common patterns over feature lists. +We don't try to have all the answers and instead empower users to find what works best for them. +Open-source is the bedrock of our approach, ensuring that Twenty evolves with its community, for its community. -## Beneficios +## Benefits -**Personalizable:** Diseñado para adaptarse a las necesidades de tu negocio. +**Customizable:** Designed to fit your business needs. -**Impulsado por la comunidad:** Construido y mantenido por una gran comunidad de código abierto. +**Community-driven:** Built and maintained by a large open-source community. -**Económico:** Nunca estará atado a un proveedor, porque siempre puede autoalojar. +**Cost-effective:** You'll never be vendor-locked, because you can always self-host. -## Características principales +## Main Features -* **Calendar & Emails:** Sync your mailbox and calendar to see all communications on your CRM records. [Más información](/l/es/user-guide/calendar-emails/overview). +* **Calendar & Emails:** Sync your mailbox and calendar to see all communications on your CRM records. [Learn more](/l/es/user-guide/calendar-emails/overview). * **Data Model:** Create custom objects and fields to match your unique business processes. [Explore](/l/es/user-guide/data-model/overview). -* **Data Migration:** Import and export your data via CSV or API. [Comienza aquí](/l/es/user-guide/data-migration/overview). +* **Data Migration:** Import and export your data via CSV or API. [Get started](/l/es/user-guide/data-migration/overview). * **Views & Pipelines:** Organize your data with table views, kanban boards, and sales pipelines. [Discover](/l/es/user-guide/views-pipelines/overview). * **Workflows:** Automate your business processes and integrate with external tools. [Build automations](/l/es/user-guide/workflows/overview). * **AI:** Enhance your CRM with AI-powered features and agents. [Explore AI](/l/es/user-guide/ai/overview). * **Dashboards:** Track performance with custom reports and visualizations. [View dashboards](/l/es/user-guide/dashboards/overview). * **Permissions & Access:** Control who can view, edit, and manage your data with role-based permissions. [Configure access](/l/es/user-guide/permissions-access/overview). * **Notes & Tasks:** Create notes and tasks linked to your records for better collaboration. -* **API & Webhooks:** Connect to other apps and build custom integrations. [Comienza a integrar](/l/es/developers/extend/capabilities/apis). +* **API & Webhooks:** Connect to other apps and build custom integrations. [Start integrating](/l/es/developers/extend/capabilities/apis). -## Únete ahora +## Join now -[Regístrate aquí](https://app.twenty.com) o [conviértete en un colaborador en GitHub](https://github.com/twentyhq/twenty). +[Register here](https://app.twenty.com) or [become a contributor on GitHub](https://github.com/twentyhq/twenty). diff --git a/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/configure-your-workspace.mdx b/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/configure-your-workspace.mdx index 5fb2d27fb6..df430b7660 100644 --- a/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/configure-your-workspace.mdx +++ b/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/configure-your-workspace.mdx @@ -1,77 +1,77 @@ --- title: Configure Your Workspace -description: Cada empresa funciona de manera diferente. Start with these 3 steps to shape Twenty around your needs. +description: Every business works differently. Start with these 3 steps to shape Twenty around your needs. --- -**Quick Win**: Start with connecting your mailbox. Esto te brinda un valor inmediato y ayuda a tu equipo a ver Twenty en acción con datos reales. You can do so under Settings → Accounts. +**Quick Win**: Start with connecting your mailbox. This gives you immediate value and helps your team see Twenty in action with real data. You can do so under Settings → Accounts. -## 1. Personaliza tu modelo de datos +## 1. Customize your data model -Twenty ofrece la flexibilidad que necesitas para moldear el modelo de datos que mejor apoyará tu día a día. -Crea objetos y campos de cualquier tipo, incluyendo relaciones entre tus diferentes objetos. Puedes hacerlo en Configuración → Modelo de Datos. +Twenty offers the flexibility you need to shape the data model that will best support your day-to-day. +Create objects and fields of any type, including relations between your different objects. You can do so under Settings → Data Model. Here are a few tips: -* **No estás limitado en la cantidad de campos personalizados ni en los objetos personalizados**. Agregar objetos y campos personalizados no llevará a la actualización de tu plan. -* **People, Companies and Opportunities are the three objects from where you can access the emails and meetings synchronized from your mailbox and calendar**. Recomendamos usarlas tanto como sea posible, añadiendo campos para categorizar tus registros si es necesario. Aquí tienes un ejemplo: - * Es mejor usar el objeto Personas para tus prospectos y socios, creando un campo en el objeto Personas llamado `Tipo de Persona`, en lugar de crear un objeto personalizado Socio. Porque no podrías acceder a los correos electrónicos intercambiados con esta persona desde los registros de Socio. - * Crea diferentes vistas bajo Personas, una para mostrar socios y otra para mostrar prospectos. -* Dos personas no pueden tener la misma dirección de correo electrónico. Dos empresas no pueden tener el mismo dominio. -* Puedes desactivar campos y objetos estándar que no quieras usar. -* Puedes ocultar campos de las vistas: no dudes en crear campos, no tendrás que mostrarlos todos. +* **You are not limited in the number of custom fields nor custom objects**. Adding custom objects and fields will not lead to upgrading your plan. +* **People, Companies and Opportunities are the three objects from where you can access the emails and meetings synchronized from your mailbox and calendar**. We recommend using those as much as possible, adding fields to categorize your records if need be. Here is an example: + * It is best to use the People object for your prospects and partners, creating a field on the People object named `Person Type`, instead of creating a Partner custom object. Because you would not be able to access the emails exchanged with this person from the Partner records. + * Create different views under People, one to display partners and one to display prospects. +* Two People cannot have the same email address. Two Companies cannot have the same domain. +* You can deactivate standard fields and objects you do not want to use. +* You can hide fields from views: don't be afraid of creating fields, you won't have to display all of them. -Lee [este artículo](/l/es/user-guide/data-model/overview) para aprender cómo diseñar tu modelo de datos. +Read [this article](/l/es/user-guide/data-model/overview) to learn how to design your data model. -## 2. Trae tus datos +## 2. Bring your data in -Llevar tus datos existentes a Twenty da a tu equipo contexto desde el principio. +Bringing your existing data into Twenty gives your team context from the start. -### Conecta tu buzón de correo +### Connect your mailbox -Si no lo hiciste al crear tu espacio de trabajo, conecta tu **cuenta de Google o Microsoft** en Configuración → Cuentas. Esto permite a Twenty: +If you have not done so when creating your workspace, connect your **Google or Microsoft account** under Settings → Accounts. This allows Twenty to: -* Importar tus mensajes y reuniones -* Crear automáticamente contactos basados en interacciones (opcional) -* Mantener el historial de comunicación visible para tu equipo +* Import your messages and meetings +* Auto-create contacts based on interactions (optional) +* Keep communication history visible for your team -**¿Usando otro proveedor?** -Puedes agregar otro buzón de correo a través de SMTP o otro calendario a través de CalDAV. Necesitarás activar la función en Configuración → Lanzamientos → Laboratorio, y luego regresar a la pestaña Configuración → Cuentas. +**Using another provider?** +You can add another mailbox via SMTP or another calendar via CalDAV. You will need to activate the feature under Settings → Releases → Lab, and then go back to the Settings → Accounts tab. ### Import data via csv -Usa el menú de comandos (`Cmd + K` o `Ctrl + K`) para importar Personas, Empresas, Oportunidades o cualquier objeto personalizado vía CSV. +Use the Command menu (`Cmd + K` or `Ctrl + K`) to import People, Companies, Opportunities, or any custom objects via CSV. -**Directrices clave**: +**Key guidelines**: -* Descarga el archivo de muestra para entender el formato esperado -* Limita cada archivo a 10,000 registros -* Elimina correos electrónicos duplicados para Personas o dominios duplicados para Empresas -* Revisa y corrige errores (resaltados en amarillo) antes de importar +* Download the sample file to understand the expected format +* Limit each file to 10k records +* Remove duplicate emails for People or duplicate domains for Companies +* Review and fix errors (highlighted in yellow) before importing -Lee [este artículo](/l/es/user-guide/data-migration/overview) para aprender más sobre la importación de datos. +Read [this article](/l/es/user-guide/data-migration/overview) to learn more about data import. -## 3. Crea tu primera vista +## 3. Create your first view -Crear diferentes vistas es clave para que los datos sean accionables para tu equipo. +Creating different views is key to make the data actionable for your team. Here is how to proceed: -* **Agregar u ocultar columnas** - Gestiona los campos visibles en una vista dada haciendo clic en Opciones → Campos (desde la parte superior derecha). Puedes mostrar/ocultar campos desde allí. +* **Add or hide columns** + Manage the fields visible in a given view clicking on Options → Fields (from the top right). You can show/hide fields from there. -* **Reordenar campos** - Reordena los campos de una vista dada haciendo clic en Opciones → Campos (desde la parte superior derecha). Arrastra y suelta los campos para reordenarlos. +* **Reorder fields** + Reorder the fields from a given view clicking on Options → Fields (from the top right). Drag and drop the fields to reorder them. -* **Filtra tu vista** - Reduce los registros mostrados usando los Filtros desde la parte superior derecha. +* **Filter your view** + Narrow down the records displayed using the Filters from the top right. -* **Ordena los registros** - Reordena los registros mostrados usando la función de Ordenar desde la parte superior derecha, o haciendo clic directamente en el nombre de la columna. +* **Sort records** + Reorder records displayed using the Sort function from the top right, or by clicking directly on the column name. -* **Elige el diseño** - Puedes cambiar a un diseño de **Kanban** o un diseño de lista **Agrupar por**, siempre que el objeto tenga un campo select type `Etapa` o similar. +* **Choose the layout** + You can switch to a **Kanban layout** or a list **Group By** layout, as long as the object has a `Stage` or similar select-type field. -* **Guarda tu vista como Favoritos** - Esto se puede hacer utilizando el menú desplegable que muestra las diferentes vistas. +* **Save your view as Favorites** + This can be done using the dropdown menu showing the different views. -## ¿Qué sigue? +## What's next? -Comienza a crear automatizaciones utilizando [flujos de trabajo](/l/es/user-guide/workflows/overview). +Start creating automations using [workflows](/l/es/user-guide/workflows/overview). diff --git a/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/create-workspace.mdx b/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/create-workspace.mdx index 5a235227b0..f93617f83f 100644 --- a/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/create-workspace.mdx +++ b/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/create-workspace.mdx @@ -1,48 +1,48 @@ --- -title: Crear un Espacio de Trabajo +title: Create a Workspace description: Follow a step-by-step guide on how to register on Twenty, choose a subscription plan, and set up your account. --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## Paso 1: Registro +## Step 1: Registration -1. Dirígete a [Twenty Sign Up](https://app.twenty.com). -2. Selecciona tu método de registro preferido: - * **Continuar con Google** para registro con cuenta de Google. - * **Continuar con Microsoft** para registro con cuenta de Microsoft. - * O, **Continuar con Email** para registro vía correo electrónico. +1. Navigate to [Twenty Sign Up](https://app.twenty.com). +2. Select your preferred sign-up method: + * **Continue with Google** for Google account registration. + * **Continue with Microsoft** for Microsoft account registration. + * Or, **Continue With Email** for email registration. -## Paso 2: Elección de Período de Prueba +## Step 2: Choosing a Trial Period -Elija entre dos períodos de prueba: +Choose between two trial periods: -### 30 días +### 30 days -Con tarjeta de crédito +With credit card -### 7 días +### 7 days -Sin tarjeta de crédito +Without credit card -Ambas pruebas incluyen: +Both trials include: -* Acceso total -* Contactos ilimitados -* Integración de correo electrónico -* Objetos personalizados -* API y Webhooks +* Full access +* Unlimited contacts +* Email integration +* Custom objects +* API & Webhooks -Puedes hacer clic en "Cambiar plan" para elegir un plan diferente o un intervalo de facturación. +You can click on "Change plan" to choose a different plan or billing interval. -## Paso 3: Confirmación de Pago y Configuración de Cuenta +## Step 3: Payment Confirmation & Account Setup -Después de la aprobación del pago a través de Stripe, se le dirige a crear su espacio de trabajo y perfil de usuario. Recuerda que puedes cancelar tu suscripción en cualquier momento. +Post payment approval via Stripe, you're directed to create your workspace and user profile. Remember that you can cancel your subscription anytime. -## Soporte +## Support -Para consultas o ayuda, contacta con el equipo de soporte dedicado en [contact@twenty.com](mailto:contact@twenty.com) o envía un mensaje por [Discord](https://discord.gg/cx5n4Jzs57). +For queries or help, connect with the dedicated support team at [contact@twenty.com](mailto:contact@twenty.com) or send a message on [Discord](https://discord.gg/cx5n4Jzs57). diff --git a/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/navigate-around-twenty.mdx b/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/navigate-around-twenty.mdx index 01666e86e2..2dfc6ef10a 100644 --- a/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/navigate-around-twenty.mdx +++ b/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/navigate-around-twenty.mdx @@ -1,41 +1,41 @@ --- title: Navigate Around Twenty -description: Obtén una descripción general rápida de cómo navegar por la plataforma y dónde realizar diferentes tipos de acciones. +description: Get a quick overview of how to navigate through the platform and where to take different types of actions. --- -## El diseño principal +## The Main Layout -The center of the screen is **where your records live**: people, companies, opportunities, tasks, notes, dashboards, workflows and any other object you created. Aquí es donde ocurre el trabajo diario. -Puedes **ver, editar, eliminar registros** desde allí así como **crear nuevas vistas**. +The center of the screen is **where your records live**: people, companies, opportunities, tasks, notes, dashboards, workflows and any other object you created. This is where the day-to-day work happens. +You can **view, edit, delete records** from there as well as **creating new views**. -## Barra de navegación +## The Navigation Bar On the left side, from the top to the bottom, you'll be able to: -* Alterna entre tus diferentes espacios de trabajo usando el menú desplegable o crea uno nuevo -* Usa la barra de búsqueda (presiona `/` para enfocarla al instante) -* Abre la sección de Configuración -* Accede directamente a tus vistas favoritas. Las vistas favoritas son únicas para cada usuario. -* Alterna entre diferentes objetos -* **Crea automatizaciones** usando flujos de trabajo -* Contacta con Soporte y abre nuestra guía del usuario. +* Switch between your **several workspaces** using the dropdown menu or create a new workspace +* Use the **search bar** (press `/` to focus on it instantly) +* Open the **Settings** section +* Have direct access to your **Favourites views**. Favourites are unique for each user. +* Switch between different objects +* **Create automations** using workflows +* Reach out to Support and open our User Guide. ## The Command Menu -The command menu gives you **quick access to actions** in Twenty. Puedes acceder de dos maneras: +The command menu gives you **quick access to actions** in Twenty. You can access it in two ways: -* **Atajo de teclado**: Presiona `Cmd + K` (Mac) o `Ctrl + K` (Windows) +* **Keyboard shortcut**: Press `Cmd + K` (Mac) or `Ctrl + K` (Windows) * **Mouse**: Click the three dots in the top right corner From there, you can: -* Crea nuevos registros -* **Importa y exporta datos en formato CSV** -* Crea nuevas vistas -* Accede a los registros eliminados (Twenty admite eliminaciones lógicas y definitivas) -* Consulta los atajos de teclado para acceder rápidamente a los objetos de tu espacio de trabajo +* Create new records +* **Import and export data via csv** +* Create new views +* Access deleted records (Twenty supports soft and hard deletes) +* See the keyboard shortcuts to quickly access objects in your workspace @@ -51,33 +51,33 @@ When you click on a record, the side panel appears on the right. This gives you -## Vistas +## Views -Cada objeto (como Oportunidades o Personas) admite múltiples vistas. No estás limitado en cuanto al número de vistas por objeto. +Every object (like Opportunities or People) supports multiple views. You're not limited in the number of views per object. -Usa el menú desplegable en la parte superior izquierda del diseño principal para alternar entre las diferentes vistas. Por ejemplo: +Use the dropdown menu at the top left of the main layout to switch between the different views. For example: -* Usa una vista Kanban para hacer seguimiento de las oportunidades por etapa -* Usa la vista Agrupar por para crear secciones y mejorar la eficiencia -* Usa filtros para centrarte en registros específicos (por ejemplo, clientes potenciales creados la semana pasada) -* Guarda vistas filtradas para reutilizarlas más tarde -* Vistas favoritas para un acceso rápido +* Use a Kanban view to track opportunities by stage +* Use Group By view to create sections and improve efficiency +* Use filters to focus on specific records (e.g. leads created last week) +* Save filtered views to reuse them later +* Favourite views for fast access If you're new to Views, read our [Views & Pipelines guide](/l/es/user-guide/views-pipelines/overview) to learn how to create and customize them. -## Configuración +## Settings -Abre la Configuración desde la parte superior izquierda para: +Open your Settings from the top left to: -* **Conecta tu buzón y tus cuentas de calendario** para una sincronización perfecta del correo electrónico y el calendario -* Personaliza tu **modelo de datos**: crea objetos personalizados, campos y relaciones -* **Accede al área de pruebas de la API y configura webhooks** -* **Gestiona los permisos de usuario** y los controles de acceso al espacio de trabajo -* Invita a los miembros del equipo y gestiona los roles de usuario -* Edita tu perfil y las preferencias del espacio de trabajo -* Configura la facturación y supervisa el uso de créditos de flujos de trabajo -* Descubre los últimos lanzamientos y las próximas funciones (en Lanzamientos → pestaña Lab) +* **Connect your mailbox and calendar** accounts for seamless email and calendar sync +* Customize your **data model**: create custom objects, fields, and relationships +* **Access the API playground and configure webhooks** +* **Manage user permissions** and workspace access controls +* Invite team members and manage user roles +* Edit your profile and workspace preferences +* Configure billing and monitor workflow credits usage +* Discover the latest releases and upcoming features (under Releases → Lab tab) If you do not see all those sections under Settings, reach out to your workspace administrator - some of them have restricted access. diff --git a/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/permissions.mdx b/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/permissions.mdx index d5cf02df39..5b9fce088a 100644 --- a/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/permissions.mdx +++ b/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/permissions.mdx @@ -1,69 +1,69 @@ --- -title: Permisos +title: Permissions description: Control access to objects, fields, and settings with role-based permissions. image: /images/user-guide/permissions/permissions.png --- -El sistema de permisos de Twenty te permite controlar el acceso a tres áreas principales: +Twenty's permission system allows you to control access to three main areas: -* **Objetos y Campos**: Controla quién puede ver, editar o eliminar registros y campos individuales -* **Configuraciones**: Gestiona el acceso a la configuración del espacio de trabajo y a las funciones administrativas -* **Acciones**: Controla acciones generales del espacio de trabajo como importar datos o enviar correos electrónicos +* **Objects and Fields**: Control who can view, edit, or delete records and individual fields +* **Settings**: Manage access to workspace configuration and administrative functions +* **Actions**: Control general workspace actions like importing data or sending emails ## Create a Role -Para crear un nuevo rol: +To create a new role: 1. Go to **Settings → Roles** -2. En **Todos los Roles**, haz clic en **+ Crear Rol** -3. Introduce un nombre para el rol +2. Under **All Roles**, click on **+ Create Role** +3. Enter a role name 4. In the default **Permissions** tab, [configure permissions](#customize-permissions) -5. Haz clic en **Guardar** para finalizar +5. Click **Save** to finish ## Delete a Role -Para eliminar un rol: +To delete a role: 1. Go to **Settings → Roles** -2. Haz clic en el rol que deseas eliminar +2. Click on the role you want to remove 3. Open the **Settings** tab, then click **Delete Role** -4. Haz clic en **Confirmar** en el modal +4. Click **Confirm** in the modal - If a role is deleted, any workspace member assigned to it will be automatically reassigned to the default role. Todos excepto el rol **Admin** pueden eliminarse. Siempre debe haber al menos un miembro asignado al rol **Admin**. + If a role is deleted, any workspace member assigned to it will be automatically reassigned to the default role. All except the **Admin** role can be deleted. There must always be at least one member assigned to the **Admin** role. ## Assign Roles to Members -### Ver Asignaciones Actuales +### View Current Assignments * Go to **Settings → Roles** -* Ver todos los roles y cuántos miembros están asignados a cada uno -* Ver qué miembros tienen qué roles +* See all roles and how many members are assigned to each +* View which members have which roles ### Assign a Role to a Member 1. Go to **Settings → Roles** -2. Haz clic en el rol que deseas asignar -3. Abre la pestaña **Asignación** +2. Click on the role you want to assign +3. Open the **Assignment** tab 4. Click **+ Assign to member** -5. Selecciona al miembro del espacio de trabajo de la lista -6. Confirma la asignación +5. Select the workspace member from the list +6. Confirm the assignment ### Set Default Role 1. Go to **Settings → Roles** -2. En la sección **Opciones**, encuentra **Rol Predeterminado** -3. Selecciona qué rol deberían recibir automáticamente los nuevos miembros -4. Los nuevos miembros del espacio de trabajo serán asignados a este rol cuando se unan +2. In the **Options** section, find **Default Role** +3. Select which role new members should automatically receive +4. New workspace members will be assigned this role when they join - You can only assign roles to existing workspace members. Para invitar a nuevos miembros, utiliza [Gestión de Miembros](/l/es/user-guide/settings/capabilities/member-management). + You can only assign roles to existing workspace members. To invite new members, use [Member Management](/l/es/user-guide/settings/capabilities/member-management). -## Personalizar Permisos +## Customize Permissions -Los permisos determinan qué puede acceder o modificar cada rol dentro de tu espacio de trabajo, incluidos registros de objetos, configuraciones y acciones del espacio de trabajo. +Permissions determine what each role can access or modify within your workspace, including workspace objects records, settings, and actions. ### Object Permissions @@ -73,12 +73,12 @@ The **Objects** section controls what this role can do with records across your First, configure the baseline permissions that apply to **all objects** by default: -| Permission | Descripción | -| ------------------------------------------- | -------------------------------------- | -| **Ver registros en todos los objetos** | View records in lists and detail pages | -| **Editar registros en todos los objetos** | Modify existing records | -| **Eliminar registros en todos los objetos** | Soft-delete records (can be restored) | -| **Destruir registros en todos los objetos** | Permanently delete records | +| Permission | Description | +| ---------------------------------- | -------------------------------------- | +| **See Records on All Objects** | View records in lists and detail pages | +| **Edit Records on All Objects** | Modify existing records | +| **Delete Records on All Objects** | Soft-delete records (can be restored) | +| **Destroy Records on All Objects** | Permanently delete records | Select or unselect based on what should be the default behavior for this role. @@ -103,7 +103,7 @@ Click **+ Add rule** and select an object to create an exception. Within each object-level rule, you can go further and configure **field-level permissions** to control access to specific fields. -| Permission | Descripción | +| Permission | Description | | -------------- | -------------------------- | | **See Field** | View the field value | | **Edit Field** | Modify the field value | @@ -128,33 +128,33 @@ Permissions cascade from general to specific: More specific settings always take precedence. -### Gestión de Excepciones de Permisos +### Managing Permission Overrides To override inherited permissions: -1. Haz clic en **X** para eliminar la regla heredada +1. Click **X** to remove the inherited rule 2. Select the specific permissions you want -3. Haz clic en el ícono naranja de **Deshacer** (flecha circular) para revertir los cambios +3. Click the orange **Undo** icon (circular arrow) to revert changes -Cuando termines, haz clic en **Finalizar**, luego en **Guardar** una vez que seas redirigido a la página del rol. +When done, click **Finish**, then **Save** once redirected to the role page. -### Permisos de Configuraciones del Espacio de Trabajo +### Workspace Settings Permissions -Controla el acceso a configuraciones del espacio de trabajo de dos maneras: +Control access to workspace settings in two ways: -* Activa **Acceso Completo a Configuraciones** para otorgar acceso completo +* Toggle **Settings All Access** to grant full access * Or enable specific permissions (e.g., API key generation, workspace preferences, role assignment, data model configuration, security settings, and workflow management) **Current limitation**: Access to workflow management is currently required to manually trigger workflows. This behavior may change in future releases. -### Permisos de Acción del Espacio de Trabajo +### Workspace Action Permissions -Controla el acceso a acciones generales del espacio de trabajo: +Control access to general workspace actions: -* Activa **Acceso Completo a la Aplicación** para otorgar permisos completos -* O habilita acciones individuales como **Enviar Email**, **Importar CSV** y **Exportar CSV** +* Toggle **Application All Access** to grant full permissions +* Or enable individual actions such as **Send Email**, **Import CSV**, and **Export CSV** ## Assigning Roles to API Keys and AI Agents @@ -170,11 +170,11 @@ Beyond workspace members, roles can also be assigned to **API Keys** and **AI Ag ### Assign a Role to an API Key 1. Go to **Settings → Roles** -2. Haz clic en el rol que deseas asignar -3. Abre la pestaña **Asignación** +2. Click on the role you want to assign +3. Open the **Assignment** tab 4. Under **API Keys**, click **+ Assign to API key** 5. Select the API key from the list -6. Confirma la asignación +6. Confirm the assignment The API key will now inherit all permissions defined by that role. Any API calls made with this key will be restricted accordingly. @@ -185,11 +185,11 @@ The API key will now inherit all permissions defined by that role. Any API calls ### Assign a Role to an AI Agent 1. Go to **Settings → Roles** -2. Haz clic en el rol que deseas asignar -3. Abre la pestaña **Asignación** +2. Click on the role you want to assign +3. Open the **Assignment** tab 4. Under **AI Agents**, click **+ Assign to AI agent** 5. Select the AI agent from the list -6. Confirma la asignación +6. Confirm the assignment The AI agent will only be able to access data and perform actions allowed by its assigned role. diff --git a/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/sso-configuration.mdx b/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/sso-configuration.mdx index 0508319d14..310c161605 100644 --- a/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/sso-configuration.mdx +++ b/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/sso-configuration.mdx @@ -21,7 +21,7 @@ Twenty supports SSO with: ## Setting Up SSO -### Prerrequisitos +### Prerequisites * Organization plan (cloud and self-hosted workspaces) * Admin access to your identity provider @@ -83,7 +83,7 @@ You'll need to configure your identity provider with: SSO users can be assigned roles like regular users: -1. Ir a **Ajustes → Miembros** +1. Go to **Settings → Members** 2. Find the user 3. Change their role as needed @@ -94,9 +94,9 @@ To remove access for SSO users: * Remove them from your identity provider, or * Remove them from the Twenty workspace -## Mejores prácticas +## Best Practices -### Seguridad +### Security * **Require SSO**: Disable password login for SSO users * **Regular audits**: Review access periodically @@ -108,7 +108,7 @@ To remove access for SSO users: * **Group mapping**: Map IdP groups to Twenty roles (if available) * **Offboarding process**: Include Twenty in your deprovisioning workflow -## Solución de Problemas +## Troubleshooting ### Common Issues @@ -116,7 +116,7 @@ To remove access for SSO users: * **URL mismatches**: Verify ACS URL matches exactly * **User not found**: Check JIT provisioning settings -### Obtención de Ayuda +### Getting Help If you encounter issues, contact support with: diff --git a/packages/twenty-docs/l/es/user-guide/permissions-access/how-tos/permissions-faq.mdx b/packages/twenty-docs/l/es/user-guide/permissions-access/how-tos/permissions-faq.mdx index b997c9900c..6700b48297 100644 --- a/packages/twenty-docs/l/es/user-guide/permissions-access/how-tos/permissions-faq.mdx +++ b/packages/twenty-docs/l/es/user-guide/permissions-access/how-tos/permissions-faq.mdx @@ -27,7 +27,7 @@ description: Frequently asked questions about roles and permissions. -## Permisos +## Permissions diff --git a/packages/twenty-docs/l/es/user-guide/permissions-access/overview.mdx b/packages/twenty-docs/l/es/user-guide/permissions-access/overview.mdx index 07ff71b19f..b904c2fba9 100644 --- a/packages/twenty-docs/l/es/user-guide/permissions-access/overview.mdx +++ b/packages/twenty-docs/l/es/user-guide/permissions-access/overview.mdx @@ -1,40 +1,40 @@ --- -title: Permisos y acceso -description: Administra roles, permisos y el control de acceso en tu espacio de trabajo. +title: Permissions & Access +description: Manage roles, permissions, and access control in your workspace. --- - Permisos y acceso + Permissions & Access -El sistema de permisos de Twenty te permite controlar quién puede acceder y modificar los datos en tu espacio de trabajo. Crea roles, asigna permisos y configura SSO para un acceso seguro. +Twenty's permission system lets you control who can access and modify data in your workspace. Create roles, assign permissions, and configure SSO for secure access. -## Qué incluye esta sección +## What's in this section - - Crea roles y configura permisos de objetos, campos y configuración. + + Create roles and configure object, field, and settings permissions. - - Configura el inicio de sesión único (SSO) con tu proveedor de identidad. + + Set up Single Sign-On with your identity provider. - - Preguntas comunes sobre roles, permisos y SSO. + + Common questions about roles, permissions, and SSO. -## Características clave +## Key features -* **Acceso basado en roles**: Crea roles personalizados con permisos específicos -* **Permisos de objetos**: Controla quién puede ver, editar o eliminar registros -* **Permisos de campos**: Restringe el acceso a campos sensibles -* **Permisos de configuración**: Controla el acceso a la configuración del espacio de trabajo -* **Integración con SSO**: Configura el inicio de sesión único para seguridad a nivel empresarial (plan Organization) +* **Role-based access**: Create custom roles with specific permissions +* **Object permissions**: Control who can view, edit, or delete records +* **Field permissions**: Restrict access to sensitive fields +* **Settings permissions**: Control access to workspace configuration +* **SSO integration**: Configure single sign-on for enterprise security (Organization plan) -## Enlaces rápidos +## Quick links -* [Crear un rol](/l/es/user-guide/permissions-access/capabilities/permissions#create-a-role) -* [Configurar SSO](/l/es/user-guide/permissions-access/capabilities/sso-configuration) -* [Administrar miembros del equipo](/l/es/user-guide/settings/capabilities/member-management) +* [Create a role](/l/es/user-guide/permissions-access/capabilities/permissions#create-a-role) +* [Configure SSO](/l/es/user-guide/permissions-access/capabilities/sso-configuration) +* [Manage team members](/l/es/user-guide/settings/capabilities/member-management) diff --git a/packages/twenty-docs/l/es/user-guide/settings/capabilities/domains-settings.mdx b/packages/twenty-docs/l/es/user-guide/settings/capabilities/domains-settings.mdx index 563f47e82b..b2c49c5ae2 100644 --- a/packages/twenty-docs/l/es/user-guide/settings/capabilities/domains-settings.mdx +++ b/packages/twenty-docs/l/es/user-guide/settings/capabilities/domains-settings.mdx @@ -5,11 +5,11 @@ description: Configure workspace domain, approved access domains, and public dom Configure domain settings under **Settings → Domains**. -## Dominio del espacio de trabajo +## Workspace Domain Edit your subdomain name or set a custom domain for your workspace. -### Personalizar dominio +### Customize Domain 1. Click **Customize Domain** 2. Edit your subdomain (e.g., `yourcompany.twenty.com`) @@ -17,15 +17,15 @@ Edit your subdomain name or set a custom domain for your workspace. For custom domains, you'll need to configure DNS settings with your domain provider. -## Dominios Aprobados +## Approved Domains Anyone with an email address at these domains is allowed to sign up for this workspace automatically. -### Añadir Dominio de Acceso Aprobado +### Add Approved Access Domain 1. Click **Add Approved Access Domain** 2. Enter your company domain (e.g., `yourcompany.com`) -3. Guardar +3. Save Once configured, anyone with an email address at that domain can join your workspace without needing a direct invitation. @@ -33,11 +33,11 @@ Once configured, anyone with an email address at that domain can join your works This is useful for allowing your entire team to self-register while keeping the workspace restricted to your organization. -## Dominios Públicos +## Public Domains -Provisiona un entorno de alojamiento completo y seguro en estos dominios. +Provision a complete and secure hosting environment on these domains. -### Agregar Dominio Público +### Add Public Domain 1. Click **Add Public Domain** 2. Enter the domain you want to use diff --git a/packages/twenty-docs/l/es/user-guide/settings/capabilities/experience-settings.mdx b/packages/twenty-docs/l/es/user-guide/settings/capabilities/experience-settings.mdx index aa9cd288ad..e279f7d88b 100644 --- a/packages/twenty-docs/l/es/user-guide/settings/capabilities/experience-settings.mdx +++ b/packages/twenty-docs/l/es/user-guide/settings/capabilities/experience-settings.mdx @@ -1,38 +1,38 @@ --- -title: Ajustes de experiencia -description: Personaliza el tema de tu interfaz y las preferencias regionales. +title: Experience Settings +description: Customize your interface theme and regional preferences. --- -Personaliza tu experiencia con Twenty en **Ajustes → Experiencia**. +Personalize your Twenty experience under **Settings → Experience**. -## Apariencia +## Appearance -Elige tu tema visual: +Choose your visual theme: -* **Claro**: Interfaz limpia y luminosa -* **Oscuro**: Más fácil para la vista en condiciones de poca luz -* **Ajustes del sistema**: Se ajusta automáticamente al tema de tu dispositivo +* **Light**: Clean, bright interface +* **Dark**: Easier on the eyes in low-light conditions +* **System settings**: Automatically matches your device's theme -## Idioma +## Language -Selecciona tu idioma preferido para la interfaz de Twenty en el menú desplegable. +Select your preferred language for the Twenty interface from the dropdown menu. -## Formatos +## Formats -Configurar fecha, hora, número, zona horaria y día de inicio del calendario. +Configure date, time, number, timezone, and calendar start day. -| Ajuste | Descripción | -| -------------------------------- | ------------------------------------------------------------------- | -| **Zona horaria** | Tu zona horaria local para marcas de tiempo y programación precisas | -| **Formato de fecha** | Cómo se muestran las fechas (p. ej., 12 dic 2025) | -| **Formato de hora** | Formato de 12 horas (7:22 p. m.) o de 24 horas | -| **Formato de número** | Separadores de decimales y de miles (p. ej., 1.234,56) | -| **Día de inicio del calendario** | Primer día de la semana (domingo o lunes) | +| Setting | Description | +| ---------------------- | ---------------------------------------------------------- | +| **Time zone** | Your local timezone for accurate timestamps and scheduling | +| **Date format** | How dates appear (e.g., Dec 12, 2025) | +| **Time format** | 12-hour (7:22 PM) or 24-hour format | +| **Number format** | Decimal and thousands separators (e.g., 1,234.56) | +| **Calendar start day** | First day of the week (Sunday or Monday) | -Cada ajuste puede configurarse en **Ajustes del sistema** para coincidir automáticamente con las preferencias de tu dispositivo, o puedes elegir un formato específico. +Each setting can be set to **System settings** to automatically match your device preferences, or you can choose a specific format. -## Cómo actualizar +## How to Update -1. Ve a **Ajustes ���� �� Experiencia** -2. Ajusta tus preferencias en cada sección -3. Los cambios se guardan automáticamente +1. Go to **Settings → Experience** +2. Adjust your preferences in each section +3. Changes save automatically diff --git a/packages/twenty-docs/l/es/user-guide/settings/capabilities/member-management.mdx b/packages/twenty-docs/l/es/user-guide/settings/capabilities/member-management.mdx index 5af4f4c7aa..168b63c133 100644 --- a/packages/twenty-docs/l/es/user-guide/settings/capabilities/member-management.mdx +++ b/packages/twenty-docs/l/es/user-guide/settings/capabilities/member-management.mdx @@ -1,17 +1,17 @@ --- -title: Gestión de Miembros +title: Member Management description: Invite team members and manage workspace access. --- Manage who has access to your workspace under **Settings → Members**. -## Invitar Nuevos Miembros +## Invite New Members ### Using Email Invitation -1. Ir a **Ajustes → Miembros** +1. Go to **Settings → Members** 2. Click **+ Invite** -3. Introduce la dirección de correo electrónico de la persona +3. Enter the person's email address 4. Select a role for the new member 5. Click **Send invite** @@ -19,10 +19,10 @@ The invited person will receive an email with a link to join your workspace. ### Using Invite Link -1. Ir a **Ajustes → Miembros** -2. Copiar el enlace de invitación a la área de trabajo -3. Compartir el enlace con nuevos miembros del equipo -4. Obtendrán acceso una vez que se registren +1. Go to **Settings → Members** +2. Copy the workspace invite link +3. Share the link with new team members +4. They'll receive access once they sign up ## View and Manage Members @@ -73,11 +73,11 @@ Manage invitations that haven't been accepted: * **Resend**: Send the invitation email again * **Cancel**: Revoke the invitation before it's accepted -## Dominios de Acceso Aprobado +## Approved Access Domains Allow team members to join automatically based on their email domain: -1. Ve a **Configuración → Dominios** +1. Go to **Settings → Domains** 2. Add your company domain (e.g., `yourcompany.com`) 3. Anyone with that email domain can join without an invitation diff --git a/packages/twenty-docs/l/es/user-guide/settings/capabilities/profile-settings.mdx b/packages/twenty-docs/l/es/user-guide/settings/capabilities/profile-settings.mdx index 93593df485..febfa4a86f 100644 --- a/packages/twenty-docs/l/es/user-guide/settings/capabilities/profile-settings.mdx +++ b/packages/twenty-docs/l/es/user-guide/settings/capabilities/profile-settings.mdx @@ -1,43 +1,43 @@ --- -title: Ajustes del perfil -description: Gestiona tu perfil personal y los ajustes de seguridad. +title: Profile Settings +description: Manage your personal profile and security settings. --- -## Información personal +## Personal Information -### Nombre y correo electrónico +### Name and Email -* **Nombre para mostrar**: Actualiza cómo aparece tu nombre a otros miembros del espacio de trabajo -* **Correo electrónico**: Cambia tu correo de inicio de sesión (requiere verificación) -* **Foto de perfil**: Carga un avatar personalizado o utiliza tus iniciales +* **Display Name**: Update how your name appears to other workspace members +* **Email Address**: Change your login email (requires verification) +* **Profile Picture**: Upload a custom avatar or use your initials -## Configuración de seguridad +## Security Settings -### Autenticación de dos factores (2FA) +### Two-Factor Authentication (2FA) -Habilita 2FA para agregar una capa extra de seguridad a tu cuenta. +Enable 2FA to add an extra layer of security to your account: -1. Ve a **Configuración → Configuración del perfil** -2. Haz clic en **Habilitar 2FA** -3. Escanea el código QR con tu aplicación de autenticación -4. Introduce el código de verificación para confirmar +1. Go to **Settings → Profile Settings** +2. Click **Enable 2FA** +3. Scan the QR code with your authenticator app +4. Enter the verification code to confirm -### Gestión de contraseñas +### Password Management -* **Cambiar contraseña**: Actualiza tu contraseña actual -* **Requisitos de la contraseña**: Debe tener al menos 8 caracteres +* **Change Password**: Update your current password +* **Password Requirements**: Must be at least 8 characters long -## Gestión del perfil +## Profile Management -### Eliminar cuenta +### Delete Account - Eliminar tu cuenta eliminará permanentemente tu acceso a todos los espacios de trabajo. Esta acción no se puede deshacer; perderás el acceso a todos los espacios de trabajo de los que eres miembro, y deberías considerar salir de espacios de trabajo individuales si solo quieres salir de equipos específicos. + Deleting your account will permanently remove your access to all workspaces. This action cannot be undone, you'll lose access to all workspaces where you're a member, and you should consider leaving individual workspaces instead if you only want to exit specific teams. -Para eliminar tu cuenta: +To delete your account: -1. Ve a **Configuración → Configuración del perfil** -2. Desplázate hasta **Zona de peligro** -3. Haz clic en **Eliminar cuenta** -4. Confirma escribiendo tu dirección de correo electrónico +1. Go to **Settings → Profile Settings** +2. Scroll to **Danger Zone** +3. Click **Delete Account** +4. Confirm by typing your email address diff --git a/packages/twenty-docs/l/es/user-guide/settings/capabilities/releases-settings.mdx b/packages/twenty-docs/l/es/user-guide/settings/capabilities/releases-settings.mdx index 5e663eab5e..4180b67161 100644 --- a/packages/twenty-docs/l/es/user-guide/settings/capabilities/releases-settings.mdx +++ b/packages/twenty-docs/l/es/user-guide/settings/capabilities/releases-settings.mdx @@ -1,5 +1,5 @@ --- -title: Configuración de Lanzamientos +title: Releases Settings description: Enable experimental features in Twenty. --- @@ -7,7 +7,7 @@ description: Enable experimental features in Twenty. The Releases section allows you to enable experimental features before they're generally available. -## Características del Laboratorio +## Lab Features Lab features are experimental capabilities that are still being developed. They may change or be removed without notice. diff --git a/packages/twenty-docs/l/es/user-guide/settings/capabilities/workspace-settings.mdx b/packages/twenty-docs/l/es/user-guide/settings/capabilities/workspace-settings.mdx index fe5479aa79..f72f71a814 100644 --- a/packages/twenty-docs/l/es/user-guide/settings/capabilities/workspace-settings.mdx +++ b/packages/twenty-docs/l/es/user-guide/settings/capabilities/workspace-settings.mdx @@ -1,30 +1,30 @@ --- -title: Configuración del Espacio de Trabajo -description: Personaliza el nombre y la marca de tu espacio de trabajo. +title: Workspace Settings +description: Customize your workspace name and branding. --- Those are accessible under **Settings → General**. -## Imagen del Espacio de Trabajo +## Workspace Picture -* **Subir Logo**: Añade un logo personalizado para el espacio de trabajo -* **Formatos admitidos**: Archivos PNG, JPEG y GIF de menos de 10MB -* **Eliminar**: Elimina el logo actual del espacio de trabajo +* **Upload Logo**: Add a custom workspace logo +* **Supported formats**: PNG, JPEG, and GIF files under 10MB +* **Remove**: Delete the current workspace logo -## Nombre del espacio de trabajo +## Workspace Name -* **Nombre**: Cambia el nombre visible de tu espacio de trabajo -* Este nombre aparece para todos los miembros del espacio de trabajo +* **Name**: Change your workspace display name +* This name appears to all workspace members -## Zona de Peligro +## Danger Zone - Eliminar tu espacio de trabajo elimina permanentemente todos los datos y no se puede deshacer. Todos los datos del espacio de trabajo se perderán para siempre, todos los miembros perderán el acceso inmediatamente, y esta acción no se puede revertir. + Deleting your workspace permanently removes all data and cannot be undone. All workspace data will be lost forever, all members will lose access immediately, and this action cannot be reversed. -Para eliminar tu espacio de trabajo: +To delete your workspace: -1. Haz clic en el botón **Eliminar espacio de trabajo** -2. Confirma la eliminación cuando se te solicite +1. Click **Delete workspace** button +2. Confirm the deletion when prompted -**Nota**: Solo los administradores del espacio de trabajo pueden eliminar espacios de trabajo. +**Note**: Only workspace administrators can delete workspaces. diff --git a/packages/twenty-docs/l/es/user-guide/settings/how-tos/settings-faq.mdx b/packages/twenty-docs/l/es/user-guide/settings/how-tos/settings-faq.mdx index 5861fb7f6e..19aa50e5a0 100644 --- a/packages/twenty-docs/l/es/user-guide/settings/how-tos/settings-faq.mdx +++ b/packages/twenty-docs/l/es/user-guide/settings/how-tos/settings-faq.mdx @@ -1,10 +1,10 @@ --- -title: Preguntas frecuentes sobre configuración +title: Settings FAQ description: Frequently asked questions about Twenty settings. image: /images/user-guide/setup/settings.png --- -## Configuración del Espacio de Trabajo +## Workspace Settings @@ -34,7 +34,7 @@ image: /images/user-guide/setup/settings.png Note: This permanently deletes all data and cannot be undone. - + Delete the workspaces you no longer need under **Settings → General → Delete workspace**. @@ -61,8 +61,8 @@ image: /images/user-guide/setup/settings.png 1. Go to **Settings → Profile** 2. Find the 2FA section - 3. Haz clic en **Habilitar 2FA** - 4. Escanea el código QR con tu aplicación de autenticación + 3. Click **Enable 2FA** + 4. Scan the QR code with your authenticator app 5. Enter the verification code @@ -73,14 +73,14 @@ image: /images/user-guide/setup/settings.png 1. Go to **Settings → Profile** 2. Scroll to Danger Zone - 3. Haz clic en **Eliminar cuenta** + 3. Click **Delete Account** 4. Confirm by typing your email Note: This removes your access to all workspaces and deletes all emails synced from your connected accounts. -## Ajustes de experiencia +## Experience Settings @@ -134,11 +134,11 @@ image: /images/user-guide/setup/settings.png -## Dominios +## Domains - - ¡Sí! Go to **Settings → Domains** and click **Customize Domain**. You have two options: + + Yes! Go to **Settings → Domains** and click **Customize Domain**. You have two options: * **Subdomain**: Use a Twenty subdomain like `yourcompany.twenty.com` * **Custom domain**: Use your own domain like `crm.yourcompany.com` (requires DNS configuration) @@ -151,7 +151,7 @@ image: /images/user-guide/setup/settings.png -## Características del Laboratorio +## Lab Features diff --git a/packages/twenty-docs/l/es/user-guide/settings/overview.mdx b/packages/twenty-docs/l/es/user-guide/settings/overview.mdx index 53965a13ed..eeb3db029a 100644 --- a/packages/twenty-docs/l/es/user-guide/settings/overview.mdx +++ b/packages/twenty-docs/l/es/user-guide/settings/overview.mdx @@ -1,11 +1,11 @@ --- -title: Configuración +title: Settings description: Set up your Twenty workspace with essential configurations. image: /images/user-guide/setup/settings.png --- - Configuración + Settings ## Initial Setup @@ -43,7 +43,7 @@ Set up email and calendar sync: Add team members to your workspace: -1. Ir a **Ajustes → Miembros** +1. Go to **Settings → Members** 2. Click **+ Invite** 3. Enter email addresses 4. Assign appropriate roles @@ -60,7 +60,7 @@ Add team members to your workspace: * Team members invited * Roles and permissions configured -## Próximos Pasos +## Next Steps * [Workspace settings](/l/es/user-guide/settings/capabilities/workspace-settings) * [Profile settings](/l/es/user-guide/settings/capabilities/profile-settings) diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/calendar-view.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/calendar-view.mdx index ebdbb61b16..5bd118300d 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/calendar-view.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/calendar-view.mdx @@ -1,5 +1,5 @@ --- -title: Vista del calendario +title: Calendar View description: Display records with date fields on a calendar. --- diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/fields-and-columns.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/fields-and-columns.mdx index 68455c4499..f49f2dbff3 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/fields-and-columns.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/fields-and-columns.mdx @@ -23,12 +23,12 @@ Change the order fields appear in your view: ## Field Display by View Type -### Vistas de Tabla +### Table Views * Fields appear as columns * Resize columns by dragging borders -### Vistas Kanban +### Kanban Views * Fields appear on cards * Reorder via Options → Fields @@ -39,7 +39,7 @@ Change the order fields appear in your view: * Selected fields show on calendar events * Configure via Options → Fields -## Mejores prácticas +## Best Practices * **Show only what's needed** — too many fields clutters the view * **Put important fields first** — most-used columns on the left diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx index 76910a3191..cac10c42bc 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx @@ -17,14 +17,14 @@ Filters help you focus on specific records by showing only those that match your ### Filter Operators -| Field Type | Available Operators | -| ----------------- | -------------------------------------------------- | -| Texto | Equals, Contains, Starts with, Ends with, Is empty | -| Número | Equals, Greater than, Less than, Between, Is empty | -| Fecha | Equals, Before, After, Between, Is empty | -| Selección | Equals, Is any of, Is empty | -| Caja de selección | Is true, Is false | -| Relación | Equals, Is empty | +| Field Type | Available Operators | +| ---------- | -------------------------------------------------- | +| Text | Equals, Contains, Starts with, Ends with, Is empty | +| Number | Equals, Greater than, Less than, Between, Is empty | +| Date | Equals, Before, After, Between, Is empty | +| Select | Equals, Is any of, Is empty | +| Checkbox | Is true, Is false | +| Relation | Equals, Is empty | ### Multiple Filters diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/kanban-views.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/kanban-views.mdx index 3bbd75308b..fa616d2f3d 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/kanban-views.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/kanban-views.mdx @@ -6,39 +6,39 @@ image: /images/user-guide/kanban-views/kanban.png import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## Acerca de las vistas Kanban +## About Kanban Views -Las vistas Kanban mapean visualmente los flujos de proceso, donde cada columna representa una etapa distinta y cada tarjeta representa un registro. +Kanban views visually map out process flows, where each column stands for a distinct stage and each card represents a record. -## Mover tarjetas entre etapas +## Move Cards between Stages -Puedes mover cada tarjeta entre etapas a medida que pasa por tu flujo de trabajo arrastrando y soltando. Para continuar, mantén presionado el clic en una tarjeta y muévela a la siguiente etapa. +You can move each card between stages as it goes through your workflow by dragging and dropping. To proceed, hold your click on a card and move it to the next stage. ## Add and Delete Stages -Puedes adaptar tu flujo de trabajo a tus necesidades usando etapas, que representan un valor en un campo de selección: +You can tailor your workflow to suit your needs using stages, which represent a value in a Select Field: -### Agregar Etapas +### Add Stages -Para agregar una etapa, accede a la configuración del campo de selección navegando a Configuración > Modelo de Datos, seleccionando tu objeto, y luego el campo del que depende tu tablero Kanban. +To add a stage, access the Select field settings by navigating to Settings > Data Model, selecting your object, and then the field your Kanban board depends on. -### Eliminar Etapas +### Remove Stages To remove a stage, hover the stage name or the `⋮` icon, click `Edit from settings` in the Select field settings, and then click **Delete** next to the relevant stage. ## Display Fields -Puedes configurar tu tablero Kanban para mostrar algunos campos y ocultar otros. To hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options. Look for the field needed in the Hidden Fields section and click on the eye button to display the field. +You can configure your Kanban board to display some fields and hide others. To hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options. Look for the field needed in the Hidden Fields section and click on the eye button to display the field. -También puedes reorganizar el orden de los campos manteniendo presionado el nombre del campo y arrastrándolo a donde desees. +You can also rearrange the order of fields by holding down the field name and dragging it to where you want it. -## Vista compacta +## Compact View You can hide all the fields and get an overview of all records at a glance. To enable: @@ -53,7 +53,7 @@ Each column in a Kanban view can display aggregated values at the top, helping y ### Available Aggregations -| Aggregation | Descripción | +| Aggregation | Description | | ----------- | --------------------------------------------- | | **Count** | Number of records in the column | | **Sum** | Total of a numeric field (e.g., deal amounts) | @@ -78,7 +78,7 @@ Kanban views are ideal for: * **Recruitment**: Track candidates through hiring stages * **Any staged process**: Visualize any workflow with defined stages -## Mejores prácticas +## Best Practices ### Organize Your Stages diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/table-views.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/table-views.mdx index 4e4f05c514..3cbd115aa2 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/table-views.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/table-views.mdx @@ -1,9 +1,9 @@ --- -title: Vistas de Tabla +title: Table Views description: Display your data in a spreadsheet-like list format. --- -## Acerca de las Vistas de Tabla +## About Table Views Table views display records in rows with customizable columns—like a spreadsheet. This is the default view type for most objects. @@ -31,7 +31,7 @@ Organize records into collapsible groups based on a field of select type. * **Manual order**: Drag groups under "Visible groups" to reorder * Click the **eye icon** next to a group to hide it -**Casos de uso:** +**Use cases:** * Group Company by Type * Group Opportunities by Stage diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/view-settings.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/view-settings.mdx index b77ed8aaba..82ae18b783 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/view-settings.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/view-settings.mdx @@ -47,7 +47,7 @@ Change the order views appear in the dropdown: 3. Drop in the desired position 4. Order saves automatically -## Favoritos +## Favorites Pin frequently used views for quick access: diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx index 09328d7bac..8a8c463178 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx @@ -5,7 +5,7 @@ description: Visualize your tasks and deadlines on a calendar. -## Prerrequisitos +## Prerequisites Your Tasks object needs a **Due Date** field (Date or Date & Time type). @@ -17,7 +17,7 @@ Your Tasks object needs a **Due Date** field (Date or Date & Time type). 4. Click **Create** 5. Click **Options** and select **Calendar** as the layout 6. Choose **Due Date** as the date field -7. Haga clic en **Guardar** +7. Click **Save** ## Configure Your Calendar @@ -43,9 +43,9 @@ Create focused views: ## Other Calendar Use Cases -| Objeto | Date Field | Purpose | +| Object | Date Field | Purpose | | ------------- | ---------- | ------------------------- | -| Oportunidades | Close Date | Track expected closes | +| Opportunities | Close Date | Track expected closes | | Custom Events | Event Date | Plan activities | | Projects | Deadline | Monitor project timelines | diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx index 1982837f2d..e8c6d1ed13 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx @@ -9,7 +9,7 @@ Use a Kanban view to visualize your projects (or any object with stages) as card -## Prerrequisitos +## Prerequisites Your object needs a **Select field** to use as columns (e.g., Status, Stage, Phase). @@ -27,7 +27,7 @@ If you don't have one: 4. Click **Create** 5. Click **Options** and select **Kanban** as the layout 6. The view uses your Select field for columns automatically -7. Haga clic en **Guardar** +7. Click **Save** ## Configure Your Board @@ -72,7 +72,7 @@ Drag and drop cards between columns to update their status. | **To Do** | New tasks | | **In Progress** | Active work | | **Review** | Awaiting approval | -| **Done** | Completado | +| **Done** | Completed | ## Related diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx index 4ae52e77e4..a47967e9be 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx @@ -17,13 +17,13 @@ Group your table view by a Select field to organize records into collapsible sec 4. Click **Create** 5. Click **Options → Group** 6. Choose a Select field to group by -7. Haga clic en **Guardar** +7. Click **Save** ## Configure Group Order Under **Options → Group → Sort**, choose how groups are ordered: -| Opción | Descripción | +| Option | Description | | ------------------------ | --------------------------------------------- | | **Alphabetical** | A to Z | | **Reverse alphabetical** | Z to A | @@ -41,7 +41,7 @@ Click the **eye icon** next to a group to hide it from the view. 2. Create a new view named "By Industry" 3. Click **Options → Group** 4. Select the **Industry** field -5. Guardar +5. Save Now your companies are organized by industry, making it easy to focus on one segment at a time. diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx index f2fbaf5201..cd6745664e 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx @@ -1,32 +1,32 @@ --- -title: Restringir el acceso a tu vista -description: Controla quién puede ver tus vistas personalizadas. +title: Restrict Access to Your View +description: Control who can see your custom views. --- -Cada vista (excepto las vistas predeterminadas "Todas las [Object Name]") tiene su propia configuración de visibilidad. +Each view (except the default "All [Object Name]" views) has its own visibility setting. -## Pasos +## Steps -1. Abre la vista que deseas restringir -2. Haz clic en **Opciones** en la esquina superior derecha -3. Haz clic en **Visibilidad** -4. Selecciona **No listada** +1. Open the view you want to restrict +2. Click **Options** in the top right +3. Click **Visibility** +4. Select **Unlisted** -Tu vista ahora es visible solo para ti. +Your view is now visible only to you. -## Opciones de visibilidad +## Visibility Options -| Configuración | Quién puede ver | -| ---------------------- | ----------------------------------------- | -| **Espacio de trabajo** | Todos los miembros del espacio de trabajo | -| **No listada** | Solo tú | +| Setting | Who Can See | +| ------------- | --------------------- | +| **Workspace** | All workspace members | +| **Unlisted** | Only you | -## Notas +## Notes -* Las vistas predeterminadas "Todas las [Object Name]" no se pueden establecer como no listadas -* Las vistas no listadas no aparecen en los menús desplegables de vistas de otros usuarios -* Puedes cambiar la visibilidad de nuevo a Espacio de trabajo en cualquier momento +* The default "All [Object Name]" views cannot be made unlisted +* Unlisted views don't appear in other users' view dropdowns +* You can change visibility back to Workspace at any time -## Relacionado +## Related -* [Configuración de vistas](/l/es/user-guide/views-pipelines/capabilities/view-settings) — todas las opciones de configuración de vistas +* [View Settings](/l/es/user-guide/views-pipelines/capabilities/view-settings) — all view configuration options diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx index b163a1a931..33f4f13187 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx @@ -20,7 +20,7 @@ Stages are defined in the Opportunities object's **Stage** field. ### Recommended Stages -| Etapa | Purpose | +| Stage | Purpose | | --------------- | ----------------------------------- | | **New** | Fresh opportunities just identified | | **Qualified** | Confirmed as a good fit | @@ -100,7 +100,7 @@ Drag and drop opportunity cards between columns to update their stage. -## Mejores prácticas +## Best Practices ### Pipeline Hygiene diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx index 87a253c0c1..e8542f8364 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx @@ -1,149 +1,149 @@ --- -title: Mostrar el Importe previsto en tu pipeline -description: Calcula y muestra valores ponderados de las oportunidades según la probabilidad de la etapa. +title: Show Expected Amount in Your Pipeline +description: Calculate and display weighted deal values based on stage probability. --- -El Importe previsto es un valor calculado: **Importe × Probabilidad**. Esto te ayuda a pronosticar ingresos ponderando las oportunidades según la probabilidad de que se cierren. +The Expected Amount is a calculated value: **Amount × Probability**. This helps you forecast revenue by weighting deals based on how likely they are to close. - Este es un ejemplo de creación de [Campos de fórmula](/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields) usando flujos de trabajo. + This is an example of creating [Formula Fields](/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields) using workflows. -Esta guía te acompaña para configurar los campos personalizados y los flujos de trabajo necesarios para calcular y mostrar importes previstos en tu pipeline. +This guide walks you through setting up the custom fields and workflows needed to calculate and display expected amounts in your pipeline. -## Paso 1: Crear campos personalizados +## Step 1: Create Custom Fields -Necesitas dos campos personalizados en el objeto Oportunidades. +You need two custom fields on the Opportunities object. -### Crear el campo Probabilidad +### Create the Probability Field -1. Ve a **Ajustes → Modelo de datos → Oportunidades** -2. Haz clic en **+ Añadir campo** -3. Configurar: - * **Nombre**: Probabilidad - * **Tipo**: Número - * **Descripción**: Probabilidad según etapa (0-100%) -4. Haga clic en **Guardar** +1. Go to **Settings → Data Model → Opportunities** +2. Click **+ Add Field** +3. Configure: + * **Name**: Probability + * **Type**: Number + * **Description**: Stage-based probability (0-100%) +4. Click **Save** -### Crear el campo Importe previsto +### Create the Expected Amount Field -1. Haz clic en **+ Añadir campo** -2. Configurar: - * **Nombre**: Importe previsto - * **Tipo**: Moneda - * **Descripción**: Calculado: Importe × Probabilidad -3. Haga clic en **Guardar** +1. Click **+ Add Field** +2. Configure: + * **Name**: Expected Amount + * **Type**: Currency + * **Description**: Calculated: Amount × Probability +3. Click **Save** -### Opcional: Hacer que los campos sean de solo lectura para los usuarios +### Optional: Make Fields Read-Only for Users -Si no quieres que los usuarios editen manualmente estos campos calculados: +If you don't want users manually editing these calculated fields: -1. Ve a **Ajustes → Roles** -2. Selecciona el rol a configurar -3. Busca el objeto Oportunidades -4. Establece los campos **Probabilidad** e **Importe previsto** como de solo lectura +1. Go to **Settings → Roles** +2. Select the role to configure +3. Find the Opportunities object +4. Set **Probability** and **Expected Amount** fields to read-only -Esto garantiza que solo los flujos de trabajo puedan actualizar estos valores. +This ensures only the workflows can update these values. -## Paso 2: Crear el flujo de trabajo #1 — Actualizar la Probabilidad al cambiar de etapa +## Step 2: Create Workflow #1 — Update Probability on Stage Change -Este flujo de trabajo establece automáticamente la Probabilidad cuando una oportunidad pasa a una nueva etapa. +This workflow automatically sets the Probability when an opportunity moves to a new stage. -### Crear el flujo de trabajo +### Create the Workflow -1. Ve a **Flujos de trabajo** -2. Haz clic en **+ Nuevo flujo de trabajo** -3. Ponle el nombre "Actualizar la Probabilidad al cambiar de etapa" +1. Go to **Workflows** +2. Click **+ New Workflow** +3. Name it "Update Probability on Stage Change" -### Configurar el desencadenador +### Configure the Trigger -1. Añade un desencadenador **Registro creado o actualizado** -2. Selecciona **Oportunidades** como objeto -3. Filtrar en: se actualiza el campo **Etapa** +1. Add a **Record Created or Updated** trigger +2. Select **Opportunities** as the object +3. Filter on: **Stage** field is updated -### Añadir ramas para cada etapa +### Add Branches for Each Stage -Crea una rama para cada etapa con su probabilidad: +Create a branch for each stage with its probability: -| Etapa | Probabilidad | -| --------------- | ------------ | -| Nuevo | 10% | -| Calificado | 25% | -| Reunión | 40% | -| Propuesta | 60% | -| Negociación | 80% | -| Cerrado ganado | 100% | -| Cerrado perdido | 0% | +| Stage | Probability | +| ----------- | ----------- | +| New | 10% | +| Qualified | 25% | +| Meeting | 40% | +| Proposal | 60% | +| Negotiation | 80% | +| Closed Won | 100% | +| Closed Lost | 0% | - Para crear una nueva rama, haz clic derecho en el lienzo del flujo de trabajo y haz clic en **Nueva acción**. Luego, vincula esta acción al nodo anterior arrastrando la flecha desde el nodo anterior hasta esta nueva acción. + To create a new branch, right click on the workflow canvas and click **New action**. Then, link this action to the previous node by dragging the arrow from the previous node to this new action. -Para cada etapa: +For each stage: -1. Añade un nodo **Filtro**: Etapa = [nombre de la etapa] -2. Añade una acción **Actualizar registro**: - * Registro: la Oportunidad desencadenante - * Campo: Probabilidad - * Valor: [probabilidad para esa etapa] +1. Add a **Filter** node: Stage = [stage name] +2. Add an **Update Record** action: + * Record: The triggering Opportunity + * Field: Probability + * Value: [probability for that stage] -### Calcular el Importe previsto +### Calculate Expected Amount -Después de que las ramas se vuelvan a unir: +After the branches rejoin: -1. Añade un nodo **Filtro**: el Importe no está vacío -2. Añade una acción **Actualizar registro**: - * Registro: la Oportunidad desencadenante - * Campo: Importe previsto - * Valor: Importe × Probabilidad +1. Add a **Filter** node: Amount is not empty +2. Add an **Update Record** action: + * Record: The triggering Opportunity + * Field: Expected Amount + * Value: Amount × Probability -## Paso 3: Crear el flujo de trabajo #2 — Recalcular al cambiar el Importe +## Step 3: Create Workflow #2 — Recalculate on Amount Change -Este flujo de trabajo actualiza el Importe previsto cuando cambia el Importe de la oportunidad. +This workflow updates the Expected Amount when the deal Amount changes. -### Crear el flujo de trabajo +### Create the Workflow -1. Ve a **Flujos de trabajo** -2. Haz clic en **+ Nuevo flujo de trabajo** -3. Ponle el nombre "Recalcular el Importe previsto al cambiar el Importe" +1. Go to **Workflows** +2. Click **+ New Workflow** +3. Name it "Recalculate Expected Amount on Amount Change" -### Configurar el desencadenador +### Configure the Trigger -1. Añade un desencadenador **Registro creado o actualizado** -2. Selecciona **Oportunidades** como objeto -3. Filtrar en: se actualiza el campo **Importe** +1. Add a **Record Created or Updated** trigger +2. Select **Opportunities** as the object +3. Filter on: **Amount** field is updated -### Añadir la lógica +### Add the Logic -1. Añade un nodo **Filtro**: el Importe no está vacío -2. Añade una acción **Actualizar registro**: - * Registro: la Oportunidad desencadenante - * Campo: Importe previsto - * Valor: Importe × Probabilidad +1. Add a **Filter** node: Amount is not empty +2. Add an **Update Record** action: + * Record: The triggering Opportunity + * Field: Expected Amount + * Value: Amount × Probability -## Paso 4: Mostrarlo en tu pipeline +## Step 4: Display in Your Pipeline -Ahora muestra los totales de Importe previsto en tu vista Kanban: +Now show the Expected Amount totals in your Kanban view: -1. Abre tu vista Kanban de Pipeline de ventas -2. Haz clic en el número junto al nombre de cualquier etapa en la parte superior de una columna -3. Selecciona **Suma** -4. Elige **Importe previsto** +1. Open your **Sales Pipeline** Kanban view +2. Click the **number** next to any Stage name at the top of a column +3. Select **Sum** +4. Choose **Expected Amount** -Cada columna ahora muestra el valor total ponderado del pipeline para esa etapa. +Each column now shows the total weighted pipeline value for that stage. -## Resumen +## Summary -| Componente | Propósito | -| ----------------------------- | -------------------------------------------------------------------------------------- | -| **Campo de Probabilidad** | Almacena la probabilidad de ganar según la etapa | -| **Campo de Importe previsto** | Almacena Importe × Probabilidad | -| **Flujo de trabajo #1** | Actualiza la Probabilidad cuando cambia la Etapa y luego recalcula el Importe previsto | -| **Flujo de trabajo #2** | Recalcula el Importe previsto cuando cambia el Importe | -| **Agregación** | Muestra la suma del Importe previsto por etapa | +| Component | Purpose | +| ------------------------- | ------------------------------------------------------------------------- | +| **Probability field** | Stores the stage-based win probability | +| **Expected Amount field** | Stores Amount × Probability | +| **Workflow #1** | Updates Probability when Stage changes, then recalculates Expected Amount | +| **Workflow #2** | Recalculates Expected Amount when Amount changes | +| **Aggregation** | Displays Sum of Expected Amount per stage | -## Relacionado +## Related -* [Campos de fórmula](/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields) — crea campos calculados usando flujos de trabajo -* [Vistas Kanban](/l/es/user-guide/views-pipelines/capabilities/kanban-views) — agregaciones por columna -* [Cómo crear campos personalizados](/l/es/user-guide/data-model/how-tos/create-custom-fields) — configuración de campos +* [Formula Fields](/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields) — create calculated fields using workflows +* [Kanban Views](/l/es/user-guide/views-pipelines/capabilities/kanban-views) — column aggregations +* [How to Create Custom Fields](/l/es/user-guide/data-model/how-tos/create-custom-fields) — field configuration diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx index 9269fb8de1..c56e7caf0e 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx @@ -1,104 +1,104 @@ --- -title: Realiza un seguimiento de cuánto tiempo permanecen las oportunidades en cada etapa. -description: Supervisa la velocidad de las oportunidades registrando cuándo ingresan a cada etapa. +title: Track How Long Opportunities Stay in Each Stage +description: Monitor deal velocity by tracking when opportunities enter each stage. --- - Este es un ejemplo de cómo crear [Campos de fórmula](/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields) usando flujos de trabajo — específicamente cálculos de fechas. + This is an example of creating [Formula Fields](/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields) using workflows — specifically date calculations. -Registrar cuándo las oportunidades ingresan a cada etapa te ayuda a identificar cuellos de botella y medir la velocidad de las oportunidades. +Tracking when opportunities enter each stage helps you identify bottlenecks and measure deal velocity. -Esta guía te muestra cómo configurar campos personalizados y un flujo de trabajo para registrar automáticamente cuándo una oportunidad pasa a cada etapa y calcular cuántos días pasó en la etapa anterior. +This guide walks you through setting up custom fields and a workflow to automatically record when an opportunity moves to each stage, and calculate how many days it spent in the previous stage. -## Paso 1: Crear campos personalizados +## Step 1: Create Custom Fields -Necesitas dos tipos de campos para cada etapa: +You need two types of fields for each stage: -* **Campos de fecha y hora**: Registran cuándo la oportunidad ingresó a cada etapa -* **Campos numéricos**: Almacenan cuántos días pasó la oportunidad en cada etapa +* **Date & Time fields**: Record when the opportunity entered each stage +* **Number fields**: Store how many days the opportunity spent in each stage -### Crea los campos "Última entrada" +### Create the "Last Entered" Fields -1. Ve a **Ajustes → Modelo de datos → Oportunidades** -2. Para cada etapa, haz clic en **+ Agregar campo** y configura: - * **Nombre**: Última entrada en [Nombre de la etapa] (p. ej., "Última entrada en Nuevo", "Última entrada en Calificado") - * **Tipo**: Fecha y hora - * **Descripción**: Marca de tiempo cuando la oportunidad ingresó a esta etapa -3. Haga clic en **Guardar** +1. Go to **Settings → Data Model → Opportunities** +2. For each stage, click **+ Add Field** and configure: + * **Name**: Last Entered [Stage Name] (e.g., "Last Entered New", "Last Entered Qualified") + * **Type**: Date & Time + * **Description**: Timestamp when opportunity entered this stage +3. Click **Save** -Crea estos campos: +Create these fields: -* Última entrada en Nuevo -* Última entrada en Calificado -* Última entrada en Reunión -* Última entrada en Propuesta -* Última entrada en Negociación -* Última entrada en Cerrado ganado -* Última entrada en Cerrado perdido +* Last Entered New +* Last Entered Qualified +* Last Entered Meeting +* Last Entered Proposal +* Last Entered Negotiation +* Last Entered Closed Won +* Last Entered Closed Lost -### Crea los campos "Días en la etapa" +### Create the "Days in Stage" Fields -1. Para cada etapa, haz clic en **+ Agregar campo** y configura: - * **Nombre**: Días en [Nombre de la etapa] (p. ej., "Días en Nuevo", "Días en Calificado") - * **Tipo**: Número - * **Descripción**: Número de días que pasó en esta etapa -2. Haga clic en **Guardar** +1. For each stage, click **+ Add Field** and configure: + * **Name**: Days in [Stage Name] (e.g., "Days in New", "Days in Qualified") + * **Type**: Number + * **Description**: Number of days spent in this stage +2. Click **Save** -Crea estos campos: +Create these fields: -* Días en Nuevo -* Días en Calificado -* Días en Reunión -* Días en Propuesta -* Días en Negociación +* Days in New +* Days in Qualified +* Days in Meeting +* Days in Proposal +* Days in Negotiation - No necesitas campos "Días en" para Cerrado ganado y Cerrado perdido, ya que son etapas finales. + You don't need "Days in" fields for Closed Won and Closed Lost since those are final stages. -### Opcional: Hacer que los campos sean de solo lectura +### Optional: Make Fields Read-Only -Si no quieres que los usuarios editen manualmente estos campos calculados: +If you don't want users manually editing these calculated fields: -1. Ve a **Ajustes → Roles** -2. Selecciona el rol que deseas configurar -3. Busca el objeto Oportunidades -4. Configura los campos "Última entrada" y "Días en" como de solo lectura +1. Go to **Settings → Roles** +2. Select the role to configure +3. Find the Opportunities object +4. Set the "Last Entered" and "Days in" fields to read-only -## Paso 2: Crear el flujo de trabajo +## Step 2: Create the Workflow -Este único flujo de trabajo gestiona ambas tareas: +This single workflow handles both tasks: -* Registra la marca de tiempo al entrar en una nueva etapa -* Calcula los días que se pasaron en la etapa anterior +* Records the timestamp when entering a new stage +* Calculates days spent in the previous stage -### Crea el flujo de trabajo +### Create the Workflow -1. Ve a **Flujos de trabajo** -2. Haz clic en **+ Nuevo flujo de trabajo** -3. Ponle el nombre "Seguimiento del tiempo por etapa" +1. Go to **Workflows** +2. Click **+ New Workflow** +3. Name it "Track Stage Time" -### Configura el disparador +### Configure the Trigger -1. Agrega un disparador **Registro actualizado** -2. Selecciona **Oportunidades** como objeto -3. Filtrar por: el campo **Etapa** se actualiza +1. Add a **Record Updated** trigger +2. Select **Opportunities** as the object +3. Filter on: **Stage** field is updated -### Agrega ramas para cada etapa +### Add Branches for Each Stage - Para crear una nueva rama, haz clic derecho en el lienzo del flujo de trabajo y haz clic en **Nueva acción**. Luego, vincula esta acción al nodo anterior arrastrando la flecha desde el nodo anterior hasta esta nueva acción. + To create a new branch, right click on the workflow canvas and click **New action**. Then, link this action to the previous node by dragging the arrow from the previous node to this new action. --- -**Rama 1: Etapa = Nuevo (primera etapa)** +**Branch 1: Stage = New (first stage)** -Como esta es la primera etapa, solo registramos la marca de tiempo de entrada; no hay una etapa anterior que calcular. +Since this is the first stage, we only record the entry timestamp—no previous stage to calculate. -1. Agrega un nodo **Filtro**: Etapa = Nuevo -2. Agrega una acción de **Código**: +1. Add a **Filter** node: Stage = New +2. Add a **Code** action: ```javascript export const main = async (): Promise => { @@ -106,19 +106,19 @@ export const main = async (): Promise => { }; ``` -3. Agrega una acción **Actualizar registro**: - * Registro: la Oportunidad que activó el evento - * Campo: Última entrada en Nuevo - * Valor: `now` del nodo de Código +3. Add an **Update Record** action: + * Record: The triggering Opportunity + * Field: Last Entered New + * Value: `now` from Code node --- -**Rama 2: Etapa = Calificado** +**Branch 2: Stage = Qualified** -Al pasar a Calificado, registra la hora de entrada Y calcula los días que se pasaron en Nuevo. +When moving to Qualified, record entry time AND calculate days spent in New. -1. Agrega un nodo **Filtro**: Etapa = Calificado -2. Agrega una acción de **Código**: +1. Add a **Filter** node: Stage = Qualified +2. Add a **Code** action: ```javascript export const main = async (params: { @@ -138,21 +138,21 @@ export const main = async (params: { }; ``` -3. Configura la entrada del nodo de Código: mapea `lastEnteredPreviousStage` al campo **Última entrada en Nuevo** -4. Agrega una acción **Actualizar registro**: - * Registro: la Oportunidad que activó el evento - * Campos a actualizar: - * Última entrada en Calificado = `now` - * Días en Nuevo = `daysInPreviousStage` +3. Configure the Code node input: map `lastEnteredPreviousStage` to the **Last Entered New** field +4. Add an **Update Record** action: + * Record: The triggering Opportunity + * Fields to update: + * Last Entered Qualified = `now` + * Days in New = `daysInPreviousStage` --- -**Rama 3: Etapa = Reunión** +**Branch 3: Stage = Meeting** -Al pasar a Reunión, registra la hora de entrada Y calcula los días que se pasaron en Calificado. +When moving to Meeting, record entry time AND calculate days spent in Qualified. -1. Agrega un nodo **Filtro**: Etapa = Reunión -2. Agrega una acción de **Código**: +1. Add a **Filter** node: Stage = Meeting +2. Add a **Code** action: ```javascript export const main = async (params: { @@ -172,60 +172,60 @@ export const main = async (params: { }; ``` -3. Configura la entrada del nodo de Código: mapea `lastEnteredPreviousStage` al campo **Última entrada en Calificado** -4. Agrega una acción **Actualizar registro**: - * Registro: la Oportunidad que activó el evento - * Campos a actualizar: - * Última entrada en Reunión = `now` - * Días en Calificado = `daysInPreviousStage` +3. Configure the Code node input: map `lastEnteredPreviousStage` to the **Last Entered Qualified** field +4. Add an **Update Record** action: + * Record: The triggering Opportunity + * Fields to update: + * Last Entered Meeting = `now` + * Days in Qualified = `daysInPreviousStage` --- -**Continúa con las etapas restantes:** +**Continue for remaining stages:** -| Etapa | Registros | Calcula | -| --------------- | --------------------------------- | ------------------- | -| Propuesta | Última entrada en Propuesta | Días en Reunión | -| Negociación | Última entrada en Negociación | Días en Propuesta | -| Cerrado ganado | Última entrada en Cerrado ganado | Días en Negociación | -| Cerrado perdido | Última entrada en Cerrado perdido | Días en Negociación | +| Stage | Records | Calculates | +| ----------- | ------------------------ | ------------------- | +| Proposal | Last Entered Proposal | Days in Meeting | +| Negotiation | Last Entered Negotiation | Days in Proposal | +| Closed Won | Last Entered Closed Won | Days in Negotiation | +| Closed Lost | Last Entered Closed Lost | Days in Negotiation | -Las ramas no necesitan volver a unirse; cada una se ejecuta de forma independiente cuando se cumple su condición de etapa. +The branches do not need to rejoin—each runs independently when its stage condition is met. -## Paso 3: Analizar el tiempo en la etapa +## Step 3: Analyze Time in Stage -Con las marcas de tiempo y los recuentos de días registrados, ahora puedes analizar la velocidad de las oportunidades. +With timestamps and day counts recorded, you can now analyze deal velocity. -### Crea una vista "Oportunidades lentas" +### Create a "Slow Deals" View -1. Crea una vista de tabla de Oportunidades -2. Agrega columnas: Nombre, Etapa, Días en [etapa anterior], Importe -3. Ordena por el campo "Días en" (descendente) -4. Filtra por Etapa para centrarte en una etapa a la vez +1. Create a Table view of Opportunities +2. Add columns: Name, Stage, Days in [previous stage], Amount +3. Sort by "Days in" field (descending) +4. Filter by Stage to focus on one stage at a time -Las oportunidades en la parte superior pasaron más tiempo en la etapa anterior. +Deals at the top spent the most time in the previous stage. -### Usa agregaciones +### Use Aggregations -En tu vista Kanban del pipeline: +In your pipeline Kanban view: -1. Haz clic en el número junto al nombre de una Etapa -2. Selecciona **Promedio** -3. Elige un campo "Días en" +1. Click the number next to a Stage name +2. Select **Average** +3. Choose a "Days in" field -Esto muestra el tiempo promedio que las oportunidades pasan en cada etapa. +This shows the average time deals spend in each stage. -## Resumen +## Summary -| Componente | Propósito | -| --------------------------- | ------------------------------------------------------------------------- | -| **Campos "Última entrada"** | Almacenan cuándo la oportunidad ingresó a cada etapa | -| **Campos "Días en"** | Almacenan cuántos días se pasaron en cada etapa | -| **Flujo de trabajo** | Registra la marca de tiempo Y calcula los días en una sola pasada | -| **Vistas y agregaciones** | Analiza la velocidad de las oportunidades e identifica cuellos de botella | +| Component | Purpose | +| ------------------------ | ------------------------------------------------- | +| **Last Entered fields** | Store when opportunity entered each stage | +| **Days in fields** | Store how many days spent in each stage | +| **Workflow** | Records timestamp AND calculates days in one pass | +| **Views & Aggregations** | Analyze deal velocity and identify bottlenecks | -## Relacionado +## Related -* [Flujos de trabajo](/l/es/user-guide/workflows/overview) — conceptos básicos de automatización -* [Cómo crear campos personalizados](/l/es/user-guide/data-model/how-tos/create-custom-fields) — configuración de campos -* [Vistas Kanban](/l/es/user-guide/views-pipelines/capabilities/kanban-views) — agregaciones +* [Workflows](/l/es/user-guide/workflows/overview) — automation basics +* [How to Create Custom Fields](/l/es/user-guide/data-model/how-tos/create-custom-fields) — field configuration +* [Kanban Views](/l/es/user-guide/views-pipelines/capabilities/kanban-views) — aggregations diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/overview.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/overview.mdx index 6bd2218717..9f652fe48c 100644 --- a/packages/twenty-docs/l/es/user-guide/views-pipelines/overview.mdx +++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/overview.mdx @@ -1,137 +1,137 @@ --- -title: Vistas y embudos -description: Aprende a crear y gestionar vistas en Twenty. +title: Views & Pipelines +description: Learn how to create and manage views in Twenty. image: /images/user-guide/table-views/table.png --- import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; - Vistas y embudos + Views & Pipelines -## Comprender las vistas +## Understanding Views -Las vistas son configuraciones guardadas que determinan cómo se muestran tus datos. Cada vista puede tener sus propios: +Views are saved configurations that determine how your data is displayed. Each view can have its own: -* **Diseño**: Tabla, Kanban o Calendario -* **Filtros**: Qué registros mostrar -* **Ordenación**: Cómo se ordenan los registros -* **Campos**: Qué columnas son visibles +* **Layout**: Table, Kanban, or Calendar +* **Filters**: Which records to show +* **Sorting**: How records are ordered +* **Fields**: Which columns are visible -## Tipos de vista +## View Types -### Vista de tabla +### Table View -La vista predeterminada tipo hoja de cálculo que muestra los registros en filas con columnas personalizables. +The default spreadsheet-like view showing records in rows with customizable columns. -### Vista Kanban +### Kanban View -Una vista de tablero visual en la que los registros aparecen como tarjetas organizadas por etapas. Ideal para: +A visual board view where records appear as cards organized by stages. Ideal for: -* Embudos de ventas -* Seguimiento de proyectos -* Cualquier flujo de trabajo con etapas definidas +* Sales pipelines +* Project tracking +* Any workflow with defined stages -### Vista del calendario +### Calendar View -Muestra los registros con campos de fecha en un calendario. Perfecto para: +Display records with date fields on a calendar. Perfect for: -* Reuniones y eventos -* Fechas límite y vencimientos -* Planificación basada en el tiempo +* Meetings and events +* Deadlines and due dates +* Time-based planning -## Creación de una Vista +## Creating a View -Hay dos maneras de crear una nueva vista. +There are two ways to create a new view. -### Usa el menú desplegable de vistas +### Use the View Dropdown Menu -1. Ve a cualquier objeto (Personas, Empresas, etc.) -2. Haz clic en el nombre de la vista en la parte superior izquierda (muestra la vista actual con una flecha desplegable) -3. Haz clic en **+ Añadir vista** -4. Asigna un nombre a tu vista y haz clic en **Crear** -5. Elige un diseño (Tabla, Kanban o Calendario) en **Opciones** -6. Añade filtros y ordenación según sea necesario -7. Selecciona qué campos mostrar y reordénalos -8. Haga clic en **Guardar** +1. Navigate to any object (People, Companies, etc.) +2. Click the view name at the top left (shows current view with a dropdown arrow) +3. Click **+ Add view** +4. Name your view and click **Create** +5. Choose a layout (Table, Kanban, or Calendar) under **Options** +6. Add filters and sorting as needed +7. Select which fields to display and reorder them +8. Click **Save** - + -### Comienza editando una vista existente +### Start by editting an existing view -1. Ve a cualquier objeto (Personas, Empresas, etc.) -2. Elige un diseño (Tabla, Kanban o Calendario) en **Opciones** o añade filtros y ordenación según sea necesario -3. Haz clic en **Guardar como nueva vista** -4. Asigna un nombre a tu vista y haz clic en **Crear** -5. Sigue editando tu nueva vista -6. Haz clic en **Actualizar vista** para guardar tus ajustes adicionales +1. Navigate to any object (People, Companies, etc.) +2. Choose a layout (Table, Kanban, or Calendar) under **Options** or Add filters and sorting as needed +3. Click on **Save as new view** +4. Name your view and click **Create** +5. Keep editing your new view +6. Click on **Update view** to save your additional configurations - + -## Administrar vistas +## Managing Views -### Editar una vista +### Edit a View -1. Selecciona la vista en el menú desplegable -2. Realiza tus cambios (filtros, ordenación, columnas) -3. Haz clic en **Guardar** para actualizar la vista +1. Select the view from the dropdown +2. Make your changes (filters, sorting, columns) +3. Click **Save** to update the view -### Cambiar el nombre de una vista o su icono +### Rename a View or Change Its Icon -1. Abre el menú desplegable de la vista -2. Haz clic en el menú **⋮** junto al nombre de la vista -3. Selecciona **Editar** -4. Cambia el nombre o el icono -5. Haga clic en **Guardar** +1. Open the view dropdown +2. Click the **⋮** menu next to the view name +3. Select **Edit** +4. Change the name or icon +5. Click **Save** -### Reordenar vistas +### Reorder Views -1. Abre el menú desplegable de la vista -2. Haz clic y arrastra una vista por su controlador -3. Suéltala en la posición deseada -4. El nuevo orden se guarda automáticamente +1. Open the view dropdown +2. Click and drag a view by its handle +3. Drop it in the desired position +4. The new order is saved automatically -### Añadir a favoritos +### Add to Favorites -Fija las vistas que usas con frecuencia para un acceso rápido: +Pin frequently used views for quick access: -1. Abre el menú desplegable de la vista -2. Haz clic en el menú **⋮** junto a una vista -3. Selecciona **Añadir a favoritos** -4. La vista aparece en tu sección de favoritos +1. Open the view dropdown +2. Click the **⋮** menu next to a view +3. Select **Add to favorites** +4. The view appears in your favorites section -### Eliminar una vista +### Delete a View -1. Selecciona la vista que deseas eliminar -2. Haz clic en el menú desplegable de la vista -3. Haz clic en el menú **⋮** junto a la vista -4. Selecciona **Eliminar** -5. Confirma la eliminación +1. Select the view to delete +2. Click the view dropdown +3. Click the **⋮** menu next to the view +4. Select **Delete** +5. Confirm deletion - Las vistas eliminadas no se pueden recuperar. Asegúrate de que deseas eliminarla antes de confirmar. + Deleted views cannot be recovered. Make sure you want to remove it before confirming. -## Visibilidad de la vista +## View Visibility -Cada vista (excepto las vistas predeterminadas "All [Object Name]") tiene su propia configuración de visibilidad. +Each view (except the default "All [Object Name]" views) has its own visibility setting. -Para cambiar la visibilidad: +To change visibility: -1. Abre la vista -2. Haz clic en **Opciones → Visibilidad** -3. Elige: - * **Espacio de trabajo**: Visible para todos los miembros del espacio de trabajo - * **No listado**: Visible solo para ti +1. Open the view +2. Click **Options → Visibility** +3. Choose: + * **Workspace**: Visible to all workspace members + * **Unlisted**: Visible only to you - No se puede cambiar la visibilidad de las vistas predeterminadas "All [Object Name]". + The default "All [Object Name]" views cannot have their visibility changed. -## Próximos Pasos +## Next Steps -* [Vistas de tabla](/l/es/user-guide/views-pipelines/capabilities/table-views) -* [Vistas Kanban](/l/es/user-guide/views-pipelines/capabilities/kanban-views) -* [Filtros y ordenación](/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting) -* [Configuración de la vista](/l/es/user-guide/views-pipelines/capabilities/view-settings) +* [Table Views](/l/es/user-guide/views-pipelines/capabilities/table-views) +* [Kanban Views](/l/es/user-guide/views-pipelines/capabilities/kanban-views) +* [Filters and Sorting](/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting) +* [View Settings](/l/es/user-guide/views-pipelines/capabilities/view-settings) diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/send-emails-from-workflows.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/send-emails-from-workflows.mdx index eb4dfe985d..97ebd0b948 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/send-emails-from-workflows.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/send-emails-from-workflows.mdx @@ -6,7 +6,7 @@ image: /images/user-guide/workflows/workflow.png Automatically send emails when specific events occur in your CRM—welcome new contacts, follow up on opportunities, or notify team members. -## Prerrequisitos +## Prerequisites Before you can send emails from workflows: @@ -19,7 +19,7 @@ Before you can send emails from workflows: **Goal**: Send a welcome email when a new person is added to the CRM. -**Configuración**: +**Setup**: 1. **Create workflow**: Go to **Settings → Workflows** and click **+ New Workflow** @@ -30,10 +30,10 @@ Before you can send emails from workflows: * Select **Send Email** * Configure the email: -| Campo | Valor | +| Field | Value | | ----------- | -------------------------------------- | | **To** | `{{trigger.object.email}}` | -| **Subject** | `Bienvenido a {{Your Company Name}}` | +| **Subject** | `Welcome to {{Your Company Name}}` | | **Body** | `Hi {{trigger.object.firstName}}, ...` | 4. **Test and activate**: Test with a sample record, then activate @@ -55,7 +55,7 @@ The Team ### Available Variables from Triggers -| Tipo de disparador | Common Variables | +| Trigger Type | Common Variables | | -------------------------- | -------------------------------------- | | **Record Created/Updated** | `{{trigger.object.fieldName}}` | | **Manual** | `{{trigger.selectedRecord.fieldName}}` | @@ -67,7 +67,7 @@ The Team **Goal**: Send different welcome emails based on where the lead came from. -**Configuración**: +**Setup**: 1. **Trigger**: Record is Created (People) @@ -85,7 +85,7 @@ The Team **Goal**: Email the sales rep and their manager when an opportunity is won. -**Configuración**: +**Setup**: 1. **Trigger**: Record is Updated (Opportunities, Stage = "Closed Won") @@ -105,7 +105,7 @@ The Team **Goal**: Send a follow-up email 3 days after a meeting is logged. -**Configuración**: +**Setup**: 1. **Trigger**: Record is Created (Activities, Type = "Meeting") @@ -116,7 +116,7 @@ The Team * Subject: Following up on our conversation * Body: Reference meeting details from trigger -## Mejores prácticas +## Best Practices ### Email Content @@ -132,7 +132,7 @@ The Team * Avoid spam trigger words * Ensure unsubscribe options for marketing emails -### Solución de Problemas +### Troubleshooting * Verify email account is connected and active * Check recipient email address is valid diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-branches-in-workflows.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-branches-in-workflows.mdx index 7dfe893a36..a5e103e71a 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-branches-in-workflows.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-branches-in-workflows.mdx @@ -76,7 +76,7 @@ Trigger The confirmation email sends only after both the customer update and ticket creation are done. -## Mejores prácticas +## Best Practices * Always use **Filter nodes** at the start of branches when you want conditional execution * Keep branch conditions **mutually exclusive** to avoid duplicate actions diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-iterator.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-iterator.mdx index 17ab5149c6..88767106ff 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-iterator.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-iterator.mdx @@ -12,7 +12,7 @@ Iterator lets you loop through an array of records and perform actions on each o ## When to Use Iterator -| Scenario | Ejemplo | +| Scenario | Example | | -------------------------- | ---------------------------------------------- | | **Process search results** | Send email to each person found | | **Handle webhook arrays** | Create records for each item in order | @@ -62,7 +62,7 @@ Actions placed after Iterator run for each item: 3. Subject: Hello `{{iterator.currentItem.firstName}}`! 4. Body: Personalized message using current item fields -### Resultado +### Result If Search Records returns 5 people, the Iterator: @@ -74,7 +74,7 @@ If Search Records returns 5 people, the Iterator: Inside Iterator, use `{{iterator.currentItem}}` to access the current record: -| Variable | Descripción | +| Variable | Description | | --------------------------------------- | ----------------------------------- | | `{{iterator.currentItem}}` | The entire current record object | | `{{iterator.currentItem.id}}` | Record ID | @@ -125,7 +125,7 @@ Inside Iterator, use `{{iterator.currentItem}}` to access the current record: - To: {{iterator.currentItem.email}} ``` -## Solución de Problemas +## Troubleshooting ### "Iterator expects an array" @@ -165,7 +165,7 @@ Filter: {{searchRecords.length}} > 0 * **Limits**: Consider batching very large operations * **Rate limits**: External API calls may hit rate limits with many iterations -## Mejores prácticas +## Best Practices 1. **Always check array length** before Iterator to avoid errors 2. **Add filters inside loops** when not all items need processing diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-actions.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-actions.mdx index aefa4a752a..8ec579b01d 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-actions.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-actions.mdx @@ -1,5 +1,5 @@ --- -title: Acciones del Flujo de Trabajo +title: Workflow Actions description: Learn about the actions available in Twenty workflows. --- @@ -7,7 +7,7 @@ import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; ## About Actions -Las acciones definen lo que ocurre después de que se dispara un activador. You can chain multiple actions together to build complex automations. +Actions define what happens after a trigger fires. You can chain multiple actions together to build complex automations. * Use the variable picker (click the `(x+)` icon) to browse available data from previous steps @@ -19,56 +19,56 @@ Las acciones definen lo que ocurre después de que se dispara un activador. You -### Crear un Registro +### Create a Record -Agrega un nuevo registro a un objeto seleccionado. +Adds a new record to a selected object. -**Configuración**: +**Configuration**: -* Seleccione el objeto de destino -* Complete los campos obligatorios y opcionales +* Select the target object +* Fill out the required and optional fields * Use data from previous steps or input values manually to populate fields -**Salida**: Los datos del registro recién creado están disponibles para su uso en pasos posteriores. +**Output**: The newly created record data is available for use in subsequent steps. -### Actualizar Registro +### Update Record -Modifica un registro existente en un objeto seleccionado. +Modifies an existing record in a selected object. -**Configuración**: +**Configuration**: -* Seleccione el objeto de destino -* Elija el registro específico a actualizar. +* Select the target object +* Choose the specific record to update. * You can either choose a fixed record, using the drop down menu displaying all available records. * Or you can have the record dynamically selected, by designating a record found in a previous step, using the `(x+)`. You cannot search for the record based on different criteria at this stage. If you've not yet identified the record, add a `Search Record` step before this `Update Record` step. -* Seleccione campos a modificar e ingrese nuevos valores +* Select fields to modify and enter new values -**Salida**: Los datos del registro actualizado están disponibles para su uso en pasos posteriores. +**Output**: The updated record data is available for use in subsequent steps. -### Eliminar Registro +### Delete Record -Elimina un registro de un objeto seleccionado. +Removes a record from a selected object. -**Configuración**: +**Configuration**: -* Seleccione el objeto de destino -* Elija el registro específico a eliminar +* Select the target object +* Choose the specific record to delete -**Salida**: Los datos del registro eliminado permanecen disponibles para su uso en pasos posteriores. +**Output**: The deleted record data remains available for use in subsequent steps. -### Buscar Registros +### Search Records -Encuentra registros dentro de un objeto seleccionado usando condiciones de filtro. +Finds records within a selected object using filter conditions. -**Configuración**: +**Configuration**: -* Seleccione el objeto a buscar -* Establezca criterios de filtro para restringir resultados -* Configure la clasificación y los límites +* Select the object to search +* Set filter criteria to narrow results +* Configure sorting and limits -**Salida**: Devuelve registros coincidentes que se pueden usar en pasos posteriores. +**Output**: Returns matching records that can be used in subsequent steps. **Limit**: Search Records returns a maximum of **200 records**. If you need to process more, add specific filters to reduce results or use scheduled workflows to process in batches. @@ -82,9 +82,9 @@ Creates a new record or updates an existing one based on matching criteria. This -**Configuración**: +**Configuration**: -* Seleccione el objeto de destino +* Select the target object * Note which fields can be used for matching: email for People, domain for Companies, ID for any object, or any field marked as Unique. You'll need to populate at least one of these below. * Fill out the field values. Do not forget to populate at least one of the unique identifiers. @@ -94,7 +94,7 @@ Creates a new record or updates an existing one based on matching criteria. This -* Utilice datos de pasos anteriores para completar los campos +* Use data from previous steps to populate fields **How it works**: @@ -106,14 +106,14 @@ Creates a new record or updates an existing one based on matching criteria. This ## Flow Actions -### Iterador +### Iterator **Loops through an array of records** returned from a previous step, allowing you to perform actions on each record individually. -**Configuración**: +**Configuration**: * Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a code node) -* Defina las acciones a realizar en cada registro en el bucle. +* Define the actions to perform on each record in the loop. - You can add several actions within an iterator. @@ -124,15 +124,15 @@ Creates a new record or updates an existing one based on matching criteria. This -### Filtro +### Filter Filters records based on specified conditions, allowing only records that meet the criteria to pass through. -**Configuración**: +**Configuration**: * Select the record to filter -* Defina condiciones y criterios de filtro -* Configure qué registros deben pasar a pasos posteriores +* Define filter conditions and criteria +* Configure which records should pass through to subsequent steps 1. **Output**: Filter nodes don't return data—they act as gates. If the conditions are met, the workflow continues. If not, the workflow stops at that branch. @@ -145,7 +145,7 @@ Pauses workflow execution for a specified duration or until a specific date/time **Delay Types**: -| Tipo | Descripción | +| Type | Description | | ------------------ | ------------------------------------------------------------------ | | **Duration** | Wait for a specific amount of time (days, hours, minutes, seconds) | | **Scheduled Date** | Wait until a specific date and time | @@ -160,7 +160,7 @@ Pauses workflow execution for a specified duration or until a specific date/time * Select a date and time * Can reference a date field from a previous step (e.g., follow up 3 days after a meeting) -**Casos de uso**: +**Use cases**: * Wait 24 hours before sending a follow-up email * Pause until an opportunity's close date @@ -178,14 +178,14 @@ Pauses workflow execution for a specified duration or until a specific date/time ## Communication Actions -### Enviar correo electrónico +### Send Email -Envía un correo electrónico desde su flujo de trabajo. This is great for templated group emails. Emails will look like the ones you send from your mailbox. +Sends an email from your workflow. This is great for templated group emails. Emails will look like the ones you send from your mailbox. Not suited for newsletters (which require richer formatting) or automated email sequences. **Prerequisites**: Add an email account in Settings → Accounts -**Configuración**: +**Configuration**: * Select the sender email account @@ -195,28 +195,28 @@ Not suited for newsletters (which require richer formatting) or automated email For all the following steps, you can reference variables from previous steps for personalization. -* Ingrese la dirección de correo electrónico del destinatario. +* Enter recipient email address. Only one recipient is possible at the moment. -* Establezca la línea de asunto. -* Redacte el cuerpo del mensaje. You can format links, create numbered list, bullet point lists, add attachments. +* Set subject line. +* Compose message body. You can format links, create numbered list, bullet point lists, add attachments. Adding HTML signatures is not possible at the moment. -### Formulario +### Form -Solicita un formulario durante la ejecución del flujo de trabajo para recopilar la entrada del usuario. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input. +Prompts a form during workflow execution to collect user input. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input. - **Forms are designed for manual triggers only**. Para flujos de trabajo con otros disparadores (Registro Creado, Actualizado, etc.), los formularios solo son accesibles a través de la interfaz de ejecución de flujos de trabajo, lo cual no es la experiencia de usuario esperada. Un centro de notificaciones se lanzará en 2026 para soportar adecuadamente los formularios en flujos de trabajo automatizados. + **Forms are designed for manual triggers only**. For workflows with other triggers (Record Created, Updated, etc.), forms are only accessible via the workflow run interface, which is not the expected user experience. A notifications center will be released in 2026 to properly support forms in automated workflows. -**Configuración**: +**Configuration**: * Configure the fields that users will be asked to fill. For each field, choose * a type among text, number, date, a given record, a select field. Select fields from all objects are available. @@ -224,7 +224,7 @@ Solicita un formulario durante la ejecución del flujo de trabajo para recopilar * a default value under `Placeholder` (optional) * Edit the form title -**Salida**: Las respuestas del formulario están disponibles para su uso en pasos posteriores. +**Output**: Form responses are available for use in subsequent steps. **Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd + K`. @@ -241,19 +241,19 @@ Solicita un formulario durante la ejecución del flujo de trabajo para recopilar ## Integration Actions -### Código +### Code -Ejecuta JavaScript personalizado dentro de su flujo de trabajo. +Runs custom JavaScript within your workflow. -**Configuración**: +**Configuration**: -* Acceda a variables de pasos anteriores. You can edit the variables names dynamically. +* Access variables from previous steps. You can edit the variables names dynamically. -* Escriba el código JavaScript en el editor -* Devuelva variables para su uso en pasos posteriores -* Pruebe el código directamente en el paso +* Write JavaScript code in the editor +* Return variables for use in subsequent steps +* Test code directly in the step If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the serverless function. @@ -267,18 +267,18 @@ Ejecuta JavaScript personalizado dentro de su flujo de trabajo. Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited. -### Solicitud HTTP +### HTTP Request -Envía una solicitud a un API externo como parte de su flujo de trabajo. +Sends a request to an external API as part of your workflow. -**Configuración**: +**Configuration**: -* Ingrese la URL del extremo de la API. Using parameters from previous steps is possible. -* Seleccione el método HTTP (GET, POST, PUT, PATCH, DELETE) -* Agregue encabezados y valores necesarios -* Proporcione una respuesta de muestra para vista previa de estructura +* Enter the API endpoint URL. Using parameters from previous steps is possible. +* Select HTTP method (GET, POST, PUT, PATCH, DELETE) +* Add required headers and values +* Provide sample response for structure preview ## AI Actions @@ -286,7 +286,7 @@ Envía una solicitud a un API externo como parte de su flujo de trabajo. Runs an AI agent within your workflow to perform intelligent tasks. -**Configuración**: +**Configuration**: * **Agent**: Select an existing AI agent or use the default agent * **Prompt**: Write the instruction for the AI agent diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-branches.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-branches.mdx index 8680e51cbd..1966f64242 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-branches.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-branches.mdx @@ -1,66 +1,66 @@ --- -title: Ramas del flujo de trabajo},{ -description: Crea rutas paralelas y lógica condicional en tus flujos de trabajo. +title: Workflow Branches +description: Create parallel paths and conditional logic in your workflows. --- -Las ramas te permiten dividir tu flujo de trabajo en varias rutas que pueden ejecutarse simultáneamente o de forma condicional según tus datos. +Branches allow you to split your workflow into multiple paths that can run simultaneously or conditionally based on your data. -## Cómo funcionan las ramas +## How Branches Work -Cuando creas varias conexiones desde un único nodo, cada ruta se convierte en una rama. De forma predeterminada, **todas las ramas se ejecutan en paralelo**—no esperan unas a otras. +When you create multiple connections from a single node, each path becomes a branch. By default, **all branches execute in parallel**—they don't wait for each other. -## Crear ramas +## Creating Branches -### Añadir una nueva rama +### Add a New Branch -1. Haz **clic con el botón derecho en el lienzo principal** del flujo de trabajo (no en un nodo existente) -2. Haz clic en **Añadir nodo** -3. Elige el tipo de nodo para tu nueva rama -4. Arrastra una flecha desde la parte inferior del paso anterior hasta la parte superior de esta nueva acción -5. Repite para añadir más ramas desde el mismo nodo +1. **Right-click on the main canvas** of the workflow (not on an existing node) +2. Click **Add node** +3. Choose the node type for your new branch +4. Drag an arrow from the bottom of the previous step to the top of this new action +5. Repeat to add more branches from the same node - Cada rama es independiente. Añadir una rama no afecta a otras rutas existentes desde ese nodo. + Each branch is independent. Adding a branch doesn't affect other existing paths from that node. -### Diseño visual +### Visual Layout -Las ramas aparecen como rutas paralelas en el editor de flujos de trabajo. Puedes arrastrar nodos para reorganizar el diseño visual sin afectar la ejecución. +Branches appear as parallel paths in the workflow editor. You can drag nodes to rearrange the visual layout without affecting execution. -## Ramas condicionales +## Conditional Branches -Dado que todas las ramas se ejecutan de forma predeterminada, usa nodos **Filter** para controlar qué rutas se ejecutan realmente: +Since all branches run by default, use **Filter** nodes to control which paths actually execute: -| Rama | Condición del filtro | Acción | -| ---- | --------------------- | ----------------------------- | -| A | Etapa = "Ganada" | Enviar correo de felicitación | -| B | Etapa = "Perdida" | Crear tarea de seguimiento | -| C | Etapa = "Negociación" | Notificar al gerente | +| Branch | Filter Condition | Action | +| ------ | --------------------- | -------------------------- | +| A | Stage = "Won" | Send congratulations email | +| B | Stage = "Lost" | Create follow-up task | +| C | Stage = "Negotiation" | Notify manager | -1. Crea ramas desde tu disparador o acción -2. Añade un nodo **Filter** como el primer paso de cada rama -3. Configura cada filtro con condiciones mutuamente excluyentes -4. Añade tus acciones después de cada filtro +1. Create branches from your trigger or action +2. Add a **Filter** node as the first step of each branch +3. Configure each filter with mutually exclusive conditions +4. Add your actions after each filter -Solo continuarán ejecutándose las ramas en las que se cumpla la condición del filtro. +Only the branch(es) where the filter condition is met will continue executing. -## Combinar ramas +## Merging Branches -**Las ramas no se combinan automáticamente.** Cada rama se ejecuta de forma independiente hasta que termina. Tienes total flexibilidad para gestionar esto: +**Branches don't automatically merge.** Each branch runs independently until it ends. You have full flexibility in how you handle this: -* **Opción 1: Mantener las ramas separadas** - Cada rama gestiona sus propias acciones de seguimiento de forma independiente. Este es el enfoque más sencillo cuando las ramas no necesitan converger. +* **Option 1: Keep branches separate** + Each branch handles its own follow-up actions independently. This is the simplest approach when branches don't need to converge. -* **Opción 2: Combinar ramas manualmente** - Al crear tu flujo de trabajo, puedes conectar manualmente varias ramas a la misma acción posterior. Simplemente arrastra flechas desde el final de cada rama hasta un nodo común. +* **Option 2: Merge branches manually** + When creating your workflow, you can manually connect multiple branches to the same downstream action. Simply drag arrows from the end of each branch to a common node. - Aunque puedes usar un nodo [Delay](/l/es/user-guide/workflows/capabilities/workflow-actions#delay) para pausar la ejecución, actualmente no se puede configurar para esperar "hasta que otra rama termine". + While you can use a [Delay](/l/es/user-guide/workflows/capabilities/workflow-actions#delay) node to pause execution, it's not currently configurable to wait "until another branch ends." -## Relacionado +## Related -* [Cómo usar las ramas en flujos de trabajo](/l/es/user-guide/workflows/capabilities/use-branches-in-workflows) - Guía paso a paso -* [Acciones de flujo de trabajo](/l/es/user-guide/workflows/capabilities/workflow-actions) - Acciones disponibles, incluyendo Filter +* [How to Use Branches in Workflows](/l/es/user-guide/workflows/capabilities/use-branches-in-workflows) - Step-by-step guide +* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions) - Available actions including Filter diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-credits.mdx index e8135b57fc..437aee5822 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-credits.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-credits.mdx @@ -1,9 +1,9 @@ --- -title: Créditos de Workflow +title: Workflow Credits description: Understand workflow credit consumption and management. --- -Los créditos de workflow potencian tus automatizaciones en Twenty. Comprender cómo funcionan te ayuda a optimizar costos y gestionar de manera efectiva tu presupuesto de automatización. +Workflow credits power your automations in Twenty. Understanding how they work helps you optimize costs and manage your automation budget effectively. ## Credit Allocation @@ -18,22 +18,22 @@ Workflow credits are allocated based on your billing cycle, not your plan tier: 5 million monthly credits are generous for standard automations. Most teams won't exceed this limit with typical workflow usage. Additional credits are primarily needed for advanced Code actions and AI-powered workflows. -## Cómo Funciona el Consumo de Créditos +## How Credit Consumption Works -Los créditos se consumen cuando se ejecutan los workflows, no cuando los creas. Cada acción de workflow consume créditos en base a su complejidad: +Credits are consumed when workflows execute, not when you create them. Each workflow action consumes credits based on its complexity: -### Consumo de Créditos por Tipo de Acción +### Credit Consumption by Action Type -* **Operaciones internas básicas**: Consumo de créditos muy bajo - * Buscar Registros - * Crear Registro - * Actualizar Registro - * Eliminar Registro - * Acciones de formulario +* **Basic internal operations**: Very low credit consumption + * Search Records + * Create Record + * Update Record + * Delete Record + * Form actions -* **Operaciones complejas**: Mayor consumo de créditos - * Acciones de código (ejecución de JavaScript) - * Solicitudes HTTP a servicios externos +* **Complex operations**: Higher credit consumption + * Code actions (JavaScript execution) + * HTTP Requests to external services * **AI features**: Higher credit consumption * AI Agent actions consume credits based on the AI model used @@ -44,33 +44,33 @@ Los créditos se consumen cuando se ejecutan los workflows, no cuando los creas. * **No credits are consumed** during the wait period * A 5-minute delay costs the same as a 5-day delay -### Deducción en Tiempo Real +### Real-Time Deduction -Los créditos se deducen en tiempo real a medida que se ejecutan los workflows. Esto significa: +Credits are deducted in real-time as workflows execute. This means: -* Los workflows en borrador no consumen créditos -* Solo los workflows activos y en ejecución utilizan la asignación de créditos -* Los workflows fallidos aún consumen créditos para los pasos completados +* Draft workflows don't consume credits +* Only active, running workflows use your credit allocation +* Failed workflows still consume credits for completed steps -## Gestión de Créditos +## Managing Credits -### Verificar Uso de Créditos +### Check Credit Usage -1. Ir a **Ajustes → Facturación** -2. Ve tu consumo actual de créditos y saldo restante -3. Monitorea patrones de uso para optimizar tus workflows +1. Go to **Settings → Billing** +2. View your current credit consumption and remaining balance +3. Monitor usage patterns to optimize your workflows -### Adquirir Créditos Adicionales +### Purchasing Additional Credits -Si necesitas más créditos adicionales a la asignación de tu plan: +If you need more credits beyond your plan allocation: -1. Ir a **Ajustes → Facturación** -2. Haz clic en la opción para adquirir créditos adicionales. Hay paquetes de diferentes tamaños disponibles. -3. Los créditos se suman a tu saldo actual +1. Go to **Settings → Billing** +2. Click on the option to purchase additional credits. Packages of different sizes are available. +3. Credits are added to your current balance -## Mejores prácticas +## Best Practices -* **Procesamiento en Lote**: Usa operaciones masivas y acciones de Iterador eficientemente +* **Batch Processing**: Use bulk operations and Iterator actions efficiently * **Manual Trigger Optimization**: For manual triggers, choose `Bulk` availability to process multiple records in a single workflow run -* Optimiza acciones de Código para eficiencia -* Agrupa operaciones para reducir llamadas individuales de acciones +* Optimize Code actions for efficiency +* Batch operations to reduce individual action calls diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-runs.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-runs.mdx index bd49c7d708..94f3dfbbac 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-runs.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-runs.mdx @@ -1,5 +1,5 @@ --- -title: Ejecuciones de flujos de trabajo +title: Workflow Runs description: Monitor and manage workflow executions. image: /images/user-guide/workflows/workflow.png --- @@ -24,12 +24,12 @@ A **Run** is a record of a workflow execution. Every time a workflow is triggere ## Run Statuses -| Estado | Descripción | -| ---------------- | ------------------------------------------------------------------------ | -| **En ejecución** | Workflow is currently executing | -| **Completed** | Workflow finished successfully | -| **Failed** | Workflow encountered an error and stopped | -| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) | +| Status | Description | +| ------------- | ------------------------------------------------------------------------ | +| **Running** | Workflow is currently executing | +| **Completed** | Workflow finished successfully | +| **Failed** | Workflow encountered an error and stopped | +| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) | ## Run Details @@ -60,7 +60,7 @@ When a run fails: 3. Check the error message for details 4. Common issues: * Missing required fields - * Formato de datos no válido + * Invalid data format * External API errors * Permission issues diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-triggers.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-triggers.mdx index 1c700e2618..822f9b6368 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-triggers.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-triggers.mdx @@ -1,18 +1,18 @@ --- -title: Disparadores de Flujos de Trabajo +title: Workflow Triggers description: Learn about the different triggers that start your workflows. --- ## About Triggers -Los flujos de trabajo siempre comienzan con un solo disparador que define cuándo debe ejecutarse la automatización. +Workflows always start with a single trigger that defines when the automation should run. **Advanced objects are supported!** Beyond standard CRM objects (People, Companies, Opportunities), you can also trigger workflows and perform actions on: - * Miembros del espacio de trabajo + * Workspace Members * Calendar Events * Messages (Emails) * Tasks, Notes, and many other system objects @@ -20,11 +20,11 @@ Los flujos de trabajo siempre comienzan con un solo disparador que define cuánd This opens up powerful automations like notifying team members when calendar events are created, or processing incoming emails automatically. -## Se crea un registro +## Record is Created -Inicia el flujo de trabajo cuando se crea un nuevo registro en un objeto seleccionado (Personas, Empresas, Oportunidades o cualquier objeto personalizado). +Starts the workflow when a new record is created in a selected object (People, Companies, Opportunities, or any custom object). -**Configuración**: Selecciona el tipo de objeto para monitorear nuevos registros. +**Configuration**: Select the object type to monitor for new records. * This trigger is great for records created by csv, mailbox and calendar synchronization, API. @@ -32,54 +32,54 @@ Inicia el flujo de trabajo cuando se crea un nuevo registro en un objeto selecci To trigger this workflow on records created manually, it is recommended to use the trigger `Record is created or updated` instead. -## Se actualiza un registro +## Record is Updated -Inicia el flujo de trabajo cuando se realizan cambios en un registro existente. +Starts the workflow when changes are made to an existing record. -**Configuración**: +**Configuration**: -* Selecciona el tipo de objeto -* Opcionalmente especifica qué campos monitorear para cambios +* Select the object type +* Optionally specify which fields to monitor for changes -## Se actualiza o se crea un registro +## Record is Updated or Created -Inicia el flujo de trabajo cuando un registro es creado o actualizado en un objeto seleccionado. +Starts the workflow when a record is either created or updated in a selected object. -**¿Por qué esto es importante?**: +**Why This Matters**: This trigger is particularly helpful because records created via different methods behave differently: -* **Importaciones API/CSV**: Los registros se crean con todos los campos poblados inmediatamente -* **Creación manual**: Los registros se crean primero, luego los campos se agregan en actualizaciones posteriores +* **API/CSV imports**: Records are created with all fields populated immediately +* **Manual creation**: Records are created first, then fields are added in subsequent updates -**Configuración**: +**Configuration**: -* Selecciona el tipo de objeto para monitorear -* Opcionalmente especifica qué campos monitorear para cambios -* El flujo de trabajo se activará tanto en la creación inicial como en cualquier actualización posterior +* Select the object type to monitor +* Optionally specify which fields to monitor for changes +* The workflow will trigger both on initial creation and any subsequent updates -## Se elimina un registro +## Record is Deleted -Inicia el flujo de trabajo cuando un registro es eliminado de un objeto. +Starts the workflow when a record is removed from an object. -**Configuración**: Selecciona el tipo de objeto para monitorear eliminaciones. +**Configuration**: Select the object type to monitor for deletions. ## Manual Trigger -Inicia el flujo de trabajo cuando es desencadenado por una acción del usuario. This trigger can be accessed through the `Cmd+K` menu or via a custom button that will be displayed in the top navbar after selecting record(s). +Starts the workflow when triggered by a user action. This trigger can be accessed through the `Cmd+K` menu or via a custom button that will be displayed in the top navbar after selecting record(s). -**Configuración de Disponibilidad**: -Elige cómo debe manejar el flujo de trabajo la selección de registros: +**Availability Configuration**: +Choose how the workflow should handle record selection: * **Global**: No record is required to trigger this workflow. The workflow is triggered from the command menu `Cmd + K` anywhere (from any object) and does not use record(s) as input. -* **Individual**: El/los registro(s) seleccionado(s) se pasará(n) a tu flujo de trabajo. Esto está configurado para un objeto dado. Se pueden seleccionar varios registros antes de iniciar el flujo de trabajo. The workflow will run from beginning to end as many times as there are records selected. +* **Single**: The selected record(s) will be passed to your workflow. This is configured for a given object. Several records can be selected before triggering the workflow. The workflow will run from beginning to end as many times as there are records selected. **Soft limit: 100 runs/minute**. Beyond this, workflows remain in "Not Started" status and are processed gradually—either by a background job or when another workflow enters the queue. This means you can select more than 100 records with a Single trigger; execution will just be slower. -* **En masa**: El/los registro(s) seleccionado(s) se pasará(n) a tu flujo de trabajo. Esto está configurado para un objeto dado. Se pueden seleccionar varios registros antes de iniciar el flujo de trabajo. El flujo de trabajo se ejecutará una vez, proporcionando como entrada toda la lista de registros. This means the workflow needs to contain an [Iterator action](/l/es/user-guide/workflows/capabilities/workflow-actions#iterator). +* **Bulk**: The selected record(s) will be passed to your workflow. This is configured for a given object. Several records can be selected before triggering the workflow. The workflow will run once, providing the entire list of records as input. This means the workflow needs to contain an [Iterator action](/l/es/user-guide/workflows/capabilities/workflow-actions#iterator). This is more advanced, and best for people who want to optimize the number of workflow runs. @@ -87,25 +87,25 @@ Elige cómo debe manejar el flujo de trabajo la selección de registros: -**Configuración Adicional**: +**Additional Configuration**: -* Selecciona el objeto de destino (para disponibilidad individual y en masa) -* Elige un ícono de comando para el disparador del flujo de trabajo -* Configura la ubicación en la barra de navegación (fijado o no fijado) +* Select the target object (for Single and Bulk availability) +* Choose a command icon for the workflow trigger +* Configure navbar placement (Pinned or Not Pinned) -**Métodos de Acceso**: +**Access Methods**: * `Cmd+K` menu to find and launch manual workflows -* Botón personalizado en la barra de navegación superior (si está configurado) +* Custom button in the top navbar (if configured) ## Time-Based Trigger: On a Schedule -Inicia el flujo de trabajo de forma recurrente según lo defina. +Starts the workflow on a recurring basis you define. -**Configuración**: +**Configuration**: -* Selecciona la unidad de tiempo (minutos, horas, días) -* Ingresa un valor o usa expresiones cron personalizadas para una programación avanzada +* Select time unit (minutes, hours, days) +* Enter a value or use custom cron expressions for advanced scheduling **Timezone**: Scheduled workflows run in **UTC**. When setting hours for daily schedules, convert your local time to UTC. @@ -113,11 +113,11 @@ Inicia el flujo de trabajo de forma recurrente según lo defina. ## External Trigger: Webhook -Inicia el flujo de trabajo cuando se recibe una solicitud GET o POST de un servicio externo. +Starts the workflow when a GET or POST request is received from an external service. -**Configuración**: +**Configuration**: * The workflow provides a unique webhook URL—copy this and add it to your external system as the endpoint to call. * For POST requests, define the expected body structure so Twenty knows what data to expect. Add here the fields you will receive that will be needed below in your workflow. @@ -125,12 +125,12 @@ Inicia el flujo de trabajo cuando se recibe una solicitud GET o POST de un servi ## Choosing the Right Trigger -| Use Case | Recommended Trigger | -| --------------------------- | ---------------------------------- | -| New leads need processing | Se crea un registro | -| Data changes need sync | Se actualiza un registro | -| Import/manual data handling | Se actualiza o se crea un registro | -| Cleanup after deletion | Se elimina un registro | -| User-initiated action | Iniciar manualmente | -| Recurring reports | Según una programación | -| External integration | Webhook or On a Schedule | +| Use Case | Recommended Trigger | +| --------------------------- | ---------------------------- | +| New leads need processing | Record is Created | +| Data changes need sync | Record is Updated | +| Import/manual data handling | Record is Updated or Created | +| Cleanup after deletion | Record is Deleted | +| User-initiated action | Launch Manually | +| Recurring reports | On a Schedule | +| External integration | Webhook or On a Schedule | diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-versions.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-versions.mdx index bd93029571..18af71f346 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-versions.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-versions.mdx @@ -1,85 +1,85 @@ --- -title: Versiones del flujo de trabajo -description: Gestiona versiones y borradores de flujos de trabajo. +title: Workflow Versions +description: Manage workflow versions and drafts. image: /images/user-guide/workflows/workflow.png --- -## Acerca de las versiones +## About Versions -Cada vez que activas un flujo de trabajo, se crea una nueva versión. Esto te permite hacer un seguimiento de los cambios a lo largo del tiempo y revertir a configuraciones anteriores si es necesario. +Every time you activate a workflow, a new version is created. This allows you to track changes over time and revert to previous configurations if needed. -## Estados de la versión +## Version Statuses -| Estado | Descripción | -| --------------- | ---------------------------------------------- | -| **Borrador** | En edición, aún no publicado | -| **Activo** | Versión en vivo respondiendo a activadores | -| **Desactivado** | Anteriormente activo pero detenido manualmente | -| **Archivado** | Versiones pasadas guardadas para historial | +| Status | Description | +| --------------- | -------------------------------------- | +| **Draft** | Being edited, not yet published | +| **Active** | Live version responding to triggers | +| **Deactivated** | Previously active but manually stopped | +| **Archived** | Past versions kept for history | -## Trabajar con borradores +## Working with Drafts -Cuando editas un flujo de trabajo activo, tus cambios se guardan como un **borrador**. La versión activa sigue ejecutándose mientras trabajas en las actualizaciones. +When you edit an active workflow, your changes are saved as a **draft**. The active version continues to run while you work on updates. -Cuando termines de editar, puedes: +Once you're done editing, you can: -* **Activar**: Publica el borrador como la nueva versión activa (la versión anterior se archiva) -* **Descartar**: Elimina el borrador y conserva la versión activa actual +* **Activate**: Publish the draft as the new active version (the previous version is archived) +* **Discard**: Delete the draft and keep the current active version -## Historial de versiones +## Version History -### Ver versiones anteriores +### Viewing Past Versions -1. Abre el flujo de trabajo -2. Haz clic en la pestaña **Versiones** -3. Consulta todas las versiones anteriores con marcas de tiempo +1. Open the workflow +2. Click the **Versions** tab +3. See all previous versions with timestamps -### Restaurar una versión +### Restoring a Version -1. Encuentra la versión que quieres restaurar -2. Haz clic en **Usar como borrador** -3. La versión se copia a un nuevo borrador -4. Realiza las actualizaciones necesarias -5. Activa cuando esté lista +1. Find the version you want to restore +2. Click **Use as draft** +3. The version is copied to a new draft +4. Make any necessary updates +5. Activate when ready -## Mejores prácticas +## Best Practices -### Gestión de versiones +### Version Management -* Activa solo cuando esté lista para producción -* Mantén cambios significativos entre versiones -* Documenta los cambios importantes en los nombres o descripciones de los flujos de trabajo -* Prueba en modo borrador antes de activar +* Activate only when ready for production +* Keep meaningful changes between versions +* Document major changes in workflow names or descriptions +* Test in draft mode before activating -### Revertir cambios +### Reverting Changes -* Si una nueva versión causa problemas, restaura la versión anterior -* Usa el historial de versiones para ver qué cambió -* Siempre prueba las versiones restauradas antes de activar +* If a new version causes issues, restore the previous version +* Use the version history to track what changed +* Always test restored versions before activating -## Flujos de Trabajo comunes +## Common Workflows -### Edición rápida +### Quick Edit -1. Realiza cambios menores en un flujo de trabajo activo -2. Prueba en modo borrador -3. Activa la nueva versión +1. Make minor changes to an active workflow +2. Test in draft mode +3. Activate the new version -### Revisión importante +### Major Revision -1. Usa la versión anterior como punto de partida -2. Realiza cambios significativos en el borrador -3. Prueba a fondo todos los escenarios -4. Activa cuando estés seguro +1. Use the previous version as a starting point +2. Make significant changes in draft +3. Thoroughly test all scenarios +4. Activate when confident -### Reversión +### Rollback -1. Identifica el problema con la versión actual -2. Encuentra la última versión funcional en el historial -3. Haz clic en **Usar como borrador** -4. Activa para restaurar el comportamiento anterior +1. Identify the issue with the current version +2. Find the last working version in history +3. Click **Use as draft** +4. Activate to restore the old behavior -## Relacionado +## Related -* [Primeros pasos con Flujos de Trabajo](/l/es/user-guide/workflows/overview) -* [Ejecuciones de flujos de trabajo](/l/es/user-guide/workflows/capabilities/workflow-runs) +* [Getting Started with Workflows](/l/es/user-guide/workflows/overview) +* [Workflow Runs](/l/es/user-guide/workflows/capabilities/workflow-runs) diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx index e3b868e629..4132ef89bd 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx @@ -133,7 +133,7 @@ export const main = async (params: { deals: any }) => { ### Common Transformations -| Source Format | Target Format | Código | +| Source Format | Target Format | Code | | -------------------- | ---------------- | ---------------------------------------- | | `"true"` / `"false"` | `true` / `false` | `v === true \|\| v === "true"` | | `"123.45"` | `123.45` | `parseFloat(value)` | @@ -154,7 +154,7 @@ This loops through each product in the array. Inside the iterator, add an **Upsert Record** action: -| Setting | Valor | +| Setting | Value | | ------------ | -------------------------------------- | | **Object** | Your custom Product object | | **Match by** | External ID or SKU (unique identifier) | @@ -168,7 +168,7 @@ Inside the iterator, add an **Upsert Record** action: ## Example Use Cases -| Fuente | Datos | +| Source | Data | | ----------------------- | ----------------------------------- | | **ERP system** | Product catalog, pricing, inventory | | **E-commerce platform** | Orders, customers, product updates | diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx index d6af0911e1..e4d40d8c30 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx @@ -17,7 +17,7 @@ For standard webhook setup, see [Set Up a Webhook Trigger](/l/es/user-guide/work 1. In Typeform, open your form 2. Go to **Connect → Webhooks** 3. Paste your Twenty webhook URL -4. Guardar +4. Save ### Step 3: Understand the Typeform Payload @@ -110,9 +110,9 @@ Now in subsequent steps, you can select `contact.firstName`, `contact.email`, et Add a **Create Record** action: -| Campo | Valor | +| Field | Value | | -------------- | ---------------------------------------------------- | -| **Object** | Personas | +| **Object** | People | | **First Name** | `{{code.contact.firstName}}` | | **Last Name** | `{{code.contact.lastName}}` | | **Email** | `{{code.contact.email}}` | diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx index 71be70962e..bd22a7cd85 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx @@ -23,9 +23,9 @@ Automatically send deal data to your invoicing system (Stripe, QuickBooks, Xero, Add a **Filter** action to only continue when the deal is won: -| Setting | Valor | +| Setting | Value | | ------------- | --------------------------------- | -| **Field** | Etapa | +| **Field** | Stage | | **Condition** | Equals | | **Value** | `CLOSED_WON` (or your stage name) | @@ -37,9 +37,9 @@ Add a **Filter** action to only continue when the deal is won: The Opportunity record may not include all Company fields you need for the invoice. Add a **Search Record** action: -| Setting | Valor | +| Setting | Value | | ------------ | ---------------------------------------- | -| **Object** | Empresa | +| **Object** | Company | | **Match by** | ID equals `{{trigger.object.companyId}}` | This retrieves the full Company record with billing address, tax ID, etc. @@ -88,7 +88,7 @@ export const main = async (params: { Add an **HTTP Request** action: -| Setting | Valor | +| Setting | Value | | ----------- | ----------------------------------------- | | **Method** | POST | | **URL** | Your invoicing API endpoint | @@ -122,13 +122,13 @@ Body: {{code.invoice}} ## Complete Workflow Summary -| Step | Acción | Purpose | +| Step | Action | Purpose | | ---- | ----------------------- | ------------------------------------ | | 1 | Trigger: Record Updated | Fires when any Opportunity changes | -| 2 | Filtro | Only proceed if Stage = Closed Won | +| 2 | Filter | Only proceed if Stage = Closed Won | | 3 | Search Record | Get full Company details for billing | -| 4 | Código | Format data for invoicing API | -| 5 | Solicitud HTTP | Create invoice in external system | +| 4 | Code | Format data for invoicing API | +| 5 | HTTP Request | Create invoice in external system | ## Tips diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx index 2d708d6fcb..59392d4915 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx @@ -8,7 +8,7 @@ Webhook triggers allow external services to start your workflows by sending data ## When to Use Webhooks -| Use Case | Ejemplo | +| Use Case | Example | | ----------------------- | --------------------------------------- | | **Web forms** | Contact form submissions create leads | | **Third-party apps** | Stripe payment → create customer record | @@ -62,12 +62,12 @@ Now add actions that use the webhook data: 2. Select **People** object 3. Map fields: -| Campo | Valor | -| ------------------ | ---------------------------------------------------- | -| Nombre | `{{trigger.body.firstName}}` | -| Apellidos | `{{trigger.body.lastName}}` | -| Correo electrónico | `{{trigger.body.email}}` | -| Empresa | Search or create based on `{{trigger.body.company}}` | +| Field | Value | +| ---------- | ---------------------------------------------------- | +| First Name | `{{trigger.body.firstName}}` | +| Last Name | `{{trigger.body.lastName}}` | +| Email | `{{trigger.body.email}}` | +| Company | Search or create based on `{{trigger.body.company}}` | ### Step 5: Test the Webhook diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx index 95409cc0d4..5fdd8772a7 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx @@ -42,24 +42,24 @@ Create a workflow that handles all post-win activities automatically. ### Step 4: Update Company Type 1. Add **Update Record** action -2. Configurar: +2. Configure: -| Campo | Valor | -| ---------------------------- | ------------------------------- | -| **Object** | Empresas | -| **Record** | `{{trigger.object.company.id}}` | -| **Tipo** | Cliente | -| **First Deal Date** | `{{trigger.object.closedAt}}` | -| **Propietario de la cuenta** | `{{trigger.object.owner.id}}` | +| Field | Value | +| ------------------- | ------------------------------- | +| **Object** | Companies | +| **Record** | `{{trigger.object.company.id}}` | +| **Type** | Customer | +| **First Deal Date** | `{{trigger.object.closedAt}}` | +| **Account Owner** | `{{trigger.object.owner.id}}` | ### Step 5: Create Onboarding Task 1. Add **Create Record** action -2. Configurar: +2. Configure: -| Campo | Valor | +| Field | Value | | ----------------------- | ---------------------------------------------------------------------------------------------------- | -| **Object** | Tareas | +| **Object** | Tasks | | **Title** | `Onboarding: {{trigger.object.name}}` | | **Assignee** | Customer Success team member | | **Due Date** | 3 days from now | @@ -71,9 +71,9 @@ Create a workflow that handles all post-win activities automatically. ### Step 6: Notify Customer Success 1. Add **Send Email** action -2. Configurar: +2. Configure: -| Campo | Valor | +| Field | Value | | ----------- | -------------------------------------------------- | | **To** | customer-success@yourcompany.com | | **Subject** | `🎉 New Customer: {{trigger.object.company.name}}` | @@ -100,9 +100,9 @@ Let's give them a great start! ### Step 7: Confirm to Sales Rep 1. Add another **Send Email** action -2. Configurar: +2. Configure: -| Campo | Valor | +| Field | Value | | ----------- | -------------------------------------------------------------------------------------------------------------------- | | **To** | `{{trigger.object.owner.email}}` | | **Subject** | `✅ Deal Closed: {{trigger.object.name}}` | @@ -111,7 +111,7 @@ Let's give them a great start! ### Step 8: Test and Activate 1. Test by moving a test opportunity to "Closed Won" -2. Verificar: +2. Verify: * Company type changed to "Customer" * Onboarding task created * CS team received email @@ -126,7 +126,7 @@ Create a similar workflow for lost deals: * Record is Updated (Opportunities, Stage = "Closed Lost") -### Acciones +### Actions 1. **Create Record**: Task for "Lost Deal Analysis" 2. **Update Record**: Add lost reason to company record diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx index ed2f66e8fc..0eeeb7271b 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx @@ -33,11 +33,11 @@ Create a scheduled workflow that finds stale opportunities and emails their mana ### Step 3: Search for Stale Opportunities 1. Add **Search Records** action -2. Configurar: +2. Configure: -| Campo | Valor | +| Field | Value | | ---------- | ----------------------------------------------- | -| **Object** | Oportunidades | +| **Object** | Opportunities | | **Filter** | Updated At is before (today - 7 days) | | **Filter** | Stage is not "Closed Won" AND not "Closed Lost" | | **Limit** | 100 | @@ -92,7 +92,7 @@ export const main = async (params) => { Add **Send Email** action: -| Campo | Valor | +| Field | Value | | ----------- | ----------------------------------------------------------- | | **To** | sales-manager@yourcompany.com | | **Subject** | `🚨 {{code.totalCount}} Stale Opportunities Need Attention` | diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx index 88606cf717..3e3057e280 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx @@ -7,11 +7,11 @@ import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; -## Resumen +## Overview This workflow triggers every time a new email is received and updates a custom field on the Person record with the total count of emails from that sender. -## Prerrequisitos +## Prerequisites Before setting up this workflow, create a custom field on the **People** object: diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx index 36a1e32fb2..e24d1bcf0d 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx @@ -5,13 +5,13 @@ description: Show data from related records (e.g., Company info on Opportunities Display data from related records directly on your records — for example, show the employee count from a Company on its Opportunities. This workflow workaround is useful until nested fields are natively available. -## Casos de Uso Comunes +## Common Use Cases -| Fuente | Destination | Fields to Copy | +| Source | Destination | Fields to Copy | | ----------- | ----------- | ------------------------------- | -| Empresa | Oportunidad | Industry, Company Size, ARR | -| Persona | Oportunidad | Email, Phone, Title | -| Oportunidad | Empresa | Last Deal Amount, Last Won Date | +| Company | Opportunity | Industry, Company Size, ARR | +| Person | Opportunity | Email, Phone, Title | +| Opportunity | Company | Last Deal Amount, Last Won Date | ## Basic Field Copy @@ -26,7 +26,7 @@ Create the destination fields in **Settings → Data Model → Opportunities** b * Contact Email (type: Email) * Contact Phone (type: Phone) -### Configuración +### Setup 1. **Trigger**: Record is Updated (Opportunities, Point of Contact field) @@ -48,7 +48,7 @@ Create the destination fields in **Settings → Data Model → Opportunities** b **Goal**: When company details change, update all related opportunities. -### Configuración +### Setup 1. **Trigger**: Record is Updated (Companies) * Fields: Industry, Company Size, Annual Revenue @@ -79,7 +79,7 @@ Create the destination fields in **Settings → Data Model → Opportunities**: * Company Industry (type: Text) * Company Size (type: Number) -### Configuración +### Setup 1. **Trigger**: Record is Created (Opportunities) * Filter: Company is not empty @@ -144,7 +144,7 @@ export const main = async (params) => { }; ``` -## Mejores prácticas +## Best Practices ### Avoid Loops diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx index e467dd76aa..16a4495a5e 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx @@ -5,7 +5,7 @@ description: Create formula fields using workflows until native support is avail Twenty doesn't yet support native formula fields yet (coming in 2026), but you can achieve the same result using workflows. This workaround lets you automatically calculate and populate field values—from simple concatenations to complex business logic. -## Casos de Uso Comunes +## Common Use Cases | Use Case | Formula Example | | ------------------- | --------------------------------- | @@ -25,7 +25,7 @@ Twenty doesn't yet support native formula fields yet (coming in 2026), but you c **Goal**: Automatically combine first and last name into a full name field. -### Configuración +### Setup 1. **Trigger**: Record is Updated or Created (People) @@ -79,7 +79,7 @@ export const main = async (params) => { **Goal**: Calculate how many days remain until a task's due date. -### Configuración +### Setup 1. **Trigger**: Record is Updated or Created (Tasks, Due Date field) @@ -114,7 +114,7 @@ export const main = async (params) => { **Goal**: Score leads based on company size, industry, and engagement. -### Configuración +### Setup 1. **Trigger**: Record is Updated (People or Companies) @@ -155,7 +155,7 @@ export const main = async (params) => { **Goal**: Automatically extract and store the email domain. -### Configuración +### Setup 1. **Trigger**: Record is Updated (People, Email field) @@ -175,7 +175,7 @@ export const main = async (params) => { 3. **Update Record**: Set Domain field to `{{code.domain}}` -## Mejores prácticas +## Best Practices ### Performance @@ -189,7 +189,7 @@ export const main = async (params) => { * Use default values when data is missing * Return clear error messages when calculations fail -### Pruebas +### Testing * Test with edge cases (empty fields, zero values) * Verify calculations manually before activating diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx index be62b995cf..bc0d8c92b5 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx @@ -9,7 +9,7 @@ import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; Send daily email reminders to each team member about their tasks due today. -## Resumen +## Overview This workflow runs on a schedule and: @@ -85,9 +85,9 @@ export const main = async (params: { ### Step 6: Send Email (Inside Iterator) 1. Add a **Send Email** action (still inside the iterator) -2. Configurar: +2. Configure: -| Campo | Valor | +| Field | Value | | ----------- | --------------------------------------------------------------- | | **To** | `{{iterator.currentItem.userEmail}}` (workspace member's email) | | **Subject** | Your Tasks Due Today | diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/professional-services.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/professional-services.mdx index a386e14ea7..674ca6229f 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/professional-services.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/professional-services.mdx @@ -1,29 +1,29 @@ --- title: Professional Services -description: Obtenga ayuda profesional para construir flujos de trabajo complejos y automatizaciones del equipo de Twenty y socios certificados. +description: Get professional help building complex workflows and automations from Twenty's team and certified partners. --- -## ¿Cuándo Necesita Ayuda Profesional? +## When Do You Need Professional Help? -Considere servicios profesionales para: +Consider professional services for: -* Integraciones complejas de múltiples sistemas -* Lógica empresarial avanzada y reglas de automatización -* Flujos de trabajo de procesamiento de datos a gran escala +* Complex multi-system integrations +* Advanced business logic and automation rules +* Large-scale data processing workflows * Custom API development -* Capacitación del equipo y optimización del flujo de trabajo -* Cuando no tiene recursos internos +* Team training and workflow optimization +* When you don't have internal resources -## Opciones de Servicio +## Service Options -### Paquetes de Incorporación +### Onboarding Packs -Obtenga ayuda de nuestro equipo central con nuestros [Paquetes de incorporación](https://twenty.com/onboarding-packages) de 4 horas: +Get help from our core team with our 4-hour [Onboarding packs](https://twenty.com/onboarding-packages): -* **Creación de Flujos de Trabajo**: Construya flujos de trabajo personalizados para sus procesos de negocio -* **Diseño del Modelo de Datos**: Optimice su estructura de datos para la automatización de flujos de trabajo -* **Migración de Datos**: Importe datos existentes con la integración adecuada de flujos de trabajo +* **Workflow Creation**: Build custom workflows for your business processes +* **Data Model Design**: Optimize your data structure for workflow automation +* **Data Migration**: Import existing data with proper workflow integration -### Socios de Implementación +### Implementation Partners -Trabaje con socios certificados para personalizaciones avanzadas. Contáctenos en contact@twenty.com para conectarse con nuestros [socios de implementación](https://twenty.com/partners). +Work with certified partners for advanced customizations. Contact us at contact@twenty.com to connect with our [implementation partners](https://twenty.com/partners). diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx index 9c6eda7ec8..b243fc4acb 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx @@ -1,11 +1,11 @@ --- -title: Resolución de problemas de flujo de trabajo +title: Workflow Troubleshooting description: Common workflow issues and how to resolve them. --- -## Problemas Comunes y Soluciones +## Common Issues and Solutions -### Flujo de trabajo no se activa +### Workflow Not Triggering **Symptoms**: Your workflow doesn't run when you expect it to. @@ -16,7 +16,7 @@ description: Common workflow issues and how to resolve them. 3. **Field not monitored**: For "Record is Updated" triggers, ensure the specific field is being watched 4. **Permissions**: Check you have permission to run workflows -**Soluciones**: +**Solutions**: * Verify workflow status in the workflow list * Test with the specific action you expect to trigger it @@ -55,7 +55,7 @@ description: Common workflow issues and how to resolve them. 3. **API errors**: External services returning errors 4. **Permission issues**: Action requires permissions you don't have -**Soluciones**: +**Solutions**: * Check the workflow run details for error messages * Verify all required fields have values @@ -75,7 +75,7 @@ description: Common workflow issues and how to resolve them. * **429**: Too many requests - implement rate limiting * **500**: Server error - external service issue -**Soluciones**: +**Solutions**: * Verify API endpoint URL * Check authentication headers @@ -93,7 +93,7 @@ description: Common workflow issues and how to resolve them. 3. **Type errors**: Operations on wrong data types 4. **Timeouts**: Code taking too long to execute -**Soluciones**: +**Solutions**: * Use the built-in code editor validation * Test code logic in a JavaScript console first @@ -111,7 +111,7 @@ description: Common workflow issues and how to resolve them. 3. **Sending limits**: Email provider rate limits reached 4. **Spam filters**: Emails being blocked -**Soluciones**: +**Solutions**: * Verify email account connection * Validate recipient email addresses diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx index f9a3a0bc52..d523f56b2a 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx @@ -25,8 +25,8 @@ description: Frequently asked questions about workflows in Twenty. - | Tipo | Records Required | Ejecuciones de flujos de trabajo | - | ---- | ---------------- | -------------------------------- | + | Type | Records Required | Workflow Runs | + | ---- | ---------------- | ------------- | \| **Global** | None | Once, no record input | \| **Single** | One or more selected | Once per selected record | @@ -39,7 +39,7 @@ description: Frequently asked questions about workflows in Twenty. See [Workflow Triggers](/l/es/user-guide/workflows/capabilities/workflow-triggers) for details. - + An explicit If/Else node is not yet available but is on our roadmap. **Current workaround**: Create multiple branches from your step, each starting with a **Filter** action: @@ -106,7 +106,7 @@ description: Frequently asked questions about workflows in Twenty. * Use the variable picker when configuring a field * Or type `{{stepName.fieldName}}` directly - **Ejemplos**: + **Examples**: * Trigger data: `{{trigger.object.email}}` * Search results: `{{searchRecords[0].name}}` @@ -176,7 +176,7 @@ description: Frequently asked questions about workflows in Twenty. * Multiple workflows running simultaneously across your workspace * High-frequency automated triggers (e.g., Record Updated on a busy object) - **Soluciones**: + **Solutions**: * Use **Bulk** triggers instead of Single to process many records in one run * Space out large batch operations @@ -187,8 +187,8 @@ description: Frequently asked questions about workflows in Twenty. Twenty has two rate limits to ensure system stability: - | Límite | Valor | Behavior | - | ------ | ----- | -------- | + | Limit | Value | Behavior | + | ----- | ----- | -------- | \| **Soft limit** | 100 runs/minute | Runs queue in "Not Started" status, processed gradually | \| **Hard limit** | 5,000 runs/hour | Runs immediately fail | diff --git a/packages/twenty-docs/l/es/user-guide/workflows/overview.mdx b/packages/twenty-docs/l/es/user-guide/workflows/overview.mdx index 076ea3398e..f8ba3cc6c9 100644 --- a/packages/twenty-docs/l/es/user-guide/workflows/overview.mdx +++ b/packages/twenty-docs/l/es/user-guide/workflows/overview.mdx @@ -1,25 +1,25 @@ --- -title: Flujos de trabajo +title: Workflows description: Learn how to build automations in Twenty. image: /images/user-guide/workflows/workflow.png --- - Flujos de trabajo + Workflows ## Why Workflows Matter -Twenty was built to bring maximum flexibility to its users. En lugar de obligarte a adaptar tus procesos empresariales a características rígidas y preconstruidas, los workflows te permiten crear automatizaciones que configuran el CRM que mejor respalda los casos de uso únicos de tu negocio. +Twenty was built to bring maximum flexibility to its users. Rather than forcing you to adapt your business processes to rigid, pre-built features, workflows enable you to build automations that create the CRM that best supports your unique business use cases. -Workflows es la función integrada de Twenty para desarrollar estas automatizaciones. Te ofrecen los bloques para crear exactamente lo que tu negocio necesita, cuando lo necesita. +Workflows are Twenty's in-app feature for building these automations. They give you the building blocks to create exactly what your business needs, when it needs it. -## ¿Qué puedo hacer con los workflows? +## What can I do with workflows? -Recomendamos construir automatizaciones con dos propósitos principales: +We recommend building automations for two main purposes: -1. **Automatizaciones internas para facilitar el día a día de tu equipo**: Reduce la cantidad de entradas manuales y tareas repetitivas que ralentizan a tu equipo. -2. **Incorporar datos dentro y fuera de Twenty**: Conecta Twenty mediante llamadas API y webhooks a tu base de datos y otras herramientas. +1. **Internal automations to facilitate your team's day-to-day**: Reduce the amount of manual entries and repetitive tasks that slow down your team. +2. **Bring data in and out of Twenty**: Connect Twenty via API calls and webhooks to your database and other tools. ## Building Your First Workflow @@ -66,14 +66,14 @@ After your trigger, add one or more actions: 2. Review the results to ensure it works as expected 3. Toggle the workflow **Active** when ready -## Mejores prácticas de flujo de trabajo +## Workflow Best Practices -* **Editar nombres de pasos**: Renombre los pasos de su flujo de trabajo para describir claramente lo que hace cada uno. Esto ayuda con el mantenimiento y facilita la transferencia a compañeros de trabajo -* **Aprovechar los datos de pasos anteriores**: Puede usar campos de registros devueltos por cualquier paso anterior en su flujo de trabajo -* **Comenzar simple**: Inicie con flujos de trabajo básicos y agregue complejidad con el tiempo a medida que se sienta más cómodo con el sistema -* **Planificar antes de construir**: Trace la lógica de su flujo de trabajo antes de comenzar a construir para evitar quedarse atascado a mitad de camino +* **Edit step names**: Rename your workflow steps to clearly describe what each one does. This helps with maintenance and makes it easier to hand off to coworkers +* **Leverage previous step data**: You can use fields from records returned by any previous step in your workflow +* **Start simple**: Begin with basic workflows and add complexity over time as you become more comfortable with the system +* **Plan before building**: Map out your workflow logic before you start building to avoid getting stuck halfway through -## Próximos Pasos +## Next Steps * [Workflow Triggers](/l/es/user-guide/workflows/capabilities/workflow-triggers) * [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions) diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/best-practices-server.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/best-practices-server.mdx index c5d7388c5d..d8f5c5ea7c 100644 --- a/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/best-practices-server.mdx +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/best-practices-server.mdx @@ -1,22 +1,22 @@ --- -title: Meilleures pratiques +title: Best Practices --- -Ce document décrit les meilleures pratiques à suivre lors de travaux sur le backend. +This document outlines the best practices you should follow when working on the backend. -## Suivez une approche modulaire +## Follow a modular approach -Le backend suit une approche modulaire, qui est un principe fondamental lors de l'utilisation de NestJS. Assurez-vous de décomposer votre code en modules réutilisables pour maintenir une base de code propre et organisée. -Chaque module doit encapsuler une fonctionnalité particulière et avoir un périmètre bien défini. Cette approche modulaire permet une séparation claire des préoccupations et supprime les complexités inutiles. +The backend follows a modular approach, which is a fundamental principle when working with NestJS. Make sure you break down your code into reusable modules to maintain a clean and organized codebase. +Each module should encapsulate a particular feature or functionality and have a well-defined scope. This modular approach enables clear separation of concerns and removes unnecessary complexities. -## Exposez des services à utiliser dans les modules +## Expose services to use in modules -Créez toujours des services avec une responsabilité claire et unique, ce qui améliore la lisibilité et la maintenabilité du code. Nommez les services de manière descriptive et cohérente. +Always create services that have a clear and single responsibility, which enhances code readability and maintainability. Name the services descriptively and consistently. -Vous devez également exposer les services que vous souhaitez utiliser dans d'autres modules. Exposer des services à d'autres modules est possible grâce au puissant système d'injection de dépendance de NestJS, et favorise un couplage lâche entre les composants. +You should also expose services that you want to use in other modules. Exposing services to other modules is possible through NestJS's powerful dependency injection system, and promotes loose coupling between components. -## Évitez d'utiliser le type `any` +## Avoid using `any` type -Lorsque vous déclarez une variable comme `any`, le vérificateur de types de TypeScript ne procède à aucune vérification de type, ce qui permet d'affecter n'importe quel type de valeur à la variable. TypeScript utilise l'inférence de type pour déterminer le type d'une variable en fonction de sa valeur. En le déclarant comme `any`, TypeScript ne peut plus inférer le type. Cela rend difficile la détection des erreurs liées aux types pendant le développement, conduisant à des erreurs d'exécution et rendant le code moins maintenable, moins fiable et plus difficile à comprendre pour d'autres. +When you declare a variable as `any`, TypeScript's type checker doesn't perform any type checking, making it possible to assign any type of values to the variable. TypeScript uses type inference to determine the type of variable based on the value. By declaring it as `any`, TypeScript can no longer infer the type. This makes it hard to catch type-related errors during development, leading to runtime errors and makes the code less maintainable, less reliable, and harder to understand for others. -C'est pourquoi tout devrait avoir un type. Donc si vous créez un nouvel objet avec un prénom et un nom, vous devriez créer une interface ou un type contenant un prénom et un nom qui définit la forme de l'objet que vous manipulez. +This is why everything should have a type. So if you create a new object with a first name and last name, you should create an interface or type that contains a first name and last name that defines the shape of the object you are manipulating. diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/custom-objects.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/custom-objects.mdx new file mode 100644 index 0000000000..7feec7a639 --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/custom-objects.mdx @@ -0,0 +1,39 @@ +--- +title: Custom Objects +--- + +Objects are structures that allow you to store data (records, attributes, and values) specific to an organization. Twenty provides both standard and custom objects. + +Standard objects are in-built objects with a set of attributes available for all users. Examples of standard objects in Twenty include Company and Person. Standard objects have standard fields that are also available for all Twenty users, like Company.displayName. + +Custom objects are objects that you can create to store information that is unique to your organization. They are not built-in; members of your workspace can create and customize custom objects to hold information that standard objects aren't suitable for. + +## High-level schema + +
+ High level schema +
+ +
+ +## How it works + +Custom objects come from metadata tables that determine the shape, name, and type of the objects. All this information is present in the metadata schema database, consisting of tables: + +* **DataSource**: Details where the data is present. +* **Object**: Describes the object and links to a DataSource. +* **Field**: Outlines an Object's fields and connects to the Object. + +To add a custom object, the workspaceMember will query the /metadata API. This updates the metadata accordingly and computes a GraphQL schema based on the metadata, storing it in a GQL cache for later use. + +
+ Query the /metadata API to add custom objects +
+ +
+ +To fetch data, the process involves making queries through the /graphql endpoint and passing them through the Query Resolver. + +
+ Query the /graphql endpoint to fetch data +
diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/feature-flags.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/feature-flags.mdx new file mode 100644 index 0000000000..a261cfec3c --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/feature-flags.mdx @@ -0,0 +1,46 @@ +--- +title: Feature Flags +--- + +Feature flags are used to hide experimental features. For Twenty, they are set on workspace level and not on a user level. + +## Adding a new feature flag + +In `FeatureFlagKey.ts` add the feature flag: + +```ts +type FeatureFlagKey = + | 'IS_FEATURENAME_ENABLED' + | ...; +``` + +Also add it to the enum in `feature-flag.entity.ts`: + +```ts +enum FeatureFlagKeys { + IsFeatureNameEnabled = 'IS_FEATURENAME_ENABLED', + ... +} +``` + +To apply a feature flag on a **backend** feature use: + +```ts +@Gate({ + featureFlag: 'IS_FEATURENAME_ENABLED', +}) +``` + +To apply a feature flag on a **frontend** feature use: + +```ts +const isFeatureNameEnabled = useIsFeatureEnabled('IS_FEATURENAME_ENABLED'); +``` + +## Configure feature flags for the deployment + +Change the corresponding record in the Table `core.featureFlag`: + +| id | key | workspaceId | value | +| ------ | ------------------------ | ----------- | ------ | +| Random | `IS_FEATURENAME_ENABLED` | WorkspaceID | `true` | diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx new file mode 100644 index 0000000000..233d92ac8a --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx @@ -0,0 +1,125 @@ +--- +title: Folder Architecture +info: A detailed look into our server folder architecture +--- + +The backend directory structure is as follows: + +``` +server + └───ability + └───constants + └───core + └───database + └───decorators + └───filters + └───guards + └───health + └───integrations + └───metadata + └───workspace + └───utils +``` + +## Ability + +Defines permissions and includes handlers for each entity. + +## Decorators + +Defines custom decorators in NestJS for added functionality. + +See [custom decorators](https://docs.nestjs.com/custom-decorators) for more details. + +## Filters + +Includes exception filters to handle exceptions that might occur in GraphQL endpoints. + +## Guards + +See [guards](https://docs.nestjs.com/guards) for more details. + +## Health + +Includes a publicly available REST API (healthz) that returns a JSON to confirm whether the database is working as expected. + +## Metadata + +Defines custom objects and makes available a GraphQL API (graphql/metadata). + +## Workspace + +Generates and serves custom GraphQL schema based on the metadata. + +### Workspace Directory Structure + +``` +workspace + + └───workspace-schema-builder + └───factories + └───graphql-types + └───database + └───interfaces + └───object-definitions + └───services + └───storage + └───utils + └───workspace-resolver-builder + └───factories + └───interfaces + └───workspace-query-builder + └───factories + └───interfaces + └───workspace-query-runner + └───interfaces + └───utils + └───workspace-datasource + └───workspace-manager + └───workspace-migration-runner + └───utils + └───workspace.module.ts + └───workspace.factory.spec.ts + └───workspace.factory.ts +``` + +The root of the workspace directory includes the `workspace.factory.ts`, a file containing the `createGraphQLSchema` function. This function generates workspace-specific schema by using the metadata to tailor a schema for individual workspaces. By separating the schema and resolver construction, we use the `makeExecutableSchema` function, which combines these discrete elements. + +This strategy is not just about organization, but also helps with optimization, such as caching generated type definitions to enhance performance and scalability. + +### Workspace Schema builder + +Generates the GraphQL schema, and includes: + +#### Factories: + +Specialised constructors to generate GraphQL-related constructs. + +* The type.factory translates field metadata into GraphQL types using `TypeMapperService`. +* The type-definition.factory creates GraphQL input or output objects derived from `objectMetadata`. + +#### GraphQL Types + +Includes enumerations, inputs, objects, and scalars, and serves as the building blocks for the schema construction. + +#### Interfaces and Object Definitions + +Contains the blueprints for GraphQL entities, and includes both predefined and custom types like `MONEY` or `URL`. + +#### Services + +Contains the service responsible for associating FieldMetadataType with its appropriate GraphQL scalar or query modifiers. + +#### Storage + +Includes the `TypeDefinitionsStorage` class that contains reusable type definitions, preventing duplication of GraphQL types. + +### Workspace Resolver Builder + +Creates resolver functions for querying and mutating the GraphQL schema. + +Each factory in this directory is responsible for producing a distinct resolver type, such as the `FindManyResolverFactory`, designed for adaptable application across various tables. + +### Workspace Query Runner + +Runs the generated queries on the database and parses the result. diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/queue.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/queue.mdx new file mode 100644 index 0000000000..6148c0fbf0 --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/queue.mdx @@ -0,0 +1,41 @@ +--- +title: Message Queue +--- + +Queues facilitate async operations to be performed. They can be used for performing background tasks such as sending a welcome email on register. +Each use case will have its own queue class extended from `MessageQueueServiceBase`. + +Currently, we only support `bull-mq`[bull-mq](https://bullmq.io/) as the queue driver. + +## Steps to create and use a new queue + +1. Add a queue name for your new queue under enum `MESSAGE_QUEUES`. +2. Provide the factory implementation of the queue with the queue name as the dependency token. +3. Inject the queue that you created in the required module/service with the queue name as the dependency token. +4. Add worker class with token based injection just like producer. + +### Example usage + +```ts +class Resolver { + constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {} + + async onSomeAction() { + //business logic + await this.queue.add(someData); + } +} + +//async worker +class CustomWorker { + constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) { + this.initWorker(); + } + + async initWorker() { + await this.queue.work(async ({ id, data }) => { + //worker logic + }); + } +} +``` diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/server-commands.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/server-commands.mdx new file mode 100644 index 0000000000..6951909788 --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/server-commands.mdx @@ -0,0 +1,101 @@ +--- +title: Backend Commands +--- + +## Useful commands + +These commands should be executed from packages/twenty-server folder. +From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`). + +### First time setup + +``` +npx nx database:reset twenty-server # setup the database with dev seeds +``` + +### Starting the server + +``` +npx nx run twenty-server:start +``` + +### Lint + +``` +npx nx run twenty-server:lint # pass --fix to fix lint errors +``` + +### Test + +``` +npx nx run twenty-server:test:unit # run unit tests +npx nx run twenty-server:test:integration # run integration tests +``` + +Note: you can run `npx nx run twenty-server:test:integration:with-db-reset` in case you need to reset the database before running the integration tests. + +### Resetting the database + +If you want to reset and seed the database, you can run the following command: + +```bash +npx nx run twenty-server:database:reset +``` + +### Migrations + +#### For objects in Core/Metadata schemas (TypeORM) + +```bash +npx nx run twenty-server:typeorm migration:generate src/database/typeorm/core/migrations/nameOfYourMigration -d src/database/typeorm/core/core.datasource.ts +``` + +#### For Workspace objects + +There are no migrations files, migration are generated automatically for each workspace, +stored in the database, and applied with this command + +```bash +npx nx run twenty-server:command workspace:sync-metadata -f +``` + + + This will drop the database and re-run the migrations and seed. + + Make sure to back up any data you want to keep before running this command. + + +## Tech Stack + +Twenty primarily uses NestJS for the backend. + +Prisma was the first ORM we used. But in order to allow users to create custom fields and custom objects, a lower-level made more sense as we need to have fine-grained control. The project now uses TypeORM. + +Here's what the tech stack now looks like. + +**Core** + +* [NestJS](https://nestjs.com/) +* [TypeORM](https://typeorm.io/) +* [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server) + +**Database** + +* [Postgres](https://www.postgresql.org/) + +**Third-party integrations** + +* [Sentry](https://sentry.io/welcome/) for tracking bugs + +**Testing** + +* [Jest](https://jestjs.io/) + +**Tooling** + +* [Yarn](https://yarnpkg.com/) +* [ESLint](https://eslint.org/) + +**Development** + +* [AWS EKS](https://aws.amazon.com/eks/) diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/zapier.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/zapier.mdx new file mode 100644 index 0000000000..46bcd563fc --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/backend-development/zapier.mdx @@ -0,0 +1,83 @@ +--- +title: Zapier App +--- + +Effortlessly sync Twenty with 3000+ apps using [Zapier](https://zapier.com/). Automate tasks, boost productivity, and supercharge your customer relationships! + +## About Zapier + +Zapier is a tool that allows you to automate workflows by connecting the apps that your team uses every day. The fundamental concept of Zapier is automation workflows, called Zaps, and include triggers and actions. + +You can learn more about how Zapier works [here](https://zapier.com/how-it-works). + +## Setup + +### Step 1: Install Zapier packages + +```bash +cd packages/twenty-zapier + +yarn +``` + +### Step 2: Login with the CLI + +Use your Zapier credentials to log in using the CLI: + +```bash +zapier login +``` + +### Step 3: Set environment variables + +From the `packages/twenty-zapier` folder, run: + +```bash +cp .env.example .env +``` + +Run the application locally, go to [http://localhost:3000/settings/api-webhooks](http://localhost:3000/settings/api-webhooks), and generate an API key. + +Replace the **YOUR_API_KEY** value in the `.env` file with the API key you just generated. + +## Development + + + Make sure to run `yarn build` before any `zapier` command. + + +### Test + +```bash +yarn test +``` + +### Lint + +```bash +yarn format +``` + +### Watch and compile as you edit code + +```bash +yarn watch +``` + +### Validate your Zapier app + +```bash +yarn validate +``` + +### Deploy your Zapier app + +```bash +yarn deploy +``` + +### List all Zapier CLI commands + +```bash +zapier +``` diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/bug-and-requests.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/bug-and-requests.mdx new file mode 100644 index 0000000000..4db64b703d --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/bug-and-requests.mdx @@ -0,0 +1,78 @@ +--- +title: Bugs, Requests & Pull Requests +info: Report issues, request features, and contribute code +--- + +## Reporting Bugs + +To report a bug, please [create an issue on GitHub](https://github.com/twentyhq/twenty/issues/new). + +You can also ask for help on [Discord](https://discord.gg/cx5n4Jzs57). + +## Feature Requests + +If you're not sure if it's a bug, and you feel it's closer to a feature request, then you should probably [open a discussion instead](https://github.com/twentyhq/twenty/discussions/new). + +## Submit a Pull Request + +Contributing code to Twenty starts with a pull request (PR). + +### Before You Start + +1. Check [existing issues](https://github.com/twentyhq/twenty/issues) for related work +2. For new features, open an issue first to discuss +3. Review our [Code of Conduct](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md) + +### Fork and Clone + +1. Fork the repository on GitHub +2. Clone your fork: + +```bash +git clone https://github.com/YOUR_USERNAME/twenty.git +cd twenty +``` + +3. Add upstream remote: + +```bash +git remote add upstream https://github.com/twentyhq/twenty.git +``` + +### Create a Branch + +```bash +git checkout -b feature/your-feature-name +``` + +Use descriptive branch names: + +* `feature/add-export-button` +* `fix/login-redirect-issue` +* `docs/update-api-guide` + +### Make Your Changes + +1. Write clean, well-documented code +2. Follow existing code style +3. Add tests for new functionality +4. Update documentation if needed + +### Submit Your PR + +1. Push your branch: + +```bash +git push origin feature/your-feature-name +``` + +2. Open a PR on GitHub +3. Fill in the PR template +4. Link related issues + +### PR Checklist + +* [ ] Code follows project style guidelines +* [ ] Tests pass locally +* [ ] Documentation is updated +* [ ] PR description explains the changes diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/best-practices-front.mdx new file mode 100644 index 0000000000..187c2d848c --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/best-practices-front.mdx @@ -0,0 +1,325 @@ +--- +title: Best Practices +--- + +This document outlines the best practices you should follow when working on the frontend. + +## State management + +React and Recoil handle state management in the codebase. + +### Use `useRecoilState` to store state + +It's good practice to create as many atoms as you need to store your state. + + + It's better to use extra atoms than trying to be too concise with props drilling. + + +```tsx +export const myAtomState = atom({ + key: 'myAtomState', + default: 'default value', +}); + +export const MyComponent = () => { + const [myAtom, setMyAtom] = useRecoilState(myAtomState); + + return ( +
+ setMyAtom(e.target.value)} + /> +
+ ); +} +``` + +### Do not use `useRef` to store state + +Avoid using `useRef` to store state. + +If you want to store state, you should use `useState` or `useRecoilState`. + +See [how to manage re-renders](#managing-re-renders) if you feel like you need `useRef` to prevent some re-renders from happening. + +## Managing re-renders + +Re-renders can be hard to manage in React. + +Here are some rules to follow to avoid unnecessary re-renders. + +Keep in mind that you can **always** avoid re-renders by understanding their cause. + +### Work at the root level + +Avoiding re-renders in new features is now made easy by eliminating them at the root level. + +The `PageChangeEffect` sidecar component contains just one `useEffect` that holds all the logic to execute on a page change. + +That way you know that there's just one place that can trigger a re-render. + +### Always think twice before adding `useEffect` in your codebase + +Re-renders are often caused by unnecessary `useEffect`. + +You should think whether you need `useEffect`, or if you can move the logic in a event handler function. + +You'll find it generally easy to move the logic in a `handleClick` or `handleChange` function. + +You can also find them in libraries like Apollo: `onCompleted`, `onError`, etc. + +### Use a sibling component to extract `useEffect` or data fetching logic + +If you feel like you need to add a `useEffect` in your root component, you should consider extracting it in a sidecar component. + +You can apply the same for data fetching logic, with Apollo hooks. + +```tsx +// ❌ Bad, will cause re-renders even if data is not changing, +// because useEffect needs to be re-evaluated +export const PageComponent = () => { + const [data, setData] = useRecoilState(dataState); + const [someDependency] = useRecoilState(someDependencyState); + + useEffect(() => { + if(someDependency !== data) { + setData(someDependency); + } + }, [someDependency]); + + return
{data}
; +}; + +export const App = () => ( + + + +); +``` + +```tsx +// ✅ Good, will not cause re-renders if data is not changing, +// because useEffect is re-evaluated in another sibling component +export const PageComponent = () => { + const [data, setData] = useRecoilState(dataState); + + return
{data}
; +}; + +export const PageData = () => { + const [data, setData] = useRecoilState(dataState); + const [someDependency] = useRecoilState(someDependencyState); + + useEffect(() => { + if(someDependency !== data) { + setData(someDependency); + } + }, [someDependency]); + + return <>; +}; + +export const App = () => ( + + + + +); +``` + +### Use recoil family states and recoil family selectors + +Recoil family states and selectors are a great way to avoid re-renders. + +They are useful when you need to store a list of items. + +### You shouldn't use `React.memo(MyComponent)` + +Avoid using `React.memo()` because it does not solve the cause of the re-render, but instead breaks the re-render chain, which can lead to unexpected behavior and make the code very hard to refactor. + +### Limit `useCallback` or `useMemo` usage + +They are often not necessary and will make the code harder to read and maintain for a gain of performance that is unnoticeable. + +## Console.logs + +`console.log` statements are valuable during development, offering real-time insights into variable values and code flow. But, leaving them in production code can lead to several issues: + +1. **Performance**: Excessive logging can affect the runtime performance, especially on client-side applications. + +2. **Security**: Logging sensitive data can expose critical information to anyone who inspects the browser's console. + +3. **Cleanliness**: Filling up the console with logs can obscure important warnings or errors that developers or tools need to see. + +4. **Professionalism**: End users or clients checking the console and seeing a myriad of log statements might question the code's quality and polish. + +Make sure you remove all `console.logs` before pushing the code to production. + +## Naming + +### Variable Naming + +Variable names ought to precisely depict the purpose or function of the variable. + +#### The issue with generic names + +Generic names in programming are not ideal because they lack specificity, leading to ambiguity and reduced code readability. Such names fail to convey the variable or function's purpose, making it challenging for developers to understand the code's intent without deeper investigation. This can result in increased debugging time, higher susceptibility to errors, and difficulties in maintenance and collaboration. Meanwhile, descriptive naming makes the code self-explanatory and easier to navigate, enhancing code quality and developer productivity. + +```tsx +// ❌ Bad, uses a generic name that doesn't communicate its +// purpose or content clearly +const [value, setValue] = useState(''); +``` + +```tsx +// ✅ Good, uses a descriptive name +const [email, setEmail] = useState(''); +``` + +#### Some words to avoid in variable names + +* dummy + +### Event handlers + +Event handler names should start with `handle`, while `on` is a prefix used to name events in components props. + +```tsx +// ❌ Bad +const onEmailChange = (val: string) => { + // ... +}; +``` + +```tsx +// ✅ Good +const handleEmailChange = (val: string) => { + // ... +}; +``` + +## Optional Props + +Avoid passing the default value for an optional prop. + +**EXAMPLE** + +Take the`EmailField` component defined below: + +```tsx +type EmailFieldProps = { + value: string; + disabled?: boolean; +}; + +const EmailField = ({ value, disabled = false }: EmailFieldProps) => ( + +); +``` + +**Usage** + +```tsx +// ❌ Bad, passing in the same value as the default value adds no value +const Form = () => ; +``` + +```tsx +// ✅ Good, assumes the default value +const Form = () => ; +``` + +## Component as props + +Try as much as possible to pass uninstantiated components as props, so children can decide on their own of what props they need to pass. + +The most common example for that is icon components: + +```tsx +const SomeParentComponent = () => ; + +// In MyComponent +const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => { + const theme = useTheme(); + + return ( +
+ +
+ ) +}; +``` + +For React to understand that the component is a component, you need to use PascalCase, to later instantiate it with `` + +## Prop Drilling: Keep It Minimal + +Prop drilling, in the React context, refers to the practice of passing state variables and their setters through many component layers, even if intermediary components don't use them. While sometimes necessary, excessive prop drilling can lead to: + +1. **Decreased Readability**: Tracing where a prop originates or where it's utilized can become convoluted in a deeply nested component structure. + +2. **Maintenance Challenges**: Changes in one component's prop structure might require adjustments in several components, even if they don't directly use the prop. + +3. **Reduced Component Reusability**: A component receiving a lot of props solely for passing them down becomes less general-purpose and harder to reuse in different contexts. + +If you feel that you are using excessive prop drilling, see [state management best practices](#state-management). + +## Imports + +When importing, opt for the designated aliases rather than specifying complete or relative paths. + +**The Aliases** + +```js +{ + alias: { + "~": path.resolve(__dirname, "src"), + "@": path.resolve(__dirname, "src/modules"), + "@testing": path.resolve(__dirname, "src/testing"), + }, +} +``` + +**Usage** + +```tsx +// ❌ Bad, specifies the entire relative path +import { + CatalogDecorator +} from '../../../../../testing/decorators/CatalogDecorator'; +import { + ComponentDecorator +} from '../../../../../testing/decorators/ComponentDecorator'; +``` + +```tsx +// ✅ Good, utilises the designated aliases +import { CatalogDecorator } from '~/testing/decorators/CatalogDecorator'; +import { ComponentDecorator } from 'twenty-ui/testing'; +``` + +## Schema Validation + +[Zod](https://github.com/colinhacks/zod) is the schema validator for untyped objects: + +```js +const validationSchema = z + .object({ + exist: z.boolean(), + email: z + .string() + .email('Email must be a valid email'), + password: z + .string() + .regex(PASSWORD_REGEX, 'Password must contain at least 8 characters'), + }) + .required(); + +type Form = z.infer; +``` + +## Breaking Changes + +Always perform thorough manual testing before proceeding to guarantee that modifications haven’t caused disruptions elsewhere, given that tests have not yet been extensively integrated. diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx index fd0c45d576..064ac5c256 100644 --- a/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx @@ -1,22 +1,22 @@ --- -title: Architecture des Dossiers -info: Un aperçu détaillé de notre architecture de dossiers +title: Folder Architecture +info: A detailed look into our folder architecture --- -Dans ce guide, vous explorerez les détails de la structure du répertoire de projet et comment elle contribue à l'organisation et à la maintenabilité de Twenty. +In this guide, you will explore the details of the project directory structure and how it contributes to the organization and maintainability of Twenty. -En suivant cette convention d'architecture de dossiers, il est plus facile de trouver les fichiers liés à des fonctionnalités spécifiques et de s'assurer que l'application est évolutive et maintenable. +By following this folder architecture convention, it's easier to find the files related to specific features and ensure that the application is scalable and maintainable. ``` front └───modules │ └───module1 -│ │ └───sous-module1 +│ │ └───submodule1 │ └───module2 │ └───ui -│ │ └───affichage -│ │ └───entrées -│ │ │ └───boutons +│ │ └───display +│ │ └───inputs +│ │ │ └───buttons │ │ └───... └───pages └───... @@ -24,86 +24,86 @@ front ## Pages -Comprend les composants de haut niveau définis par les routes de l'application. Ils importent des composants de plus bas niveau depuis le dossier `modules` (plus de détails ci-dessous). +Includes the top-level components defined by the application routes. They import more low-level components from the modules folder (more details below). ## Modules -Chaque module représente une fonctionnalité ou un groupe de fonctionnalités, comprenant ses composants spécifiques, ses états, et sa logique opérationnelle. -Ils doivent tous suivre la structure ci-dessous. Vous pouvez imbriquer des modules dans des modules (appelés sous-modules) et les mêmes règles s'appliqueront. +Each module represents a feature or a group of feature, comprising its specific components, states, and operational logic. +They should all follow the structure below. You can nest modules within modules (referred to as submodules) and the same rules will apply. ``` module1 - └───composants - │ └───composant1 - │ └───composant2 - └───constantes - └───contextes + └───components + │ └───component1 + │ └───component2 + └───constants + └───contexts └───graphql │ └───fragments - │ └───requêtes + │ └───queries │ └───mutations └───hooks - │ └───interne - └───états - │ └───sélecteurs + │ └───internal + └───states + │ └───selectors └───types - └───utilitaires + └───utils ``` -### Contextes +### Contexts -Un contexte est un moyen de transmettre des données à travers l'arborescence de composants sans avoir à transmettre les propriétés manuellement à chaque niveau. +A context is a way to pass data through the component tree without having to pass props down manually at every level. -Voir [React Context](https://react.dev/reference/react#context-hooks) pour plus de détails. +See [React Context](https://react.dev/reference/react#context-hooks) for more details. ### GraphQL -Comprend des fragments, des requêtes et des mutations. +Includes fragments, queries, and mutations. -Voir [GraphQL](https://graphql.org/learn/) pour plus de détails. +See [GraphQL](https://graphql.org/learn/) for more details. * Fragments -Un fragment est une partie réutilisable d'une requête, que vous pouvez utiliser dans différents endroits. En utilisant des fragments, il est plus facile d'éviter de dupliquer du code. +A fragment is a reusable piece of a query, which you can use in different places. By using fragments, it's easier to avoid duplicating code. -Voir [GraphQL Fragments](https://graphql.org/learn/queries/#fragments) pour plus de détails. +See [GraphQL Fragments](https://graphql.org/learn/queries/#fragments) for more details. -* Requêtes +* Queries -Voir [GraphQL Queries](https://graphql.org/learn/queries/) pour plus de détails. +See [GraphQL Queries](https://graphql.org/learn/queries/) for more details. * Mutations -Voir [GraphQL Mutations](https://graphql.org/learn/queries/#mutations) pour plus de détails. +See [GraphQL Mutations](https://graphql.org/learn/queries/#mutations) for more details. ### Hooks -Voir [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks) pour plus de détails. +See [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks) for more details. -### États +### States -Contient la logique de gestion des états. [RecoilJS](https://recoiljs.org) gère cela. +Contains the state management logic. [RecoilJS](https://recoiljs.org) handles this. -* Sélecteurs : Voir [RecoilJS Selectors](https://recoiljs.org/docs/basic-tutorial/selectors) pour plus de détails. +* Selectors: See [RecoilJS Selectors](https://recoiljs.org/docs/basic-tutorial/selectors) for more details. -La gestion de l'état intégrée de React gère toujours l'état au sein d'un composant. +React's built-in state management still handles state within a component. -### Utilitaires +### Utils -Devrait juste contenir des fonctions pures réutilisables. Autrement, créez des hooks personnalisés dans le dossier `hooks`. +Should just contain reusable pure functions. Otherwise, create custom hooks in the `hooks` folder. ## UI -Contient tous les composants d'interface utilisateur réutilisables utilisés dans l'application. +Contains all the reusable UI components used in the application. -Ce dossier peut contenir des sous-dossiers, comme `data`, `display`, `feedback`, et `input` pour des types de composants spécifiques. Chaque composant doit être autonome et réutilisable, de sorte que vous puissiez l'utiliser dans différentes parties de l'application. +This folder can contain sub-folders, like `data`, `display`, `feedback`, and `input` for specific types of components. Each component should be self-contained and reusable, so that you can use it in different parts of the application. -En séparant les composants UI des autres composants dans le dossier `modules`, il est plus facile de maintenir un design cohérent et d'effectuer des changements de l'interface utilisateur sans affecter d'autres parties (logique métier) de la base de code. +By separating the UI components from the other components in the `modules` folder, it's easier to maintain a consistent design and to make changes to the UI without affecting other parts (business logic) of the codebase. -## Interface et dépendances +## Interface and dependencies -Vous pouvez importer le code d'autres modules depuis n'importe quel module, sauf le dossier `ui`. Cela permettra de garder son code facile à tester. +You can import other module code from any module except for the `ui` folder. This will keep its code easy to test. -### Interne +### Internal -Chaque partie (hooks, états, ...) d'un module peut avoir un dossier `internal`, qui contient des parties utilisées uniquement au sein du module. +Each part (hooks, states, ...) of a module can have an `internal` folder, which contains parts that are just used within the module. diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/frontend-commands.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/frontend-commands.mdx index 9921f33a18..0d5638d440 100644 --- a/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/frontend-commands.mdx +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/frontend-commands.mdx @@ -1,50 +1,54 @@ --- -title: Commandes Frontend +title: Frontend Commands --- -## Commandes utiles +## Useful commands -### Lancement de l'application +### Starting the app ```bash npx nx start twenty-front ``` -### Régénérer le schéma GraphQL basé sur le schéma API GraphQL +### Regenerate graphql schema based on API graphql schema ```bash npx nx run twenty-front:graphql:generate --configuration=metadata ``` -OU +OR ```bash npx nx run twenty-front:graphql:generate ``` -### Analyse +### Lint ```bash -npx nx run twenty-front:lint # passez --fix pour corriger les erreurs de lint +npx nx run twenty-front:lint # pass --fix to fix lint errors ``` -## Traductions +## Translations ```bash -npx nx run twenty-front:lingui:extract\nnpx nx run twenty-front:lingui:compile +npx nx run twenty-front:lingui:extract +npx nx run twenty-front:lingui:compile ``` ### Test ```bash -npx nx run twenty-front:test # exécuter les tests jest\nnpx nx run twenty-front:storybook:serve:dev # exécuter storybook\nnpx nx run twenty-front:storybook:test # exécuter les tests # (besoin de yarn storybook:serve:dev pour fonctionner)\nnpx nx run twenty-front:storybook:coverage # (besoin de yarn storybook:serve:dev pour fonctionner) +npx nx run twenty-front:test # run jest tests +npx nx run twenty-front:storybook:serve:dev # run storybook +npx nx run twenty-front:storybook:test # run tests # (needs yarn storybook:serve:dev to be running) +npx nx run twenty-front:storybook:coverage # (needs yarn storybook:serve:dev to be running) ``` -## Écosystème Tech +## Tech Stack -Le projet a une stack simple et propre, avec un code boilerplate minimal. +The project has a clean and simple stack, with minimal boilerplate code. -**Application** +**App** * [React](https://react.dev/) * [Apollo](https://www.apollographql.com/docs/) @@ -52,12 +56,12 @@ Le projet a une stack simple et propre, avec un code boilerplate minimal. * [Recoil](https://recoiljs.org/docs/introduction/core-concepts) * [TypeScript](https://www.typescriptlang.org/) -**Tests** +**Testing** * [Jest](https://jestjs.io/) * [Storybook](https://storybook.js.org/) -**Outils** +**Tooling** * [Yarn](https://yarnpkg.com/) * [Craco](https://craco.js.org/docs/) @@ -65,22 +69,22 @@ Le projet a une stack simple et propre, avec un code boilerplate minimal. ## Architecture -### Routage +### Routing -[React Router](https://reactrouter.com/) gère le routage. +[React Router](https://reactrouter.com/) handles the routing. -Pour éviter les [re-renders](/l/fr/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) inutiles, toute la logique de routage est dans un `useEffect` dans `PageChangeEffect`. +To avoid unnecessary [re-renders](/l/fr/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) all the routing logic is in a `useEffect` in `PageChangeEffect`. -### Gestion de l'État +### State Management -[Recoil](https://recoiljs.org/docs/introduction/core-concepts) gère la gestion de l'état. +[Recoil](https://recoiljs.org/docs/introduction/core-concepts) handles state management. -Voir [les meilleures pratiques](/l/fr/developers/contribute/capabilities/frontend-development/best-practices-front#state-management) pour plus d'informations sur la gestion de l'état. +See [best practices](/l/fr/developers/contribute/capabilities/frontend-development/best-practices-front#state-management) for more information on state management. -## Tests +## Testing -[Jest](https://jestjs.io/) sert de guide pour les tests unitaires tandis que [Storybook](https://storybook.js.org/) est utilisé pour les tests de composants. +[Jest](https://jestjs.io/) serves as the tool for unit testing while [Storybook](https://storybook.js.org/) is for component testing. -Jest est principalement utilisé pour tester les fonctions utilitaires, et non les composants eux-mêmes. +Jest is mainly for testing utility functions, and not components themselves. -Storybook est utilisé pour tester le comportement des composants isolés, ainsi que pour afficher le système de design. +Storybook is for testing the behavior of isolated components, as well as displaying the design system. diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/hotkeys.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/hotkeys.mdx new file mode 100644 index 0000000000..43cde50e63 --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/hotkeys.mdx @@ -0,0 +1,178 @@ +--- +title: Hotkeys +--- + +## Introduction + +When you need to listen to a hotkey, you would normally use the `onKeyDown` event listener. + +In `twenty-front` however, you might have conflicts between same hotkeys that are used in different components, mounted at the same time. + +For example, if you have a page that listens for the Enter key, and a modal that listens for the Enter key, with a Select component inside that modal that listens for the Enter key, you might have a conflict when all are mounted at the same time. + +## The `useScopedHotkeys` hook + +To handle this problem, we have a custom hook that makes it possible to listen to hotkeys without any conflict. + +You place it in a component, and it will listen to the hotkeys only when the component is mounted AND when the specified **hotkey scope** is active. + +## How to listen for hotkeys in practice? + +There are two steps involved in setting up hotkey listening : + +1. Set the [hotkey scope](#what-is-a-hotkey-scope-) that will listen to hotkeys +2. Use the `useScopedHotkeys` hook to listen to hotkeys + +Setting up hotkey scopes is required even in simple pages, because other UI elements like left menu or command menu might also listen to hotkeys. + +## Use cases for hotkeys + +In general, you'll have two use cases that require hotkeys : + +1. In a page or a component mounted in a page +2. In a modal-type component that takes the focus due to a user action + +The second use case can happen recursively : a dropdown in a modal for example. + +### Listening to hotkeys in a page + +Example : + +```tsx +const PageListeningEnter = () => { + const { + setHotkeyScopeAndMemorizePreviousScope, + goBackToPreviousHotkeyScope, + } = usePreviousHotkeyScope(); + + // 1. Set the hotkey scope in a useEffect + useEffect(() => { + setHotkeyScopeAndMemorizePreviousScope( + ExampleHotkeyScopes.ExampleEnterPage, + ); + + // Revert to the previous hotkey scope when the component is unmounted + return () => { + goBackToPreviousHotkeyScope(); + }; + }, [goBackToPreviousHotkeyScope, setHotkeyScopeAndMemorizePreviousScope]); + + // 2. Use the useScopedHotkeys hook + useScopedHotkeys( + Key.Enter, + () => { + // Some logic executed on this page when the user presses Enter + // ... + }, + ExampleHotkeyScopes.ExampleEnterPage, + ); + + return
My page that listens for Enter
; +}; +``` + +### Listening to hotkeys in a modal-type component + +For this example we'll use a modal component that listens for the Escape key to tell its parent to close it. + +Here the user interaction is changing the scope. + +```tsx +const ExamplePageWithModal = () => { + const [showModal, setShowModal] = useState(false); + + const { + setHotkeyScopeAndMemorizePreviousScope, + goBackToPreviousHotkeyScope, + } = usePreviousHotkeyScope(); + + const handleOpenModalClick = () => { + // 1. Set the hotkey scope when user opens the modal + setShowModal(true); + setHotkeyScopeAndMemorizePreviousScope( + ExampleHotkeyScopes.ExampleModal, + ); + }; + + const handleModalClose = () => { + // 1. Revert to the previous hotkey scope when the modal is closed + setShowModal(false); + goBackToPreviousHotkeyScope(); + }; + + return
+

My page with a modal

+ + {showModal && } +
; +}; +``` + +Then in the modal component : + +```tsx +const MyDropdownComponent = ({ onClose }: { onClose: () => void }) => { + // 2. Use the useScopedHotkeys hook to listen for Escape. + // Note that escape is a common hotkey that could be used by many other components + // So it's important to use a hotkey scope to avoid conflicts + useScopedHotkeys( + Key.Escape, + () => { + onClose() + }, + ExampleHotkeyScopes.ExampleModal, + ); + + return
My modal component
; +}; +``` + +It's important to use this pattern when you're not sure that just using a useEffect with mount/unmount will be enough to avoid conflicts. + +Those conflicts can be hard to debug, and it might happen more often than not with useEffects. + +## What is a hotkey scope? + +A hotkey scope is a string that represents a context in which the hotkeys are active. It is generally encoded as an enum. + +When you change the hotkey scope, the hotkeys that are listening to this scope will be enabled and the hotkeys that are listening to other scopes will be disabled. + +You can set only one scope at a time. + +As an example, the hotkey scopes for each page are defined in the `PageHotkeyScope` enum: + +```tsx +export enum PageHotkeyScope { + Settings = 'settings', + CreateWorkspace = 'create-workspace', + SignInUp = 'sign-in-up', + CreateProfile = 'create-profile', + PlanRequired = 'plan-required', + ShowPage = 'show-page', + PersonShowPage = 'person-show-page', + CompanyShowPage = 'company-show-page', + CompaniesPage = 'companies-page', + PeoplePage = 'people-page', + OpportunitiesPage = 'opportunities-page', + ProfilePage = 'profile-page', + WorkspaceMemberPage = 'workspace-member-page', + TaskPage = 'task-page', +} +``` + +Internally, the currently selected scope is stored in a Recoil state that is shared across the application : + +```tsx +export const currentHotkeyScopeState = createState({ + key: 'currentHotkeyScopeState', + defaultValue: INITIAL_HOTKEYS_SCOPE, +}); +``` + +But this Recoil state should never be handled manually ! We'll see how to use it in the next section. + +## How is it working internally? + +We made a thin wrapper on top of [react-hotkeys-hook](https://react-hotkeys-hook.vercel.app/docs/intro) that makes it more performant and avoids unnecessary re-renders. + +We also create a Recoil state to handle the hotkey scope state and make it available everywhere in the application. diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/storybook.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/storybook.mdx index 456c270679..5c7f5fa52a 100644 --- a/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/storybook.mdx +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/storybook.mdx @@ -1,8 +1,8 @@ --- title: Storybook -description: Parcourir la bibliothèque de composants UI de Twenty +description: Browse Twenty's UI component library --- -Consultez notre bibliothèque de composants complète et la documentation dans Storybook. +View our complete component library and documentation in Storybook. -[Ouvrir Storybook →](https://storybook.twenty.com) +[Open Storybook →](https://storybook.twenty.com) diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/style-guide.mdx new file mode 100644 index 0000000000..e3ba4a44f0 --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/style-guide.mdx @@ -0,0 +1,290 @@ +--- +title: Style Guide +--- + +This document includes the rules to follow when writing code. + +The goal here is to have a consistent codebase, which is easy to read and easy to maintain. + +For this, it's better to be a bit more verbose than to be too concise. + +Always keep in mind that people read code more often than they write it, specially on an open source project, where anyone can contribute. + +There are a lot of rules that are not defined here, but that are automatically checked by linters. + +## React + +### Use functional components + +Always use TSX functional components. + +Do not use default `import` with `const`, because it's harder to read and harder to import with code completion. + +```tsx +// ❌ Bad, harder to read, harder to import with code completion +const MyComponent = () => { + return
Hello World
; +}; + +export default MyComponent; + +// ✅ Good, easy to read, easy to import with code completion +export function MyComponent() { + return
Hello World
; +}; +``` + +### Props + +Create the type of the props and call it `(ComponentName)Props` if there's no need to export it. + +Use props destructuring. + +```tsx +// ❌ Bad, no type +export const MyComponent = (props) =>
Hello {props.name}
; + +// ✅ Good, type +type MyComponentProps = { + name: string; +}; + +export const MyComponent = ({ name }: MyComponentProps) =>
Hello {name}
; +``` + +#### Refrain from using `React.FC` or `React.FunctionComponent` to define prop types + +```tsx +/* ❌ - Bad, defines the component type annotations with `FC` + * - With `React.FC`, the component implicitly accepts a `children` prop + * even if it's not defined in the prop type. This might not always be + * desirable, especially if the component doesn't intend to render + * children. + */ +const EmailField: React.FC<{ + value: string; +}> = ({ value }) => ; +``` + +```tsx +/* ✅ - Good, a separate type (OwnProps) is explicitly defined for the + * component's props + * - This method doesn't automatically include the children prop. If + * you want to include it, you have to specify it in OwnProps. + */ +type EmailFieldProps = { + value: string; +}; + +const EmailField = ({ value }: EmailFieldProps) => ( + +); +``` + +#### No Single Variable Prop Spreading in JSX Elements + +Avoid using single variable prop spreading in JSX elements, like `{...props}`. This practice often results in code that is less readable and harder to maintain because it's unclear which props the component is receiving. + +```tsx +/* ❌ - Bad, spreads a single variable prop into the underlying component + */ +const MyComponent = (props: OwnProps) => { + return ; +} +``` + +```tsx +/* ✅ - Good, Explicitly lists all props + * - Enhances readability and maintainability + */ +const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => { + return ; +}; +``` + +Rationale: + +* At a glance, it's clearer which props the code passes down, making it easier to understand and maintain. +* It helps to prevent tight coupling between components via their props. +* Linting tools make it easier to identify misspelled or unused props when you list props explicitly. + +## JavaScript + +### Use nullish-coalescing operator `??` + +```tsx +// ❌ Bad, can return 'default' even if value is 0 or '' +const value = process.env.MY_VALUE || 'default'; + +// ✅ Good, will return 'default' only if value is null or undefined +const value = process.env.MY_VALUE ?? 'default'; +``` + +### Use optional chaining `?.` + +```tsx +// ❌ Bad +onClick && onClick(); + +// ✅ Good +onClick?.(); +``` + +## TypeScript + +### Use `type` instead of `interface` + +Always use `type` instead of `interface`, because they almost always overlap, and `type` is more flexible. + +```tsx +// ❌ Bad +interface MyInterface { + name: string; +} + +// ✅ Good +type MyType = { + name: string; +}; +``` + +### Use string literals instead of enums + +[String literals](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types) are the go-to way to handle enum-like values in TypeScript. They are easier to extend with Pick and Omit, and offer a better developer experience, specially with code completion. + +You can see why TypeScript recommends avoiding enums [here](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums). + +```tsx +// ❌ Bad, utilizes an enum +enum Color { + Red = "red", + Green = "green", + Blue = "blue", +} + +let color = Color.Red; +``` + +```tsx +// ✅ Good, utilizes a string literal + +let color: "red" | "green" | "blue" = "red"; +``` + +#### GraphQL and internal libraries + +You should use enums that GraphQL codegen generates. + +It's also better to use an enum when using an internal library, so the internal library doesn't have to expose a string literal type that is not related to the internal API. + +Example: + +```TSX +const { + setHotkeyScopeAndMemorizePreviousScope, + goBackToPreviousHotkeyScope, +} = usePreviousHotkeyScope(); + +setHotkeyScopeAndMemorizePreviousScope( + RelationPickerHotkeyScope.RelationPicker, +); +``` + +## Styling + +### Use StyledComponents + +Style the components with [styled-components](https://emotion.sh/docs/styled). + +```tsx +// ❌ Bad +
Hello World
+``` + +```tsx +// ✅ Good +const StyledTitle = styled.div` + color: red; +`; +``` + +Prefix styled components with "Styled" to differentiate them from "real" components. + +```tsx +// ❌ Bad +const Title = styled.div` + color: red; +`; +``` + +```tsx +// ✅ Good +const StyledTitle = styled.div` + color: red; +`; +``` + +### Theming + +Utilizing the theme for the majority of component styling is the preferred approach. + +#### Units of measurement + +Avoid using `px` or `rem` values directly within the styled components. The necessary values are generally already defined in the theme, so it’s recommended to make use of the theme for these purposes. + +#### Colors + +Refrain from introducing new colors; instead, use the existing palette from the theme. Should there be a situation where the palette does not align, please leave a comment so that the team can rectify it. + +```tsx +// ❌ Bad, directly specifies style values without utilizing the theme +const StyledButton = styled.button` + color: #333333; + font-size: 1rem; + font-weight: 400; + margin-left: 4px; + border-radius: 50px; +`; +``` + +```tsx +// ✅ Good, utilizes the theme +const StyledButton = styled.button` + color: ${({ theme }) => theme.font.color.primary}; + font-size: ${({ theme }) => theme.font.size.md}; + font-weight: ${({ theme }) => theme.font.weight.regular}; + margin-left: ${({ theme }) => theme.spacing(1)}; + border-radius: ${({ theme }) => theme.border.rounded}; +`; +``` + +## Enforcing No-Type Imports + +Avoid type imports. To enforce this standard, an ESLint rule checks for and reports any type imports. This helps maintain consistency and readability in the TypeScript code. + +```tsx +// ❌ Bad +import { type Meta, type StoryObj } from '@storybook/react'; + +// ❌ Bad +import type { Meta, StoryObj } from '@storybook/react'; + +// ✅ Good +import { Meta, StoryObj } from '@storybook/react'; +``` + +### Why No-Type Imports + +* **Consistency**: By avoiding type imports and using a single approach for both type and value imports, the codebase remains consistent in its module import style. + +* **Readability**: No-type imports improve code readability by making it clear when you're importing values or types. This reduces ambiguity and makes it easier to understand the purpose of imported symbols. + +* **Maintainability**: It enhances codebase maintainability because developers can identify and locate type-only imports when reviewing or modifying code. + +### ESLint Rule + +An ESLint rule, `@typescript-eslint/consistent-type-imports`, enforces the no-type import standard. This rule will generate errors or warnings for any type import violations. + +Please note that this rule specifically addresses rare edge cases where unintentional type imports occur. TypeScript itself discourages this practice, as mentioned in the [TypeScript 3.8 release notes](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html). In most situations, you should not need to use type-only imports. + +To ensure your code complies with this rule, make sure to run ESLint as part of your development workflow. diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/work-with-figma.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/work-with-figma.mdx new file mode 100644 index 0000000000..6cffcc405e --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/frontend-development/work-with-figma.mdx @@ -0,0 +1,59 @@ +--- +title: Work with Figma +info: Learn how you can collaborate with Twenty's Figma +--- + +Figma is a collaborative interface design tool that aids in bridging the communication barrier between designers and developers. +This guide explains how you can collaborate with Figma. + +## Access + +1. **Access the shared link:** You can access the project's Figma file [here](https://www.figma.com/file/xt8O9mFeLl46C5InWwoMrN/Twenty). +2. **Sign in:** If you're not already signed in, Figma will prompt you to do so. + Key features are only available to logged-in users, such as the developer mode and the ability to select a dedicated frame. + + + You will not be able to collaborate effectively without an account. + + +## Figma structure + +On the left sidebar, you can access the different pages of Twenty's Figma. This is how they're organized: + +* **Components page:** This is the first page. The designer uses it to create and organize the reusable design elements used throughout the design file. For example, buttons, icons, symbols, or any other reusable components. It serves to maintain consistency across the design. +* **Main page:** The second page is the main page, which shows the complete user interface of the project. You can press ***Play*** to use the full app prototype. +* **Features pages:** The other pages are typically dedicated to features in progress. They contain the design of specific features or modules of the application or website. They are typically still in progress. + +## Useful Tips + +With read-only access, you can't edit the design, but you can access all features that will be useful to convert the designs into code. + +### Use the Dev mode + +Figma's Dev Mode enhances developers' productivity by providing easy design navigation, effective asset management, efficient communication tools, toolbox integrations, quick code snippets, and key layer information, bridging the gap between design and development. You can learn more about Dev Mode [here](https://www.figma.com/dev-mode/). + +Switch to the "Developer" mode in the right part of the toolbar to see design specs, copy CSS, and access assets. + +### Use the Prototype + +Click on any element on the canvas and press the “Play” button at the top right edge of the interface to access the prototype view. Prototype mode allows you to interact with the design as if it were the final product. It demonstrates the flow between screens and how interface elements like buttons, links, or menus behave when interacted with. + +1. **Understanding transitions and animations:** In the Prototype mode, you can view any transitions or animations added by a designer between screens or UI elements, providing clear visual instructions to developers on the intended behavior and style. +2. **Implementation clarification:** A prototype can also help reduce ambiguities. Developers can interact with it to gain a better understanding of the functionality or appearance of particular elements. + +For more comprehensive details and guidance on learning the Figma platform, you can visit the official [Figma Documentation](https://help.figma.com/hc/en-us). + +### Measure distances + +Select an element, hold `Option` key (Mac) or `Alt` key (Windows), then hover over another element to see the distance between them. + +### Figma extension for VSCode (Recommended) + +[Figma for VS Code](https://marketplace.visualstudio.com/items?itemName=figma.figma-vscode-extension) +lets you navigate and inspect design files, collaborate with designers, track changes, and speed up implementation - all without leaving your text editor. +It's part of our recommended extensions. + +## Collaboration + +1. **Using Comments:** You are welcome to use the comment feature by clicking on the bubble icon in the left part of the toolbar. +2. **Cursor chat:** A nice feature of Figma is the Cursor chat. Just press `;` on Mac and `/` on Windows to send a message if you see someone else using Figma as the same time as you. diff --git a/packages/twenty-docs/l/fr/developers/contribute/capabilities/local-setup.mdx b/packages/twenty-docs/l/fr/developers/contribute/capabilities/local-setup.mdx new file mode 100644 index 0000000000..3442846637 --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/capabilities/local-setup.mdx @@ -0,0 +1,333 @@ +--- +title: Local Setup +description: The guide for contributors (or curious developers) who want to run Twenty locally. +--- + +## Prerequisites + + + + Before you can install and use Twenty, make sure you install the following on your computer: + + * [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) + * [Node v24.5.0](https://nodejs.org/en/download) + * [yarn v4](https://yarnpkg.com/getting-started/install) + * [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md) + + + `npm` won't work, you should use `yarn` instead. Yarn is now shipped with Node.js, so you don't need to install it separately. + You only have to run `corepack enable` to enable Yarn if you haven't done it yet. + + + + + 1. Install WSL + Open PowerShell as Administrator and run: + + ```powershell + wsl --install + ``` + + You should now see a prompt to restart your computer. If not, restart it manually. + + Upon restart, a powershell window will open and install Ubuntu. This may take up some time. + You'll see a prompt to create a username and password for your Ubuntu installation. + + 2. Install and configure git + + ```bash + sudo apt-get install git + + git config --global user.name "Your Name" + + git config --global user.email "youremail@domain.com" + ``` + + 3. Install nvm, node.js and yarn + + + Use `nvm` to install the correct `node` version. The `.nvmrc` ensures all contributors use the same version. + + + ```bash + sudo apt-get install curl + + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash + ``` + + Close and reopen your terminal to use nvm. Then run the following commands. + + ```bash + + nvm install # installs recommended node version + + nvm use # use recommended node version + + corepack enable + ``` + + + +--- + +## Step 1: Git Clone + +In your terminal, run the following command. + + + + If you haven't already set up SSH keys, you can learn how to do so [here](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh). + + ```bash + git clone git@github.com:twentyhq/twenty.git + ``` + + + + ```bash + git clone https://github.com/twentyhq/twenty.git + ``` + + + +## Step 2: Position yourself at the root + +```bash +cd twenty +``` + +You should run all commands in the following steps from the root of the project. + +## Step 3: Set up a PostgreSQL Database + + + + **Option 1 (preferred):** To provision your database locally: + Use the following link to install Postgresql on your Linux machine: [Postgresql Installation](https://www.postgresql.org/download/linux/) + + ```bash + psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;" + ``` + + Note: You might need to add `sudo -u postgres` to the command before `psql` to avoid permission errors. + + **Option 2:** If you have docker installed: + + ```bash + make postgres-on-docker + ``` + + + + **Option 1 (preferred):** To provision your database locally with `brew`: + + ```bash + brew install postgresql@16 + export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH" + brew services start postgresql@16 + psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;" + ``` + + You can verify if the PostgreSQL server is running by executing: + + ```bash + brew services list + ``` + + The installer might not create the `postgres` user by default when installing + via Homebrew on MacOS. Instead, it creates a PostgreSQL role that matches your macOS + username (e.g., "john"). + To check and create the `postgres` user if necessary, follow these steps: + + ```bash + # Connect to PostgreSQL + psql postgres + or + psql -U $(whoami) -d postgres + ``` + + Once at the psql prompt (postgres=#), run: + + ```bash + # List existing PostgreSQL roles + \du + ``` + + You'll see output similar to: + + ```bash + Role name | Attributes | Member of + -----------+-------------+----------- + john | Superuser | {} + ``` + + If you do not see a `postgres` role listed, proceed to the next step. + Create the `postgres` role manually: + + ```bash + CREATE ROLE postgres WITH SUPERUSER LOGIN; + ``` + + This creates a superuser role named `postgres` with login access. + + **Option 2:** If you have docker installed: + + ```bash + make postgres-on-docker + ``` + + + + All the following steps are to be run in the WSL terminal (within your virtual machine) + + **Option 1:** To provision your Postgresql locally: + Use the following link to install Postgresql on your Linux virtual machine: [Postgresql Installation](https://www.postgresql.org/download/linux/) + + ```bash + psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;" + ``` + + Note: You might need to add `sudo -u postgres` to the command before `psql` to avoid permission errors. + + **Option 2:** If you have docker installed: + Running Docker on WSL adds an extra layer of complexity. + Only use this option if you are comfortable with the extra steps involved, including turning on [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl). + + ```bash + make postgres-on-docker + ``` + + + +You can now access the database at [localhost:5432](localhost:5432), with user `postgres` and password `postgres` . + +## Step 4: Set up a Redis Database (cache) + +Twenty requires a redis cache to provide the best performance + + + + **Option 1:** To provision your Redis locally: + Use the following link to install Redis on your Linux machine: [Redis Installation](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/) + + **Option 2:** If you have docker installed: + + ```bash + make redis-on-docker + ``` + + + + **Option 1 (preferred):** To provision your Redis locally with `brew`: + + ```bash + brew install redis + ``` + + Start your redis server: + `brew services start redis` + + **Option 2:** If you have docker installed: + + ```bash + make redis-on-docker + ``` + + + + **Option 1:** To provision your Redis locally: + Use the following link to install Redis on your Linux virtual machine: [Redis Installation](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/) + + **Option 2:** If you have docker installed: + + ```bash + make redis-on-docker + ``` + + + +If you need a Client GUI, we recommend [redis insight](https://redis.io/insight/) (free version available) + +## Step 5: Setup environment variables + +Use environment variables or `.env` files to configure your project. More info [here](/l/fr/developers/self-host/capabilities/setup) + +Copy the `.env.example` files in `/front` and `/server`: + +```bash +cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env +cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env +``` + + + **Multi-Workspace Mode:** By default, Twenty runs in single-workspace mode where only one workspace can be created. To enable multi-workspace support (useful for testing subdomain-based features), set `IS_MULTIWORKSPACE_ENABLED=true` in your server `.env` file. See [Multi-Workspace Mode](/l/fr/developers/self-host/capabilities/setup#multi-workspace-mode) for details. + + +## Step 6: Installing dependencies + +To build Twenty server and seed some data into your database, run the following command: + +```bash +yarn +``` + +Note that `npm` or `pnpm` won't work + +## Step 7: Running the project + + + + Depending on your Linux distribution, Redis server might be started automatically. + If not, check the [Redis installation guide](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) for your distro. + + + + Redis should already be running. If not, run: + + ```bash + brew services start redis + ``` + + + + Depending on your Linux distribution, Redis server might be started automatically. + If not, check the [Redis installation guide](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) for your distro. + + + +Set up your database with the following command: + +```bash +npx nx database:reset twenty-server +``` + +Start the server, the worker and the frontend services: + +```bash +npx nx start twenty-server +npx nx worker twenty-server +npx nx start twenty-front +``` + +Alternatively, you can start all services at once: + +```bash +npx nx start +``` + +## Step 8: Use Twenty + +**Frontend** + +Twenty's frontend will be running at [http://localhost:3001](http://localhost:3001). +You can log in using the default demo account: `tim@apple.dev` (password: `tim@apple.dev`) + +**Backend** + +* Twenty's server will be up and running at [http://localhost:3000](http://localhost:3000) +* The GraphQL API can be accessed at [http://localhost:3000/graphql](http://localhost:3000/graphql) +* The REST API can be reached at [http://localhost:3000/rest](http://localhost:3000/rest) + +## Troubleshooting + +If you encounter any problem, check [Troubleshooting](/l/fr/developers/self-host/capabilities/troubleshooting) for solutions. diff --git a/packages/twenty-docs/l/fr/developers/contribute/contribute.mdx b/packages/twenty-docs/l/fr/developers/contribute/contribute.mdx new file mode 100644 index 0000000000..0376097fc1 --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/contribute/contribute.mdx @@ -0,0 +1,32 @@ +--- +title: Contribute +description: Contribute to Twenty's open-source development. +--- + + + AI + + +## Overview + +Twenty is open-source and welcomes contributions from the community. Whether you're fixing bugs, adding features, or improving documentation, your contributions help make Twenty better for everyone. + +## Ways to Contribute + +* **Report bugs**: Help identify and document issues +* **Submit features**: Propose and implement new functionality +* **Improve documentation**: Make our docs clearer and more helpful +* **Frontend development**: Work on the React-based UI +* **Backend development**: Contribute to the NestJS server + +## Getting Started + + + + Report issues or request features + + + + Contribute to the UI + + diff --git a/packages/twenty-docs/l/fr/developers/extend/capabilities/apis.mdx b/packages/twenty-docs/l/fr/developers/extend/capabilities/apis.mdx new file mode 100644 index 0000000000..650449eb85 --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/extend/capabilities/apis.mdx @@ -0,0 +1,147 @@ +--- +title: APIs +description: Query and modify your CRM data programmatically using REST or GraphQL. +--- + +import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; + +Twenty was built to be developer-friendly, offering powerful APIs that adapt to your custom data model. We provide four distinct API types to meet different integration needs. + +## Developer-First Approach + +Twenty generates APIs specifically for your data model: + +* **No long IDs required**: Use your object and field names directly in endpoints +* **Standard and custom objects treated equally**: Your custom objects get the same API treatment as built-in ones +* **Dedicated endpoints**: Each object and field gets its own API endpoint +* **Custom documentation**: Generated specifically for your workspace's data model + + + Your personalized API documentation is available under **Settings → API & Webhooks** after creating an API key. Since Twenty generates APIs that match your custom data model, the documentation is unique to your workspace. + + +## The Two API Types + +### Core API + +Accessed on `/rest/` or `/graphql/` + +Work with your actual **records** (the data): + +* Create, read, update, delete People, Companies, Opportunities, etc. +* Query and filter data +* Manage record relationships + +### Metadata API + +Accessed on `/rest/metadata/` or `/metadata/` + +Manage your **workspace and data model**: + +* Create, modify, or delete objects and fields +* Configure workspace settings +* Define relationships between objects + +## REST vs GraphQL + +Both Core and Metadata APIs are available in REST and GraphQL formats: + +| Format | Available Operations | +| ----------- | ---------------------------------------------------------- | +| **REST** | CRUD, batch operations, upserts | +| **GraphQL** | Same + **batch upserts**, relationship queries in one call | + +Choose based on your needs — both formats access the same data. + +## API Endpoints + +| Environment | Base URL | +| --------------- | ------------------------- | +| **Cloud** | `https://api.twenty.com/` | +| **Self-Hosted** | `https://{your-domain}/` | + +## Authentication + +Every API request requires an API key in the header: + +``` +Authorization: Bearer YOUR_API_KEY +``` + +### Create an API Key + +1. Go to **Settings → APIs & Webhooks** +2. Click **+ Create key** +3. Configure: + * **Name**: Descriptive name for the key + * **Expiration Date**: When the key expires +4. Click **Save** +5. **Copy immediately** — the key is only shown once + + + + + Your API key grants access to sensitive data. Don't share it with untrusted services. If compromised, disable it immediately and generate a new one. + + +### Assign a Role to an API Key + +For better security, assign a specific role to limit access: + +1. Go to **Settings → Roles** +2. Click on the role to assign +3. Open the **Assignment** tab +4. Under **API Keys**, click **+ Assign to API key** +5. Select the API key + +The key will inherit that role's permissions. See [Permissions](/l/fr/user-guide/permissions-access/capabilities/permissions) for details. + +### Manage API Keys + +**Regenerate**: Settings → APIs & Webhooks → Click key → **Regenerate** + +**Delete**: Settings → APIs & Webhooks → Click key → **Delete** + +## API Playground + +Test your APIs directly in the browser with our built-in playground — available for both **REST** and **GraphQL**. + +### Access the Playground + +1. Go to **Settings → APIs & Webhooks** +2. Create an API key (required) +3. Click on **REST API** or **GraphQL API** to open the playground + +### What You Get + +* **Interactive documentation**: Generated for your specific data model +* **Live testing**: Execute real API calls against your workspace +* **Schema explorer**: Browse available objects, fields, and relationships +* **Request builder**: Construct queries with autocomplete + +The playground reflects your custom objects and fields, so documentation is always accurate for your workspace. + +## Batch Operations + +Both REST and GraphQL support batch operations: + +* **Batch size**: Up to 60 records per request +* **Operations**: Create, update, delete multiple records + +**GraphQL-only features:** + +* **Batch Upsert**: Create or update in one call +* Use plural object names (e.g., `CreateCompanies` instead of `CreateCompany`) + +## Rate Limits + +API requests are throttled to ensure platform stability: + +| Limit | Value | +| -------------- | -------------------- | +| **Requests** | 100 calls per minute | +| **Batch size** | 60 records per call | + + + Use batch operations to maximize throughput — process up to 60 records in a single API call instead of making individual requests. + diff --git a/packages/twenty-docs/l/fr/developers/extend/capabilities/apps.mdx b/packages/twenty-docs/l/fr/developers/extend/capabilities/apps.mdx new file mode 100644 index 0000000000..dc528fa780 --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/extend/capabilities/apps.mdx @@ -0,0 +1,522 @@ +--- +title: Twenty Apps +description: Build and manage Twenty customizations as code. +--- + + + Apps are currently in alpha testing. The feature is functional but still evolving. + + +## What Are Apps? + +Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and serverless functions in code — making it faster to build, maintain, and roll out to multiple workspaces. + +**What you can do today:** + +* Define custom objects and fields as code (managed data model) +* Build serverless functions with custom triggers +* Deploy the same app across multiple workspaces + +**Coming soon:** + +* Custom UI layouts and components + +## Prerequisites + +* Node.js 24+ and Yarn 4 +* A Twenty workspace and an API key (create one at https://app.twenty.com/settings/api-webhooks) + +## Getting Started + +Create a new app using the official scaffolder, then authenticate and start developing: + +```bash filename="Terminal" +# Scaffold a new app +npx create-twenty-app@latest my-twenty-app +cd my-twenty-app + +# Authenticate using your API key (you'll be prompted) +yarn auth + +# Start dev mode: automatically syncs local changes to your workspace +yarn dev +``` + +From here you can: + +```bash filename="Terminal" +# Add a new entity to your application (guided) +yarn create-entity + +# Generate a typed Twenty client and workspace entity types +yarn generate + +# Run a one‑time sync (instead of watch mode) +yarn sync + +# Watch your application's functions logs +yarn logs + +# Uninstall the application from the current workspace +yarn uninstall + +# Display commands' help +yarn help +``` + +See also: the CLI reference pages for [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) and [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk). + +## Project structure (scaffolded) + +When you run `npx create-twenty-app@latest my-twenty-app`, the scaffolder: + +* Copies a minimal base application into `my-twenty-app/` +* Adds a local `twenty-sdk` dependency and Yarn 4 configuration +* Creates config files and scripts wired to the `twenty` CLI +* Generates a default application config and a default function role + +A freshly scaffolded app looks like this: + +```text filename="my-twenty-app/" +my-twenty-app/ + package.json + yarn.lock + .gitignore + .nvmrc + .yarnrc.yml + .yarn/ + releases/ + yarn-4.9.2.cjs + install-state.gz + eslint.config.mjs + tsconfig.json + README.md + src/ + application.config.ts + role.config.ts + // your entities, actions, and other app files +``` + +At a high level: + +* **package.json**: Declares the app name, version, engines (Node 24+, Yarn 4), and adds `twenty-sdk` plus scripts like `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall`, and `auth` that delegate to the local `twenty` CLI. +* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `generated/` (typed client), `dist/`, `build/`, coverage folders, log files, and `.env*` files. +* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Lock and configure the Yarn 4 toolchain used by the project. +* **.nvmrc**: Pins the Node.js version expected by the project. +* **eslint.config.mjs** and **tsconfig.json**: Provide linting and TypeScript configuration for your app’s TypeScript sources. +* **README.md**: A short README in the app root with basic instructions. +* **src/**: The main place where you define your application-as-code: + * `application.config.ts`: Global configuration for your app (metadata and runtime wiring). See “Application config” below. + * `role.config.ts`: Default function role used by your serverless functions. See “Default function role” below. + * Future entities, actions/functions, and any supporting code you add. + +Later commands will add more files and folders: + +* `yarn generate` will create a `generated/` folder (typed Twenty client + workspace types). +* `yarn create-entity` will add entity definition files under `src/` for your custom objects. + +## Authentication + +The first time you run `yarn auth`, you'll be prompted for: + +* API URL (defaults to http://localhost:3000 or your current workspace profile) +* API key + +Your credentials are stored per-user in `~/.twenty/config.json`. You can maintain multiple profiles and switch using `--workspace `. + +Examples: + +```bash filename="Terminal" +# Login interactively (recommended) +yarn auth + +# Use a specific workspace profile +yarn auth --workspace my-custom-workspace +``` + +## Use the SDK resources (types & config) + +The twenty-sdk provides typed building blocks you use inside your app. Below are the key pieces you'll touch most often. + +### Defining objects + +Custom objects are regular TypeScript classes annotated with decorators from `twenty-sdk`. They live under `src/objects/` in your app and describe both schema and behavior for records in your workspace. + +Here is an example `postCard` object from the Hello World app: + +```typescript +import { type Note } from '../../generated'; + +import { + type AddressField, + Field, + FieldType, + type FullNameField, + Object, + OnDeleteAction, + Relation, + RelationType, + STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-sdk'; + +enum PostCardStatus { + DRAFT = 'DRAFT', + SENT = 'SENT', + DELIVERED = 'DELIVERED', + RETURNED = 'RETURNED', +} + +@Object({ + universalIdentifier: '54b589ca-eeed-4950-a176-358418b85c05', + nameSingular: 'postCard', + namePlural: 'postCards', + labelSingular: 'Post card', + labelPlural: 'Post cards', + description: ' A post card object', + icon: 'IconMail', +}) +export class PostCard { + @Field({ + universalIdentifier: '58a0a314-d7ea-4865-9850-7fb84e72f30b', + type: FieldType.TEXT, + label: 'Content', + description: "Postcard's content", + icon: 'IconAbc', + }) + content: string; + + @Field({ + universalIdentifier: 'c6aa31f3-da76-4ac6-889f-475e226009ac', + type: FieldType.FULL_NAME, + label: 'Recipient name', + icon: 'IconUser', + }) + recipientName: FullNameField; + + @Field({ + universalIdentifier: '95045777-a0ad-49ec-98f9-22f9fc0c8266', + type: FieldType.ADDRESS, + label: 'Recipient address', + icon: 'IconHome', + }) + recipientAddress: AddressField; + + @Field({ + universalIdentifier: '87b675b8-dd8c-4448-b4ca-20e5a2234a1e', + type: FieldType.SELECT, + label: 'Status', + icon: 'IconSend', + defaultValue: `'${PostCardStatus.DRAFT}'`, + options: [ + { value: PostCardStatus.DRAFT, label: 'Draft', position: 0, color: 'gray' }, + { value: PostCardStatus.SENT, label: 'Sent', position: 1, color: 'orange' }, + { value: PostCardStatus.DELIVERED, label: 'Delivered', position: 2, color: 'green' }, + { value: PostCardStatus.RETURNED, label: 'Returned', position: 3, color: 'orange' }, + ], + }) + status: PostCardStatus; + + @Relation({ + universalIdentifier: 'c9e2b4f4-b9ad-4427-9b42-9971b785edfe', + type: RelationType.ONE_TO_MANY, + label: 'Notes', + icon: 'IconComment', + inverseSideTargetUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.note, + onDelete: OnDeleteAction.CASCADE, + }) + notes: Note[]; + + @Field({ + universalIdentifier: 'e06abe72-5b44-4e7f-93be-afc185a3c433', + type: FieldType.DATE_TIME, + label: 'Delivered at', + icon: 'IconCheck', + isNullable: true, + defaultValue: null, + }) + deliveredAt?: Date; +} +``` + +Key points: + +* The `@Object` decorator defines the object identity and labels used across the workspace; its `universalIdentifier` must be unique and stable across deployments. +* Each `@Field` decorator defines a field on the object with a type, label, and its own stable `universalIdentifier`. +* `@Relation` wires this object to other objects (standard or custom) and controls cascade behavior with `onDelete`. +* You can scaffold new objects using `yarn create-entity`, which guides you through naming, fields, and relationships, then generates object files similar to the `postCard` example. + +### Application config (application.config.ts) + +Every app has a single `application.config.ts` file that describes: + +* **Who the app is**: identifiers, display name, and description. +* **How its functions run**: which role they use for permissions. +* **(Optional) variables**: key–value pairs exposed to your functions as environment variables. + +When you scaffold a new app, you start with a minimal config: + +```typescript +import { type ApplicationConfig } from 'twenty-sdk'; + +const config: ApplicationConfig = { + universalIdentifier: '', + displayName: 'My Twenty App', + description: 'My first Twenty app', + functionRoleUniversalIdentifier: '', +}; + +export default config; +``` + +You can gradually extend this file as your app grows. For example, you can add an icon and application-scoped variables: + +```typescript +import { type ApplicationConfig } from 'twenty-sdk'; + +const config: ApplicationConfig = { + universalIdentifier: '', + displayName: 'My App', + description: 'What your app does', + icon: 'IconWorld', // Choose an icon by name + applicationVariables: { + DEFAULT_RECIPIENT_NAME: { + universalIdentifier: '', + description: 'Default recipient used by functions', + value: 'Jane Doe', + isSecret: false, + }, + }, + functionRoleUniversalIdentifier: '', +}; + +export default config; +``` + +Notes: + +* `universalIdentifier` fields are deterministic IDs you own; generate them once and keep them stable across syncs. +* `applicationVariables` become environment variables for your functions (for example, `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`). +* `functionRoleUniversalIdentifier` must match the role you define in `role.config.ts` (see below). + +#### Roles and permissions + +Applications can define roles that encapsulate permissions on your workspace’s objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app’s serverless functions. + +* The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role. +* The typed client will be restricted to the permissions granted to that role. +* Follow least‑privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier. + +##### Default function role (role.config.ts) + +When you scaffold a new app, the CLI also creates `src/role.config.ts`. This file exports the default role your serverless functions will use at runtime: + +```typescript +import { PermissionFlag, type RoleConfig } from 'twenty-sdk'; + +export const functionRole: RoleConfig = { + universalIdentifier: '', + label: 'My Twenty App default function role', + description: 'My Twenty App default function role', + canReadAllObjectRecords: true, + canUpdateAllObjectRecords: true, + canSoftDeleteAllObjectRecords: true, + canDestroyAllObjectRecords: false, +}; +``` + +The `universalIdentifier` of this role is automatically wired into `application.config.ts` as `functionRoleUniversalIdentifier`. In other words: + +* **role.config.ts** defines what the default function role can do. +* **application.config.ts** points to that role so your functions inherit its permissions. + +As you move beyond the initial scaffold, you should tighten this role and make it explicit about what it can access. A more production-ready role might look closer to: + +```typescript +import { PermissionFlag, type RoleConfig } from 'twenty-sdk'; + +export const functionRole: RoleConfig = { + universalIdentifier: '', + label: 'Default function role', + description: 'Default role for function Twenty client', + canReadAllObjectRecords: false, + canUpdateAllObjectRecords: false, + canSoftDeleteAllObjectRecords: false, + canDestroyAllObjectRecords: false, + canUpdateAllSettings: false, + canBeAssignedToAgents: false, + canBeAssignedToUsers: false, + canBeAssignedToApiKeys: false, + objectPermissions: [ + { + objectNameSingular: 'postCard', + canReadObjectRecords: true, + canUpdateObjectRecords: true, + canSoftDeleteObjectRecords: false, + canDestroyObjectRecords: false, + }, + ], + fieldPermissions: [ + { + objectNameSingular: 'postCard', + fieldName: 'content', + canReadFieldValue: false, + canUpdateFieldValue: false, + }, + ], + permissionFlags: ['APPLICATIONS'], +}; +``` + +Notes: + +* Start from the scaffolded role, then progressively restrict it following least‑privilege. +* Replace the `objectPermissions` and `fieldPermissions` with the objects/fields your functions need. +* `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need. +* See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts). + +### Serverless function config and entrypoint + +Each function exports a main handler and a config describing its triggers. You can mix multiple trigger types. + +```typescript +// src/actions/create-new-post-card.ts +import type { + FunctionConfig, + DatabaseEventPayload, + ObjectRecordCreateEvent, + CronPayload, +} from 'twenty-sdk'; +import Twenty, { type Person } from '../generated'; + +// main handler can accept parameters from route, cron, or database events +export const main = async ( + params: + | { name?: string } + | DatabaseEventPayload> + | CronPayload, +) => { + const client = new Twenty(); // generated typed client + const name = 'name' in params + ? params.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world' + : 'Hello world'; + + const result = await client.mutation({ + createPostCard: { + __args: { data: { name } }, + id: true, + name: true, + }, + }); + return result; +}; + +export const config: FunctionConfig = { + universalIdentifier: '', + name: 'create-new-post-card', + timeoutSeconds: 2, + triggers: [ + // Public HTTP route trigger '/s/post-card/create' + { + universalIdentifier: '', + type: 'route', + path: '/post-card/create', + httpMethod: 'GET', + isAuthRequired: false, + }, + // Cron trigger (CRON pattern) + { + universalIdentifier: '', + type: 'cron', + pattern: '0 0 1 1 *', + }, + // Database event trigger + { + universalIdentifier: '', + type: 'databaseEvent', + eventName: 'person.created', + }, + ], +}; +``` + +Common trigger types: + +* route: Exposes your function on an HTTP path and method **under the `/s/` endpoint**: + +> e.g. `path: '/post-card/create',` -> call on `/s/post-card/create` + +* cron: Runs your function on a schedule using a CRON expression. +* databaseEvent: Runs on workspace object lifecycle events + +> e.g. `person.created` + +You can create new functions in two ways: + +* **Scaffolded**: Run `yarn create-entity --path ` and choose the option to add a new function. This generates a starter file under `` with a `main` handler and a `config` block similar to the example above. +* **Manual**: Create a new file and export `main` and `config` yourself, following the same pattern. + +### Generated typed client + +Run yarn generate to create a local typed client in generated/ based on your workspace schema. Use it in your functions: + +```typescript +import Twenty from './generated'; + +const client = new Twenty(); +const { me } = await client.query({ me: { id: true, displayName: true } }); +``` + +The client is re-generated by `yarn generate`. Re-run after changing your objects and `yarn sync` or when onboarding to a new workspace. + +#### Runtime credentials in serverless functions + +When your function runs on Twenty, the platform injects credentials as environment variables before your code executes: + +* `TWENTY_API_URL`: Base URL of the Twenty API your app targets. +* `TWENTY_API_KEY`: Short‑lived key scoped to your application’s default function role. + +Notes: + +* You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime. +* The API key’s permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by serverless functions of your application. +* Applications can define roles to follow least‑privilege. Grant only the permissions your functions need, then point `functionRoleUniversalIdentifier` to that role’s universal identifier. + +### Hello World example + +Explore a minimal, end-to-end example that demonstrates objects, functions, and multiple triggers [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world): + +## Manual setup (without the scaffolder) + +While we recommend using `create-twenty-app` for the best getting-started experience, you can also set up a project manually. Do not install the CLI globally. Instead, add `twenty-sdk` as a local dependency and wire scripts in your package.json: + +```bash filename="Terminal" +yarn add -D twenty-sdk +``` + +Then add scripts like these: + +```json filename="package.json" +{ + "scripts": { + "auth": "twenty auth login", + "generate": "twenty app generate", + "dev": "twenty app dev", + "sync": "twenty app sync", + "uninstall": "twenty app uninstall", + "logs": "twenty app logs", + "create-entity": "twenty app add", + "help": "twenty --help" + } +} +``` + +Now you can run the same commands via Yarn, e.g. `yarn dev`, `yarn sync`, etc. + +## Troubleshooting + +* Authentication errors: run `yarn auth` and ensure your API key has the required permissions. +* Cannot connect to server: verify the API URL and that the Twenty server is reachable. +* Types or client missing/outdated: run `yarn generate` and then `yarn dev`. +* Dev mode not syncing: ensure `yarn dev` is running and that changes are not ignored by your environment. + +Discord Help Channel: https://discord.com/channels/1130383047699738754/1130386664812982322 diff --git a/packages/twenty-docs/l/fr/developers/extend/capabilities/webhooks.mdx b/packages/twenty-docs/l/fr/developers/extend/capabilities/webhooks.mdx new file mode 100644 index 0000000000..5e41cb2d6e --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/extend/capabilities/webhooks.mdx @@ -0,0 +1,112 @@ +--- +title: Webhooks +description: Receive real-time notifications when events occur in your CRM. +--- + +import { VimeoEmbed } from '/snippets/vimeo-embed.mdx'; + +Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts. + +## Create a Webhook + +1. Go to **Settings → APIs & Webhooks → Webhooks** +2. Click **+ Create webhook** +3. Enter your webhook URL (must be publicly accessible) +4. Click **Save** + +The webhook activates immediately and starts sending notifications. + + + +### Manage Webhooks + +**Edit**: Click the webhook → Update URL → **Save** + +**Delete**: Click the webhook → **Delete** → Confirm + +## Events + +Twenty sends webhooks for these event types: + +| Event | Example | +| ------------------ | ---------------------------------------------------------- | +| **Record Created** | `person.created`, `company.created`, `note.created` | +| **Record Updated** | `person.updated`, `company.updated`, `opportunity.updated` | +| **Record Deleted** | `person.deleted`, `company.deleted` | + +All event types are sent to your webhook URL. Event filtering may be added in future releases. + +## Payload Format + +Each webhook sends an HTTP POST with a JSON body: + +```json +{ + "event": "person.created", + "data": { + "id": "abc12345", + "firstName": "Alice", + "lastName": "Doe", + "email": "alice@example.com", + "createdAt": "2025-02-10T15:30:45Z", + "createdBy": "user_123" + }, + "timestamp": "2025-02-10T15:30:50Z" +} +``` + +| Field | Description | +| ----------- | ------------------------------------------------ | +| `event` | What happened (e.g., `person.created`) | +| `data` | The full record that was created/updated/deleted | +| `timestamp` | When the event occurred (UTC) | + + + Respond with a **2xx HTTP status** (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures. + + +## Webhook Validation + +Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic. + +### Headers + +| Header | Description | +| ---------------------------- | --------------------- | +| `X-Twenty-Webhook-Signature` | HMAC SHA256 signature | +| `X-Twenty-Webhook-Timestamp` | Request timestamp | + +### Validation Steps + +1. Get the timestamp from `X-Twenty-Webhook-Timestamp` +2. Create the string: `{timestamp}:{JSON payload}` +3. Compute HMAC SHA256 using your webhook secret +4. Compare with `X-Twenty-Webhook-Signature` + +### Example (Node.js) + +```javascript +const crypto = require("crypto"); + +const timestamp = req.headers["x-twenty-webhook-timestamp"]; +const payload = JSON.stringify(req.body); +const secret = "your-webhook-secret"; + +const stringToSign = `${timestamp}:${payload}`; +const expectedSignature = crypto + .createHmac("sha256", secret) + .update(stringToSign) + .digest("hex"); + +const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"]; +``` + +## Webhooks vs Workflows + +| Method | Direction | Use Case | +| ---------------------------- | --------- | ---------------------------------------------------------- | +| **Webhooks** | OUT | Automatically notify external systems of any record change | +| **Workflow + HTTP Request** | OUT | Send data out with custom logic (filters, transformations) | +| **Workflow Webhook Trigger** | IN | Receive data into Twenty from external systems | + +For receiving external data, see [Set Up a Webhook Trigger](/l/fr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger). diff --git a/packages/twenty-docs/l/fr/developers/extend/extend.mdx b/packages/twenty-docs/l/fr/developers/extend/extend.mdx new file mode 100644 index 0000000000..b20f91c3ee --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/extend/extend.mdx @@ -0,0 +1,34 @@ +--- +title: Extend +description: Extend Twenty's functionality with APIs, webhooks, and custom apps. +--- + + + AI + + +## Overview + +Twenty is designed to be extensible. Use our APIs, webhooks, and app framework to integrate with your existing tools and build custom functionality. + +## What You Can Do + +* **APIs**: Query and modify your CRM data programmatically using REST or GraphQL +* **Webhooks**: Receive real-time notifications when events occur in Twenty +* **Apps**: Build custom applications that extend Twenty's capabilities - Coming soon! + +## Getting Started + + + + Connect to Twenty programmatically + + + + Get notified of events in real-time + + + + Build customizations as code (Alpha) + + diff --git a/packages/twenty-docs/l/fr/developers/introduction.mdx b/packages/twenty-docs/l/fr/developers/introduction.mdx new file mode 100644 index 0000000000..f738cb27fa --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/introduction.mdx @@ -0,0 +1,23 @@ +--- +title: Getting Started +description: Welcome to Twenty Developer Documentation, your resources for extending, self-hosting, and contributing to Twenty. +--- + +import { CardTitle } from "/snippets/card-title.mdx" + + + + Extend + Build integrations with APIs, webhooks, and custom apps. + + + + Self-Host + Deploy and manage Twenty on your own infrastructure. + + + + Contribute + Join our open-source community and contribute to Twenty. + + diff --git a/packages/twenty-docs/l/fr/developers/self-host/capabilities/cloud-providers.mdx b/packages/twenty-docs/l/fr/developers/self-host/capabilities/cloud-providers.mdx index cc975ad41e..809388612a 100644 --- a/packages/twenty-docs/l/fr/developers/self-host/capabilities/cloud-providers.mdx +++ b/packages/twenty-docs/l/fr/developers/self-host/capabilities/cloud-providers.mdx @@ -1,45 +1,45 @@ --- -title: Autres méthodes +title: Other methods --- - Ce document est maintenu par la communauté. Il pourrait contenir des problèmes. + This document is maintained by the community. It might contain issues. -## Kubernetes via Terraform et Manifests +## Kubernetes via Terraform and Manifests -La documentation communautaire pour le déploiement de Kubernetes est disponible [ici](https://github.com/twentyhq/twenty/tree/main/packages/twenty-docker/k8s) +Community-led documentation for Kubernetes deployment is available [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-docker/k8s) ### Coolify -Déployer Twenty sur les serveurs avec Coolify. (l'image officielle sur Coolify sera bientôt disponible) +Deploy Twenty on servers using Coolify. (official image on Coolify will be available soon) -[Documentation Coolify](https://coolify.io/docs/get-started/introduction) +[Coolify documentation](https://coolify.io/docs/get-started/introduction) ### EasyPanel -Déployez Twenty sur EasyPanel avec le modèle maintenu par la communauté ci-dessous. +Deploy Twenty on EasyPanel with the community maintained template below. -[Déployer sur EasyPanel](https://easypanel.io/docs/templates/twenty) +[Deploy on EasyPanel](https://easypanel.io/docs/templates/twenty) ### Elest.io -Déployez Twenty sur les serveurs avec Elest.io en utilisant le lien ci-dessous. +Deploy Twenty on servers with Elest.io using link below. -[Déployer sur Elest.io](https://elest.io/open-source/twenty) +[Deploy on Elest.io](https://elest.io/open-source/twenty) -### Twenty sur Railway +### Twenty on Railway -Déployez Twenty sur Railway avec le modèle maintenu par la communauté ci-dessous. +Deploy Twenty on Railway with the community maintained template below. -[![Déployer sur Railway](https://railway.com/button.svg)](https://railway.com/deploy/nAL3hA) +[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/nAL3hA) -### Twenty sur Sealos +### Twenty on Sealos -Déployez Twenty sur Sealos avec le modèle maintenu par la communauté ci-dessous. +Deploy Twenty on Sealos with the community maintained template below. -[![Déployer sur Sealos](https://sealos.io/Deploy-on-Sealos.svg)](https://sealos.io/products/app-store/twenty) +[![Deploy on Sealos](https://sealos.io/Deploy-on-Sealos.svg)](https://sealos.io/products/app-store/twenty) -## Autres +## Others -N'hésitez pas à ouvrir une PR pour ajouter d'autres options de fournisseur cloud. +Please feel free to Open a PR to add more Cloud Provider options. diff --git a/packages/twenty-docs/l/fr/developers/self-host/capabilities/docker-compose.mdx b/packages/twenty-docs/l/fr/developers/self-host/capabilities/docker-compose.mdx new file mode 100644 index 0000000000..b48b461f20 --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/self-host/capabilities/docker-compose.mdx @@ -0,0 +1,253 @@ +--- +title: 1-Click w/ Docker Compose +--- + + + Docker containers are for production hosting or self-hosting, for the contribution please check the [Local Setup](/l/fr/developers/contribute/capabilities/local-setup). + + +## Overview + +This guide provides step-by-step instructions to install and configure the Twenty application using Docker Compose. The aim is to make the process straightforward and prevent common pitfalls that could break your setup. + +**Important:** Only modify settings explicitly mentioned in this guide. Altering other configurations may lead to issues. + +See docs [Setup Environment Variables](/l/fr/developers/self-host/capabilities/setup) for advanced configuration. All environment variables must be declared in the docker-compose.yml file at the server and / or worker level depending on the variable. + +## System Requirements + +* RAM: Ensure your environment has at least 2GB of RAM. Insufficient memory can cause processes to crash. +* Docker & Docker Compose: Make sure both are installed and up-to-date. + +## Option 1: One-line script + +Install the latest stable version of Twenty with a single command: + +```bash +bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh) +``` + +To install a specific version or branch: + +```bash +VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh) +``` + +* Replace x.y.z with the desired version number. +* Replace branch-name with the name of the branch you want to install. + +## Option 2: Manual steps + +Follow these steps for a manual setup. + +### Step 1: Set Up the Environment File + +1. **Create the .env File** + + Copy the example environment file to a new .env file in your working directory: + + ```bash + curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example + ``` + +2. **Generate Secret Tokens** + + Run the following command to generate a unique random string: + + ```bash + openssl rand -base64 32 + ``` + + **Important:** Keep this value secret / do not share it. + +3. **Update the `.env`** + + Replace the placeholder value in your .env file with the generated token: + + ```ini + APP_SECRET=first_random_string + ``` + +4. **Set the Postgres Password** + + Update the `PG_DATABASE_PASSWORD` value in the .env file with a strong password without special characters. + + ```ini + PG_DATABASE_PASSWORD=my_strong_password + ``` + +### Step 2: Obtain the Docker Compose File + +Download the `docker-compose.yml` file to your working directory: + +```bash +curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml +``` + +### Step 3: Launch the Application + +Start the Docker containers: + +```bash +docker compose up -d +``` + +### Step 4: Access the Application + +If you host twentyCRM on your own computer, open your browser and navigate to [http://localhost:3000](http://localhost:3000). + +If you host it on a server, check that the server is running and that everything is ok with + +```bash +curl http://localhost:3000 +``` + +## Configuration + +### Expose Twenty to External Access + +By default, Twenty runs on `localhost` at port `3000`. To access it via an external domain or IP address, you need to configure the `SERVER_URL` in your `.env` file. + +#### Understanding `SERVER_URL` + +* **Protocol:** Use `http` or `https` depending on your setup. + * Use `http` if you haven't set up SSL. + * Use `https` if you have SSL configured. +* **Domain/IP:** This is the domain name or IP address where your application is accessible. +* **Port:** Include the port number if you're not using the default ports (`80` for `http`, `443` for `https`). + +### SSL Requirements + +SSL (HTTPS) is required for certain browser features to work properly. While these features might work during local development (as browsers treat localhost differently), a proper SSL setup is needed when hosting Twenty on a regular domain. + +For example, the clipboard API might require a secure context - some features like copy buttons throughout the application might not work without HTTPS enabled. + +We strongly recommend setting up Twenty behind a reverse proxy with SSL termination for optimal security and functionality. + +#### Configuring `SERVER_URL` + +1. **Determine Your Access URL** + * **Without Reverse Proxy (Direct Access):** + + If you're accessing the application directly without a reverse proxy: + + ```ini + SERVER_URL=http://your-domain-or-ip:3000 + ``` + + * **With Reverse Proxy (Standard Ports):** + + If you're using a reverse proxy like Nginx or Traefik and have SSL configured: + + ```ini + SERVER_URL=https://your-domain-or-ip + ``` + + * **With Reverse Proxy (Custom Ports):** + + If you're using non-standard ports: + + ```ini + SERVER_URL=https://your-domain-or-ip:custom-port + ``` + +2. **Update the `.env` File** + + Open your `.env` file and update the `SERVER_URL`: + + ```ini + SERVER_URL=http(s)://your-domain-or-ip:your-port + ``` + + **Examples:** + + * Direct access without SSL: + ```ini + SERVER_URL=http://123.45.67.89:3000 + ``` + * Access via domain with SSL: + ```ini + SERVER_URL=https://mytwentyapp.com + ``` + +3. **Restart the Application** + + For changes to take effect, restart the Docker containers: + + ```bash + docker compose down + docker compose up -d + ``` + +#### Considerations + +* **Reverse Proxy Configuration:** + + Ensure your reverse proxy forwards requests to the correct internal port (`3000` by default). Configure SSL termination and any necessary headers. + +* **Firewall Settings:** + + Open necessary ports in your firewall to allow external access. + +* **Consistency:** + + The `SERVER_URL` must match how users access your application in their browsers. + +#### Persistence + +* **Data Volumes:** + + The Docker Compose configuration uses volumes to persist data for the database and server storage. + +* **Stateless Environments:** + + If deploying to a stateless environment (e.g., certain cloud services), configure external storage to persist data. + +## Backup and Restore + +Regular backups protect your CRM data from loss. + +### Create a Database Backup + +```bash +docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql +``` + +### Automate Daily Backups + +Add to your crontab (`crontab -e`): + +```bash +0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql +``` + +### Restore from Backup + +1. Stop the application: + +```bash +docker compose stop twenty-server twenty-front +``` + +2. Restore the database: + +```bash +docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql +``` + +3. Restart services: + +```bash +docker compose up -d +``` + +### Backup Best Practices + +* **Test restores regularly** — verify backups actually work +* **Store backups off-site** — use cloud storage (S3, GCS, etc.) +* **Encrypt sensitive data** — protect backups with encryption +* **Retain multiple copies** — keep daily, weekly, and monthly backups + +## Troubleshooting + +If you encounter any problem, check [Troubleshooting](/l/fr/developers/self-host/capabilities/troubleshooting) for solutions. diff --git a/packages/twenty-docs/l/fr/developers/self-host/capabilities/setup.mdx b/packages/twenty-docs/l/fr/developers/self-host/capabilities/setup.mdx new file mode 100644 index 0000000000..d8f671544e --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/self-host/capabilities/setup.mdx @@ -0,0 +1,293 @@ +--- +title: Setup +--- + +# Configuration Management + + + **First time installing?** Follow the [Docker Compose installation guide](/l/fr/developers/self-host/capabilities/docker-compose) to get Twenty running, then return here for configuration. + + +Twenty offers **two configuration modes** to suit different deployment needs: + +**Admin panel access:** Only users with admin privileges (`canAccessFullAdminPanel: true`) can access the configuration interface. + +## 1. Admin Panel Configuration (Default) + +```bash +IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # default +``` + +**Most configuration happens through the UI** after installation: + +1. Access your Twenty instance (usually `http://localhost:3000`) +2. Go to **Settings / Admin Panel / Configuration Variables** +3. Configure integrations, email, storage, and more +4. Changes take effect immediately (within 15 seconds for multi-container deployments) + + + **Multi-Container Deployments:** When using database configuration (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`), both server and worker containers read from the same database. Admin panel changes affect both automatically, eliminating the need to duplicate environment variables between containers (except for infrastructure variables). + + +**What you can configure through the admin panel:** + +* **Authentication** - Google/Microsoft OAuth, password settings +* **Email** - SMTP settings, templates, verification +* **Storage** - S3 configuration, local storage paths +* **Integrations** - Gmail, Google Calendar, Microsoft services +* **Workflow & Rate Limiting** - Execution limits, API throttling +* **And much more...** + +![Admin Panel Configuration Variables](/images/user-guide/setup/admin-panel-config-variables.png) + + + Each variable is documented with descriptions in your admin panel at **Settings → Admin Panel → Configuration Variables**. + Some infrastructure settings like database connections (`PG_DATABASE_URL`), server URLs (`SERVER_URL`), and app secrets (`APP_SECRET`) can only be configured via `.env` file. + + [Complete technical reference →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts) + + +## 2. Environment-Only Configuration + +```bash +IS_CONFIG_VARIABLES_IN_DB_ENABLED=false +``` + +**All configuration managed through `.env` files:** + +1. Set `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` in your `.env` file +2. Add all configuration variables to your `.env` file +3. Restart containers for changes to take effect +4. Admin panel will show current values but cannot modify them + +## Multi-Workspace Mode + +By default, Twenty runs in **single-workspace mode** — ideal for most self-hosted deployments where you need one CRM instance for your organization. + +### Single-Workspace Mode (Default) + +```bash +IS_MULTIWORKSPACE_ENABLED=false # default +``` + +* One workspace per Twenty instance +* First user automatically becomes admin with full privileges (`canImpersonate` and `canAccessFullAdminPanel`) +* New signups are disabled after the first workspace is created +* Simple URL structure: `https://your-domain.com` + +### Enabling Multi-Workspace Mode + +```bash +IS_MULTIWORKSPACE_ENABLED=true +DEFAULT_SUBDOMAIN=app # default value +``` + +Enable multi-workspace mode for SaaS-like deployments where multiple independent teams need their own workspaces on the same Twenty instance. + +**Key differences from single-workspace mode:** + +* Multiple workspaces can be created on the same instance +* Each workspace gets its own subdomain (e.g., `sales.your-domain.com`, `marketing.your-domain.com`) +* Users sign up and log in at `{DEFAULT_SUBDOMAIN}.your-domain.com` (e.g., `app.your-domain.com`) +* No automatic admin privileges — first user in each workspace is a regular user +* Workspace-specific settings like subdomain and custom domain become available in workspace settings + + + **Environment-only setting:** `IS_MULTIWORKSPACE_ENABLED` can only be configured via `.env` file and requires a restart. It cannot be changed through the admin panel. + + +### DNS Configuration for Multi-Workspace + +When using multi-workspace mode, configure your DNS with a wildcard record to allow dynamic subdomain creation: + +``` +*.your-domain.com -> your-server-ip +``` + +This enables automatic subdomain routing for new workspaces without manual DNS configuration. + +### Restricting Workspace Creation + +In multi-workspace mode, you may want to limit who can create new workspaces: + +```bash +IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true +``` + +When enabled, only users with `canAccessFullAdminPanel` can create additional workspaces. Users can still create their first workspace during initial signup. + +## Gmail & Google Calendar Integration + +### Create Google Cloud Project + +1. Go to [Google Cloud Console](https://console.cloud.google.com/) +2. Create a new project or select existing one +3. Enable these APIs: + +* [Gmail API](https://console.cloud.google.com/apis/library/gmail.googleapis.com) +* [Google Calendar API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com) +* [People API](https://console.cloud.google.com/apis/library/people.googleapis.com) + +### Configure OAuth + +1. Go to [Credentials](https://console.cloud.google.com/apis/credentials) +2. Create OAuth 2.0 Client ID +3. Add these redirect URIs: + * `https://{your-domain}/auth/google/redirect` (for SSO) + * `https://{your-domain}/auth/google-apis/get-access-token` (for integrations) + +### Configure in Twenty + +1. Go to **Settings → Admin Panel → Configuration Variables** +2. Find the **Google Auth** section +3. Set these variables: + * `MESSAGING_PROVIDER_GMAIL_ENABLED=true` + * `CALENDAR_PROVIDER_GOOGLE_ENABLED=true` + * `AUTH_GOOGLE_CLIENT_ID={client-id}` + * `AUTH_GOOGLE_CLIENT_SECRET={client-secret}` + * `AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirect` + * `AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token` + + + **Environment-only mode:** If you set `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, add these variables to your `.env` file instead. + + +**Required scopes** (automatically configured): +[See relevant source code](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10) + +* `https://www.googleapis.com/auth/calendar.events` +* `https://www.googleapis.com/auth/gmail.readonly` +* `https://www.googleapis.com/auth/profile.emails.read` + +### If your app is in test mode + +If your app is in test mode, you will need to add test users to your project. + +Under [OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent), add your test users to the "Test users" section. + +## Microsoft 365 Integration + + + Users must have a [Microsoft 365 Licence](https://admin.microsoft.com/Adminportal/Home) to be able to use the Calendar and Messaging API. They will not be able to sync their account on Twenty without one. + + +### Create a project in Microsoft Azure + +You will need to create a project in [Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) and get the credentials. + +### Enable APIs + +On Microsoft Azure Console enable the following APIs in "Permissions": + +* Microsoft Graph: Mail.ReadWrite +* Microsoft Graph: Mail.Send +* Microsoft Graph: Calendars.Read +* Microsoft Graph: User.Read +* Microsoft Graph: openid +* Microsoft Graph: email +* Microsoft Graph: profile +* Microsoft Graph: offline_access + +Note: "Mail.ReadWrite" and "Mail.Send" are only mandatory if you want to send emails using our workflow actions. You can use "Mail.Read" instead if you only want to receive emails. + +### Authorized redirect URIs + +You need to add the following redirect URIs to your project: + +* `https://{your-domain}/auth/microsoft/redirect` if you want to use Microsoft SSO +* `https://{your-domain}/auth/microsoft-apis/get-access-token` + +### Configure in Twenty + +1. Go to **Settings → Admin Panel → Configuration Variables** +2. Find the **Microsoft Auth** section +3. Set these variables: + * `MESSAGING_PROVIDER_MICROSOFT_ENABLED=true` + * `CALENDAR_PROVIDER_MICROSOFT_ENABLED=true` + * `AUTH_MICROSOFT_ENABLED=true` + * `AUTH_MICROSOFT_CLIENT_ID={client-id}` + * `AUTH_MICROSOFT_CLIENT_SECRET={client-secret}` + * `AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirect` + * `AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token` + + + **Environment-only mode:** If you set `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, add these variables to your `.env` file instead. + + +### Configure scopes + +[See relevant source code](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9) + +* 'openid' +* 'email' +* 'profile' +* 'offline_access' +* 'Mail.ReadWrite' +* 'Mail.Send' +* 'Calendars.Read' + +### If your app is in test mode + +If your app is in test mode, you will need to add test users to your project. + +Add your test users to the "Users and groups" section. + +## Background Jobs for Calendar & Messaging + +After configuring Gmail, Google Calendar, or Microsoft 365 integrations, you need to start the background jobs that sync data. + +Register the following recurring jobs in your worker container: + +```bash +# from your worker container +yarn command:prod cron:messaging:messages-import +yarn command:prod cron:messaging:message-list-fetch +yarn command:prod cron:calendar:calendar-event-list-fetch +yarn command:prod cron:calendar:calendar-events-import +yarn command:prod cron:messaging:ongoing-stale +yarn command:prod cron:calendar:ongoing-stale +yarn command:prod cron:workflow:automated-cron-trigger +``` + +## Email Configuration + +1. Go to **Settings → Admin Panel → Configuration Variables** +2. Find the **Email** section +3. Configure your SMTP settings: + + + + You will need to provision an [App Password](https://support.google.com/accounts/answer/185833). + + * EMAIL_DRIVER=smtp + * EMAIL_SMTP_HOST=smtp.gmail.com + * EMAIL_SMTP_PORT=465 + * EMAIL_SMTP_USER=gmail_email_address + * EMAIL_SMTP_PASSWORD='gmail_app_password' + + + + Keep in mind that if you have 2FA enabled, you will need to provision an [App Password](https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9). + + * EMAIL_DRIVER=smtp + * EMAIL_SMTP_HOST=smtp.office365.com + * EMAIL_SMTP_PORT=587 + * EMAIL_SMTP_USER=office365_email_address + * EMAIL_SMTP_PASSWORD='office365_password' + + + + **smtp4dev** is a fake SMTP email server for development and testing. + + * Run the smtp4dev image: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev` + * Access the smtp4dev ui here: [http://localhost:8090](http://localhost:8090) + * Set the following variables: + * EMAIL_DRIVER=smtp + * EMAIL_SMTP_HOST=localhost + * EMAIL_SMTP_PORT=2525 + + + + + **Environment-only mode:** If you set `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, add these variables to your `.env` file instead. + diff --git a/packages/twenty-docs/l/fr/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/fr/developers/self-host/capabilities/troubleshooting.mdx new file mode 100644 index 0000000000..d2187aedac --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/self-host/capabilities/troubleshooting.mdx @@ -0,0 +1,227 @@ +--- +title: Troubleshooting +--- + +## Troubleshooting + +If you encounter any problem while setting up environment for development, upgrading your instance or self-hosting, +here are some solutions for common problems. + +### Self-hosting + +#### First install results in `password authentication failed for user "postgres"` + +🚨 **IMPORTANT: This solution is ONLY for fresh installations** 🚨 +If you have an existing Twenty instance with production data, **DO NOT** follow these steps as they will permanently delete your database! + +While installing Twenty for the first time, you might want to change the default database password. +The password you set during the first installation becomes permanently stored in the database volume. If you later try to change this password in your configuration without removing the old volume, you'll get authentication errors because the database is still using the original password. + +⚠️ WARNING: Following steps will PERMANENTLY DELETE all database data! ⚠️ +Only proceed if this is a fresh installation with no important data. + +In order to update the `PG_DATABASE_PASSWORD` you need to: + +```sh +# Update the PG_DATABASE_PASSWORD in .env +docker compose down --volumes +docker compose up -d +``` + +#### CR line breaks found [Windows] + +This is due to the line break characters of Windows and the git configuration. Try running: + +``` +git config --global core.autocrlf false +``` + +Then delete the repository and clone it again. + +#### Missing metadata schema + +During Twenty installation, you need to provision your postgres database with the right schemas, extensions, and users. +If you're successful in running this provisioning, you should have `default` and `metadata` schemas in your database. +If you don't, make sure you don't have more than one postgres instance running on your computer. + +#### Cannot find module 'twenty-emails' or its corresponding type declarations. + +You have to build the package `twenty-emails` before running the initialization of the database with `npx nx run twenty-emails:build` + +#### Missing twenty-x package + +Make sure to run yarn in the root directory and then run `npx nx server:dev twenty-server`. If this still doesn't work try building the missing package manually. + +#### Lint on Save not working + +This should work out of the box with the eslint extension installed. If this doesn't work try adding this to your vscode setting (on the dev container scope): + +``` +"editor.codeActionsOnSave": { + + "source.fixAll.eslint": "explicit" + +} +``` + +#### While running `npx nx start` or `npx nx start twenty-front`, Out of memory error is thrown + +In `packages/twenty-front/.env` uncomment `VITE_DISABLE_TYPESCRIPT_CHECKER=true` to disable background checks thus reducing amount of needed RAM. + +**If it does not work:** +Run only the services you need, instead of `npx nx start`. For instance, if you work on the server, run only `npx nx worker twenty-server` + +**If it does not work:** +If you tried to run only `npx nx run twenty-server:start` on WSL and it's failing with the below memory error: + +`FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory` + +Workaround is to execute below command in terminal or add it in .bashrc profile to get setup automatically: + +`export NODE_OPTIONS="--max-old-space-size=8192"` + +The --max-old-space-size=8192 flag sets an upper limit of 8GB for the Node.js heap; usage scales with application demand. +Reference: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048 + +**If it does not work:** +Investigate which processes are taking you most of your machine RAM. At Twenty, we noticed that some VScode extensions were taking a lot of RAM so we temporarily disable them. + +**If it does not work:** +Restart your machine helps to clean up ghost processes. + +#### While running `npx nx start` there are weird [0] and [1] in logs + +That's expected as command `npx nx start` is running more commands under the hood + +#### No emails are sent + +Most of the time, it's because the `worker` is not running in the background. Try to run + +``` +npx nx worker twenty-server +``` + +#### Cannot connect my Microsoft 365 account + +Most of the time, it's because your admin has not enabled the Microsoft 365 Licence for your account. Check [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home). + +If you have an error code `AADSTS50020`, it probably means that you are using a personal Microsoft account. This is not supported yet. More info [here](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist) + +#### While running `yarn` warnings appear in console + +Warnings are informing about pulling additional dependencies which aren't explicitly stated in `package.json`, so as long as no breaking error appears, everything should work as expected. + +#### When user accesses login page, error about unauthorized user trying to access workspace appears in logs + +That's expected as user is unauthorized when logged out since its identity is not verified. + +#### How to check if your worker is running? + +* Go to [webhook-test.com](https://webhook-test.com/) and copy **Your Unique Webhook URL**. + +
+ Webhook test +
+ +* Open your Twenty app, navigate to `/settings`, and enable the **Advanced** toggle at the bottom left of the screen. +* Create a new webhook. +* Paste **Your Unique Webhook URL** in the **Endpoint Url** field in Twenty. Set the **Filters** to `Companies` and `Created`. + +
+ Webhook settings +
+ +* Go to `/objects/companies` and create a new company record. +* Return to [webhook-test.com](https://webhook-test.com/) and check if a new **POST request** has been received. + +
+ Webhook test result +
+ +* If a **POST request** is received, your worker is running successfully. Otherwise, you need to troubleshoot your worker. + +#### Front-end fails to start and returns error TS5042: Option 'project' cannot be mixed with source files on a command line + +Comment out checker plugin in `packages/twenty-ui/vite-config.ts` like in example below + +``` +plugins: [ + react({ jsxImportSource: '@emotion/react' }), + tsconfigPaths(), + svgr(), + dts(dtsConfig), + // checker(checkersConfig), + wyw({ + include: [ + '**/OverflowingTextWithTooltip.tsx', + '**/Chip.tsx', + '**/Tag.tsx', + '**/Avatar.tsx', + '**/AvatarChip.tsx', + ], + babelOptions: { + presets: ['@babel/preset-typescript', '@babel/preset-react'], + }, + }), + ], +``` + +#### Admin panel not accessible + +Run `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` in database container to get access to admin panel. + +### 1-click Docker compose + +#### Unable to Log In + +If you can't log in after setup: + +1. Run the following commands: + ```bash + docker exec -it twenty-server-1 yarn + docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed + ``` +2. Restart the Docker containers: + ```bash + docker compose down + docker compose up -d + ``` + +Note the database:reset command will completely erase your database and recreate it from scratch. + +#### Connection Issues Behind a Reverse Proxy + +If you're running Twenty behind a reverse proxy and experiencing connection issues: + +1. **Verify SERVER_URL:** + + Ensure `SERVER_URL` in your `.env` file matches your external access URL, including `https` if SSL is enabled. + +2. **Check Reverse Proxy Settings:** + + * Confirm that your reverse proxy is correctly forwarding requests to the Twenty server. + * Ensure headers like `X-Forwarded-For` and `X-Forwarded-Proto` are properly set. + +3. **Restart Services:** + + After making changes, restart both the reverse proxy and Twenty containers. + +#### Error when uploading an image - permission denied + +Switching the data folder ownership on the host from root to another user and group resolves this problem. + +## Getting Help + +If you encounter issues not covered in this guide: + +* Check Logs: + + View container logs for error messages: + + ```bash + docker compose logs + ``` + +* Community Support: + + Reach out to the [Twenty community](https://github.com/twentyhq/twenty/issues) or [support channels](https://discord.gg/cx5n4Jzs57) for assistance. diff --git a/packages/twenty-docs/l/fr/developers/self-host/capabilities/upgrade-guide.mdx b/packages/twenty-docs/l/fr/developers/self-host/capabilities/upgrade-guide.mdx new file mode 100644 index 0000000000..03a53f5685 --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/self-host/capabilities/upgrade-guide.mdx @@ -0,0 +1,381 @@ +--- +title: Upgrade guide +--- + +## General guidelines + +**Always make sure to back up your database before starting the upgrade process** by running `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`. + +To restore backup, run `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`. + +If you used Docker Compose, follow these steps: + +1. In a terminal, on the host where Twenty is running, turn off Twenty: `docker compose down` + +2. Upgrade the version by changing the `TAG` value in the .env file near your docker-compose. ( We recommend consuming `major.minor` version such as `v0.53` ) + +3. Bring Twenty back online with `docker compose up -d` + +If you want to upgrade your instance by few versions, e.g. from v0.33.0 to v0.35.0, you have to upgrade your instance sequentially, in this example from v0.33.0 to v0.34.0, then from v0.34.0 to v0.35.0. + +**Make sure that after each upgraded version you have non-corrupted backup.** + +## Version-specific upgrade steps + +## v1.0 + +Hello Twenty v1.0! 🎉 + +## v0.60 + +### Performance Enhancements + +All interactions with the metadata API have been optimized for better performance, particularly for object metadata manipulation and workspace creation operations. + +We've refactored our caching strategy to prioritize cache hits over database queries when possible, significantly improving the performance of metadata API operations. + +If you encounter any runtime issues after upgrading, you may need to flush your cache to ensure it's synchronized with the latest changes. Run this command in your twenty-server container: + +```bash +yarn command:prod cache:flush +``` + +### v0.55 + +Upgrade your Twenty instance to use v0.55 image + +You don't need to run any command anymore, the new image will automatically care about running all required migrations. + +### `User does not have permission` error + +If you encounter authorization errors on most requests after upgrading, you may need to flush your cache to recompute the latest permissions. + +In your `twenty-server` container, run: + +```bash +yarn command:prod cache:flush +``` + +This issue is specific to this Twenty version and should not be required for future upgrades. + +### v0.54 + +Since version `0.53`, no manual actions needed. + +#### Metadata schema deprecation + +We've merged the `metadata` schema into the `core` one to simplify data retrieval from `TypeORM`. +We have merged the `migrate` command step within the `upgrade` command. We do not recommend running `migrate` manually within any of your server/worker containers. + +### Since v0.53 + +Starting from `0.53`, upgrade is programmatically done within the `DockerFile`, this means from now on, you shouldn't have to run any command manually anymore. + +Make sure to keep upgrading your instance sequentially, without skipping any major version (e.g. `0.43.3` to `0.44.0` is allowed, but `0.43.1` to `0.45.0` isn't), else could lead to workspace version desynchronization that could result in runtime error and missing functionality. + +To check if a workspace has been correctly migrated you can review its version in database in `core.workspace` table. + +It should always be in the range of your current Twenty's instance `major.minor` version, you can view your instance version in the admin panel (at `/settings/admin-panel`, accessible if your user has `canAccessFullAdminPanel` property set to true in the database) or by running `echo $APP_VERSION` in your `twenty-server` container. + +To fix a desynchronized workspace version, you will have to upgrade from the corresponding twenty's version following related upgrade guide sequentially and so on until it reaches desired version. + +#### `auditLog` removal + +We've removed the auditLog standard object, which means your backup size might be significantly reduced after this migration. + +### v0.51 to v0.52 + +Upgrade your Twenty instance to use v0.52 image + +``` +yarn database:migrate:prod +yarn command:prod upgrade +``` + +#### I have a workspace blocked in version between `0.52.0` and `0.52.6` + +Unfortunately `0.52.0` and `0.52.6` have been completely removed from dockerHub. +You will have to manually update your workspace version to `0.51.0` in database and upgrade using twenty version `0.52.11` following its just above upgrade guide. + +### v0.50 to v0.51 + +Upgrade your Twenty instance to use v0.51 image + +``` +yarn database:migrate:prod +yarn command:prod upgrade +``` + +### v0.44.0 to v0.50.0 + +Upgrade your Twenty instance to use v0.50.0 image + +``` +yarn database:migrate:prod +yarn command:prod upgrade +``` + +#### Docker-compose.yml mutation + +This version includes a `docker-compose.yml` mutation to give `worker` service access to the `server-local-data` volume. +Please update your local `docker-compose.yml` with [v0.50.0 docker-compose.yml](https://github.com/twentyhq/twenty/blob/v0.50.0/packages/twenty-docker/docker-compose.yml) + +### v0.43.0 to v0.44.0 + +Upgrade your Twenty instance to use v0.44.0 image + +``` +yarn database:migrate:prod +yarn command:prod upgrade +``` + +### v0.42.0 to v0.43.0 + +Upgrade your Twenty instance to use v0.43.0 image + +``` +yarn database:migrate:prod +yarn command:prod upgrade +``` + +In this version, we have also switched to postgres:16 image in docker-compose.yml. + +#### (Option 1) Database migration + +Keeping the existing postgres-spilo image is fine, but you will have to freeze the version in your docker-compose.yml to be 0.43.0. + +#### (Option 2) Database migration + +If you want to migrate your database to the new postgres:16 image, please follow these steps: + +1. Dump your database from the old postgres-spilo container + +``` +docker exec -it twenty-db-1 sh +pg_dump -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} > databases_backup.sql +exit +docker cp twenty-db-1:/home/postgres/databases_backup.sql . +``` + +Make sure your dump file is not empty. + +2. Upgrade your docker-compose.yml to use postgres:16 image as in the [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) file. + +3. Restore the database to the new postgres:16 container + +``` +docker cp databases_backup.sql twenty-db-1:/databases_backup.sql +docker exec -it twenty-db-1 sh +psql -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} -f databases_backup.sql +exit +``` + +### v0.41.0 to v0.42.0 + +Upgrade your Twenty instance to use v0.42.0 image + +``` +yarn database:migrate:prod +yarn command:prod upgrade-0.42 +``` + +**Environment Variables** + +* Removed: `FRONT_PORT`, `FRONT_PROTOCOL`, `FRONT_DOMAIN`, `PORT` +* Added: `FRONTEND_URL`, `NODE_PORT`, `MAX_NUMBER_OF_WORKSPACES_DELETED_PER_EXECUTION`, `MESSAGING_PROVIDER_MICROSOFT_ENABLED`, `CALENDAR_PROVIDER_MICROSOFT_ENABLED`, `IS_MICROSOFT_SYNC_ENABLED` + +### v0.40.0 to v0.41.0 + +Upgrade your Twenty instance to use v0.41.0 image + +``` +yarn database:migrate:prod +yarn command:prod upgrade-0.41 +``` + +**Environment Variables** + +* Removed: `AUTH_MICROSOFT_TENANT_ID` + +### v0.35.0 to v0.40.0 + +Upgrade your Twenty instance to use v0.40.0 image + +``` +yarn database:migrate:prod +yarn command:prod upgrade-0.40 +``` + +**Environment Variables** + +* Added: `IS_EMAIL_VERIFICATION_REQUIRED`, `EMAIL_VERIFICATION_TOKEN_EXPIRES_IN`, `WORKFLOW_EXEC_THROTTLE_LIMIT`, `WORKFLOW_EXEC_THROTTLE_TTL` + +### v0.34.0 to v0.35.0 + +Upgrade your Twenty instance to use v0.35.0 image + +``` +yarn database:migrate:prod +yarn command:prod upgrade-0.35 +``` + +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.35` takes care of the data migration of all workspaces. + +**Environment Variables** + +* We replaced `ENABLE_DB_MIGRATIONS` with `DISABLE_DB_MIGRATIONS` (default value is now `false`, you probably don't have to set anything) + +### v0.33.0 to v0.34.0 + +Upgrade your Twenty instance to use v0.34.0 image + +``` +yarn database:migrate:prod +yarn command:prod upgrade-0.34 +``` + +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.34` takes care of the data migration of all workspaces. + +**Environment Variables** + +* Removed: `FRONT_BASE_URL` +* Added: `FRONT_DOMAIN`, `FRONT_PROTOCOL`, `FRONT_PORT` + +We have updated the way we handle the frontend URL. +You can now set the frontend URL using the `FRONT_DOMAIN`, `FRONT_PROTOCOL` and `FRONT_PORT` variables. +If FRONT_DOMAIN is not set, the frontend URL will fall back to `SERVER_URL`. + +### v0.32.0 to v0.33.0 + +Upgrade your Twenty instance to use v0.33.0 image + +``` +yarn command:prod cache:flush +yarn database:migrate:prod +yarn command:prod upgrade-0.33 +``` + +The `yarn command:prod cache:flush` command will flush the Redis cache. +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.33` takes care of the data migration of all workspaces. + +Starting from this version, twenty-postgres image for DB became deprecated and twenty-postgres-spilo is used instead. +If you want to keep using twenty-postgres image, simply replace `twentycrm/twenty-postgres:${TAG}` with `twentycrm/twenty-postgres` in docker-compose.yml. + +### v0.31.0 to v0.32.0 + +Upgrade your Twenty instance to use v0.32.0 image + +**Schema and data migration** + +``` +yarn database:migrate:prod +yarn command:prod upgrade-0.32 +``` + +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.32` takes care of the data migration of all workspaces. + +**Environment Variables** + +We have updated the way we handle the Redis connection. + +* Removed: `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD` +* Added: `REDIS_URL` + +Update your `.env` file to use the new `REDIS_URL` variable instead of the individual Redis connection parameters. + +We have also simplified the way we handle the JWT tokens. + +* Removed: `ACCESS_TOKEN_SECRET`, `LOGIN_TOKEN_SECRET`, `REFRESH_TOKEN_SECRET`, `FILE_TOKEN_SECRET` +* Added: `APP_SECRET` + +Update your `.env` file to use the new `APP_SECRET` variable instead of the individual tokens secrets (you can use the same secret as before or generate a new random string) + +**Connected Account** + +If you are using connected account to synchronize your Google emails and calendars, you will need to activate the [People API](https://developers.google.com/people) on your Google Admin console. + +### v0.30.0 to v0.31.0 + +Upgrade your Twenty instance to use v0.31.0 image + +**Schema and data migration**: + +``` +yarn database:migrate:prod +yarn command:prod upgrade-0.31 +``` + +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.31` takes care of the data migration of all workspaces. + +### v0.24.0 to v0.30.0 + +Upgrade your Twenty instance to use v0.30.0 image + +**Breaking change**: +To enhance performances, Twenty now requires redis cache to be configured. We have updated our [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) to reflect this. +Make sure to update your configuration and to update your environment variables accordingly: + +``` +REDIS_HOST={your-redis-host} +REDIS_PORT={your-redis-port} +CACHE_STORAGE_TYPE=redis +``` + +**Schema and data migration**: + +``` +yarn database:migrate:prod +yarn command:prod upgrade-0.30 +``` + +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.30` takes care of the data migration of all workspaces. + +### v0.23.0 to v0.24.0 + +Upgrade your Twenty instance to use v0.24.0 image + +Run the following commands: + +``` +yarn database:migrate:prod +yarn command:prod upgrade-0.24 +``` + +The `yarn database:migrate:prod` command will apply the migrations to the database structure (core and metadata schemas) +The `yarn command:prod upgrade-0.24` takes care of the data migration of all workspaces. + +### v0.22.0 to v0.23.0 + +Upgrade your Twenty instance to use v0.23.0 image + +Run the following commands: + +``` +yarn database:migrate:prod +yarn command:prod upgrade-0.23 +``` + +The `yarn database:migrate:prod` command will apply the migrations to the Database. +The `yarn command:prod upgrade-0.23` takes care of the data migration, including transferring activities to tasks/notes. + +### v0.21.0 to v0.22.0 + +Upgrade your Twenty instance to use v0.22.0 image + +Run the following commands: + +``` +yarn database:migrate:prod +yarn command:prod workspace:sync-metadata -f +yarn command:prod upgrade-0.22 +``` + +The `yarn database:migrate:prod` command will apply the migrations to the Database. +The `yarn command:prod workspace:sync-metadata -f` command will sync the definition of standard objects to the metadata tables and apply to required migrations to existing workspaces. +The `yarn command:prod upgrade-0.22` command will apply specific data transformations to adapt to the new object defaultRequestInstrumentationOptions. diff --git a/packages/twenty-docs/l/fr/developers/self-host/self-host.mdx b/packages/twenty-docs/l/fr/developers/self-host/self-host.mdx new file mode 100644 index 0000000000..13056b71de --- /dev/null +++ b/packages/twenty-docs/l/fr/developers/self-host/self-host.mdx @@ -0,0 +1,30 @@ +--- +title: Self-Host +description: Deploy and manage Twenty on your own infrastructure. +--- + + + AI + + +## Overview + +Twenty can be self-hosted on your own infrastructure, giving you full control over your data and deployment. + +## Why Self-Host? + +* **Data ownership**: Keep all CRM data on your own servers +* **Compliance**: Meet regulatory requirements for data residency +* **Customization**: Full access to modify and extend the platform + +## Getting Started + + + + Quick setup with Docker + + + + Deploy on AWS, GCP, or Azure + + diff --git a/packages/twenty-docs/l/fr/navigation.json b/packages/twenty-docs/l/fr/navigation.json index 1c7f64dad9..8096fbf4ac 100644 --- a/packages/twenty-docs/l/fr/navigation.json +++ b/packages/twenty-docs/l/fr/navigation.json @@ -1,91 +1,203 @@ { "tabs": { "userGuide": { - "label": "Guide de l'utilisateur", + "label": "User Guide", "groups": { - "gettingStarted": { - "label": "Commencer" + "discoverTwenty": { + "label": "Discover Twenty", + "groups": { + "gettingStartedCapabilities": { + "label": "Capabilities" + }, + "gettingStartedHowTos": { + "label": "How-Tos" + } + } }, "dataModel": { - "label": "Modèle de données" + "label": "Data Model", + "groups": { + "dataModelCapabilities": { + "label": "Capabilities" + }, + "dataModelHowTos": { + "label": "How-Tos" + } + } }, - "crmEssentials": { - "label": "Essentiels du CRM" + "dataMigration": { + "label": "Data Migration", + "groups": { + "dataMigrationCapabilities": { + "label": "Capabilities" + }, + "dataMigrationHowTos": { + "label": "How-Tos" + } + } }, - "views": { - "label": "Vues" + "calendarEmails": { + "label": "Calendar & Emails", + "groups": { + "calendarEmailsCapabilities": { + "label": "Capabilities" + }, + "calendarEmailsHowTos": { + "label": "How-Tos" + } + } }, "workflows": { - "label": "Flux de travail" + "label": "Workflows", + "groups": { + "workflowsCapabilities": { + "label": "Capabilities" + }, + "workflowsHowTos": { + "label": "How-Tos", + "groups": { + "crmAutomations": { + "label": "CRM Automations" + }, + "connectToOtherTools": { + "label": "Connect to Other Tools" + }, + "advancedConfigurations": { + "label": "Advanced Configurations" + }, + "needMoreHelp": { + "label": "Need More Help" + } + } + } + } }, - "collaboration": { - "label": "Collaboration" + "ai": { + "label": "AI", + "groups": { + "aiCapabilities": { + "label": "Capabilities" + }, + "aiHowTos": { + "label": "How-Tos" + } + } }, - "integrationsApi": { - "label": "Intégrations & API" + "viewsPipelines": { + "label": "Views & Pipelines", + "groups": { + "viewsPipelinesCapabilities": { + "label": "Capabilities" + }, + "viewsPipelinesHowTos": { + "label": "How-Tos" + } + } }, - "reporting": { - "label": "Rapports" + "dashboards": { + "label": "Dashboards", + "groups": { + "dashboardsCapabilities": { + "label": "Capabilities" + }, + "dashboardsHowTos": { + "label": "How-Tos" + } + } + }, + "permissionsAccess": { + "label": "Permissions & Access", + "groups": { + "permissionsAccessCapabilities": { + "label": "Capabilities" + }, + "permissionsAccessHowTos": { + "label": "How-Tos" + } + } + }, + "billing": { + "label": "Billing", + "groups": { + "billingCapabilities": { + "label": "Capabilities" + }, + "billingHowTos": { + "label": "How-Tos" + } + } }, "settings": { - "label": "Paramètres" - }, - "pricing": { - "label": "Tarifs" - }, - "resources": { - "label": "Ressources" + "label": "Settings", + "groups": { + "settingsCapabilities": { + "label": "Capabilities" + }, + "settingsHowTos": { + "label": "How-Tos" + } + } } } }, "developers": { - "label": "Développeurs", + "label": "Developers", "groups": { "developersGroup": { - "label": "Développeurs" + "label": "Developers" }, - "devGettingStarted": { - "label": "Commencer", + "extend": { + "label": "Extend", "groups": { - "selfHosting": { - "label": "Auto-hébergement" - }, - "apiAndWebhooks": { - "label": "API et webhooks" + "extendCapabilities": { + "label": "Capabilities" } } }, - "contributing": { - "label": "Contribuer", + "selfHost": { + "label": "Self-Host", "groups": { - "frontendDevelopment": { - "label": "Développement du frontend", + "selfHostCapabilities": { + "label": "Capabilities" + } + } + }, + "contribute": { + "label": "Contribute", + "groups": { + "contributeCapabilities": { + "label": "Capabilities", "groups": { - "twentyUi": { - "label": "Twenty UI", + "frontendDevelopment": { + "label": "Frontend Development", "groups": { - "display": { - "label": "Afficher" - }, - "feedback": { - "label": "Vos commentaires" - }, - "input": { - "label": "Input" - }, - "navigation": { - "label": "Navigation" + "twentyUi": { + "label": "Twenty UI", + "groups": { + "display": { + "label": "Display" + }, + "feedback": { + "label": "Feedback" + }, + "input": { + "label": "Input" + }, + "navigation": { + "label": "Navigation" + } + } } } + }, + "backendDevelopment": { + "label": "Backend Development" } } - }, - "backendDevelopment": { - "label": "Développement du backend" } } } } } } -} \ No newline at end of file +} diff --git a/packages/twenty-docs/l/fr/twenty-ui/display/app-tooltip.mdx b/packages/twenty-docs/l/fr/twenty-ui/display/app-tooltip.mdx index 6b43167a3b..4e620eedc7 100644 --- a/packages/twenty-docs/l/fr/twenty-ui/display/app-tooltip.mdx +++ b/packages/twenty-docs/l/fr/twenty-ui/display/app-tooltip.mdx @@ -1,16 +1,16 @@ --- -title: Info-bulle de l'application +title: App Tooltip image: /images/user-guide/tips/light-bulb.png --- - En-tête + Header -Un message bref qui affiche des informations supplémentaires lorsqu'un utilisateur interagit avec un élément. +A brief message that displays additional information when a user interacts with an element. - + ```jsx import { AppTooltip } from "@/ui/display/tooltip/AppTooltip"; @@ -18,12 +18,12 @@ Un message bref qui affiche des informations supplémentaires lorsqu'un utilisat return ( <>

- Aperçus client + Customer Insights

- - | Propriétés | Type | Description | - | ----------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | nomDeClasse | chaîne | Classe CSS facultative pour le style supplémentaire | - | sélecteurAncre | Sélecteur CSS | Sélecteur pour l'ancre de l'info-bulle (l'élément qui déclenche l'info-bulle) | - | contenu | chaîne | Le contenu que vous souhaitez afficher dans l'info-bulle | - | délaiMasquer | nombre | Le délai avant de masquer l'info-bulle après que le curseur ait quitté l'ancre | - | décalage | nombre | Le décalage en pixels pour positionner l'info-bulle | - | pasDeFlèche | booléen | Si `vrai`, masque la flèche sur l'info-bulle | - | estOuvert | booléen | Si `vrai`, l'info-bulle est ouverte par défaut | - | emplacement | Chaîne `PlacesType` de `react-tooltip` | Spécifie le placement de l'info-bulle. Les valeurs incluent `bottom`, `left`, `right`, `top`, `top-start`, `top-end`, `right-start`, `right-end`, `bottom-start`, `bottom-end`, `left-start`, et `left-end` | - | stratégiePositionnement | Chaîne `PositionStrategy` de `react-tooltip` | Stratégie de positionnement pour l'info-bulle. A deux valeurs : `absolute` et `fixed` | + + | Props | Type | Description | + | ---------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | className | string | Optional CSS class for additional styling | + | anchorSelect | CSS selector | Selector for the tooltip anchor (the element that triggers the tooltip) | + | content | string | The content you want to display within the tooltip | + | delayHide | number | The delay in seconds before hiding the tooltip after the cursor leaves the anchor | + | offset | number | The offset in pixels for positioning the tooltip | + | noArrow | boolean | If `true`, hides the arrow on the tooltip | + | isOpen | boolean | If `true`, the tooltip is open by default | + | place | `PlacesType` string from `react-tooltip` | Specifies the placement of the tooltip. Values include `bottom`, `left`, `right`, `top`, `top-start`, `top-end`, `right-start`, `right-end`, `bottom-start`, `bottom-end`, `left-start`, and `left-end` | + | positionStrategy | `PositionStrategy` string from `react-tooltip` | Position strategy for the tooltip. Has two values: `absolute` and `fixed` |
-## Texte débordant avec info-bulle +## Overflowing Text with Tooltip -Gère le texte débordant et affiche une info-bulle lorsque le texte déborde. +Handles overflowing text and displays a tooltip when the text overflows. - + ```jsx import { OverflowingTextWithTooltip } from 'twenty-ui/display'; export const MyComponent = () => { const crmTaskDescription = - 'Suivre avec le client concernant son enquête récente sur le produit. Discuter des options de prix, répondre à toute préoccupation et fournir des informations additionnelles sur le produit. Enregistrer les détails de la conversation dans le CRM pour référence future.'; + 'Follow up with client regarding their recent product inquiry. Discuss pricing options, address any concerns, and provide additional product information. Record the details of the conversation in the CRM for future reference.'; return ; }; ``` - - | Propriétés | Type | Description | - | ---------- | ------ | ----------------------------------------------------------------------- | - | texte | chaîne | Le contenu que vous souhaitez afficher dans la zone de texte débordante | + + | Props | Type | Description | + | ----- | ------ | ------------------------------------------------------------ | + | text | string | The content you want to display in the overflowing text area | diff --git a/packages/twenty-docs/l/fr/twenty-ui/display/checkmark.mdx b/packages/twenty-docs/l/fr/twenty-ui/display/checkmark.mdx new file mode 100644 index 0000000000..ef84d5c2d5 --- /dev/null +++ b/packages/twenty-docs/l/fr/twenty-ui/display/checkmark.mdx @@ -0,0 +1,58 @@ +--- +title: Checkmark +image: /images/user-guide/tasks/tasks_header.png +--- + + + Header + + +Represents a successful or completed action. + + + + ```jsx + import { Checkmark } from 'twenty-ui/display'; + + export const MyComponent = () => { + return ; + }; + ``` + + + + Extends `React.ComponentPropsWithoutRef<'div'>` and accepts all the props of a regular `div` element. + + + +## Animated Checkmark + +Represents a checkmark icon with the added feature of animation. + + + + ```jsx + import { AnimatedCheckmark } from 'twenty-ui/display'; + + export const MyComponent = () => { + return ( + + ); + }; + ``` + + + + | Props | Type | Description | Default | + | ----------- | ------- | ------------------------------------------- | ----------- | + | isAnimating | boolean | Controls whether the checkmark is animating | false | + | color | string | Color of the checkmark | | + | duration | number | The duration of the animation in seconds | 0.5 seconds | + | size | number | The size of the checkmark | 28 pixels | + + diff --git a/packages/twenty-docs/l/fr/twenty-ui/display/chip.mdx b/packages/twenty-docs/l/fr/twenty-ui/display/chip.mdx index 3d0c83086b..ded2fd1c77 100644 --- a/packages/twenty-docs/l/fr/twenty-ui/display/chip.mdx +++ b/packages/twenty-docs/l/fr/twenty-ui/display/chip.mdx @@ -1,5 +1,5 @@ --- -title: Puce +title: Chip image: /images/user-guide/github/github-header.png --- @@ -7,53 +7,48 @@ image: /images/user-guide/github/github-header.png Header -Un élément visuel que vous pouvez utiliser comme un conteneur cliquable ou non cliquable avec une étiquette, des composants optionnels à gauche et à droite, et diverses options de style pour afficher des étiquettes et des tags. +A visual element that you can use as a clickable or non-clickable container with a label, optional left and right components, and various styling options to display labels and tags. + + ```jsx + import { Chip } from 'twenty-ui/components'; - + export const MyComponent = () => { + return ( + + ); + }; -```jsx -import { Chip } from 'twenty-ui/components'; + ``` + -export const MyComponent = () => { - return ( - - ); -}; - -``` - - - - - -| Propriétés | Type | Description | -| ------------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | -| linkToEntity | chaîne | Le lien vers l'entité | -| entityId | chaîne | L'identifiant unique pour l'entité | -| nom | chaîne | Le nom de l'entité | -| pictureUrl | chaîne | Image", | -| avatarType | Type d'avatar | Le type d'avatar que vous souhaitez afficher. A deux options : `arrondie` et `carrée` | -| variante | `EntityChipVariant` enum | Variante de la puce entité que vous souhaitez afficher. A deux options : `régulier` et `transparent` | -| LeftIcon | ComposantIcône | Un composant React représentant une icône. Affiché sur le côté gauche de la puce | - - + + | Props | Type | Description | + | ------------ | ------------------------ | -------------------------------------------------------------------------------------------- | + | linkToEntity | string | The link to the entity | + | entityId | string | The unique identifier for the entity | + | name | string | The name of the entity | + | pictureUrl | string | s picture", | + | avatarType | Avatar Type | The type of avatar you want to display. Has two options: `rounded` and `squared` | + | variant | `EntityChipVariant` enum | Variant of the entity chip you want to display. Has two options: `regular` and `transparent` | + | LeftIcon | IconComponent | A React component representing an icon. Displayed on the left side of the chip | + -## Exemples +## Examples -### Puce transparente désactivée +### Transparent Disabled Chip ```jsx import { Chip } from 'twenty-ui/components'; @@ -76,9 +71,9 @@ export const MyComponent = () => { ``` -
+
-### Puce désactivée avec infobulle +### Disabled Chip with Tooltip ```jsx import { Chip } from "twenty-ui/components"; @@ -100,49 +95,44 @@ export const MyComponent = () => { }; ``` -## Puce entité +## Entity Chip -Un élément semblable à une puce pour afficher des informations sur une entité. +A Chip-like element to display information about an entity. + + ```jsx + import { BrowserRouter as Router } from 'react-router-dom'; + import { IconTwentyStar } from 'twenty-ui/display'; + import { Chip } from 'twenty-ui/components'; - + export const MyComponent = () => { + return ( + + + + ); + }; + ``` + -```jsx -import { BrowserRouter as Router } from 'react-router-dom'; -import { IconTwentyStar } from 'twenty-ui/display'; -import { Chip } from 'twenty-ui/components'; - -export const MyComponent = () => { - return ( - - - - ); -}; -``` - - - - - -| Propriétés | Type | Description | -| ------------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | -| linkToEntity | chaîne | Le lien vers l'entité | -| entityId | chaîne | L'identifiant unique pour l'entité | -| nom | chaîne | Le nom de l'entité | -| pictureUrl | chaîne | Image", | -| avatarType | Type d'avatar | Le type d'avatar que vous souhaitez afficher. A deux options : `arrondie` et `carrée` | -| variante | `EntityChipVariant` enum | Variante de la puce entité que vous souhaitez afficher. A deux options : `régulier` et `transparent` | -| LeftIcon | ComposantIcône | Un composant React représentant une icône. Affiché sur le côté gauche de la puce | - - + + | Props | Type | Description | + | ------------ | ------------------------ | -------------------------------------------------------------------------------------------- | + | linkToEntity | string | The link to the entity | + | entityId | string | The unique identifier for the entity | + | name | string | The name of the entity | + | pictureUrl | string | s picture", | + | avatarType | Avatar Type | The type of avatar you want to display. Has two options: `rounded` and `squared` | + | variant | `EntityChipVariant` enum | Variant of the entity chip you want to display. Has two options: `regular` and `transparent` | + | LeftIcon | IconComponent | A React component representing an icon. Displayed on the left side of the chip | + diff --git a/packages/twenty-docs/l/fr/twenty-ui/display/icons.mdx b/packages/twenty-docs/l/fr/twenty-ui/display/icons.mdx index af7d9f31ab..2d73154c8d 100644 --- a/packages/twenty-docs/l/fr/twenty-ui/display/icons.mdx +++ b/packages/twenty-docs/l/fr/twenty-ui/display/icons.mdx @@ -1,5 +1,5 @@ --- -title: Icônes +title: Icons image: /images/user-guide/objects/objects.png --- @@ -7,77 +7,67 @@ image: /images/user-guide/objects/objects.png Header -Une liste d'icônes utilisées dans notre application. +A list of icons used throughout our app. -## Icônes Tabler +## Tabler Icons -Nous utilisons les icônes Tabler pour React dans toute l'application. +We use Tabler icons for React throughout the app. + +
-
+ ``` + yarn add @tabler/icons-react + ``` +
-``` -yarn add @tabler/icons-react -``` + + You can import each icon as a component. Here's an example: - +
- + ```jsx + import { IconArrowLeft } from "@tabler/icons-react"; -Vous pouvez importer chaque icône en tant que composant. Here's an example:
- -```jsx -import { IconArrowLeft } from "@tabler/icons-react"; - -export const MyComponent = () => { - return ; -}; -``` - -
- - - -| Propriétés | Type | Description | Par défaut | -| ---------- | ------ | --------------------------------------------- | --------------- | -| taille | nombre | La hauteur et la largeur de l'icône en pixels | 24 | -| couleur | chaîne | La couleur des icônes | couleurCourante | -| trait | nombre | La largeur du trait de l'icône en pixels | 2 | - - + export const MyComponent = () => { + return ; + }; + ``` +
+ + | Props | Type | Description | Default | + | ------ | ------ | ------------------------------------------ | ------------ | + | size | number | The height and width of the icon in pixels | 24 | + | color | string | The color of the icons | currentColor | + | stroke | number | The stroke width of the icon in pixels | 2 | +
-## Icônes personnalisées +## Custom Icons -En plus des icônes Tabler, l'application utilise également certaines icônes personnalisées. +In addition to Tabler icons, the app also uses some custom icons. -### Icône Carnet d'adresses +### Icon Address Book -Affiche une icône de carnet d'adresses. +Displays an address book icon. + + ```jsx + import { IconAddressBook } from 'twenty-ui/display'; - - -```jsx -import { IconAddressBook } from 'twenty-ui/display'; - -export const MyComponent = () => { - return ; -}; -``` - - - - - -| Propriétés | Type | Description | Par défaut | -| ---------- | ------ | --------------------------------------------- | ---------- | -| taille | nombre | La hauteur et la largeur de l'icône en pixels | 24 | -| trait | nombre | La largeur du trait de l'icône en pixels | 2 | - - + export const MyComponent = () => { + return ; + }; + ``` + + + | Props | Type | Description | Default | + | ------ | ------ | ------------------------------------------ | ------- | + | size | number | The height and width of the icon in pixels | 24 | + | stroke | number | The stroke width of the icon in pixels | 2 | + diff --git a/packages/twenty-docs/l/fr/twenty-ui/display/soon-pill.mdx b/packages/twenty-docs/l/fr/twenty-ui/display/soon-pill.mdx new file mode 100644 index 0000000000..56ace0bae7 --- /dev/null +++ b/packages/twenty-docs/l/fr/twenty-ui/display/soon-pill.mdx @@ -0,0 +1,18 @@ +--- +title: Soon Pill +image: /images/user-guide/kanban-views/kanban.png +--- + + + Header + + +A small badge or "pill" to indicate something is coming soon. + +```jsx +import { SoonPill } from "@/ui/display/pill/components/SoonPill"; + +export const MyComponent = () => { + return ; +}; +``` diff --git a/packages/twenty-docs/l/fr/twenty-ui/display/tag.mdx b/packages/twenty-docs/l/fr/twenty-ui/display/tag.mdx new file mode 100644 index 0000000000..a2226c88d4 --- /dev/null +++ b/packages/twenty-docs/l/fr/twenty-ui/display/tag.mdx @@ -0,0 +1,38 @@ +--- +title: Tag +image: /images/user-guide/table-views/table.png +--- + + + Header + + +Component to visually categorize or label content. + + + + ```jsx + import { Tag } from "@/ui/display/tag/components/Tag"; + + export const MyComponent = () => { + return ( + console.log("click")} + /> + ); + }; + ``` + + + + | Props | Type | Description | + | --------- | -------- | --------------------------------------------------------------------------------------------------------------------------- | + | className | string | Optional name for additional styling | + | color | string | Color of the tag. Options include: `green`, `turquoise`, `sky`, `blue`, `purple`, `pink`, `red`, `orange`, `yellow`, `gray` | + | text | string | The content of the tag | + | onClick | function | Optional function called when a user clicks on the tag | + + diff --git a/packages/twenty-docs/l/fr/twenty-ui/input.mdx b/packages/twenty-docs/l/fr/twenty-ui/input.mdx index 9c298b3927..2da701caf5 100644 --- a/packages/twenty-docs/l/fr/twenty-ui/input.mdx +++ b/packages/twenty-docs/l/fr/twenty-ui/input.mdx @@ -1,8 +1,8 @@ --- -title: "Entrée " +title: Input image: /images/user-guide/tips/light-bulb.png --- - En-tête + Header diff --git a/packages/twenty-docs/l/fr/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/fr/twenty-ui/input/block-editor.mdx index 5b1bf2f90b..9943fa5f5d 100644 --- a/packages/twenty-docs/l/fr/twenty-ui/input/block-editor.mdx +++ b/packages/twenty-docs/l/fr/twenty-ui/input/block-editor.mdx @@ -1,5 +1,5 @@ --- -title: Éditeur de Blocs +title: Block Editor image: /images/user-guide/api/api.png --- @@ -7,28 +7,25 @@ image: /images/user-guide/api/api.png Header -Utilise un éditeur de texte riche basé sur des blocs de [BlockNote](https://www.blocknotejs.org/) pour permettre aux utilisateurs de modifier et de visualiser des blocs de contenu. +Uses a block-based rich text editor from [BlockNote](https://www.blocknotejs.org/) to allow users to edit and view blocks of content. - + + ```jsx + import { useBlockNote } from "@blocknote/react"; + import { BlockEditor } from "@/ui/input/editor/components/BlockEditor"; -```jsx -import { useBlockNote } from "@blocknote/react"; -import { BlockEditor } from "@/ui/input/editor/components/BlockEditor"; + export const MyComponent = () => { + const BlockNoteEditor = useBlockNote(); -export const MyComponent = () => { - const BlockNoteEditor = useBlockNote(); + return ; + }; + ``` + - return ; -}; -``` - - - - -| Propriétés | Type | Description | -| ---------- | ----------------- | ---------------------------------------------------- | -| éditeur | `BlockNoteEditor` | L'instance de l'éditeur de blocs ou sa configuration | - - + + | Props | Type | Description | + | ------ | ----------------- | ------------------------------------------ | + | editor | `BlockNoteEditor` | The block editor instance or configuration | + diff --git a/packages/twenty-docs/l/fr/twenty-ui/input/buttons.mdx b/packages/twenty-docs/l/fr/twenty-ui/input/buttons.mdx new file mode 100644 index 0000000000..1c53eb1816 --- /dev/null +++ b/packages/twenty-docs/l/fr/twenty-ui/input/buttons.mdx @@ -0,0 +1,439 @@ +--- +title: Buttons +image: /images/user-guide/views/filter.png +--- + + + Header + + +A list of buttons and button groups used throughout the app. + +## Button + + + + ```jsx + import { Button } from "@/ui/input/button/components/Button"; + + export const MyComponent = () => { + return ( +